{"version":3,"file":"aiPrompt.js","mappings":"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,sBAEjE,GAAIiuF,EAAgCjuF,EAAMuV,GAAM,EAAOiQ,GAAW,CACvE,IAAMm1C,EAAiBn1C,GAAUiR,YAAYz2B,EAAK7D,IAClD,MAAgB,UAAToZ,EACFolD,GAAgB0c,eAAiB1c,GAAgByc,cAClDzc,GAAgByc,aACtB,CAGF,EAlyBA,IAAAjsD,EAAA1zB,EAAA,OACMy2F,EAAuB,IAAI3yE,IAAI,CACnC,qBACA,uBACA,yBACA,0BACA,2BACA,gCACA,yBACA,yBACA,0BACA,6BACA,2BACA,sBACA,kBACA,qBACA,mBACA,sBACA,wBACA,mBACA,8BACA,4BACA,4BACA,6BACA,2BACA,6BACA,mBACA,sBACA,oBACA,uBACA,8BACA,oBACA,iBACA,oBACA,kBACA,qBACA,kBACA,4BACA,2BACA,mBACA,oBACA,+BACA,uBACA,oBACA,sBACA,yBACA,kBACA,qBACA,wBACA,mBACA,6BACA,sCACA,4CACA,sBACA,mBACA,iBACA,oBACA,2BACA,kBACA,6BACA,oBACA,yBACA,gBACA,uBACA,yBACA,4BACA,0BACA,6BACA,6BACA,oBACA,eACA,yBACA,gBACA,mBACA,iBACA,oBACA,sBACA,2BACA,iBACA,2BACA,6BACA,0BACA,0BACA,0BACA,oCACA,gBACA,2BACA,0BACA,kBACA,qBACA,wBACA,mBACA,sBACA,qBACA,mBACA,sBACA,wBACA,mBACA,mBACA,sBACA,uBACA,8BACA,qBACA,sBACA,uBACA,yBACA,sBACA,8BACA,oBACA,oBACA,kBACA,kBACA,mBACA,sBACA,6BACA,uBACA,6BACA,wBACA,gBACA,0BACA,mBACA,yBACA,oBACA,8BACA,8BACA,iBACA,oBACA,uBACA,4BACA,4BACA,0BACA,6BACA,0BACA,oCACA,wBACA,2BACA,yBACA,6BACA,oCACA,uBACA,qBACA,sBACA,yBACA,4BACA,oBACA,uBACA,2BACA,6BACA,wBACA,2BACA,oBACA,qBACA,wBACA,0BACA,+BACA,oBACA,8BACA,oBACA,+BACA,2BACA,iBACA,2BACA,gBACA,mBACA,cACA,iBACA,uBACA,0BACA,oBACA,+BACA,sBACA,2BACA,wBACA,yBACA,sBACA,wBACA,yBACA,0BACA,qBACA,yBACA,yBACA,8BACA,mBACA,uBACA,wBACA,qBACA,+BACA,mBACA,oBACA,cACA,oBACA,yBACA,oBACA,uBACA,qBACA,uBACA,cACA,oBACA,2BACA,sBACA,mBACA,sBACA,oBACA,uBACA,kBACA,sBACA,6BACA,6BACA,wCACA,uBACA,0BACA,wBACA,0BACA,2BACA,4BACA,yBACA,2BACA,4BACA,0BACA,qBACA,wBACA,8BACA,0BACA,2BACA,kCACA,2BACA,4BACA,gCACA,iCACA,8BACA,kCACA,iBACA,kBACA,4BACA,0BACA,qBACA,sBACA,yBACA,gCACA,sBACA,qCACA,aACA,gBACA,cACA,iBACA,wBACA,cACA,gBACA,iBACA,oBACA,kBACA,wBACA,mBACA,0BACA,6BACA,kCACA,2BACA,uBACA,6BACA,+BACA,6BACA,uCACA,0CACA,0CACA,6BACA,gCACA,qCACA,wBACA,mBACA,mBACA,uBACA,qBACA,wBACA,qBACA,kBACA,kBACA,qBACA,wBACA,sBACA,wBACA,gBACA,mBACA,iBACA,wBACA,cACA,gBACA,4BACA,+BACA,0BACA,6BACA,oCACA,oBACA,6BACA,oCACA,8CACA,wBACA,cACA,iBACA,oBACA,kBACA,wBACA,2BACA,4BACA,2BACA,8BACA,+BACA,iCACA,uBACA,+BACA,sBACA,oBACA,0BACA,mBACA,uBACA,0BACA,wBACA,6BACA,wBACA,2BACA,yBACA,4BACA,wBACA,kBACA,qBACA,mBACA,sBACA,WACA,iBACA,eACA,wBACA,oBACA,qBACA,kBACA,yBACA,uBACA,wBACA,2BACA,wBACA,2BACA,iCACA,wBACA,qBACA,yBACA,yBACA,qBACA,qBACA,+BACA,2BACA,4BACA,sBACA,4BACA,2BACA,yBACA,wBACA,uBACA,2BACA,sBACA,wBACA,6BACA,8BACA,sBACA,yBACA,mBACA,uBACA,8BACA,iCACA,kBACA,wBACA,mCACA,2BACA,mCACA,0BACA,wBACA,4BACA,qBACA,6BAGI4yE,EAAuB,IAAI5yE,IAAI,CACnC,qBACA,uBACA,yBACA,0BACA,2BACA,gCACA,yBACA,yBACA,0BACA,6BACA,2BACA,sBACA,kBACA,qBACA,mBACA,sBACA,wBACA,mBACA,8BACA,4BACA,4BACA,6BACA,2BACA,6BACA,mBACA,sBACA,oBACA,uBACA,8BACA,oBACA,iBACA,oBACA,kBACA,qBACA,kBACA,4BACA,2BACA,mBACA,oBACA,+BACA,uBACA,oBACA,sBACA,yBACA,kBACA,qBACA,wBACA,mBACA,6BACA,sCACA,4CACA,sBACA,mBACA,iBACA,oBACA,2BACA,kBACA,6BACA,oBACA,yBACA,gBACA,uBACA,yBACA,4BACA,0BACA,6BACA,6BACA,oBACA,eACA,yBACA,gBACA,mBACA,iBACA,oBACA,sBACA,2BACA,iBACA,2BACA,6BACA,0BACA,0BACA,0BACA,oCACA,gBACA,2BACA,0BACA,kBACA,qBACA,wBACA,mBACA,sBACA,qBACA,mBACA,sBACA,wBACA,mBACA,mBACA,sBACA,uBACA,8BACA,qBACA,sBACA,uBACA,yBACA,sBACA,8BACA,oBACA,oBACA,kBACA,kBACA,mBACA,sBACA,6BACA,uBACA,6BACA,wBACA,gBACA,0BACA,mBACA,yBACA,oBACA,8BACA,8BACA,iBACA,oBACA,uBACA,4BACA,4BACA,0BACA,6BACA,0BACA,oCACA,wBACA,2BACA,yBACA,6BACA,oCACA,uBACA,qBACA,sBACA,yBACA,4BACA,oBACA,uBACA,2BACA,6BACA,wBACA,2BACA,oBACA,qBACA,wBACA,0BACA,+BACA,oBACA,8BACA,oBACA,+BACA,2BACA,iBACA,2BACA,gBACA,mBACA,cACA,iBACA,uBACA,0BACA,oBACA,+BACA,sBACA,2BACA,wBACA,yBACA,sBACA,wBACA,yBACA,0BACA,qBACA,yBACA,yBACA,8BACA,mBACA,uBACA,wBACA,qBACA,+BACA,mBACA,oBACA,cACA,oBACA,yBACA,oBACA,uBACA,qBACA,uBACA,cACA,oBACA,2BACA,sBACA,mBACA,sBACA,oBACA,uBACA,kBACA,sBACA,6BACA,6BACA,wCACA,uBACA,0BACA,wBACA,0BACA,2BACA,4BACA,yBACA,2BACA,4BACA,0BACA,qBACA,wBACA,8BACA,0BACA,2BACA,kCACA,2BACA,4BACA,gCACA,iCACA,8BACA,kCACA,iBACA,kBACA,4BACA,0BACA,qBACA,sBACA,yBACA,gCACA,sBACA,qCACA,aACA,gBACA,cACA,iBACA,wBACA,cACA,gBACA,iBACA,oBACA,kBACA,wBACA,mBACA,0BACA,6BACA,kCACA,2BACA,uBACA,6BACA,+BACA,6BACA,uCACA,0CACA,0CACA,6BACA,gCACA,qCACA,wBACA,mBACA,mBACA,uBACA,qBACA,wBACA,qBACA,kBACA,kBACA,qBACA,wBACA,sBACA,wBACA,gBACA,mBACA,iBACA,wBACA,cACA,gBACA,4BACA,+BACA,0BACA,6BACA,oCACA,oBACA,6BACA,oCACA,8CACA,wBACA,cACA,iBACA,oBACA,kBACA,wBACA,2BACA,4BACA,2BACA,8BACA,+BACA,iCACA,uBACA,+BACA,sBACA,oBACA,0BACA,mBACA,uBACA,0BACA,wBACA,6BACA,wBACA,2BACA,yBACA,4BACA,wBACA,kBACA,qBACA,mBACA,sBACA,WACA,iBACA,eACA,wBACA,oBACA,qBACA,kBACA,yBACA,uBACA,wBACA,2BACA,wBACA,2BACA,iCACA,wBACA,qBACA,yBACA,yBACA,qBACA,qBACA,+BACA,2BACA,4BACA,sBACA,4BACA,2BACA,yBACA,wBACA,uBACA,2BACA,sBACA,wBACA,6BACA,8BACA,sBACA,yBACA,mBACA,uBACA,8BACA,iCACA,kBACA,wBACA,mCACA,2BACA,mCACA,0BACA,wBACA,4BACA,qBACA,6BAGK,SAASyyE,EAAsBhuF,GACpC,IAAMkpB,EAAYlpB,EAAKkpB,WAAa,aACpC,MAAO,GAAGlpB,EAAK7D,GAAGmf,kBAAkB4N,GAAa,cAAc5N,eACjE,CAEO,SAAS0wE,EAA0BhsF,EAAqBuV,GAC7D,MAAgB,UAATA,EACH24E,EAAqBj3F,IAAI+2F,EAAsBhuF,IAC/CmuF,EAAqBl3F,IAAI+2F,EAAsBhuF,GACrD,CAEO,SAASiuF,EACdjuF,EACAuV,EACA64E,EACA5oE,GAEA,IAAMm1C,EAAiBn1C,GAAUiR,YAAYz2B,EAAK7D,IAC5CkyF,EACK,UAAT94E,EAAmBolD,GAAgByc,cAAiBzc,GAAgB0c,eAAiB1c,GAAgByc,cACvG,OAAOgX,KAAiBC,GAAUp4E,WAAW,OAAQo4E,GAAUl6E,SAAS,oBAAsBk6E,CAChG,C,+GCpOO,SACLpxF,EACAqxF,EACAC,EACAC,GAEA,IAAMC,EAAeH,EAAa,OAC5BttF,EAA4C,CAAC,EACnD,IAAK,IAAM0tF,KAAMzxF,EAAS,CACxB,IAAM2yB,EAAO8+D,EAAGj8D,SAAWi8D,EAAG78D,UACxB88D,EAAW/+D,EAAO0+D,EAClBM,EAAuB,MAAXL,GAAmBM,EAAyBH,EAAIH,GAC5DO,EAAW,IAAIvzE,IACrB,IAAK,IAAMoN,KAAS+lE,EAAGhmE,QAAS,CAC9B,IAAMh1B,GAAM,EAAAk1B,EAAAA,gBAAeD,EAAM9f,UACjC,GAAgB,MAAZ2lF,GAAqBA,EAASv3F,IAAIvD,GAAtC,CAGA,IAAI4N,EAAON,EAAOtN,GAkClB,GAjCY,MAAR4N,IACFA,EAAO,CAAEunE,MAAO,EAAGkmB,WAAY,CAAC,GAChC/tF,EAAOtN,GAAO4N,GAEXwtF,EAAS73F,IAAIvD,KAChBo7F,EAASlyE,IAAIlpB,GACb4N,EAAKunE,OAAS,GAGd8lB,IACA,EAAAK,EAAAA,gBAAermE,EAAMyR,QACO,MAA3B94B,EAAK2tF,oBAA8Br/D,EAAOtuB,EAAK2tF,sBAEhD3tF,EAAK4tF,UAAYvmE,EACjBrnB,EAAK2tF,mBAAqBr/D,GAG1B++D,IACA,EAAAK,EAAAA,gBAAermE,EAAMoR,cACa,MAAjCz4B,EAAK6tF,0BAAoCv/D,EAAOtuB,EAAK6tF,4BAEtD7tF,EAAK8tF,gBAAkBzmE,EACvBrnB,EAAK6tF,yBAA2Bv/D,GAGhC++D,GACAC,IACA,EAAAI,EAAAA,gBAAermE,EAAMyR,QACK,MAAzB94B,EAAK+tF,kBAA4Bz/D,EAAOtuB,EAAK+tF,oBAE9C/tF,EAAKguF,aAAe3mE,EACpBrnB,EAAK+tF,iBAAmBz/D,GAEtB++D,EACF,IAAK,IAAMx3F,KAAOwxB,EAAMyR,KACtBm1D,EAAuBjuF,EAAMnK,EAAKy4B,GAIpC++D,GACAhmE,EAAMg0C,OACN/sC,EAAO6+D,IACoB,MAA1BntF,EAAKkuF,mBAA6B5/D,EAAOtuB,EAAKkuF,qBAE/CluF,EAAKmuF,SAAW9mE,EAAMg0C,MACtBr7D,EAAKkuF,kBAAoB5/D,EA/C3B,CAiDF,CACF,CACA,OAAO5uB,CACT,E,mBAkQO,SAA0B0wB,GAC/B,IAAMg+D,EAASC,EAAoBj+D,GAEnC,OAAiB,EADD5Y,KAAK+oC,MAAM6tC,EAAS,IAEtC,E,mCApNO,SACL1lD,EACA0d,GAEA,MAAO,CACLjhD,GAAIA,CAACo9D,EAAK6qB,KACR,IAEMkB,EAFUlB,EAAGhmE,QAAQzzB,OAAQ7D,IAAM,EAAAy+F,EAAAA,aAAYz+F,EAAEyX,SAAUmhC,IACzCk2B,QAAS9uE,GAAMA,EAAEgpC,MACjBz7B,IAAsBoxC,GAAM,CAClDA,GACA,EAAA+/C,EAAAA,qBAAoB//C,EAAEgrB,iBAAmBhrB,EAAEtoB,SAAU,EAAAI,EAAAA,cAAa,EAAG6/B,GAAO3X,EAAEsf,eAAiB,KAE3F0gC,GAAS,EAAA91B,EAAAA,sBAAqB21B,EAAS,CAAC1+F,EAAG4kE,KAAM,EAAAk6B,EAAAA,gBAAel6B,EAAE,GAAI5kE,EAAE,KAAK,GAInF,OAHc,MAAV6+F,IAAkB,EAAAp9B,EAAAA,WAAUo9B,EAAO,GAAIlsB,EAAIksB,UAC7ClsB,EAAM,CAAEksB,OAAQA,EAAO,GAAIE,oBAAqBvB,EAAIwB,UAAWH,EAAO,KAEjElsB,GAETssB,QAAS,CAAEJ,QAAQ,EAAAloE,EAAAA,cAAa,EAAG6/B,IAEvC,E,iDApRO,SACL1d,GAEA,MAAO,CACLvjC,GAAIA,CAACo9D,EAAK6qB,KACYA,EAAGhmE,QAAQzT,KAAM7jB,IAAM,EAAAy+F,EAAAA,aAAYz+F,EAAEyX,SAAUmhC,KAEjE65B,EAAI9wE,KAAK27F,GAEJ7qB,GAETssB,QAAS,GAEb,E,sCA5BO,WAIL,MAAO,CACL1pF,GAAIA,CAACo9D,EAAK6qB,KACR,IAAK,IAAM/lE,KAAS+lE,EAAGhmE,QACrBm7C,GAAI,EAAAj7C,EAAAA,gBAAeD,EAAM9f,WAAa8f,EAAM9f,SAE9C,OAAOg7D,GAETssB,QAAS,CAAC,EAEd,E,2BAiBO,SACLt+D,EACAmY,GAKA,MAAO,CACLvjC,GAAIA,CAACo9D,EAAK6qB,KACR,IAAM9+D,EAAO8+D,EAAGj8D,SAAWi8D,EAAG78D,UAC9B,GAAIjC,EAAOiC,IAA+B,MAAjBgyC,EAAI5hE,WAAqB2tB,EAAOi0C,EAAI5hE,WAAY,CACvE,IAAM0mB,EAAQ+lE,EAAGhmE,QAAQonB,KAAM1+C,IAAM,EAAAy+F,EAAAA,aAAYz+F,EAAEyX,SAAUmhC,KAAiB,EAAAglD,EAAAA,gBAAe59F,EAAEgpC,OAC3FzR,IACFk7C,EAAM,CAAEusB,iBAAkBznE,EAAO0nE,kBAAmB3B,EAAIzsF,UAAW2tB,GAEvE,CACA,OAAOi0C,GAETssB,QAAS,CAAC,EAEd,E,0BAEO,SACLt+D,EACAmY,GAEA,MAAO,CACLvjC,GAAIA,CAACo9D,EAAK6qB,KACR,IAAM9+D,EAAO8+D,EAAGj8D,SAAWi8D,EAAG78D,UAE9B,GAAIjC,EAAOiC,GAAajC,EADHiC,EAAY,SACgC,MAAjBgyC,EAAI5hE,WAAqB2tB,EAAOi0C,EAAI5hE,WAAY,CAC9F,IAAM0mB,EAAQ+lE,EAAGhmE,QAAQonB,KAAM1+C,IAAM,EAAAy+F,EAAAA,aAAYz+F,EAAEyX,SAAUmhC,IACzDrhB,GAASA,EAAMg0C,QACjBkH,EAAM,CAAE4rB,SAAU9mE,EAAMg0C,MAAO16D,UAAW2tB,GAE9C,CACA,OAAOi0C,GAETssB,QAAS,CAAC,EAEd,E,+BAjKO,WACL,MAAO,CACL1pF,GAAIA,CAACo9D,EAAK6qB,KACJ7qB,EAAIysB,QAAU5B,EAAG78D,YACnBgyC,EAAIysB,QAAU5B,EAAG78D,WAEfgyC,EAAI0sB,QAAU7B,EAAG78D,YACnBgyC,EAAI0sB,QAAU7B,EAAG78D,WAEZgyC,GAETssB,QAAS,CAAEG,QAAS,EAAGC,QAAStkB,KAEpC,E,4GAyUO,SACLjiC,EACA0d,GAEA,MAAO,CACLjhD,GAAIA,CAACo9D,EAAK6qB,KACR,IACM8B,EAASC,EADC/B,EAAGhmE,QAAQzzB,OAAQ7D,IAAM,EAAAy+F,EAAAA,aAAYz+F,EAAEyX,SAAUmhC,IAClBk2B,QAAS9uE,GAAMA,EAAEgpC,OAChE,GAAc,MAAVo2D,EAAgB,CAClB,IAAM/oE,EAAS+oE,EAAOz1B,iBAAmBy1B,EAAO/oE,SAAU,EAAAI,EAAAA,cAAa,EAAG6/B,IACtE,EAAAiL,EAAAA,WAAUlrC,EAAQo8C,EAAI6sB,aACxB7sB,EAAM,CAAE6sB,UAAWjpE,EAAQkpE,uBAAwBjC,GAEvD,CACA,OAAO7qB,GAETssB,QAAS,CAAEO,WAAW,EAAA7oE,EAAAA,cAAa,EAAG6/B,IAE1C,E,4BApjBO,SAAmC1d,EAA6B+S,GACrE,MAAO,CACLnvB,MAAO,gBACPzxB,IAAI,EAAA+/D,EAAAA,qBAAoBlyB,GACxB+S,QACAl0C,SAAUmhC,EACV5P,KAAM,GACNL,WAAY,GAEhB,E,wBAdO,SAA+B/8B,EAAmBmB,GACvD,IAAMyyF,EAAQ,IAAIr1E,IAAIpd,GACtB,MAAO,IAAKnB,EAASC,QAASD,EAAQC,QAAQhI,OAAQq9B,IAAOs+D,EAAM35F,IAAIq7B,EAAEn2B,KAC3E,E,sBA+yBO,SAA6Bc,EAA2BuoB,GAC7D,IAAMk0C,EAAsC,CAC1C,CACE,mBACA,UACA,WACA,WACA,iBACA,gBACA,iBACA,YACA,eACA,gBACA,WACA,wBACA,uBACA,yBACA,wBACA,cACA,sBACA,iBACA,oBACA,QACA,sBACA,4BACA,wBACA,6BACA,oCAIJ,IAAK,IAAMhoC,KAAiBz0B,EAC1B,IAAK,IAAM0rB,KAAS+I,EAAchJ,QAAS,CACzC,IAAM7f,GAAW,EAAAi3D,EAAAA,cAAan3C,EAAM9f,SAAU2c,EAASiR,WACjDo6D,EAAuC,IACxCloE,EAAMoR,WAAWp7B,IAAKoxC,GAAsB,CAACA,EAAG,OAChDpnB,EAAMyR,KAAKz7B,IAAKoxC,GAAsB,CAACA,EAAG,KAE/C,IAAK,IAAL3xC,KAA8ByyF,EAAoB,KAAA3rF,GAAA,EAAAiH,EAAAtQ,SAAAuC,EAAA,GAAtCjH,EAAG+N,EAAA,GAAE40B,EAAQ50B,EAAA,GACvBw0D,EAAM3mE,KAAK,CACT2+B,EAAcU,KACdV,EAAco/D,YACdp/D,EAAcq/D,SACd,EAAAC,EAAAA,mBAAkBnoF,EAAU2c,GAC5BsU,EACA3iC,EAAIy3D,MAAQ,KACZz3D,EAAIk4D,eAAiB,KACrBl4D,EAAI85F,QAAU,EAAI,EAClB95F,EAAI+5F,KAAO,KACX/5F,EAAIg6F,cAAgB,KACpBh6F,EAAIi6F,OAAS,EAAI,EACjBj6F,EAAIswB,QAAQz1B,OAAS,KACrBmF,EAAIswB,QAAQigC,MAAQ,KACpBvwD,EAAI4jE,iBAAiB/oE,OAAS,KAC9BmF,EAAI4jE,iBAAiBrT,MAAQ,KAC7BvwD,EAAIk6F,UAAY,EAAI,EACH,MAAjBl6F,EAAI8K,UAAoB,IAAIC,KAAK/K,EAAI8K,WAAa,GAAGqvF,cAAgB,MACrE,EAAArV,EAAAA,wBAAuBpzE,EAAU2c,GAAU3mB,KAAK,MAChD,EAAAs9E,EAAAA,2BAA0BtzE,EAAU2c,GAAU3mB,KAAK,KACnD8pB,EAAMg0C,OAAS,GACfxlE,EAAIm4D,mBAAqB,KACzBn4D,EAAI2gC,UAAY,KAChB3gC,EAAIo6F,mBAAqB,EAAI,EAC7Bp6F,EAAIq6F,mBAAqB,KACzBr6F,EAAIs6F,uBAAyB,MAEjC,CACF,CAGF,OAAO/3B,CACT,E,8BAxSO,SAAqCz8D,GAC1C,IAAMy0F,EAAyC,CAAC,EAChD,IAAK,IAAMzgG,KAAKgM,EACd,IAAK,IAAM7L,KAAKH,EAAEy3B,QAAS,CACzB,IAAMipE,EAAcC,EAAiCxgG,GAC/CsC,GAAM,EAAAk1B,EAAAA,gBAAex3B,EAAEyX,UACV,MAAf8oF,IAAwBA,EAAYtiC,eAAiB,GAAK,IACxC,MAAhBqiC,EAAQh+F,KAAgB,EAAAk/D,EAAAA,WAAU8+B,EAAQh+F,GAAK+zB,QAAU,EAAGkqE,EAAYlqE,SAAU,EAAAI,EAAAA,cAAa,EAAG,UACpG6pE,EAAQh+F,GAAOi+F,EAGrB,CAEF,OAAOD,CACT,E,iCAtaO,SACL5rE,EACA7oB,GAEA,IAAM40F,EAAgC,IAAI76F,IAC1C,IAAK,IAAM2xB,KAAS7C,EAAO4C,QAAS,CAClC,IAAMvxB,EAAM26F,EAA2BhsE,EAAO3pB,GAAIwsB,EAAO1rB,GAC9C,MAAP9F,GACF06F,EAAI16F,IAAIwxB,EAAM9f,SAAU1R,EAE5B,CACA,OAAO06F,CACT,E,mCAEO,SAA0C50F,GAC/C,IAAM9F,EAA8C,CAAC,EACrD,IAAK,IAAM2uB,KAAU7oB,EACnB,IAAK,IAAM0rB,KAAS7C,EAAO4C,QACzBvxB,GAAI,EAAAyxB,EAAAA,gBAAeD,EAAM9f,WAAa8f,EAAM9f,SAGhD,OAAO1R,CACT,E,uCAgUO,SACL8F,EACA+sC,EACA+nD,GAEA,IAAI/wF,EACAgxF,EACJ,IAAK,IAAMtD,KAAMzxF,EACf,GAAIyxF,EAAGvyF,KAAO41F,EAAd,CAGA,IAAMniE,EAAO8+D,EAAGj8D,SAAWi8D,EAAG78D,UAC9B,KAAkB,MAAdmgE,GAAsBpiE,GAAQoiE,GAAlC,CAGA,IAAMrpE,EAAQ+lE,EAAGhmE,QAAQonB,KAAM1+C,IAAM,EAAAy+F,EAAAA,aAAYz+F,EAAEyX,SAAUmhC,KAAiB,EAAAglD,EAAAA,gBAAe59F,EAAEgpC,OAClF,MAATzR,IACF3nB,EAAS2nB,EACTqpE,EAAapiE,EAJf,CAJA,CAWF,OAAO5uB,CACT,E,qBAgGO,SAA4BgpC,EAA6B/sC,GAC9D,IAAIuzF,OAA2Bj5F,EAC/B,IAAK,IAAMtG,KAAKgM,EACd,IAAK,IAAM7L,KAAKH,EAAEy3B,QAChB,IAAI,EAAAmnE,EAAAA,aAAYz+F,EAAEyX,SAAUmhC,GAAe,CACzC,IAAM2nD,EAAcC,EAAiCxgG,GAClC,MAAfugG,IAAwBA,EAAYtiC,eAAiB,GAAK,IAEhD,MAAVmhC,IACA,EAAA79B,EAAAA,WAAUg/B,EAAYlqE,SAAU,EAAAI,EAAAA,cAAa,EAAG,MAAO2oE,EAAO/oE,SAAU,EAAAI,EAAAA,cAAa,EAAG,UAExF2oE,EAASmB,EAGf,CAGJ,OAAOnB,CACT,E,0DAvoBO,SACLtqE,EACAV,EACA+B,EACA7iB,EACA8iB,EACAyqE,EAAuB/vF,KAAKC,OAE8B+jB,EAAlDgsE,wBAAkDhsE,EAAzByL,GAAjC,IAAwCD,GAAa,EAAAnY,EAAA1d,SAAKqqB,EAAQ1M,GAC5DohD,EAAYq3B,EACZx/D,GAAU,EAAAR,EAAAA,oBAAmB/L,GAAY+rE,EAAgB/rE,EAASuM,SAAWw/D,EACnF,MAAO,IACFvgE,EACHhJ,QAASgJ,EAAchJ,QAAQ/pB,IAAKgqB,IAClC,IAAMwpE,GAAuB,EAAAC,EAAAA,wBAAuBzpE,EAAM0pE,iBAAkB1pE,EAAM2pE,cAC5E1jE,EACJlqB,GAAWikB,EAAMI,mBACb,EAAAwpE,EAAAA,wCAAuC7tF,EAAS6iB,EAAKoB,EAAMI,wBAC3DxxB,EACN,IAAI,EAAA06B,EAAAA,oBAAmB/L,GAAW,CAChC,IAAMglE,GAAe,EAAAC,EAAAA,0BAAyBxiE,EAAM9f,SAAU2c,GAC9DgtE,EAAkE7pE,EAalE,GAboB6pE,EAAZF,aAA8BE,EAAhBH,iBACtB1pE,EAAQ,KADqD,EAAApP,EAAA1d,SAAA22F,EAAAzc,GAG3D37C,KAAMzR,EAAMyR,KAAKz7B,IAAKxH,IACb,IACFA,EACHk4D,cAAel4D,EAAIkjC,YAAcljC,EAAIk4D,mBAAgB93D,EACrD+3D,kBAAmB47B,GAAgB/zF,EAAIkjC,YAAcljC,EAAIm4D,uBAAoB/3D,EAC7E45F,aAAch6F,EAAIkjC,YAAcljC,EAAIg6F,kBAAe55F,EACnDwjE,gBAAiB5jE,EAAIkjC,YAAcljC,EAAI4jE,qBAAkBxjE,MAIxC,MAAnBq3B,EAAyB,CAC3B,IAAM/qB,GAAQ,EAAA66D,EAAAA,iCAAgC9vC,GACxC6jE,GAAS,EAAAC,EAAAA,iCAAgC9jE,EAAiB,OAC1D+jE,GAAsB,EAAAC,EAAAA,2CAA0ChkE,GAChEikE,EAgChB,SACElqE,EACAnD,EACAoJ,EACAlqB,EACA8iB,EACAsrE,EACAT,GAEA,IAAMU,EAA0C,CAAC,EACjD,GAAIruF,GAAW8iB,EAAO,CACpB,IAAMY,GAAU,EAAA4qE,EAAAA,qCACdrqE,EACAiG,EAAgByd,QAChB7mB,EACAoJ,EACAlqB,EACA8iB,EACAsrE,GAEF,GAAI1qE,EAAS,CACX,IAAM6qE,EAAYC,EAAoB9qE,EAAQ6qE,WACxCE,EAAWD,EAAoB9qE,EAAQ+qE,WACzC,EAAA7qE,EAAAA,wBAAuB2qE,KACzBF,EAASE,UAAYA,IAEnB,EAAA3qE,EAAAA,wBAAuB6qE,KACzBJ,EAASI,SAAWA,GAElB/qE,EAAQ2xC,OAAO5oE,OAAS,IAC1B4hG,EAASK,WAAahrE,EAAQ2xC,OAElC,CACF,CAIA,OAHIs4B,GAAoBA,EAAiBlhG,OAAS,IAChD4hG,EAASV,iBAAmBA,IAEvB,EAAA/pE,EAAAA,wBAAuByqE,GAAYA,OAAWx7F,CACvD,CAtEmC87F,CACvB1qE,EACAnD,EACAoJ,EACAlqB,EACA8iB,EACAtB,EAAS4sE,wBAAwBnqE,EAAMI,mBAAqB,IAC5DopE,GAEFxpE,EAAQ,IACHA,EACH9kB,MAAO,IAAKA,GACZ8jD,KAAM8qC,EAAS,CAAEliC,KAAK,EAAA+iC,EAAAA,gBAAe1kE,EAAgBob,aAAcxkB,IAAc,CAAC,KACvD,MAAvBmtE,EAA8B,CAAEA,uBAAwB,CAAC,KACrC,MAApBE,EAA2B,CAAEA,oBAAqB,CAAC,EAE3D,CACF,CACA,OAAOlqE,IAETiF,MAAO,iBACPzxB,IAAI,EAAA81B,EAAAA,oBAAmB/L,GAAYA,EAAS2L,UAAY3L,EAAS/pB,GACjEy+D,UAAWA,EACXj4B,gBAAYprC,EACZqrC,eAAWrrC,EACXugC,cAAUvgC,EACVygC,sBAAkBzgC,EAClBq7B,UAAW2gE,EAAqBrtE,EAAS0M,eACrC,EAAAX,EAAAA,oBAAmB/L,GAAY,CAAEuM,WAAY,CAAC,EAEtD,E,qBAxFO,SAA4BxwB,GACjC,OAAOA,EAAY6W,KAAK+oC,MAAsB,IAAhB/oC,KAAK2iD,SACrC,E,oIAmxBO,SACLx+D,EACAu2F,EACAC,GAEA,GAAKA,GAASxC,QAAd,CAGA,IAAIhoB,EACA3b,EACJ,IAAK,IAAMxnC,KAAU7oB,EACnB,IAAK,IAAM0rB,KAAS7C,EAAO4C,QACzB,IAAI,EAAAmnE,EAAAA,aAAY2D,EAAa3qF,SAAU8f,EAAM9f,UAC3C,IAAK,IAAM1R,KAAOwxB,EAAMyR,KAEpBjjC,EAAI85F,SACJ95F,EAAIy3D,OAAS6kC,EAAQ7kC,OACrB,EAAA7mC,EAAAA,WAAU5wB,EAAIswB,SAAU,EAAAI,EAAAA,cAAa,EAAG,MAAO4rE,EAAQhsE,SAAU,EAAAI,EAAAA,cAAa,EAAG,SAErE,MAARohD,IACFA,EAAO,CAAC9xE,EAAK2uB,EAAO+L,aAEX,MAAPy7B,IAAgBn2D,EAAIk4D,eAAiB,IAAM/B,EAAI,GAAG+B,eAAiB,MACrE/B,EAAM,CAACn2D,EAAK2uB,EAAO+L,aAO/B,OAAe,MAARo3C,GAAuB,MAAP3b,EAAc,CAAE2b,OAAM3b,YAAQ/1D,CAvBrD,CAwBF,E,+BAvDO,SACL0F,EACAu2F,GAEA,IAAK,IAAM1tE,KAAU7oB,EACnB,IAAK,IAAM0rB,KAAS7C,EAAO4C,QACzB,IACE,EAAAmnE,EAAAA,aAAY2D,EAAa3qF,SAAU8f,EAAM9f,WACzC8f,EAAMyR,KAAKjpC,OAAS,GACpBw3B,EAAMyR,KAAKnlB,KAAM86B,IAAOA,EAAEsf,eAAiB,GAAK,GAEhD,MAAO,CAAEvpC,SAAQ6C,QAKzB,E,+BArCO,SACL1rB,EACAipB,EACAstE,GAEA,IAAK,IAAM1tE,KAAU7oB,EACnB,GAAI6oB,EAAOyB,MAAQrB,EAASqB,IAC1B,IAAK,IAAMoB,KAAS7C,EAAO4C,QACzB,IACE,EAAAmnE,EAAAA,aAAY2D,EAAa3qF,SAAU8f,EAAM9f,WACzC8f,EAAMyR,KAAKjpC,OAAS,GACpBw3B,EAAMyR,KAAKnlB,KAAM86B,IAAOA,EAAEsf,eAAiB,GAAK,GAEhD,MAAO,CAAEvpC,SAAQ6C,QAM3B,E,wCAtJO,SACL1rB,EACAm1B,EACApyB,EACA0zF,GAGA,IAAMl7E,EAAQ,IAAItW,KAAKkwB,GACjBuhD,EAAM,IAAIzxE,KAAKkwB,GAYrB,MAXa,UAATpyB,GACFwY,EAAMm7E,QAAQ,GACdhgB,EAAIigB,SAASjgB,EAAIkgB,WAAa,GAC9BlgB,EAAIggB,QAAQ,IACM,SAAT3zF,GACTwY,EAAMm7E,QAAQn7E,EAAMs7E,UAAYt7E,EAAMu7E,UAAYL,EAAsB,EAAI,IAC5E/f,EAAIggB,QAAQn7E,EAAMs7E,UAAY,IACZ,QAAT9zF,GACTwY,EAAMw7E,SAAS,EAAG,EAAG,EAAG,GAE1BrgB,EAAIqgB,SAAS,GAAI,GAAI,GAAI,KAClB/2F,EAAQhI,OAAQy5F,IACrB,IAAI,EAAAz8D,EAAAA,oBAAmBy8D,GACrB,OAAO,EAET,IAAMuF,EAAa/xF,KAAK+D,MAAMyoF,EAAGt8D,MAC3BP,EAAY,IAAI3vB,KAAK+xF,GAC3B,OAAOpiE,GAAarZ,GAASqZ,EAAY8hD,GAE7C,E,oMAEO,SAA4C12E,EAA2B40F,GAC5E,OAAO50F,EAAQkyB,OAAO,CAACC,EAAMn+B,IACpBm+B,GAAO,EAAA5G,EAAAA,kBAAiBqpE,EAAI5gG,EAAEkL,KAAO,CAAC,IAAIhL,OAChD,EACL,E,gEAyFO,SAAmC20B,GACxC,OAAOA,EAAO4C,QAAQzzB,OAAQ7D,GAAMA,EAAEgpC,KAAKnlC,OAAQ86C,IAAOA,EAAEsf,eAAiB,GAAK,GAAGl+D,OAAS,EAChG,E,0EA6JO,SAAmC8Y,GACxC,IAAMiqF,EAAc,CAAEhuE,UAAU,EAAAL,EAAAA,MAAa7yB,EAAE,WAAW8zB,GAAG,YAAY5vB,QACzE,EAAA0uB,EAAAA,aACE3b,EACA,EACE,EAAAkqF,EAAAA,KAAgCD,GAC7BlhG,EAAE,WACF8zB,GAAG,YACHh1B,EAAE,GACFkB,EAAE,aACFusC,aAAa,CAAC3M,EAAWwhE,IAAYb,EAAqBa,EAAQluE,WAAW,GAAG0M,aAErF,gBAEJ,E,wBAqBO,SACLpE,EACAkD,EACA5C,EACAiE,EACAC,GAEA,IAAMJ,EAAYlB,EAAckB,UAChC,GAAIyhE,EAAiBzhE,GAAY,CAC/B,IAAM0hE,GAAW1hE,GAAkC,IAArBA,EAAUzhC,QACnC29B,IAAgB,EAAAmD,EAAAA,oBAAmBP,IACtClD,EAAQz7B,KAAK,CAAEiN,KAAM,gBAAiB+yB,SAAUA,GAAY,EAAGuhE,UAASthE,oBAE1E,IAAMuhE,EAAe3hE,GAAY,EAAA6rB,EAAAA,mBAAkB7rB,GAAa,GAEhE,OADA2hE,EAAaxhG,KAAK,CAACmP,KAAKC,WAAO5K,IACxBg9F,CACT,CACE,OAAO3hE,CAEX,E,6GA7OO,SAAiC9M,GACtC,OAAOA,EAAO4C,QAAQyG,OAAO,CAACC,EAAMh+B,IAAMg+B,EAAOolE,EAAuBpjG,GAAI,EAC9E,E,0BAEO,SAAiC00B,GACtC,OAAOA,EAAO4C,QAAQyG,OAAO,CAACC,EAAMh+B,IAAMg+B,EAAOqlE,EAAuBrjG,GAAI,EAC9E,E,4BAbO,SAAmC00B,EAAwBN,GAChE,OAAOM,EAAO4C,QAAQyG,OACpB,CAACC,EAAMh+B,KAAM,EAAAsjG,EAAAA,YAAWtlE,EAAMulE,EAAyBvjG,EAAGo0B,KAC1D,EAAAqC,EAAAA,cAAa,EAAGrC,EAASxc,OAE7B,E,wDAnyBAmiB,EAAA1zB,EAAA,OAcAy8C,EAAAz8C,EAAA,OACAE,EAAAF,EAAA,OAEAg0B,EAAAh0B,EAAA,OA2BAm9F,EAAAn9F,EAAA,OACA08C,EAAA18C,EAAA,OAOAo9F,EAAAp9F,EAAA,OACA8yB,EAAA9yB,EAAA,OACA6yB,EAAA7yB,EAAA,OACAozB,EAAApzB,EAAA,OAGAq9F,EAAAlzE,EAAAnqB,EAAA,QACAqzB,EAAArzB,EAAA,OACAw7C,EAAAx7C,EAAA,OAKA+nE,EAAA/nE,EAAA,OAKA6uD,EAAA7uD,EAAA,OACAs9F,EAAAt9F,EAAA,OAA2D+hB,EAAA,iCAAAu8D,EAAA,oCAwJ3D,SAASmd,EAAoB/lB,GAC3B,OAAO,EAAA3kD,EAAAA,kBAAiB2kD,GAAMh+C,OAA+B,CAACC,EAAM17B,KAClE,IAAM1B,EAAQm7E,EAAKz5E,GAInB,OAHa,MAAT1B,IACFo9B,EAAK17B,GAAO1B,GAEPo9B,GACN,CAAC,EACN,CAEO,SAASwiE,EAAiCjpE,GAC/C,OAAO8nE,EAAwB9nE,EAAMyR,KACvC,CAEO,SAAS46D,EAA8BrsE,GAC5C,OAAOssE,EAAqBtsE,EAAMyR,KACpC,CAGA,SAAS86D,EAAiB96D,EAAc+6D,GACtC,IAAI7sB,EACA8sB,EACJ,IAAK,IAAMj+F,KAAOijC,EAChB,MAAKjjC,EAAIk4D,eAAiB,IAAM,GAAhC,CAGA,IAAM5nC,EAAS0tE,EAASh+F,GACxB,GAAY,MAARmxE,GAA8B,MAAd8sB,EAApB,CAKA,IAAMC,GAAa,EAAArF,EAAAA,gBAAeoF,EAAY3tE,IAE7B,IAAf4tE,GAAoBl+F,EAAIk4D,eAAiBiZ,EAAKjZ,cAC1CiZ,EAAKjZ,cAAgBl4D,EAAIk4D,cAAgB,EACzCgmC,EAAa,KAEjB/sB,EAAOnxE,EACPi+F,EAAa3tE,EARf,MAHE6gD,EAAOnxE,EACPi+F,EAAa3tE,CAJf,CAiBF,OAAO6gD,CACT,CAEO,SAASmoB,EAAwBr2D,GACtC,OAAO86D,EAAiB96D,EAAOjjC,GAAQA,EAAI4jE,iBAAmB5jE,EAAIswB,SAAU,EAAAI,EAAAA,cAAa,EAAG,MAC9F,CAEO,SAASotE,EAAqB76D,GACnC,OAAO86D,EAAiB96D,EAAOjjC,IAC7B,EAAA24F,EAAAA,qBACE34F,EAAI4jE,iBAAmB5jE,EAAIswB,SAAU,EAAAI,EAAAA,cAAa,EAAG,OACrD,EAAAytE,EAAAA,iCAAgCn+F,IAAQ,EACxCA,EAAIg6F,cAAgBh6F,EAAI+5F,KAAO,IAGrC,CAyCO,SAASqE,IAOd,MAAO,CACL9uF,GAAIA,CAACo9D,EAAK6qB,KACH7qB,EAAIp4B,gBAAkBo4B,EAAIp4B,iBAAmBijD,EAAGoC,cACnDjtB,EAAIp4B,eAAiBijD,EAAGoC,YACxBjtB,EAAI2xB,mBAAmBziG,KAAK,CAAC,IAAImP,KAAKA,KAAK+D,MAAMyoF,EAAGt8D,OAAOqjE,UAAY,IAAM5xB,EAAIp4B,kBAE5Eo4B,GAETssB,QAAS,CAAEqF,mBAAoB,IAEnC,CAEO,SAASE,EACdlwE,GAEA,MAAO,CACL/e,GAAIA,CAACo9D,EAAK6qB,KACR,IAAK,IAAM/lE,KAAS+lE,EAAGhmE,QAAS,CAC9B,IAAM7f,GAAW,EAAAi3D,EAAAA,cAAan3C,EAAM9f,SAAU2c,EAASiR,WACjD8iD,GAAqB,EAAA2S,EAAAA,8BAA6BrjF,EAAU2c,GAC5Dm0D,GAAwB,EAAA2S,EAAAA,iCAAgCzjF,EAAU2c,GAClEmwE,GAAmC,EAAAC,EAAAA,2CAA0C/sF,EAAU2c,GAC7F,IAAK,IAAMgzD,IAAe,KAAI,EAAAoV,EAAAA,iCAAgCpoE,GAAW,SAAmB,CAC1F,IAAIy2C,EAAa,EAQjB,GAPoB,UAAhBuc,IAEoD,IAA7Ce,EAAmB/jF,QAAQgjF,GADpCvc,EAAa,GAG4C,IAAhD0d,EAAsBnkF,QAAQgjF,KACvCvc,EAAa05B,EAAiCnd,IAAgBhzD,EAAS4B,QAAQilE,qBAE9D,IAAfpwB,EAAJ,CAGA4H,EAAI2U,GAAe3U,EAAI2U,IAAgB,CAAC,GAAI,GAAI,IAChD,IAAMqd,EAAiBhyB,EAAI2U,GACrBpmD,EAAO,IAAIlwB,KAAKwsF,EAAG78D,WACnBikE,EAASD,EAAe,GAAGA,EAAe,IAAI1kG,OAAS,GACvD4kG,EAAeptE,EAAMyR,KAAKnlC,OAAQ86C,IAAOA,EAAEsf,eAAiB,GAAK,GACvE,GAAc,MAAVymC,EACFD,EAAe,GAAG9iG,KAAK+lB,KAAKC,MAAMqZ,EAAKqjE,UAAY,MACnDI,EAAe,GAAG9iG,KAAK,GACvB8iG,EAAe,GAAG9iG,KAAK,OAClB,CACL,IAAMijG,EAAW,IAAI9zF,KAAc,IAAT4zF,IACK,EAAAG,EAAAA,mCAAkC7jE,EAAM5M,EAASkuE,wBAC7C,EAAAuC,EAAAA,mCACjCD,EACAxwE,EAASkuE,uBAGTmC,EAAe,GAAG9iG,KAAK+lB,KAAKC,MAAMqZ,EAAKqjE,UAAY,MACnDI,EAAe,GAAG9iG,KAAK,GACvB8iG,EAAe,GAAG9iG,KAAK,GAE3B,CACA8iG,EAAe,GAAGA,EAAe,GAAG1kG,OAAS,KAC3C,EAAA+kG,EAAAA,aAAYH,EAAcvwE,EAASxc,OAAOhX,MAC1CiqE,GACA,EAAAk6B,EAAAA,8BAA6BxtE,EAAM9f,SAAU2c,GAC/CqwE,EAAe,GAAGA,EAAe,GAAG1kG,OAAS,IAAM4kG,EAAa5kG,OAAS8qE,CA3BzE,CA4BF,CACF,CACA,OAAO4H,GAETssB,QAAS,CAAC,EAEd,CA6FA,SAASiG,EAAmBj/F,EAAWswB,EAAiBmnC,GACtD,OAAO,EAAAyT,EAAAA,mBAAiB,EAAAytB,EAAAA,qBAAoBroE,EAAQmnC,EAAMz3D,EAAIg6F,cAAe,MAAMn/F,KACrF,CASA,SAASu9F,EAAuBjuF,EAAyBnK,EAAWy4B,GAClE,IAAMnI,EAAStwB,EAAI4jE,gBACbnM,EATR,SAA+Bz3D,GAC7B,OAAyB,MAArBA,EAAIk4D,eAAkD,MAAzBl4D,EAAIm4D,kBAC5Bn4D,EAAIk4D,cAENv2C,KAAKu0C,IAAIl2D,EAAIk4D,cAAel4D,EAAIm4D,kBACzC,CAIe+mC,CAAsBl/F,GACnC,GAAKA,EAAIkjC,aAAyB,MAAV5S,GAA0B,MAARmnC,KAAgBA,GAAQ,GAAlE,CAGA,IAAM0nC,EAASh1F,EAAKytF,WAAWngC,GACzB2nC,EAAeD,GAAQn/F,IAAI4jE,gBASjC,IAPY,MAAVu7B,GACgB,MAAhBC,IACA,EAAA5jC,EAAAA,WAAUlrC,EAAQ8uE,KACjB,EAAAxuE,EAAAA,WAAUN,EAAQ8uE,IAAiB3mE,EAAO0mE,EAAOr0F,aAElDX,EAAKytF,WAAWngC,GAAQ,CAAEz3D,MAAK8K,UAAW2tB,IAExCz4B,EAAI85F,QAAS,CACf,IAAMuF,EAAQl1F,EAAKm1F,UACbC,EAAcF,GAAOr/F,IAAI4jE,gBACzB47B,EAAYH,GAAOr/F,IAAIk4D,cACvB0pB,EAAQqd,EAAmBj/F,EAAKswB,EAAQmnC,GACxCgoC,EACK,MAATJ,GAAgC,MAAfE,GAAoC,MAAbC,EACpCP,EAAmBI,EAAMr/F,IAAKu/F,EAAaC,QAC3Cp/F,GACY,MAAdq/F,GAAsB7d,EAAQ6d,GAAe7d,IAAU6d,GAAuB,MAATJ,GAAiB5mE,EAAO4mE,EAAMv0F,aACrGX,EAAKm1F,UAAY,CAAEt/F,MAAK8K,UAAW2tB,GAEvC,CAvBA,CAwBF,CAKA,SAASi/D,EAAyB/oE,EAAwByoE,GACxD,OAAIzoE,EAAO1kB,YAAcmtF,EAAQntF,YAGd,MAAf0kB,EAAOgrC,MAAoC,MAApBhrC,EAAO+xC,WAAqC,MAAhB02B,EAAQz9B,MAAqC,MAArBy9B,EAAQ12B,UAC9E/xC,EAAOgrC,OAASy9B,EAAQz9B,MAAQhrC,EAAO+xC,YAAc02B,EAAQ12B,UAE/D/xC,EAAOyB,MAAQgnE,EAAQhnE,IAChC,CA6NO,SAASuqE,EACd31F,EACAwsB,EACA1rB,GAEA,IAAI45F,EACElF,EAAcC,EAAiCjpE,GACrD,GAAmB,MAAfgpE,IAAwBA,EAAYtiC,eAAiB,GAAK,GAC5D,IAAK,IAAMp+D,KAAKgM,EACd,GAAIhM,EAAEkL,GAAKA,EACT,IAAK,IAAM/K,KAAKH,EAAEy3B,QAChB,GAAIt3B,EAAEyX,SAAS1M,KAAOwsB,EAAM9f,SAAS1M,IAAM/K,EAAEyX,SAASqgB,YAAcP,EAAM9f,SAASqgB,UAAW,CAC/E,MAAT2tE,IACFA,GAAQ,GAEV,IAAMrG,EAASoB,EAAiCxgG,GAEpC,MAAVo/F,IACA,EAAA39B,EAAAA,YAAW29B,EAAO/oE,SAAU,EAAAI,EAAAA,cAAa,EAAG,MAAO8pE,EAAYlqE,SAAU,EAAAI,EAAAA,cAAa,EAAG,SAEzFgvE,GAAQ,EAEZ,OAKNA,GAAQ,EAEV,OAAa,MAATA,IAA2B,IAAVA,EACZlF,OAEP,CAEJ,CAiBO,SAASgD,EAAyBhsE,EAAsBnD,GAC7D,IAAMkiC,EAAOliC,EAASxc,MAChB0vB,EAAS/P,EAAMyR,KAClBnlC,OAAQ86C,IAAOA,EAAEsf,eAAiB,GAAK,GACvClgC,OAAO,CAACC,EAAMj4B,KAAQ,EAAAu9F,EAAAA,YAAWtlE,GAAM,EAAA0nE,EAAAA,gBAAe3/F,EAAKuwD,KAAQ,EAAA7/B,EAAAA,cAAa,EAAG6/B,IACtF,OAAO,EAAAqjC,EAAAA,iBAAgBryD,GAAQ,EAAAy9D,EAAAA,8BAA6BxtE,EAAM9f,SAAU2c,GAC9E,CAEO,SAASgvE,EAAuB7rE,GACrC,OAAOA,EAAMyR,KAAKjL,OAAO,CAACC,EAAMj4B,IAAQi4B,GAAQj4B,EAAIk4D,eAAiB,GAAI,EAC3E,CAEO,SAASolC,EAAuB9rE,GACrC,OAAOouE,EAAwBpuE,GAAOx3B,MACxC,CAMO,SAAS4lG,EAAwBpuE,GACtC,OAAOA,EAAMyR,KAAKnlC,OAAQ86C,IAAM,EAAAinD,EAAAA,oBAAmBjnD,GACrD,CAyKO,SAASwjD,EAAqB3gE,GACnC,GAAIA,IAAcyhE,EAAiBzhE,GAAY,CAC7C,IAAM2hE,EAAe3hE,GAAY,EAAA6rB,EAAAA,mBAAkB7rB,GAAa,GAC5DqkE,EAAe1C,EAAaA,EAAapjG,OAAS,GAMtD,OALoB,MAAhB8lG,IACFA,EAAe,CAAC/0F,KAAKC,WAAO5K,GAC5Bg9F,EAAaxhG,KAAKkkG,IAEpBA,EAAa,GAAK/0F,KAAKC,MAChBoyF,CACT,CACE,OAAO3hE,CAEX,CAEO,SAASyhE,EAAiBzhE,GAC/B,QAAOA,IAAiC,IAArBA,EAAUzhC,QAAsD,MAAtCyhC,EAAUA,EAAUzhC,OAAS,GAAG,GAC/E,CAuBO,SAASw+F,EACdj+D,GAGA,OADkBA,EAAckB,WAAa,CAAC,CAAClB,EAAcG,UAAWH,EAAce,SAAWvwB,KAAKC,SACrFgtB,OAAO,CAACC,EAAM8nE,IACtB9nE,IAAS8nE,EAAS,IAAMh1F,KAAKC,OAAS+0F,EAAS,IACrD,EACL,CAEqClmG,EAAAA,0BAAG,EAAAmmG,EAAAA,SACrCl6F,GACQA,EAAQkyB,OAAgD,CAACC,EAAMs/D,KACpEt/D,GAAK,EAAA+N,EAAAA,0BAAyBuxD,EAAGt8D,OAASs8D,EACnCt/D,GACN,CAAC,GAEN,CAAEgoE,QAAS,KAPN,IAUMC,EAA0BrmG,EAAAA,4BAAG,EAAAmmG,EAAAA,SACvCl6F,IACC,IAAM+D,EAA2B,CAAC,EAC5Bs2F,GAAgB,EAAAC,EAAAA,4BAA2Bt6F,EAAUyxF,GAAOA,EAAGj8D,SAAWi8D,EAAG78D,WAC7E2lE,EAAwD,CAAC,EACzDC,EAA2D,CAAC,EAClE,IAAK,IAAM3xE,KAAUwxE,EACnB,IAAK,IAAM3uE,KAAS7C,EAAO4C,QAAS,CAClC,IAAMh1B,GAAM,EAAAk1B,EAAAA,gBAAeD,EAAM9f,UAE3B6uF,EAAmB9F,EAAiCjpE,GACpDgvE,EAAgBD,EACjBA,EAAiB38B,iBAAmB28B,EAAiBjwE,YACtDlwB,EACEqgG,EAAgBH,EAAc/jG,IAAMqnE,iBAAmB08B,EAAc/jG,IAAM+zB,OACjF,GAAqB,MAAjBkwE,IAA2C,MAAjBC,IAAyB,EAAAjlC,EAAAA,WAAUglC,EAAeC,IAAiB,CAC/F,IAAMC,EAAmBJ,EAAc/jG,GACvC+jG,EAAc/jG,GAAOgkG,EACrB12F,EAAO8kB,EAAO3pB,IAAM6E,EAAO8kB,EAAO3pB,KAAO,CAAC,EAC1C6E,EAAO8kB,EAAO3pB,IAAKzI,GAAOsN,EAAO8kB,EAAO3pB,IAAKzI,IAAQ,CAAC,EACtDsN,EAAO8kB,EAAO3pB,IAAKzI,GAAMmkG,iBAAmBA,EAC5C72F,EAAO8kB,EAAO3pB,IAAKzI,GAAMokG,aAAeJ,CAC1C,CAEA,IAAMK,EAAgB/C,EAA8BrsE,GAC9CqvE,EAAaD,GACf,EAAAjI,EAAAA,qBACEiI,EAAch9B,iBAAmBg9B,EAActwE,SAAU,EAAAI,EAAAA,cAAa,EAAG,OACzE,EAAAytE,EAAAA,iCAAgCyC,IAAkB,EAClDA,EAAc5G,cAAgB4G,EAAc7G,UAE9C35F,EACE0gG,EAAgBT,EAAW9jG,GAC3BwkG,EAAaD,GACf,EAAAnI,EAAAA,qBACEmI,EAAcl9B,iBAAmBk9B,EAAcxwE,SAAU,EAAAI,EAAAA,cAAa,EAAG,MACzEowE,IAAgB,EAAA3C,EAAAA,iCAAgC2C,IAAsB,EACtEA,EAAc9G,cAAgB8G,EAAc/G,UAE9C35F,EACJ,GAAkB,MAAdygG,IAAqC,MAAdE,IAAsB,EAAAvlC,EAAAA,WAAUqlC,EAAYE,IAAc,CACnF,IAAMC,EAAgBX,EAAW9jG,GACjC8jG,EAAW9jG,GAAOqkG,EAClB/2F,EAAO8kB,EAAO3pB,IAAM6E,EAAO8kB,EAAO3pB,KAAO,CAAC,EAC1C6E,EAAO8kB,EAAO3pB,IAAKzI,GAAOsN,EAAO8kB,EAAO3pB,IAAKzI,IAAQ,CAAC,EACtDsN,EAAO8kB,EAAO3pB,IAAKzI,GAAMykG,cAAgBA,EACzCn3F,EAAO8kB,EAAO3pB,IAAKzI,GAAMw8F,UAAY6H,CACvC,CACF,CAEF,OAAO/2F,GAET,CAAEo2F,QAAS,KAa2BpmG,EAAAA,6BAAG,EAAAmmG,EAAAA,SACzC,CAACl6F,EAA2BuoB,KAC1B,IAAM8xE,GAAgB,EAAAr9B,EAAAA,sBAAqBh9D,EAAS,CAAC/L,EAAG4kE,IAC/C,IAAI5zD,KAAKA,KAAK+D,MAAM/U,EAAEkhC,OAAOqjE,UAAY,IAAIvzF,KAAKA,KAAK+D,MAAM6vD,EAAE1jC,OAAOqjE,WAE/E2C,EAA+CC,EAAAA,UAAUtuB,MAAMutB,GAC5DgB,MAAM5C,EAA4BlwE,IAClC8yE,MAAM/C,KACNgD,MAAKC,GAAA,EAAArsF,EAAAtQ,SAAAu8F,EAAA,GACR,MAAO,CAAEd,gBAAemB,iBAJDD,EAAA,GAImBE,mBAJCF,EAAA,KAM7C,CAAEpB,QAAS,IAyCyBpmG,EAAAA,2BAAG,EAAAmmG,EAAAA,SACvC,CAACl6F,EAA2By2F,KAC1B,IAAMiF,GAAoB,EAAA1+B,EAAAA,sBAAqBh9D,EAAS,CAAC/L,EAAG4kE,IACnD,IAAI5zD,KAAKA,KAAK+D,MAAM6vD,EAAE1jC,OAAOqjE,UAAY,IAAIvzF,KAAKA,KAAK+D,MAAM/U,EAAEkhC,OAAOqjE,WAEzEmD,EArCV,SAA2B37F,EAA2By2F,GACpD,IAAMmF,EAAkC,IAAIt9E,IACtCu9E,EAAqE,CAAC,EACtEC,EAAyE,CAAC,EAChF,IAAK,IAAMjzE,KAAU7oB,EACnB,KAAK,EAAAg1B,EAAAA,oBAAmBnM,GAAS,CAC/B,IAAMkzE,GAAiB,EAAA/C,EAAAA,mCAAkCnwE,EAAO2M,SAAW3M,EAAO+L,UAAW6hE,GACxC,MAAjDqF,EAA8BC,KAChCD,EAA8BC,GAAkBlzE,GAElD+yE,EAAmBj8E,IAAIo8E,GACvBF,EAAkChzE,EAAO3pB,IAAM68F,CACjD,CAEF,GAAgC,IAA5BH,EAAmBtjF,KAAY,CACjC,IAAM0jF,EAAQ,IAAI/2F,KACZ82F,GAAiB,EAAA/C,EAAAA,mCAAkCgD,EAAMxD,UAAW/B,GAC1EmF,EAAmBj8E,IAAIo8E,EACzB,CACA,MAAO,CACLE,iBAAiB,EAAAj/B,EAAAA,sBAAqB3oE,MAAM+C,KAAKwkG,IACjDC,oCACAC,gCAEJ,CAasBI,CAAkBR,EAAmBjF,GAEvD,MAAO,CAAEiF,oBAAmBC,YAAW/G,IAD3BwF,EAA2Bp6F,KAGzC,CAAEm6F,QAAS,G,sFCvpCN,SACLp6F,EACAo5B,EACAC,EACA1xB,GAEA,IAAMy0F,EAAc,IAAI79E,IAAIve,EAAQC,QAAQ0B,IAAK1N,GAAMA,EAAEkL,KACnDc,GAAU,EAAAykE,EAAAA,yBAAuB,EAAA1jE,EAAAA,wBAAuBhB,EAAQC,QAAQ49C,OAAOzkB,GAAiB,MAAO,MACvGijE,EAAkBp8F,EAAQhI,OAAQhE,IAAOmoG,EAAYniG,IAAIhG,EAAEkL,KAAKwC,IAAK1N,GAAMA,EAAEkL,IAC7Em9F,EAAyB9lG,OAAOuB,KAAKshC,GAAiBphC,OAAQowC,GAAuC,MAAjCroC,EAAQwoB,SAASiR,UAAU4O,IAI/F5O,EAAY,IAAKz5B,EAAQwoB,SAASiR,WACxC,IAAK,IAAMt6B,KAAMm9F,EACf7iE,EAAUt6B,GAAMk6B,EAAgBl6B,GAElC,IAAMqB,EAA0B,CAC9BowB,MAAO,iBACPzxB,IAAI,EAAAiV,EAAAA,wBAAuB,GAC3BnP,UAAWC,KAAKC,MAChBwC,SACA40F,iBAAkBF,EAClBG,kBAAmBF,EACnBznD,aAAcwnD,EAAgBloG,QAEhC,MAAO,CACL8L,UACAw5B,YACAC,eAAgB,IAAK15B,EAAQ05B,gBAAkB,GAAKl5B,GAAStJ,OArCvC,GAuC1B,E,oCAEO,SAA2C8I,EAAmBQ,GACnE,IAAMi8F,EAAc,IAAIl+E,IAAI/d,EAAQ+7F,kBACpC,OAAOv8F,EAAQC,QACZhI,OAAQhE,GAAMwoG,EAAYxiG,IAAIhG,EAAEkL,KAAsB,MAAflL,EAAE2pE,WAAqB3pE,EAAE2pE,UAAYp9D,EAAQyE,WACpFtD,IAAK1N,GAAMA,EAAEkL,GAClB,E,qBAEO,SAA4Ba,EAAmBu0C,GACpD,IAAM/zC,GAAWR,EAAQ05B,gBAAkB,IAAIoZ,KAAMC,GAAMA,EAAE5zC,KAAOo1C,GACpE,GAAe,MAAX/zC,EAAJ,CAGA,IAAMw0C,GAAS,EAAAtf,EAAAA,uBAAsB11B,EAASQ,EAAQ+7F,kBAClD9iE,EAAYub,EAAOxsB,SAASiR,UAChC,IAAK,IAAM2jD,KAAc58E,EAAQg8F,kBAC1BE,EAAqB1nD,EAAQooC,KAChC3jD,GAAY,EAAAg2D,EAAAA,+BAA8Bh2D,EAAW2jD,IAGzD,MAAO,IACFpoC,EACHxsB,SAAU,IAAKwsB,EAAOxsB,SAAUiR,aAChCC,gBAAiBsb,EAAOtb,gBAAkB,IAAIzhC,OAAQ86C,GAAMA,EAAE5zC,KAAOo1C,GAXvE,CAaF,EAtEA,IAAA55C,EAAAF,EAAA,OACAgT,EAAAhT,EAAA,OACA0zB,EAAA1zB,EAAA,OACA4zB,EAAA5zB,EAAA,OAqEA,SAASiiG,EAAqB18F,EAAmBo9E,GAC/C,IAAMvxE,EAAW7L,EAAQwoB,SAASiR,UAAU2jD,GAC5C,GAAgB,MAAZvxE,EACF,OAAO,EAET,GAAI7L,EAAQC,QAAQ49C,OAAO79C,EAAQkpB,UAAUjR,KAAMhkB,GAAMA,EAAEy3B,QAAQzT,KAAM7jB,GAAMA,EAAEyX,SAAS1M,KAAOi+E,IAC/F,OAAO,EAET,IAAMhmF,EAAOyU,EAASzU,KAAKknB,cAC3B,OAAOte,EAAQspB,SAASrR,KAAMjiB,IAC3BA,EAAEo0B,SAASiX,OAAS,IAAIppB,KAAM85C,GAAMA,EAAEmM,KAAKjmD,KAAM0B,GAAMA,EAAE2kD,aAAahgD,cAAcnH,SAAS/f,KAElG,C,2EClDO,SAAoBjD,EAAiBa,GAC1C,OAAO2nG,EAAiBxoG,EAAQa,EAAO,CAACd,EAAG4kE,IAAM5kE,EAAI4kE,EACvD,E,kCAgDO,SAAwB5kE,EAAY4kE,GACzC,OAAO5kE,EAAEc,MAAQswE,EAAiBxM,EAAG5kE,EAAEw2D,MAAM11D,KAC/C,E,wBAEO,SAA+Bd,EAAY4kE,GAChD,OAAOwM,EAAiBxM,EAAG5kE,EAAEw2D,MAAM11D,MAAQd,EAAEc,KAC/C,E,qCA5CO,SAAuBb,EAAiBa,GAC7C,OAAO2nG,EAAiBxoG,EAAQa,EAAO,CAACd,EAAG4kE,IAAM5kE,EAAI4kE,EACvD,E,YAkBO,SAAmB3kE,EAAiBa,GACzC,OAAO4nG,EAAWzoG,EAAQa,EAAO,CAACd,EAAG4kE,IAAM5kE,IAAM4kE,EACnD,E,cAEO,SAAqB3kE,EAAiBa,GAC3C,OAAOb,EAAOa,QAAUA,EAAMA,OAASb,EAAOu2D,OAAS11D,EAAM01D,IAC/D,E,YAtBO,SAAmBv2D,EAAiBa,GACzC,OAAO4nG,EAAWzoG,EAAQa,EAAO,CAACd,EAAG4kE,IAAM5kE,EAAI4kE,EACjD,E,aAMO,SAAoB3kE,EAAiBa,GAC1C,OAAO4nG,EAAWzoG,EAAQa,EAAO,CAACd,EAAG4kE,IAAM5kE,GAAK4kE,EAClD,E,YArCO,SAAmB8B,GACxB,IAAMiiC,EAASjiC,EACf,OACEiiC,GACkB,iBAAXA,GACP,SAAUA,GACV,UAAWA,IACM,OAAhBA,EAAOnyC,MAAiC,OAAhBmyC,EAAOnyC,KAEpC,E,YAsBO,SAAmBv2D,EAAiBa,GACzC,OAAO4nG,EAAWzoG,EAAQa,EAAO,CAACd,EAAG4kE,IAAM5kE,EAAI4kE,EACjD,E,aAMO,SAAoB3kE,EAAiBa,GAC1C,OAAO4nG,EAAWzoG,EAAQa,EAAO,CAACd,EAAG4kE,IAAM5kE,GAAK4kE,EAClD,E,kBAtBO,SAAyB3kE,EAAiBa,GAC/C,OAAO2nG,EAAiBxoG,EAAQa,EAAO,CAACd,EAAG4kE,IAAM5kE,EAAI4kE,EACvD,E,oCAzCO,SAAsB3kE,GAC3B,MAAO,GAAGA,EAAOa,QAAQ8nG,EAAiB3oG,EAAOu2D,OACnD,E,uCAiCO,SAAyBv2D,EAAiBa,GAC/C,OAAO2nG,EAAiBxoG,EAAQa,EAAO,CAACd,EAAG4kE,IAAM5kE,EAAI4kE,EACvD,EAvCA,IAAMikC,EAAoD,CAAC,EAMpD,SAASD,EAAiBt/C,GAC/B,MAAsB,OAAfA,EAAsB,IAAMA,CACrC,CAEO,SAASw/C,EAAahoG,EAAe01D,GAC1C,IACMuyC,EAAiBF,EADX,GAAG/nG,KAAS01D,KAExB,GAAsB,MAAlBuyC,EACF,OAAOA,EAEP,IAAM9mE,EAAI,CAAEnhC,MAAwB,iBAAVA,EAAqBqyD,WAAWryD,GAASA,EAAO01D,QAE1E,OADAqyC,EAAgB,GAAG/nG,KAAS01D,KAAUv0B,EAC/BA,CAEX,CAqDO,SAASmvC,EAAiBnxE,EAAiBu2D,GAChD,OAAIv2D,EAAOu2D,OAASA,EACXv2D,EACkB,OAAhBA,EAAOu2D,MAA0B,OAATA,EAC1BsyC,EAAa31C,YAA2B,KAAflzD,EAAOa,OAAckoG,QAAQ,IAAKxyC,GAE3DsyC,EAAa31C,YAAYlzD,EAAOa,MAAQ,MAAMkoG,QAAQ,IAAKxyC,EAEtE,CAUA,SAASkyC,EAAWzoG,EAAiBa,EAAgB+5D,GACnD,OAAOA,EAAG56D,EAAOa,MAAOswE,EAAiBtwE,EAAOb,EAAOu2D,MAAM11D,MAC/D,CAEO,SAAS2nG,EAAiBxoG,EAAiBa,EAAgB+5D,GAChE,OAAOiuC,EAAajuC,EAAG56D,EAAOa,MAAOswE,EAAiBtwE,EAAOb,EAAOu2D,MAAM11D,OAAQb,EAAOu2D,KAC3F,C,uFC6FO,SAA8ByyC,GACnC,MAAO,CACLC,mBAAoB,CAClBC,UAAU,EAAA7xE,EAAAA,kBAAiB2xE,EAAOC,mBAAmBC,UAAUlrE,OAAgC,CAACC,EAAM17B,KACpG07B,EAAK17B,IAAQ07B,EAAK17B,IAAQ,GAAKymG,EAAOC,mBAAmBC,SAAS3mG,GAC3D07B,GACN,CAAC,GACJkrE,YAAa,CAAC,GAEhBC,eAAgB,CACdF,SAAU,CAAC,EACXC,YAAa,CAAC,GAEhBE,sBAAuB,CAAEH,SAAU,IAAKF,EAAOK,sBAAsBH,UAAYC,YAAa,CAAC,GAEnG,E,2BAyQO,SACLG,EACArmG,GAEA,IAAM+H,GAAK,EAAAiV,EAAAA,wBAAuB,GAClC,MAAO,IAAKqpF,EAAqBn5F,KAAM,IAAKm5F,EAAoBn5F,KAAM,CAACnF,GAAK,CAAE/H,OAAMgkF,QAAS,KAC/F,E,2BAmBO,SACLqiB,EACAjiB,GAGA,GADkBkiB,EAA4BliB,GAE5C,MAAO,IACFiiB,EACHn5F,KAAM,IACDm5F,EAAoBn5F,KACvB,CAACk3E,GAAc,IAAKiiB,EAAoBn5F,KAAKk3E,GAAct6D,UAAU,KAIzE,IAAMy8E,GAAkB,EAAAl8C,EAAAA,mBAAkBg8C,GAE1C,cADOE,EAAgBr5F,KAAKk3E,GACrBmiB,CAEX,E,oEArRO,WACL,OAAOC,EAAAA,aACT,E,+BAEO,SAAsCp1E,GAC3C,MAAO,IAAIo1E,EAAAA,cAAc3lG,OAAQinF,GAAO12D,EAASk2C,aAAap6D,KAAK46E,IAAKh+D,UAC1E,E,4BA1BO,SAAmCs6D,EAA4BhzD,GACpE,OACEA,EAASk2C,aAAap6D,KAAKk3E,IAAcpkF,MACzCymG,EAAwBriB,KACxB,EAAAqB,EAAAA,wBAAuBrB,EAE3B,E,oCAsBO,SAA2CA,EAAqChzD,GAErF,OAD8BooE,EAAgCpoE,GACnCrR,SAASqkE,GAIlChzD,EAASk2C,aAAap6D,KAAKk3E,IAAcJ,SAAW0iB,EAA4BtiB,IAAiC,GAH1G,EAKX,E,wFAMO,SAAoC9zE,EAA4B8iB,EAAehC,GAUpF,OAAO9gB,EAAQ25B,MAAM,GAAG68B,KAAK/rC,OAC3B,CAACC,EAAM7H,IAAQwzE,EAAY3rE,EAAM4rE,EAAuBt2F,EAAS6iB,EAAKC,EAAOhC,IAC7E,CACE40E,mBAZ4C,CAC9CC,SAAU,CAAC,EACXC,YAAa,CAAC,GAWZC,eAToC,CACtCF,SAAU,CAAC,EACXC,YAAa,CAAC,GAQZE,sBAAuB,CAAEH,SAAU,CAAC,EAAGC,YAAa,CAAC,IAG3D,E,sEA0BO,SACL51F,EACAu2F,EACAzzE,EACAhC,GAMA,OADqB,EAAA01E,EAAAA,oCAAmCD,GACpC9rE,OAClB,CAACC,EAAMvmB,KACL,OA4PsBsyF,EA3PpB/rE,EA2P+CgsE,EA1P/CC,EAAmC32F,EAASmE,EAAUoyF,EAAW5uD,QAAS7mB,EAAUgC,GA2PnF,CACL4yE,mBAAoBkB,EAA+BH,EAAUf,mBAAoBgB,EAAUhB,oBAC3FG,eAAgBgB,EAAoBJ,EAAUZ,eAAgBa,EAAUb,gBACxEC,uBAAuB,EAAAgB,EAAAA,sBAAqBL,EAAUX,sBAAuBY,EAAUZ,sBAAuB,IAJlH,IAA4BW,EAA2BC,GAvPnD,CAAEhB,mBAXgD,CAAC,EAW7BG,eAVoB,CAAC,EAULC,sBAAuB,CAAC,GAElE,E,gGA9LO,SAAyBx+B,GAC9B,MAAO,mCAAkC,EAAA3gD,EAAAA,sBAAqB2gD,SAChE,E,wHASO,SAAgCm+B,GACrC,IAAMsB,EAAY,CAChBpB,SAAUvhF,KAAKw0C,KACb,EAAAouC,EAAAA,0BAAyBvB,EAAOC,mBAAmBC,WACnD,EAAAqB,EAAAA,0BAAyBvB,EAAOK,sBAAsBH,WAExDC,YAAaxhF,KAAKw0C,KAChB,EAAAouC,EAAAA,0BAAyBvB,EAAOC,mBAAmBE,cACnD,EAAAoB,EAAAA,0BAAyBvB,EAAOK,sBAAsBF,eAG1D,MAAO,CACLF,mBAAoB,CAClBC,SAAUsB,EAAUxB,EAAOC,mBAAmBC,SAAUoB,EAAUpB,UAClEC,YAAaqB,EAAUxB,EAAOC,mBAAmBE,YAAamB,EAAUnB,cAE1EC,eAAgB,CACdF,UAAU,EAAA7xE,EAAAA,kBAAiB2xE,EAAOI,eAAeF,UAAUlrE,OAA4B,CAACC,EAAM17B,KAC5F07B,EAAK17B,GAAOioG,EAAUxB,EAAOI,eAAeF,SAAS3mG,GAAO+nG,EAAUpB,UAC/DjrE,GACN,CAAC,GACJkrE,aAAa,EAAA9xE,EAAAA,kBAAiB2xE,EAAOI,eAAeD,aAAanrE,OAA4B,CAACC,EAAM17B,KAClG07B,EAAK17B,GAAOioG,EAAUxB,EAAOI,eAAeD,YAAY5mG,GAAO+nG,EAAUnB,aAClElrE,GACN,CAAC,IAENorE,sBAAuB,CACrBH,UAAU,EAAAuB,EAAAA,yBAAwBzB,EAAOK,sBAAsBH,SAAUoB,EAAUpB,UACnFC,aAAa,EAAAsB,EAAAA,yBAAwBzB,EAAOK,sBAAsBF,YAAamB,EAAUnB,cAG/F,E,gCAEO,SAAuCH,GAC5C,IAAMsB,EAAY3iF,KAAKw0C,KACrB,EAAAouC,EAAAA,0BAAyBvB,EAAOC,qBAChC,EAAAsB,EAAAA,0BAAyBvB,EAAOK,wBAElC,MAAO,CACLJ,mBAAoBuB,EAAUxB,EAAOC,mBAAoBqB,GACzDlB,gBAAgB,EAAA/xE,EAAAA,kBAAiB2xE,EAAOI,gBAAgBprE,OAA4B,CAACC,EAAM17B,KACzF07B,EAAK17B,GAAOioG,EAAUxB,EAAOI,eAAe7mG,GAAO+nG,GAC5CrsE,GACN,CAAC,GACJorE,uBAAuB,EAAAoB,EAAAA,yBAAwBzB,EAAOK,sBAAuBiB,GAEjF,E,4BAuUO,SACLhB,EACAjiB,GAEA,IAAMmiB,GAAkB,EAAAl8C,EAAAA,mBAAkBg8C,GAI1C,OAHAE,EAAgBr5F,KAAOq5F,EAAgBr5F,MAAQ,CAAC,EAChDq5F,EAAgBr5F,KAAKk3E,GAAemiB,EAAgBr5F,KAAKk3E,IAAgB,CAAC,EAC1EmiB,EAAgBr5F,KAAKk3E,GAAat6D,UAAW,EACtCy8E,CACT,E,0DA9CO,SACLF,EACAjiB,EACAJ,GAEA,IAAMyjB,EAAYC,EAAwBtjB,EAAaJ,GACjDuiB,GAAkB,EAAAl8C,EAAAA,mBAAkBg8C,GAQ1C,OAPIoB,SACKlB,EAAgBr5F,KAAKk3E,IAAcJ,SAE1CuiB,EAAgBr5F,KAAOq5F,EAAgBr5F,MAAQ,CAAC,EAChDq5F,EAAgBr5F,KAAKk3E,GAAemiB,EAAgBr5F,KAAKk3E,IAAgB,CAAC,EAC1EmiB,EAAgBr5F,KAAKk3E,GAAaJ,QAAUA,GAEvCuiB,CACT,EA/eA,IAAA1nD,EAAAx7C,EAAA,OAMA0zB,EAAA1zB,EAAA,OAMAozB,EAAApzB,EAAA,OAMA+/D,EAAA//D,EAAA,OAUAqiB,EAAAriB,EAAA,OACAskG,EAAAtkG,EAAA,OAOAukG,EAAAvkG,EAAA,OACAgT,EAAAhT,EAAA,OA4BMqjG,EAAgE,CACpEmB,MAAO,CAAC,mCAAoC,iCAC5CC,KAAM,CAAC,mBAAoB,eAC3BC,UAAW,CAAC,0BAA2B,0BACvCC,WAAY,CAAC,oBACbC,UAAW,CAAC,mBACZC,UAAW,CAAC,qBACZC,OAAQ,CAAC,iBAAkB,aAAc,mBACzCC,QAAS,CAAC,mBACVC,WAAY,CAAC,cACbC,WAAY,CAAC,cACbC,OAAQ,CAAC,mBACTC,OAAQ,CAAC,gBAAiB,UAC1B1zB,IAAK,CAAC,oBACN2zB,WAAY,CAAC,yBAA0B,oBACvCC,UAAW,CAAC,kBACZC,KAAM,CAAC,sBAAuB,YAC9BC,YAAa,CAAC,gBAAiB,eAC/BC,eAAgB,CAAC,iBACjBC,iBAAkB,CAAC,mBACnBC,SAAU,CAAC,YACXC,WAAY,CAAC,YAAa,aAC1BC,UAAW,CAAC,iBAAkB,wBAC9BC,UAAW,CAAC,kBAAmB,kBAAmB,kBAAmB,eAGjEzC,EAAyD,CAC7DoB,MAAO,QACPC,KAAM,OACNC,UAAW,aACXC,WAAY,cACZC,UAAW,aACXC,UAAW,aACXC,OAAQ,SACRC,QAAS,UACTC,WAAY,QACZC,WAAY,aACZC,OAAQ,SACRC,OAAQ,SACR1zB,IAAK,MACL2zB,WAAY,cACZC,UAAW,aACXC,KAAM,OACNC,YAAa,eACbC,eAAgB,kBAChBC,iBAAkB,oBAClBC,SAAU,WACVC,WAAY,cACZC,UAAW,YACXC,UAAW,aAuBb,SAAS3B,EAAU4B,EAA8BC,GAC/C,OAAO,EAAAh1E,EAAAA,kBAAiB+0E,GAAKpuE,OAAgC,CAACC,EAAM17B,KAClE07B,EAAK17B,IAAQ6pG,EAAI7pG,IAAQ,GAAK8pG,EACvBpuE,GACN,CAAC,EACN,CAmEO,SAASmpD,EAAkCvc,EAAiBx2C,GAMjE,OAL8BooE,EAAgCpoE,GACXvwB,OAAQwoG,IACzCj4E,EAASk2C,aAAap6D,KAAKm8F,IAAKrlB,SAAW0iB,EAA4B2C,IAAwB,IAChGtpF,SAAS6nD,GAG5B,CAUO,SAAS8/B,EAAwBtjB,EAA4BJ,GAClE,IAAMslB,EAAiB5C,EAA4BtiB,IAAiC,GACpF,OAAO,EAAAmlB,EAAAA,mBAAkB,IAAIpiF,IAAImiF,GAAiB,IAAIniF,IAAI68D,GAC5D,CAEO,SAASwV,EAAgCpoE,GAC9C,MAAO,IACFo1E,EAAAA,cAAc3lG,OAAQinF,IAAQ12D,EAASk2C,aAAap6D,KAAK46E,IAAKh+D,aAC9D1qB,OAAOuB,KAAKywB,EAASk2C,aAAap6D,MAAMrM,OAAQowC,IAAQu1D,EAAAA,cAAoCzmF,SAASkxB,IAE5G,CAoBO,SAASq1D,EAA4BliB,GAC1C,OAAQoiB,EAAAA,cAAoCzmF,SAASqkE,EACvD,CAsBO,SAASwiB,EACdt2F,EACAu2F,EACAzzE,EACAhC,GAYA,OADqB,EAAA01E,EAAAA,oCAAmCD,GACpC9rE,OAClB,CAACC,EAAMvmB,IACEkyF,EAAY3rE,EAAMwuE,EAA4Bl5F,EAASmE,EAAUoyF,EAAW5uD,QAAS7mB,EAAUgC,IAExG,CAAE4yE,mBAd4C,CAC9CC,SAAU,CAAC,EACXC,YAAa,CAAC,GAYQC,eAVgB,CACtCF,SAAU,CAAC,EACXC,YAAa,CAAC,GAQwBE,sBAAuB,CAAEH,SAAU,CAAC,EAAGC,YAAa,CAAC,IAE/F,CAuBO,SAASuD,EACd7zD,EACAxkB,GAEA,IAAMs4E,EAAsBxsG,MAAM+C,KAChC,IAAIknB,KACF,EAAA0gE,EAAAA,wBAAuBjyC,EAAcxkB,GAAU06C,QAASvuE,GAAM4mF,EAAkC5mF,EAAG6zB,MAGjGu4E,EAAyBzsG,MAAM+C,KACnC,IAAIknB,KACF,EAAA4gE,EAAAA,2BAA0BnyC,EAAcxkB,GAAU06C,QAASvuE,GAAM4mF,EAAkC5mF,EAAG6zB,MAExGvwB,OAAQujF,IAAiBslB,EAAoB3pF,SAASqkE,IACxD,MAAO,CAAEslB,sBAAqBC,yBAChC,CAEO,SAAS1C,EACd32F,EACAkqB,EACAyd,EACA7mB,EACAgC,GAEA,IAAM4yE,EAA8C,CAAC,EAC/CG,EAAsC,CAAC,EAEvCp+F,GAAK,EAAAysB,EAAAA,gBAAegG,EAAgBob,cACpCg0D,GAAe,EAAAC,EAAAA,0BAAyBv5F,EAAS2nC,EAAS,EAAGzd,EAAiBpH,EAAOhC,GAC3F04E,EAAwDL,EACtDjvE,EAAgBob,aAChBxkB,GAFMs4E,EAAmBI,EAAnBJ,oBAAqBC,EAAsBG,EAAtBH,uBAIvBpI,GAAmC,EAAAC,EAAAA,2CACvChnE,EAAgBob,aAChBxkB,GAEF,IAAK,IAAM2uB,KAAQ6pD,EAAa5jE,KAAM,CACpC,IAAK,IAAM4hC,KAAU8hC,EACnB1D,EAAmBp+B,GAAUo+B,EAAmBp+B,IAAW,EAC3Do+B,EAAmBp+B,IAAY,IAC/Bu+B,EAAep+F,GAAMo+F,EAAep+F,IAAO,CAAC,EAC5Co+F,EAAep+F,GAAK6/D,GAAUu+B,EAAep+F,GAAK6/D,IAAW,EAC7Du+B,EAAep+F,GAAK6/D,IAAY,IAElC,IAAK,IAAMA,KAAU+hC,EACnB3D,EAAmBp+B,GAAUo+B,EAAmBp+B,IAAW,EAC3Do+B,EAAmBp+B,IACoE,KAApF25B,EAAiC35B,IAAWx2C,EAAS4B,QAAQilE,qBAChEkO,EAAep+F,GAAMo+F,EAAep+F,IAAO,CAAC,EAC5Co+F,EAAep+F,GAAK6/D,GAAUu+B,EAAep+F,GAAK6/D,IAAW,EAC7Du+B,EAAep+F,GAAK6/D,IACmE,KAApF25B,EAAiC35B,IAAWx2C,EAAS4B,QAAQilE,oBAEpE,CAMA,MAAO,CAAE+N,qBAAoBG,iBAAgBC,uBALf,EAAAgB,EAAAA,sBAC5B,CAAC,GACD,EAAA2C,EAAAA,+BAA8BvvE,EAAgBob,aAAcxkB,GACjC,IAA3Bw4E,EAAa5jE,KAAKjpC,QAGtB,CAEO,SAASysG,EACdl5F,EACAkqB,EACAyd,EACA7mB,EACAgC,GAEA,IAAM4yE,EAA0C,CAC9CC,SAAU,CAAC,EACXC,YAAa,CAAC,GAEVC,EAAkC,CACtCF,SAAU,CAAC,EACXC,YAAa,CAAC,GAGVn+F,GAAK,EAAAysB,EAAAA,gBAAegG,EAAgBob,cACpCg0D,GAAe,EAAAC,EAAAA,0BAAyBv5F,EAAS2nC,EAAS,EAAGzd,EAAiBpH,EAAOhC,GACrFmwE,GAAmC,EAAAC,EAAAA,2CACvChnE,EAAgBob,aAChBxkB,GAEF44E,EAAwDP,EACtDjvE,EAAgBob,aAChBxkB,GAFMs4E,EAAmBM,EAAnBN,oBAAqBC,EAAsBK,EAAtBL,uBAI7B,IAAK,IAAM5mG,KAAO6mG,EAAa5jE,KAC7B,IAAKjjC,EAAIy3D,MAAQ,IAAM,EAAG,CACxB,IAAK,IAAMoN,KAAU8hC,EACnB1D,EAAmBE,YAAYt+B,GAAUo+B,EAAmBE,YAAYt+B,IAAW,EACnFo+B,EAAmBE,YAAYt+B,IAAY,IAC3Cu+B,EAAeD,YAAYn+F,GAAMo+F,EAAeD,YAAYn+F,IAAO,CAAC,EACpEo+F,EAAeD,YAAYn+F,GAAK6/D,GAAUu+B,EAAeD,YAAYn+F,GAAK6/D,IAAW,EACrFu+B,EAAeD,YAAYn+F,GAAK6/D,IAAY,IAE9C,IAAK,IAAMA,KAAU+hC,EACnB3D,EAAmBE,YAAYt+B,GAAUo+B,EAAmBE,YAAYt+B,IAAW,EACnFo+B,EAAmBE,YAAYt+B,IAC7B,KAAO25B,EAAiC35B,IAAWx2C,EAAS4B,QAAQilE,qBACtEkO,EAAeD,YAAYn+F,GAAMo+F,EAAeD,YAAYn+F,IAAO,CAAC,EACpEo+F,EAAeD,YAAYn+F,GAAK6/D,GAAUu+B,EAAeD,YAAYn+F,GAAK6/D,IAAW,EACrFu+B,EAAeD,YAAYn+F,GAAK6/D,IAC9B,KAAO25B,EAAiC35B,IAAWx2C,EAAS4B,QAAQilE,oBAE1E,KAAO,CACL,IAAK,IAAMrwB,KAAU8hC,EACnB1D,EAAmBC,SAASr+B,GAAUo+B,EAAmBC,SAASr+B,IAAW,EAC7Eo+B,EAAmBC,SAASr+B,IAAY,IACxCu+B,EAAeF,SAASl+F,GAAMo+F,EAAeF,SAASl+F,IAAO,CAAC,EAC9Do+F,EAAeF,SAASl+F,GAAK6/D,GAAUu+B,EAAeF,SAASl+F,GAAK6/D,IAAW,EAC/Eu+B,EAAeF,SAASl+F,GAAK6/D,IAAY,IAE3C,IAAK,IAAMA,KAAU+hC,EACnB3D,EAAmBC,SAASr+B,GAAUo+B,EAAmBC,SAASr+B,IAAW,EAC7Eo+B,EAAmBC,SAASr+B,IAC1B,KAAO25B,EAAiC35B,IAAWx2C,EAAS4B,QAAQilE,qBACtEkO,EAAeF,SAASl+F,GAAMo+F,EAAeF,SAASl+F,IAAO,CAAC,EAC9Do+F,EAAeF,SAASl+F,GAAK6/D,GAAUu+B,EAAeF,SAASl+F,GAAK6/D,IAAW,EAC/Eu+B,EAAeF,SAASl+F,GAAK6/D,IAC3B,KAAO25B,EAAiC35B,IAAWx2C,EAAS4B,QAAQilE,oBAE1E,CAEF,IAAMgS,GAAS,EAAAF,EAAAA,+BAA8BvvE,EAAgBob,aAAcxkB,GACrE84E,EAAkBN,EAAa5jE,KAAKnlC,OAAQkC,IAASA,EAAIy3D,MAAQ,IAAM,GAAGz9D,OAKhF,MAAO,CAAEipG,qBAAoBG,iBAAgBC,sBAJf,CAC5BH,UAAU,EAAAmB,EAAAA,sBAAqB,CAAC,EAAG6C,EAAuD,KAA9CL,EAAa5jE,KAAKjpC,OAASmtG,IACvEhE,aAAa,EAAAkB,EAAAA,sBAAqB,CAAC,EAAG6C,EAA0B,IAAlBC,IAGlD,CAEO,SAAShD,EACdpqG,EACA4kE,GAEA,OAAO,EAAAyoC,EAAAA,0BAAyBrtG,EAAG4kE,GAAG3mC,OAAgC,CAACC,EAAMovE,KAC3E,IAAMC,EAAWvtG,EAAEstG,IAAiB,EAC9BnuC,EAAWyF,EAAE0oC,IAAiB,EAEpC,OADApvE,EAAKovE,GAAgBC,EAAWpuC,EACzBjhC,GACN,CAAC,EACN,CA0DA,SAASmsE,EAAoBrqG,EAAwB4kE,GACnD,OAAO,EAAAyoC,EAAAA,0BAAyBrtG,EAAG4kE,GAAG3mC,OAA4B,CAACC,EAAMgrD,KACvE,IAAMskB,EAAUxtG,EAAEkpF,IAAe,CAAC,EAC5BukB,EAAU7oC,EAAEskB,IAAe,CAAC,EAElC,OADAhrD,EAAKgrD,GAAckhB,EAA+BoD,EAASC,GACpDvvE,GACN,CAAC,EACN,CAEA,SAAS2rE,EAAYI,EAAoBC,GACvC,MAAO,CACLhB,mBAAoB,CAClBC,SAAUiB,EACRH,EAAUf,mBAAmBC,SAC7Be,EAAUhB,mBAAmBC,UAE/BC,YAAagB,EACXH,EAAUf,mBAAmBE,YAC7Bc,EAAUhB,mBAAmBE,cAGjCC,eAAgB,CACdF,SAAUkB,EAAoBJ,EAAUZ,eAAeF,SAAUe,EAAUb,eAAeF,UAC1FC,YAAaiB,EAAoBJ,EAAUZ,eAAeD,YAAac,EAAUb,eAAeD,cAElGE,sBAAuB,CACrBH,UAAU,EAAAmB,EAAAA,sBACRL,EAAUX,sBAAsBH,SAChCe,EAAUZ,sBAAsBH,SAChC,GAEFC,aAAa,EAAAkB,EAAAA,sBACXL,EAAUX,sBAAsBF,YAChCc,EAAUZ,sBAAsBF,YAChC,IAIR,CAjc2DtpG,EAAAA,8BAAG,CAC5D,QACA,OACA,YACA,aACA,YACA,YACA,SACA,UACA,aACA,aACA,SACA,SACA,M,gICMK,SAAkCspE,GACvC,IAAMt9D,GAAU,EAAAyhD,EAAAA,mBAAkB6b,GAIlC,OAhDF,SAAwBt9D,EAAmBoqB,GACzC,IAAMw3E,GAAe,EAAAC,EAAAA,0BAAyB,YAC9CC,EAAiB13E,EAAQ23E,gBAAiBC,EAAchiG,EAAS,mBAAoB4hG,GACrFE,EACE13E,EAAQ63E,gBACRD,EAAchiG,EAAS,oBACvB,EAAAkiG,EAAAA,8BAA6BN,EAAa,IAE9C,CAqCEO,CAAeniG,EAASA,EAAQwoB,SAAS4B,SACzCpqB,EAAQwoB,SAASq1C,OAAOA,OAASukC,EAA+BpiG,EAAQwoB,SAASq1C,OAAOA,QAZ1F,SAAqC79D,GACnC,IAAMsE,EAAOtE,EAAQwoB,SAASk2C,aAAap6D,KAC3C,IAAK,IAAM+9F,KAAaC,EACC,MAAnBh+F,EAAK+9F,IAAkD,MAA5B/9F,EAAK+9F,IAAYjnB,gBACvC92E,EAAK+9F,EAGlB,CAMEE,CAA4BviG,GACrBA,CACT,E,mCA7IA,IAAA6tB,EAAApzB,EAAA,OACA+/D,EAAA//D,EAAA,OAOAs9F,EAAAt9F,EAAA,OACA+nG,EAAA/nG,EAAA,OAEa6nG,EAA2BtuG,EAAAA,4BAAG,CAAC,YAAa,OAAQ,YAE3DyuG,EAAgD,CACpDC,UAAW,CAAC,aAAc,YAAa,aACvCC,KAAM,CAAC,OAAQ,cAGXC,EAAqD,CACzDF,UAAW,CAAC,aAAc,YAAa,aACvCC,KAAM,CAAC,OAAQ,YAAa,aAC5BE,SAAU,CAAC,iBAAkB,qBAe/B,SAASC,EAAqB1pC,EAAqC1iE,GACjE,GAAc,MAAV0iE,EAAJ,CAGA,IAAM4K,EAAW5K,EAAO1iE,GACxB,GAAgB,MAAZstE,EAAkB,CACpB,IAAM++B,EAA2B,CAAC,EAElC,OADA3pC,EAAO1iE,GAAOqsG,EACPA,CACT,CACA,OAjBF,SAAwB/tG,GACtB,GAAa,MAATA,KAAiB,EAAAguG,EAAAA,gBAAehuG,MAAU,EAAAiuG,EAAAA,sBAAqBjuG,GAGnE,OAAOA,CACT,CAYSkuG,CAAel/B,EAPtB,CAQF,CAEA,SAASg+B,EAAchiG,EAAmBmjG,GACxC,IAAM36E,EAAWs6E,EAAqB9iG,EAAQ+F,UAAW,YACnDqkB,EAAU04E,EAAqBt6E,EAAU,WAC/C,OAAOs6E,EAAqB14E,EAAS+4E,EACvC,CAEA,SAASC,EAAa1vE,EAAuCh9B,GAC3D,IAAM1B,EAAQ0+B,IAAWh9B,GACzB,OAAO,EAAAssG,EAAAA,gBAAehuG,GAASA,OAAQuF,CACzC,CAEA,SAASunG,EACPhlC,EACAppC,EACAzV,GAEA,IAAK,IAAMokF,KAAa7rG,OAAOuB,KAAK0qG,GAAe,CACjD,IAAMY,EAAcvmC,EAAOulC,GAC3B,GAAmB,MAAfgB,EAAJ,CAGA,IAAMC,EAAgBF,EAAa1vE,EAAU2uE,GAC7C,IAAK,IAAMjqF,KAAUqqF,EAAaJ,GACV,MAAlBvlC,EAAO1kD,IAAyC,MAAtBsb,IAAWtb,KAGzC0kD,EAAO1kD,IAAU,EAAAqpC,EAAAA,mBAAkB4hD,GAC/B3vE,GAA6B,MAAjB4vE,IACd5vE,EAAStb,IAAU,EAAAqpC,EAAAA,mBAAkB6hD,IARzC,CAWF,CACA,IAAK,IAAM9nB,KAAe+nB,EAAAA,8BACG,MAAvBzmC,EAAO0e,IAAmD,MAA3B9nD,IAAW8nD,KAG9C1e,EAAO0e,IAAe,EAAA/5B,EAAAA,mBAAkBxjC,GACpCyV,IACFA,EAAS8nD,GA9DW,GAiE1B,CAYA,SAASgoB,EAAS1lC,GAChB,MAAO,GAAGA,EAAM96D,QAAQ86D,EAAM3+D,IAChC,CAEO,SAASijG,EAA+BvkC,GAC7C,IAAM4lC,EAAO,IAAIllF,IAAIs/C,EAAOl8D,IAAI6hG,IAC1Bx/F,EAAmB,GACzB,IAAK,IAAM85D,KAASD,EAAQ,CAC1B,IAAM6lC,EAA8B,gBAAf5lC,EAAM96D,KAAyB4/F,EAAkB9kC,EAAM3+D,SAAM5E,EAClF,GAAKmpG,EAIL,IAAK,IAAMvkG,KAAMukG,EAAc,CAC7B,IAAMC,EAAsB,CAAE/yE,MAAO,QAAS5tB,KAAM,cAAe7D,MAC9DskG,EAAKxpG,IAAIupG,EAASG,MACrBF,EAAK7jF,IAAI4jF,EAASG,IAClB3/F,EAAOjO,KAAK4tG,GAEhB,MATE3/F,EAAOjO,KAAK+nE,EAUhB,CACA,OAAO95D,CACT,C,0IClGO,SAAkComB,EAA2Bw5E,GAClE,IAAM34B,EAAQ42B,EAAyB+B,GACjCC,EAAY3B,EAA6Bj3B,EAAM,IAC/C82B,EAAkB,IAAK33E,EAAQ23E,iBAC/BE,EAAkB,IAAK73E,EAAQ63E,iBACrC,IAAK,IAAMzmB,KAAe+nB,EAAAA,8BACxBxB,EAAgBvmB,GAAe,CAACvQ,EAAM,GAAIA,EAAM,IAChDg3B,EAAgBzmB,GAAeqoB,EAEjC,MAAO,IAAKz5E,EAAS23E,kBAAiBE,kBACxC,E,6BAEO,SAAoC73E,GACzC,OAAO05E,EAAuBhxD,KAAM8wD,IAClC,IAAAG,GAAA,EAAA50F,EAAAtQ,SAAmBmlG,EAAaJ,GAAO,GAAhCvzC,EAAG0zC,EAAA,GAAEzzC,EAAGyzC,EAAA,GACTF,EAAY3B,EAA6B5xC,GAC/C,OAAOizC,EAAAA,8BAA8Bn/E,MAAOo3D,IAC1C,IAAMvQ,EAAQ7gD,EAAQ23E,gBAAgBvmB,GACtC,OAAOvQ,IAAQ,KAAO5a,GAAO4a,EAAM,KAAO3a,GAAOlmC,EAAQ63E,gBAAgBzmB,KAAiBqoB,KAGhG,E,gFA/CA9L,EAAAt9F,EAAA,OAIaqpG,EAA4C9vG,EAAAA,uBAAG,CAAC,MAAO,WAAY,QAG1EgwG,EAA6D,CACjEC,IAAK,CAAC,EAAG,IACTC,SAAU,CAAC,GAAI,IACfC,KAAM,CAAC,GAAI,KAON,SAAStC,EAAyB+B,GACvC,IAAAQ,GAAA,EAAAj1F,EAAAtQ,SAAmBmlG,EAAaJ,GAAO,GACvC,MAAO,CADGQ,EAAA,GAAKA,EAAA,GAEjB,CAEO,SAASlC,EAA6BmC,GAC3C,OAAOvoF,KAAKw0C,IARO,EAQWx0C,KAAKkgD,KAAKqoC,EAThB,IAU1B,C,YCiCA,SAASC,EAAUC,GACjB,MAAM,IAAIxiG,MAAM,4BAA4BzC,KAAKC,UAAUglG,KAC7D,C,uEAjCO,SAA6BC,EAA+BhzE,GACjE,IAAK,IAAM+yE,KAAU/yE,EACnB,OAAQ+yE,EAAOvhG,MACb,IAAK,aACHwhG,EAAQ9+D,MAAM++D,WAAWF,EAAOnvD,QAChC,MACF,IAAK,YACHovD,EAAQ9+D,MAAMQ,YACd,MACF,IAAK,qBACHs+D,EAAQrhE,QAAQuhE,mBAAmBH,EAAO19F,OAC1C,MACF,IAAK,gBACH29F,EAAQrhE,QAAQwhE,cAAc,CAC5B5uE,SAAUwuE,EAAOxuE,SACjBuhE,QAASiN,EAAOjN,QAChBthE,gBAAiBuuE,EAAOvuE,kBAE1B,MACF,IAAK,eACHwuE,EAAQrhE,QAAQC,eAChB,MACF,IAAK,iBACHohE,EAAQrhE,QAAQmD,iBAChB,MACF,QACEg+D,EAAUC,GAGlB,E,oCAnCO,SAA2C/yE,GAChD,OAAOA,EAAQ7vB,IAAK4iG,GACF,kBAAhBA,EAAOvhG,MAA4BuhG,EAAOvuE,gBAAkB,IAAKuuE,EAAQvuE,iBAAiB,GAAUuuE,EAExG,C,sFCCO,SAA6B19F,GAClC,OAAI+9F,EAA+B/9F,GAC1B,WAEL04C,EAAkC14C,GAC7B,mBADT,CAIF,E,yEAjCA,IAAAg+F,EAAApqG,EAAA,OAMO,SAASmqG,EAA+B/9F,GAC7C,OAAiC,MAA1BA,EAAM7G,QAAQsiD,WAAoB,EAAAwiD,EAAAA,6BAA4Bj+F,EAAM7G,QAAQsiD,SACrF,CAEO,SAAS/C,EAAkC14C,GAChD,GAAsC,MAAlCA,EAAM7G,QAAQu0B,iBAChB,OAAO,EAET,IAAMwwE,EAAcl+F,EAAM7G,QAAQ+kG,YAC5BC,EAAWD,GAAaC,UAAY,GACpCC,EAAcD,EAASA,EAAS7wG,OAAS,GAC/C,OACyB,MAAvB4wG,GAAa/gG,SACZ+gG,GAAa9vG,MACd+vG,EAAS7wG,OAAS,IACF,MAAf8wG,GAAuB//F,KAAKC,MAAQ8/F,EAjBP,OAmBlC,C,2ECiCO,SACLC,EACA5uE,GASA,IADA,IAAI6uE,EAAW,EACNhkC,EAAY,EAAGA,EAAY+jC,EAAe/wG,OAAQgtE,IAEzD,IADA,IAAMrN,EAAOoxC,EAAe/jC,GACnBikC,EAAiB,EAAGA,EAAiBtxC,EAAK3/D,OAAQixG,IAAkB,CAC3E,IAAM76E,EAAMupC,EAAKsxC,GACjB,GAAI76E,EAAIlmB,QACN,IAAK,IAAIghG,EAAgB,EAAGA,EAAgB96E,EAAIjmB,KAAKnQ,OAAQkxG,IAG3D,GADqB/uE,EADJ/L,EAAIjmB,KAAK+gG,GACQlkC,EAAWikC,EAAgBD,EAAUE,GAErE,OAINF,GAAY,CACd,CAEJ,E,cAjFO,SACLD,EACA5uE,GASA,IADA,IAAI6uE,EAAW,EACNhkC,EAAY,EAAGA,EAAY+jC,EAAe/wG,OAAQgtE,IAEzD,IADA,IAAMrN,EAAOoxC,EAAe/jC,GACnBikC,EAAiB,EAAGA,EAAiBtxC,EAAKoK,KAAK/pE,OAAQixG,IAAkB,CAEhF,IADA,IAAM76E,EAAMupC,EAAKoK,KAAKknC,GACbC,EAAgB,EAAGA,EAAgB96E,EAAIkP,UAAUtlC,OAAQkxG,IAGhE,GADqB/uE,EADJ/L,EAAIkP,UAAU4rE,GACGlkC,EAAWikC,EAAgBD,EAAUE,GAErE,OAGJF,GAAY,CACd,CAEJ,E,6BAKO,SACLG,EACAhvE,GAGA,IADA,IAAI6uE,EAAW,EACNhkC,EAAY,EAAGA,EAAYmkC,EAAgBnxG,OAAQgtE,IAE1D,IADA,IAAMrN,EAAOwxC,EAAgBnkC,GACpBikC,EAAiB,EAAGA,EAAiBtxC,EAAK3/D,OAAQixG,IAAkB,CAC3E,IAAK,IAAMG,KAASzxC,EAAKsxC,GACvB,IAAK,IAAM17C,KAAQ67C,EACjB,GAAkB,aAAd77C,EAAK1mD,MAGYszB,EAAGozB,EAAMyX,EAAWikC,EAAgBD,GAEvD,OAINA,GAAY,CACd,CAEJ,C,iHCq3CO,SACLz9F,EACA89F,EACA18E,EACAN,GAEA,IAAM0U,EAAmB5S,GAAiB5iB,EAAS8gB,GAC7C6mB,EAAUo2D,GAAmBvoE,EAAkBsoE,GAC/CE,EAAa,CAAE5xC,KAAMzkB,EAAQykB,KAAMvpC,IAAK8kB,EAAQ9kB,IAAM,EAAGswC,UAAWxrB,EAAQwrB,UAAY,GACxF8qC,EAA+B,CACnCt2D,QAASq2D,EACTtuG,KAAM,OAAOi4C,EAAQ9kB,IAAM,IAC3BkP,UAAW3Q,EAAO4C,QAAQ/pB,IAAI,CAACvN,EAAGU,KACzB,EAAA8wG,EAAAA,gDAA+CxxG,EAAGsxG,EAAYl9E,EAAU1zB,KAGnFooC,EAAiBmE,MAAMgO,EAAQykB,KAAO,GAAGoK,KAAK2nC,OAAOx2D,EAAQwrB,UAAW,EAAG8qC,GAC3EzoE,EAAiB9S,QAAQiX,MAAMgO,EAAQykB,KAAO,GAAGoK,KAAK2nC,OAAOx2D,EAAQwrB,UAAW,EAAG,CACjFzjE,KAAMuuG,EAAOvuG,KACbknE,aAAcqnC,EAAOlsE,UAAU93B,IAAKvN,GAAMA,EAAE6nF,UAAUp6E,KAAK,QAE7D,IAAMikG,EAAa,IAAI5jC,EAAAA,iBAAiBhlC,EAAkB1U,GAAU25C,mBAKpE,MAAO,CAAEz6D,QAJU,KACd,EAAA+5C,EAAAA,mBAAkB/5C,GACrB0iB,QAAS07E,GAEmBz2D,QAASq2D,EACzC,E,gCAzQO,SACLh+F,EACAw1B,EACA1U,GAEA,IAAMyB,GAAa,EAAAw3B,EAAAA,mBAAkB/5C,GAGrC,OAFAuiB,EAAWG,QAAU,IAAI83C,EAAAA,iBAAiBhlC,EAAkB1U,GAAU25C,mBACtEl4C,EAAWo4C,QAAUnlC,EAAiBmlC,QAC/Bp4C,CACT,E,6BAvLO,SAAoC5yB,EAAcuyD,EAAYliD,EAAmB8gB,GACtF,IAAM4B,EAAU1iB,EAAQ0iB,QACxB,OAAKA,EAGE,IACF1iB,EACH0iB,QAAS,IACJA,EACHiX,MAAOjX,EAAQiX,MAAM1/B,IAAKmyD,IACjB,IACFA,EACHoK,KAAMpK,EAAKoK,KAAKv8D,IAAK4oB,IACZ,IACFA,EACH+zC,cAAc,EAAAynC,EAAAA,qCAAoCx7E,EAAI+zC,aAAcjnE,EAAMuyD,EAAIphC,WAZjF9gB,CAmBX,E,uDArPO,SAA8BuF,EAAqBvF,EAAmB8gB,GAC3E,IAAMw9E,GAAe,EAAA5xF,EAAAA,wBAAuB,IAC5C,EAAAwU,EAAAA,aACE3b,EACA,EACE,EAAA4b,EAAAA,MACG7yB,EAAE,WACFA,EAAE,YACFusC,aAAcjZ,IACb,IAAMW,EAAa,IAAKviB,EAASg6C,SAAUx8C,KAAKC,MAAOhG,GAAI6mG,GAI3D,OAHI/7E,EAAWG,UACbH,EAAWG,SAAU,EAAA23B,EAAAA,6BAA4B93B,EAAWG,QAAS5B,IAEhE,IAAIc,EAAUW,MAEzB,EAAApB,EAAAA,MAAa7yB,EAAE,WAAWA,EAAE,oBAAoB8yB,OAAOk9E,IAEzD,gBAEJ,E,sCAy0BO,SACLr6E,EACA0jB,EACA7mB,EACAoJ,EACAlqB,EACA8iB,EACAsrE,GAEA,IAAMjvF,GAAQ,EAAA66D,EAAAA,iCAAgC9vC,GACxC5tB,EAASiiG,EACbt6E,EACA0jB,EACA7mB,EACA3hB,EACAa,EAAQ61B,OACR3L,EACApH,EACAsrE,GAEF,GAAK9xF,EAAOK,QAAZ,CAGA,IAAA88C,EAA+Cn9C,EAAOM,KAAvC2P,EAAQktC,EAAft6C,MAAiB+jD,EAAOzJ,EAAPyJ,QAASL,EAAQpJ,EAARoJ,SAClC,MAAO,CACL0rC,UAAWiQ,GAAqBr/F,EAAOoN,EAAUuU,EAASxc,OAC1DmqF,SAAUgQ,GAAoBx6E,EAAOi/B,EAASL,EAAU/hC,GACxDu0C,OAAQ/4D,EAAOM,KAAKy4D,OALtB,CAOF,E,4EAn7BO,SAAgC/wD,GACrC,IAAMmyE,GAAgB,EAAAC,EAAAA,cAAapyE,GAAO,IAC1C,MAAO,CACL5U,KAAM,QACN+H,IAAI,EAAAiV,EAAAA,wBAAuB,GAC3BgyF,WAAY,CAACC,GAAwB,IACrCr5D,aAAc,CACZ7tC,GAAI,QACJ+sB,UAAW,WAEbrlB,MAAO,CACL4jB,OAAkB,OAAVze,EAAiB0vE,EAAAA,iBAAiB6N,MAAMxmB,iBAAmB2Y,EAAAA,iBAAiB6N,MAAMvmB,kBAE5FjmC,WAAYohD,EACZmoB,cAAe,GACfC,cAAe,IACfC,aAAc,CAAC,IACfxkC,cAAe,CAAC,EAChBykC,WAAY,CAAEC,cAAUnsG,EAAWgjC,OAAQ,CAAC,GAEhD,E,kCA2nBO,SACLu2D,EACAhrE,EACAN,GAEA,IAAM6mB,EAAU,CAAEykB,KAAM,EAAGvpC,IAAK,EAAGswC,UAAW,GACxCnzD,EAAoB,IACrBw4C,GAAe4zC,GAClB1pE,QAAS,CACPwG,MAAO,UACPx5B,KAAM08F,EACNzyD,MAAO,CAAC,CAAEjqC,KAAM,SAAU8mE,KAAM,CAAC,CAAE9mE,KAAM,QAASknE,aAAc,SAG9DphC,EAAmB5S,GAAiB5iB,EAAS8gB,GACnC9gB,EAAQ0iB,QAChBiX,MAAM,GAAG68B,KAAK,GAAGI,aAAex1C,EAAO4C,QAC5C/pB,IAAKgqB,IACJ,IAAM9f,GAAW,EAAAi3D,EAAAA,cAAan3C,EAAM9f,SAAU2c,EAASiR,WACvD,OAAO,EAAAu6D,EAAAA,mBAAkBnoF,EAAU2c,KAEpC3mB,KAAK,MACR,IAAM8jG,EAA+B,CACnCt2D,QAASA,EACTj4C,KAAM,QACNqiC,UAAW3Q,EAAO4C,QAAQ/pB,IAAI,CAACvN,EAAGU,KACzB,EAAA8wG,EAAAA,gDAA+CxxG,EAAGi7C,EAAS7mB,EAAU1zB,KAGhFooC,EAAiBmE,MAAM,GAAG68B,KAAK,GAAKynC,EACpC,IAAMG,EAAa,IAAI5jC,EAAAA,iBAAiBhlC,EAAkB1U,GAAU25C,mBAKpE,MAJmB,KACd,EAAA1gB,EAAAA,mBAAkB/5C,GACrB0iB,QAAS07E,EAGb,E,mFA9zBO,SAAkCp+F,EAA4B8gB,GACnE,IAAMm+E,EAA2B,GACjC,IAAK,IAAM7yC,KAAQpsD,EAAQ25B,MACzB,IAAK,IAAM9W,KAAOupC,EAAKoK,KACrByoC,EAAe5wG,KAAK6wG,EAAwBr8E,EAAK/B,IAGrD,OAAOm+E,EAAex0E,OAAO,CAAC00C,EAAKlyE,IAAMkyE,EAAMlyE,EAAG,GAAKgyG,EAAexyG,MACxE,E,oBA8bO,SAA2BuT,GAChC,IAAMm/F,EAAU/qF,KAAKu0C,OAAO3oD,EAAQ25B,MAAM1/B,IAAKowD,GAAMA,EAAEmM,KAAK/pE,SACtD2yG,EAAUhrF,KAAKw0C,OAAO5oD,EAAQ25B,MAAM1/B,IAAKowD,GAAMA,EAAEmM,KAAK/pE,SAC5D,OAAI0yG,IAAYC,EACP,GAAGD,MAAW,EAAA/xD,EAAAA,uBAAsB,MAAO+xD,cAE3C,GAAGA,KAAWC,iBAEzB,E,qBAuMO,SAA4B75F,EAAqBvF,EAAmB4nC,GACzE,IAAMy3D,GAAe,EAAAC,EAAAA,8BAA6Bt/F,EAAQvI,GAAIuI,IAC9D,EAAAkhB,EAAAA,aACE3b,EACA,EAAC,EAAA4b,EAAAA,MAAa7yB,EAAE,qBAAqBA,EAAE0R,EAAQvI,IAAI2pB,OAAOi+E,IAC1D,0BAEF95F,GAAS,EAAAs5B,EAAAA,kBAAiB,cAAe,CAAEniC,UAAWsD,EAAQvI,IAAMmwC,GACtE,E,oHA7MO,SAA+B5nC,GACpC,IAAMw2D,EAAOx2D,EAAQ25B,MAAM6hC,QAASnR,GAAMA,EAAEmM,MAG5C,OAAO+oC,GAFQnrF,KAAKu0C,OAAO6N,EAAKv8D,IAAKgY,GAAMukF,GAAmCvkF,GAAGxlB,SAClE2nB,KAAKw0C,OAAO4N,EAAKv8D,IAAKgY,GAAMukF,GAAmCvkF,GAAGxlB,SAEnF,E,0FA0MO,SAAqCuT,EAAmB8gB,EAAqBiY,GAClF,IAAMl7B,EAAU2hG,GAAsBx/F,EAAS8gB,EAAUiY,IACzD,EAAAP,EAAAA,iBACE,aAAax4B,EAAQtQ,KAAKw/D,QAAQ,OAAQ,SAAQ,EAAAz2B,EAAAA,0BAAyBj7B,KAAKC,cAChF7F,KAAKC,UAAUgG,EAAS,KAAM,GAElC,E,8BAAC,SAEgD9E,EAAAC,EAAAC,GAAA,OAAAwmG,GAAA5xG,MAAC,KAADD,UAAA,E,kDAiC1C,SACL8xG,EACAC,GAEA,IAAM3/F,EAAU,IACXw4C,GAAeknD,EAAuB1/F,QAAQtQ,KAAMgwG,EAAuBjoG,IAC9EirB,QAASg9E,EAAuB1/F,SAgBlC,OAdgB,MAAZ2/F,IACF3/F,EAAQ26D,QAAUglC,GAEsB,CACxChuE,gBAAiB+tE,EAAuB5+E,SAASiR,UACjD/xB,UACA+4B,QAAS2mE,EAAuB3mE,QAChCjY,SAAU,CACRsN,OAAQ,CACNqN,QAASikE,EAAuB5+E,SAASkd,OAE3Ctb,QAASg9E,EAAuBE,iBAItC,E,8BAtYO,SACLl9E,EACA5B,EACAyzD,GAEA,IAAMvlF,GAAM,EAAAijE,EAAAA,yBAAwBsiB,EAAUzzD,EAASiR,WACvD,IAAK,IAAMq6B,KAAQyzC,GAA6Bn9E,EAAS5B,GACvD,IAAK,IAAM+B,KAAOupC,EAAKoK,KAAM,CAC3B,IAAMryD,EAAW0e,EAAIkP,UAAUqZ,KAAM1+C,GAAMA,EAAEsC,MAAQA,GACrD,GAAgB,MAAZmV,EACF,OAAOA,CAEX,CAGJ,E,gQAjlBO,SAAoCnE,EAA4B6iB,GACrE,OAAOi9E,EAA+B9/F,EAAS6iB,GAAK5oB,IAAKvN,GAAMA,EAAEsC,IACnE,E,iMAo2BO,SACLgR,EACA6iB,EACA7zB,EACA8xB,GAEA,IACIi/E,EADWvC,EAAmB56E,GAAiB5iB,EAAS8gB,GAApD6Y,MAUR,OARA,EAAAwgC,EAAAA,aAAYqjC,EAAgB,CAACr5F,EAAUs1D,EAAWikC,EAAgBD,IAC5DA,IAAa56E,EAAM,GAAK1e,EAASnV,MAAQA,GAC3C+wG,EAAyB57F,GAClB,QAEP,GAGG47F,CACT,E,uCAkbO,SAA8C5gG,GACnD,IAAMa,EAAUggG,EAA0B7gG,EAAM7G,SAChD,OAAO0H,EAAU4iB,GAAiB5iB,EAASb,EAAM7G,QAAQwoB,eAAYjuB,CACvE,E,qCAvkBO,SACLmN,EACAosD,EACAvpC,GAEA,IAAMo9E,EAAiC,GASvC,OARA,EAAA9lC,EAAAA,aAAYn6D,EAAQ25B,MAAO,CAACx1B,EAAUs1D,EAAWikC,KAC/C,GAAIjkC,EAAY,IAAMrN,GAAQsxC,EAAiB,IAAM76E,EAAK,CACxD,IAAMq9E,EAAS/7F,EAASmhC,aACpB46D,IAAWD,EAAc1vF,KAAM4vF,IAAO,EAAAhV,EAAAA,aAAYgV,EAAID,KACxDD,EAAc5xG,KAAK6xG,EAEvB,IAEKD,CACT,E,kCA8FO,SACLjgG,EACAhR,GAEA,GAAW,MAAPA,GAA0B,MAAXgR,EAGnB,OAAOogG,EAA+BpgG,GAASorC,KAAM1+C,GAAMA,EAAEsC,MAAQA,GAAOtC,EAAE6nF,WAAavlF,EAC7F,E,yBAjhCO,SAAgCmQ,EAAe1H,GACpD,IAAMuI,EAAUsiB,EAAmBnjB,EAAO1H,GAC1C,OAAIuI,EACKqgG,GAAoBrgG,EAASb,EAAM7G,QAAQwoB,eAElD,CAEJ,E,wBAi8BO,SAA+B9gB,GACpC,IAAMw2D,EAA2B,GAC3B8pC,EAAoBtgG,EAAQ25B,MAAMltC,OAAS,EAC7CgxG,EAAW,EACf,IAAK,IAAMrxC,KAAQpsD,EAAQ25B,MACzB,IAAK,IAAM9W,KAAOupC,EAAKoK,KACrBinC,GAAY,EACZjnC,EAAKnoE,KAAK,CAAC,GAAGovG,IAAY,GAAG6C,EAAoB,GAAGl0C,EAAK18D,UAAY,KAAKmzB,EAAInzB,SAGlF,OAAO8mE,CACT,E,uCAzJO,SAA8Cx2D,EAA4BugG,GAC/E,IAAIp8B,EAAQ,EAMZ,OALA,EAAAhK,EAAAA,aAAYn6D,EAAQ25B,MAAQx1B,IACtBA,EAASnV,MAAQuxG,IACnBp8B,GAAS,KAGNA,CACT,E,mFAoKO,SAAwCoyB,GAE7C,OADaA,EAAWxkE,UAAUxhC,OAAQ7D,GAAwB,MAAlBA,EAAE44C,aAEpD,E,qEAoBO,SACLziB,EACA7iB,EACAhR,GAEA,GAAW,MAAPA,GAA0B,MAAXgR,EAAnB,CAGA,IAAMu2F,EAAaiK,GAAsBxgG,EAAS6iB,GAClD,OAAO0zE,GAAYxkE,UAAUqZ,KAAM1+C,GAAMA,EAAEsC,MAAQA,EAFnD,CAGF,E,6CAlXO,SACLwmC,EACA8P,EACA8mB,EACA+G,GAEA,IAAIhvD,EAaJ,OAZA,EAAAg2D,EAAAA,aAAY3kC,EAAiBmE,MAAO,CAACjtC,EAAG+sE,EAAWikC,MAE/CjkC,EAAY,IAAMrN,GAClBsxC,EAAiB,IAAMvqC,IACvBzmE,EAAE44C,gBACF,EAAA6lD,EAAAA,aAAYz+F,EAAE44C,aAAcA,KAE5BnhC,EAAWzX,EACJ,KAIJyX,CACT,E,6FA9OO,SACLnE,EACA2nC,EACA34C,GAGA,OAAO6+F,EAAuC7tF,EADlCygG,GAAqBzgG,EAAS2nC,EAAQykB,KAAMzkB,EAAQwrB,WACJnkE,EAC9D,E,oCAilBO,SACLunG,EACAvnG,GAEA,GAAW,MAAPA,GAA6B,MAAdunG,EAGnB,OAAOA,GAAYxkE,UAAUqZ,KAAM1+C,GAAMA,EAAEsC,MAAQA,EACrD,E,8CAt+BO,SACLgR,EACAslC,GAEA,OAAOo7D,EAAmC1gG,GAASzP,OAAQjC,IAAM,EAAA68F,EAAAA,aAAY78F,EAAEg3C,aAAcA,GAC/F,E,0BAEO,SAAiCnmC,EAAe1H,GACrD,OAAO0H,EAAM7G,QAAQspB,SAAS04B,UAAWhsD,GAAMA,EAAEmJ,KAAOA,EAC1D,E,yBAu5BO,SAAgCuI,EAA4B6iB,GACjE,OAAO7iB,EAAQ25B,MAAMgnE,GAAuB3gG,EAAS6iB,GAAO,GAAK,IAAM7iB,EAAQ25B,MAAM,EACvF,E,iCAsSO,SACL3qC,EACAwmC,EACAmS,GAEA,IAAMrrC,EAA0C,CAAC,EAsBjD,OArBA,EAAA69D,EAAAA,aAAY3kC,EAAiBmE,MAAO,CAACx1B,EAAUs1D,EAAWikC,KACxD,IACEv5F,EAASnV,MAAQA,KACf24C,EAAQykB,OAASqN,EAAY,GAAK9xB,EAAQwrB,YAAcuqC,EAAiB,GAAMv5F,EAASy8F,YAItE,MAAlBz8F,EAAS08F,OAA6C,MAA5B18F,EAASqd,UAAUq/E,OAA2C,MAA1B18F,EAAS28F,QAAQD,MAAnF,CAGA,IAAIE,EAAoBzkG,EAAO6H,EAASnV,KACnC+xG,IACHA,EAAoB,CAClB58F,WACA68F,YAAa,CAAC,GAEhB1kG,EAAO6H,EAASnV,KAAO+xG,GAEzBA,EAAkBC,YAAYvnC,EAAY,GAAKsnC,EAAkBC,YAAYvnC,EAAY,IAAM,IAAI5iD,IACnGkqF,EAAkBC,YAAYvnC,EAAY,GAAGvhD,IAAIwlF,EAAiB,EAVlE,IAYKphG,CACT,E,yFAuCO,SACLk5B,EACAtL,GAEA,IAAM6H,EAAuC,GAU7C,OATA,EAAAooC,EAAAA,aAAY3kC,EAAiBmE,MAAQjtC,IAEjCA,EAAEoyG,aAAa+B,OAAO18F,UAAUnV,MAAQk7B,EAAgBl7B,KACxDtC,EAAEoyG,aAAa+B,OAAO18F,SAASwjC,QAAQykB,OAASliC,EAAgByd,QAAQykB,MACxE1/D,EAAEoyG,aAAa+B,OAAO18F,SAASwjC,QAAQwrB,YAAcjpC,EAAgByd,QAAQwrB,WAE7EphC,EAAU1jC,KAAK3B,KAGZqlC,CACT,E,sCA4BO,SACLyD,EACAtL,GAEA,IAAM+2E,EAAiCC,GAA0C1rE,EAAkBtL,GAC7Fi3E,EAA8BC,GAAuC5rE,EAAkBtL,GAK7F,OAJkB,EAAA5wB,EAAAA,wBAChB,IAAI2nG,KAAmCE,GACvC,WAGJ,E,8EAvEO,SACL3rE,EACAtL,GAEA,IAAM6H,EAAuC,GAU7C,OATA,EAAAooC,EAAAA,aAAY3kC,EAAiBmE,MAAQjtC,IAEjCA,EAAEm0G,OAAO18F,UAAUnV,MAAQk7B,EAAgBl7B,KAC3CtC,EAAEm0G,OAAO18F,SAASwjC,QAAQykB,OAASliC,EAAgByd,QAAQykB,MAC3D1/D,EAAEm0G,OAAO18F,SAASwjC,QAAQwrB,YAAcjpC,EAAgByd,QAAQwrB,WAEhEphC,EAAU1jC,KAAK3B,KAGZqlC,CACT,E,oCA0DO,SACLyD,EACAtL,GAEA,IAAM6H,EAAuC,GAM7C,OALA,EAAAooC,EAAAA,aAAY3kC,EAAiBmE,MAAQjtC,IAC/BA,EAAEm0G,OAAOtsB,WAAarqD,EAAgBqqD,UACxCxiD,EAAU1jC,KAAK3B,KAGZqlC,CACT,E,mCAxGO,SACL/iC,EACAqyG,EACA7rE,EACAl6B,GAEA,IAAMgB,EAAiC,CAAC,EAWxC,OAVA,EAAA69D,EAAAA,aAAY3kC,EAAiBmE,MAAQx1B,IACnC,GAAIA,EAASnV,MAAQA,EAArB,CAGA,IAAM4zD,EAAkB,aAATtnD,EAAsB6I,EAASqd,SAAWrd,EAAS28F,OAC7Dl+C,GAA0B,WAAhBA,EAAOtnD,QAAyB+lG,GAAWl9F,EAASk9F,UAAYz+C,EAAOi+C,SAGtFvkG,EAAO6H,EAASowE,UAAYpwE,EAASowE,SALrC,IAOKzlF,OAAOuB,KAAKiM,EACrB,E,+BAxjCO,SACLglG,EACAC,GAEA,GAAgC,MAA5BA,EAAgBC,SAClB,MAAO,GAET,IACMjL,EAAaiK,GAAsBc,EADzBC,EAAgB55D,QACkC9kB,KAGlE,OAFqB0zE,EAAaC,GAAmCD,GAAc,IACvDhmG,OAAQ7D,GAAMA,EAAE80G,UAAU9xG,OAAS6xG,EAAgBC,UAAU9xG,KAE3F,E,4BApCO,SACL8lC,EACAmS,EACA85D,GAEA,IAAMlL,EAAaiK,GACjBhrE,EACAirE,GAAqBjrE,EAAkBmS,EAAQykB,KAAMzkB,EAAQwrB,YAEzDuuC,EAAenL,EAAaC,GAAmCD,GAAc,GAC7EoL,EAAqE,CAAC,EAC5E,IAAK,IAAMx9F,KAAYu9F,EACI,MAArBv9F,EAASq9F,WACNG,EAAOx9F,EAASq9F,SAAS9xG,QAC5BiyG,EAAOx9F,EAASq9F,SAAS9xG,MAAQ,IAE/ByU,EAASnV,MAAQyyG,GAAiBzyG,KACpC2yG,EAAOx9F,EAASq9F,SAAS9xG,MAAOrB,KAAK8V,IAI3C,OAAOw9F,CACT,E,gDAi6BO,SAA2BC,EAAoBC,GACpD,IAAWC,EAAehzG,OAAAgB,OAAA,OAAAiyG,EAAA5qG,SAAKyqG,GAAAA,IACpBI,EAAelzG,OAAAgB,OAAA,OAAAiyG,EAAA5qG,SAAK0qG,GAAAA,IAE/B,QADiB,EAAAr/E,EAAAA,qBAAoBs/E,EAAiBE,KAEtC,EAAAC,EAAAA,uBAAsBH,EAAiBE,GACxCzxF,KAAMjiB,IACTA,EAAE4zG,MAAM,yBAA2B5zG,EAAE4zG,MAAM,sCAAwC5zG,EAAE4zG,MAAM,WAIzG,E,kBA9nCO,SAAyBliG,GAC9B,OAAOA,GAASvI,KAAO+hE,CACzB,E,8EA8HO,SACLooC,EACA9gF,EACAgC,EACA26E,GAGA,OAAO0E,EADSv/E,GAAiBg/E,EAAU9gF,GACYA,EAAUgC,EAAO26E,EAC1E,E,8FAwZO,SAAgCl4F,EAAqB7I,EAAmB0lG,IAC7E,EAAAlhF,EAAAA,aACE3b,EACA,EACE,EAAA4b,EAAAA,MAAa7yB,EAAE,kBAAkB8yB,OAAO,CACtC3pB,GAAIiF,EACJ0lG,wBAGJ,mBAEF78F,GAAS,EAAAs5B,EAAAA,kBAAiB,kBAC5B,E,iCAvHO,SACL7+B,EACAwhB,EACAsB,EACAhC,EACAuhF,GAEA,IAAM7+E,EAA8B,CAAC,EAC/B8+E,EAAsBC,GAAsBviG,EAAS8gB,GACrD6mB,GAAU,EAAA66D,EAAAA,qBAAoBhhF,GAEpC,IADmBg/E,GAAsB8B,EAAqB9gF,EAASqB,KAErE,MAAO,CAAE7iB,UAASwjB,gBACnB,IAAAukC,EAAA,SAAA9jC,GAEC,GAAa,MAATA,IAAkBA,EAAMw+E,cAAgBx+E,EAAMyR,KAAKnlB,KAAM86B,GAAMA,EAAE1V,aAAc,CACjF,IAAMzL,EACJlqB,GAAWikB,EAAMI,kBACbwpE,EAAuCyU,EAAqB36D,EAAQ9kB,IAAKoB,EAAMI,wBAC/ExxB,EACN,GAAIq3B,EAAiB,CACnB,IAAMw4E,EAAiBC,EACrBz4E,EACAo4E,EACA36D,EACA1jB,EACAnD,EACAgC,EACAtB,EAAS4sE,wBAAwBlkE,EAAgBl7B,MAEnD,GAAI0zG,EAAe/lG,QAAS,CAC1B,IAAAimG,EAAkDF,EAAe9lG,KAAzDuC,EAAKyjG,EAALzjG,MAAO+jD,EAAO0/C,EAAP1/C,QAASL,EAAQ+/C,EAAR//C,SAAU14B,EAAWy4E,EAAXz4E,YAC5Bo2E,GAAc,EAAAr8E,EAAAA,gBAAeD,EAAM9f,UACnCktD,GAAQ,EAAAu9B,EAAAA,gBAAe3qE,EAAM9f,SAAU2c,IACxC,EAAAuC,EAAAA,WAAUw/B,EAASgJ,IAAKwF,KAC3B7tC,EAAa+8E,GAAe,CAAE10C,KAAK,EAAA6R,EAAAA,mBAAkB7a,EAASgJ,QAEhE,EAAAsO,EAAAA,aAAYmoC,EAAoB3oE,MAAQx1B,IAClCA,EAASnV,MAAQk7B,EAAgBl7B,KAAOmV,EAASqd,WACnDrd,EAASqd,SAASriB,MAAQ,IAAKgF,EAASqd,SAASriB,SAAU8kB,EAAM9kB,SAAUA,OAG/E,EAAA0jG,EAAAA,gCAA+B34E,EAAgBl7B,IAAKszG,EAAqBp/C,EAASpiC,GAAU,IAAA6mD,EAAA,SAAA34E,IAE1F,EAAAmrE,EAAAA,aAAYmoC,EAAoB3oE,MAAQx1B,IAClCA,EAAS00C,MAAMppC,SAASvd,OAAOlD,KAASmV,EAASqd,WACnDrd,EAASqd,SAASriB,MAAQ,IAAKgF,EAASqd,SAASriB,SAAUgrB,EAAYn7B,MAG7E,EANA,IAAK,IAAMA,KAAO,EAAA80B,EAAAA,kBAAiBqG,GAAe,CAAC,GAAEw9C,EAAA34E,EAOvD,KAAO,CACL,IAAM8N,EAAU,iDAAiD4lG,EAAennG,QAC5E8mG,EACFA,EAAQvlG,IAER,EAAAkQ,EAAAA,cAAalQ,EAEjB,CACF,CACF,CACF,EA9CA,IAAK,IAAMmnB,KAASzC,EAASwC,QAAO+jC,EAAA9jC,GA+CpC,IAAM6+E,EAAaC,GAAgBT,EAAqB9gF,EAASqB,KAC3Du7E,EAAa,IAAI5jC,EAAAA,iBAAiB8nC,EAAqBxhF,GAAU25C,mBACjEl4C,GAAa,EAAAw3B,EAAAA,mBAAkB/5C,GAIrC,OAHAuiB,EAAWo4C,QAAUmoC,EACrBvgF,EAAWG,QAAU07E,EAEd,CACLp+F,QAASuiB,EACTiB,eAEJ,E,iIAiGO,SAAwCje,EAAqB7I,GAClEsmG,EAAsBz9F,EAAU7I,GAChC6I,GAAS,EAAAs5B,EAAAA,kBAAiB,YAAQhsC,EAAW,CAAEi+B,IAAK,SACtD,E,qBArfO,SACL3xB,EACAnQ,EACA1B,GAEA,GAAa,MAATA,EAAJ,CAGA,IAAM21G,EAAWtjD,WAAWryD,GACtBysG,EAAW56F,EAAMnQ,GACvB,OAAgB,MAAZ+qG,EACKkJ,GACE,EAAA59C,EAAAA,WAAU00C,IACZ,EAAA52E,EAAAA,cAAa8/E,EAAUlJ,EAAS/2C,OAC9B,EAAAsC,EAAAA,cAAay0C,IACf,EAAAvrC,EAAAA,iBAAgBy0C,GAEhBA,CAVT,CAYF,E,mCA3FO,SAA0C3qG,EAAmBoE,GAClE,IAAMsD,EAAU1H,EAAQspB,SAASwpB,KAAM98C,GAAMA,EAAEmJ,KAAOiF,GACtD,GAAKsD,EAAL,CAGA,IAAM8gB,EAAWxoB,EAAQwoB,SACzB,MAAO,CACL9gB,QAASkjG,EAA4BljG,GACrC2xB,gBAAiB7Q,EAASiR,UAC1BgH,QAASzgC,EAAQygC,QACjBjY,SAAUA,EANZ,CAQF,E,gBA+kCC,SAEkCvnB,EAAAC,EAAAgB,EAAAF,GAAA,OAAA6oG,GAAAt1G,MAAC,KAADD,UAAA,E,gEAjU5B,SAA4BoS,GACjC,OAAOA,EAAQ25B,MAAMltC,OAAS,EAC1B,GAAGuT,EAAQ25B,MAAMltC,WAAU,EAAA2gD,EAAAA,uBAAsB,OAAQptC,EAAQ25B,MAAMltC,UACvE,EACN,E,6BAp3BO,SAAYuT,EAAoB8gB,GACrC,OALF,SAA4B9gB,GAC1B,MAAO,SAAUA,GAA4B,qBAAjBA,EAAQ1E,IACtC,CAGM8nG,CAAmBpjG,GACdA,EAEA4iB,GAAiB5iB,EAAS8gB,EAErC,E,gCAlMA2F,EAAA1zB,EAAA,OAYAswG,EAAAtwG,EAAA,OACA8T,EAAA9T,EAAA,OACAy8C,EAAAz8C,EAAA,OAUA6yB,EAAA7yB,EAAA,OAGAg0B,EAAAh0B,EAAA,OAWAgT,EAAAhT,EAAA,OACA8yB,EAAA9yB,EAAA,OAmBAozB,EAAApzB,EAAA,OASAg8C,EAAAh8C,EAAA,OACAqzB,EAAArzB,EAAA,OAEAo9F,EAAAp9F,EAAA,OAKA0T,EAAA1T,EAAA,OACAuwG,EAAAvwG,EAAA,OAEA48C,EAAA58C,EAAA,OACAG,EAAAH,EAAA,OACAqiB,EAAAriB,EAAA,OAEAgoE,EAAAhoE,EAAA,OAOAq9F,EAAAlzE,EAAAnqB,EAAA,QACAs9C,EAAAt9C,EAAA,OACAwwG,EAAAxwG,EAAA,OAOAm/D,EAAAn/D,EAAA,OACA8nE,EAAA9nE,EAAA,OACA+nE,EAAA/nE,EAAA,OAUAE,EAAAF,EAAA,OAEAC,EAAAD,EAAA,OACA+S,EAAA/S,EAAA,OACAolF,EAAAplF,EAAA,OACAywG,EAAAzwG,EAAA,OACA+zB,EAAA/zB,EAAA,OAIM0wG,EAAgE,CAAC,EA8D1DjqC,EAAcltE,EAAAA,eAAG,eAcvB,SAASg2B,EAAmBnjB,EAAe1H,GAChD,OAAIA,IAAO+hE,EACFkqC,IAEAvkG,EAAM7G,QAAQspB,SAASwpB,KAAM98C,GAAMA,EAAEmJ,KAAOA,EAEvD,CAWO,SAASyrG,EAA4BljG,GAC1C,IAAM0iB,EAAU1iB,EAAQ0iB,QACxB,GAAe,MAAXA,EAAiB,CACnB,IAAM07E,EAAa,IACd17E,EACHiX,MAAOjX,EAAQiX,MAAM1/B,IAAKowD,IAAC,KACtB,EAAApS,EAAAA,kBAAiBoS,EAAG,CAAC,OACxBmM,KAAMnM,EAAEmM,KAAKv8D,IAAKgY,IAAC,KACd,EAAAgmC,EAAAA,kBAAiBhmC,EAAG,CAAC,cAI9B,MAAO,IACFjS,EACH0iB,QAAS07E,EACTrsE,UAAW,GACXykC,KAAM,GACN78B,MAAO,GAEX,CACE,OAAO35B,CAEX,CAiCO,SAASggG,EAA0B1nG,GACxC,OAAOA,EAAQspB,SAASrxB,OAAQjC,GAAMA,EAAEmJ,KAAOa,EAAQu0B,kBAAkB,EAC3E,CAgBO,SAAS0sE,EACdv5F,EACA2nC,EACA0Q,EACAnuB,EACApH,EACAhC,GAMA,IAJA,IAAM3c,EAAW+lB,EAAgBob,aAC3Bq+D,GAAc,EAAAC,EAAAA,qDAAoD15E,IAAkBwL,KACpFL,GAAa,EAAAwuE,EAAAA,uCAAsC35E,EAAiBpJ,GACpE4U,EAAe,GACZtoC,EAAI,EAAGA,EAAIu2G,EAAYl3G,OAAQW,IAAK,CAC3C,IAAM02G,EAAaH,EAAYv2G,GACzB+8D,EACiB,MAArB25C,EAAWC,QAAkBD,EAAWC,SAAWD,EAAWE,OAASF,EAAWC,YAASlxG,EACvFkwB,GAAS,EAAAkhF,EAAAA,+BAA8BH,EAAY55E,EAAgBob,aAAcxkB,GACvF4U,EAAKrnC,KAAK,CACR66B,MAAO,MACPzxB,IAAI,EAAAiV,EAAAA,wBAAuB,GAC3Bw9C,KAAM45C,EAAWE,OACjB3rD,MAAOjrD,EACP+8D,UACApnC,SACAyjE,cAAc,EAAAC,EAAAA,0BAAyBtiF,EAAU2c,GACjD0rE,IAAKsX,EAAWtX,IAChBxuD,MAAO8lE,EAAW9lE,MAClB5K,SAAU0wE,EAAW1wE,SACrBy5D,mBAAoBiX,EAAWjX,mBAC/BqX,KAAMJ,EAAWI,KACjBxX,OAAQoX,EAAWpX,OACnBC,UAAWmX,EAAWnX,UACtB92B,eAAgBiuC,EAAW/gF,OAC3BwpE,QAASuX,EAAWvX,QACpBrjF,MAAO46F,EAAW56F,MAClBysB,aAAa,EACbwuE,gBAAiB/2G,GAErB,CAEA,IAAM62B,EAAuB,CAC3BiF,MAAO,gBACPzxB,IAAI,EAAA+/D,EAAAA,qBAAoBrzD,EAAU+lB,EAAgBhhB,OAClDmvC,QACAl0C,SAAUA,EACVkgB,kBAAmB6F,EAAgBl7B,IACnC0mC,OACA8rE,SAAUt3E,EAAgBs3E,UAAU9xG,KACpC2lC,YAAY,EAAA+uE,EAAAA,wBAAuBjgG,EAAUuxB,EAAK,IAAI3S,OAAQjC,EAAUuU,IAE1E,IACE,OAAO,EAAAgvE,EAAAA,kCAAiCpgF,EAAO0jB,EAASzd,EAAiBlqB,EAAQ61B,QAAS,EAAG/U,EAAUgC,EACzG,CAAE,MAAOvnB,GAEP,OADAgzB,QAAQhzB,MAAMA,GACP0oB,CACT,CACF,CAqCO,SAAS67E,EACd9/F,EACA6iB,GAEA,IAAM0zE,EAAaiK,GAAsBxgG,EAAS6iB,GAClD,OAAO,EAAAm6C,EAAAA,wBAAuBu5B,EAAaC,GAAmCD,GAAc,GAAI,QAClG,CAMO,SAAS4L,EACdniG,EACA8gB,EACAgC,EACA26E,GAEA,IAAM56E,EAAMzO,KAAKw0C,IAAI,EAAGx0C,KAAKu0C,IAAI27C,GAAqBtkG,GAAUoU,KAAKw0C,IAAI,GAAI60C,GAAYz9F,EAAQ26D,UAAY,KACvGhzB,EAAUo2D,GAAmB/9F,EAAS6iB,GACpCupC,EAAoBzkB,EAApBykB,KAAM+G,EAAcxrB,EAAdwrB,UAERoxC,EAAcC,GAAmBxkG,EAAS6iB,GAC1CplB,EAAMD,KAAKC,MAEXumB,EADqB87E,EAA+B9/F,EAAS6iB,GAChC5oB,IAAI,CAACkK,EAAU/W,IACzCmsG,EAAyBv5F,EAAS2nC,EAASv6C,EAAG+W,EAAU2e,EAAOhC,IAExE,MAAO,CACLoI,MAAO,WACPzxB,GAAI,EACJi2B,MAAM,IAAIlwB,MAAOovF,cACjBlwF,UAAWsD,EAAQvI,GACnB20F,YAAapsF,EAAQtQ,KACrBw+B,UAAW,GACXrL,MACAupC,OACA+G,YACAk5B,QAASkY,EACTp3E,UAAW1vB,EACXy4D,UAAWz4D,EACXumB,UACAiJ,GAAI,CAAC,EAET,CAwCO,SAASsxE,EACdt6E,EACA0jB,EACA7mB,EACA3hB,EACAgrB,EACAD,EACApH,EACAsrE,GAUA,IAAMxrC,GAAS,EAAA6hD,EAAAA,0CAAyCv6E,IAAoB,GACtEmiC,GAAoB,EAAAq4C,EAAAA,0DAAyDx6E,GAC7EuiC,GAAmB,EAAAk4C,EAAAA,gDAA+Cz6E,GAClEqiC,GAAyB,EAAAq4C,EAAAA,sDAAqD16E,GAE9E24B,GAAW,EAAAgiD,EAAAA,+BACfl9D,EACA1jB,EACAnD,EACAoJ,EAAgB46E,uBAAuBz4C,IAAoB32B,KAAKjpC,QAAU,GAC1E,EAAAy2B,EAAAA,yCAAwCJ,EAAOhC,QAC/CjuB,EACAw5D,EAAoB,EACpBI,EAAmB,EACnBF,EAAyB,EACzBriC,EAAgBhhB,OAEZ45C,GAAM,EAAAiiD,EAAAA,gCAA+BjkF,GACvCoiC,EAAyC,GACvC32C,GAA0B,EAAAwtC,EAAAA,mBAAkB,IAAK56C,KAAUivF,IAE3DrrC,EAA8B,CAClCzd,aAAcrhB,EAAM9f,aACjB,EAAA6gG,EAAAA,gCAA+B/gF,EAAOiG,GACzC84B,KAAMliC,EAASxc,MACf+wD,OAAQ,IAEV,IACE,IAAM4vC,EAAS,IAAIC,EAAAA,aACjBtiD,EACAr2C,GACA,EAAAwtC,EAAAA,mBAAkB5vB,GAClB04B,EACAC,EACAhiC,EAASxc,MACTy+C,EACA,WAEFkiD,EAAOE,UACPjiD,EAAU+hD,EAAOG,YACnB,CAAE,MAAO14G,GACP,GAAIA,aAAay1D,YACf,MAAO,CAAExlD,SAAS,EAAOpB,MAAO7O,EAAEoQ,SAElC,MAAMpQ,CAEV,CAGA,MAAO,CAAEiQ,SAAS,EAAMC,KAAM,CAAEuC,MADd,IAAK8kB,EAAM9kB,UAAU,EAAA86D,EAAAA,kBAAiB96D,EAAOoN,IACb22C,UAASL,WAAUwS,OAAQtS,EAAUsS,QACzF,CAEO,SAASstC,EACdz4E,EACAlqB,EACA2nC,EACA1jB,EACAnD,EACAgC,EACAsrE,GAUA,IAAMjvF,GAAQ,EAAA66D,EAAAA,iCAAgC9vC,GACxCmiC,GAAoB,EAAAq4C,EAAAA,0DAAyDx6E,GAC7EuiC,GAAmB,EAAAk4C,EAAAA,gDAA+Cz6E,GAClEqiC,GAAyB,EAAAq4C,EAAAA,sDAAqD16E,GAC9E24B,GAAW,EAAAgiD,EAAAA,+BACfl9D,EACA1jB,EACAnD,EACAoJ,EAAgB46E,uBAAuBz4C,IAAoB32B,KAAKjpC,QAAU,GAC1E,EAAAy2B,EAAAA,yCAAwCJ,EAAOhC,QAC/CjuB,EACAw5D,EAAoB,EACpBI,EAAmB,EACnBF,EAAyB,EACzBriC,EAAgBhhB,OAEZ45C,GAAM,EAAAiiD,EAAAA,gCAA+BjkF,GAErCvU,EAA0B,IAC3BpN,KACAivF,GAECjkE,GAAc,EAAA4vB,EAAAA,mBAAkB/5C,EAAQ61B,QAExC+sB,GAAS,EAAA6hD,EAAAA,0CAAyCv6E,IAAoB,GACxEg5B,EAAyC,GAC7C,IACE,IAAM+hD,EAAS,IAAIC,EAAAA,aACjBtiD,EACAr2C,EACA4d,EACA04B,EACAC,EACAhiC,EAASxc,MACT,CACEghC,aAAcpb,EAAgBob,iBAC3B,EAAA0/D,EAAAA,gCAA+B/gF,EAAOiG,GACzC84B,KAAMliC,EAASxc,MACf+wD,OAAQ,IAEV,WAEF4vC,EAAOE,UACPjiD,EAAU+hD,EAAOG,YACnB,CAAE,MAAO14G,GACP,GAAIA,aAAay1D,YACf,MAAO,CAAExlD,SAAS,EAAOpB,MAAO7O,EAAEoQ,SAElC,MAAMpQ,CAEV,CAEA,IAAM24G,GAAkB,EAAAvhF,EAAAA,kBAAiBqG,GAAaM,OAA8B,CAACC,EAAM17B,KACzF,KAAK,EAAAwzB,EAAAA,qBAAoB2H,EAAYn7B,GAAMgR,EAAQ61B,OAAO7mC,IAAO,CAC/D,IAAMu/F,GAAY,EAAAzqE,EAAAA,kBAAiBqG,EAAYn7B,IAAMy7B,OAAsB,CAAC66E,EAAOC,KACjF,IAAMxL,EAAW/5F,EAAQ61B,OAAO7mC,KAAOu2G,GAIvC,OAHgB,MAAZxL,IAAqB,EAAA12E,EAAAA,WAAU8G,EAAYn7B,GAAKu2G,GAAOxL,KACzDuL,EAAMC,GAAQp7E,EAAYn7B,GAAKu2G,IAE1BD,GACN,CAAC,GACJ56E,EAAK17B,GAAOu/F,CACd,CACA,OAAO7jE,GACN,CAAC,GAGJ,MAAO,CAAE/tB,SAAS,EAAMC,KAAM,CAAEuC,OADd,EAAA86D,EAAAA,kBAAiB96D,EAAOoN,GACQ4d,YAAak7E,EAAiBniD,UAASL,YAC3F,CAYO,SAASq8C,EAAwB3I,EAAkCz1E,GACxE,IAAMiR,EAAYykE,GAAmCD,GAAYt8F,IAAKvN,IAAC,CACrE80G,SAAU90G,EAAE80G,UAAU9xG,KACtB82F,cAAc,EAAAC,EAAAA,0BAAyB/5F,EAAE44C,aAAcxkB,GACvD4U,OAAO,EAAAkuE,EAAAA,qDAAoDl3G,IAAIgpC,MAAQ,IAAIz7B,IAAKxH,IAAG,CACjFy3D,KAAMz3D,EAAIuxG,OACVhmE,MAAOvrC,EAAIurC,MACX5K,SAAU3gC,EAAI2gC,SACd8wE,KAAMzxG,EAAIyxG,WAGd,OAAO,EAAAsB,EAAAA,2BAA0BzzE,EAAW,CAC1Cnd,KAAMkM,EAASsN,OAAOqN,SAAW,EACjC+lE,SAAU1gF,EAASsN,OAAOozE,eAAY3uG,GAE1C,CAWO,SAASg7F,EACd7tF,EACA6iB,EACA7zB,GAEA,IAAMunG,EAAav2F,EAAUwgG,GAAsBxgG,EAAS6iB,QAAOhwB,EAE/Dq3B,GADiBqsE,EAAaC,GAAmCD,GAAc,IAChDnrD,KAAMq6D,GAAOA,EAAGz2G,MAAQA,GAQ3D,OAPuB,MAAnBk7B,GAGqB,OADvBA,GADqBlqB,EAAU0lG,EAAuC1lG,GAAW,IAClDorC,KAAMq6D,GAAOA,EAAGz2G,MAAQA,MAErDk7B,EAAkB,IAAKA,EAAiByd,QAASo2D,GAAmB/9F,EAAS6iB,KAG1EqH,CACT,CA2EO,SAASy0E,EAAwBgH,GACtC,MAAO,CACLjwE,KAAM,CACJ,CACEkwE,SAAU,IACVC,WAAYF,EAAiB,eAAiB,MAC9CpZ,SAAS,IAIjB,CAsCO,SAASmX,IACd,MAAO,CACLx6E,MAAO,UACP6I,UAAW,GACXt6B,GAAI+hE,EACJ9pE,KAAM,iBACNipD,YAAa,GACb5hD,IAAK,GACL0hD,OAAQ,GACRkiB,QAAS,EACTnE,KAAM,GACN78B,MAAO,GACPif,aAAa,EACbl2B,QAAS,CACPwG,MAAO,UACPx5B,KAAM,iBACNiqC,MAAO,CAAC,CAAEjqC,KAAM,GAAI8mE,KAAM,CAAC,CAAE9mE,KAAM,GAAIknE,aAAc,QAEvD/d,KAAM,GAEV,CAuBO,SAASmqD,EAAsBz9F,EAAqB7I,IACzD,EAAAwkB,EAAAA,aAAY3b,EAAU,EAAC,EAAA4b,EAAAA,MAAa7yB,EAAE,WAAWA,EAAE,oBAAoB8yB,OAAO1kB,IAAa,iBAC7F,CAOO,SAAS0jG,EAA+B5qE,GAC7C,OAAOA,EAAiBmE,MAAM6hC,QAASnR,GAAMA,EAAEmM,KAAKgF,QAASvpD,GAAMA,EAAE8f,WACvE,CAEO,SAAS2uE,EACdlrE,GAGA,OADa4qE,EAA+B5qE,GAAkBjlC,OAAQ7D,IAAOA,EAAE20G,SAA6B,MAAlB30G,EAAE44C,aAE9F,CAEO,SAASogE,EACdlwE,GAGA,OADa4qE,EAA+B5qE,GAAkBjlC,OAAQ7D,GAAwB,MAAlBA,EAAE44C,aAEhF,CAwBA,SAASwgE,GAA8B9lG,GACrC,MAAO,CACL1E,KAAM,mBACN7D,GAAIuI,EAAQvI,GACZirB,QAAS,CACPwG,MAAO,UACPx5B,KAAMsQ,EAAQtQ,KACdiqC,MAAO,CAAC,CAAEjqC,KAAM,SAAU8mE,KAAM,CAAC,CAAE9mE,KAAM,QAASknE,aAAc,QAElElnE,KAAMsQ,EAAQtQ,KACdqoB,OAAQ,GACR4iD,QAAS36D,EAAQ26D,QACjBhhC,MAAO,CACL,CACEjqC,KAAM,SACN8mE,KAAM,CACJ,CACE9mE,KAAM,QACNi4C,QAAS,CAAE9kB,IAAK,EAAGupC,KAAM,EAAG+G,UAAW,GACvCphC,UAAW,OAKnB8D,OAAQ,CAAC,EAEb,CAKA,SAASkwE,GACPrjF,EACA86E,GAEA,IAAIwI,EAAS,EACPjuF,EAAmC,GAwBzC,MAAO,CAAE4hB,MAvBKjX,EAAQiX,MAAM1/B,IAAI,CAACmyD,EAAMqN,KACrC,IAAMwsC,EAAgBzI,EAAe/jC,GAC/BjD,EAAOpK,EAAKoK,KAAKv8D,IAAI,CAAC4oB,EAAK66E,KAC/BsI,GAAU,EACV,IAAME,EAAeD,EAAcvI,GAC7B/1D,EAAU,CACd9kB,IAAKmjF,EACL55C,KAAMqN,EAAY,EAClBtG,UAAWuqC,EAAiB,GAExByI,GAAqB,EAAAnpC,EAAAA,wBAAuBkpC,EAAavpG,QAAUupG,EAAatpG,KAAO,GAAI,SAIjG,OAHKspG,EAAavpG,SAChBob,EAAO1pB,KAAK,CAAEkN,MAAO2qG,EAAa3qG,MAAOosC,YAEpC,CACLj4C,KAAMmzB,EAAInzB,KACVipD,YAAa91B,EAAI81B,YACjBhR,UACA5V,UAAWo0E,KAGf,MAAO,CAAEz2G,KAAM08D,EAAK18D,KAAMipD,YAAayT,EAAKzT,YAAa6d,UAE3Cz+C,SAClB,CAIO,SAAS8nF,GAA6Bn9E,EAA0B5B,GAErE,OAAOilF,GAAmBrjF,GADC,EAAA0jF,EAAAA,2BAA0B1jF,EAAS5B,GAAtD08E,gBAC2C7jE,KACrD,CA2BA,SAAS0sE,GACPrmG,EACA0iB,EACA86E,GAEA,IAAA8I,EAA0BP,GAAmBrjF,EAAS86E,GAA9C7jE,EAAK2sE,EAAL3sE,MAAO5hB,EAAMuuF,EAANvuF,OACT8d,EAAgC,CAAC,EAMvC,OALA,EAAA0wE,EAAAA,YAAW/I,EAAiBr5F,IAC1B,IAAK,IAAMqiG,KAAOriG,EAAS00C,KACzBhjB,EAAO2wE,GAAO,IAAK3wE,EAAO2wE,OAAS,EAAAxsC,EAAAA,iCAAgC71D,MAGhE,CACL7I,KAAM,mBACN7D,GAAIuI,EAAQvI,GACZsgB,SACA2K,UACAhzB,KAAMsQ,EAAQtQ,KACdirE,QAAS36D,EAAQ26D,QACjBhhC,QACA9D,SAEJ,CAEO,SAAS0sE,GAAsBviG,EAAmB8gB,GACvD,IAAM4B,EAAU1iB,EAAQ0iB,QACxB,OAAKA,EAIE2jF,GAA8BrmG,EAAS0iB,GADnB,EAAA+jF,EAAAA,gCAA+B/jF,EAAS5B,GAA3D08E,gBAFCsI,GAA8B9lG,EAIzC,CAmDO,SAASskG,GAAqBtkG,GACnC,OAAOA,EAAQ25B,MAAMlP,OAAO,CAACC,EAAM0hC,IAAS1hC,EAAO0hC,EAAKoK,KAAK/pE,OAAQ,EACvE,CAyBO,SAAS8yG,GAA4BmH,EAAgBC,GAC1D,OAAID,IAAWC,EACN,GAAGD,MAAU,EAAAt5D,EAAAA,uBAAsB,WAAYs5D,aAE/C,GAAGA,KAAUC,qBAExB,CAEO,SAAShG,GAAuB3gG,EAA4B6iB,GAEjE,IADA,IAAI+jF,EAAY,EACPx5G,EAAI,EAAGA,EAAI4S,EAAQ25B,MAAMltC,OAAQW,GAAK,EAG7C,IADAw5G,GADiB5mG,EAAQ25B,MAAMvsC,GAAGopE,KAAK/pE,SAEtBo2B,EACf,OAAOz1B,EAAI,EAGf,OAAO,CACT,CAEO,SAASqzG,GACdzgG,EACAosD,EACA+G,GAGA,IADA,IAAIsqC,EAAW,EACNpzC,EAAI,EAAGA,EAAIrqD,EAAQ25B,MAAMltC,OAAQ49D,GAAK,EAC7C,IAAK,IAAIp4C,EAAI,EAAGA,EAAIjS,EAAQ25B,MAAM0wB,GAAGmM,KAAK/pE,OAAQwlB,GAAK,EAAG,CACxD,GAAIo4C,IAAM+B,EAAO,GAAKn6C,IAAMkhD,EAAY,EACtC,OAAOsqC,EAETA,GAAY,CACd,CAEF,OAAQ,CACV,CAmBO,SAASM,GAAmB/9F,EAA4B6iB,GAC7D,MAAO,CACLA,MACAupC,KAAMu0C,GAAuB3gG,EAAS6iB,GACtCswC,UAAW0zC,GAAqB7mG,EAAS6iB,GAE7C,CAEO,SAASgkF,GAAqB7mG,EAA4B6iB,GAC/D,IAAI+jF,EAAY,EAChB,IAAK,IAAMx6C,KAAQpsD,EAAQ25B,MAEzB,IADAitE,GAAax6C,EAAKoK,KAAK/pE,SACNo2B,EACf,OAAOA,GAAO+jF,EAAYx6C,EAAKoK,KAAK/pE,QAGxC,OAAO,CACT,CAEO,SAAS+3G,GAAmBxkG,EAA4B6iB,GAC7D,IAAM8kB,EAAUo2D,GAAmB/9F,EAAS6iB,GACtC0zE,EAAaiK,GAAsBxgG,EAAS6iB,GAC5CupC,EAAOpsD,EAAQ25B,OAAOgO,EAAQykB,MAAQ,GAAK,GAEjD,MAAO,GADapsD,EAAQ25B,MAAMltC,OAAS,GAAa,MAAR2/D,EACxB,GAAGA,EAAK18D,UAAY,KAAK6mG,GAAY7mG,MAC/D,CAmBO,SAAS8wG,GAAsBxgG,EAA4B6iB,GAChE,IAAIikF,EAAO,EACX,IAAK,IAAM16C,KAAQpsD,EAAQ25B,OAAS,GAClC,IAAK,IAAM1nB,KAAKm6C,EAAKoK,KAEnB,GAAI3zC,KADJikF,GAAQ,GAEN,OAAO70F,CAKf,CAOO,SAASukF,GACdD,GAGA,OADaA,EAAWxkE,UAAUxhC,OAAQ7D,IAAOA,EAAE20G,SAA6B,MAAlB30G,EAAE44C,aAElE,CAgEO,SAASy9D,GAAgB/iG,EAA4B6iB,GAC1D,IAAMkkF,EAA+D,GAAlD,MAAPlkF,EAAcA,EAAMyhF,GAAqBtkG,GAAW,GAChE,OAAO27D,MAAMorC,GAAM,EAAIA,CACzB,CAoBiD,SAAAtH,KAShD,OATgDA,IAAA,EAAAloG,EAAAJ,SAA1C,UACL6I,EACA8gB,EACAiY,GAEA,IAAMl7B,EAAU2hG,GAAsBx/F,EAAS8gB,EAAUiY,GACnDhiC,QAAY,EAAAiwG,EAAAA,uBAAsBpvG,KAAKC,UAAUgG,GAAU8F,6BAEjE,OADA5M,EAAIspD,SAAW,WACRtpD,EAAIxH,UACb,IAAC1B,MAAA,KAAAD,UAAA,CAEM,SAAS4xG,GAAsBx/F,EAAmB8gB,EAAqBiY,GAC5E,IACM+7D,EAAoBsL,EADLx9E,GAAiB5iB,EAAS8gB,IACwB2J,OAAiB,CAACC,EAAMR,KAC7F,IAAMzyB,EAAKyyB,EAAgBob,cAAc7tC,GAOzC,OANIA,KACkB,EAAAm+E,EAAAA,mBAAkBn+E,EAAI,CAAC,IAEzCizB,EAAKr8B,KAAKoJ,IAGPizB,GACN,IAGH,MAAO,CACLiH,iBAFsB,EAAAyuB,EAAAA,kBAAiBt/B,EAASiR,UAAW+iE,GAG3D90F,UACA+4B,QAASA,IAAW,EAAAsD,EAAAA,6BACpBvb,UAAU,EAAAs/B,EAAAA,kBAAiBt/B,EAAU,CAAC,QAAS,SAAU,YAE7D,CA2BO,SAAS03B,GAAe9oD,EAAc+H,GAC3C,MAAO,CACLyxB,MAAO,UACPzxB,GAAIA,IAAM,EAAAiV,EAAAA,wBAAuB,GACjChd,KAAMA,EACNqH,IAAK,GACL0hD,OAAQ,GACRC,iBAAkB,GAClBC,YAAa,GACbgiB,QAAS,EACThhC,MAAO,GACPif,aAAa,EACb4d,KAAM,CAAC,CAAE/+D,IAAI,EAAAiV,EAAAA,wBAAuB,GAAIhd,KAAM,QAASqiC,UAAW,KAClEA,UAAW,GACX8mB,KAAM,GACNmB,SAAUx8C,KAAKC,MAEnB,CAemC,SAAA0lG,KAuBlC,OAvBkCA,IAAA,EAAA5rG,EAAAJ,SAA5B,UACL6I,EACA8gB,EACAzpB,EACAzE,GAEA,IAAMqtD,EAAkBu/C,GAAsBx/F,EAAS8gB,GACjDmmF,GAAU,EAAAjwG,EAAAA,gBACd,WACkB,oBAAXmL,QAA0BA,OAAOC,UAAUC,KAAOF,OAAOC,SAASC,KAAO,6BAE5EhK,EAAOT,KAAKC,UAAUooD,GACtBinD,GAAO,EAAAp4B,EAAAA,wBAAuBz2E,GAE9B8uG,SADmB,EAAAH,EAAAA,uBAAsB3uG,EAAM4uG,EAAQ13G,aACxBA,WACrC,GAAIk0G,EAA6ByD,GAC/B,OAAOzD,EAA6ByD,GAEpC,IAAMriG,EAAU,IAAIzN,EAAAA,QAAQC,GACtB+vG,QAAiBviG,EAAQy3B,aAAa6qE,EAAmB,IAAKrmF,EAAS3B,iBAAmBvsB,OAASC,GAEzG,OADA4wG,EAA6ByD,GAAQE,EAC9BA,CAEX,IAACv5G,MAAA,KAAAD,UAAA,CAyJM,SAASszG,GACd1rE,EACAtL,GAEA,IAAM6H,EAAuC,GAM7C,OALA,EAAAooC,EAAAA,aAAY3kC,EAAiBmE,MAAQjtC,IACV,WAArBA,EAAE80B,UAAUlmB,MAAqB5O,EAAE80B,UAAUq/E,OAAOtsB,WAAarqD,EAAgBqqD,UACnFxiD,EAAU1jC,KAAK3B,KAGZqlC,CACT,CAEO,SAASqvE,GACd5rE,EACAtL,GAEA,IAAM6H,EAAuC,GAM7C,OALA,EAAAooC,EAAAA,aAAY3kC,EAAiBmE,MAAQjtC,IAC/BA,EAAEm0G,OAAOtsB,WAAarqD,EAAgBqqD,UAAY7nF,EAAE80B,UACtDuQ,EAAU1jC,KAAK3B,KAGZqlC,CACT,CAp0C4BzlC,EAAAA,iBAAG,EAAAmmG,EAAAA,SAC5BzyF,GACsBogG,EAA+BpgG,GAChCuQ,KAAM7jB,IAAM,EAAA26G,EAAAA,4BAA2B36G,IAE7D,CAAEgmG,QAAS,KAGepmG,EAAAA,iBAAG,EAAAmmG,EAAAA,SAC5BzyF,GACsBogG,EAA+BpgG,GAChCuQ,KAAM7jB,IAAM,EAAA46G,EAAAA,4BAA2B56G,IAE7D,CAAEgmG,QAAS,KAswB6BpmG,EAAAA,+BAAG,EAAAmmG,EAAAA,SAT7C,SAA2CzyF,EAAmB8gB,GAC5D,IAAM4B,EAAU1iB,EAAQ0iB,QACxB,OAAKA,EAIE2jF,GAA8BrmG,EAAS0iB,GADnB,EAAA0jF,EAAAA,2BAA0B1jF,EAAS5B,GAAtD08E,gBAFCsI,GAA8B9lG,EAIzC,EAEwF,CAAE0yF,QAAS,KA6kB5F,IAAM2N,GAAmB/zG,EAAAA,qBAAG,EAAAmmG,EAAAA,SACjC,CAACzyF,EAAmB8gB,IACX9gB,EAET,CAAE0yF,QAAS,KAGA9vE,GAAgBt2B,EAAAA,kBAAG,EAAAmmG,EAAAA,SAAQ8P,GAAuB,CAAE7P,QAAS,KAEnE,SAAS8L,GACdr/F,EACAoN,EACAjI,GAEA,OAAO,EAAAwf,EAAAA,kBAAiB3kB,GAAOsrB,OAA2C,CAACC,EAAM17B,KAC/E,IAAM+qG,EAAW56F,EAAMnQ,GACjB28D,EAAWp/C,EAASvd,GAC1B,GAAgB,MAAZ28D,KAAqB,EAAAtoC,EAAAA,WAAU02E,EAAUpuC,GAAW,CACtD,IAAM47C,GAAc,EAAAC,EAAAA,iBAAe,EAAA7pC,EAAAA,kBAAiBo8B,EAAoBz1F,IAClEmjG,GAAc,EAAAD,EAAAA,iBAAe,EAAA7pC,EAAAA,kBAAiBhS,EAAoBrnD,IACxEomB,EAAK17B,GAAO,GAAGu4G,QAAkBE,GACnC,CACA,OAAO/8E,GACN,CAAC,EACN,CAEO,SAAS+zE,GACdx6E,EACAi/B,EACAL,EACA/hC,GAEA,IAAM2tE,EAA+C,CAAC,EACtD,GAAoB,MAAhB5rC,EAASgJ,IAAa,CACxB,IAAM67C,GAAW,EAAA9Y,EAAAA,gBAAe3qE,EAAM9f,SAAU2c,IAC3C,EAAAuC,EAAAA,WAAUqkF,EAAU7kD,EAASgJ,OAChC4iC,EAAS,QAAU,IAAG,EAAA+Y,EAAAA,iBAAe,EAAA7pC,EAAAA,kBAAiB+pC,EAAU5mF,EAASxc,eAAc,EAAAkjG,EAAAA,iBACrF,EAAA7pC,EAAAA,kBAAiB9a,EAASgJ,IAAK/qC,EAASxc,UAG9C,CACA,IAAK,IAAMw8F,KAAU59C,EAAS,CAI5B,IAHA,IAAMl0D,EAAM8xG,EAAOxlG,KACbhO,EAAQwzG,EAAOxzG,MACfojB,EAASpjB,EAAMojB,OACA,MAAdA,EAAO,IACZA,EAAO01C,QAGTqoC,EADe,GAAGz/F,IAAM0hB,EAAOjkB,OAAS,EAAI,IAAIikB,EAAOvW,KAAK,QAAU,MACnD,GAAgB,MAAb7M,EAAM+5D,GAAa,GAAG/5D,EAAM+5D,MAAQ,MAAK,EAAAsgD,EAAAA,sBAAqBr6G,EAAMA,QAC5F,CACA,OAAOmhG,CACT,C,gHCngDO,SACLz8B,EACAhyD,EACAkjD,EACApiC,GAEA,IAAK,IAAMggF,KAAU59C,EAMnB,IALA,IAAMl0D,EAAM8xG,EAAOxlG,KACbhO,EAAQwzG,EAAOxzG,MACfojB,EAASpjB,EAAMojB,OACrBk3F,GAAA,EAAAngG,EAAAtQ,SAAoCuZ,EAAM,GAAnC07C,EAAIw7C,EAAA,GAAE/kF,EAAG+kF,EAAA,GAAEC,EAASD,EAAA,GAAEn1G,EAAGm1G,EAAA,GAEvBnuC,EAAY,EAAGA,EAAYz5D,EAAQ25B,MAAMltC,OAAQgtE,GAAa,EAErE,IADA,IAAMquC,EAAc9nG,EAAQ25B,MAAM8/B,GACzBikC,EAAiB,EAAGA,EAAiBoK,EAAYtxC,KAAK/pE,OAAQixG,GAAkB,EAAG,CAC1F,IAAMnH,EAAauR,EAAYtxC,KAAKknC,GAC9BgE,GAAe,EAAAqG,EAAAA,gCAA+BxR,GACpD,IAAK,IAAMpyF,KAAYu9F,EACrB,GAAIv9F,EAASnV,MAAQgjE,EAArB,CAGA,IAAK,IAAIg2C,EAAiB,EAAGA,EAAiB7jG,EAAS2gG,uBAAuBr4G,OAAQu7G,GAAkB,EAAG,CACzG,IACMtyE,EADevxB,EAAS2gG,uBAAuBkD,GAC3BtyE,KAC1B,KACY,MAAT02B,GAAgBA,IAASqN,EAAY,GAC7B,MAAR52C,GAAeA,IAAQ66E,EAAiB,GAC1B,MAAdmK,GAAqBA,IAAcG,EAAiB,IAEzC,iBAARh5G,GAAiD,iBAAhB1B,EAAMA,MAAoB,CAC7D,IAAMq+D,GAAW,EAAA7B,EAAAA,mBAAkBp0B,EAAKjpC,OAAQa,EAAMA,MAAOA,EAAM+5D,IAC7D4gD,EAAkD,CACtDjE,OAAQ,EACRjhF,QAAQ,EAAAI,EAAAA,cAAa,IAAK,MAC1BupE,QAAQ,EACRH,SAAS,EACT2b,eAAe,EACfvb,WAAW,GAEPwb,EAAUzyE,EAAKA,EAAKjpC,OAAS,IAAMw7G,EACzCvyE,EAAKyoE,OAAOxyC,GACZ,IAAK,IAAIv+D,EAAIsoC,EAAKjpC,OAAQW,EAAIu+D,EAAUv+D,GAAK,EAC3CsoC,EAAKrnC,MAAK,EAAA0rD,EAAAA,mBAAkBouD,GAEhC,CAEF,IAAK,IAAInzE,EAAW,EAAGA,EAAWU,EAAKjpC,OAAQuoC,GAAY,EAE7C,MAATo3B,GAAgBA,IAASqN,EAAY,GAC7B,MAAR52C,GAAeA,IAAQ66E,EAAiB,GAC1B,MAAdmK,GAAqBA,IAAcG,EAAiB,GAC5C,MAARv1G,GAAeA,IAAQuiC,EAAW,IAEvB,QAARhmC,EACFmiE,EAAUhtD,EAAUuxB,EAAKV,GAAWlU,EAAU,MAAOxzB,EAAMA,MAAOA,EAAM+5D,IACvD,SAARr4D,EACTmiE,EAAUhtD,EAAUuxB,EAAKV,GAAWlU,EAAU,SAAUxzB,EAAMA,MAAOA,EAAM+5D,IAC1D,YAARr4D,EACTmiE,EAAUhtD,EAAUuxB,EAAKV,GAAWlU,EAAU,SAAUxzB,EAAMA,MAAOA,EAAM+5D,IAC1D,WAARr4D,EACTmiE,EAAUhtD,EAAUuxB,EAAKV,GAAWlU,EAAU,QAASxzB,EAAMA,MAAOA,EAAM+5D,IACzD,YAARr4D,EACTmiE,EAAUhtD,EAAUuxB,EAAKV,GAAWlU,EAAU,WAAYxzB,EAAMA,MAAOA,EAAM+5D,IAC5D,YAARr4D,EACTmiE,EAAUhtD,EAAUuxB,EAAKV,GAAWlU,EAAU,SAAUxzB,EAAMA,MAAOA,EAAM+5D,IAC1D,WAARr4D,EACTmiE,EAAUhtD,EAAUuxB,EAAKV,GAAWlU,EAAU,UAAWxzB,EAAMA,MAAOA,EAAM+5D,IAC3D,YAARr4D,EACTmiE,EAAUhtD,EAAUuxB,EAAKV,GAAWlU,EAAU,SAAUxzB,EAAMA,MAAOA,EAAM+5D,IAC1D,eAARr4D,GACTmiE,EAAUhtD,EAAUuxB,EAAKV,GAAWlU,EAAU,YAAaxzB,EAAMA,MAAOA,EAAM+5D,IAItF,CACA,KAAc,MAAT+E,GAAgBA,IAASqN,EAAY,GAAe,MAAR52C,GAAeA,IAAQ66E,EAAiB,GACvF,GAAY,sBAAR1uG,GAA6D,iBAAvB8xG,EAAOxzG,MAAMA,MAAoB,CACzE,IAAI86G,OAAkB,EACtB,GAAwB,MAApBtH,EAAOxzG,MAAM+5D,GACf+gD,EAAatH,EAAOxzG,MAAMA,MAAQ,MAC7B,CACL,IAAM+6G,GAA2B,EAAA3D,EAAAA,0DAAyDvgG,GAC1FikG,GAAa,EAAAx8C,EAAAA,qBACX/4D,EACAw1G,EACAvH,EAAOxzG,MAAMA,MACbwzG,EAAOxzG,MAAM+5D,GAEjB,CACA+gD,GAA0BjkG,EAAS2gG,uBAAuBr4G,OAC1D0X,EAAS2gG,uBAAuBp0G,QAAS26C,GAAOA,EAAE7P,WAAY,GAC9D,IAAM8sE,EAAKnkG,EAAS2gG,uBAAuBsD,GACjC,MAANE,IACFA,EAAG9sE,WAAY,EAEnB,MAAO,GAAY,2BAARxsC,GAAkE,iBAAvB8xG,EAAOxzG,MAAMA,MAAoB,CACrF,IAAMoxG,EAAav6F,EAASokG,oBAAsB,GAClD,GAAI7J,EAAWjyG,OAAS,EAAG,CACzB,IAAI27G,OAAkB,EACtB,GAAwB,MAApBtH,EAAOxzG,MAAM+5D,GACf+gD,EAAatH,EAAOxzG,MAAMA,MAAQ,MAC7B,CACL,IAAMk7G,GAAgC,EAAA5D,EAAAA,sDAAqDzgG,GAC3FikG,GAAa,EAAAx8C,EAAAA,qBACX/4D,EACA21G,EACA1H,EAAOxzG,MAAMA,MACbwzG,EAAOxzG,MAAM+5D,GAEjB,CACA+gD,GAAeA,EAAa1J,EAAWjyG,OAAUiyG,EAAWjyG,QAAUiyG,EAAWjyG,OACjFiyG,EAAWhuG,QAAS+9B,GAAOA,EAAE+M,WAAY,GACzC,IAAMitE,EAAgB/J,EAAW0J,GACZ,MAAjBK,IACFA,EAAcjtE,WAAY,EACQ,MAA9BitE,EAAcnjE,eAChBnhC,EAASmhC,aAAemjE,EAAcnjE,cAG5C,CACF,MAAO,GAAY,qBAARt2C,GAA4D,iBAAvB8xG,EAAOxzG,MAAMA,MAAoB,CAC/E,IAAI86G,OAAkB,EACtB,GAAwB,MAApBtH,EAAOxzG,MAAM+5D,GACf+gD,EAAatH,EAAOxzG,MAAMA,MAAQ,MAC7B,CACL,IAAMo7G,GAA0B,EAAA/D,EAAAA,gDAA+CxgG,GAC/EikG,GAAa,EAAAx8C,EAAAA,qBACX/4D,EACA61G,EACA5H,EAAOxzG,MAAMA,MACbwzG,EAAOxzG,MAAM+5D,GAEjB,CACA+gD,GAA0BjkG,EAAS26F,aAAa1pC,OAAO3oE,OACvD0X,EAAS26F,aAAa1pC,OAAO1kE,QAAS26C,GAAOA,EAAE7P,WAAY,GAC3D,IAAMvpB,EAAI9N,EAAS26F,aAAa1pC,OAAOgzC,GAC9B,MAALn2F,IACFA,EAAEupB,WAAY,EAElB,CAvHF,CA2HJ,CAGN,E,6BArMO,SAAoCtR,GACzC,IAAMy+E,EAAwBz+E,EAAgB46E,uBAAuBv0F,KAAMke,GAClEA,EAAEiH,KAAKnlB,KAAM9d,IACX,EAAA6yD,EAAAA,cAAa7yD,EAAIswB,UAAW,EAAA6lF,EAAAA,wCAAuCn2G,KAGxEo2G,EAAa7a,EAAgC9jE,EAAiB,OACpE,OAAOy+E,GAAyBE,CAClC,E,6BAEO,SAAoC3+E,GACzC,SAAIA,EAAgB4+E,QAAQpc,QAAyC,MAA/BxiE,EAAgB4+E,QAAQtc,MAGvDtiE,EAAgB46E,uBAAuBv0F,KAAMke,GAC3CA,EAAEiH,KAAKnlB,KAAM9d,GAAQA,EAAIi6F,QAAqB,MAAXj6F,EAAI+5F,KAElD,E,+BAzCO,SAAsCtiE,GAC3C,OAAO,EAAA6+E,EAAAA,6BAA4B7+E,GAAiB3Z,KAAM9d,GAAmB,MAAXA,EAAI+5F,IACxE,E,kCANO,SAAyCtiE,GAC9C,OAAO,EAAA6+E,EAAAA,6BAA4B7+E,GAAiB3Z,KAAM9d,KAAUA,EAAIu2G,UAAUd,cACpF,E,mCAUO,SACLxyE,GAEA,IAAIuzE,EACEtH,EAAgD,GACtD,IAAK,IAAMlvG,KAAOijC,EAAM,CACtB,IAAM1mC,EAAMk6G,EAAez2G,GACZ,MAAXw2G,GAAmBA,IAAYj6G,GACjC2yG,EAAOtzG,KAAK,CAACoE,EAAK,IAEpBkvG,EAAOA,EAAOl1G,OAAS,GAAG,IAAM,EAChCw8G,EAAUj6G,CACZ,CACA,OAAO2yG,CACT,E,sCA/BO,SAA6Cz3E,GAClD,IAAMowC,GAAgB,EAAA6uC,EAAAA,yCAAwCj/E,IAAoB,CAAC,EACnF,OAAO,EAAApG,EAAAA,kBAAiBw2C,GAAe/pD,KAAMvhB,GAAQsrE,EAActrE,IAAMo6G,aAC3E,E,oEAyDO,SAAuCppG,EAA4BgyD,GACxE,IAAMq3C,EAAyC,CAAC,EAoBhD,OAnBA,EAAAlvC,EAAAA,aAAYn6D,EAAQ25B,MAAQx1B,IAC1B,GAAIA,EAASnV,MAAQgjE,EAEnB,IADA,IAAMs3C,GAAwB,EAAA5E,EAAAA,0DAAyDvgG,GAC9E6jG,EAAiB,EAAGA,EAAiB7jG,EAAS2gG,uBAAuBr4G,OAAQu7G,GAAkB,EAEtG,IADA,IAAMH,EAAY1jG,EAAS2gG,uBAAuBkD,GACzChzE,EAAW,EAAGA,EAAW6yE,EAAUnyE,KAAKjpC,OAAQuoC,GAAY,EAAG,CACtE,IAAMviC,EAAMo1G,EAAUnyE,KAAKV,GAC3B,GAAIviC,EAAIswB,OAAQ,CACd,IAAM/zB,GAAM,EAAAu2D,EAAAA,cAAa9yD,EAAIswB,QAC7BsmF,EAAQr6G,GAAO,CACb6mE,eAAgBpjE,EAAIswB,OACpBA,OAAQtwB,EAAIswB,OACZxa,QAAS8gG,EAAQr6G,IAAMuZ,SAAWy/F,EAAiB,IAAMsB,EAE7D,CACF,KAIC,EAAAtsC,EAAAA,yBAAuB,EAAArjB,EAAAA,oBAAmB0vD,GAAU,WAAW,EACxE,E,kBA/HA96D,EAAAx7C,EAAA,OACAywG,EAAAzwG,EAAA,OAEAozB,EAAApzB,EAAA,OACAg0B,EAAAh0B,EAAA,OACA0zB,EAAA1zB,EAAA,OACAE,EAAAF,EAAA,OACAswG,EAAAtwG,EAAA,OAEAsiB,EAAAtiB,EAAA,OAMA+nE,EAAA/nE,EAAA,OASA8nE,EAAA9nE,EAAA,OAkCA,SAASm2G,EAAez2G,GACtB,MAAO,GAAGA,EAAIy3D,SAAQ,EAAA3E,EAAAA,cAAa9yD,EAAIuzF,eAAc,EAAA2hB,EAAAA,sBAAqBl1G,EAAInF,QAChF,CAqCO,SAAS0gG,EAAgC9jE,EAA0Cx6B,GAKxF,OAJoB,EAAA00B,EAAAA,yBAAwB,EAC1C,EAAAqgF,EAAAA,0CAAyCv6E,IACzC,EAAAq/E,EAAAA,wCAAuCr/E,KAEtB3Z,KAAM7jB,GAAMw4G,EAAAA,aAAasE,WAAW98G,EAAGgD,GAC5D,CA8KA,SAASyhE,EACPjnC,EACAz3B,EACAquB,EACA9xB,EACA1B,EACA+5D,GAEA,GAAW,MAAPA,EACU,WAARr4D,KAAqB,EAAAq2D,EAAAA,WAAU/3D,KAAU,EAAAg4D,EAAAA,cAAah4D,IACxDmF,EAAIzD,GAAO1B,EAEM,iBAAVA,GACE,WAAR0B,GAA4B,WAARA,GAA4B,UAARA,GAA2B,aAARA,GAA8B,QAARA,EAGxD,iBAAV1B,GAA+B,cAAR0B,GAA+B,YAARA,GAA6B,WAARA,IACnFyD,EAAIzD,GAAiB,IAAV1B,GAFXmF,EAAIzD,GAAO1B,MAIR,CACL,IAAM+jE,GAAQ,EAAAu9B,EAAAA,gBAAe1kE,EAAgBob,aAAcxkB,GACvDi5E,EAA+B,kBAAbtnG,EAAIzD,GAAsByD,EAAIzD,GAAO,EAAI,EAAKyD,EAAIzD,GACxD,MAAZ+qG,IAAoB,EAAA6O,EAAAA,wCAAuCn2G,KAE7DsnG,GADuB,EAAAkK,EAAAA,+BAA8BxxG,EAAKy3B,EAAgBob,aAAcxkB,IAG1F,IAAM6qC,GAAW,EAAAC,EAAAA,gBAAeyF,EAAO0oC,GAAY,EAAGzsG,EAAO+5D,GACjD,WAARr4D,KAAqB,EAAAq2D,EAAAA,WAAUsG,KAAa,EAAArG,EAAAA,cAAaqG,IAC3Dl5D,EAAIzD,GAAO28D,EAES,iBAAbA,GACE,WAAR38D,GAA4B,WAARA,GAA4B,UAARA,GAA2B,aAARA,GAA8B,QAARA,EAGrD,iBAAb28D,GAAkC,cAAR38D,GAA+B,YAARA,GAA6B,WAARA,IACtFyD,EAAIzD,GAAoB,IAAb28D,GAFXl5D,EAAIzD,GAAO28D,CAIf,CACF,C,gGC5RO,SACLm4C,EACAx+D,EACAxkB,GAEA,IAAM+0C,EAAiBiuC,EAAW/gF,OAC5BigC,GAAO,EAAAywB,EAAAA,2CAA0C3yD,EAAUwkB,GAC3DmkE,EAAkB5zC,GACpB,EAAA6zC,EAAAA,uBAAsB7zC,EAAgBvwB,EAAcxkB,GACpD8nF,EAAuC9E,IAAoC,MAArBA,EAAWE,QAAoC,MAAlBF,EAAWtX,KAC5F,EAAAkd,EAAAA,wBAAsB,EAAAC,EAAAA,eAAc7F,EAAWE,OAAQF,EAAWtX,KAAMlnD,EAAcxkB,QACtFjuB,EACN,OAAO42G,GAAkB,EAAAG,EAAAA,uBAAsBH,EAAiB3oF,EAAUkiC,EAAM1d,QAAgBzyC,CAClG,E,mBAxCO,SAA0B6iC,GAC/B,OAAOA,EAAKjL,OACV,CAACC,EAAMj4B,KACL,IAAIo3G,EAAYn/E,EAAKA,EAAKj+B,OAAS,GAC7B83E,EAAOslC,EAAUA,EAAUp9G,OAAS,GAa1C,OAXU,MAAR83E,GACCA,EAAKshC,aAAepzG,EAAIozG,YACvBthC,EAAKqhC,WAAanzG,EAAImzG,UACtBrhC,EAAKgoB,UAAY95F,EAAI85F,SACrBhoB,EAAKulC,UAAYr3G,EAAIq3G,SACrBvlC,EAAKmoB,SAAWj6F,EAAIi6F,SAEtBhiE,EAAKr8B,KAAK,IACVw7G,EAAYn/E,EAAKA,EAAKj+B,OAAS,IAEjCo9G,EAAUx7G,KAAKoE,GACRi4B,GAET,CAAC,IAEL,E,2CAxBA,IAAA7D,EAAA9zB,EAAA,OACAg0B,EAAAh0B,EAAA,OAyBO,SAAS61G,EAAuCn2G,GACrD,OAAqB,MAAdA,EAAIswB,QAAgC,MAAdtwB,EAAIuxG,QAA6B,MAAXvxG,EAAI+5F,GACzD,C,yIC9BAn8C,EAAAt9C,EAAA,OAeAsiB,EAAAtiB,EAAA,OACA8T,EAAA9T,EAAA,OACAozB,EAAApzB,EAAA,OACAg0B,EAAAh0B,EAAA,OASA+nE,EAAA/nE,EAAA,OAgBAw7C,EAAAx7C,EAAA,OACA0zB,EAAA1zB,EAAA,OACAE,EAAAF,EAAA,OACA8nE,EAAA9nE,EAAA,OACAm/D,EAAAn/D,EAAA,OAkC6BzG,EAAAA,iBAAA,WAC3B,SAAAkuE,EACmBx6D,EACA8gB,IACjB,EAAAxpB,EAAAH,SAAA,KAAAqjE,GAAA,KAFiBx6D,QAAAA,EAA0B,KAC1B8gB,SAAAA,CAChB,CAAC,SAAA5pB,EAAAC,SAAAqjE,EAAA,EAAAxrE,IAAA,gCAAA1B,MAEJ,SACE0B,EACAyqE,EACAikC,GAEA,OAAO/vG,KAAKqS,QAAQ25B,MAAM8/B,IAAYjD,KAAKknC,IAAiB3rE,WAAWqZ,KAAM1+C,GAAMA,EAAEsC,MAAQA,EAC/F,GAAC,CAAAA,IAAA,yBAAA1B,MAED,SAA+B6W,EAAmCs1D,EAAmBikC,GACnF,IAAK,IAAItwG,EAAIqsE,EAAY,EAAGrsE,GAAK,EAAGA,GAAK,EAAG,CAC1C,IAAMy1B,EAAMl1B,KAAKqS,QAAQ25B,MAAMvsC,IAAIopE,KAAKknC,GACxC,GAAW,MAAP76E,EACF,OAAO,EAET,IAAMknF,EAAmBlnF,EAAIkP,UAAUqZ,KAAM1+C,GAAMA,EAAEsC,MAAQmV,EAASnV,KACtE,GAAwB,MAApB+6G,EACF,OACE5lG,EAAS26F,aAAa+B,OAAOtsB,WAAaw1B,EAAiBjL,aAAa+B,OAAOtsB,WAC/E,EAAA/xD,EAAAA,qBAAoBre,EAAS26F,aAAa1pC,OAAQ20C,EAAiBjL,aAAa1pC,OAGtF,CACA,OAAO,CACT,GAAC,CAAApmE,IAAA,6BAAA1B,MAED,SAAmC0B,EAAayqE,EAAmBikC,GACjE,IAAMv5F,EAAWxW,KAAKq8G,8BAA8Bh7G,EAAKyqE,EAAWikC,GAE9DrlD,GADel0C,GAAU26F,aAAa1pC,QAAU,IAC3B9a,UAAWjP,GAAMA,EAAE7P,WAC9C,OAAkB,IAAX6c,EAAe,EAAIA,CAC5B,GAAC,CAAArpD,IAAA,kBAAA1B,MAED,SAAwB48B,GACtB,QAASA,EAAgB22E,KAC3B,GAAC,CAAA7xG,IAAA,sBAAA1B,MAED,SAA4B48B,GAC1B,IAAM+/E,EAA0C,IAAIpzF,IAC9CqzF,EAAgBhgF,EAAgB22E,OAAO18F,SAC7C,IAAK+lG,EACH,OAAOt9G,MAAM+C,KAAKs6G,GAEpB,IAAMnB,EAAUn7G,KAAKw8G,WAAWjgF,GAC1BkgF,EAAgBz8G,KAAKw8G,WAAWD,GAgCtC,GA/BIhgF,EAAgB46E,uBAAuBr4G,SAAWy9G,EAAcpF,uBAAuBr4G,QACzFw9G,EAAiB/xF,IAAI,SAGrB,EAAAwsF,EAAAA,0DAAyDx6E,MACzD,EAAAw6E,EAAAA,0DAAyDwF,IAEzDD,EAAiB/xF,IAAI,QAEO,MAA1BgyF,EAAc1oF,UAAgD,MAA5B0I,EAAgB1I,WAEtB,MAA5B0I,EAAgB1I,UAChB0I,EAAgB1I,SAASlmB,OAAS4uG,EAAc1oF,UAAUlmB,OACzD4uB,EAAgB1I,SAASq/E,MACtB32E,EAAgB1I,SAASq/E,OAAOtsB,WAAa21B,EAAc31B,SAC3DrqD,EAAgB1I,SAASohC,SAAWsnD,EAAc1oF,SAASohC,SAC/D9zD,OAAOuB,MAAK,EAAAg6G,EAAAA,4CAA2CngF,IAAkBz9B,OAAS,IAElFw9G,EAAiB/xF,IAAI,YAGG,MAAxBgyF,EAAcpJ,QAA4C,MAA1B52E,EAAgB42E,QAEtB,MAA1B52E,EAAgB42E,SACf52E,EAAgB42E,OAAOD,MACpB32E,EAAgB42E,OAAOD,OAAOtsB,WAAa21B,EAAc31B,SACzDrqD,EAAgB42E,OAAOl+C,SAAWsnD,EAAcpJ,QAAQl+C,SAE5DqnD,EAAiB/xF,IAAI,UAGrBgS,EAAgB46E,uBAAuBr4G,SAAWy9G,EAAcpF,uBAAuBr4G,OACzF,IAAK,IAAIW,EAAI,EAAGA,EAAI88B,EAAgB46E,uBAAuBr4G,OAAQW,GAAK,EAAG,CACzE,IAAMk9G,EAAmBpgF,EAAgB46E,uBAAuB13G,GAC1Dm9G,EAAiBL,EAAcpF,uBAAuB13G,GACxDk9G,EAAiB50E,KAAKjpC,SAAW89G,EAAe70E,KAAKjpC,QACvDw9G,EAAiB/xF,IAAI,QAEvB,IAAK,IAAIsyF,EAAI,EAAGA,EAAIF,EAAiB50E,KAAKjpC,OAAQ+9G,GAAK,EAAG,CACxD,IAAM1G,EAAawG,EAAiB50E,KAAK80E,GACnCC,EAAWF,EAAe70E,KAAK80E,GACjC1G,EAAWE,SAAWyG,GAAUzG,QAAUF,EAAWC,SAAW0G,GAAU1G,QAC5EkG,EAAiB/xF,IAAI,SAGrBuyF,GACK,EAAAC,EAAAA,eAAc5G,EAAW/gF,OAAQ0nF,EAAS1nF,SAAW+gF,EAAWnX,YAAc8d,EAAS9d,WACvF,EAAAtpE,EAAAA,WAAUylF,EAAQ/lF,QAAU4nF,EAAAA,YAAaP,EAAcrnF,QAAU4nF,EAAAA,cAClE7B,EAAQnc,YAAcyd,EAAczd,aAElB,MAAlBmc,EAAQ/lF,OACVknF,EAAiB/xF,IAAI,UAErB+xF,EAAiB/xF,IAAI,UAIvBuyF,EACI3G,EAAWtX,MAAQie,EAASje,KAAOsX,EAAWpX,SAAW+d,EAAS/d,OAClEoc,EAAQtc,MAAQ4d,EAAc5d,KAAOsc,EAAQpc,SAAW0d,EAAc1d,UAEvD,MAAfoc,EAAQtc,IACVyd,EAAiB/xF,IAAI,OAErB+xF,EAAiB/xF,IAAI,UAGrBuyF,EAAW3G,EAAW9lE,QAAUysE,EAASzsE,MAAQ8qE,EAAQ9qE,QAAUosE,EAAcpsE,SAC9D,MAAjB8qE,EAAQ9qE,MACVisE,EAAiB/xF,IAAI,SAErB+xF,EAAiB/xF,IAAI,SAIvB4rF,EAAW1wE,WAAaq3E,GAAUr3E,YAChC0wE,EAAWjX,sBAAyB4d,GAAU5d,qBAExB,MAApBic,EAAQ11E,SACV62E,EAAiB/xF,IAAI,YAErB+xF,EAAiB/xF,IAAI,QAG3B,CACF,CAEF,OAAOtrB,MAAM+C,KAAKs6G,EACpB,GAAC,CAAAj7G,IAAA,wBAAA1B,MAED,SACEs9G,EACAC,GAEA,IAAKA,EACH,OAAOD,EAET,IAAK,IAAME,KAAWD,EAAU,CAC9B,IAAME,EAAaH,EAAeE,EAAQnjE,QAAQykB,KAAO,KAAK0+C,EAAQnjE,QAAQwrB,UAAY,GAC1F,GAAI43C,EAAY,CACd,IAAMC,EAAWD,EAAWtgF,OAC1B,EAAGnuB,SAAQlP,KAAKywG,EAAOxlD,KACrB,IAAMl0C,EAAW05F,EAAMzyD,KAAMq2B,GAAuB,aAAdA,EAAKnmE,MAK3C,OAJI6I,IAAaA,EAASk9F,UACxB/kG,EAAOlP,GAAKirD,EACZjrD,GAAK,GAEA,CAAEkP,SAAQlP,MAEnB,CAAEkP,OAAQ,CAAC,EAAGlP,EAAG,IACjBkP,OACI3M,EAAOo7G,EAAWC,EAASF,EAAQG,YACrCt7G,IACFo7G,EAAW5M,OAAO6M,EAASF,EAAQG,WAAY,GAC/CF,EAAW5M,OAAO6M,EAASF,EAAQI,SAAU,EAAGv7G,GAEpD,CACF,CACA,OAAOi7G,CACT,GAAC,CAAA57G,IAAA,oBAAA1B,MAED,SACEs9G,EACAO,GAEA,IAAKA,EACH,OAAOP,EAET,IAAK,IAAM1yF,KAAOizF,EAAM,CACtB,IAAMJ,EAAaH,EAAe1yF,EAAIyvB,QAAQykB,KAAO,KAAKl0C,EAAIyvB,QAAQwrB,UAAY,GAC9E43C,GACFA,EAAW5M,OAAOjmF,EAAImgC,MAAO,EAAG,CAC9B,CAAE/8C,KAAM,WAAYhO,OAAO,EAAA2kE,EAAAA,yBAAwB/5C,EAAIq8D,SAAU5mF,KAAKmzB,SAASiR,aAGrF,CACA,OAAO64E,CACT,GAAC,CAAA57G,IAAA,kBAAA1B,MAED,SACEs6C,EACAoa,EACAyX,EACAikC,GAEA,IAAM0N,EAAexjE,EAAKyjE,gBAAgBrpD,EAAK10D,OAC/C,OACE89G,KACEA,EAAazjE,SACZyjE,EAAazjE,QAAQykB,OAASqN,EAAY,GAAK2xC,EAAazjE,QAAQwrB,YAAcuqC,EAAiB,GAE/F0N,EAAalpD,GAEbF,EAAK10D,KAEhB,GAAC,CAAA0B,IAAA,0BAAA1B,MAED,SACE6W,EACAs1D,EACAikC,EACA4N,GAEA,GAAKnnG,EAAL,CAGA,GACkC,MAAhCA,GAAU26F,aAAa+B,SACtB,EAAAr+E,EAAAA,qBACCre,EAAS26F,aAAa1pC,QAAU,GAChCjxD,EAAS26F,aAAa+B,MAAM18F,UAAU26F,aAAa1pC,QAAU,IAJjE,CASE,IAFA,IAAMJ,EAAkB,GAClBu2C,EAAe59G,KAAK69G,2BAA2BrnG,EAASnV,IAAKyqE,EAAWikC,GACrEtwG,EAAI,EAAGA,EAAI+W,EAAS26F,aAAa1pC,OAAO3oE,OAAQW,GAAK,EAAG,CAC3DA,EAAI,GACN4nE,EAAM3mE,KAAK,IAEb,IACMo/E,EADctpE,EAAS26F,aAAa1pC,OAAOhoE,GACvBE,MAAMq4D,MAAM,MACtC,IAAK,IAAM8lD,KAAQh+B,EACI,IAAjB89B,GAAsBA,IAAiBn+G,GAAMk+G,EAI/Ct2C,EAAM3mE,KAAK,MAAMo9G,MAHjBz2C,EAAM3mE,KAAK,QAAQo9G,KACnBH,GAA0B,EAKhC,CACA,MAAO,CAAEt2C,QAAOs2C,0BAiBlB,CAhBO,GAAInnG,GAAU26F,aAAa+B,OAAO18F,SAAU,CACjD,IAAMunG,EAAiBvnG,EAAS26F,aAAa+B,MAAM18F,SAC7CwnG,EAAgBD,EAAe/jE,QAC/BikE,EAAkCj+G,KAAKqS,QAAQ25B,MAAM8/B,IAAYjD,KAAKjmE,OAAQsyB,GAC3EA,EAAIkP,UAAUxhB,KAAM7jB,GAAMA,EAAEsC,MAAQ08G,EAAe18G,MACzDvC,OACH,OAAwC,IAApCm/G,GAAyCD,EAAcv/C,OAASqN,EAAY,EACvE,CAAEzE,MAAO,CAAC,SAAS02C,EAAen3B,YAAa+2B,2BAE/C,CACLt2C,MAAO,CAAC,SAAS02C,EAAen3B,YAAYo3B,EAAcv/C,QAAQu/C,EAAcx4C,cAChFm4C,0BAGN,CAxCA,CA2CF,GAAC,CAAAt8G,IAAA,uBAAA1B,MAED,SACE66E,EACAn5E,EACA60E,GAEAsE,EAAWn5E,GAAOm5E,EAAWn5E,IAAQ,GACrCm5E,EAAWn5E,GAAKX,KAAKw1E,EACvB,GAAC,CAAA70E,IAAA,qBAAA1B,MAOD,SACEu+G,EACAjkE,GAEA,IAAMugC,EAAkC,CAAE3mD,SAAU,CAAC,EAAGs/E,OAAQ,CAAC,EAAGh/B,OAAQ,CAAC,EAAGrqE,GAAI,CAAC,IACrF,EAAAq0G,EAAAA,4BAA2BD,EAAmB,CAAC7pD,EAAMyX,EAAWikC,EAAgBD,KAC9E,IAAMnwG,EAAQK,KAAKo+G,gBAAgBnkE,EAAMoa,EAAMyX,EAAWikC,GACpDv5F,GAAW,EAAAsxB,EAAAA,4BAA2BgoE,EAAW,EAAG9vG,KAAKqS,QAAS1S,GACxE,GAAgB,MAAZ6W,EAAJ,CAGA,IAAM/B,EAAW,GAAGq3D,KAAaikC,IAC3BuM,EAAmBt8G,KAAKq+G,gBAAgB7nG,GAAYxW,KAAKs+G,oBAAoB9nG,GAAY,GACzFqd,EAAWrd,EAASqd,SAEZ,MAAZA,GACkB,SAAlBA,EAASlmB,OACRkmB,EAASq/E,QAASr/E,EAASohC,QAC1Bz+C,EAAS08F,QAASoJ,EAAiBx6F,SAAS,aAE9C9hB,KAAKu+G,qBAAqB/jC,EAAW3mD,SAAUrd,EAASnV,IAAK,CAC3DoT,WACA+B,WACAgoG,SAA2C,MAAjChoG,EAASsxF,OAAO2W,gBAA0BjoG,EAASy8F,WAGjE,IAAME,EAAS38F,EAAS28F,OAEZ,MAAVA,IACCA,EAAOD,QAASC,EAAOl+C,QACtBz+C,EAAS08F,QAASoJ,EAAiBx6F,SAAS,WAE9C9hB,KAAKu+G,qBAAqB/jC,EAAW24B,OAAQ38F,EAASnV,IAAK,CACzDoT,WACA+B,WACAgoG,SAAyC,MAA/BhoG,EAASsxF,OAAO4W,cAAwBloG,EAASy8F,WAGpC,MAAvBz8F,EAASkxB,YACX1nC,KAAKu+G,qBAAqB/jC,EAAWrG,OAAQ39D,EAASnV,IAAK,CACzDoT,WACA+B,WACAgoG,SAAyC,MAA/BhoG,EAASsxF,OAAO6W,cAAwBnoG,EAASy8F,YAG1Dz8F,EAAS00C,MAAQ,IAAIpsD,OAAS,GACjCkB,KAAKu+G,qBAAqB/jC,EAAW1wE,GAAI0M,EAASnV,IAAK,CACrDoT,WACA+B,WACAgoG,SAAqC,MAA3BhoG,EAASsxF,OAAO8W,UAAoBpoG,EAASy8F,UAvC3D,IA2CF,IAAM4L,EAA4B,CAAEhrF,SAAU,CAAC,EAAGs/E,OAAQ,CAAC,EAAGh/B,OAAQ,CAAC,EAAGrqE,GAAI,CAAC,GAC/E,IAAK,IAAMg1G,KAAY,EAAA3oF,EAAAA,kBAAiBqkD,GACtC,IAAK,IAAMn5E,KAAO,EAAA80B,EAAAA,kBAAiBqkD,EAAWskC,IAAY,CACxD,IAAMrrG,EAAO+mE,EAAWskC,GAAUz9G,GAC5B09G,EAAStrG,EAAKgqC,KAAMj+C,GAAMA,EAAEg/G,WAAa/qG,EAAK,GACtC,MAAVsrG,IACFF,EAAQC,GAAUz9G,GAAO,CAAEoT,SAAUsqG,EAAOtqG,SAAU+B,SAAU/C,EAAK,GAAG+C,UAE5E,CAEF,OAAOqoG,CACT,GAAC,CAAAx9G,IAAA,oBAAA1B,MAED,SACEk/G,EACAC,EACAz9G,EACAyqE,EACAikC,EACAiP,GAEA,IAAMj8F,EAAS87F,EAAQC,GAAUz9G,GACjC,OAAc,MAAV0hB,EACKi8F,EAEFj8F,EAAOtO,WAAa,GAAGq3D,KAAaikC,IAAmBhtF,EAAOvM,cAAWtR,CAClF,GAAC,CAAA7D,IAAA,mBAAA1B,MAED,SAAwBs6C,EAAqC,CAAC,GAAoB,IAAAjuC,EAAA,KAC1EizG,EAAsC,GACtC72C,EAAiBpoE,KAAKqS,QAAQ0iB,QACpC,GAAI/0B,KAAKqS,QAAQ+X,OAAOtrB,OAAS,EAAG,CAClC,IAAM8O,EAAQ5N,KAAKqS,QAAQ+X,OAAO,GAC5B80F,EAAM,sDAAsDtxG,EAAMosC,QAAQykB,cAAc7wD,EAAMosC,QAAQwrB,2CAA2C53D,EAAMA,MAAMhM,aAGnK,MAFAg/B,QAAQ1N,KAAI,EAAA6Y,EAAAA,iCAAgCq8B,EAAep8B,SAC3D,EAAA3sB,EAAAA,cAAa6/F,GACPtxG,EAAMA,KACd,CACA,IAAMuxG,GAAa,EAAAC,EAAAA,6BAA4Bh3C,EAAgBpoE,KAAKmzB,UAChE+qF,GAAoB,EAAAmB,EAAAA,gCAA+BF,GACvDjB,EAAoBjkE,EAAKkjE,QAAUn9G,KAAKs/G,sBAAsBpB,EAAmBjkE,EAAKkjE,SAAWe,EACjGA,EAAoBjkE,EAAK1vB,IAAMvqB,KAAKu/G,kBAAkBrB,EAAmBjkE,EAAK1vB,KAAO2zF,EAQrF,IAPA,IAAMsB,EAAkBx/G,KAAKy/G,mBAAmBvB,EAAmBjkE,GAC/D61D,EAAW,EACT4P,EAA4C,CAAC,EAC7CC,EAA0C,CAAC,EAC3CC,EAA2C,CAAC,EAC5CC,EAAsC,CAAC,EAEpC/zC,EAAY,EAAGA,EAAY9rE,KAAKqS,QAAQ25B,MAAMltC,OAAQgtE,GAAa,EAAG,CAG7E,IAFA,IAAMrN,EAAOz+D,KAAKqS,QAAQ25B,MAAM8/B,GAC1Bg0C,EAAmC,CAAE/9G,KAAM08D,EAAK18D,KAAM8mE,KAAM,GAAI7d,YAAayT,EAAKzT,aAC/E+kD,EAAiB,EAAGA,EAAiBtxC,EAAKoK,KAAK/pE,OAAQixG,GAAkB,EAAG,CACnF,IAAMnH,EAAanqC,EAAKoK,KAAKknC,GACvBgQ,EAAiC,CAAEh+G,KAAM6mG,EAAW7mG,KAAMknE,aAAc,IAC1EnK,OAAuC55D,EACvCy4G,GAA0B,EAC1BqC,GAA2B,EACzB/P,EAAkBiO,EAAkBpyC,GAAWikC,GACjDkQ,EAAyB,GAC7BC,EAAW,IAAK,IAAIC,EAAa,EAAGA,EAAalQ,EAAgBnxG,OAAQqhH,GAAc,EAAG,CAGxF,IAFA,IAAMC,EAA4B,GAC5BlQ,EAAQD,EAAgBkQ,GAAY/lD,EAAA,WAExC,IAAM/F,EAAO67C,EAAMmQ,GACnB,OAAQhsD,EAAK1mD,MACX,IAAK,UACHyyG,EAAgB1/G,KAAK2zD,EAAK10D,OAC1B,MAEF,IAAK,cAEH,IADA,IAAI0B,EACK5B,EAAI4gH,EAAW5gH,EAAIywG,EAAMpxG,OAAQW,GAAK,EAC7C,GAAsB,aAAlBywG,EAAMzwG,GAAGkO,KAAqB,CAChCtM,EAAM2K,EAAKoyG,gBAAgBnkE,EAAMi2D,EAAMzwG,GAAIqsE,EAAWikC,GACtD,KACF,CAKF,GAHwB,MAApBjxC,IACFA,EAAmB,GAEjBkhD,EACF,MAEF,GAAW,MAAP3+G,EAAa,CACf,IAAMmV,EAAWxK,EAAKqwG,8BAA8Bh7G,EAAKyqE,EAAWikC,GAC9DphG,EAAS3C,EAAKs0G,wBAClB9pG,EACAs1D,EACAikC,EACA4N,GAEF,GAAIhvG,EACFyxG,EAAgB1/G,QAAQiO,EAAO04D,OAC/Bs2C,EAA0BhvG,EAAOgvG,wBACjCqC,GAA2B,MACtB,CACL,IAAMpC,EAAe5xG,EAAK6xG,2BAA2Bx8G,EAAKyqE,EAAWikC,GAChD,IAAjB6N,GAAsBA,IAAiB9+C,GAAqB6+C,EAI9DyC,EAAgB1/G,KAAK2zD,EAAK10D,MAAM4hE,QAAQ,iBAAkB,QAH1D6+C,EAAgB1/G,KAAK2zD,EAAK10D,MAAM4hE,QAAQ,gBAAiB,UACzDo8C,GAA0B,EAI9B,CACF,MACEyC,EAAgB1/G,KAAK2zD,EAAK10D,MAAM4hE,QAAQ,iBAAkB,OAE5D,MAEF,IAAK,QACEy+C,IACHI,EAAgB1/G,KAAK,IACG,MAApBo+D,IACFA,GAAoB,IAGxB,MAEF,IAAK,WACHA,OAAmB55D,EACnB,IAAMvF,EAAQqM,EAAKoyG,gBAAgBnkE,EAAMoa,EAAMyX,EAAWikC,GACpDwQ,GAAe,EAAAz4E,EAAAA,4BAA2BgoE,EAAW,EAAG9jG,EAAKqG,QAAS1S,GAE5E,GAAoB,MAAhB4gH,EAAsB,SAI1B,IAAMl/G,EAAMk/G,EAAal/G,IAEzB,IACG2+G,IACAO,EAAapP,aAAa+B,OAASqN,EAAapP,aAAa1pC,OAAO3oE,OAAS,KAC7EkN,EAAKw0G,uBAAuBD,EAAcz0C,EAAWikC,GACtD,CACA,IAAMphG,EAAS3C,EAAKs0G,wBAClBC,EACAz0C,EACAikC,EACA4N,GAEEhvG,GACFyxG,EAAgB1/G,QAAQiO,EAAO04D,MAEnC,CAEA24C,GAA2B,EAC3BrC,GAA0B,EAE1B,IAAI/J,EAAkB,GACtBA,GAAmB5nG,EAAKy0G,gBAAgBF,GACxC3M,GAAmB,MACf2M,EAAa7M,UACfE,GAAmB,iBAErB,IAAM7C,EAAawP,EAAapJ,uBAC1BgE,EAAUnvG,EAAKwwG,WAAW+D,GAE1BlC,EAAkBryG,EAAKqyG,gBAAgBkC,GACvCjE,EAAmB+B,EAAkBryG,EAAKsyG,oBAAoBiC,GAAgB,GACpF,GAAIlC,EAAiB,CACnBzK,GAAmB5nG,EAAK00G,WAAWH,GAE/BjE,EAAiBx6F,SAAS,UAC5B8xF,GACE,MACA7C,EACGzkG,IAAI,CAACw0B,EAAGrhC,IACAuM,EAAK20G,kBAAkB7/E,EAAGq6E,EAAS17G,EAAG8gH,IAE9C/zG,KAAK,QAGZ,IAAMo0G,EAA8B,GAChCtE,EAAiBx6F,SAAS,WAA+B,MAAlBq5F,EAAQ/lF,OACjDwrF,EAAkBlgH,KAAK,GAAGsL,EAAK60G,gBAAgB1F,EAAQ/lF,UAAU+lF,EAAQnc,UAAY,IAAM,MAClFsd,EAAiBx6F,SAAS,WAAaq5F,EAAQnc,WACxD4hB,EAAkBlgH,KAAK,MAErB47G,EAAiBx6F,SAAS,QAAyB,MAAfq5F,EAAQtc,KAC9C+hB,EAAkBlgH,KAAK,KAAI,EAAA1B,EAAAA,GAAEm8G,EAAQtc,OAAOsc,EAAQpc,OAAS,IAAM,MAG/C,MAApBoc,EAAQ11E,WACP62E,EAAiBx6F,SAAS,aACzBw6F,EAAiBx6F,SAAS,UAC1Bw6F,EAAiBx6F,SAAS,SAI5B8+F,EAAkBlgH,KAAKsL,EAAK80G,oBAAoB3F,IACvCmB,EAAiBx6F,SAAS,UAA6B,MAAjBq5F,EAAQ9qE,OACvDuwE,EAAkBlgH,KAAK,IAAG,EAAA1B,EAAAA,GAAEm8G,EAAQ9qE,WAElCuwE,EAAkB9hH,OAAS,IAC7B80G,GAAmB,MAAMgN,EAAkBp0G,KAAK,OAEpD,KAAO,CACD+zG,EAAaQ,cAAcjiH,OAAS,IACtC80G,GAAmB7C,EAChBzkG,IAAI,CAACw0B,EAAGrhC,IAAMuM,EAAK20G,kBAAkB7/E,EAAGq6E,EAAS17G,EAAG8gH,IACpD/zG,KAAK,QAGV,IAAMw0G,EAAuB,GACP,MAAlB7F,EAAQ/lF,OACV4rF,EAAWtgH,KAAK,GAAGsL,EAAK60G,gBAAgB1F,EAAQ/lF,UAAU+lF,EAAQnc,UAAY,IAAM,MAC3Emc,EAAQnc,WACjBgiB,EAAWtgH,KAAK,MAEC,MAAfy6G,EAAQtc,KACVmiB,EAAWtgH,KAAK,IAAIy6G,EAAQtc,MAAMsc,EAAQpc,OAAS,IAAM,MAEnC,MAApBoc,EAAQ11E,SACVu7E,EAAWtgH,KAAKsL,EAAK80G,oBAAoB3F,IACf,MAAjBA,EAAQ9qE,OACjB2wE,EAAWtgH,KAAK,GAAGy6G,EAAQ9qE,UAEzB2wE,EAAWliH,OAAS,IACtB80G,GAAmB,MAAMoN,EAAWx0G,KAAK,OAE7C,CAEA,IAAMy0G,GACHrB,EAAgBv+G,IAAQk/G,GAAc74E,WACnC17B,EAAKk1G,kBAAkB1B,EAAiB,SAAUn+G,EAAKyqE,EAAWikC,EAAgBwQ,QAClFr7G,EACN,GAAoB,MAAhB+7G,EAAsB,CACxB,IAAMv5E,EAAa17B,EAAKm1G,cAAcF,GACpB,MAAdv5E,IACFksE,GAAmB,cAAclsE,IACjCk4E,EAAgBv+G,IAAO,EAE3B,CAMA,IAAM+/G,GACHvB,EAAWx+G,KAASk/G,EAAar1D,MAAQ,IAAIpsD,OAAS,EACnDkN,EAAKk1G,kBAAkB1B,EAAiB,KAAMn+G,EAAKyqE,EAAWikC,EAAgBwQ,QAC9Er7G,EACU,MAAZk8G,IACFxN,GAAmB,MAAM5nG,EAAKq1G,QAAQD,KACtCvB,EAAWx+G,IAAO,GAGpB,IAAMwyG,EAAW0M,EAAa1M,UAAU9xG,KACpC8xG,IACFD,GAAmB,gBAAgBC,KAGrC,IAAMV,EAASoN,EAAapN,OAC5B,IAAKwM,EAAet+G,IAAQ8xG,IAAWA,EAAOD,OAASC,EAAOl+C,QAC5D,IAAKsrD,EAAarN,OAASoJ,EAAiBx6F,SAAS,UAAW,CAC9D,IAAMxP,EAAStG,EAAKk1G,kBAClB1B,EACA,SACAn+G,EACAyqE,EACAikC,EACAwQ,GAEF,GAAc,MAAVjuG,EAAgB,CAClB,IAAMgvG,EAAYz0C,EAAiB00C,UAAUjvG,EAAQtG,EAAKmnB,UACtDmuF,IACF1N,GAAmB,MAAM0N,KAE3B3B,EAAet+G,IAAO,CACxB,CACF,MAAW8xG,EAAOD,OAAOtsB,WAAa25B,EAAarN,MAAMtsB,WACvD+4B,EAAet+G,IAAO,GAI1B,IAAMwyB,EAAW0sF,EAAa1sF,SAC9B,GAAIA,GAA8B,SAAlBA,EAASlmB,KACvBimG,GAAmB,yBACd,IAAK8L,EAAiBr+G,IAAQwyB,IAAaA,EAASq/E,OAASr/E,EAASohC,QAC3E,IAAKsrD,EAAarN,OAASoJ,EAAiBx6F,SAAS,YAAa,CAChE,IAAMxP,EAAStG,EAAKk1G,kBAClB1B,EACA,WACAn+G,EACAyqE,EACAikC,EACAwQ,GAEF,GAAc,MAAVjuG,EAAgB,CAClB,IAAMkvG,EAAc30C,EAAiB40C,YAAYnvG,EAAQtG,EAAKmnB,UAAU,GACpEquF,IACF5N,GAAmB,MAAM4N,KAE3B9B,EAAiBr+G,IAAO,CAC1B,CACF,MAAWwyB,EAASq/E,OAAOtsB,WAAa25B,EAAarN,MAAMtsB,WACzD84B,EAAiBr+G,IAAO,GAG5B++G,EAAgB1/G,KAAKkzG,GAI3B,EAjPSyM,EAAY,EAAGA,EAAYnQ,EAAMpxG,OAAQuhH,GAAa,EAAC,GAAAjmD,IA8DxD,SAAS8lD,EAoLbE,EAAgBthH,OAAS,IAC3BmhH,EAAeA,EAAaz3D,OAAO43D,GAEvC,CACAL,EAAW92C,aAAeg3C,EAAazzG,KAAK,MAC5CuzG,EAAW/0D,YAAc49C,EAAW59C,YACpC80D,EAAYj3C,KAAKnoE,KAAKq/G,GACtBjQ,GAAY,CACd,CACAmP,EAAav+G,KAAKo/G,EACpB,CACA,IAAMnxG,EAA0B,CAAE4sB,MAAO,UAAWx5B,KAAM/B,KAAKqS,QAAQtQ,KAAMiqC,MAAOizE,GAC9EyC,EAAqB,IAAIx4F,IAe/B,OAdA,EAAAsjD,EAAAA,aAAYxsE,KAAKqS,QAAQ25B,MAAQx1B,IAC/B,GAAuB,MAAnBA,EAASmrG,QAAkBnrG,EAASmrG,OAAO7iH,OAAS,EAAG,CACzD,IAAMuC,GAAM,EAAAugH,EAAAA,gCAA+BprG,EAAUxW,KAAKmzB,UAC1DuuF,EAAmBn3F,IAAIlpB,EACzB,KAEiB,EAAAwgH,EAAAA,wBACjB7hH,KAAKqS,QAAQ0iB,QACbpmB,EACA3O,KAAKmzB,SACLuuF,EACAznE,EAAKyjE,cAIT,GAAC,CAAAr8G,IAAA,sBAAA1B,MAOD,SAA2B6W,GACzB,IAAMspE,EAAkB,CAAC9/E,KAAKygH,gBAAgBjqG,IAC1CA,EAASk9F,SACX5zB,EAAMp/E,KAAK,cAUb,IAFA,IAAMqwG,EAAav6F,EAAS2gG,uBACtBgE,EAAUn7G,KAAKw8G,WAAWhmG,GACvB/W,EAAI,EAAGA,EAAIsxG,EAAWjyG,OAAQW,GAAK,EACtCsxG,EAAWtxG,GAAGsoC,KAAKjpC,OAAS,GAC9BghF,EAAMp/E,KAAKV,KAAK2gH,kBAAkB5P,EAAWtxG,GAAI07G,EAAS17G,EAAG+W,IAGjE,IAAMwqG,EAAuB,GACP,MAAlB7F,EAAQ/lF,OACV4rF,EAAWtgH,KAAK,GAAGV,KAAK6gH,gBAAgB1F,EAAQ/lF,UAAU+lF,EAAQnc,UAAY,IAAM,MAC3Emc,EAAQnc,WACjBgiB,EAAWtgH,KAAK,MAEC,MAAfy6G,EAAQtc,KACVmiB,EAAWtgH,KAAK,KAAI,EAAA1B,EAAAA,GAAEm8G,EAAQtc,OAAOsc,EAAQpc,OAAS,IAAM,MAEtC,MAApBoc,EAAQ11E,SACVu7E,EAAWtgH,KAAKV,KAAK8gH,oBAAoB3F,IACf,MAAjBA,EAAQ9qE,OACjB2wE,EAAWtgH,KAAK,IAAG,EAAA1B,EAAAA,GAAEm8G,EAAQ9qE,WAE3B2wE,EAAWliH,OAAS,GACtBghF,EAAMp/E,KAAKsgH,EAAWx0G,KAAK,MAE7B,IAAMk7B,EAAa1nC,KAAK8hH,iBAAgB,EAAAC,EAAAA,gCAA+BvrG,IACrD,MAAdkxB,GACFo4C,EAAMp/E,KAAK,WAAWgnC,MAEnBlxB,EAAS00C,MAAQ,IAAIpsD,OAAS,GACjCghF,EAAMp/E,KAAKV,KAAKqhH,QAAQ7qG,IAEtBA,EAASq9F,UAAU9xG,MACrB+9E,EAAMp/E,KAAK,aAAa8V,EAASq9F,SAAS9xG,QAE5C,IAAMoxG,EAAStmC,EAAiB00C,UAAU/qG,EAAUxW,KAAKmzB,UAAU,GAAO,GACtEggF,GACFrzB,EAAMp/E,KAAKyyG,GAEb,IAAMt/E,EAAWg5C,EAAiB40C,YAAYjrG,EAAUxW,KAAKmzB,UAAU,GAAO,GAI9E,OAHIU,GACFisD,EAAMp/E,KAAKmzB,GAENisD,EAAMtzE,KAAK,MACpB,GAAC,CAAAnL,IAAA,kBAAA1B,MAED,SAAwB48B,GACtB,IAAMw0E,EAAax0E,EAAgBq+E,mBACnC,GAAkB,MAAd7J,GAAsBA,EAAWjyG,OAAS,EAAG,CAC/C,IAAM8+G,EAAe7M,EAAWpkD,UAAW7rB,GAAMA,EAAE+M,WAC7Cm0E,GAAgC,IAAlBpE,EAAsB,EAAIA,EAQ1C77G,EAPUgvG,EAAWzkG,IAAI,CAAC4tG,EAAWz6G,KACvC,IAAM8b,EAAc,IAAN9b,EAAU88B,EAAgBhhB,WAAQrW,EAC1C+8G,EAAU/H,EAAUviE,cACtB,EAAAgnD,EAAAA,oBAAkB,EAAAlxB,EAAAA,cAAaysC,EAAUviE,aAAc33C,KAAKmzB,SAASiR,WAAYpkC,KAAKmzB,SAAU5X,IAChG,EAAAktE,EAAAA,oBAAmByxB,EAAUn4G,KAAM/B,KAAKmzB,SAAU5X,GACtD,MAAO,GAAG9b,IAAMuiH,GAAeviH,EAAI,EAAI,KAAO,KAAKwiH,MAEpCz1G,KAAK,OAItB,OAHI+vB,EAAgB2lF,MAAQ,IAC1BngH,EAAO,GAAGA,KAAQw6B,EAAgB2lF,UAE7BngH,CACT,CAAO,GAAIw6B,EAAgBob,aAAc,CACvC,IAAMnhC,GAAW,EAAAi3D,EAAAA,cAAalxC,EAAgBob,aAAc33C,KAAKmzB,SAASiR,WACtEriC,GAAO,EAAA48F,EAAAA,mBAAkBnoF,EAAUxW,KAAKmzB,SAAUoJ,EAAgBhhB,OAItE,OAHIghB,EAAgB2lF,MAAQ,IAC1BngH,EAAO,GAAGA,KAAQw6B,EAAgB2lF,UAE7BngH,CACT,CACE,OAAOw6B,EAAgBqqD,QAE3B,GAAC,CAAAvlF,IAAA,aAAA1B,MAED,SAAmB48B,GACjB,IAAMggF,EAAgBhgF,EAAgB22E,OAAO18F,SAC7C,IAAK+lG,EACH,MAAM,IAAI7vG,MAAM,8BAElB,IAAMwmG,EAAQ32E,EAAgB22E,MAC9B,IAAKA,EACH,MAAM,IAAIxmG,MAAM,qBAElB,IAAIssF,EAAM,MACV,GAAIujB,EAAc5kE,aAAc,CAC9B,IAAMnhC,GAAW,EAAAi3D,EAAAA,cAAa8uC,EAAc5kE,aAAc33C,KAAKmzB,SAASiR,WAExE40D,IADiB,EAAA2F,EAAAA,mBAAkBnoF,EAAUxW,KAAKmzB,SAAUopF,EAAchhG,MAE5E,MACEy9E,GAAOujB,EAAc31B,SAMvB,OAJIssB,EAAMz0C,MAAQy0C,EAAMh+E,OAEtB8jE,GAAO,KADY,EAAAviE,EAAAA,yBAAwB,CAACy8E,EAAMz0C,KAAMy0C,EAAMh+E,MAAM1oB,KAAK,SAGpEwsF,CACT,GAAC,CAAA33F,IAAA,UAAA1B,MAmCD,SAAgB48B,GACd,MAAO,aAAaA,EAAgB2uB,MAAQ,IAAI1+C,KAAK,QACvD,GAAC,CAAAnL,IAAA,aAAA1B,MAmFD,SAAmB6W,GACjB,IAAMu6F,EAAav6F,EAAS2gG,uBAC5B,GAA0B,IAAtBpG,EAAWjyG,QAA8C,IAA9BiyG,EAAW,GAAGhpE,KAAKjpC,OAAc,CAC9D,IAAMq8G,EAAU3kG,EAAS2kG,QACnBsB,EAAgBjmG,EAAS08F,OAAO18F,UAAU2kG,SAAW,CAAC,EAC5D,MAAO,CACL/lF,OAAQ+lF,GAAS/lF,QAAUqnF,EAAcrnF,OACzCypE,IAAKsc,GAAStc,KAAO4d,EAAc5d,IACnCxuD,MAAO8qE,GAAS9qE,OAASosE,EAAcpsE,MACvC5K,SAAU01E,GAAS11E,UAAYg3E,EAAch3E,SAC7Cy5D,mBAAoBic,GAASjc,oBAAsBud,EAAcvd,mBACjEH,OAAQoc,GAASpc,QAAU0d,EAAc1d,OACzCC,UAAWmc,GAASnc,WAAayd,EAAczd,UAEnD,CACA,IAAMmjB,EAAcpR,EAAW,IAAIhpE,KAAK,IAAI3S,OACtCgtF,EAAWrR,EAAW,IAAIhpE,KAAK,IAAI82D,IACnCwjB,IAAgBtR,EAAW,IAAIhpE,KAAK,IAAIg3D,OACxCujB,IAAmBvR,EAAW,IAAIhpE,KAAK,IAAIi3D,UAC3CujB,EAAaxR,EAAW,IAAIhpE,KAAK,IAAIsI,MAGrCmyE,EAAiBzR,EAAWnuF,KAAMke,GAAMA,EAAEiH,KAAKnlB,KAAM86B,GAAoB,MAAdA,EAAEjY,WAC7Dg9E,EAAgB1R,EAAW,IAAIhpE,KAAK,IAAItC,SACxCi9E,IAA4B3R,EAAW,IAAIhpE,KAAK,IAAIm3D,mBAKpDyjB,EACa,MAAjBF,IAC8B,MAA7BjsG,EAAS2kG,QAAQ11E,UAAsC,MAAlBjvB,EAAS08F,QAC/CnC,EAAWhiF,MAAO+R,GAChBA,EAAEiH,KAAKhZ,MACJ2uB,GACCA,EAAEjY,WAAag9E,KAAmB/kE,EAAEwhD,qBAAuBwjB,GAA2BhlE,EAAErN,QAAUkyE,IAG1G,MAAO,CACL98E,SAAUk9E,EAAmBF,OAAgBv9G,EAC7Cg6F,mBAAoByjB,EAAmBD,OAA0Bx9G,EACjEkwB,OACiB,MAAf+sF,GACApR,EAAWhiF,MAAO+R,GAChBA,EAAEiH,KAAKhZ,MAAO2uB,IAAM,EAAAq/D,EAAAA,eAAcr/D,EAAEtoB,OAAQ+sF,MAAkBzkE,EAAEshD,YAAcsjB,IAE5EH,OACAj9G,EACN85F,UAAW+R,EAAWhiF,MAAO+R,GAAMA,EAAEiH,KAAKhZ,MAAO2uB,IAAM,EAAAq/D,EAAAA,eAAcr/D,EAAEtoB,OAAQ+sF,MAAkBzkE,EAAEshD,YACnGH,IACc,MAAZujB,GACArR,EAAWhiF,MAAO+R,GAAMA,EAAEiH,KAAKhZ,MAAO2uB,GAAMA,EAAEmhD,MAAQujB,KAAc1kE,EAAEqhD,SAAWsjB,IAC7ED,OACAl9G,EACN65F,OAAQgS,EAAWhiF,MAAO+R,GAAMA,EAAEiH,KAAKhZ,MAAO2uB,GAAMA,EAAEmhD,MAAQujB,KAAc1kE,EAAEqhD,SAC9E1uD,OACGsyE,GAAqBH,GACR,MAAdD,IACAxR,EAAWhiF,MAAO+R,GAAMA,EAAEiH,KAAKhZ,MAAO2uB,GAAMA,EAAErN,QAAUkyE,SAEpDr9G,EADAq9G,EAGV,GAAC,CAAAlhH,IAAA,qBAAA1B,MAED,SACEooC,EACAvxB,EACAk0C,GAEA,GAAoB,IAAhB3iB,EAAKjpC,OAAc,CACrB,IAAM8jH,GAAe,EAAAxH,EAAAA,6BAA4B5kG,EAAUk0C,GAAO,GAClE,MAAO,CACL,CACE,CACE2rD,OAAQuM,GAAcvH,UAAUhF,QAAU,EAC1CD,OAAQwM,GAAcvH,UAAUjF,OAChChhF,OAAQwtF,GAAcxtF,QAAU4nF,EAAAA,YAChCje,OAAQ6jB,GAAc7jB,SAAU,EAChCH,QAASgkB,GAAcvH,UAAUzc,UAAW,EAC5C2b,cAAeqI,GAAcvH,UAAUd,gBAAiB,EACxDvb,UAAW4jB,GAAc5jB,YAAa,EACtCH,IAAK+jB,GAAc/jB,IACnBxuD,MAAOuyE,GAAcvyE,MACrB90B,MAAOqnG,GAAcrnG,OAEvB,GAGN,CACA,IAAI+/F,EACEtH,EAA0D,GAChE,IAAK,IAAMlvG,KAAOijC,EAAM,CACtB,IAAM1mC,EAAMrB,KAAK6iH,SAAS/9G,GACX,MAAXw2G,GAAmBA,IAAYj6G,GACjC2yG,EAAOtzG,KAAK,CAACoE,EAAK,IAEpBkvG,EAAOA,EAAOl1G,OAAS,GAAG,IAAM,EAChCw8G,EAAUj6G,CACZ,CACA,OAAO2yG,CACT,GAAC,CAAA3yG,IAAA,mBAAA1B,MAED,SAAyBooC,GACvB,IAAIuzE,EACEtH,EAAuD,GAC7D,IAAK,IAAMlvG,KAAOijC,EAAM,CACtB,IAAM1mC,EAAMrB,KAAKu7G,eAAez2G,GACjB,MAAXw2G,GAAmBA,IAAYj6G,GACjC2yG,EAAOtzG,KAAK,CAACoE,EAAK,IAEpBkvG,EAAOA,EAAOl1G,OAAS,GAAG,IAAMgG,EAAIs3D,aACpCk/C,EAAUj6G,CACZ,CACA,OAAO2yG,CACT,GAAC,CAAA3yG,IAAA,gBAAA1B,MAED,SAAsB48B,GACpB,OAAOv8B,KAAK8hH,gBAAgBvlF,EAAgBmL,WAC9C,GAAC,CAAArmC,IAAA,kBAAA1B,MAED,SAAwB+nC,GACtB,GAAIA,EAAY,CACd,IAAMssE,EAASh0G,KAAK8iH,iBAAiBp7E,GAC/Bq7E,EAAiB,GACvB,IAAK,IAAM7S,KAAS8D,EAAQ,CAC1B,IAAMhzB,EAAQkvB,EAAM,GACdpxG,EAASoxG,EAAM,GACf96E,EACJ4rD,EAAM5rD,SAA+B,MAApB4rD,EAAMvc,YAAqB,EAAA5D,EAAAA,iBAAgBmgB,EAAMvc,aAAc,EAAAjvC,EAAAA,cAAa,EAAG,OAClGutF,EAAKriH,KAAK,GAAG5B,KAAUkiF,EAAMzkB,SAAQ,EAAA3E,EAAAA,cAAaxiC,KACpD,CACA,OAAuB,IAAhB2tF,EAAKjkH,OAAe,OAASikH,EAAKv2G,KAAK,KAChD,CAEF,GAAC,CAAAnL,IAAA,kBAAA1B,MAED,SAAwBu4G,GACtB,OAAkB,MAAdA,GACK,EAAAtgD,EAAAA,cAAasgD,GAEf,EACT,GAAC,CAAA72G,IAAA,sBAAA1B,MAED,SAA4Bw7G,GAC1B,IAAM6H,EAAW7H,EAAQjc,mBAAqB,IAAM,GAC9C+jB,EAA4B,MAAjB9H,EAAQ9qE,MAAgB,IAAG,EAAArxC,EAAAA,GAAEynB,KAAKw0C,IAAI,EAAGkgD,EAAQ9qE,WAAa,IAC/E,MAAO,IAAG,EAAArxC,EAAAA,GAAEynB,KAAKw0C,IAAI,EAAGkgD,EAAQ11E,UAAY,OAAOu9E,KAAYC,GACjE,GAAC,CAAA5hH,IAAA,oBAAA1B,MAED,SACEu6G,EACAiB,EACAzwD,EACAl0C,GAEA,IAAM0sG,EAAuBljH,KAAKmjH,mBAAmBjJ,EAAUnyE,KAAMvxB,EAAUk0C,GACzE/7C,EAAmB,GACzB,IAAK,IAAMuhG,KAASgT,EAAsB,CACxC,IAAMp+G,EAAMorG,EAAM,GACdkT,EAAS,GAKb,GAJAA,GAAU,GAAGlT,EAAM,KAAKprG,EAAIy1G,cAAgB,IAAM,MAClD6I,GAAwB,MAAdt+G,EAAIsxG,OAAiB,IAAG,EAAAp3G,EAAAA,GAAEynB,KAAKw0C,IAAI,EAAGn2D,EAAIsxG,YAAc,GAClEgN,GAAU,IAAG,EAAApkH,EAAAA,GAAEynB,KAAKw0C,IAAI,EAAGn2D,EAAIuxG,QAAU,MACzC+M,GAAUt+G,EAAI85F,QAAU,IAAM,GACR,MAAlBuc,EAAQ/lF,SAAmB+lF,EAAQnc,UAAW,CAChD,IAAMqkB,EAAcrjH,KAAK6gH,gBAAgB/7G,EAAIswB,QACzCiuF,EACFD,GAAU,IAAIC,IAAcv+G,EAAIk6F,UAAY,IAAM,KACzCl6F,EAAIk6F,YACbokB,GAAU,MAEd,CAKA,GAJmB,MAAfjI,EAAQtc,MACVukB,GAAqB,MAAXt+G,EAAI+5F,IAAc,MAAK,EAAA7/F,EAAAA,GAAEynB,KAAKw0C,IAAI,EAAGn2D,EAAI+5F,QAAU,GAC7DukB,GAAqB,MAAXt+G,EAAI+5F,KAAe/5F,EAAIi6F,OAAS,IAAM,IAE9B,MAAhBj6F,EAAI2gC,UAAwC,MAApB01E,EAAQ11E,SAAkB,CACpD,IAAMu9E,EAAWl+G,EAAIo6F,mBAAqB,IAAM,GAC1C+jB,EAAwB,MAAbn+G,EAAIurC,MAAgB,IAAG,EAAArxC,EAAAA,GAAEynB,KAAKw0C,IAAI,EAAGn2D,EAAIurC,WAAa,IACvE+yE,GAAU,KAAI,EAAApkH,EAAAA,GAAEynB,KAAKw0C,IAAI,EAAGn2D,EAAI2gC,cAAcu9E,KAAYC,GAC5D,MAA2B,MAAhBn+G,EAAI2gC,UAAqC,MAAjB01E,EAAQ9qE,QACzC+yE,GAAUt+G,EAAIurC,MAAQ,KAAI,EAAArxC,EAAAA,GAAEynB,KAAKw0C,IAAI,EAAGn2D,EAAIurC,WAAa,IAEvDvrC,EAAIyxG,OACN6M,GAAU,SAERt+G,EAAIyW,QACN6nG,GAAU,KAAKt+G,EAAIyW,UAErB5M,EAAOjO,KAAK0iH,EACd,CACA,IAAIE,EAAY,GAIhB,OAHI54D,EAAQ,GAAKwvD,EAAUrsE,YACzBy1E,GAAa,MAERA,EAAY30G,EAAOrC,IAAK1N,GAAMA,EAAEyiB,QAAQ7U,KAAK,KACtD,GAAC,CAAAnL,IAAA,iBAAA1B,MAED,SAAuBmF,GACrB,MAAO,GAAGA,EAAIy3D,SAAQ,EAAA3E,EAAAA,cAAa9yD,EAAIswB,QAAUtwB,EAAI2/D,YAAc,IACrE,GAAC,CAAApjE,IAAA,WAAA1B,MAED,SAAiBmF,GACf,MAAO,GAAGA,EAAIuxG,UAAUvxG,EAAIsxG,WAAU,EAAAmN,EAAAA,kBAAiBz+G,EAAIswB,WAAWtwB,EAAI85F,WAAW95F,EAAI+5F,OAAO/5F,EAAIi6F,UAClGj6F,EAAIurC,SACFvrC,EAAIyW,SAASzW,EAAIk6F,aAAal6F,EAAI2gC,YAAY3gC,EAAIo6F,sBAAsBp6F,EAAIyxG,MAClF,IAAC,EAAAl1G,IAAA,YAAA1B,MApUD,SACE48B,EACApJ,EACAqwF,EACAC,GAEA,IAAMtQ,EAAS52E,EAAgB42E,SAAWsQ,EAAelnF,EAAgB22E,OAAO18F,UAAU28F,YAASjuG,GACnG,IAAKiuG,EACH,MAAO,GAMT,GAAIsQ,EAAc,CAChB,IAAMxuD,GAAS,EAAA2mD,EAAAA,wCAAuCr/E,GACtD,GAAc,MAAV04B,EACF,MAAO,oBAAoBuuD,EAAa,YAAcvuD,GAE1D,CACA,GAAIk+C,EAAOD,MAAO,CAChB,GAAIC,EAAOD,MAAM18F,UAAUmhC,aAAc,CACvC,IAAMnhC,GAAW,EAAAi3D,EAAAA,cAAa0lC,EAAOD,MAAM18F,SAASmhC,aAAcxkB,EAASiR,WAE3E,MAAO,0BADU,EAAAu6D,EAAAA,mBAAkBnoF,EAAU2c,EAAUggF,EAAOD,MAAM18F,SAAS+E,UAE/E,CACE,MAAO,yBAAyB43F,EAAOD,MAAM18F,UAAUowE,UAAYusB,EAAOD,MAAMtsB,YAEpF,CACE,MAAO,oBAAoB48B,EAAa,YAAcrQ,EAAOl+C,QAEjE,GAAC,CAAA5zD,IAAA,cAAA1B,MAMD,SACE48B,EACApJ,EACAqwF,EACAC,GAEA,IAAM5vF,EAAW0I,EAAgB1I,WAAa4vF,EAAelnF,EAAgB22E,OAAO18F,UAAUqd,cAAW3uB,GACzG,IAAK2uB,EACH,MAAO,GAET,IAAI2tF,EAAc,aAAa3tF,EAASlmB,OAClC6D,GAAQ,EAAA66D,EAAAA,iCAAgC9vC,GACxCowC,GAAgB,EAAA6uC,EAAAA,yCAAwCj/E,GAC9D,GAAsB,WAAlB1I,EAASlmB,KAAmB,CAK9B,IAAM+1G,EACJD,GAAkC,MAAlB5vF,EAASq/E,MAAgB1hG,GAAQ,EAAAkrG,EAAAA,4CAA2CngF,GAC9FilF,GAAe,KAAI,EAAA90C,EAAAA,qBAAoBg3C,GACpCp3G,IAAI,EAAE0mC,EAAGlS,KACD,GAAGkS,IAAI25B,EAAc35B,IAAIyoE,aAAe,IAAM,QAAO,EAAA7jD,EAAAA,cAAa92B,MAE1Et0B,KAAK,QACV,MAAO,GAAsB,OAAlBqnB,EAASlmB,KAAe,CACjC,IAAMw5D,EAAY31D,EAAM21D,UAClBw8C,EAAYnyG,EAAMmyG,UAClBC,EAAiBpyG,EAAMoyG,eACvBx8C,EAAY51D,EAAM41D,UAClBy8C,EAAWryG,EAAMqyG,SACjBC,EAAiBtyG,EAAMsyG,eACvB/5G,EAAiB,GACvBA,EAAKrJ,MAAK,EAAAk3D,EAAAA,cAAauP,KACnBw8C,EAAY,GAAKv8C,EAAUznE,MAAQ,IACrCoK,EAAKrJ,KAAK,GAAGijH,MAEXA,EAAY,GAAKv8C,EAAUznE,MAAQ,IACrCoK,EAAKrJ,KAAK,GAAGkjH,KAEXx8C,EAAUznE,MAAQ,GACpBoK,EAAKrJ,MAAK,EAAAk3D,EAAAA,cAAawP,IAErBy8C,EAAW,GACb95G,EAAKrJ,KAAK,GAAGmjH,KAEXA,EAAW,GACb95G,EAAKrJ,KAAK,GAAGojH,KAEftC,GAAe,IAAIz3G,EAAKyC,KAAK,QAC/B,MAAO,GAAsB,OAAlBqnB,EAASlmB,KAAe,CACjC,IAAMw5D,EAAY31D,EAAM21D,UAClB3K,EAAUhrD,EAAMgrD,QAChBunD,EAAUvyG,EAAMuyG,QAEtBvC,GAAe,IADF,EAAC,EAAA5pD,EAAAA,cAAauP,GAAY,GAAG3K,IAAW,GAAGunD,KAChCv3G,KAAK,QAC/B,MAAO,GAAsB,QAAlBqnB,EAASlmB,KAAgB,CAClC,IAAM4uD,EAAO/qD,EAAM+qD,KACb4K,EAAY31D,EAAM21D,UAExBq6C,GAAe,IADF,CAAC,GAAGjlD,KAAQ,EAAA3E,EAAAA,cAAauP,IACd36D,KAAK,QAC/B,CACA,GAAsB,WAAlBqnB,EAASlmB,KAAmB,CAC9B,IAAMq2G,EAAiBP,GAAe,EAAA3M,EAAAA,0CAAyCv6E,QAAmBr3B,EAClG,GAAsB,MAAlB8+G,EACFxC,GAAegC,EAAa,aAAe,IAAIQ,SAC1C,GAAInwF,EAASq/E,MAClB,GAAIr/E,EAASq/E,MAAM18F,UAAUmhC,aAAc,CACzC,IAAMnhC,GAAW,EAAAi3D,EAAAA,cAAa55C,EAASq/E,MAAM18F,SAASmhC,aAAcxkB,EAASiR,WAE7Eo9E,GAAe,UADE,EAAA7iB,EAAAA,mBAAkBnoF,EAAU2c,EAAUU,EAASq/E,MAAM18F,SAAS+E,UAEjF,MACEimG,GAAe,SAAS3tF,EAASq/E,MAAM18F,UAAUowE,UAAY/yD,EAASq/E,MAAMtsB,kBAG9E46B,GAAegC,EAAa,aAAe,IAAI3vF,EAASohC,QAE5D,CACA,OAAOusD,CACT,IAAC,CA53B0B,E,sGC6nDtB,SAA8B5pG,EAAqB+/B,EAA6BssE,IACrF,EAAAvjE,EAAAA,gBACE9oC,EACA,EACE,EAAA4b,EAAAA,MACG7yB,EAAE,WACFusC,aAAc7W,GACN,IAAIA,GAAS,EAAA6tF,EAAAA,2BAA0BvsE,EAAcssE,IAAkB33G,IAAI,CAACvN,EAAGU,KAAM,IACvFV,EACH2rD,MAAOjrD,OAGb,EAAA+zB,EAAAA,MAAqB7yB,EAAE,qBAAqB8yB,OAAOwwF,IAErD,eAEJ,E,qFAydO,SACLpwF,EACAxhB,EACA6iB,EACA/B,EACAgkD,GAEA,IAAM3gD,EAAqB2gD,GAAS3gD,mBAEpC,KADmB,EAAAq8E,EAAAA,uBAAsBxgG,EAAS6iB,GAEhD,OAAOrB,EAGT,IAAMswF,EACkB,MAAtB3tF,GAAqD,MAAvB2gD,GAASriD,WAjF3C,SACEjB,EACAxhB,EACA6iB,EACA/B,EACA2B,EACAK,GAEA,IAAM4+E,GAAe,EAAA5B,EAAAA,gCAA+B9/F,EAAS6iB,GACvDkvF,EAAarQ,EAAaznG,IAAKvN,GAAMA,EAAEsC,KAYvCg1B,EAAU,IARHxC,EAASwC,QAAQzzB,OAC3B0zB,GAC4B,MAA3BA,EAAMI,mBACNJ,EAAM+tF,UAC2C,IAAjDD,EAAWjhH,QAAQmzB,EAAMI,oBACzB4tF,GAA0BhuF,KAIxB0jB,GAAU,EAAAo2D,EAAAA,oBAAmB/9F,EAAS6iB,GAAKklC,EAAA,SAAA5jD,GAE/C,IAA0C,IAAtCse,EAAW3xB,QAAQqT,EAASnV,KAAa,SAG7C,GAAIg1B,EAAQzT,KAAM7jB,GAAMA,EAAE23B,oBAAsBlgB,EAASnV,KAAM,SAM/D,IADA,IAAIkjH,EAAK,EAAEvqC,EAAA,SAAAv6E,GAET,IAAM+kH,EAAcnuF,EAAQs2B,UAAW5tD,GAAMA,EAAE23B,oBAAsB0tF,EAAW3kH,IAChF,IAAqB,IAAjB+kH,EACmB,OAArBD,EAAKC,EAAc,EAAE,CAGzB,EANS/kH,EAAI2kH,EAAWjhH,QAAQqT,EAASnV,KAAO,EAAG5B,GAAK,IAASu6E,EAAAv6E,GAANA,GAAK,GAOhE42B,EAAQm6E,OAAO+T,EAAI,GAAG,EAAA3Y,EAAAA,0BAAyBv5F,EAAS2nC,EAASuqE,EAAI/tG,EAAU2e,EAAOhC,GACxF,EAlBA,IAAK,IAAM3c,KAAYu9F,EAAY35C,EAAA5jD,GAoBnC,IAAMiuG,EAAe3vF,EAAWlyB,OAAQvB,IAAqC,IAA7B+iH,EAAWjhH,QAAQ9B,IAC7DqjH,EAAcN,EAAWxhH,OAAQvB,IAAqC,IAA7ByzB,EAAW3xB,QAAQ9B,IAGlE,GADEojH,EAAa3lH,SAAW4lH,EAAY5lH,SAAU2lH,EAAa7hG,KAAK,CAACvhB,EAAK5B,IAAM4B,IAAQqjH,EAAYjlH,IAEhG,OAAO42B,EAKT,IAAIsuF,GAAa,EACXC,EAAWvuF,EAAQ/pB,IAAKgqB,IAC5B,IAAMuuF,EAAiC,MAA3BvuF,EAAMI,kBAA4B0tF,EAAWjhH,QAAQmzB,EAAMI,oBAAsB,EAI7F,OAHa,IAATmuF,IACFF,EAAYE,IAEE,IAATA,EAAaA,EAAMF,IAE5B,OAAOtuF,EACJ/pB,IAAI,CAACgqB,EAAOo0B,KAAU,CAAGp0B,QAAOo0B,QAAOo6D,QAASF,EAASl6D,MACzDsf,KAAK,CAACnrE,EAAG4kE,IAAO5kE,EAAEimH,UAAYrhD,EAAEqhD,QAAUjmH,EAAEimH,QAAUrhD,EAAEqhD,QAAUjmH,EAAE6rD,MAAQ+Y,EAAE/Y,OAC9Ep+C,IAAKvN,GAAMA,EAAEu3B,MAClB,CAiBQyuF,CAAmBlxF,EAAUxhB,EAAS6iB,EAAK/B,EAAUgkD,EAAQriD,WAAYqiD,EAAQhiD,QAAS,EAAA6vF,EAAAA,wBAC1F9/G,EACA+/G,EAA0B,MAAdd,EAAqBe,GAAwBrxF,EAAUswF,GAActwF,EACjFsxF,EAAaF,EAAU5uF,QAAQ/pB,IAAI,CAACgqB,EAAOo0B,KAC/C,GAA+B,MAA3Bp0B,EAAMI,kBACR,OAAOJ,EAET,GAA0B,MAAtBE,IAA+BA,EAAmB1U,SAASwU,EAAMI,mBACnE,OAAOJ,EAET,IAAMiG,GAAkB,EAAA2jE,EAAAA,wCAAuC7tF,EAAS6iB,EAAKoB,EAAMI,mBACnF,OAAK6F,EAGE6oF,GAA8B9uF,EAAOo0B,EAAOnuB,EAAiBpJ,GAAU,GAFrEmD,IAKX,MAAO,IAAK2uF,EAAW5uF,QAAS8uF,EAClC,E,gEAEO,SACLhpF,EACAhJ,EACAgC,EACAtB,EACAjB,EACAhkB,EACA8lG,GAEA,IAAIv1E,EAAc,IAAKtL,GACvB,GACuB,MAArBjB,EAAOyyF,YACkB,MAAzBzyF,EAAO0yF,gBACY,MAAnB1yF,EAAO2yF,UACe,MAAtB3yF,EAAOywF,aAC4C,KAAnD,EAAAltF,EAAAA,kBAAiBvD,EAAO4yF,UAAY,CAAC,GAAG1mH,OAExC,MAAO,IAAKqgC,EAAa8G,gBAAY/gC,GAEd,MAArB0tB,EAAOyyF,aACTlmF,EAAcsmF,GAAmCtmF,EAAavM,EAAOyyF,aAE1C,MAAzBzyF,EAAO0yF,iBACTnmF,EAAcumF,GAAuCvmF,EAAavM,EAAO0yF,iBAEvE1yF,EAAOmsE,SACT5/D,EAAcwmF,GAA6BxmF,EAAavM,EAAO2yF,WAEvC,MAAtB3yF,EAAOywF,cACTlkF,EAAcymF,GAAgCzmF,EAAavM,EAAOywF,cAEpE,IAAM3sF,EAAoB9D,EAAO2J,iBAAiBl7B,KAC9C,EAAA80B,EAAAA,kBAAiBvD,EAAO4yF,UAAY,CAAC,GAAG1mH,OAAS,GAA0B,MAArB43B,IACxDyI,EAAc0mF,GAAqC1mF,EAAazI,EAAmB9D,EAAO4yF,UAAY,CAAC,IAEzGrmF,EAAc2mF,GAA0B3mF,EAAavM,EAAOkT,WAAYlT,EAAOyU,SAAUlU,GACrFP,EAAO2J,kBACT4C,EAAc4mF,GACZ5mF,EACAvM,EAAO2J,gBACP3J,EAAO4J,aAAe,CAAC,EACvB5J,EAAOkT,WACPlT,EAAOyU,SACP,UACAlU,EACAgC,EACAu/E,IAGAsR,EAAmC7mF,KACrCA,EAAcmB,EAAmBnE,EAASgD,IAO5C,IAAM8mF,GALN9mF,EAAc+mF,EAA4B/mF,EAAavM,EAAOkT,WAAY,YAKnCL,SA6CvC,OAzCIwgF,GAAoB1rE,WACtBpb,EAAc,IACTA,EACHsG,SAAU,IAAKwgF,EAAoB1rE,gBAAYr1C,GAC/CygC,sBAAkBzgC,IAGpBi6B,EAAc,IAAKA,EAAasG,cAAUvgC,EAAWygC,sBAAkBzgC,GAKlE0tB,EAAO6J,eACV0C,EAAcgnF,EACZhqF,EACAgD,GACA,IAAItvB,MAAOuzF,UACX,UACAxwE,EAAOkT,WACPlT,EAAOyU,SACPlU,EACAvkB,KAINuwB,EAAYoB,WAAY,EAAAC,EAAAA,uBACtBrE,EACAgD,EACAvM,EAAO6J,aACPtJ,EAASsN,OAAOC,SACA,MAAhB9xB,IAAwB,EAAA4hC,EAAAA,+BAA8B5hC,KAExD,EAAAmiC,EAAAA,oDACE5U,EACAgD,EACAvM,EAAOkT,WACP,UACAlT,EAAO2J,gBACPpJ,EACAvkB,GAEK,IAAKuwB,EAAa8G,gBAAY/gC,EACvC,E,sBA//CO,SAA6B2uB,EAA0BuyF,EAAkB7oF,GAC9E,IAAIiC,EAAY3L,EAAS2L,UACnB6mF,EAAgB,IAAIx2G,KAAK2vB,GACzBO,EAAkB,MAAXqmF,GAAkB,EAAAE,EAAAA,wBAAuBF,QAAWlhH,EACrD,MAAR66B,IACFP,EAAY,IAAI3vB,KACdkwB,EAAKwmF,cACLxmF,EAAKyhE,WACLzhE,EAAK0hE,UACL4kB,EAAcG,WACdH,EAAcI,aACdJ,EAAcK,cACdtjB,WAEJ,IAAMhjE,EAAkB,MAAR7C,EAAeiC,EAAYjC,EAAOiC,GAAY,EAAA89D,EAAAA,qBAAoBzpE,GAClF,MAAO,IACFA,KACY,MAAXuyF,EAAkB,CAAErmF,MAAM,EAAA4mF,EAAAA,2BAA0BP,IAAa,CAAC,EACtE5mF,YACAe,UAAW,CAAC,CAACf,EAAWY,IACxBA,UACAd,GAAI,IACCzL,EAASyL,GACZsnF,eAAW1hH,GAGjB,E,2BA8nCO,SACL0S,EACA8/B,EACA5R,EACAjP,IAEA,EAAAtD,EAAAA,aACE3b,EACA,CAACigC,GAAoBH,GAAY/2C,EAAE,WAAWlB,EAAEqmC,GAAYnlC,EAAE,YAAYA,EAAE,aAAa8yB,OAAOoD,IAChG,mBAEJ,E,0BAzIO,SACLjf,EACAub,EACAvoB,EACAi9B,EACA6P,EACAC,EACA7R,EACA+gF,GAKA,IAAMC,GAAY,EAAAC,EAAAA,sCAAqCn8G,EAAS+sC,EAAcD,GACxEsvE,EAAiBC,GAAuCp/E,EAAkB8P,EAAcxkB,IAC9F,EAAAI,EAAAA,aACE3b,EACA,CACEigC,GAAoBH,GACjB/2C,EAAE,WACFlB,EAAEqmC,GACFoH,aAAc5W,IACbA,EAAQ4wF,GAA0B5wF,EAAOqhB,EAAcxkB,EAAU2zF,EAAWE,GACrE,IACF1wF,EACH9f,SAAUmhC,KACNkvE,EAA8B,CAAC,EAAI,CAAEnwF,uBAAmBxxB,GAC5Dm/G,SAAS,MAIjB,kBAEJ,E,yBAxTO,SACLloF,EACAhJ,EACAgC,EACAtB,EACAjlB,EACA2tB,EACAC,EACA2qF,EACA1qF,GAEA,IAAM3sB,EAAMq3G,GAAUt3G,KAAKC,MAC3B,GAA2B,MAAvB+jB,EAASoS,WACX,OAAOpS,EAET,IAAMjZ,EAAUwsG,GAA2BvzF,EAAU/jB,GAC/Cu3G,EAAMzsG,EAAQ6qB,SACpB,GAAW,MAAP4hF,EAAa,CACf,IAAMviH,EAAM8V,EAAQyb,QAAQgxF,EAAIvhF,aAAaiC,KAAKs/E,EAAIhgF,UAGtD,GAAqB,MAAjBviC,GAAK2gC,WAAqB3gC,EAAIo6F,oBAAsBpvF,EAAMu3G,EAAIzqF,WAA4B,IAAf93B,EAAI2gC,SAAiB,CAClG,IAAM+U,GAAkB,EAAA8sE,EAAAA,sBAAqBxiH,EAAKuiH,EAAIzwD,OAAS9xD,EAAI2gC,SACnE,OAAOrJ,GACLD,EACAhJ,EACAgC,EACAva,EACA,CACEjN,KAAM,oBACNm4B,WAAYuhF,EAAIvhF,WAChBuB,SAAUggF,EAAIhgF,SACdh3B,KAAM,UACNksB,kBACAC,cACA2L,uBAAuB,EACvBC,YAAY,EACZ3L,aAAcA,IAAgB,EAC9B+d,mBAEF5rC,EAEJ,CAEA,OAAOgM,CACT,CACA,GACmB,MAAjBA,EAAQy1B,OACc,MAAtBz1B,EAAQ01B,YACmB,MAA3B11B,EAAQmrB,iBACiB,MAAzBnrB,EAAQ6uC,cACR,CACA,IAAM89D,EAAU3sG,EAAQyb,QAAQzb,EAAQmrB,kBAAkBgC,KAAKntB,EAAQ6uC,eACvE,GACE89D,GAAShR,MACTzmG,EAAM8K,EAAQ01B,YAA8B,IAAhB11B,EAAQy1B,OACC,MAArCm3E,GAAyB5sG,GAKzB,OAAO6sG,GACLtrF,EACAvhB,EACAuY,GACA,EACAu0F,GAAgCH,EAASp0F,GACzCvY,EAAQ01B,WAA6B,IAAhB11B,EAAQy1B,MAGnC,CACA,OAAOz1B,CACT,E,yBAnJO,SACLuhB,EACAtI,EACAV,EACAvkB,EACA6tB,GAEA,IAAM4qF,EAAMxzF,EAAS4R,SAErB,GAAW,MAAP4hF,EACF,OAAoC,MAA7BxzF,EAAS8R,iBAA2B,IAAK9R,EAAU8R,sBAAkBzgC,GAAc2uB,EAE5F,IAAIsL,EAA8B,IAAKtL,EAAU4R,cAAUvgC,EAAWygC,sBAAkBzgC,GAClFJ,EAAMq6B,EAAY9I,QAAQgxF,EAAIvhF,aAAaiC,KAAKs/E,EAAIhgF,UAc1D,OAZK5K,GAAgB33B,GAAKkjC,aAA+B,MAAhBljC,EAAI2gC,UAA8C,MAA1BtG,EAAY8G,aAC3E9G,EAAcgnF,EACZhqF,EACAgD,EACAtvB,KAAKC,MACL,UACAu3G,EAAIvhF,WACJuhF,EAAIhgF,SACJlU,EACAvkB,IAGGuwB,CACT,E,2NAkUO,SAA6B7I,GAClC,OAAOA,EAAMyR,KAAKnlB,KAAM9d,GAA+B,MAAtBA,EAAIojE,eAAoC,MAAXpjE,EAAI+5F,KAAc,EAAAlnC,EAAAA,cAAa7yD,EAAIojE,gBACnG,E,6BAhJO,SAAoCtwD,EAAqBkuB,EAAoBwkC,IAClF,EAAA5pB,EAAAA,gBAAe9oC,EAAU,EAAC,EAAA4b,EAAAA,MAAqB7yB,EAAE,WAAWlB,EAAEqmC,GAAYnlC,EAAE,SAAS8yB,OAAO62C,IAAS,aACvG,E,qBA2RO,SAA4B1yD,EAAqB8/B,EAAoB4yB,IAC1E,EAAA/2C,EAAAA,aAAY3b,EAAU,CAACigC,GAAoBH,GAAY/2C,EAAE,SAAS8yB,OAAO62C,IAAS,qBACpF,E,+BAvxCO,SACLz2C,EACA8jB,GAEA,OAAO9jB,EAASwC,QAAQonB,KAAMnnB,GAAUA,EAAM9f,WAAamhC,EAC7D,E,yBA+8DO,SACLxb,EACAxxB,EACAkpB,EACA8L,GAEA,IAAMxM,EAAWxoB,EAAQwoB,SACnBw0F,EAAeh9G,EAAQspB,SAAS04B,UAAWhsD,GAAMA,EAAEmJ,KAAO+pB,EAAS9kB,WACnEsD,EAAUwhB,EAAS9kB,YAAc88D,EAAAA,gBAAiB,EAAAkqC,EAAAA,8BAA+BprG,EAAQspB,SAAS0zF,GAClG9/E,EAAmBx1B,GAAU,EAAA4iB,EAAAA,kBAAiB5iB,EAAS8gB,QAAYjuB,EACzEo7B,EAAmBnE,EAAStI,GAC5B,IAOI+zF,EAPEvoF,GAAgB,EAAAwoF,EAAAA,0BACpBh0F,EACAlpB,EAAQwoB,SACRU,EAASqB,IACT2S,EACAl9B,EAAQwqB,OAMRyyF,EAHGhoF,EAAmB/L,GAGT,CAACwL,KAAkB10B,EAAQC,SAF3BD,EAAQC,QAAQ0B,IAAK2zB,GAAOA,EAAEn2B,KAAO+pB,EAAS/pB,GAAKu1B,EAAgBY,GAIlF,IAAMpK,EAAelrB,EAAQwoB,SAAS0C,aACtC9pB,EACE6zB,EAAmB/L,IAAwB,MAAXxhB,GAC5B,EAAAy1G,EAAAA,gCAA+Bz1G,EAASwhB,EAAUlpB,EAAQwqB,MAAOhC,GACjE,CAAE9gB,UAASwjB,gBAHAjB,EAAU7oB,EAAnBsG,QAAmCyjB,EAAe/pB,EAA7B8pB,aAIvBrB,EAA4B,MAAdI,GAAqB,EAAAmzF,EAAAA,IAAGp9G,EAAQspB,UAAUx0B,EAAEkoH,GAAc7iH,IAAI8vB,GAAcjqB,EAAQspB,SAClG+zF,GAA0B,EAAAC,EAAAA,SAAUt9G,EAAQwoB,SAAS0C,aAAcC,GACzE,MAAO,IACFnrB,EACHkpB,SAAU+L,EAAmB/L,GAAY,GAAKlpB,EAAQkpB,SACtDjpB,QAASg9G,EACTtwF,gBAAiBsI,EAAmB/L,IAChC,EAAAqM,EAAAA,oBAAmBv1B,EAAQ2sB,gBAAiB,CAC1CxtB,GAAIu1B,EAAcv1B,GAClBq2B,QAAS,SACTR,aACAS,QAASf,EAAce,SAAWvwB,KAAKC,QAEzCnF,EAAQ2sB,gBACZrD,SAAUO,EACVrB,SAAU,IACLxoB,EAAQwoB,SACX0C,aAAcmyF,GAGpB,E,iCA9DO,SAAwCpwG,IAC7C,EAAA8oC,EAAAA,gBACE9oC,EACA,EACE,EAAA4b,EAAAA,MACGiB,GAAG,KAAM,CAAC,GACV9zB,EAAE,yBACFusC,aAAcpM,IAAOA,IAE1B,2BAEJ,E,wGAx5DO,SACLjN,GAEA,IAAMmgF,EAASkU,EAA2Br0F,EAASwC,SAC/Cq0B,EAAQ,EACZ,OAAO,EAAAy9D,EAAAA,4BAA2BnU,GAAQl3E,OAAiD,CAACC,GAAO,CAAEmzE,MAEnGnzE,EADcqrF,EAAwB19D,EAAQ09D,EAAwBtpH,SACxDoxG,EACdxlD,GAAS,EACF3tB,GACN,CAAC,EACN,E,8BAsFO,SAAqCvrB,GAC1C,OAAOA,EAAM7G,QAAQkpB,WAAW,EAClC,E,4HAoyBO,SAAsCkU,GAC3C,OAAOA,EAAKnlB,KAAM9d,GAAuB,MAAfA,EAAI03D,QAChC,E,2BANO,SAAkCz0B,GACvC,OAAOA,EAAKnlB,KAAM9d,GAAmB,MAAXA,EAAI+5F,IAChC,E,yFAvoCO,SACLxoE,EACAC,GAEA,IAAMu9E,EAA+Bv9E,EAAMu9E,SAC3C,GAAgB,MAAZA,EAAJ,CAGA,IAAMwU,EAAiBH,EAA2B7xF,GAC5CiyF,EAAiCD,IAAiBxU,IAAa,GACrE,KAAIyU,EAAcxpH,QAAU,GAA5B,CAGA,IAAMypH,EAAgBD,GAAe37D,UAAW5tD,GAAMA,EAAE+K,KAAOwsB,EAAOxsB,IACtE,KAAqB,MAAjBy+G,GAAyBA,EAAgB,GAG7C,OAAOD,GAAeC,EAAgB,GAAKD,EAAcxpH,OALzD,CALA,CAWF,E,qDAqVO,SAA8B0S,GAEnC,OAAO+tB,GAAyB/tB,EADb+zB,EAAuB/zB,GAE5C,E,sHA3FO,SAAqC6kB,GAC1C,IAAM29E,EAASkU,EAA2B7xF,GACtCq0B,EAAQ,EACZ,OAAO,EAAAy9D,EAAAA,4BAA2BnU,GAAQl3E,OAAwC,CAACC,GAAO82E,EAAU3D,MAClG,IAAMh0F,EAAQksG,EAAwB19D,EAAQ09D,EAAwBtpH,QAOtE,OAJIoxG,EAAMpxG,OAAS,IACjBi+B,EAAK82E,GAAY33F,GAEnBwuC,GAAS,EACF3tB,GACN,CAAC,EACN,E,iFA8qCO,SAAuDlJ,EAA0BxyB,GACtF,OAAOwyB,EAASwC,QAAQzT,KACrB0T,GAAUA,EAAMI,oBAAsBr1B,IAAQi1B,EAAM+tF,SAAWC,GAA0BhuF,GAE9F,E,sFAvuCO,SAA4BkyF,EAA4BC,GAC7D,OAAiB,MAAbD,GAAkC,MAAbC,GAED,MAAbD,GAAkC,MAAbC,IAER,MAAbD,GAAkC,MAAbC,MAGb,EAAA5zF,EAAAA,qBAAoB2zF,EAAYC,EAGrD,E,8JAnCO,SAAsC50F,GAC3C,OAAOA,EAASwC,QAAQtH,MAAOuH,GAAUoyF,EAAwBpyF,GACnE,E,kEAMO,SAAkCzC,GACvC,OAAOA,EAASwC,QAAQtH,MAAOuH,IAAU,EAAAqyF,EAAAA,cAAaryF,EAAMyR,MAC9D,E,8BA+zBO,SAAqClU,EAA0B/jB,GACpE,GAA2B,MAAvB+jB,EAASoS,WACX,OAAO,EAET,IAAM2W,EAAW/oB,EAAS8R,iBAC1B,GAAyB,MAArB9R,EAAS4R,UAAgC,MAAZmX,EAC/B,OAAO9sC,EAAM8sC,EAAShgB,WAAiC,IAApBggB,EAASA,SAE9C,IAAMyqE,EAAMxzF,EAAS4R,SACrB,GAAW,MAAP4hF,EAAa,CACf,IAAMviH,EAAM+uB,EAASwC,QAAQgxF,EAAIvhF,aAAaiC,KAAKs/E,EAAIhgF,UAGvD,QAA2B,MAAjBviC,GAAK2gC,UAAqB3gC,EAAIo6F,sBAAsBpvF,EAAMu3G,EAAIzqF,WAA4B,IAAf93B,EAAI2gC,UAC3F,CACA,GACoB,MAAlB5R,EAASwc,OACc,MAAvBxc,EAASyc,YACmB,MAA5Bzc,EAASkS,iBACiB,MAA1BlS,EAAS41B,cACT,CACA,IAAM89D,EAAU1zF,EAASwC,QAAQxC,EAASkS,kBAAkBgC,KAAKlU,EAAS41B,eAC1E,SACE89D,GAAShR,MACTzmG,EAAM+jB,EAASyc,YAA+B,IAAjBzc,EAASwc,OACA,MAAtCm3E,GAAyB3zF,GAE7B,CACA,OAAO,CACT,E,uOAqUO,SACLA,EACA+0F,EACAC,GAEA,IAAMxyF,EAAUxC,EAASwC,QAAQ/pB,IAAKgqB,GACpCA,EAAMI,oBAAsBkyF,GAAWtyF,EAAM+tF,QAAoD/tF,EAA1C,IAAKA,EAAOI,kBAAmBmyF,IAExF,MAAO,IAAKh1F,EAAUwC,UACxB,E,sEA98BO,SACLmyF,EACAhyF,EACAtB,EACA7iB,EACA8gB,EACAgC,GAEA,IAAMyzE,GAAa,EAAAiK,EAAAA,uBAAsBxgG,EAAS6iB,GAClD,IAAK0zE,EACH,OAAO4f,EAET,IAAMzU,GAAe,EAAAlL,EAAAA,oCAAmCD,GAClDkgB,EAAmBtyF,GACrB,EAAAC,EAAAA,yBAAwBD,EAAmBlqB,IAAKxC,GAAOiqG,EAAat2D,KAAM1+C,GAAMA,EAAEsC,MAAQyI,KAC1FiqG,EAEJ,MAAO,IACFyU,EACHnyF,QAASmyF,EAAUnyF,QAAQ/pB,IAAKgqB,IAC9B,IAAMiG,EACuB,MAA3BjG,EAAMI,kBAA4BoyF,EAAiBrrE,KAAM1+C,GAAMA,EAAEsC,MAAQi1B,EAAMI,wBAAqBxxB,EACtG,IAAKq3B,EACH,OAAOjG,EAET,IACE,OAAOogF,GACLpgF,EACAu+E,GAAoB2T,GACpBjsF,EACAlqB,EAAQ61B,QACP,EACD/U,EACAgC,EAEJ,CAAE,MAAOvnB,GACP,IAAM7O,EAAI6O,EAGV,OAFAgzB,QAAQhzB,MAAM7O,IACd,EAAAsgB,EAAAA,cAAa,wDAAwDkd,EAAgBqqD,aAAa7nF,EAAEoQ,WAC7FmnB,CACT,IAGN,E,qKAzGO,SAA8B9kB,EAAeqiB,GAClD,OAAoB,IAAhBA,EAAS/pB,IACJ,EAAAi+G,EAAAA,IAAGv2G,GAAO7Q,EAAE,WAAWA,EAAE,YAAYmE,IAAI,CAAC+uB,KAE1C,EAAAk0F,EAAAA,IAAGv2G,GAAOijB,GAAG,YAAY9zB,EAAEkzB,EAAS/pB,IAAIhF,IAAI+uB,EAEvD,E,yBA/LO,SAAgCA,EAA0BysB,GAC/D,OAA2B,MAAvBzsB,EAASyc,WACJzc,EAEF,IACFA,EACHwc,MAAO5pB,KAAKw0C,IAAI,EAAG3a,GAEvB,E,0BA0nDO,SACLnkB,EACAhJ,EACAgC,EACAtB,EACAiS,EACAuB,EACAh3B,EACA04G,EACA96F,EAMAymF,GAGA,IADA,IAAI95F,EAAUiZ,EACLm1F,EAAO,EAAGA,EAAO,EAAGA,GAAQ,EAAG,CACtC,IAAMC,EAAQC,GAA2BtuG,GACzC,GAAa,MAATquG,GAAiBA,EAAMnjF,aAAeA,GAAcmjF,EAAM5hF,WAAaA,EACzE,OAAOzsB,EAET,GAAoB,aAAhBquG,EAAMA,MAAV,CAIA,IAAME,EAAmB,WAAT94G,EAAoB,aAAe,OAC7CvL,EAAM8V,EAAQyb,QAAQyP,KAAcqjF,GAAS9hF,GACnD,GAAW,MAAPviC,EACF,OAAO8V,EAET,IAAMwuG,EAA0B,SAAfH,EAAMryD,KAAkBmyD,EAAU99F,KAAO89F,EAAUp9F,MACpE/Q,EAAUwhB,GACRD,EACAhJ,EACAgC,EACAva,EACA,CACEjN,KAAM,oBACNm4B,aACAuB,WACAh3B,OACAksB,gBAAiBtO,EAAIsO,gBACrBC,YAAavO,EAAIuO,YACjB2L,uBAAuB,EACvBC,YAAY,EACZ3L,aAAcxO,EAAIwO,eAAgB,EAClC+d,gBAAiB4uE,IAAY,EAAA9B,EAAAA,sBAAqBxiH,EAAKmkH,EAAMryD,OAAS9xD,EAAI2gC,UAE5ExX,EAAIrf,aACJ8lG,GAEF,IAAMjpG,EAAQmP,EAAQyb,QAAQyP,KAAcqjF,GAAS9hF,GACrD,GAAa,MAAT57B,GAA4D,OAA3C,EAAA67G,EAAAA,sBAAqB77G,EAAOw9G,EAAMryD,MACrD,OAAOh8C,CA7BT,MAFEA,EAAU+hB,GAA2B/hB,EAASquG,EAAMrsF,UAiCxD,CACA,OAAOhiB,CACT,E,6DAvoDO,SAAiCiZ,EAA0BkM,EAAcxC,GAC9E,MAAO,IACF1J,EACHyL,GAAI,IACCzL,EAASyL,GACZsnF,UAAW,CAAE7mF,OAAMxC,SAGzB,E,wEA+CO,SACL8sB,EACAvgD,GAEA,OAAO,EAAAqsB,EAAAA,kBAAiBk0B,GAAYvtB,OAAmD,CAACC,EAAMiW,KAC5F,IAAMryC,EAAI0pD,EAAWrX,GAIrB,OAHS,MAALryC,GAAaA,EAAEmJ,KAAOA,IACxBizB,EAAKiW,GAAKryC,GAELo8B,GACN,CAAC,EACN,E,+PA3NO,SACLZ,EACAtI,EACAxhB,EACAiuC,EACAhQ,EACA+4E,EACAC,EACA/oE,EACAptB,EACAvkB,GAGA,GADqB0xC,EAAW75B,KAAKC,OAAO7W,KAAKC,MAAQwgC,GAAc,KACpD,EAAG,CACpB,IAAMnR,EAAcgnF,EAClBhqF,EACAtI,EACAA,EAASyc,YAAczgC,KAAKC,MAC5B+jB,EAAS0c,WAAa,UACtB1c,EAASkS,iBAAmB,EAC5BlS,EAAS41B,eAAiB,EAC1Bt2B,EACAvkB,EACA0xC,GACA,GAeF,OAbKC,IACH,EAAA+I,EAAAA,gDACEntB,EACA9pB,EACAwhB,EACAV,EACAvkB,EACAy6G,EACAC,EACAhpE,EACAzsB,EAASyc,YAAczgC,KAAKC,OAGzBqvB,CACT,CACEhD,EAAQz7B,KAAK,CAAEiN,KAAM,cACrB,IAAMwxB,EAAc,IACftL,EACHwc,MAAO5pB,KAAKw0C,IAAI,EAAG3a,GACnBhhB,GAAI,IACCzL,EAASyL,GACZiqF,iCAA6BrkH,IAgBjC,OAbKq7C,IACH,EAAA+I,EAAAA,gDACEntB,EACA9pB,EACAwhB,EACAV,EACAvkB,EACAy6G,EACAC,EACA7iG,KAAKw0C,IAAI,EAAG3a,GACZzsB,EAASyc,YAAczgC,KAAKC,OAGzBqvB,CAEX,E,iGAtqBArG,EAAA1zB,EAAA,OASA08C,EAAA18C,EAAA,OACAokH,EAAApkH,EAAA,OAwBAqkH,EAAArkH,EAAA,OACAqzB,EAAArzB,EAAA,OACA6yB,EAAA7yB,EAAA,OACAozB,EAAApzB,EAAA,OAEAswG,EAAAtwG,EAAA,OAEAw7C,EAAAx7C,EAAA,OAcA8yB,EAAA9yB,EAAA,OAqBAuzB,EAAAvzB,EAAA,MAEAskH,EAAAtkH,EAAA,MACA4zB,EAAA5zB,EAAA,OAOA6zB,EAAA7zB,EAAA,OACAE,EAAAF,EAAA,OAEA8zB,EAAA9zB,EAAA,OAGA+nE,EAAA/nE,EAAA,OASAgT,EAAAhT,EAAA,OACAywG,EAAAzwG,EAAA,OACA+zB,EAAA/zB,EAAA,OAEAw9C,EAAAx9C,EAAA,OAIAo9F,EAAAp9F,EAAA,OAGA6uD,EAAA7uD,EAAA,OACAukH,EAAAvkH,EAAA,OAIAwkH,EAAAr6F,EAAAnqB,EAAA,QACA8T,EAAA9T,EAAA,OAA+C+hB,EAAA,iBAYxC,SAASkwF,EACd/gF,EACAiG,GAEA,MAAO,CAAEstF,cAAevzF,EAAM9f,SAAU6tD,mBAAoB9nC,EAAgBl7B,IAC9E,CAgBA,SAASyoH,EAAcxxD,EAA6ByxD,GAClD,OAAW,MAAPzxD,EACK,EAEa,iBAARA,EAAmByxD,EAAQzxD,IAAO,EAAAiF,EAAAA,iBAAgBwsD,EAAQzxD,EAAI34D,OAAQ24D,EAAIjD,KAC1F,CAEA,SAAS20D,EAAclpF,GACrB,MAAoB,iBAANA,IAAkB,EAAA42B,EAAAA,WAAU52B,KAAM,EAAA62B,EAAAA,cAAa72B,EAC/D,CAEA,SAASmpF,EAAkBlgH,GACzB,IAAM4E,EAAuB,GAC7B,IAAK,IAAMu7G,KAAOngH,EAChB,GAAI9K,MAAME,QAAQ+qH,GAChB,IAAK,IAAMp2C,KAAQo2C,EACbF,EAAcl2C,IAChBnlE,EAAOjO,KAAKozE,QAGPk2C,EAAcE,IACvBv7G,EAAOjO,KAAKwpH,GAGhB,OAAOv7G,CACT,CAqCO,SAASw7G,EACdnwE,EACA7mB,EACA3c,EACA+E,GAEA,IAAM2iD,EAAM1nD,GAAW,EAAAyqF,EAAAA,gBAAezqF,EAAU2c,IAAY,EAAAqC,EAAAA,cAAa,EAAG,MAC5E,MAAO,CACLhf,SAAUA,GAAW,EAAAmoF,EAAAA,oBAAkB,EAAAlxB,EAAAA,cAAaj3D,EAAU2c,EAASiR,WAAYjR,EAAU5X,GAAS,GACtG2Z,IAAK8kB,EAAQ9kB,IACbupC,KAAMzkB,EAAQykB,MAAQ,EACtB+G,UAAWxrB,EAAQwrB,WAAaxrB,EAAQ9kB,IACxCkoC,iBAAkB,GAClBd,gBAAiB,GACjBL,QAAS,GACTM,KAAM,GACNC,QAAS,GACTC,IAAK,GACLI,OAAQ,GACRC,QAAS,GACTC,WAAY,GACZC,cAAe,GACfC,kBAAmB,GACnBI,aAAc,GACdr1B,YAAa,GACbvH,OAAQ,GACRm8B,QAAS,GACT+I,iBAAkB,GAClBC,qBAAsB,GACtBlJ,EAAG,GACH99D,EAAG,GACHs+D,GAAI,GACJC,GAAI,GACJR,GAAI,GACJmJ,oBAAqB,EACrB1J,aAAc,EACd2J,sBAAuB,EACvBzI,GAAI,EACJoB,kBAAmB,EACnBE,uBAAwB,EACxBE,iBAAkB,EAClB/iB,YAAY,EAAAvmB,EAAAA,cAAa,EAAGrC,EAASxc,OACrC0wB,SAAU,EACV62B,MAEJ,CAEO,SAASg5C,EACdl9D,EACA1jB,EACAnD,EACA2yC,EACA/pB,EACA1U,EACAq3B,EACAI,EACAF,EACArjD,GAEA,IAAM25C,EAAWi1D,EAAmCnwE,EAAS7mB,EAAUmD,EAAM9f,SAAU+E,GACvF,IAAK,IAAMzW,KAAOwxB,EAAMyR,KACtBmtB,EAAS+G,QAAQv7D,KAAKoE,EAAIswB,QAC1B8/B,EAASoH,gBAAgB57D,KAAKoE,EAAIojE,iBAAkB,EAAA1yC,EAAAA,cAAa,EAAGrC,EAASxc,QAC7Eu+C,EAASqH,KAAK77D,KAAKoE,EAAIy3D,MACvBrH,EAASsH,QAAQ97D,KAAKoE,EAAI03D,SAC1BtH,EAAS8H,cAAct8D,KAAKoE,EAAIk4D,eAChC9H,EAAS+H,kBAAkBv8D,KAAKoE,EAAIm4D,mBACpC/H,EAASmI,aAAa38D,KAAKoE,EAAIg6F,cAC/B5pC,EAASkI,iBAAiB18D,KAAKoE,EAAI4jE,iBACnCxT,EAASuH,IAAI/7D,KAAKoE,EAAI+5F,KACtB3pC,EAAS2H,OAAOn8D,KAAKoE,EAAI85F,QAAU,OAAI15F,GACvCgwD,EAAS4H,QAAQp8D,KAAKoE,EAAIi6F,OAAS,OAAI75F,GACvCgwD,EAAS6H,WAAWr8D,KAAKoE,EAAIk6F,UAAY,OAAI95F,GAC7CgwD,EAASz0B,OAAO//B,KAAKoE,EAAIurC,OACzB6kB,EAAS0H,QAAQl8D,KAAKoE,EAAI2gC,UAC1ByvB,EAASyQ,iBAAiBjlE,KAAKoE,EAAIq6F,mBACnCjqC,EAAS0Q,qBAAqBllE,KAAKoE,EAAIs6F,uBACvClqC,EAASltB,YAAYtnC,KAAKoE,EAAIkjC,YAAc,EAAI,GAgBlD,OAdAktB,EAASwH,EAAIxH,EAAS+G,QACtB/G,EAASt2D,EAAIs2D,EAASqH,KACtBrH,EAASgI,GAAKhI,EAAS8H,cACvB9H,EAASiI,GAAKjI,EAASkI,iBACvBlI,EAASyH,GAAKzH,EAASsH,QACvBtH,EAASoI,GAAKhnC,EAAMyR,KAAKjpC,OACzBo2D,EAAS4Q,oBAAsBA,EAC/B5Q,EAASkH,aAAe9lC,EAAMyR,KAAKjpC,OACnCo2D,EAAS6Q,sBAAwBzvC,EAAMyR,KAAKnlC,OAAQ86C,GAAMA,EAAE1V,aAAalpC,OACzEo2D,EAAS7tB,SAAWA,GAAY,EAChC6tB,EAASwJ,kBAAoBA,GAAqB,EAClDxJ,EAAS0J,uBAAyBA,GAA0B,EAC5D1J,EAAS4J,iBAAmBA,GAAoB,EAChD5J,EAASnZ,WAAaA,IAAc,EAAAvmB,EAAAA,cAAa,EAAGrC,EAASxc,OACtDu+C,CACT,CAEO,SAASkiD,EAA+BjkF,GAC7C,SAASi3F,EAASzqH,GAChB,OAAO,EAAA+3D,EAAAA,WAAU/3D,GAASA,GAAQ,EAAA61B,EAAAA,cAAa71B,EAAOwzB,EAASxc,MACjE,CAyFA,MAjE8B,CAC5BynD,YAAaA,EAAE9F,GAAMnrB,KACnB,IAAMkoB,GAAO,EAAAg1D,EAAAA,kCAAiCl3F,EAAUga,GAASwK,cACjE,OAAO,EAAA2yE,EAAAA,cAAaF,EAAS9xD,GAAMnlC,EAAUkiC,GAAQliC,EAASxc,MAAOw2B,GAASwK,eAEhF4uB,mBAAoBA,EAAEjO,GAAMnrB,KAC1B,IAAMkoB,GAAO,EAAAg1D,EAAAA,kCAAiCl3F,EAAUga,GAASwK,cACjE,OAAO,EAAAskE,EAAAA,uBAAsBmO,EAAS9xD,GAAMnlC,EAAUkiC,GAAQliC,EAASxc,MAAOw2B,GAASwK,eAEzF6uB,qBAAsBA,EAAEpxC,EAAQmnC,MACvB,EAAAguD,EAAAA,uBAAsBH,EAASh1F,GAASmnC,GAAQ,EAAGppC,GAE5DszC,aAAcA,EAAErxC,EAAQmnC,MACf,EAAAkhC,EAAAA,qBAAoB2sB,EAASh1F,GAASmnC,GAE/CmK,cAAeA,EAAE8jD,EAASC,MACxB,IAAMluD,GAAO,EAAA7E,EAAAA,WAAU8yD,GAAWA,EAAQ7qH,MAAQ6qH,EAC5C3rB,EAAgB,MAAV4rB,EAAiB,IAAK,EAAA/yD,EAAAA,WAAU+yD,GAAUA,EAAO9qH,MAAQ8qH,EACrE,OAAO,EAAAC,EAAAA,sBAAqBnuD,EAAMsiC,IAEpCrvC,MAAOA,EAAE8I,KAASwxD,EAAcxxD,EAAK7xC,KAAK+oC,OAC1CmX,KAAMA,EAAErO,KAASwxD,EAAcxxD,EAAK7xC,KAAKkgD,MACzCjgD,MAAOA,EAAE4xC,KAASwxD,EAAcxxD,EAAK7xC,KAAKC,OAC1CkgD,IAAM78D,GArLV,SAAaA,GACX,IAAM6C,EAAOq9G,EAAkBlgH,GAC/B,OAAoB,IAAhB6C,EAAK9N,OACA,EAEF8N,EAAKkwB,OAAmB,CAAC00C,EAAK3yE,KAAM,EAAA8kE,EAAAA,gBAAUz+D,EAAWssE,EAAK3yE,EAAG,CAACi3E,EAAG+E,IAAM/E,EAAI+E,GAAI,EAC5F,CA+KmBjU,CAAI78D,GACnBixD,IAAMjxD,GA9KV,SAAaA,GACX,IAAM6C,EAAOq9G,EAAkBlgH,GAC/B,OAAoB,IAAhB6C,EAAK9N,OACA,EAEF8N,EAAKkwB,OAAmB,CAAC00C,EAAK3yE,KAAO,EAAA0hE,EAAAA,WAAU1hE,EAAG2yE,GAAO3yE,EAAI2yE,EAAM5kE,EAAK,GACjF,CAwKmBouD,CAAIjxD,GACnBkxD,IAAMlxD,GAvKV,SAAaA,GACX,IAAM6C,EAAOq9G,EAAkBlgH,GAC/B,OAAoB,IAAhB6C,EAAK9N,OACA,EAEF8N,EAAKkwB,OAAmB,CAAC00C,EAAK3yE,KAAO,EAAA0hE,EAAAA,WAAUiR,EAAK3yE,GAAKA,EAAI2yE,EAAM5kE,EAAK,GACjF,CAiKmBquD,CAAIlxD,GACnBo9D,UAAWA,EAAEwjD,GAAOx9E,IAhDtB,SAAmBw9E,EAAsCx9E,GACvD,GAAoB,iBAATw9E,EAAmB,CAC5B,IAAMv1F,GAAS,EAAAI,EAAAA,cAAam1F,EAAMx9E,EAAQkoB,MAC1C,OAAO,EAAAu1D,EAAAA,kBAAiBx1F,EAAQjC,EAAUga,EAAQwK,aACpD,CAAO,OAAI,EAAAggB,EAAAA,cAAagzD,IACf,EAAA9pD,EAAAA,iBAAgB8pD,EAAKhrH,MAAQ,IAE7B,EAAAirH,EAAAA,kBAAiBD,EAAMx3F,EAAUga,EAAQwK,aAEpD,CAuCkCwvB,CAAUwjD,EAAMx9E,GAChDi6B,UAAWA,EAAEujD,GAAOx9E,IAtCtB,SAAmBw9E,EAAsCx9E,GACvD,GAAoB,iBAATw9E,EAAmB,CAC5B,IAAMv1F,GAAS,EAAAI,EAAAA,cAAam1F,EAAMx9E,EAAQkoB,MAC1C,OAAO,EAAAw1D,EAAAA,kBAAiBz1F,EAAQjC,EAAUga,EAAQwK,aACpD,CAAO,OAAI,EAAAggB,EAAAA,cAAagzD,IACf,EAAA9pD,EAAAA,iBAAgB8pD,EAAKhrH,MAAQ,IAE7B,EAAAkrH,EAAAA,kBAAiBF,EAAMx3F,EAAUga,EAAQwK,aAEpD,CA6BkCyvB,CAAUujD,EAAMx9E,GAChD25B,UAAWA,EAAEjoE,EAAG4kE,KAlKpB,SAAmB5kE,EAA4C4kE,GAC7D,IAAK,IAAIhkE,EAAI,EAAGA,EAAIgnB,KAAKw0C,IAAIp8D,EAAEC,OAAQ2kE,EAAE3kE,QAASW,IAAK,CACrD,IAAMqrH,EAAOjsH,EAAEY,GACTsrH,EAAOtnD,EAAEhkE,GACf,GAAY,MAARqrH,GAAwB,MAARC,KAAiB,EAAAr1F,EAAAA,WAAUo1F,EAAM,KAAM,EAAAvqD,EAAAA,WAAUuqD,EAAMC,GACzE,OAAO,CAEX,CACA,OAAO,CACT,CAyJ2BjkD,CAAUjoE,EAAG4kE,GACpCsD,MAAOA,CAACh9D,EAAMojC,KAEZ,IAAM69E,EAAiC,IAAIjhH,EAAK6C,QAAQN,IAAK49G,GAAQA,GAAO,GAG5E,OAFA/8E,EAAQu6B,OAASv6B,EAAQu6B,QAAU,GACnCv6B,EAAQu6B,OAAOhnE,MAAK,EAAA8mE,EAAAA,6BAA4BwjD,IACzCA,EAAS,IAAM,GAExB/jD,kBAAmBA,EAAEjD,GAAU72B,IACK,MAA9BA,EAAQk3B,qBAGL,EAAA4mD,EAAAA,2CAA0CjnD,EAAS72B,EAAQk3B,mBAAoBlxC,EAASiR,WAEjG8iC,WAAYA,EAAElD,GAAU72B,IACO,MAAzBA,EAAQ08E,gBAGL,EAAAqB,EAAAA,oCAAmClnD,EAAS72B,EAAQ08E,cAAe12F,EAASiR,WAErF2D,KAAMA,EAAE/lC,EAAMuyD,EAAIiI,EAASD,EAAMqiC,EAASxpE,EAAQib,EAAOwuD,EAAKE,GAAS5xD,EAAS+nB,KAC9E,IAAK,IAAIz1D,EAAI,EAAGA,EAAIy1D,EAASkH,aAAc38D,IACzC,GAAIA,GAAKuC,EAAO,GAAKvC,EAAI80D,EAAI,CAC3B,IAAM8uD,GAAc,EAAAllD,EAAAA,wBAAuBjJ,EAASgJ,IAAK9oC,EAAQ+X,EAAQkoB,MACzEH,EAASsH,QAAQ/8D,GAAK88D,IAASC,EAAUA,OAAUt3D,EACnDgwD,EAASqH,KAAK98D,GAAK88D,EACnBrH,EAASoH,gBAAgB78D,GAAK4jH,EAC9BnuD,EAAS+G,QAAQx8D,IAAK,EAAA6qH,EAAAA,cAAajH,EAAalwF,EAAUga,EAAQkoB,KAAMloB,EAAQwK,cAChFud,EAASuH,IAAIh9D,GAAa,IAARo/F,EAAYA,OAAM35F,EACpCgwD,EAAS2H,OAAOp9D,GAAiB,IAAZm/F,EAAgB,EAAI,EACzC1pC,EAAS4H,QAAQr9D,GAAgB,IAAXs/F,EAAe,EAAI,EACzC7pC,EAASz0B,OAAOhhC,GAAe,IAAV4wC,EAAcA,OAAQnrC,CAC7C,CAEF,OAAOqvD,EAAKvyD,GAIlB,CAEO,SAAS49B,EAAmB/L,GACjC,OAAwB,IAAjBA,GAAU/pB,EACnB,CAEO,SAAS6mC,EACdxU,EACAtI,EACAiS,EACAz1B,EACA8iB,EACArN,EACAqlG,EACAC,GAEA,IACIC,EAAW,GACXrhH,EAAO,gBACPshH,EAAiB,GACjBC,EAAa,mBACXC,GAAkB,EAAAC,EAAAA,0BAAyB53F,EAAUiS,EAAYz1B,GACvE,GAAuB,MAAnBm7G,EAAyB,CAC3B,IAAeE,EAAyBF,EAAhCl1F,MAAuBq1F,EAASH,EAAd1mH,IACpB0R,GAAW,EAAAi3D,EAAAA,cAAai+C,EAAUl1G,SAAU2c,EAASiR,WAC3D,GAAI5tB,IACF80G,EAAiB,WACjBD,GAAW,EAAA50F,EAAAA,yBAAwB,CACjCjgB,EAASzU,KACI,MAAb4pH,EAAKpvD,KAAe,GAAGovD,EAAKpvD,OAAOovD,EAAK/sB,QAAU,IAAM,eAAY15F,EACrD,MAAfymH,EAAKv2F,QAAiB,EAAAykF,EAAAA,gBAAe8R,EAAKv2F,aAAUlwB,IACnDsH,KAAK,MACW,MAAfm/G,EAAKv2F,QAAgB,CACvB,IAAMqS,GAAmD,IAAxCikF,EAAUhkF,WAAWvkC,QAAQwoH,GACxCtqF,GAAO,EAAAuqF,EAAAA,oBAAmBD,EAAKv2F,OAAQjC,EAAUu4F,EAAUl1G,SAAUixB,GACrEokF,GAAW,EAAAluC,EAAAA,wBAAuBt8C,GACxCkqF,EAAa,kBACbvhH,EAAoB,KAAb6hH,EAAkBA,EAAW,MACtC,CAEJ,CACA1vF,EAAQz7B,KAAK,CACXiN,KAAM,aACNoyC,OAAQ,CACNj6B,WACAuK,MA7BU,8BA8BVi7F,iBACAD,WACAE,aACAvhH,OACA8hH,qBAAsB34F,EAAS24F,mBAC/BxlF,YAAanT,EAASmT,UACtBD,OAAQlT,EAASkT,OACjB8kF,eACAC,iBAGN,CAEO,SAASjF,EACdhqF,EACAtI,EACAjkB,EACAS,EACAy1B,EACAuB,EACAlU,EACAvkB,EACAyhC,EACA07E,GAEA,IAAMz1F,EAAQzC,EAASwC,QAAQyP,GACzBhhC,EAAe,WAATuL,EAAoBimB,GAAOoR,WAAWL,GAAY/Q,GAAOyR,KAAKV,GAC1E,KAAK0kF,GAAiBjnH,GAAQA,EAAIkjC,aAChC,OAAOnU,EAWT,GATa,MAATwc,GAAiBzQ,EAAmB/L,IAAsB,YAATxjB,IACnDggC,EAAQ/Z,GAAOyR,KAAKV,IAAWgJ,OAEpB,MAATA,IACFA,EACW,YAAThgC,GAAwC,MAAlBimB,EAAMu9E,UAAgD,MAA5B1gF,EAASsN,OAAOozE,SAC5D1gF,EAASsN,OAAOozE,SAChB1gF,EAASsN,OAAOpwB,SAASnL,IAE5BmrC,EACH,MAAO,IACFxc,EACHyc,gBAAYprC,EACZmrC,WAAOnrC,EACPqrC,eAAWrrC,EACX6gC,qBAAiB7gC,EACjBukD,mBAAevkD,GAGnB,GAAI0J,IAAgB,EAAA4hC,EAAAA,+BAA8B5hC,GAAe,CAI/D,IAAMo9G,EAAe37E,EAAQ5pB,KAAKC,OAAO7W,KAAKC,MAAQF,GAAa,KAC/Do8G,EAAe,EACjBr7E,EAAmCxU,EAAStI,EAAUiS,EAAYz1B,EAAM8iB,EAAU64F,EAAcp8G,EAAWygC,GAI3GlU,EAAQz7B,KAAK,CAAEiN,KAAM,aAEzB,CAUA,MAToC,IAC/BkmB,EACHyc,WAAY1gC,EACZygC,QACAE,UAAWlgC,EACX01B,gBAAiBD,EACjB2jB,cAAepiB,EACf/H,GAAI,IAAKzL,EAASyL,GAAIiqF,iCAA6BrkH,GAGvD,CAsBO,SAAS+mH,EACdp4F,EACAyC,EACAjmB,EACA67G,GAEA,IAAIlG,EAAmCnyF,GAOvC,IAJA,IAAMs4F,EAAqB,IAAIjjG,IAC3Bi4E,EAA0C7qE,EAC1C81F,GAAY,EACV/D,EAAiBH,EAA2Br0F,EAASwC,SACpC,MAAhB8qE,GAAsB,CAC3B,IAAIz2C,EAAQ72B,EAASwC,QAAQs2B,UAAW5tD,GAAc,MAARA,EAAE+K,IAAc/K,EAAE+K,KAAOq3F,GAAcr3F,KACtE,IAAX4gD,IACFA,EAAQ72B,EAASwC,QAAQs2B,UAAW5tD,GAAMA,IAAMoiG,IAElD,IAAM0S,EAA+B1S,EAAa0S,SAClD,GAAa,YAATxjG,GAAkC,MAAZwjG,GAAqBsY,EAAmBvnH,IAAIu8F,IAY/D,IAAI,EAAAkrB,EAAAA,wBAAuBlrB,EAAap5D,MAAO,CACpD,IAAImkF,EAOF,OANA,IAAMpF,EAA2B3lB,EAEjC,IADAA,EAAettE,EAASwC,SAASq0B,EAAQ,GAAK72B,EAASwC,QAAQv3B,WAC1CgoH,EACnB,MAKN,MAtBqF,CACnF,IAAMwB,EAAiCD,IAAiBxU,IAAa,GACrE,GAAIyU,EAAcxpH,OAAS,EAAG,CAC5B,IAAMypH,EAAgBD,GAAe37D,UAAW5tD,GAAMA,EAAE+K,KAAOq3F,GAAcr3F,IAC7Eq3F,EAAemnB,GAAeC,EAAgB,GAAKD,EAAcxpH,OACnE,KAAO,CACL,IAAIotH,EAGF,OAAO/qB,EAFPA,EAAettE,EAASwC,SAASq0B,EAAQ,GAAK72B,EAASwC,QAAQv3B,OAInE,CACF,CAWA,GAAoB,MAAhBqiG,EACF,OAEF,KAAK,EAAAkrB,EAAAA,wBAAuBlrB,EAAap5D,MACvC,OAAOo5D,EACGirB,GACVD,EAAmB5hG,IAAI42E,GAEzBirB,GAAY,CACd,CAEF,CAEO,SAASE,EACdz4F,EACAyC,EACAjmB,GAEA,IAAMq7G,EAAYO,EAAsBp4F,EAAUyC,EAAOjmB,GAAM,GAC/D,GAAiB,MAAbq7G,EAAmB,CACrB,IAAIhhE,EAAQ72B,EAASwC,QAAQs2B,UAAW5tD,GAAc,MAARA,EAAE+K,IAAc/K,EAAE+K,KAAO4hH,EAAU5hH,IAIjF,OAHe,IAAX4gD,IACFA,EAAQ72B,EAASwC,QAAQs2B,UAAW5tD,GAAMA,IAAM2sH,KAEhC,IAAXhhE,OAAexlD,EAAYwlD,CACpC,CAEF,CAqEO,SAASw7D,EACdryF,EACAiS,EACAz1B,GAEA,IAAKuvB,EAAmB/L,GACtB,OAAOA,EAET,IACM04F,EAAiBD,EAA2Bz4F,EADpCA,EAASwC,QAAQyP,GACoCz1B,GACnE,OAAsB,MAAlBk8G,EACK,IAAK14F,EAAUoc,kBAAmBs8E,GAEpC14F,CACT,CAEO,SAASyM,EAAmBnE,EAA0BtI,GAE3D,OADAsI,EAAQz7B,KAAK,CAAEiN,KAAM,cACd6+G,EAAuB34F,EAChC,CAEO,SAAS24F,EAAuB34F,GACrC,MAAO,IACFA,EACHyc,gBAAYprC,EACZqrC,eAAWrrC,EACXmrC,WAAOnrC,EACPukD,mBAAevkD,EACf6gC,qBAAiB7gC,EAErB,CAuBO,SAASwjH,EAAwBpyF,GACtC,OAAO,EAAAm2F,EAAAA,kBAAiBn2F,EAAMyR,KAChC,CAMO,SAASi+E,EAAmCnyF,GACjD,OAAOA,EAASwC,QAAQtH,MAAOuH,GAAUo2F,EAA8Bp2F,GACzE,CAEO,SAASo2F,EAA8Bp2F,GAC5C,OAAO,EAAA+1F,EAAAA,wBAAuB/1F,EAAMyR,KACtC,CAEO,SAAS4kF,EAA8Br2F,GAC5C,OAA2D,IAApDA,EAAMyR,KAAKnlC,OAAQ86C,IAAOA,EAAE1V,aAAalpC,MAClD,CA2BO,IAAMspH,EAAuBzpH,EAAAA,wBAAG,CAAC,MAAO,OAAQ,QAAS,UA8BzD,SAASupH,EAA2B7xF,GACzC,IAAM29E,EAAmD,CAAC,EAC1D,IAAK,IAAM19E,KAASD,EACI,MAAlBC,EAAMu9E,WACHG,EAAO19E,EAAMu9E,YAChBG,EAAO19E,EAAMu9E,UAAY,IAE3BG,EAAO19E,EAAMu9E,UAAWnzG,KAAK41B,IAGjC,OAAO09E,CACT,CA2CO,SAASzuE,EAAuB/zB,GACrC,IAAMo7G,EAAUzrH,OAAOuB,KAAM8O,EAAiBqiB,UAC3CvnB,IAAI/H,QACJ3B,OAAOc,SACV,OAAOkpH,EAAQ9tH,OAAS,EAAI8tH,EAAQ,GAAK,CAC3C,CAEO,SAAS/0E,GAAoBH,GAClC,OAAkB,MAAdA,GAAqC,IAAfA,GACjB,EAAAlkB,EAAAA,MAAa7yB,EAAE,WAAW8zB,GAAG,YAAYh1B,EAAE,IAE3C,EAAA+zB,EAAAA,MAAaiB,GAAG,YAAYA,GAAGijB,EAE1C,CAWO,SAASnY,GACd/tB,EACA1H,GAEA,OAAW,IAAPA,EACK0H,EAAM7G,QAAQkpB,WAAW,GAExBriB,EAAiBqiB,SAAS/pB,EAEtC,CAUO,SAAS4sG,GACdpgF,EACA0jB,EACAzd,EACAC,EACA6K,EACAlU,EACAgC,GAEA,IAAkB,IAAdkS,IAAoB/Q,GAAOyR,KAAKV,IAAWW,YAC7C,OAAO1R,EAET,IAAM2+B,GAAS,EAAA2mD,EAAAA,wCAAuCr/E,GACtD,IAAK04B,EACH,OAAO3+B,EAET,IAAM9f,EAAW+lB,EAAgBob,aAC3BnmC,GAAQ,EAAA46C,EAAAA,oBAAkB,EAAAigB,EAAAA,iCAAgC9vC,IAC1DmiC,GAAoB,EAAAq4C,EAAAA,0DAAyDx6E,GAC7EuiC,GAAmB,EAAAk4C,EAAAA,gDAA+Cz6E,GAClEqiC,GAAyB,EAAAq4C,EAAAA,sDAAqD16E,GAC9E24B,EAAWgiD,EACfl9D,EACA1jB,EACAnD,EACAoJ,EAAgB46E,uBAAuBz4C,IAAoB32B,KAAKjpC,QAAU,GAC1E,EAAAy2B,EAAAA,yCAAwCJ,EAAOhC,GAC/CkU,EAAW,EACXq3B,EACAI,EACAF,EACAriC,EAAgBhhB,OAEZ65C,EAA8B,CAClCzd,aAAcnhC,KACX6gG,EAA+B/gF,EAAOiG,GACzC84B,KAAMliC,EAASxc,MACf+wD,OAAQ,IAEK,IAAI6vC,EAAAA,aACjBtiD,EACAzjD,GACA,EAAA46C,EAAAA,mBAAkB5vB,GAClB04B,EACAkiD,EAA+BjkF,GAC/BA,EAASxc,MACTy+C,EACA,UAEKoiD,UACP,IAAAqV,EAAsCC,GAAuBx2F,EAAO4+B,EAAU/hC,GAArD45F,GAALF,EAAZ5sB,cAAyB,EAAA/4E,EAAA1d,SAAAqjH,EAAA1lG,IACjC,MAAO,IAAK4lG,EAAUv7G,MAAO,IAAKu7G,EAASv7G,SAAUA,GAASwuF,iBAAkB5qC,EAAUsS,OAC5F,CA+CO,SAASq+C,GACdyC,EACAjsF,EACAC,EACAsJ,EACAuB,EACAh3B,EACA8iB,EACAgC,EACAu/E,GAEA,GAAa,WAATrkG,EACF,OAAOm4G,EAET,IACIuE,EADEz2F,EAAQkyF,EAAUnyF,QAAQyP,GAEhC,IACEinF,EAAWrW,GACTpgF,EACAu+E,GAAoB2T,GACpBjsF,EACAC,EACA6K,EACAlU,EACAgC,EAEJ,CAAE,MAAOvnB,GACP,IAAM7O,EAAI6O,EACVgzB,QAAQhzB,MAAM7O,GACd,IAAMoQ,EAAU,wDAAwDotB,EAAgBqqD,aAAa7nF,EAAEoQ,UACnGulG,EACFA,EAAQvlG,IAER,EAAAkQ,EAAAA,cAAalQ,GAEf49G,EAAWz2F,CACb,CAEA,OADiB,EAAAyxF,EAAAA,IAAGS,GAAW7nH,EAAE,WAAWlB,EAAEqmC,GAAYhhC,IAAIioH,EAEhE,CAEO,SAASD,GACdE,EACA93D,EACA/hC,GAEA,IAgBM85F,GAAqB,EAAAC,EAAAA,kCAAiCh4D,EAAS8H,cAAgBp+D,GAAW,MAALA,GAAa,EAClG03B,EAAuB,IACxB02F,EACHjlF,MAAM,EAAAqkB,EAAAA,mBAAkB4gE,EAASjlF,KAAKlmC,MAAM,EAAG4kB,KAAKw0C,IAAIgyD,EAAoB/3D,EAASkH,aAAc,MAErG,IAAK,IAAM/6D,IArBE,CACX,MACA,UACA,OACA,UACA,SACA,UACA,SACA,UACA,kBACA,cAYA,IAAK,IAAI5B,EAAI,EAAGA,EAAIy1D,EAAS7zD,GAAKvC,OAAQW,GAAK,EAc7C,GAbqB,MAAjB62B,EAAMyR,KAAKtoC,KACb62B,EAAMyR,KAAKtoC,GAAK,CACd87B,MAAO,MACPzxB,IAAI,EAAAiV,EAAAA,wBAAuB,GAC3B2rC,MAAOjrD,EACPo5F,cAAc,EAAAC,EAAAA,0BAAyBxiE,EAAM9f,SAAU2c,GACvDopC,KAAM,EACNnnC,QAAQ,EAAAI,EAAAA,cAAa,EAAG,MACxB0yC,gBAAgB,EAAA1yC,EAAAA,cAAa,EAAG,MAChCwpE,WAAW,EACXh3D,aAAa,KAGZ1R,EAAMyR,KAAKtoC,GAAGuoC,YACjB,GAAY,QAAR3mC,EAAe,CACjB,IAAM1B,EAAQu1D,EAASuH,IAAIh9D,GAC3B62B,EAAMyR,KAAKtoC,GAAGo/F,IAAgB,IAAVl/F,EAAcA,OAAQuF,CAC5C,MAAO,GAAY,SAAR7D,EAAgB,CACzB,IAAM1B,EAAQu1D,EAASqH,KAAK98D,GAC5B62B,EAAMyR,KAAKtoC,GAAG88D,KAAO58D,CACvB,MAAO,GAAY,YAAR0B,EAAmB,CAC5B,IAAM1B,EAAQu1D,EAASsH,QAAQ/8D,GAC/B62B,EAAMyR,KAAKtoC,GAAG+8D,QAAoB,IAAV78D,EAAcA,OAAQuF,CAChD,MAAO,GAAY,YAAR7D,EAAmB,CAC5B,IAAM1B,EAAQu1D,EAAS+G,QAAQx8D,GAC/B62B,EAAMyR,KAAKtoC,GAAG21B,OAASz1B,CACzB,MAAO,GAAY,oBAAR0B,EAA2B,CACpC,IAAM1B,EAAQu1D,EAASoH,gBAAgB78D,GACvC62B,EAAMyR,KAAKtoC,GAAGyoE,eAAiBvoE,CACjC,MAAO,GAAY,WAAR0B,EAAkB,CAC3B,IAAM1B,EAAQu1D,EAAS2H,OAAOp9D,GAC9B62B,EAAMyR,KAAKtoC,GAAGm/F,UAAYj/F,CAC5B,MAAO,GAAY,YAAR0B,EAAmB,CAC5B,IAAM1B,EAAQu1D,EAAS4H,QAAQr9D,GAC/B62B,EAAMyR,KAAKtoC,GAAGs/F,SAAWp/F,CAC3B,MAAO,GAAY,eAAR0B,EAAsB,CAC/B,IAAM1B,EAAQu1D,EAAS6H,WAAWt9D,GAClC62B,EAAMyR,KAAKtoC,GAAGu/F,YAAcr/F,CAC9B,MAAO,GAAY,WAAR0B,EAAkB,CAC3B,IAAM1B,EAAQu1D,EAASz0B,OAAOhhC,GAC9B62B,EAAMyR,KAAKtoC,GAAG4wC,MAAiB,MAAT1wC,GAAiBA,GAAS,EAAIA,OAAQuF,CAC9D,MAAO,GAAY,YAAR7D,EAAmB,CAC5B,IAAM1B,EAAQu1D,EAAS0H,QAAQn9D,GAC/B62B,EAAMyR,KAAKtoC,GAAGgmC,SAAoB,MAAT9lC,GAAiBA,GAAS,EAAIA,OAAQuF,CACjE,CAIN,OAAOoxB,CACT,CAEO,SAASwvF,GACdjyF,EACAiS,EACAuB,EACAlU,GAEA,IAAMmD,EAAQzC,EAASwC,QAAQyP,GACzB+yD,GAAe,EAAAC,EAAAA,0BAAyBxiE,EAAM9f,SAAU2c,GAC9D,OAAO,EAAA40F,EAAAA,IAAGl0F,GACPlzB,EAAE,WACFlB,EAAEqmC,GACFnlC,EAAE,QACFlB,EAAE4nC,GACF8lF,OAAQC,IACA,IACFA,EACHx9G,UAAYw9G,EAAYplF,YAA2BolF,EAAYx9G,UAAzBC,KAAKC,MAC3CmtD,kBAAmB47B,EAAgBu0B,EAAYnwD,mBAAqBmwD,EAAY7wD,UAAQr3D,EACxF83D,cAAeowD,EAAYpwD,eAAiBowD,EAAY7wD,KACxDmM,gBAAiB0kD,EAAY1kD,iBAAmB0kD,EAAYh4F,OAC5D4S,aAAcolF,EAAYplF,cAGlC,CAEO,SAASqlF,GACd/2F,EACA+Q,EACAh3B,EACAi9G,EACAn6F,GAEA,IAAMruB,EAAe,WAATuL,EAAoBimB,EAAMoR,WAAWL,GAAY/Q,EAAMyR,KAAKV,GAClEkmF,IAAiBzoH,GAAKi6F,OACtByuB,EAAuBF,GAAuBX,EAA8Br2F,GAC5EuiE,GAAe,EAAAC,EAAAA,0BAAyBxiE,EAAM9f,SAAU2c,GACxDyrE,GACmB,MAAtB95F,GAAKk4D,eAA0B67B,GAA0C,MAA1B/zF,GAAKm4D,uBAClDn4D,GAAK85F,SAAuB,MAAZ95F,EAAIy3D,MACnBkxD,EAA0C,MAAxB3oH,GAAK4jE,oBAA8B5jE,GAAKk6F,WAA2B,MAAdl6F,EAAIswB,QACjF,OAAQtwB,EAAIkjC,cAAgBulF,GAAgBC,GAAwB5uB,GAAW6uB,EACjF,CAEO,SAASC,GACd75F,EACAiS,EACAuB,EACAh3B,EACAi9G,EACAn6F,EACAsJ,GAEA,IAAMnG,EAAQzC,EAASwC,QAAQyP,GACzBhhC,EAAe,WAATuL,EAAoBimB,EAAMoR,WAAWL,GAAY/Q,EAAMyR,KAAKV,GAClEsT,EAAgBuuE,GAA2Br1F,GAC3C85F,EACa,MAAjBhzE,GAAyBA,EAAc7U,aAAeA,GAAc6U,EAActT,WAAaA,EAIjG,GAAa,YAATh3B,GAAuC,MAAjBvL,GAAK2gC,WAAqB3gC,EAAIkjC,cAAgB2lF,EAAiB,CACvF,IAAM79G,EAAMD,KAAKC,MACX89G,GAAS,EAAAC,EAAAA,eAAch6F,EAAUiS,EAAYuB,EAAUlU,EAAU,CACrE26F,gBAAiBrxF,EAAe,EAAKtJ,EAASsN,OAAOmc,UAAY,EACjEhgB,UAAW9sB,EACXi+G,MAAOj+G,IAET,GAAc,MAAV89G,EACF,MAAO,IAAK/5F,EAAU4R,cAAUvgC,EAAWygC,sBAAkBzgC,KAAc0oH,EAE/E,CACA,IAAML,IAAiBzoH,GAAKi6F,OACtByuB,EAAuBF,GAAuBX,EAA8Br2F,GAC5EuiE,GAAe,EAAAC,EAAAA,0BAAyBxiE,EAAM9f,SAAU2c,GACxDyrE,GACmB,MAAtB95F,GAAKk4D,eAA0B67B,GAA0C,MAA1B/zF,GAAKm4D,uBAClDn4D,GAAK85F,SAAuB,MAAZ95F,EAAIy3D,MACnBkxD,EAA0C,MAAxB3oH,GAAK4jE,oBAA8B5jE,GAAKk6F,WAA2B,MAAdl6F,EAAIswB,QACjF,MAAa,WAAT/kB,GACK,EAAA03G,EAAAA,IAAGl0F,GACPlzB,EAAE,WACFlB,EAAEqmC,GACFnlC,EAAE,cACFlB,EAAE4nC,GACF8lF,OAAQC,IACA,IACFA,EACHx9G,UAAYw9G,EAAYplF,YAA2BolF,EAAYx9G,UAAzBC,KAAKC,MAC3CmtD,kBAAmB47B,EAAgBu0B,EAAYnwD,mBAAqBmwD,EAAY7wD,UAAQr3D,EACxF83D,cAAeowD,EAAYpwD,eAAiBowD,EAAY7wD,KACxDmM,gBAAiB0kD,EAAY1kD,iBAAmB0kD,EAAYh4F,OAC5D4S,aAAcolF,EAAYplF,eAGvBqlF,GAA8B/2F,EAAO+Q,EAAUh3B,EAAMi9G,EAAqBn6F,GAC5E,IACFU,EACHoS,WAAY,CACVH,aACAuB,WACA0mF,MAAOl+G,KAAKC,MACZivF,OAAQwuB,EACR/H,SAAUgI,EACV5uB,QAASA,EACTI,UAAWyuB,IAIR3H,GAA0BjyF,EAAUiS,EAAYuB,EAAUlU,EAErE,CAEO,SAASu2B,GACd71B,EACApoB,GAGA,IADA,IACSq6B,EADUr6B,GAAOq6B,YAAc,EACNA,EAAajS,EAASwC,QAAQv3B,OAAQgnC,GAAc,EAGpF,IAFA,IAAMiC,EAAOlU,EAASwC,QAAQyP,GAAYiC,KAEjCV,EADiB,MAAT57B,GAAiBq6B,IAAer6B,EAAMq6B,WAAar6B,EAAM47B,SAAW,EAAI,EAC3DA,EAAWU,EAAKjpC,OAAQuoC,GAAY,EAChE,IAAKU,EAAKV,GAAUW,YAClB,MAAO,CAAElC,aAAYuB,WAK7B,CA4BO,SAAS2mF,GACdn6F,EACAo1F,GAEA,GAAa,MAATA,EAAJ,CAGA,IAAMnkH,EAAM+uB,EAASwC,QAAQ4yF,EAAMnjF,aAAaiC,KAAKkhF,EAAM5hF,UAC3D,GAAW,MAAPviC,EAGJ,OAAsB,MAAfmkH,EAAMgF,OAAiBnpH,EAAIgF,KAAOm/G,EAAMgF,MAAQnpH,OAAMI,CAL7D,CAMF,CAIO,SAASgkH,GAA2Br1F,GACzC,IAAMwzF,EAAMxzF,EAAS4R,SACrB,GAAW,MAAP4hF,GAA+D,MAAhD2G,GAA8Bn6F,EAAUwzF,GACzD,MAAO,CAAE4B,MAAO,UAAW5B,EAAKzwD,KAAMywD,EAAIzwD,MAAQ,aAEpD,IAAMha,EAAW/oB,EAAS8R,iBAC1B,OAAgB,MAAZiX,GAAyE,MAArDoxE,GAA8Bn6F,EAAU+oB,GACvD,CAAEqsE,MAAO,cAAersE,EAAUga,KAAMha,EAASga,MAAQ,kBADlE,CAIF,CAEO,SAASj6B,GAA2B9I,EAA0B+I,GACnE,IAAMggB,EAAW/oB,EAAS8R,iBAG1B,OAAgB,MAAZiX,GAAyC,MAArB/oB,EAAS4R,SACxB5R,EAEF,IACFA,EACH8R,sBAAkBzgC,EAClBugC,SAAU,CACRK,WAAY8W,EAAS9W,WACrBuB,SAAUuV,EAASvV,SACnB4mF,MAAOrxE,EAASqxE,MAChBnkH,GAAI8yC,EAAS9yC,GACb8sD,KAAMha,EAASga,KACfh6B,YAEAmxF,MAAOnxE,EAASmxE,OAGtB,CAIO,SAASvG,GACd3zF,GAKA,IAAMjZ,EACiB,MAArBiZ,EAAS4R,SACL,CAAEK,WAAYjS,EAAS4R,SAASK,WAAYuB,SAAUxT,EAAS4R,SAAS4B,UAC5C,MAA5BxT,EAASkS,iBAAqD,MAA1BlS,EAAS41B,cAC3C,CAAE3jB,WAAYjS,EAASkS,gBAAiBsB,SAAUxT,EAAS41B,oBAC3DvkD,EAIFvD,GACQ,MAAXiZ,EASL,SACEiZ,EACAjZ,GAEA,IAAM0b,EAAQzC,EAASwC,QAAQzb,EAAQkrB,YACvC,GAAuB,MAAnBxP,GAAOu9E,SAAX,CAMA,IAAM6X,EAAYO,EAAsBp4F,EAAUyC,EAAO,WAAW,GACpE,GAAiB,MAAbo1F,GAAqBA,EAAU5hH,KAAOwsB,EAAMxsB,GAAhD,CAGA,IAAMg8B,EAAajS,EAASwC,QAAQs2B,UAAW5tD,GAAMA,EAAE+K,KAAO4hH,EAAU5hH,IAClEu9B,EAAWqkF,EAAU3jF,KAAK4kB,UAAWjP,IAAOA,EAAE1V,aACpD,KAAIlC,EAAa,GAAKuB,EAAW,GAGjC,MAAO,CAAEvB,aAAYuB,WANrB,CAPA,CAcF,CA9BuB6mF,CAAmCr6F,EAAUjZ,QAAW1V,IAC3EwkD,GAAsC71B,EAAUjZ,GAClD,GAAY,MAARjZ,EAAJ,CAGA,IAAMmD,EAAM+uB,EAASwC,QAAQ10B,EAAKmkC,aAAaiC,KAAKpmC,EAAK0lC,UACzD,OAAwB,MAAjBviC,GAAK2gC,SAAmB9jC,OAAOuD,CAFtC,CAGF,CA+BO,SAASwiH,GAAgC5iH,EAAuBquB,GACrE,OAAKruB,GAAKyxG,KAGH9vF,KAAKu0C,IAAI7nC,EAASsN,OAAOmc,UAAY,EAAG93C,EAAIurC,OAAS,GAFnD,CAGX,CAIO,SAASo3E,GACdtrF,EACAtI,EACAV,EACAg7F,EACAL,EAA0B,EAC1BlxF,GAEA,IAAMwxF,EAAiBxxF,GAAa/sB,KAAKC,MACnCnO,EAAO6lH,GAAyB3zF,GAChCw6F,EAAYx6F,EAAS4R,UAAUsoF,MAGV,MAAvBl6F,EAASyc,YACXnU,EAAQz7B,KAAK,CAAEiN,KAAM,cAIvB,IAAM4+G,EAAyB,MAAR5qH,EAAeA,EAAKmkC,WAAajS,EAASoc,kBAC3Dq+E,EAAe/B,KAAoB14F,EAASoc,mBAAqB,GACjE29E,EACI,MAARjsH,GACI,EAAAksH,EAAAA,eAAch6F,EAAUlyB,EAAKmkC,WAAYnkC,EAAK0lC,SAAUlU,EAAU,CAChE26F,kBACAlxF,UAAWwxF,EACXL,MAAOI,EAAat+G,KAAKC,MAAQu+G,SAEnCnpH,EACN,MAAO,IACF2uB,EACHyc,gBAAYprC,EACZmrC,WAAOnrC,EACPqrC,eAAWrrC,EACX6gC,qBAAiB7gC,EACjBukD,mBAAevkD,EACfugC,cAAUvgC,EACVygC,sBAAkBzgC,KACf0oH,EACH39E,kBAAmBs8E,EAGnBjtF,GAAIgvF,EAAe,IAAKz6F,EAASyL,GAAI6I,uBAAwBtU,EAASyL,IAAI6I,uBAA0BtU,EAASyL,GAEjH,CAEO,SAASivF,GACd16F,EACAiS,EACAuB,EACAlU,EACAq7F,EACAT,EACAtxF,GAEA,IAAM33B,EAAM+uB,EAASwC,QAAQyP,IAAaiC,KAAKV,GAC/C,GAAW,MAAPviC,EACF,OAAO+uB,EAET,IAAM+5F,GAAS,EAAAC,EAAAA,eAAch6F,EAAUiS,EAAYuB,EAAUlU,EAAU,CACrE26F,gBAAiBrxF,EAAe,EAAKtJ,EAASsN,OAAOmc,UAAY,EACjEhgB,UAAW93B,EAAIyxG,KAAOiY,EAAU3+G,KAAKC,MACrCi+G,UAEF,OAAc,MAAVH,EACK/5F,EAEF,IAAKA,EAAU4R,cAAUvgC,EAAWygC,sBAAkBzgC,KAAc0oH,EAC7E,CAGO,SAASa,GACdtyF,EACAtI,EACAiS,EACAuB,EACAlU,EACAvkB,EACA6tB,GAKA,GAA2B,MAAvB5I,EAASoS,WACX,OAAOpS,EAIT,GAAI4I,EACF,MAAO,IAAK5I,EAAU4R,cAAUvgC,GAElC,IAAMJ,EAAM+uB,EAASwC,QAAQyP,IAAaiC,KAAKV,GAIzCqnF,EAAiB76F,EAAS4R,UAAU7I,UAMpC+xF,EAJc,MAAlBD,GACiB,MAAjB5pH,GAAK2gC,WACJ3gC,EAAIo6F,oBACLrvF,KAAKC,MAAQ4+G,GAAiC,IAAf5pH,EAAI2gC,SACM3gC,GAAK2gC,SAAW3gC,GAAKq6F,kBAC1DyvB,EACc,MAAlBF,GAAgD,MAAtBC,EAA6BD,EAAsC,IAArBC,EAA4B9+G,KAAKC,MAE3G,GAAIhL,GAAKyxG,MAA6B,KAApBzxG,EAAIurC,OAAS,GAC7B,OAAOo3E,GAAyBtrF,EAAStI,EAAUV,GAAU,EAAO,EAAGy7F,GAEzE,IAAMC,EAAenH,GAAgC5iH,EAAKquB,GAG1D,GAAI07F,EAAe,IAAM/pH,GAAKurC,OAAS,GAAKw+E,GAAgB,EAC1D,OAAOpH,GAAyBtrF,EAAStI,EAAUV,GAAU,EAAM07F,EAAcD,GAEnF,IAAIzvF,EAA8B,IAAKtL,EAAU4R,cAAUvgC,EAAWygC,sBAAkBzgC,GAiBxF,OAhBIJ,GAAKkjC,aAA+B,MAAhBljC,EAAI2gC,WAI1BtG,EAAcgnF,EACZhqF,EACAgD,EACAyvF,EACA,UACA9oF,EACAuB,EACAlU,EACAvkB,EATgBigH,EAAe,GAAK/pH,EAAIurC,OAAS,GAAKw+E,OAAe3pH,IAalEi6B,CACT,CAkCO,SAASioF,GAA2BvzF,EAA0B/jB,GACnE,IAAM8sC,EAAW/oB,EAAS8R,iBAC1B,OAAyB,MAArB9R,EAAS4R,UAAgC,MAAZmX,GAAoB9sC,EAAM8sC,EAAShgB,UAAgC,IAApBggB,EAASA,SAChF/oB,EAEF8I,GAA2B9I,EAAU+oB,EAAShgB,UAAgC,IAApBggB,EAASA,SAC5E,CAyHO,SAAS6oE,GAAmC5xF,EAA0Bl0B,GAC3E,GAA2B,MAAvBk0B,EAASoS,WAAoB,CAC/B,IAAA6oF,EAAiCj7F,EAASoS,WAAlCH,EAAUgpF,EAAVhpF,WAAYuB,EAAQynF,EAARznF,SACpB,OAAO,EAAA0gF,EAAAA,IAAGl0F,GAAUlzB,EAAE,WAAWlB,EAAEqmC,GAAYnlC,EAAE,QAAQlB,EAAE4nC,GAAU1mC,EAAE,iBAAiBmE,IAAInF,EAC9F,CACE,OAAOk0B,CAEX,CAEO,SAAS6xF,GAAuC7xF,EAA0Bl0B,GAC/E,GAA2B,MAAvBk0B,EAASoS,WAAoB,CAC/B,IAAA8oF,EAAiCl7F,EAASoS,WAAlCH,EAAUipF,EAAVjpF,WAAYuB,EAAQ0nF,EAAR1nF,SACpB,OAAO,EAAA0gF,EAAAA,IAAGl0F,GAAUlzB,EAAE,WAAWlB,EAAEqmC,GAAYnlC,EAAE,QAAQlB,EAAE4nC,GAAU1mC,EAAE,qBAAqBmE,IAAInF,EAClG,CACE,OAAOk0B,CAEX,CAEO,SAAS8xF,GAA6B9xF,EAA0Bl0B,GACrE,GAA2B,MAAvBk0B,EAASoS,WAAoB,CAC/B,IAAA+oF,EAAiCn7F,EAASoS,WAAlCH,EAAUkpF,EAAVlpF,WAAYuB,EAAQ2nF,EAAR3nF,SACd22B,EAAoB,MAATr+D,EAAqE,GAArD8mB,KAAKC,MAAMD,KAAKu0C,IAAI,GAAIv0C,KAAKw0C,IAAI,EAAGt7D,IAAU,SAAauF,EAC5F,OAAO,EAAA6iH,EAAAA,IAAGl0F,GAAUlzB,EAAE,WAAWlB,EAAEqmC,GAAYnlC,EAAE,QAAQlB,EAAE4nC,GAAU1mC,EAAE,gBAAgBmE,IAAIk5D,EAC7F,CACE,OAAOnqC,CAEX,CAEO,SAAS+xF,GAAgC/xF,EAA0Bl0B,GACxE,GAA2B,MAAvBk0B,EAASoS,WAAoB,CAC/B,IAAAgpF,EAAiCp7F,EAASoS,WAAlCH,EAAUmpF,EAAVnpF,WAAYuB,EAAQ4nF,EAAR5nF,SACpB,OAAO,EAAA0gF,EAAAA,IAAGl0F,GAAUlzB,EAAE,WAAWlB,EAAEqmC,GAAYnlC,EAAE,QAAQlB,EAAE4nC,GAAU1mC,EAAE,mBAAmBmE,IAAInF,EAChG,CACE,OAAOk0B,CAEX,CAEO,SAASgyF,GACdhyF,EACA6C,EACA+pE,GAEA,MAAO,IACF5sE,EACH4sE,sBAAuB,IACjB5sE,EAAS4sE,uBAAyB,CAAC,EACvC,CAAC/pE,GAAoB+pE,GAG3B,CAwBO,SAASyuB,GAAqCpqH,GACnD,OAA6B,MAAtBA,EAAIojE,gBAAsC,MAAZpjE,EAAIy3D,MAA2B,MAAXz3D,EAAI+5F,GAC/D,CA4DO,SAASooB,GACdp/E,EACA8P,EACAxkB,GAEA,IAAK,IAAMoJ,KAAmBsL,GAAmB,EAAAkwE,EAAAA,wCAAuClwE,GAAoB,GAC1G,IAAI,EAAA21D,EAAAA,aAAYjhE,EAAgBob,aAAcA,GAAe,CAC3D,IAAMw3E,GAAU,EAAAjZ,EAAAA,uCAAsC35E,EAAiBpJ,GACvE,GAAe,MAAXg8F,EACF,OAAOA,CAEX,CAGJ,CAEO,SAASjI,GACd5wF,EACAqhB,EACAxkB,EACA2zF,EACAE,GAEA,IAAM3xD,GAAO,EAAAg1D,EAAAA,kCAAiCl3F,EAAUwkB,IAAiBxkB,EAASxc,MAC5Ey4G,EAAU94F,EAAMyR,KAAKz7B,IAAKxH,IAC9B,GAAIA,EAAIkjC,YACN,OAAOljC,EAET,GAAIoqH,GAAqCpqH,KAAQ,EAAA6yD,EAAAA,cAAa7yD,EAAIojE,gBAAiB,CACjF,IAAMA,EAAiBpjE,EAAIojE,iBAAkB,EAAA8zC,EAAAA,eAAcl3G,EAAIy3D,MAAQ,EAAGz3D,EAAI+5F,KAAO,IAC/Eid,GAAkB,EAAAC,EAAAA,uBAAsB7zC,EAAgBvwB,EAAcxkB,GACtEiC,GAAS,EAAA6mF,EAAAA,uBAAsBH,EAAiB3oF,EAAUkiC,EAAM1d,GACtE,MAAO,IAAK7yC,EAAKswB,SACnB,CACA,GAA0B,MAAtBtwB,EAAIojE,eAAwB,CAC9B,IAAM9yC,GAAS,EAAA6mF,EAAAA,uBA/DrB,SACEn3G,EACA6yC,EACAxkB,EACA2zF,GAEA,IAAMuI,EAAavqH,EAAIy3D,MAAQ,EACzB+yD,EAAYxqH,EAAI+5F,KAAO,GACvBvsF,EAlCR,SAA2Bw0G,EAAsCuI,GAC/D,IAAIp5C,EAEAs5C,EADAC,EAAe51C,IAEnB,IAAK,IAAM90E,KAAOgiH,GAAW/+E,MAAQ,GAAI,CACvC,IAAMw0B,EAAOz3D,EAAIk4D,eAAiBl4D,EAAIy3D,KAChCnnC,EAAStwB,EAAI4jE,iBAAmB5jE,EAAIswB,OAC1C,MAAKtwB,EAAIkjC,aAAuB,MAARu0B,GAAgBA,GAAQ,GAAe,MAAVnnC,GAAkBA,EAAOz1B,OAAS,GAAvF,CAGA,IAAM8vH,EAAWhpG,KAAKowD,IAAIta,EAAO8yD,GAC3B3rD,GAAQ,EAAA+5B,EAAAA,qBAAoBroE,EAAQmnC,EAAMz3D,EAAIg6F,cAAgBh6F,EAAI+5F,MACpE4wB,EAAWD,GAAiBC,IAAaD,IAA8B,MAAbD,IAAqB,EAAAjvD,EAAAA,WAAUoD,EAAO6rD,OAClGt5C,EAAOnxE,EACP0qH,EAAeC,EACfF,EAAY7rD,EANd,CAQF,CACA,OAAOuS,CACT,CAeiBy5C,CAAkB5I,EAAWuI,GACtCM,EAAer9G,GAAQo2D,iBAAmBp2D,GAAQ8iB,OAClDw6F,EAAat9G,GAAQ0qD,eAAiB1qD,GAAQiqD,KACpD,GAAoB,MAAhBozD,GAAsC,MAAdC,EAI1B,OAAO,EAAA7T,EAAAA,wBAAsB,EAAAC,EAAAA,eAAcqT,EAAYC,GAAY33E,EAAcxkB,GAInF,IAAM08F,EAAYv9G,GAAQwsF,cAAgBxsF,GAAQusF,KAAOywB,EACnDt2C,GAAQ,EAAA0xC,EAAAA,sBAAqB2E,EAAYC,IAAa,EAAA5E,EAAAA,sBAAqBkF,EAAYC,GAC7F,OAAO,EAAAn3B,EAAAA,iBAAgBi3B,EAAc32C,EACvC,CA0CQ82C,CAAkBhrH,EAAK6yC,EAAcxkB,EAAU2zF,GAC/C3zF,EACAkiC,EACA1d,GAKF,MAAO,IAAK7yC,EAAKswB,OAAAA,EAAQ8yC,eAAgB9yC,EAC3C,CACA,OAAOtwB,IAMH4iC,EADqBpR,EAAMoR,WAAW9kB,KAAM9d,GAAQA,EAAIkjC,aAE1D1R,EAAMoR,YACN,EAAA+uE,EAAAA,wBAAuB9+D,EAAcy3E,EAAQ,IAAIh6F,OAAQjC,EAAU6zF,GACvE,MAAO,IAAK1wF,EAAOyR,KAAMqnF,EAAS1nF,aACpC,CAiEO,SAASw9E,GAAwBrxF,EAA0BsxF,GAChE,IAAM4K,EAAa,IAAIprH,IAA2BwgH,EAAW74G,IAAI,CAACvN,EAAGU,IAAM,CAACV,EAAGU,KACzEuwH,EAAStlE,IACb,IAAMp0B,EAAiB,MAATo0B,EAAgB72B,EAASwC,QAAQq0B,QAASxlD,EACxD,OAAgB,MAAToxB,EAAgBy5F,EAAWlrH,IAAIyxB,QAASpxB,GAU3C+qH,EAA4CtwH,IAChD,IAAMmmC,EAAsB,MAATnmC,EAAgBqwH,EAAMrwH,EAAMmmC,iBAAc5gC,EAC7D,OAAgB,MAATvF,GAA+B,MAAdmmC,EAAqB,IAAKnmC,EAAOmmC,mBAAe5gC,GAEpEo6B,EAAKzL,EAASyL,GACd2Q,EAXSya,KACb,GAAa,MAATA,GAAuC,IAAtBy6D,EAAWrmH,OAGhC,OAAOkxH,EAAMtlE,IAAUjkC,KAAKw0C,IAAI,EAAGx0C,KAAKu0C,IAAItQ,EAAOy6D,EAAWrmH,OAAS,KAO/CoxH,CAAMr8F,EAASoc,mBACnCkgF,EAAc7wF,GAAI8wF,gBAAgB5+G,MACxC,MAAO,IACFqiB,EACHwC,QAAS8uF,EAAW74G,IAAI,CAACvN,EAAGU,IAAOV,EAAE2rD,QAAUjrD,EAAIV,EAAI,IAAKA,EAAG2rD,MAAOjrD,IACtEwwC,oBACAlK,gBAAiBiqF,EAAMn8F,EAASkS,iBAChCN,SAAUwqF,EAAOp8F,EAAS4R,UAC1BE,iBAAkBsqF,EAAOp8F,EAAS8R,kBAClCM,WAAYgqF,EAAOp8F,EAASoS,YAC5B3G,GACQ,MAANA,EACIA,EACA,IACKA,EACH+wF,UAAWJ,EAAO3wF,EAAG+wF,WACrBC,aAAcL,EAAO3wF,EAAGgxF,cACxBC,kBAAmBN,EAAO3wF,EAAGixF,mBAC7BC,cAAeP,EAAO3wF,EAAGkxF,eACzBC,oBAAqBR,EAAO3wF,EAAGmxF,qBAC/BC,mBAAoBV,EAAM1wF,EAAGoxF,oBAG7BN,eAC6B,MAA3BD,GAAarqF,WACTxG,EAAG8wF,eACH,IAAK9wF,EAAG8wF,eAAgB5+G,MAAO,IAAK2+G,EAAarqF,WAAYkqF,EAAMG,EAAYrqF,cAIrFqC,sBACE8H,IAAsBpc,EAASoc,mBAAqB3Q,EAAG6I,sBAAwB7I,EAAG6I,uBAGhG,CAIO,SAASm8E,GAA0BhuF,GACxC,OAAOA,EAAMyR,KAAKnlB,KAAM9d,GAAQA,EAAIkjC,cAAgB1R,EAAMoR,WAAW9kB,KAAM9d,GAAQA,EAAIkjC,YACzF,CAyBO,SAAS6sE,GAAoBhhF,GAClC,MAAO,CACLqB,IAAKrB,EAASqB,IACdupC,KAAM5qC,EAAS4qC,KACf+G,UAAW3xC,EAAS2xC,UAExB,CAEO,SAAS4/C,GACduL,EACAjmE,EACAnuB,EACApJ,EACAy9F,GAEA,IAAMvW,GAAiB,EAAAwW,EAAAA,iDAAgDt0F,GACjEwL,EAAOxL,EAAgB46E,uBAAuBkD,GAAgBtyE,KAC9D8gD,GAA4B,EAAAqtB,EAAAA,uCAAsC35E,EAAiBpJ,GAEzF,GAAqB,MAAjBw9F,EAAuB,CAGzB,IAFA,IAAMG,EAAarqG,KAAKw0C,IAAI01D,EAAc5oF,KAAKjpC,OAAQipC,EAAKjpC,QACtDswH,EAAkB,GACf3vH,EAAI,EAAGA,EAAIqxH,EAAYrxH,IAAK,CACnC,IAAM2tH,EAAgCuD,EAAc5oF,KAAKtoC,GACnD02G,EAAapuE,EAAKtoC,GACxB,GAAM2tH,GAAaplF,YACjBonF,EAAQ1uH,KAAK0sH,QACR,GAAkB,MAAdjX,EAAoB,CAC7B,IAAMjuC,EAAiBiuC,EAAW/gF,OAC5BA,GAAS,EAAAkhF,EAAAA,+BAA8BH,EAAY55E,EAAgBob,aAAcxkB,GACvFi8F,EAAQ1uH,KAAK,IACR0sH,EACHtjH,GAAIsjH,GAAatjH,KAAM,EAAAiV,EAAAA,wBAAuB,GAC9Cwc,MAAO,MACPmvB,MAAO0kE,EAAQtwH,OACfy9D,KAAM45C,EAAWE,OACjB75C,QAAS25C,EAAWC,OACpBvX,IAAKsX,EAAWtX,IAChBhG,cAAc,EAAAC,EAAAA,0BAAyBv8D,EAAgBob,aAAcxkB,GACrE+0C,iBACA9yC,SACAwpE,QAASuX,EAAWvX,QACpBG,OAAQoX,EAAWpX,OACnBxjF,MAAO46F,EAAW56F,MAClB80B,MAAO8lE,EAAW9lE,MAClB5K,SAAU0wE,EAAW1wE,SACrBy5D,mBAAoBiX,EAAWjX,mBAC/BqX,KAAMJ,EAAWI,KACjBvX,UAAWmX,EAAWnX,WAE1B,CACF,CACA,IAAI+xB,EAAgBJ,EAAcjpF,WAClC,GAAIipF,EAAcjpF,WAAW3Y,MAAO2tC,IAAOA,EAAE10B,aAAc,CACzD,IAAMm6E,EAAciN,EAAQ,IAAIh6F,OAO9B27F,GANFH,EAAkBA,IAAmB,EAAAjI,EAAAA,cAAayG,KAG/B,MAAfjN,GACI,EAAA1L,EAAAA,wBAAuBl6E,EAAgBob,aAAcwqE,EAAahvF,EAAU01D,GAC5E,IACoBv8E,IAAI,CAAC0kH,EAAIvxH,KAAM,IACpCuxH,EACHlnH,GAAI6mH,EAAcjpF,WAAWjoC,IAAIqK,IAAMknH,EAAGlnH,MAG5B6mH,EAAcjpF,UAElC,CAEA,MAAO,IACFipF,EACHn6G,SAAUm6G,EAActM,QAAUsM,EAAcn6G,SAAW+lB,EAAgBob,aAC3EjQ,WAAYqpF,EACZhpF,KAAMqnF,EAEV,CACE,IAAMA,EAAUrnF,EAAKz7B,IAAI,CAACxH,EAAKrF,KAC7B,IAAM21B,GAAS,EAAAkhF,EAAAA,+BAA8BxxG,EAAKy3B,EAAgBob,aAAcxkB,GAChF,MAAO,CACLoI,MAAO,MACPzxB,IAAI,EAAAiV,EAAAA,wBAAuB,GAC3B2rC,MAAOjrD,EACP88D,KAAMz3D,EAAIuxG,OACV75C,QAAS13D,EAAIsxG,OACbluC,eAAgBpjE,EAAIswB,OACpByjE,cAAc,EAAAC,EAAAA,0BAAyBv8D,EAAgBob,aAAcxkB,GACrEiC,SACAypE,IAAK/5F,EAAI+5F,IACTE,OAAQj6F,EAAIi6F,OACZH,QAAS95F,EAAI85F,QACbrjF,MAAOzW,EAAIyW,MACX80B,MAAOvrC,EAAIurC,MACX5K,SAAU3gC,EAAI2gC,SACdy5D,mBAAoBp6F,EAAIo6F,mBACxBqX,KAAMzxG,EAAIyxG,KACVvX,UAAWl6F,EAAIk6F,aAGbmjB,EAAciN,EAAQ,IAAIh6F,OAEhC,MAAO,CACLmG,MAAO,gBACPmvB,QACA5gD,GAAI+/D,GAAoBttC,EAAgBob,aAAcpb,EAAgBhhB,OACtE/E,SAAU+lB,EAAgBob,aAC1BjhB,kBAAmB6F,EAAgBl7B,IACnC0mC,KAAMqnF,EACN1nF,WACiB,MAAfy6E,GACI,EAAA1L,EAAAA,wBAAuBl6E,EAAgBob,aAAcwqE,EAAahvF,EAAU01D,GAC5E,GAGZ,CAEO,SAAShf,GAAoBlyB,EAA6Bp8B,GAC/D,OAAO,EAAAkb,EAAAA,yBAAwB,CAAClb,GAAO,EAAAgb,EAAAA,gBAAeohB,KAAgBnrC,KAAK,IAC7E,CAsSO,SAAS4vB,GACdD,EACAhJ,EACAgC,EACAtB,EACAjB,EACAhkB,EACA8lG,GAEA,IAAM/5D,EAAgB9mB,EAAS4R,SACzBwrF,EACY,YAAhBr+F,EAAOviB,MACU,MAAjBsqC,GACAA,EAAc7U,aAAelT,EAAOkT,YACpC6U,EAActT,WAAazU,EAAOyU,SAC9B6pF,EAAYr9F,EAAS8R,iBAC3B,GACkB,YAAhB/S,EAAOviB,OACN4gH,GACY,MAAbC,GACAA,EAAUprF,aAAelT,EAAOkT,YAChCorF,EAAU7pF,WAAazU,EAAOyU,SAE9B,OAAOxT,EAOT,GAAkC,MAA9BjB,EAAOioB,sBAAgCo2E,EACzC,OAAOp9F,EAET,IAAMs9F,EAASt9F,EAASwC,QAAQzD,EAAOkT,YAA4B,WAAhBlT,EAAOviB,KAAoB,aAAe,QAAQuiB,EAAOyU,UACtG+pF,EAAYz2E,GAAeic,MAAQ,YACnCy6D,GAAmB,EAAA/J,EAAAA,sBAAqB6J,EAAQC,GAEtD,GAAIH,GAAoC,MAAjBt2E,GAAuC,SAAdy2E,EAAsB,CACpE,IAAME,EACJD,GAAoBz+F,EAAO4nB,iBAAmB/zB,KAAKC,OAAO7W,KAAKC,MAAQ6qC,EAAc/d,WAAa,KAChG20F,GAAS,EAAAxJ,EAAAA,IAAGl0F,GACblzB,EAAE,WACFlB,EAAEmzB,EAAOkT,YACTnlC,EAAE,QACFlB,EAAEmzB,EAAOyU,UACT1mC,EAAE,yBACFmE,IAAIwsH,GACP,IAAK1+F,EAAOioB,oBAAqB,CAC/B,IAAM93B,EAASouG,EAAO1rF,SAGhB+oF,EADM,MAAVzrG,IAAmBouG,EAAOjyB,oBAAsBrvF,KAAKC,MAAQ6qC,EAAc/d,WAAsB,IAAT7Z,EAC1D43B,EAAc/d,UAAqB,IAAT7Z,EAAgBlT,KAAKC,MACzE0hH,EAAYjD,GAChBgD,EACA3+F,EAAOkT,WACPlT,EAAOyU,SACPlU,EACAq7F,EACA7zE,EAAcozE,MACdn7F,EAAO6J,cAET,GAAI+0F,IAAcD,EAChB,OAAOn1F,GACLD,EACAhJ,EACAgC,EACA,IAAKo8F,EAAQ9rF,cAAUvgC,EAAWygC,sBAAkBzgC,GACpD,IAAK0tB,EAAQioB,yBAAqB31C,EAAWs1C,qBAAiBt1C,GAC9D0J,EACA8lG,GAGJ6c,EAASC,CACX,CAUA,OATA,EAAAzgF,EAAAA,oDACE5U,EACAo1F,EACA3+F,EAAOkT,WACPlT,EAAOviB,KACPuiB,EAAO2J,gBACPpJ,EACAvkB,GAEK2iH,CACT,CAIA,GAAIN,GAAoC,MAAjBt2E,GAAyBw2E,EAAOnpF,YAAa,CAClE,IAAMspF,EACJD,GAAoBz+F,EAAO4nB,iBAAmB/zB,KAAKC,OAAO7W,KAAKC,MAAQ6qC,EAAc/d,WAAa,KAChG60F,GAAU,EAAA1J,EAAAA,IAAGl0F,GACdlzB,EAAE,WACFlB,EAAEmzB,EAAOkT,YACTnlC,EAAE,QACFlB,EAAEmzB,EAAOyU,UACT1mC,EAAE,qBACFmE,IAAIwsH,GA4BP,OA3BK1+F,EAAOioB,sBACV42E,EAAUhD,GACRtyF,EACAs1F,EACA7+F,EAAOkT,WACPlT,EAAOyU,SACPlU,EACAvkB,EACAgkB,EAAO6J,eAGXg1F,EAAQlxF,WAAY,EAAAC,EAAAA,uBAClBrE,EACAs1F,EACA7+F,EAAO6J,aACPtJ,EAASsN,OAAOC,SACA,MAAhB9xB,IAAwB,EAAA4hC,EAAAA,+BAA8B5hC,KAExD,EAAAmiC,EAAAA,oDACE5U,EACAs1F,EACA7+F,EAAOkT,WACPlT,EAAOviB,KACPuiB,EAAO2J,gBACPpJ,EACAvkB,GAEK6iH,CACT,CAIA,GAAIR,GAAoC,MAAjBt2E,IAA0Bw2E,EAAOnpF,aAAmC,MAApBqpF,EAA0B,CAC/F,IAAMC,EAAW1+F,EAAO4nB,iBAAmB/zB,KAAKC,OAAO7W,KAAKC,MAAQ6qC,EAAc/d,WAAa,KAC/F/I,GAAW,EAAAk0F,EAAAA,IAAGl0F,GACXlzB,EAAE,WACFlB,EAAEmzB,EAAOkT,YACTnlC,EAAE,QACFlB,EAAEmzB,EAAOyU,UACT1mC,EAAE,qBACFmE,IAAIwsH,EACT,CAEA,IAAMhE,EAAsB16F,EAAO2J,kBAAmB,EAAAm1F,EAAAA,qCAAoC9+F,EAAO2J,iBAC7F4C,EAAcuuF,GAChB75F,EACAjB,EAAOkT,WACPlT,EAAOyU,SACPzU,EAAOviB,OACLi9G,EACFn6F,EACAP,EAAO6J,cAEHk1F,EACJxyF,EAAY9I,QAAQzD,EAAOkT,YAA4B,WAAhBlT,EAAOviB,KAAoB,aAAe,QAAQuiB,EAAOyU,UAC5FuqF,GAAaT,EAAOnpF,aAAe2pF,EAAO3pF,YAG1C6pF,EAAe3I,GAA2B/pF,GAMhD,IAJG8xF,IACAU,EAAO3pF,aACR6pF,GAAc/rF,aAAelT,EAAOkT,YACpC+rF,GAAcxqF,WAAazU,EAAOyU,SAgBlC,OAZ8B,MAA1BlI,EAAYmR,aACdnR,EAAcmB,EAAmBnE,EAASgD,KAE5C,EAAA4R,EAAAA,oDACE5U,EACAgD,EACAvM,EAAOkT,WACPlT,EAAOviB,KACPuiB,EAAO2J,gBACPpJ,EACAvkB,GAEKuwB,EAELvM,EAAO2J,kBAAoB4C,EAAY8G,aACzC9G,EAAc4mF,GACZ5mF,EACAvM,EAAO2J,gBACP3J,EAAO4J,aAAe,CAAC,EACvB5J,EAAOkT,WACPlT,EAAOyU,SACPzU,EAAOviB,KACP8iB,EACAgC,EACAu/E,IAIAsR,EAAmC7mF,KACrCA,EAAcmB,EAAmBnE,EAASgD,IAExCyyF,IACFzyF,EAAc+mF,EAA4B/mF,EAAavM,EAAOkT,WAAYlT,EAAOviB,OAI9EuiB,EAAO6J,cAAmC,MAAnBk1F,EAAOlsF,WACjCtG,EAAcgnF,EACZhqF,EACAgD,GACA,IAAItvB,MAAOuzF,UACXxwE,EAAOviB,KACPuiB,EAAOkT,WACPlT,EAAOyU,SACPlU,EACAvkB,IAKAqiH,IAAoBr+F,EAAOioB,oBAC7B1b,EAAcsvF,GACZtyF,EACAgD,EACAvM,EAAOkT,WACPlT,EAAOyU,SACPlU,EACAvkB,EACAgkB,EAAO6J,cAGTw0F,GACAr+F,EAAOioB,qBACmB,MAA1B1b,EAAY8G,YACY,MAAxB9G,EAAYsG,WAIZtG,EAAc,IACTA,EACHsG,SAAU,IAAKtG,EAAYsG,SAAU8U,YAAY,KAGrDpb,EAAYoB,WAAY,EAAAC,EAAAA,uBACtBrE,EACAgD,EACAvM,EAAO6J,aACPtJ,EAASsN,OAAOC,SACA,MAAhB9xB,IAAwB,EAAA4hC,EAAAA,+BAA8B5hC,KAExD,EAAAmiC,EAAAA,oDACE5U,EACAgD,EACAvM,EAAOkT,WACPlT,EAAOviB,KACPuiB,EAAO2J,gBACPpJ,EACAvkB,GAKF,IAAM0/G,GAAgBnvF,EAAY8Q,mBAAqB,MAAQpc,EAASoc,mBAAqB,GACvF6hF,IAAmB3yF,EAAYG,IAAI6I,yBAA4BtU,EAASyL,IAAI6I,sBAalF,OAZKvV,EAAOuV,wBAAyBmmF,GAAkBwD,IACrD3yF,EAAc,IACTA,EACHG,GAAI,IAAKH,EAAYG,GAAI6I,uBAAwBhJ,EAAYG,IAAI6I,yBAGjEvV,EAAOwV,aACTjJ,EAAc,IACTA,EACHG,GAAI,IAAKH,EAAYG,GAAI8I,YAAY,KAGlCjJ,CACT,C,kGC3kFO,SAA0B1U,EAAe9oB,GAC9C,OAAOowH,EAAWtnG,KAAUsnG,EAAWpwH,EACzC,E,iCA/BO,SAAwC6P,EAAewgH,GAC5D,IAAMt6E,EAAoC,aAAvBs6E,EAAcjwH,KAAuBiwH,EAAcjyE,QAAQj2C,IAAM,EAAK,EACnF+pB,EAA0B,IAAf6jB,EAAmBlmC,EAAM7G,QAAQkpB,WAAW,GAAKriB,EAAMqiB,SAAS6jB,GACjF,GAAI7jB,KAAa,EAAA+L,EAAAA,oBAAmB/L,GAAW,CAC7C,IAAMo+F,EAAmBzgH,EAAM7G,QAAQC,QAAQ6yC,KAAM4+C,GAAOA,EAAGvyF,KAAO+pB,EAAS/pB,IAC3DooH,GAAsBr+F,EAAlCyL,IAA6B,EAAApY,EAAA1d,SAAKqqB,EAAQ1M,IAClD,GAAwB,MAApB8qG,KAA6B,EAAAE,EAAAA,QAAOF,EAAkBC,GACxD,MAAO,uCAEX,CAEA,GAA2B,gBAAvBF,EAAcjwH,KAAwB,CACxC,IAAMgN,EAAYijH,EAAcjyE,QAAQhxC,UAClCqrC,EAAmBrrC,EAAYyC,EAAMuqB,kBAAkBhtB,QAAa7J,EAC1E,GAAIk1C,EAAkB,CACpB,IAAMhB,GAAiB,EAAAzkB,EAAAA,oBAAmBnjB,EAAO4oC,EAAiBx/B,QAAQvI,QAAQvI,IAClF,GAAsB,MAAlBsvC,GAA0BA,EAAerkB,SAAWqlB,EAAiBx/B,QAAQvI,QAAQ0iB,QAAS,CAChG,IAAMq9F,GAAoB,EAAA7c,EAAAA,6BAA4Bn8D,GAChDi5E,GAAoB,EAAA9c,EAAAA,6BAA4Bn7D,EAAiBx/B,QAAQvI,SAC/E,KAAK,EAAAwiB,EAAAA,qBAAoBu9F,EAAkBr9F,QAAUs9F,EAAkBt9F,SACrE,MAAO,oDAEX,CACF,CACF,CAGF,E,iCAzEAu9F,EAAAltH,EAAA,OACAy8C,EAAAz8C,EAAA,OAEAw7C,EAAAx7C,EAAA,OACAozB,EAAApzB,EAAA,OAAsD+hB,EAAA,OA2E/C,SAAS4qG,EAAW9qF,GACzB,OAAQA,GACN,IAAK,OACH,MAAO,OAET,IAAK,WAGL,IAAK,UAGL,IAAK,SAGL,IAAK,SAGL,IAAK,kBAGL,IAAK,cAGL,IAAK,eAGL,IAAK,OAGL,IAAK,YAkBL,IAAK,eAGL,IAAK,QAML,IAAK,eAGL,IAAK,iBAML,IAAK,gBA2BL,IAAK,UAGL,IAAK,gBAGL,IAAK,gBACH,MAAO,KAnET,IAAK,WAqBL,IAAK,cAeL,IAAK,iBAGL,IAAK,QAGL,IAAK,SAGL,IAAK,iBAGL,IAAK,cAGL,IAAK,cAGL,IAAK,gBAGL,IAAK,QACH,MAAO,UAvDT,IAAK,WAML,IAAK,YAGL,IAAK,UAkBL,IAAK,eACH,MAAO,UAzBT,IAAK,aACH,MAAO,SA+Db,C,8EC5EO,SACLc,EACA8wD,EACA05B,EACA9qF,EACA4tB,GAEA,IAAImlD,EACFzyE,EAAKA,EAAKjpC,OAAS,KAClByzH,GAAsBl9D,EAlB3B,SAA6BvwD,EAAWuwD,GACtC,MAAO,IACFvwD,EACHswB,OAAQtwB,EAAIswB,QAAS,EAAA46C,EAAAA,kBAAiBlrE,EAAIswB,OAAQigC,QAAQnwD,EAC1DgjE,gBAAgB,EAAAxQ,EAAAA,WAAU5yD,EAAIojE,iBAAkB,EAAA8H,EAAAA,kBAAiBlrE,EAAIojE,eAAgB7S,GAAQvwD,EAAIojE,eACjGQ,gBAAiB5jE,EAAI4jE,iBAAkB,EAAAsH,EAAAA,kBAAiBlrE,EAAI4jE,gBAAiBrT,QAAQnwD,EAEzF,CAWkCstH,CAAoBD,EAAoBl9D,GAAQk9D,GAE9E/X,EADa,MAAXA,EACQiY,EAAY55B,EAAc,GAEhCpxD,EACQ,KACL,EAAA2kB,EAAAA,mBAAkBouD,GACrBj+C,KAAMi+C,EAAQx9C,eAAiBw9C,EAAQj+C,KACvCnnC,OAAQolF,EAAQ9xC,iBAAmB8xC,EAAQplF,QAGnC,KACL,EAAAg3B,EAAAA,mBAAkBouD,GACrBj+C,KAAMi+C,EAAQj+C,MAAQi+C,EAAQx9C,cAC9B5nC,OAAQolF,EAAQplF,QAAUolF,EAAQ9xC,gBAClCR,eAAgBsyC,EAAQtyC,gBAAkBsyC,EAAQplF,QAAUolF,EAAQ9xC,gBACpE1L,mBAAe93D,EACf+3D,uBAAmB/3D,EACnBwjE,qBAAiBxjE,EACjB45F,kBAAc55F,EACdi6F,uBAAmBj6F,EACnBk6F,2BAAuBl6F,GAI7B,IAAMwtH,EAAWjsG,KAAKw0C,KAAK,KAAMlzB,EAAKz7B,IAAKoxC,GAAMA,EAAEgN,OAAS,IAE5D,MAAO,IACF3iB,EACH,KAAK,EAAAqkB,EAAAA,mBAAkBouD,GAAU1wG,IAAI,EAAAiV,EAAAA,wBAAuB,GAAIipB,aAAa,EAAO0iB,MAAOgoE,EAAW,GAE1G,E,uDAwIO,SAAyC5tH,GAC9C,OAAIA,EAAI+zF,aACCpyE,KAAKC,QAAQ5hB,EAAIk4D,eAAiB,IAAMl4D,EAAIm4D,mBAAqB,IAAM,GAEvEn4D,EAAIk4D,aAEf,E,uBAqHO,SAA8Bl4D,GASnC,MAAO,GARMA,EAAIk4D,eAAiB,KACjBl4D,EAAI+zF,aAAgB/zF,EAAIm4D,mBAAqB,GAAM,KAC1Dn4D,EAAI4jE,iBAAkB,EAAA9Q,EAAAA,cAAa9yD,EAAI4jE,iBAAmB,UACxD5jE,EAAIg6F,eAAiB,KACS,MAAzBh6F,EAAIq6F,kBAA4B14E,KAAKC,MAAM5hB,EAAIq6F,oBAAsB,KAEpFr6F,EAAI+zF,cAA6C,MAA7B/zF,EAAIs6F,sBAAgC34E,KAAKC,MAAM5hB,EAAIs6F,wBAA0B,KACrFt6F,EAAIyW,OAAS,IAE7B,E,eArXO,SAAsBwsB,EAAc4qF,GAAkB,GAC3D,GAAIC,EAAiB7qF,EAAM4qF,GACzB,MAAO,GAAG5qF,EAAKjpC,UAAUipC,EAAK,GAAGi1B,eAAiBj1B,EAAK,GAAGw0B,OAE1D,IAAMs2D,EAAM9qF,EAAKz7B,IAAKoxC,GAAOi1E,EAASG,EAAiBp1E,GAAKq1E,EAA0Br1E,IAEtF,OADe,EAAAxxC,EAAAA,4BAA2B,EAAG2mH,GAC/BvmH,IAAK+kE,GAAMA,EAAE7kE,KAAK,MAAMA,KAAK,KAE/C,E,8EAyNO,SAAkC1H,GACvC,MAAO,IACFA,EACHkjC,YAAkC,MAArBljC,EAAIk4D,eAAgD,MAAvBl4D,EAAI4jE,mBAAoC5jE,EAAIkjC,YAE1F,E,2BAoEO,SACL3I,EACAyG,EACAz1B,GAOA,IAAMimB,EAAQ+I,EAAchJ,QAAQyP,GACpC,GAAa,MAATxP,EAAJ,CAGA,IAAMo1F,GAAY,EAAAO,EAAAA,uBAAsB5sF,EAAe/I,EAAOjmB,GAAM,GACpE,GAAiB,MAAbq7G,EAAJ,CAIA,IAAMtqB,EAAU4xB,EAAiBtH,GACjC,OAAe,MAAXtqB,EACK,CAAE9qE,MAAOo1F,EAAW5mH,IAAKs8F,QADlC,CAHA,CAJA,CAYF,E,gCAEO,SACL/hE,EACAyG,EACAz1B,GAOA,IAAMimB,EAAQ+I,EAAchJ,QAAQyP,GACpC,GAAa,MAATxP,EAAJ,CAGA,IAAMo1F,GAAY,EAAAO,EAAAA,uBAAsB5sF,EAAe/I,EAAOjmB,GAAM,GACpE,GAAiB,MAAbq7G,EAAJ,CAIA,IAAMtqB,EAAU6xB,EAAsBvH,GAEtC,MAAO,CAAE5lF,WAAYzG,EAAchJ,QAAQlzB,QAAQuoH,GAAYrkF,SAAU+5D,EAJzE,CAJA,CASF,E,4DA3FO,SAAoBr5D,EAAc4qF,GACvC,OAAO5qF,EAAKjL,OACV,CAACC,EAAMj4B,KACL,IAAIo3G,EAAYn/E,EAAKA,EAAKj+B,OAAS,GAC7B83E,EAAOslC,EAAUA,EAAUp9G,OAAS,GAwB1C,OAtBU,MAAR83E,MACE,EAAAmmC,EAAAA,eAAcnmC,EAAKxhD,OAAQtwB,EAAIswB,SAC/BwhD,EAAKra,OAASz3D,EAAIy3D,MAClBqa,EAAKpa,UAAY13D,EAAI03D,SACrBoa,EAAK5Z,gBAAkBl4D,EAAIk4D,eAC3B4Z,EAAK3Z,oBAAsBn4D,EAAIm4D,qBAC9B,EAAA8/C,EAAAA,eAAcnmC,EAAKlO,gBAAiB5jE,EAAI4jE,kBACzCkO,EAAKooB,YAAcl6F,EAAIk6F,WACtB2zB,GAAU/7C,EAAKgoB,UAAY95F,EAAI85F,SAChChoB,EAAKioB,MAAQ/5F,EAAI+5F,KACjBjoB,EAAKkoB,eAAiBh6F,EAAIg6F,cAC1BloB,EAAKnxC,WAAa3gC,EAAI2gC,UACrBktF,GAAU/7C,EAAKvmC,QAAUvrC,EAAIurC,OAC7BsiF,GAAU/7C,EAAKsoB,qBAAuBp6F,EAAIo6F,oBAC3CtoB,EAAK2/B,OAASzxG,EAAIyxG,OAChBoc,GAAU/7C,EAAKuoB,oBAAsBr6F,EAAIq6F,oBACzCwzB,GAAU/7C,EAAKwoB,wBAA0Bt6F,EAAIs6F,yBAEjDriE,EAAKr8B,KAAK,IACVw7G,EAAYn/E,EAAKA,EAAKj+B,OAAS,IAEjCo9G,EAAUx7G,KAAKoE,GACRi4B,GAET,CAAC,IAEL,E,wBA6DO,SAAkCtB,EAAYy3F,GACnD,IACI5X,EADEtH,EAAwB,GAE9B,IAAK,IAAMlgC,KAAQr4C,EAAO,CACxB,IAAMp6B,EAAM6xH,EAAMp/C,GACH,MAAXwnC,GAAmBA,IAAYj6G,GACjC2yG,EAAOtzG,KAAK,CAACozE,EAAM,IAErBkgC,EAAOA,EAAOl1G,OAAS,GAAG,IAAM,EAChCw8G,EAAUj6G,CACZ,CACA,OAAO2yG,CACT,E,wBAjVO,SAA+Bmf,GACpC,OAAO,EAAAC,EAAAA,yBAAwBD,EAAa,CAACv8C,EAAM9xE,KACjD,OAhBsC2+D,EAgBP3+D,KAhBTjG,EAgBG+3E,GAdvBra,OAASkH,EAAElH,MACb19D,EAAEu2B,SAAWquC,EAAEruC,QACfv2B,EAAEggG,MAAQp7B,EAAEo7B,KACZhgG,EAAEmgG,YAAcv7B,EAAEu7B,WAClBngG,EAAEwxC,QAAUozB,EAAEpzB,OACdxxC,EAAE4mC,WAAag+B,EAAEh+B,UACjB5mC,EAAEw0H,eAAiB5vD,EAAE4vD,cACrBx0H,EAAEqgG,qBAAuBz7B,EAAEy7B,oBAC3BrgG,EAAE03G,OAAS9yC,EAAE8yC,MAVjB,IAA0B13G,EAAgB4kE,GAkB1C,E,4DAwGO,SAAsB17B,GAC3B,OAAOA,EAAKhZ,MAAO2uB,IAAOA,EAAE1V,YAC9B,E,yBA2EO,SAAgCD,GACrC,OAAuB,IAAhBA,EAAKjpC,QAAgBw0H,EAAgBvrF,EAC9C,E,uHAzGO,SAAwBwrF,EAAYC,GACzC,OAAO,EAAAzW,EAAAA,eAAcwW,EAAKn+F,OAAQo+F,EAAKp+F,SAAWm+F,EAAKv2D,gBAAkBw2D,EAAKx2D,eAAiBu2D,EAAK10B,MAAQ20B,EAAK30B,GACnH,E,iBA6FO,SAAwB92D,GAC7B,OAAOA,EAAKjpC,OAAS,GAAKipC,EAAKnlB,KAAM86B,GAAMinD,EAAmBjnD,GAChE,E,kCA6BO,SAAyC54C,GAC9C,OAAIA,EAAI+zF,aACCpyE,KAAKw0C,IAAIn2D,EAAIk4D,eAAiB,EAAGl4D,EAAIm4D,mBAAqB,GAE1Dn4D,EAAIk4D,aAEf,E,uCAhNO,SAA8Bl4D,EAAW6tH,EAAiBh8G,GAC/D,IAAM88G,EAA4B3uH,EAAI4jE,iBAAmB5jE,EAAIswB,OAC7D,MAAO,CACLmnC,KAAMo2D,EAASG,EAAiBhuH,GAAOiuH,EAA0BjuH,GACjE+5F,IAAK/5F,EAAIg6F,cAAcl9F,YAAckD,EAAI+5F,KAAKj9F,WAC9CwzB,OAAQu9F,EACJ7tH,EAAIswB,QAAUtwB,EAAIojE,gBAChB,EAAA2xC,EAAAA,gBAAe/0G,EAAIswB,QAAQ,QAC3BlwB,EACFuuH,GACE,EAAA5Z,EAAAA,gBAAe4Z,GAA2B,QAC1CvuH,EACNmwD,KAAMo+D,GAA2Bp+D,MAAQ1+C,EACzCqoF,UAAWl6F,EAAIk6F,UACfh3D,YAAa0rF,EAAoB5uH,GACjC6uH,YAAiC,MAApB7uH,EAAIg6F,cAAwBh6F,EAAIg6F,cAAgBh6F,EAAI+5F,KAAO,GACxE+0B,UAA0B,MAAf9uH,EAAI03D,QAAuC,MAArB13D,EAAIk4D,eAAyBl4D,EAAIk4D,eAAiBl4D,EAAI03D,aAAUt3D,EACjGugC,SAAUktF,EAAS7tH,EAAI2gC,SAAW3gC,EAAIq6F,kBACtCk0B,aAAcV,OAASztH,EAAYJ,EAAIs6F,sBACvCF,mBAAoByzB,EAAS7tH,EAAIo6F,wBAAqBh6F,EACtDmrC,MAAOsiF,EAAS7tH,EAAIurC,WAAQnrC,EAC5BqxG,KAAMzxG,EAAIyxG,KAEd,E,0CAsGO,SAA8BxuE,GACnC,OAAoB,IAAhBA,EAAKjpC,OACA,eAELw0H,EAAgBvrF,GACX,UAEA,cAEX,E,kBAEO,SAAyBA,GAC9B,OAAI0kF,EAAiB1kF,GACZ,UACE8rF,EAAwB9rF,GAC1B,WACGurF,EAAgBvrF,GAGnB,SAFA,cAIX,E,oBAuMO,SAA2BjjC,GAChC,IAAMy3D,EAAOz3D,EAAIy3D,MAAQ,EACnBC,EAAU13D,EAAI03D,UAAY,EAC1BE,EAAI53D,EAAIswB,QAAS,EAAAwiC,EAAAA,cAAa9yD,EAAIswB,QAAU,OAC5CypE,EAAM/5F,EAAI+5F,MAAQ,EAClBE,EAASj6F,EAAIi6F,OAAS,EAAI,EAC1B1uD,EAAQvrC,EAAIurC,QAAU,EACtB5K,EAAW3gC,EAAI2gC,WAAa,EAC5Bu9E,EAAWl+G,EAAIo6F,mBAAqB,EAAI,EACxCiF,EAAQr/F,EAAI85F,QAAU,EAAI,EAC1BrjF,EAAQzW,EAAIyW,OAAS,GAE3B,MAAO,GAAGghD,KAAQC,KAAWE,KADX53D,EAAIk6F,UAAY,EAAI,KACSH,KAAOE,KAAU1uD,KAAS5K,KAAYu9E,KAAY7e,KAAS5oF,GAC5G,E,aA3KO,SAAoBzW,GACzB,MAAO,IAAG,EAAAy+G,EAAAA,kBAAiBz+G,EAAIswB,YAAW,EAAAmuF,EAAAA,kBAAiBz+G,EAAI4jE,oBAAoB5jE,EAAIy3D,QAAQz3D,EAAI03D,WAAW13D,EAAI85F,WAAW95F,EAAI+5F,OAAO/5F,EAAIk6F,aAAal6F,EAAIk4D,iBAAiBl4D,EAAIm4D,qBAAqBn4D,EAAIg6F,gBAAgBh6F,EAAIkjC,eAAeljC,EAAIq6F,qBAAqBr6F,EAAIs6F,uBAC7Q,E,cA2KO,SAAqBr3D,EAAcstB,GACxC,OAAO,EAAA2a,EAAAA,kBACLjoC,EAAKjL,OAAO,CAACC,EAAMj4B,KAAQ,EAAAu9F,EAAAA,YAAWtlE,EAAM0nE,EAAe3/F,EAAKuwD,KAAQ,EAAA7/B,EAAAA,cAAa,EAAG6/B,IACxFA,EAEJ,EArbA,IAAA/vD,EAAAF,EAAA,OACAg0B,EAAAh0B,EAAA,OAaAozB,EAAApzB,EAAA,OACAgT,EAAAhT,EAAA,OACAy8C,EAAAz8C,EAAA,OAwIO,SAAS0tH,EAAiBhuH,GAC/B,IAAMy3D,EAAsB,MAAfz3D,EAAI03D,QAAkB,GAAG13D,EAAI03D,WAAW13D,EAAIy3D,MAAQ,IAAM,GAAGz3D,EAAIy3D,MAAQ,IACtF,OAAOz3D,EAAI85F,QAAU,GAAGriC,KAAU,GAAGA,GACvC,CAEO,SAASw2D,EAA0BjuH,GACxC,OAA4B,MAArBA,EAAIk4D,cACP,GAA4B,MAAzBl4D,EAAIm4D,kBAA4B,GAAGn4D,EAAIm4D,qBAAuB,KAAKn4D,EAAIk4D,gBAC1E,GACN,CAEO,SAAS41D,EAAiB7qF,EAAc4qF,GAC7C,IAAMmB,EAAW/rF,EAAK,IAAIw0B,KAC1B,OAAIx0B,EAAKjpC,OAAS,GACTipC,EAAKhZ,MACT2uB,GAA6C,OAAtCi1E,EAASj1E,EAAE6e,KAAO7e,EAAEsf,iBAA2B21D,EAASj1E,EAAE6e,KAAO7e,EAAEsf,iBAAmB82D,EAKpG,CAMO,SAASrB,EAAY55B,EAAuBnuC,GACjD,MAAO,CACLnvB,MAAO,MACPmvB,QACA5gD,IAAI,EAAAiV,EAAAA,wBAAuB,GAC3BmpD,oBAAgBhjE,EAChBkwB,YAAQlwB,EACR2zF,eACAt8B,UAAMr3D,EACN05F,SAAS,EACTI,WAAW,EACXh3D,aAAa,EAEjB,CAEO,SAASykF,EAAiB1kF,GAC/B,OAAOA,EAAKjpC,OAAS,GAAKipC,EAAKhZ,MAAOjqB,GAAQ4uH,EAAoB5uH,GACpE,CAyBO,SAAS4uH,EAAoB5uH,GAClC,OAAyB,MAArBA,EAAIk4D,eAAgD,MAAvBl4D,EAAI4jE,mBAE/B5jE,EAAIkjC,cACO,MAAZljC,EAAIy3D,MAAgBz3D,EAAIk4D,eAAiBl4D,EAAIy3D,QAC/B,MAAdz3D,EAAIswB,SAAkB,EAAAorC,EAAAA,YAAW17D,EAAI4jE,gBAAiB5jE,EAAIswB,QAKjE,CAEO,SAAS2+F,EAA2BjvH,GACzC,OAAyB,MAArBA,EAAIk4D,eAAgD,MAAvBl4D,EAAI4jE,kBAElB,MAAd5jE,EAAIswB,SAAkB,EAAAorC,EAAAA,YAAW17D,EAAI4jE,gBAAiB5jE,EAAIswB,WAC3C,MAAftwB,EAAI03D,QAAkB13D,EAAIk4D,eAAiBl4D,EAAI03D,QAAsB,MAAZ13D,EAAIy3D,MAAgBz3D,EAAIk4D,eAAiBl4D,EAAIy3D,KAK7G,CAMO,SAAS+2D,EAAgBvrF,GAC9B,OAAOA,EAAKjpC,OAAS,GAAKipC,EAAKhZ,MAAO2uB,GAAMinD,EAAmBjnD,GACjE,CAMO,SAASinD,EAAmBjnD,GACjC,QAASA,EAAE1V,WACb,CAMO,SAAS6rF,EAAwB9rF,GACtC,OAAOA,EAAKnlB,KAAM86B,GAAmB,MAAbA,EAAE8e,UAAoBz0B,EAAKhZ,MAAO2uB,GAAMq2E,EAA2Br2E,GAC7F,CAyBO,SAAS+mD,EAAe3/F,EAAWuwD,GACxC,IAAM2+D,EACJlvH,EAAI+zF,cAAyC,MAAzB/zF,EAAIm4D,mBACnBn4D,EAAIk4D,eAAiB,IAAMl4D,EAAIm4D,mBAAqB,GACpDn4D,EAAIk4D,eAAiB,EAC5B,OAAO,EAAA07B,EAAAA,iBAAgB5zF,EAAI4jE,iBAAmB5jE,EAAIswB,SAAU,EAAAI,EAAAA,cAAa,EAAG6/B,GAAO2+D,EACrF,CAoCO,SAAShB,EAAiB18F,GAC/B,MAAO,IAAIA,EAAMoR,cAAepR,EAAMyR,MAAMnlC,OAAQ86C,IAAOA,EAAE1V,aAAa,EAC5E,CAEO,SAASirF,EAAsB38F,GACpC,MAAO,IAAIA,EAAMoR,cAAepR,EAAMyR,MAAM4kB,UAAWjP,IAAOA,EAAE1V,YAClE,C,gHChCO,SAAwC7U,GAC7C,OAAO,EAAA+4B,EAAAA,oBAAmB/4B,EAASiR,UAAW,CAAC4O,EAAGlS,KAAOA,GAAGuvC,UAC9D,E,yBA4DO,SAAgCz4D,EAAqB5V,EAAqBuyD,IAC/E,EAAA60B,EAAAA,gBACExxE,GACA,EAAA4b,EAAAA,MACG7yB,EAAE,mBACFusC,aAAc+mF,GAAoBC,EAAwBD,EAAiBjyH,EAAMuyD,IACpF,4BAA2B,EAAAh+B,EAAAA,gBAAev0B,UAAY,EAAAu0B,EAAAA,gBAAeg+B,KAEzE,E,gCAnRO,SAAuCphC,EAAqBm/B,GAejE,MAde,IACVn/B,EACHiR,UAAW,IACNjR,EAASiR,aACTkuB,EAAgBtuB,iBAErBvD,OAAQ,IACHtN,EAASsN,OACZqN,QAAS3a,EAASsN,OAAOqN,SAAWwkB,EAAgBn/B,SAASsN,QAAQqN,QACrEqmC,OAAQhhD,EAASsN,OAAO0zC,QAAU7hB,EAAgBn/B,SAASsN,QAAQ0zC,QAErEt+C,aAAc,IAAK1C,EAAS0C,gBAAiBy8B,EAAgBn/B,SAAS0C,cACtE8yC,gBAAiB,IAAKx1C,EAASw1C,mBAAoBrW,EAAgBn/B,SAASw1C,iBAGhF,E,kCAsCO,SACLx1C,EACAggF,EACA/tD,GAIA,IAAMvvB,EAAes+F,EAAmBhhG,EAAS0C,aAAcs9E,EAAOt9E,aAAcuvB,GAASgvE,kBACvFC,EACuB,MAA3BlhB,EAAOkhB,kBAA4BjvE,GAASkvE,qBAAqBx1H,OAC7Dq1H,EAAmBhhG,EAASkhG,kBAAoB,CAAC,EAAGlhB,EAAOkhB,iBAAkBjvE,GAASkvE,qBACtFnhG,EAASkhG,iBAET19G,EAAQw8F,EAAOx8F,OAASwc,EAASxc,MACvC,MAAO,IACFwc,EACHxc,QACAyc,KAAMzc,IAAUwc,EAASxc,OAAQ,EAAA2c,EAAAA,uBAAsBH,EAASC,KAAMzc,GAASwc,EAASC,KAExFqN,OAAyB,MAAjB0yE,EAAO1yE,OAAiB,IAAKtN,EAASsN,UAAW0yE,EAAO1yE,QAAWtN,EAASsN,OACpF1L,QAASw/F,EAAmBphG,EAAS4B,QAASo+E,GAC9C9pC,aAAcmrD,EAAwBrhG,EAASk2C,aAAc8pC,EAAQ/tD,GAASqvE,iBAC9E5+F,eACA8yC,gBAC4B,MAA1BwqC,EAAOxqC,gBACH,IAAKx1C,EAASw1C,mBAAoBwqC,EAAOxqC,iBACzCx1C,EAASw1C,gBACfvkC,UAA+B,MAApB+uE,EAAO/uE,UAAoB,IAAKjR,EAASiR,aAAc+uE,EAAO/uE,WAAcjR,EAASiR,UAChGiwF,mBAEJ,E,qFAiMO,SAAuCz8G,EAAqBub,IACjE,EAAAi2D,EAAAA,gBACExxE,GACA,EAAA4b,EAAAA,MACG7yB,EAAE,mBACFusC,aAAcy7B,IACN,IAAKA,KAAoBx1C,KAEpC,yBAEJ,E,oCAEO,SAA2C9gB,EAAmB8gB,GACnE,OAAOuhG,EAAmCriH,EAAS8gB,GAAUr0B,OAAS,CACxE,E,oEAlFO,SAAS61H,EAA2BhnH,EAAmBinH,GAC5D,IACIC,EADEnqE,EAAQoqE,EAAAA,YAAY3xH,QAAQwK,GAYlC,MAHuB,sBANrBknH,GADa,IAAXnqE,GAEOA,IAAUoqE,EAAAA,YAAYh2H,OAAS,EADvBg2H,EAAAA,YAAY,GAIZA,EAAAA,YAAYpqE,EAAQ,KAEMkqE,IAC3CC,EAAiBF,EAA2B,mBAAoBC,IAE3DC,CACT,E,uBAmHO,SAA8B1hG,EAAqB4hG,GACxD,GAAyB,MAArB5hG,EAAStR,SACX,OAAOmzG,EAAc7hG,EAAStR,UAEhC,IAAMozG,EATe,GASWF,EAChC,OAAOC,EAAcvuG,KAAKC,MAAMuuG,EAASC,GAAkBA,EAC7D,E,qDAhCO,SACLt9G,EACA+/B,EACAh4C,EACAwzB,IAEA,EAAAi2D,EAAAA,gBACExxE,GACA,EAAA4b,EAAAA,MACG7yB,EAAE,gBACFusC,aAAcj+B,IACb,IAAM5N,GAAM,EAAAk1B,EAAAA,gBAAeohB,GAC3B,MAAO,IAAK1oC,EAAM,CAAC5N,GAAM,IAAK4N,EAAK5N,GAAM68D,IAAKv+D,MAElD,gBAAe,EAAAw1H,EAAAA,6BAA2B,EAAA1nD,EAAAA,cAAa91B,EAAcxkB,EAASiR,WAAYjR,UAAgB,EAAAykC,EAAAA,cAAaj4D,KAE3H,E,4DA3FO,SAAwCiY,EAAqBvW,IAClE,EAAA+nF,EAAAA,gBACExxE,GACA,EAAA4b,EAAAA,MACG7yB,EAAE,oBACFusC,aAAckoF,GAAYC,EAAuBD,EAAS/zH,IAC7D,2BAA2BA,IAE/B,E,+BAtDO,SAAsCu+E,EAAkBhlE,GAC7D,IAAM06G,EAAUC,EAAkC31C,EAAOhlE,GACzD46G,EAAkDF,EAAQniG,SAAlDxc,EAAK6+G,EAAL7+G,MAAO8pB,EAAM+0F,EAAN/0F,OAAQ5K,EAAY2/F,EAAZ3/F,aAAiB4/F,GAAK,EAAAvuG,EAAA1d,SAAAgsH,EAAAruG,GAC7C,OACEhmB,OAAOuB,KAAK+yH,GAAO32H,OAAS,GAC5Bw2H,EAAQI,wBAAwB52H,OAAS,GACzCw2H,EAAQK,2BAA2B72H,OAAS,GAC5Cw2H,EAAQM,uBAAuB92H,OAAS,GACxC6X,IAAUipE,EAAMjpE,OAChB8pB,GAAQqN,UAAY8xC,EAAMn/C,OAAOqN,UAChC+nF,EAAYhgG,EAAc+pD,EAAM/pD,aAErC,E,4BArHO,SACLigG,EACAC,GAEA,IAAM5iG,EAAWq/B,EAAesjE,GAAQn/G,OACxC,MAAO,IACFwc,EACHiR,UAAW,IAAKjR,EAASiR,aAAc0xF,GAAQ1xF,aAAc2xF,GAC7Dt1F,OAAQ,IAAKtN,EAASsN,OAAQqN,QAASgoF,GAAQr1F,OAAOqN,SAAW3a,EAASsN,OAAOqN,SACjF/Y,QAAS+gG,GAAQ/gG,SAAW5B,EAAS4B,QACrCs0C,aAAcysD,GAAQzsD,cAAgBl2C,EAASk2C,aAC/CxzC,aAAc,IAAK1C,EAAS0C,gBAAiBigG,GAAQjgG,cACrD8yC,gBAAiB,IAAKx1C,EAASw1C,mBAAoBmtD,GAAQntD,iBAC3D0rD,iBAAkByB,GAAQzB,iBAE9B,E,2KA1MAlvD,EAAA//D,EAAA,OAaAs/E,EAAAt/E,EAAA,OACAs0B,EAAAt0B,EAAA,OACAg0B,EAAAh0B,EAAA,OACAw7C,EAAAx7C,EAAA,OACAozB,EAAApzB,EAAA,OACA6yB,EAAA7yB,EAAA,OACA8yB,EAAA9yB,EAAA,OAEA0zB,EAAA1zB,EAAA,OACAE,EAAAF,EAAA,OACAo9F,EAAAp9F,EAAA,OACA+nG,EAAA/nG,EAAA,OAAgE+hB,EAAA,kCAGzD,SAAS6uG,IACd,MAAO,CACLv1F,OAAQ,CACN0zC,OAAQ,GACRrmC,QAAS,IACTpN,SAAU,IACVkc,SAAU,GAEZjmC,MAAO,KACPoe,QAASkhG,IAEb,CAEO,SAASzjE,EAAe77C,EAAe,MAC5C,MAAO,IACFq/G,IACHr/G,QACAu/G,eAAgB,CACdC,aAAa,EACbC,kBAAkB,EAClBC,aAAa,GAEfxgG,aAAc,CAAC,EACfygG,aAAc,CAAC,EACfC,sBAAuB,CACrBC,eAAe,GAEjBpjG,KAAM,CACJ,CACEmI,MAAO,MACPzxB,GAAI,UACJ/H,KAAM,OACN80B,WAAW,EAAA07C,EAAAA,yBAAwB57D,KAIvCwxD,YAAa,GACb9hC,OAAQ,EACRC,WAAW,EACX+6D,qBAAqB,EACrBj5C,YAAa,KACbugB,gBAAiB,CACfC,WAAY,UAEd6tD,aAAc,CAAErhG,OAAQ,CAAEA,QAAQ,GAAQt2B,OAAQ,CAAC,EAAG2lE,WAAY,CAAC,GACnErgC,UAAW,CAAC,EACZokC,OAAQ,CAAEA,OAAQ,GAAIjtC,MAAO,UAC7BxG,QAASkhG,IACT5sD,aAAc,CACZ9tC,MAAO,yBACPtsB,KAAM,CAAC,GAGb,CAEO,SAASgnH,IACd,IAAMlhG,GAAU,EAAA2hG,EAAAA,0BACd,CACEC,gBAAiB,GACjBC,mBAAoB,GACpBlqB,gBAAiB,CAAC,EAClBE,gBAAiB,CAAC,EAClB5S,oBAAqB,IAEvB,YAGF,MAAO,IACFjlE,EACH23E,gBAAiB,IAAK33E,EAAQ23E,gBAAiBW,UAAW,CAAC,GAAI,IAAKC,KAAM,CAAC,GAAI,IAAKE,SAAU,CAAC,GAAI,KACnGZ,gBAAiB,IAAK73E,EAAQ63E,gBAAiBS,UAAW,EAAGC,KAAM,EAAGE,SAAU,GAEpF,CAoBA,SAAS2mB,EACP2B,EACA3iB,EACA0jB,GAEA,IAAMloH,EAAS,IAAKmnH,KAAW3iB,GAC/B,IAAK,IAAM9xG,KAAOw1H,GAAe,UACxBloH,EAAOtN,GAEhB,OAAOsN,CACT,CAEA,SAAS4lH,EAAmBx/F,EAA2Bo+E,GACrD,IAAMp9E,EAAUo9E,EAAO2jB,eAAiB3jB,EAAOp+E,QAC/C,OAAe,MAAXgB,EACKhB,EAEF,IACFA,KACAgB,EACH22E,gBAAiB,IAAK33E,EAAQ23E,mBAAoB32E,EAAQ22E,iBAC1DE,gBAAiB,IAAK73E,EAAQ63E,mBAAoB72E,EAAQ62E,iBAE9D,CAEA,SAAS4nB,EACPnrD,EACA8pC,EACA0jB,GAEA,OAAiC,MAA7B1jB,EAAO4jB,oBAA8BF,GAAa/3H,OAC7C,IAAKuqE,EAAcp6D,KAAMklH,EAAmB9qD,EAAap6D,KAAMkkG,EAAO4jB,mBAAoBF,IAE5F1jB,EAAO9pC,cAAgBA,CAChC,CA0DA,IAAM2tD,EAAwD,CAC5D,8BACA,aACA,gCAGF,SAASnB,EAAYh3H,EAAY4kE,GAC/B,OAAI5kE,IAAM4kE,GAGD,MAAL5kE,GAAkB,MAAL4kE,GAA0B,iBAAN5kE,GAA+B,iBAAN4kE,GAGvDx5D,KAAKC,UAAUrL,KAAOoL,KAAKC,UAAUu5D,EAC9C,CAEA,SAASwzD,EACPn5B,EACAljF,GAEA,IAAMypG,EAA6B,CAAC,EACpC,IAAK,IAAMhjH,KAAOF,OAAOuB,KAAKkY,GAAU,CACtC,IAAMjb,EAAQib,EAAQvZ,GACT,MAAT1B,GAAkBk2H,EAAYl2H,EAAOm+F,EAAQz8F,MAC/CgjH,EAAQhjH,GAAO1B,EAEnB,CACA,IAAMk3H,EAAc11H,OAAOuB,KAAKo7F,GAASl7F,OAAQvB,GAAwB,MAAhBy8F,EAAQz8F,IAAgC,MAAhBuZ,EAAQvZ,IACzF,MAAO,CAAEgjH,UAASwS,cACpB,CAEA,IAAMK,EAA0F,CAC9F,sBACA,kBACA,sBAqBK,SAAS3B,EAAkCz3B,EAAoBljF,GACpE,IAAMwpB,EAAY6yF,EAAen5B,EAAQ15D,UAAWxpB,EAAQwpB,WAAWigF,QACjE+Q,EAAU6B,EAAen5B,EAAQu2B,kBAAoB,CAAC,EAAGz5G,EAAQy5G,kBAAoB,CAAC,GACtFhrD,EAAe4tD,EAAen5B,EAAQz0B,aAAap6D,KAAM2L,EAAQyuD,aAAap6D,MAC9E8lB,EAtBR,SAAuB+oE,EAA2BljF,GAChD,IAAMjM,GAAoC,EAAA8jD,EAAAA,kBACxC73C,EACAs8G,EAAkBt0H,OAAQvB,GAAQuZ,EAAQvZ,KAASy8F,EAAQz8F,KAEvDqrG,EAAkBuqB,EAAen5B,EAAQ4O,gBAAiB9xF,EAAQ8xF,iBAAiB2X,QACrFljH,OAAOuB,KAAKgqG,GAAiB5tG,OAAS,IACxC6P,EAAO+9F,gBAAkBA,GAE3B,IAAME,EAAkBqqB,EAAen5B,EAAQ8O,gBAAiBhyF,EAAQgyF,iBAAiByX,QAIzF,OAHIljH,OAAOuB,KAAKkqG,GAAiB9tG,OAAS,IACxC6P,EAAOi+F,gBAAkBA,GAEpBj+F,CACT,CAQkBmoH,CAAch5B,EAAQ/oE,QAASna,EAAQma,SACjDoiG,GAAiB,EAAA1kE,EAAAA,kBACrB73C,EAAQ+tD,gBACRquD,EAAmBp0H,OAAQvB,GAAQuZ,EAAQ+tD,gBAAgBtnE,KAASy8F,EAAQn1B,gBAAgBtnE,KAE9F,MAAO,CACL8xB,SAAU,CACRxc,MAAOiE,EAAQjE,MACf8pB,OAAQ,CAAEqN,QAASlzB,EAAQ6lB,OAAOqN,SAClCjY,aAAcjb,EAAQib,gBAClB10B,OAAOuB,KAAKqyB,GAASj2B,OAAS,EAAI,CAAEg4H,cAAe/hG,GAAY,CAAC,KAChE5zB,OAAOuB,KAAK2mE,EAAag7C,SAASvlH,OAAS,EAAI,CAAEi4H,mBAAoB1tD,EAAag7C,SAAY,CAAC,KAC/FljH,OAAOuB,KAAK0hC,GAAWtlC,OAAS,EAAI,CAAEslC,aAAc,CAAC,KACrDjjC,OAAOuB,KAAK0yH,EAAQ/Q,SAASvlH,OAAS,EAAI,CAAEu1H,iBAAkBe,EAAQ/Q,SAAY,CAAC,KACnFljH,OAAOuB,KAAKy0H,GAAgBr4H,OAAS,EAAI,CAAE6pE,gBAAiBwuD,GAAmB,CAAC,GAEtFzB,wBAAyBuB,EAAen5B,EAAQjoE,aAAcjb,EAAQib,cAAcghG,YACpFlB,2BAA4BP,EAAQyB,YACpCjB,uBAAwBvsD,EAAawtD,YAEzC,CAoCO,SAASxB,EACdD,EACA/zH,GAEA,GAAI+zH,IAAU/zH,GAAM,CAClB,IAAMM,EAAO,IAAKyzH,GAElB,cADOzzH,EAAKN,GACLM,CACT,CACA,MAAO,IAAKyzH,EAAS,CAAC/zH,IAAM,EAC9B,CAYO,IAAM+1H,EAA4Bz4H,EAAAA,6BAAG,EAMrC,SAASu1H,EACdD,EACAjyH,EACAuyD,GAEA,IAAM8iE,GAAU,EAAA9gG,EAAAA,gBAAev0B,GACzBs1H,GAAQ,EAAA/gG,EAAAA,gBAAeg+B,GACvB6sB,EAAW6yC,IAAkBoD,IAAY,GAC/C,MAAO,IACFpD,EACH,CAACoD,GAAU,CAACC,KAAUl2C,EAASx+E,OAAQvB,GAAQA,IAAQi2H,IAAQz1H,MAAM,EAAGu1H,GAE5E,CA4BO,SAAS1C,EAAmCriH,EAAmB8gB,GACpE,IAAMwgF,GAAkB,EAAA1+E,EAAAA,kBAAiB5iB,EAAS8gB,GAC5CokG,GAAmB,EAAAxkB,EAAAA,oCAAmCY,GAAiB/wG,OAAQ4T,IAC5E,EAAAkjG,EAAAA,4BAA2BljG,IAU9B4tB,GARgB,EAAAozF,EAAAA,4BACpBD,EACG30H,OAAQ4T,GACqE,MAArE2c,EAAS0C,cAAa,EAAAU,EAAAA,gBAAe/f,EAASmhC,gBAAgBumB,KAEtE5xD,IAAKkK,GAAaA,EAASmhC,cAC7B54C,IAAM,EAAAw3B,EAAAA,gBAAex3B,IAEQuN,IAAKvN,IAAM,EAAA0uE,EAAAA,cAAa1uE,EAAGo0B,EAASiR,YACpE,OAAO,EAAAwjC,EAAAA,sBAAqBxjC,EAAW,CAACvlC,EAAG4kE,KAClC,EAAA0xD,EAAAA,4BAA2Bt2H,EAAGs0B,GAAU2zD,eAAc,EAAAquC,EAAAA,4BAA2B1xD,EAAGtwC,IAE/F,CAoBO,IAAMskG,EAAa94H,EAAAA,cAAG,GAChB+4H,EAAa/4H,EAAAA,cAAG,GAChBu2H,EAAcv2H,EAAAA,eAAG,EAc9B,SAASq2H,EAAc9xG,GACrB,OAAOuD,KAAKw0C,IAAIw8D,EAAehxG,KAAKu0C,IAAI08D,EAAex0G,GACzD,C,6EC9OO,SAAoBnZ,GAOzB,MAAO,CACL8pB,SAAU,CAAC,EACXI,SAAU,CAACyH,EAAAA,sBACXC,cAAe,GACfH,QAAS,CAAEC,MAAO,CAAC,GACnBrB,aAAcrwB,EAAKqwB,aACnBzvB,QAASZ,EAAKY,UAAW,EAAAuwB,EAAAA,sBACzBxlB,KAAM3L,EAAK9E,OAAS,CAAE+F,MAAOjB,EAAK9E,OAAQ6E,GAAIC,EAAK9E,aAAWC,EAC9DklB,OAAQ,CAAC,EACTwR,UAAW,CAAC,EACZC,iBAAiB,EACjB5B,SAAUlwB,EAAKkwB,OACflqB,SAAUhG,EAAKgG,SACfgsB,kBAAmB,CAAC,EAExB,E,iBAcO,SACLnkB,EACAilB,EACAtI,GAGA3c,EAAS,CAAEjK,KAAM,iBAAkBkvB,eADhB59B,MAAME,QAAQ09B,GAAkBA,EAAiB,CAACA,GACNtI,QACjE,E,iBAfO,SACL3c,EACAipB,EACAtM,GAEA3c,EAAS,CAAEjK,KAAM,iBAAkBkzB,gBAAetM,QACpD,E,cAVO,SAAqB3c,EAAqBipB,EAAgDtM,GAC/F3c,EAAS,CAAEjK,KAAM,cAAekzB,gBAAetM,QACjD,EAzOA,IAAAyD,EAAA5yB,EAAA,MAiBAgzB,EAAAhzB,EAAA,M,0FC4CO,SAAiC+vB,GACtC,IAAM8mC,GAAU,EAAAoT,EAAAA,wBAAuBl6C,EAAMsvC,WAAWzoB,SAAW,GAAI,aAAa,GACpF,OAAOigB,EAAQ,IAAIt8D,KACrB,E,yEAjBO,SAAiDw1B,EAAehC,GACrE,IAAMwkG,EAA0BxkG,EAASmjG,aAAalhG,QAAQuiG,wBAC9D,IAAKA,EACH,OAAOC,EAA2BziG,GAEpC,IAAM8mC,GAAU,EAAAoT,EAAAA,wBAAuBl6C,EAAMC,OAAOA,QAAU,GAAI,aAAa,GAC/E,GAAI6mC,EAAQn9D,OAAS64H,EACnB,OAAOC,EAA2BziG,GAEpC,IAAM0iG,EAAgB57D,EAAQp6D,MAAM,EAAG81H,GACjCG,EAAcD,EAAc/6F,OAAO,CAAC8pC,EAAKkN,KAAS,EAAAuuB,EAAAA,YAAWz7B,EAAKkN,EAAKn0E,QAAQ,EAAA61B,EAAAA,cAAa,EAAGrC,EAASxc,QAC9G,OAAO,EAAAohH,EAAAA,eAAcD,EAAaD,EAAc/4H,OAClD,E,iBAWO,WACL,MAAO,CACLs2B,OAAQ,CAAC,EACTqvC,WAAY,CAAC,EACb3lE,OAAQ,CAAC,EAEb,E,0BAVO,SAAkE2oE,EAAyB9nE,GAChG,OAAO,EAAAioE,EAAAA,sBAAqB,CAACjoE,KAAW8nE,GAAU,IAAM,CAAC5oE,EAAG4kE,IAAMA,EAAE7zD,UAAY/Q,EAAE+Q,UACpF,E,gBAUO,SAAuBulB,GAM5B,OAA4B,IALG,KAC1B,EAAAgB,EAAAA,kBAAiBhB,EAAMC,QAAQxyB,OAAQowC,IAAO7d,EAAMC,OAAO4d,IAAM,IAAIl0C,OAAS,OAC9E,EAAAq3B,EAAAA,kBAAiBhB,EAAMsvC,YAAY7hE,OAAQowC,IAAO7d,EAAMsvC,WAAWzxB,IAAM,IAAIl0C,OAAS,OACtF,EAAAq3B,EAAAA,kBAAiBhB,EAAMr2B,QAAQ8D,OAAQowC,IAAO7d,EAAMr2B,OAAOk0C,IAAM,IAAIl0C,OAAS,IAElEA,MACnB,E,aApFO,SAAoBuC,GACzB,OAAQA,GACN,IAAK,YACH,MAAO,aACT,IAAK,aACH,MAAO,cACT,IAAK,WACH,MAAO,YACT,IAAK,YACH,MAAO,aACT,IAAK,QACH,MAAO,QACT,IAAK,cACH,MAAO,eACT,IAAK,eACH,MAAO,gBACT,IAAK,OACH,MAAO,OACT,IAAK,OACH,MAAO,OACT,IAAK,YACH,MAAO,YACT,IAAK,YACH,MAAO,aACT,IAAK,aACH,MAAO,cACT,IAAK,QACH,MAAO,QACT,IAAK,SACH,MAAO,aACT,IAAK,UACH,MAAO,UACT,IAAK,QACH,MAAO,QACT,IAAK,WACH,MAAO,WACT,IAAK,UACH,MAAO,UAEb,EA3CA,IAAAiE,EAAAF,EAAA,OACAozB,EAAApzB,EAAA,OACAg0B,EAAAh0B,EAAA,OA2CO,SAASwyH,EAA2BziG,GACzC,IAAM8mC,GAAU,EAAAoT,EAAAA,wBAAuBl6C,EAAMC,OAAOA,QAAU,GAAI,aAAa,GAC/E,OAAO6mC,EAAQ,IAAIt8D,KACrB,C,qGCwBO,SAAoEgL,EAAYoF,GACrF,IAAMioH,EAAiB,IAAIC,EAAAA,eAAeC,EAAAA,sBAAuB,CAAEnoH,aAC7DH,EAAYC,KAAKC,MACjBqoH,EAAiBH,EAAeI,aAAaztH,EAASA,EAAQ+F,WAAa,CAAC,EAAGd,GACrF,MAAO,IACFjF,EACH+F,UAAWynH,EAEf,E,cAsBO,SACL19F,EACA49F,GAEA,GAAI59F,EAAc,CAChB,IAAIH,GAAe,EAAA+U,EAAAA,eAAc5U,GACL69F,EAAiBh+F,EAAci+F,EAAAA,SAAU,WAC5CvpH,UACvByrB,EAAa2Q,QAAU,iBACvB9Q,GAAe,EAAA+U,EAAAA,eAAc5U,IAE/B,IAAM9rB,EAAS0pH,EACXG,EAA0Bl+F,EAAci+F,EAAAA,SAAU,WAClDD,EAAiBh+F,EAAci+F,EAAAA,SAAU,WAC7C,OAAI5pH,EAAOK,QACF,CAAEA,SAAS,EAAMC,KAAMN,EAAOM,MAEhCN,CACT,CACE,MAAO,CAAEK,SAAS,EAAOpB,MAAO,CAAC,0BAErC,E,kDAEO,SACL6lB,EACA4kG,GAEA,IAAM1tH,EAAUuwB,IAChBvwB,EAAQygC,QAAU,iBAClBzgC,EAAQC,QAAU,CAAC6oB,GACnB,IACMglG,GADW,EAAAppF,EAAAA,eAAc1kC,GACCC,QAAQ,GACxC,IAAK6tH,EACH,MAAO,CAAEzpH,SAAS,EAAOpB,MAAO,CAAC,qCAEnC,IAAMe,EAAS0pH,EACXG,EAA0BC,EAAsDC,EAAAA,eAAgB,YAChGJ,EAAiBG,EAAsDC,EAAAA,eAAgB,YAC3F,OAAI/pH,EAAOK,QACF,CAAEA,SAAS,EAAMC,KAAMwpH,GAEzB,CAAEzpH,SAAS,EAAOpB,MAAOe,EAAOf,MACzC,E,oBAiEO,SAA2Bq6D,EAAqB0wD,GACrD,IAAM1wD,GAAY0wD,IAAeA,GAAY1wD,EAC3C,OAAO,EAET,IAAKA,IAAa0wD,EAChB,OAAO,EAET,IAAA5sH,EAA0Fk8D,EAApB2wD,GAAtC7sH,EAAxB8sH,WAAkC9sH,EAARjC,GAA+BiC,EAArB2E,WAAyC,EAAAwW,EAAA1d,SAAAuC,EAAAob,IACrFtU,EAA0F8lH,EAApBG,GAAtCjmH,EAAxBgmH,WAAkChmH,EAAR/I,GAA+B+I,EAArBnC,WAAyC,EAAAwW,EAAA1d,SAAAqJ,EAAA6wE,IAErF,QADiB,EAAA7uD,EAAAA,qBAAoB+jG,EAAiBE,EAAiB,CAAC,WAE1E,E,wBAEO,SAA+BnuH,GACpC,OAA2B,MAApBA,EAAQspB,UAAuC,MAAnBtpB,EAAQC,SAAoC,MAAjBD,EAAQwqB,KACxE,E,uBA4CO,SAA8B4jG,EAAsBt5F,EAAsB1vB,GAC/E,IAAMipH,GAAqB,EAAA3pF,EAAAA,eAAc0pF,GACnCE,GAAqB,EAAA5pF,EAAAA,eAAc5P,GAC7By5F,EAAmFF,EAAvFlvH,GAAuBqvH,EAAgEH,EAA5EH,WAAsChzE,EAAsCmzE,EAAjDtoH,UAA2B0oH,GAAiB,EAAAlyG,EAAA1d,SAAKwvH,EAAkBK,GACrGC,EAAmFL,EAAvFnvH,GAAuByvH,EAAgEN,EAA5EJ,WAAsC/yE,EAAsCmzE,EAAjDvoH,UAA2B8oH,GAAiB,EAAAtyG,EAAA1d,SAAKyvH,EAAkBQ,GAC3GzB,EAAiB,IAAIC,EAAAA,eAAeC,EAAAA,sBAAuB,CAAEnoH,aAC7D2pH,EAAkB1B,EAAe2B,cAAc9zE,GAAe,CAAC,EAAGC,GAAe,CAAC,GAOlF8zE,EAA2B,IANH5B,EAAe6B,gBAC3CT,EACAvzE,GAAe,CAAC,EAChBC,GAAe,CAAC,EAChB0zE,GAIA1vH,GAAI2c,KAAKw0C,IAAIq+D,GAASzpH,KAAKC,MAAOopH,GAASrpH,KAAKC,OAChD+oH,WAAYpyG,KAAKw0C,IAAIs+D,GAAiB,EAAGJ,GAAiB,GAC1DzoH,UAAWgpH,GAEPI,EAOR,SAA6BjmG,GAC3B,IAAKA,GAAgC,IAApBA,EAAS/0B,OACxB,OAAO+0B,EAET,IAAMkmG,EAAOlmG,EAAS,GACtB,IAAKkmG,EAAK1jG,SAAmC,IAAxB0jG,EAAK1jG,QAAQv3B,OAChC,OAAO+0B,EAMT,IAHA,IAAMmmG,EAAUA,CAACn7H,EAAsB4kE,IAAiC5kE,EAAE6rD,MAAQ+Y,EAAE/Y,MAEhFuvE,EAAwBF,EAAK1jG,QACxB52B,EAAI,EAAGA,EAAIs6H,EAAK1jG,QAAQv3B,OAAQW,IAAK,CAC5C,IAAM62B,EAAQyjG,EAAK1jG,QAAQ52B,GACrBy6H,GAAa,EAAAC,EAAAA,+BAA8B7jG,EAAMyR,KAAMiyF,GACzDE,IAAe5jG,EAAMyR,OACnBkyF,IAA0BF,EAAK1jG,UACjC4jG,EAAwBF,EAAK1jG,QAAQx0B,SAEvCo4H,EAAsBx6H,GAAK,IAAK62B,EAAOyR,KAAMmyF,GAEjD,CAEA,IAAME,GAAgB,EAAAD,EAAAA,+BAA8BF,EAAuBD,GAC3E,OAAII,IAAkBL,EAAK1jG,QAClBxC,EAEF,CAAC,IAAKkmG,EAAM1jG,QAAS+jG,MAAoBvmG,EAAShyB,MAAM,GACjE,CAnCyBw4H,CAAoBT,EAAe/lG,UAC1D,OAAOimG,IAAmBF,EAAe/lG,SAAW+lG,EAAiB,IAAKA,EAAgB/lG,SAAUimG,EACtG,E,kCA/DO,SAAyCQ,GAC9C,OAA8B,MAA1BA,EAAe1vH,SAA8C,MAA3B0vH,EAAermG,UAA4C,MAAxBqmG,EAAenlG,MAC/EmlG,EAEA,IACFA,EACH1vH,QAAS0vH,EAAe1vH,SAAW,GACnCqpB,SAAUqmG,EAAermG,UAAY,GACrCkB,MAAOmlG,EAAenlG,OAAS,CAC7Br2B,OAAQ,CAAC,EACT2lE,WAAY,CAAC,EACbrvC,OAAQ,CAAC,GAIjB,E,uBAlDO,SAA8Bxd,EAAqBtF,EAAgB3E,IACxE,EAAA4lB,EAAAA,aACE3b,EACA,EACE,EAAA4b,EAAAA,MACG7yB,EAAE,WACFA,EAAE,cACFusC,aAAcwW,GACa,MAAtBA,EAAWpxC,GACNoxC,EAEF,IAAKA,EAAY,CAACpxC,GAAS,CAAExI,GAAIwI,EAAQ1C,UAAWC,KAAKC,MAAOnC,OAAM4tB,MAAO,gBAG1F,gBAEJ,E,yBAoCO,SACLw9F,EACAt5F,EACA1vB,GAE+FgpH,EAAvFjvH,GAAuFivH,EAA5EF,WAA4EE,EAAjDroH,UAA9C,IAAyE0oH,GAAiB,EAAAlyG,EAAA1d,SAAKuvH,EAAU31C,GAChDt9B,GAAsCrmB,EAAvF31B,GAAuF21B,EAA5Eo5F,WAA4Ep5F,EAAjD/uB,WAA2B8oH,GAAiB,EAAAtyG,EAAA1d,SAAKi2B,EAAU86F,GACnGvC,EAAiB,IAAIC,EAAAA,eAAeC,EAAAA,sBAAuB,CAAEnoH,aAC7DH,EAAYC,KAAKC,MACvB,OACEspH,EAAkB1pH,aAAe8pH,EAAkB9pH,YACnD0pH,EAAkBhuF,UAAYouF,EAAkBpuF,QAEzC4sF,EAAewC,eACpBpB,EACAI,EACAT,EAAWroH,WAAa,CAAC,EACzB+uB,EAAW/uB,WAAa,CAAC,EACzBd,GAGKk2C,GAAe,CAAC,CAE3B,E,sFA1MO,SAA0C72C,GAC/C,IAAMN,EAAS6pH,EAA0BvpH,EAAMspH,EAAAA,SAAU,WACzD,OAAI5pH,EAAOK,QACF,CAAEA,SAAS,EAAMC,KAAMN,EAAOM,MAEhCN,CACT,E,0BAdO,SAAiCM,GACtC,IAAMN,EAAS2pH,EAAiBrpH,EAAMspH,EAAAA,SAAU,WAChD,OAAI5pH,EAAOK,QACF,CAAEA,SAAS,EAAMC,KAAMN,EAAOM,MAEhCN,CACT,E,kBA/DA4pB,EAAAnzB,EAAA,OACA07B,EAeuG,SAAA/hC,GAAA,sBAAAuoB,QAAA,KAAA1oB,EAAA,IAAA0oB,QAAA,IAAAA,OAAA,iBAAAvoB,GAAA,GAAAA,GAAAA,EAAAG,WAAA,OAAAH,EAAA,IAAAQ,EAAAE,EAAAoE,EAAA,CAAAP,UAAA,KAAAkG,QAAAzK,GAAA,UAAAA,GAAA,iBAAAA,GAAA,mBAAAA,EAAA,OAAA8E,EAAA,GAAAtE,EAAAX,EAAA,IAAAW,EAAAqF,IAAA7F,GAAA,OAAAQ,EAAAsF,IAAA9F,GAAAQ,EAAAuF,IAAA/F,EAAA8E,EAAA,SAAA0jB,KAAAxoB,EAAA,YAAAwoB,GAAA,GAAAnlB,eAAAV,KAAA3C,EAAAwoB,MAAA9nB,GAAAF,EAAA4B,OAAAC,iBAAAD,OAAA0B,yBAAA9D,EAAAwoB,MAAA9nB,EAAAoF,KAAApF,EAAAqF,KAAAvF,EAAAsE,EAAA0jB,EAAA9nB,GAAAoE,EAAA0jB,GAAAxoB,EAAAwoB,IAAA,OAAA1jB,CAAA,EAAA9E,EAAA,CAfvGyoB,CAAApiB,EAAA,QACA48C,EAAA58C,EAAA,OACAgT,EAAAhT,EAAA,OACAgtD,EAAAhtD,EAAA,OAGA8yB,EAAA9yB,EAAA,OACA6yB,EAAA7yB,EAAA,OAEAozB,EAAApzB,EAAA,OACAqzB,EAAArzB,EAAA,OACA+/D,EAAA//D,EAAA,OACAE,EAAAF,EAAA,OACAq1H,EAAAr1H,EAAA,OACA2T,EAAA3T,EAAA,OACAyzB,EAAAzzB,EAAA,OAAuG+hB,EAAA,gCAAAu8D,EAAA,gCAAAN,EAAA,gCAAAm3C,EAAA,gCAAAlB,EAAA,gCAAAI,EAAA,gCAwBhG,SAASnB,EAAoBrpH,EAAeg2D,EAA4BljE,GAC7E,IAAM4M,EAASmyB,EAAE45F,UAAUz1D,EAAQh2D,EAAM,CAAE0rH,YAAY,IACvD,OAAIhsH,EAAOK,QAKF,CAAEA,SAAS,EAAMC,KAAMA,GAOzB,CAAED,SAAS,EAAOpB,MALVe,EAAOisH,OAAOtuH,IAAKuuH,IAChC,IAAMC,EA9BV,SAAyBD,GACvB,OAAKA,EAAMC,MAA8B,IAAtBD,EAAMC,KAAKh8H,OAGvB+7H,EAAMC,KACVxuH,IAAK21G,IACJ,IAAM5gH,EAAO4gH,EAA6B5gH,IAC1C,MAAmB,iBAARA,EACF,IAAIA,KAENmB,OAAOnB,KAEfy7B,OAAO,CAAC00C,EAAKssC,IACRA,EAAKl6F,WAAW,KACX,GAAG4tD,IAAMssC,IAEXtsC,EAAM,GAAGA,KAAOssC,IAASA,EAC/B,IAfI,EAgBX,CAYiBid,CAAgBF,GAE7B,MAAO,GADMC,EAAO,GAAG/4H,KAAQ+4H,IAAS/4H,MACrB84H,EAAM1rH,YAG7B,CA4BO,SAASqpH,EACdvpH,EACAg2D,EACAljE,GAEA,IAAM4M,EAAS2pH,EAAiBrpH,EAAMg2D,EAAQljE,GAC9C,IAAK4M,EAAOK,QAAS,CACnB,IAAMpB,EAAQe,EAAOf,OACrB,EAAAumB,EAAAA,IAAG,uBAAwB,CAAE6mG,YAAa/wH,KAAKC,WAAU,EAAAoqB,EAAAA,kCACzD,EAAA2mG,EAAAA,qCAAoCrtH,GACb,oBAAZw/B,SAAsC,MAAXA,SACpCA,QAAQx/B,MAAMA,EAAMpB,KAAK,MAAO,CAAEgF,MAAOvH,KAAKC,UAAU+E,GAAOtB,KAAM5L,IAEvE6+B,QAAQhzB,MAAM,kBAAkB7L,KAChC6+B,QAAQ1N,IAAIjkB,GACZrB,EAAM7K,QAAShE,GAAM6hC,QAAQhzB,MAAM7O,GACrC,CACA,OAAO4P,CACT,CA8CO,SAASusB,IACd,IAAMggG,EAAUrrH,KAAKC,MACrB,MAAO,CACLhG,GAAIoxH,EACJrC,WAAYqC,EACZh8F,sBAAkBh6B,EAClByxC,eAAgB,GAChBM,eAAgB,GAEhBkkF,eAAgB,GAChBC,gBAAiB,GACjB1rD,aAAc,GACdhgE,YAAY,EAAAqP,EAAAA,wBAAuB,IACnC2kC,WAAY,CAAC,EACb7vB,SAAU,GACVsB,MAAO,CACLC,OAAQ,CAAEA,OAAQ,IAClBt2B,OAAQ,CACN4rG,KAAM,GACN2C,UAAW,GACXguB,UAAW,GACXC,WAAY,GACZC,YAAa,GACbC,aAAc,GACd5xB,MAAO,GACP3tD,MAAO,GACPw/E,KAAM,GACNC,UAAW,GACXC,WAAY,GACZC,SAAU,GACVC,UAAW,IAEbp3D,WAAY,CAAEzoB,QAAS,KAEzB7oB,UAAU,EAAAq/B,EAAAA,kBACV5nD,QAAS,GACTwgC,SAAS,EAAAsD,EAAAA,6BACT9/B,aAAc,CAAEmmC,MAAO,GAAI7d,OAAQ,IACnCjD,SAAU,GACV6nG,MAAO,GACP9wH,WAAO9F,EACP+nD,UAAU,EAAAniB,EAAAA,0BAAyBj7B,KAAKC,MAAO,IAEnD,C,+EC5IO,SACL+jB,EACAiS,EACAuB,EACAlU,EACA8mB,GAEA,IAAM3jB,EAAQzC,EAASwC,QAAQyP,GACzBhhC,EAAMwxB,GAAOyR,KAAKV,GACxB,GAAa,MAAT/Q,GAAwB,MAAPxxB,EAArB,CAGA,IAAM8xD,EAAOmlE,EAAoBj3H,GAAK,EAAAg0F,EAAAA,0BAAyBxiE,EAAM9f,SAAU2c,IAC/E,GAAY,MAARyjC,EAAJ,CAGA,IAAMljC,EAAW,CAAEoS,aAAYuB,WAAU4mF,MAAOnpH,EAAIgF,GAAIA,IAAI,EAAAiV,EAAAA,wBAAuB,GAAI63C,QACvF,OAAO3c,EAAK6zE,gBAAkB,EAC1B,CACEnoF,iBAAkB,IACbjS,EACHkJ,UAAWqd,EAAKrd,UAChBggB,SAAU3C,EAAK6zE,gBACfC,MAAO9zE,EAAK8zE,QAGhB,CAAEtoF,SAAU,IAAK/R,EAAUkJ,UAAWqd,EAAKrd,UAAWmxF,MAAO9zE,EAAK8zE,OAXtE,CAJA,CAgBF,E,mEAEO,SACLl6F,EACAo1F,EACA91F,GAEA,GAAa,MAAT81F,GAAwC,MAAvBp1F,EAASoS,WAA9B,CAGA,IAAM3P,EAAQzC,EAASwC,QAAQ4yF,EAAMnjF,YAC/BhhC,EAAMwxB,GAAOyR,KAAKkhF,EAAM5hF,UAC9B,GAAa,MAAT/Q,GAAwB,MAAPxxB,EAArB,CAGA,IAAM0R,GAAW,EAAAi3D,EAAAA,cAAan3C,EAAM9f,SAAU2c,EAASiR,WACvD,MAAO,CACLqW,QAASwuE,EAAMn/G,GACfg8B,WAAYmjF,EAAMnjF,WAClBuB,SAAU4hF,EAAM5hF,SAChB4mF,MAAOhF,EAAMgF,MACb+N,MAAO/S,EAAMA,MACbryD,KAAMqyD,EAAMryD,KACZh6B,UAAWqsF,EAAMrsF,UACjBkxF,gBAAiC,aAAhB7E,EAAMA,MAAuBA,EAAMrsE,SAAW,EAC/Dq/E,cAAen3H,EAAI2gC,UAAY,EAC/By2F,YAAap3H,EAAIurC,OAAS,EAC1B8rF,aAAcr3H,EAAIo6F,mBAClBl3D,cAAeljC,EAAIkjC,YACnBqpF,iBAA2D,MAAzC/J,EAAqBxiH,EAAKmkH,EAAMryD,MAClDwlE,cAAc,EAAAz9B,EAAAA,mBAAkBnoF,EAAU2c,GAC1CkpG,kBAAmB7lH,EAASzU,KAC5Bi6F,UAAU,EAAAsgC,EAAAA,wBAAuB9lH,EAAU,QAAS2c,GACpDopG,WAAYjmG,EAAMoR,WAAW5oC,OAASmqH,EAAM5hF,SAAW,EACvDm1F,UAAWlmG,EAAMoR,WAAW5oC,OAASw3B,EAAMyR,KAAKjpC,OApBlD,CALA,CA2BF,E,wBAlFO,SAA+BgG,EAAW8xD,EAAqB6lE,GACpE,MAAgB,SAAT7lE,EAAkB,IAAK9xD,EAAKs6F,sBAAuBq9B,GAAY,IAAK33H,EAAKq6F,kBAAmBs9B,EACrG,EAjCA,IAAA3jG,EAAA1zB,EAAA,OACAgT,EAAAhT,EAAA,OACAmlF,EAAAnlF,EAAA,OAyBO,SAASkiH,EAAqBxiH,EAAW8xD,GAC9C,MAAgB,SAATA,EAAkB9xD,EAAIs6F,sBAAwBt6F,EAAIq6F,iBAC3D,CAMO,SAAS48B,EAAoBj3H,EAAW+zF,GAC7C,OAAKA,EAG4B,MAA7B/zF,EAAIs6F,sBACC,OAEuB,MAAzBt6F,EAAIq6F,kBAA4B,aAAUj6F,EALf,MAAzBJ,EAAIq6F,kBAA4B,iBAAcj6F,CAMzD,C,uFCJO,SAA8B4iG,EAAuBkE,EAAuB0wB,GACjF,IAAM/tH,EAAS,IAAKm5F,GACpB,IAAK,IAAMn+B,KAAUxoE,OAAOuB,KAAKspG,GAC/Br9F,EAAOg7D,IAAWh7D,EAAOg7D,IAAW,IAAMqiC,EAAOriC,IAAW,GAAK+yD,EAEnE,OAAO/tH,CACT,E,0BAdO,SAAiCm5F,EAAuB60B,GAC7D,IAAMhuH,EAAwB,CAAC,EAC/B,IAAK,IAAMg7D,KAAUxoE,OAAOuB,KAAKolG,GAC/Bn5F,EAAOg7D,GAAUgzD,EAAU,GAAK70B,EAAOn+B,IAAW,GAAKgzD,EAAU,EAEnE,OAAOhuH,CACT,E,0DAtBO,SAAuCgpC,EAA6BxkB,GACzE,IAAMypG,EAAY,IAAI1zG,IAAI2zG,EAAsB1pG,IAC1C20E,EAAwB,CAAC,EAC/B,IAAK,IAAMn+B,KAAU,EAAAigB,EAAAA,wBAAuBjyC,EAAcxkB,GACpDypG,EAAUh4H,IAAI+kE,KAChBm+B,EAAOn+B,GAAU,GAGrB,IAAK,IAAL59D,KAAqC,EAAAq+E,EAAAA,qCAAoCzyC,EAAcxkB,GAAW,KAArFw2C,EAAM59D,EAAN49D,OAAQC,EAAU79D,EAAV69D,WACfgzD,EAAUh4H,IAAI+kE,IAA6B,MAAlBm+B,EAAOn+B,KAClCm+B,EAAOn+B,GAAUC,EAErB,CACA,OAAOk+B,CACT,EA7BA,IAAA3iC,EAAA//D,EAAA,OACA03H,EAAA13H,EAAA,OACA0zB,EAAA1zB,EAAA,OAIO,SAASy3H,EAAsB1pG,GACpC,IAAM4pG,EAAU,IAAI7zG,KAClB,EAAAqyE,EAAAA,iCAAgCpoE,GAAU06C,QAASsY,IACjD,EAAA+D,EAAAA,mCAAkC/D,EAAahzD,KAGnD,OAAO6pG,EAAAA,iBAAiBp6H,OAAQ+mE,IAAYozD,EAAQn4H,IAAI+kE,GAC1D,C,iKCiEAszD,EAAA73H,EAAA,OACA83H,EAAA93H,EAAA,OACA+3H,EAAA/3H,EAAA,OACAg4H,EAAAh4H,EAAA,OACAi4H,EAAAj4H,EAAA,OACAk4H,EAAAl4H,EAAA,OAEA+/D,EAAA//D,EAAA,OAAAjE,OAAAuB,KAAAyiE,GAAApiE,QAAA,SAAA1B,GAAA,YAAAA,GAAA,eAAAA,IAAAF,OAAAN,UAAAuB,eAAAV,KAAA67H,EAAAl8H,IAAAA,KAAA1C,GAAAA,EAAA0C,KAAA8jE,EAAA9jE,IAAAF,OAAAC,eAAAzC,EAAA0C,EAAA,CAAAL,YAAA,EAAA6D,IAAA,kBAAAsgE,EAAA9jE,EAAA,OAE2B1C,EAAAA,gBAUxB,EAAA4K,EAAAC,SAHD,SAAAyuH,EAAYuF,EAA2DrmD,IAA+B,EAAAxtE,EAAAH,SAAA,KAAAyuH,GACpGj4H,KAAKw9H,aAAeA,EACpBx9H,KAAK+P,SAAWonE,EAAQpnE,QAC1B,EAAC,EAAA1O,IAAA,iBAAA1B,MAED,SACE89H,EACAC,EACAC,EACA73E,EACAl2C,GAEA,OAAO,IAAIguH,EAAAA,6BAA6B59H,KAAKw9H,aAAcx9H,KAAK+P,UAAUm2F,IACxEu3B,EACAC,EACAC,EACA73E,EACAl2C,EAEJ,GAAC,CAAAvO,IAAA,eAAA1B,MAED,SACEk+H,EACAx/F,EACAzuB,GAEA,OAAO,IAAIkuH,EAAAA,2BAA2B99H,KAAKw9H,aAAcx9H,KAAK+P,UAAUm2F,IAAI23B,EAASx/F,EAAUzuB,EACjG,GAAC,CAAAvO,IAAA,eAAA1B,MAED,SAAuBkmD,EAAuCC,GAC5D,OAAO,IAAIi4E,EAAAA,4BAA6B73B,IAAIrgD,EAAaC,EAC3D,GAAC,CAAAzkD,IAAA,oBAAA1B,MAED,SAA4DurG,EAAQ8yB,GAClE,OAAO,IAAIC,EAAAA,gCAAgCj+H,KAAKw9H,cAAct3B,IAAIgF,EAAK8yB,EACzE,GAAC,CAAA38H,IAAA,kBAAA1B,MAED,SACEk+H,EACAK,EACAC,EACAC,GAEA,OAAO,IAAIC,EAAAA,8BAA8Br+H,KAAKw9H,cAAct3B,IAAI23B,EAASK,EAAcC,EAAaC,EACtG,GAAC,CAAA/8H,IAAA,gBAAA1B,MAED,SAAwBu+H,EAA4BC,GAClD,OAAO,IAAIG,EAAAA,4BAA4Bt+H,KAAKw9H,cAAct3B,IAAIg4B,EAAcC,EAC9E,I,aCtGK,SAASI,EAAcz9F,GAC5B,MAAoB,iBAANA,GAAwB,OAANA,GAAc,OAAQA,GAAK,MAAOA,CACpE,CAMO,SAAS6sE,EAAe7sE,GAC7B,MAAoB,iBAANA,GAAkBy9F,EAAcz9F,EAChD,CAEO,SAAS8sE,EAAqB9sE,GACnC,OAAa,OAANA,GAA2B,iBAANA,IAAmB,UAAWA,GAAK,YAAaA,EAC9E,C,2GAVO,SAAqBA,GAC1B,OAAOy9F,EAAcz9F,IAAM,UAAWA,GAAwC,iBAA3BA,EAAiBnhC,KACtE,E,qCAUO,SAA0BmhC,GAC/B,OAAa,OAANA,GAA2B,iBAANA,IAAmB8sE,EAAqB9sE,KAAO6sE,EAAe7sE,EAC5F,C,4PCiJO,SACL09F,EACA1D,EACA2D,EACAjB,GAEA,IAAMnlC,EAAYyiC,GAAQ0C,EAAakB,qBAAuBlB,EAAakB,qBAAqB5D,QAAQ51H,EAExG,IAAKmzF,IAAcmmC,EAAWp5E,SAAsD,IAA3CjkD,OAAOuB,KAAK87H,EAAWp5E,SAAStmD,OACvE,OAAO0/H,EAGT,IAAM7vH,EAA8B,CAClC8sB,MAAO+iG,EAAW/iG,MAClB2pB,QAAS,CAAC,GAGZ,IAAK,IAALr5C,KAAuC5K,OAAOk1B,QAAQmoG,EAAWp5E,SAAU,KAAAvyC,GAAA,EAAAiH,EAAAtQ,SAAAuC,EAAA,GAA/D1K,EAAGwR,EAAA,GAAE8rH,EAAiB9rH,EAAA,GAC5B4rH,EAAmBE,EAAoBtmC,IACzC1pF,EAAOy2C,QAAS/jD,GAAOs9H,EAE3B,CAEA,OAAOhwH,CACT,E,+BA1LO,SAAsC9P,EAAY4kE,GACvD,OAAO,EAAA5uC,EAAAA,qBAAoBh2B,EAA8B4kE,EAC3D,E,uCAiBO,SAAiDplC,GACtD,OAAOA,CACT,E,8EA8KO,SACLzuB,EACAjQ,EACAirE,EACA76D,GAIA,IAAM2kD,EAAO3kD,GAAY6uH,EAEnBC,EAAW,KADDj0D,EAAiB,CAAEk0D,GAAIl0D,EAAek0D,GAAIx/H,EAAGsrE,EAAetrE,GAAM,CAAEw/H,GAAI,CAAC,EAAGx/H,EAAG,IACjEw/H,IAG9B,OAFAD,EAASnqE,IAASmqE,EAASnqE,IAAS,GAAK,EAElC,CACLoqE,GAAID,EACJv/H,EAAGsQ,EACHjQ,QAEJ,E,oCAhLO,SACLiQ,EACAg7D,EACA76D,GAOA,IAAM2kD,EAAO3kD,GAAY6uH,EAEnBC,EAAW,IADDE,EAAqCn0D,GACvBk0D,IAG9B,OAFAD,EAASnqE,IAASmqE,EAASnqE,IAAS,GAAK,EAElC,CACLoqE,GAAID,EACJv/H,EAAGsQ,EAEP,E,+CA1BO,SAAsDw7B,GAC3D,OAAI,EAAAwiE,EAAAA,sBAAqBxiE,GAChBA,EAEF,CAAE3P,MAAO,CAAC,EAAG2pB,QAAS,CAAC,EAChC,E,2CAZO,SAAkDha,GACvD,OAAI,EAAA4zF,EAAAA,kBAAiB5zF,GACZA,EAEF,CAAC,CACV,E,4BAxBO,SACL8/D,EACAsyB,GAEA,GAAKyB,EAAkC/zB,GAAvC,CAGA,IAAMg0B,EAAU1B,EAAa2B,cAAcj0B,EAAI3vE,OAC/C,GAAK2jG,GAAaA,KAAWh0B,EAA7B,CAGA,IAAMphG,EAAKohG,EAAIg0B,GACf,OAAa,MAANp1H,EAAatH,OAAOsH,QAAM5E,CAFjC,CAJA,CAOF,E,qCA2KO,SACLq2B,EACAiiG,GAEA,OAAOA,EAAa2B,cAAc5jG,EACpC,E,iCAkCO,SACL2vE,EACAsyB,GAEA,GAAK4B,EAAqCl0B,EAAKsyB,GAA/C,CAGA,IAAM0B,EAAU1B,EAAa2B,cAAcj0B,EAAI3vE,OAC/C,GAAK2jG,GAAaA,KAAWh0B,EAA7B,CAGA,IAAMphG,EAAKohG,EAAIg0B,GACf,OAAa,MAANp1H,EAAatH,OAAOsH,QAAM5E,CAFjC,CAJA,CAOF,E,+CAEO,SAILq2B,EACA8C,EACAm/F,GAEA,GAAKn/F,EAAL,CAGA,IAAM6gG,EAAU1B,EAAa2B,cAAc5jG,GAC3C,GAAK2jG,EAAL,CAGA,IAAMG,EAAYhhG,EAAS6gG,GAC3B,OAAO,EAAAI,EAAAA,aAAYD,GAAaA,OAAYn6H,CAF5C,CAJA,CAOF,E,2CA7GO,SAAkDs5H,GACvD,GAA8B,MAA1BA,EAAWe,YACb,OAAOf,EAET,IAAM78H,EAAO68H,EAAWe,YAAc,EACtC,OAAI59H,EAAO69H,GACwBhB,EAAzBe,aAAoB,EAAAr4G,EAAA1d,SAAKg1H,EAAUr3G,IAGtC,IAAKq3G,EAAYe,YAAa59H,EACvC,E,mCAxLO,SACLhC,EACA69H,GAEA,OAAOyB,EAAkCt/H,IAAU69H,EAAaiC,YAAY39G,SAASniB,EAAM47B,MAC7F,E,wEAeO,SAAsC57B,GAC3C,MAAwB,iBAAVA,GAAgC,OAAVA,CACtC,E,+EA4HO,SAAgDd,EAAkB4kE,GACvE,IAAM8jC,EAAam4B,EAAoC7gI,EAAG4kE,GAC1D,GAAmB,YAAf8jC,EACF,OAAO1oG,EAET,GAAmB,YAAf0oG,EACF,OAAO9jC,EAET,GAAmB,UAAf8jC,EACF,OAAO1oG,EAGT,IAAM8gI,EAAQZ,EAAqClgI,GAC7C+gI,EAAQb,EAAqCt7D,GAE7Co8D,EAAa,IAAI32G,IAAI,IAAI/nB,OAAOuB,KAAKi9H,EAAMb,OAAQ39H,OAAOuB,KAAKk9H,EAAMd,MACrEgB,EAA2C,CAAC,EAElD,IAAK,IAAM/vH,KAAY8vH,EACrBC,EAAS/vH,GAAY0W,KAAKw0C,IAAI0kE,EAAMb,GAAG/uH,IAAa,EAAG6vH,EAAMd,GAAG/uH,IAAa,GAG/E,MAAO,CACL+uH,GAAIgB,EACJxgI,EAAGmnB,KAAKw0C,IAAI0kE,EAAMrgI,EAAGsgI,EAAMtgI,GAE/B,E,oFAmEO,SAAkDT,EAAe4kE,GACtE,IAAM8jC,EAAam4B,EAAoC7gI,EAAG4kE,GAC1D,MAAmB,YAAf8jC,EACK1oG,EAEU,YAAf0oG,EACK9jC,EAGF5kE,EAAES,GAAKmkE,EAAEnkE,EAAIT,EAAI4kE,CAC1B,E,gCA1QAjrC,EAAApzB,EAAA,OACA+/D,EAAA//D,EAAA,OAciB+hB,EAAA,gBASV,SAASi4G,EACdz/H,EACA69H,GAEA,OACEyB,EAAkCt/H,IAAU69H,EAAauC,gBAAgBj+G,SAASniB,EAAM47B,MAE5F,CAEO,SAAS0jG,EAAkCt/H,GAChD,MAAwB,iBAAVA,GAAgC,OAAVA,GAAkB,UAAWA,GAAgC,iBAAhBA,EAAM47B,KACzF,CAgEO,SAASwjG,EAAqC3zF,GACnD,OAAKA,GAGD,EAAAmzF,EAAAA,eAAcnzF,GACTA,EAEF,CAAE0zF,GAAI,CAAC,EAAGx/H,EAAG8rC,GALX,CAAE0zF,GAAI,CAAC,EAAGx/H,EAAG,EAMxB,CAEO,SAASogI,EACd7gI,EACA4kE,GAEA,IAAMk8D,EAAQZ,EAAqClgI,GAC7C+gI,EAAQb,EAAqCt7D,GAE7Cu8D,EAAW7+H,OAAOuB,KAAKi9H,EAAMb,IAC7BmB,EAAW9+H,OAAOuB,KAAKk9H,EAAMd,IAC7BoB,EAASF,EAASlhI,OAAS,EAC3BqhI,EAASF,EAASnhI,OAAS,EAEjC,GAAIohI,IAAWC,EACb,OAAIR,EAAMrgI,IAAMsgI,EAAMtgI,EACb,QAEFqgI,EAAMrgI,EAAIsgI,EAAMtgI,EAAI,UAAY,UAGzC,IAAK4gI,IAAWC,EACd,OAAIR,EAAMrgI,IAAMsgI,EAAMtgI,EACb,QAEFqgI,EAAMrgI,EAAIsgI,EAAMtgI,EAAI,UAAY,UAGzC,IAAMugI,EAAa,IAAI32G,IAAI,IAAI82G,KAAaC,IACxCG,GAAa,EACbC,GAAa,EAEjB,IAAK,IAAMtwH,KAAY8vH,EAAY,CACjC,IAAMS,EAASX,EAAMb,GAAG/uH,IAAa,EAC/BwwH,EAASX,EAAMd,GAAG/uH,IAAa,EAEjCuwH,EAASC,IACXH,GAAa,GAEXG,EAASD,IACXD,GAAa,EAEjB,CAEA,OAAKD,GAAeC,EAGhBD,IAAeC,EACV,UAELA,IAAeD,EACV,UAEF,aARE,OASX,CA6IO,IAAMZ,EAAyC7gI,EAAAA,0CAAG,EAK5CigI,EAAoCjgI,EAAAA,qCAAG,UAKGA,EAAAA,2CAAG,Y,mJCxT1D65B,EAAApzB,EAAA,OACAukG,EAAAvkG,EAAA,OACA+/D,EAAA//D,EAAA,OASAo7H,EAAAp7H,EAAA,OAEuCzG,EAAAA,4BAAA,EAAA4K,EAAAC,SAAA,SAAAu0H,KAAA,EAAAp0H,EAAAH,SAAA,KAAAu0H,EAAA,IAAA18H,IAAA,MAAA1B,MACrC,SAAckmD,EAAuCC,GACnD,IAAMg1B,EAAqB,CAAC,EACxB2lD,GAAa,EAEjB,IAAK,IAAMp/H,KAAO,EAAA80B,EAAAA,kBAAiB2vB,GAAc,CAC/C,IAAM46E,EAAa76E,IAAcxkD,GAC3Bs/H,EAAa76E,EAAYzkD,GAEzBu/H,EAAY5gI,KAAK6gI,iBAAiBH,EAAYC,GACnC,MAAbC,IACF9lD,EAAKz5E,GAAOu/H,EACZH,GAAa,EAEjB,CAEA,OAAOA,EAAa3lD,OAAO51E,CAC7B,GAAC,CAAA7D,IAAA,mBAAA1B,MAED,SACE+gI,EACAC,GAEA,IAAI,EAAAhzB,EAAAA,gBAAe+yB,KAAe,EAAA/yB,EAAAA,gBAAegzB,GAE/C,MAAsB,WADH,EAAAjB,EAAAA,qCAAoCgB,EAAYC,QACnCz7H,EAAYy7H,EAG9C,IAAI,EAAAhzB,EAAAA,gBAAegzB,MAAgB,EAAAhzB,EAAAA,gBAAe+yB,GAChD,OAAOC,EAGT,IAAI,EAAA/yB,EAAAA,sBAAqB+yB,GAAa,CACpC,IAAMG,GAAgB,EAAAlzB,EAAAA,sBAAqB8yB,GAAcA,OAAax7H,EAChE67H,EAAsC,CAAEtlG,MAAO,CAAC,GAClDglG,GAAa,EAEXO,EAAiB,IAAI93G,IAAI/nB,OAAOuB,KAAKo+H,GAAe17E,SAAW,CAAC,IAChE67E,EAAiB,IAAI/3G,IAAI/nB,OAAOuB,KAAKi+H,EAAWv7E,SAAW,CAAC,IAKlE,IAAK,IAAMt7C,KAJN,EAAAwhG,EAAAA,mBAAkB01B,EAAgBC,KACrCR,GAAa,GAEfM,EAAe37E,QAAU,IAAM07E,GAAe17E,SAAW,CAAC,KAAQu7E,EAAWv7E,SAAW,CAAC,GACxEu7E,EAAWllG,MAC1B,IAAIslG,EAAe37E,WAAWt7C,KAAMi3H,EAAe37E,SAAnD,CAGA,IAAM87E,EAAiBJ,GAAerlG,QAAQ3xB,GACxCq3H,EAAiBR,EAAWllG,MAAM3xB,GAElCs3H,EAAWphI,KAAK6gI,iBAAiBK,EAAgBC,GACvC,MAAZC,IAAqB,EAAAxzB,EAAAA,sBAAqBwzB,KAC5CL,EAAetlG,MAAQslG,EAAetlG,OAAS,CAAC,EAChDslG,EAAetlG,MAAM3xB,GAAMs3H,EAC3BX,GAAa,EARf,CAYF,OAAOA,EAAaM,OAAiB77H,CACvC,CAEA,IAAI,EAAA85H,EAAAA,kBAAiB2B,GAAa,CAChC,IAAMlD,GAAS,EAAAuB,EAAAA,kBAAiB0B,GAAcA,OAAax7H,EACrDm8H,EAA2B,CAAC,EAC9BZ,GAAa,EAEjB,IAAK,IAAMp/H,KAAOF,OAAOuB,KAAKi+H,GAAa,CACzC,IAAMC,EAAY5gI,KAAK6gI,iBAAiBpD,IAASp8H,GAAMs/H,EAAWt/H,IACjD,MAAbu/H,IACFS,EAAQhgI,GAAOu/H,EACfH,GAAa,EAEjB,CAEA,OAAOA,EAAaY,OAAUn8H,CAChC,CAGF,I,wJC3FFszB,EAAApzB,EAAA,OACA+/D,EAAA//D,EAAA,OAUAo7H,EAAAp7H,EAAA,OAE4CzG,EAAAA,iCAKzC,EAAA4K,EAAAC,SAFD,SAAAy0H,EAAYT,IAA2D,EAAA7zH,EAAAH,SAAA,KAAAy0H,GACrEj+H,KAAKw9H,aAAeA,CACtB,EAAC,EAAAn8H,IAAA,MAAA1B,MAED,SAA8CurG,EAAQ8yB,GACpD,IAAMrvH,EAAqB,CAAC,EAE5B,IAAK,IAAMtN,KAAO,EAAA80B,EAAAA,kBAAiB6nG,GAAe,CAChD,IAAM5yF,EAAU4yF,EAAa38H,GACvB1B,EAAQurG,EAAI7pG,GAElB,GAAa,MAAT1B,EAAe,CACjB,IAAM2hI,EAAiBthI,KAAKuhI,sBAAsB5hI,EAAOyrC,GACnC,MAAlBk2F,IACF3yH,EAAOtN,GAAOigI,EAElB,CACF,CAEA,OAAO3yH,CACT,GAAC,CAAAtN,IAAA,wBAAA1B,MAED,SAA8BA,EAAgByrC,GAC5C,OAAI,EAAAuiE,EAAAA,gBAAeviE,GACVzrC,GAGL,EAAAiuG,EAAAA,sBAAqBxiE,GAChBprC,KAAKwhI,2BAA2B7hI,EAAOyrC,IAG5C,EAAA4zF,EAAAA,kBAAiB5zF,KAAY,EAAAq2F,EAAAA,8BAA6B9hI,IACxD,EAAAy/H,EAAAA,sCAAqCz/H,EAAOK,KAAKw9H,cAC5Cx9H,KAAK0hI,+BAA+B/hI,EAAOyrC,GAG7CprC,KAAKkmG,IAAIvmG,EAAOyrC,GAGlBzrC,CACT,GAAC,CAAA0B,IAAA,iCAAA1B,MAED,SAAuCA,EAAgCyrC,GACrE,IAAM7P,EAAQ57B,EAAM47B,MACdomG,EAAmB3hI,KAAKw9H,aAAamE,iBAAiBpmG,IAAU,GAChEqmG,EAAiB5hI,KAAKw9H,aAAaoE,iBAAiBrmG,IAAU,GAC9DsmG,EAAoB,IAAI34G,IAAI04G,GAIlC,GAFiCD,EAAiB/+G,KAAMkrF,GAA4B,MAAlB1iE,EAAQ0iE,IAE1E,CAIA,IAAMn/F,EAAkC,CAAC,EACzC,IAAK,IAAMtN,KAAOF,OAAOuB,KAAK/C,GACvBkiI,EAAkBj9H,IAAIvD,KACzBsN,EAAOtN,GAAO1B,EAAM0B,IAGxB,OAAOsN,CARP,CASF,GAAC,CAAAtN,IAAA,6BAAA1B,MAED,SAAmCA,EAAgBmiI,GACjD,IAAMC,EAAiB5gI,OAAOuB,KAAKo/H,EAAkBrmG,OAAS,CAAC,GAAG38B,OAAS,EACrEkjI,EAAe7gI,OAAOuB,KAAKo/H,EAAkB18E,SAAW,CAAC,GAAGtmD,OAAS,EAG3E,GAFmBijI,GAAkBC,EAErC,CAIA,GAAI/iI,MAAME,QAAQQ,GAAQ,CACxB,IAAMgP,EAAoB,GAE1B,IAAK,IAAMmlE,KAAQn0E,EAAO,CACxB,IAAMsiI,GAAS,EAAAC,EAAAA,2BAA0BpuD,EAAM9zE,KAAKw9H,cACpD,GAAIyE,GAAUA,KAAWH,EAAkBrmG,OAAS,CAAC,GAAI,CACvD,IAAM0mG,EAAcL,EAAkBrmG,MAAOwmG,GAC7C,GAA2B,iBAAhBE,IAA4B,EAAAV,EAAAA,8BAA6B3tD,GAAO,CACzE,IAAMsuD,EAAYpiI,KAAKuhI,sBAAsBztD,EAAMquD,GAClC,MAAbC,GACFzzH,EAAOjO,KAAK0hI,EAEhB,MACEzzH,EAAOjO,KAAKozE,EAEhB,CACF,CAGA,OAAOnlE,CACT,CAAO,IAAI,EAAA8yH,EAAAA,8BAA6B9hI,GAAQ,CAC9C,IAAMgP,EAAkC,CAAC,EAEzC,IAAK,IAAMtN,KAAOygI,EAAkBrmG,MAClC,GAAIp6B,KAAO1B,EAAO,CAChB,IAAMwiI,EAAcL,EAAkBrmG,MAAMp6B,GACtCghI,EAAY1iI,EAAM0B,GAExB,GAA2B,iBAAhB8gI,IAA4B,EAAAV,EAAAA,8BAA6BY,GAAY,CAC9E,IAAMD,EAAYpiI,KAAKuhI,sBAAsBc,EAAWF,GACvC,MAAbC,IACFzzH,EAAOtN,GAAO+gI,EAElB,MACEzzH,EAAOtN,GAAOghI,CAElB,CAIF,OAAO1zH,CACT,CA3CA,CA8CF,I,iKCpIF6pB,EAAApzB,EAAA,OACA+/D,EAAA//D,EAAA,OAWAo7H,EAAAp7H,EAAA,OAcuCzG,EAAAA,4BAOpC,EAAA4K,EAAAC,SAHD,SAAAs0H,EAAYN,EAA2DztH,IAAkB,EAAApG,EAAAH,SAAA,KAAAs0H,GACvF99H,KAAKw9H,aAAeA,EACpBx9H,KAAK+P,SAAWA,CAClB,EAAC,EAAA1O,IAAA,MAAA1B,MAED,SAA8Ck+H,EAAYx/F,EAAwBzuB,GAChF,IAAMjB,EAAS,IAAK0vB,GACdikG,GAAY,EAAAC,EAAAA,sCAAqC5zH,GACjDjM,GAAO,EAAAyzB,EAAAA,kBAAiB0nG,GAASj7H,OAAQvB,GAAgB,cAARA,GAEvD,IAAK,IAAMysG,KAASprG,EAAM,CACxB,IAAM/C,EAAQk+H,EAAQ/vB,GAEtB,GAAa,MAATnuG,EAAJ,CAIA,IAAM6iI,EAAW10B,EACXljC,EAAiB03D,EAAUE,GAC3BC,EAAgBziI,KAAK0iI,iBAAiB/iI,EAAOirE,EAAgBh7D,EAAW4yH,QAExDt9H,IAAlBu9H,IACFH,EAAUE,GAAYC,EAPxB,CASF,CAEA,OAAO9zH,CACT,GAAC,CAAAtN,IAAA,mBAAA1B,MAED,SACEA,EACAirE,EACAh7D,EACAkrH,GAEA,IAAI,EAAAntB,EAAAA,gBAAe/iC,GACjB,OAAOA,EAGT,GAAI3rE,MAAME,QAAQQ,GAAQ,CACxB,IAAMgjI,EAAoBhjI,EAAMijB,KAAMkxD,QAAgE5uE,KAAvD,EAAAg9H,EAAAA,2BAA0BpuD,EAAM9zE,KAAKw9H,eAEpF,GAAImF,EAAmB,CACrB,IAAMC,GAAqB,EAAAC,EAAAA,8CAA6Cj4D,GAClEnvC,EAAQ,IAAMmnG,EAAmBnnG,OAAS,CAAC,GAEjD,IAAK,IAAMq4C,KAAQn0E,EAAO,CACxB,IAAMsiI,GAAS,EAAAC,EAAAA,2BAA0BpuD,EAAM9zE,KAAKw9H,cACpD,GAAIyE,KAAYA,KAAUxmG,GAAQ,CAChC,IAAMqnG,EAAW,GAAGhI,WAAcmH,IAC5BE,EAAcniI,KAAK+iI,sBAAsBjvD,EAAMlkE,EAAWkzH,QAC5C59H,IAAhBi9H,IACF1mG,EAAMwmG,GAAUE,EAEpB,MAAO,GAAIF,GAAUxmG,EAAMwmG,MAAY,EAAAt0B,EAAAA,gBAAelyE,EAAMwmG,IAAU,CACpE,IAAMa,EAAW,GAAGhI,WAAcmH,IAClC,IAAI,EAAA7C,EAAAA,sCAAqCtrD,EAAM9zE,KAAKw9H,cAAe,CACjE,IAAMwF,EAAoBhjI,KAAKijI,4BAA4BnvD,EAAMr4C,EAAMwmG,GAASryH,EAAWkzH,QACjE59H,IAAtB89H,IACFvnG,EAAMwmG,GAAUe,EAEpB,KAAO,CACL,IAAMA,EAAoBhjI,KAAK0iI,iBAAiB5uD,EAAMr4C,EAAMwmG,GAASryH,EAAWkzH,QACtD59H,IAAtB89H,IAAoC,EAAAp1B,EAAAA,sBAAqBo1B,KAC3DvnG,EAAMwmG,GAAUe,EAEpB,CACF,CACF,CAEA,MAAO,IAAKJ,EAAoBnnG,QAClC,CACE,YAA0Bv2B,IAAnB0lE,EACHA,GACA,EAAAs4D,EAAAA,mCAAkCtzH,OAAW1K,EAAWlF,KAAK+P,SAErE,CAAO,IAAI,EAAA0xH,EAAAA,8BAA6B9hI,GAAQ,CAC9C,GAAIK,KAAKw9H,aAAa2F,iBAAiBrhH,SAASg5G,GAAO,CACrD,IAAM8H,GAAqB,EAAAC,EAAAA,8CAA6Cj4D,GAClEnvC,EAAQ,IAAMmnG,EAAmBnnG,OAAS,CAAC,GAC3C2nG,EAAYzjI,EAElB,IAAK,IAALoM,KAA0B5K,OAAOk1B,QAAQ+sG,GAAY,KAAAvwH,GAAA,EAAAiH,EAAAtQ,SAAAuC,EAAA,GAAzC1K,EAAGwR,EAAA,GAAEihE,EAAIjhE,EAAA,GACnB,GAAMxR,KAAOo6B,GAMN,GAAIA,EAAMp6B,MAAS,EAAAssG,EAAAA,gBAAelyE,EAAMp6B,IAAO,CACpD,IAAMyhI,EAAW,GAAGhI,WAAcz5H,IAClC,IAAI,EAAA+9H,EAAAA,sCAAqCtrD,EAAM9zE,KAAKw9H,cAAe,CACjE,IAAMwF,EAAoBhjI,KAAKijI,4BAA4BnvD,EAAMr4C,EAAMp6B,GAAMuO,EAAWkzH,QAC9D59H,IAAtB89H,IACFvnG,EAAMp6B,GAAO2hI,EAEjB,KAAO,CACL,IAAMA,EAAoBhjI,KAAK0iI,iBAAiB5uD,EAAMr4C,EAAMp6B,GAAMuO,EAAWkzH,QACnD59H,IAAtB89H,IAAoC,EAAAp1B,EAAAA,sBAAqBo1B,KAC3DvnG,EAAMp6B,GAAO2hI,EAEjB,CACF,MAnBqB,CACnB,IAAMF,EAAW,GAAGhI,WAAcz5H,IAC5B8gI,EAAcniI,KAAK+iI,sBAAsBjvD,EAAMlkE,EAAWkzH,QAC5C59H,IAAhBi9H,IACF1mG,EAAMp6B,GAAO8gI,EAEjB,CAcF,CAEA,MAAO,IAAKS,EAAoBnnG,MAAAA,EAClC,CAAO,OAAI,EAAA2jG,EAAAA,sCAAqCz/H,EAAOK,KAAKw9H,cACnDx9H,KAAKijI,4BAA4BtjI,EAAOirE,EAAgBh7D,EAAWkrH,IACjE,EAAAuI,EAAAA,kCAAiC1jI,EAAOK,KAAKw9H,mBAC5Bt4H,IAAnB0lE,EACHA,GACA,EAAAs4D,EAAAA,mCAAkCtzH,OAAW1K,EAAWlF,KAAK+P,UAE1C/P,KAAKsjI,mBAC1B3jI,GACA,EAAA4jI,EAAAA,0CAAyC34D,GACzCh7D,EACAkrH,EAIN,CACE,YAA0B51H,IAAnB0lE,EACHA,GACA,EAAAs4D,EAAAA,mCAAkCtzH,OAAW1K,EAAWlF,KAAK+P,SAErE,GAAC,CAAA1O,IAAA,wBAAA1B,MAED,SACEm0E,EACAlkE,EACAkrH,EAAe,IAEf,OAAI,EAAAuI,EAAAA,kCAAiCvvD,EAAM9zE,KAAKw9H,eACvC,EAAA0F,EAAAA,mCAAkCtzH,OAAW1K,EAAWlF,KAAK+P,WAC3D,EAAAqvH,EAAAA,sCAAqCtrD,EAAM9zE,KAAKw9H,cAClDx9H,KAAKijI,4BAA4BnvD,OAAM5uE,EAAW0K,EAAWkrH,IAC3D,EAAA2G,EAAAA,8BAA6B3tD,GAC/B9zE,KAAKsjI,mBAAmBxvD,EAAM,CAAC,EAAGlkE,EAAWkrH,IAE7C,EAAAoI,EAAAA,mCAAkCtzH,OAAW1K,EAAWlF,KAAK+P,SAExE,GAAC,CAAA1O,IAAA,8BAAA1B,MAED,SACEA,EACAirE,EACAh7D,EACAkrH,GAEA,IAAM6G,EAAmB3hI,KAAKw9H,aAAamE,iBAAiBhiI,EAAM47B,QAAU,GAGtE5sB,EAA0B,KAFV,EAAA40H,EAAAA,0CAAyC34D,IAKzDs0D,GAAU,EAAAsE,EAAAA,oCAAmC7jI,EAAM47B,MAAOv7B,KAAKw9H,cACrE,GAAI0B,KAAY,EAAAI,EAAAA,aAAY3wH,EAAOuwH,IAAW,CAC5C,IAAMuE,GAAU,EAAAC,EAAAA,gCAA+B/jI,EAAOK,KAAKw9H,cAC5C,MAAXiG,IACF90H,EAAOuwH,IAAW,EAAAyE,EAAAA,qCAAoC/zH,EAAW6zH,OAASv+H,EAAWlF,KAAK+P,UAE9F,CAIA,GADuB5O,OAAOuB,KAAKiM,GAAQ/L,OAAQowC,GAAMA,IAAMksF,GAC5CpgI,OAAS,EAC1B,OAAO6P,EAGT,IAAK,IAAMi1H,KAAmBjC,EAAkB,CAC9C,IAAMkC,EAAalkI,EAAMikI,GACzB,GAAkB,MAAdC,KAAwBD,KAAmBj1H,GAAS,CACtD,IAAMm1H,EAAYhJ,EAAO,GAAGA,KAAQ8I,IAAoBA,EAClDnB,EAAgBziI,KAAK+jI,2BAA2BF,EAAYj0H,EAAWk0H,GACxD,MAAjBrB,IACF9zH,EAAOi1H,GAAmBnB,EAE9B,CACF,CAEA,OAAOthI,OAAOuB,KAAKiM,GAAQ7P,OAAS,EAAI6P,OAASzJ,CACnD,GAAC,CAAA7D,IAAA,6BAAA1B,MAED,SAAmCA,EAAgBiQ,EAAmBkrH,GACpE,GAAI77H,MAAME,QAAQQ,GAAQ,CACxB,IAAMgjI,EAAoBhjI,EAAMijB,KAAMkxD,QAAgE5uE,KAAvD,EAAAg9H,EAAAA,2BAA0BpuD,EAAM9zE,KAAKw9H,eACpF,GAAImF,EAAmB,CACrB,IAAMlnG,EAAyD,CAAC,EAChE,IAAK,IAAMq4C,KAAQn0E,EAAO,CACxB,IAAMsiI,GAAS,EAAAC,EAAAA,2BAA0BpuD,EAAM9zE,KAAKw9H,cACpD,GAAIyE,EAAQ,CACV,IAAMa,EAAW,GAAGhI,WAAcmH,IAC5BE,EAAcniI,KAAK+iI,sBAAsBjvD,EAAMlkE,EAAWkzH,GAC7C,MAAfX,IACF1mG,EAAMwmG,GAAUE,EAEpB,CACF,CACA,MAAO,CAAE1mG,QACX,CACF,CAEA,IAAI,EAAAgmG,EAAAA,8BAA6B9hI,GAAQ,CACvC,GAAIK,KAAKw9H,aAAa2F,iBAAiBrhH,SAASg5G,GAAO,CACrD,IAAMr/F,EAAyD,CAAC,EAChE,IAAK,IAALuoG,KAA0B7iI,OAAOk1B,QAAQ12B,GAAQ,CAAF,IAAA6qC,GAAA,EAAA1wB,EAAAtQ,SAAAw6H,EAAA,GAAnC3iI,EAAGmpC,EAAA,GAAEspC,EAAItpC,EAAA,GACbs4F,EAAW,GAAGhI,WAAcz5H,IAC5B8gI,EAAcniI,KAAK+iI,sBAAsBjvD,EAAMlkE,EAAWkzH,GAC7C,MAAfX,IACF1mG,EAAMp6B,GAAO8gI,EAEhB,CACD,MAAO,CAAE1mG,MAAAA,EACX,CACA,IAAI,EAAA2jG,EAAAA,sCAAqCz/H,EAAOK,KAAKw9H,cACnD,OAAOx9H,KAAKijI,4BAA4BtjI,OAAOuF,EAAW0K,EAAWkrH,GAEvE,IAAI,EAAAuI,EAAAA,kCAAiC1jI,EAAOK,KAAKw9H,cAC/C,OAAO,EAAA0F,EAAAA,mCAAkCtzH,OAAW1K,EAAWlF,KAAK+P,SAExE,CAEA,OAAO,EAAAmzH,EAAAA,mCAAkCtzH,OAAW1K,EAAWlF,KAAK+P,SACtE,GAAC,CAAA1O,IAAA,qBAAA1B,MAED,SACEurG,EACAyyB,EACA/tH,EACAq0H,GAEA,IAAM5lG,EAA4B,IAAKs/F,GACjCj7H,GAAO,EAAAyzB,EAAAA,kBAAiB+0E,GAC1Bg5B,GAAgB,EAEpB,IAAK,IAAM7iI,KAAOqB,EAAM,CACtB,IAAM/C,EAAQurG,EAAI7pG,GACZ8iI,EAAcF,EAAa,GAAGA,KAAc5iI,IAAQA,EAE1D,GAAa,MAAT1B,EAAe,CACjB,IAAM8iI,EAAgBziI,KAAK0iI,iBAAiB/iI,EAAO0+B,EAASh9B,GAAMuO,EAAWu0H,QACvDj/H,IAAlBu9H,IACFpkG,EAASh9B,GAAOohI,EAChByB,GAAgB,EAEpB,CACF,CAEA,OAAOA,EAAgB7lG,OAAWn5B,CACpC,I,oKCxRFI,EAAAF,EAAA,OACA+/D,EAAA//D,EAAA,OAWAo7H,EAAAp7H,EAAA,OAW0CzG,EAAAA,+BAKvC,EAAA4K,EAAAC,SAFD,SAAA60H,EAAYb,IAA2D,EAAA7zH,EAAAH,SAAA,KAAA60H,GACrEr+H,KAAKw9H,aAAeA,CACtB,EAAC,EAAAn8H,IAAA,MAAA1B,MAED,SACEk+H,EACAK,EACAC,EACAC,GAEA,IAAIzvH,EAAyC,KACvCy1H,EAAWA,CAAC/iI,EAAa1B,KACzBk+H,EAAQx8H,KAAS1B,IAGP,MAAVgP,IACFA,EAAS,IAAKkvH,IAEhBlvH,EAAOtN,GAAO1B,IAEV0kI,EAAahjI,IACXA,KAAOw8H,IAGC,MAAVlvH,IACFA,EAAS,IAAKkvH,WAETlvH,EAAOtN,KAGhB,IAAK,IAAMA,KAAOF,OAAOuB,KAAKy7H,GAAc,CAC1C,IAAMmG,EAAcnG,EAAY98H,GAC1BkjI,EAAcrG,EAAa78H,GAC3BigI,EAAiBlD,EAAa/8H,GAEpC,QAAuB6D,IAAnBo8H,EAA8B,CAChC,IAAMkD,EAAcxkI,KAAKykI,oBAAoB5G,EAAQx8H,GAAMkjI,EAAaD,EAAahD,EAAgBjgI,QACjF6D,IAAhBs/H,GACFJ,EAAS/iI,EAAKmjI,EAElB,MAAO,IAAI,EAAA72B,EAAAA,gBAAe22B,GACxB,QAAoBp/H,IAAhBq/H,IAA8B,EAAA52B,EAAAA,gBAAe42B,GAE1C,CACL,IAAMh9B,GAAa,EAAAm4B,EAAAA,qCAAoC4E,EAAaC,GACpE,GAAmB,YAAfh9B,EACF88B,EAAUhjI,QACL,GAAmB,eAAfkmG,EAA6B,CACtC,IAAMm9B,GAAW,EAAA3F,EAAAA,sCAAqCuF,GAChDK,GAAW,EAAA5F,EAAAA,sCAAqCwF,GAClDG,EAASplI,EAAIqlI,EAASrlI,GACxB+kI,EAAUhjI,EAEd,CACF,MAZEgjI,EAAUhjI,EAchB,CAEA,OAAQsN,GAAUkvH,CACpB,GAAC,CAAAx8H,IAAA,sBAAA1B,MAED,SACEilI,EACAL,EACAD,EACAhD,EACAxG,GAEA,IAAI,EAAAntB,EAAAA,gBAAe22B,KAAgB,EAAA32B,EAAAA,gBAAe42B,GAAc,CAC9D,IAAMh9B,GAAa,EAAAm4B,EAAAA,qCAAoC4E,EAAaC,GACpE,GAAmB,YAAfh9B,EACF,OAAO+5B,EAET,GAAmB,eAAf/5B,EAA6B,CAC/B,IAAMm9B,GAAW,EAAA3F,EAAAA,sCAAqCuF,GAChDK,GAAW,EAAA5F,EAAAA,sCAAqCwF,GACtD,GAAIG,EAASplI,EAAIqlI,EAASrlI,EACxB,OAAOgiI,CAEX,CACA,OAAOsD,CACT,CAEA,QAAoB1/H,IAAhBo/H,QAA6Cp/H,IAAhBq/H,EAC/B,OAAI,EAAA32B,EAAAA,sBAAqB02B,GAChBtkI,KAAK6kI,yBAAyBD,OAAW1/H,EAAWo/H,EAAahD,IAIxE,EAAAG,EAAAA,8BAA6BmD,KAC7B,EAAAnD,EAAAA,8BAA6BH,KAC7B,EAAAtC,EAAAA,kBAAiBsF,GAEVtkI,KAAKkmG,IAAI0+B,EAAW,CAAC,EAAGN,EAAahD,GAEvCA,GAAkBsD,EAG3B,IAAI,EAAAh3B,EAAAA,sBAAqB02B,GAAc,CACrC,IAAMQ,GAAiB,EAAAl3B,EAAAA,sBAAqB22B,GAAeA,OAAcr/H,EACzE,OAAOlF,KAAK6kI,yBAAyBD,EAAWE,EAAgBR,EAAahD,EAC/E,CAEA,IAAI,EAAAtC,EAAAA,kBAAiBsF,KAAgB,EAAA7C,EAAAA,8BAA6BH,GAAiB,CACjF,IAAI,EAAAlC,EAAAA,sCAAqCkC,EAAgBthI,KAAKw9H,cAAe,CAC3E,IAAMuH,GAAiB,EAAA/F,EAAAA,kBAAiBuF,GAAeA,OAAcr/H,EAC/D8/H,EAAiBV,EAGjBW,GAAgB,EAAAC,EAAAA,8CACpB5D,EAAe/lG,MACfwpG,EACA/kI,KAAKw9H,cAED2H,GAAgB,EAAAD,EAAAA,8CACpB5D,EAAe/lG,MACfypG,EACAhlI,KAAKw9H,cAIP,GAAIyH,GAAiBE,GAAiBF,EAActlI,QAAUwlI,EAAcxlI,MAE1E,OADe,EAAAylI,EAAAA,0CAAyCH,EAAeE,KACxDF,EAENL,EAGFtD,EAGT,IAAMK,EAAmB3hI,KAAKw9H,aAAamE,iBAAiBL,EAAe/lG,QAAU,GAC/E8pG,EAAqB,IAAIn8G,IAAIy4G,GAE7B2D,GAAe,EAAA7D,EAAAA,8BAA6BmD,GAC5CW,EAAaD,EAAgBV,OAAwC1/H,EACvEsgI,EAA6CF,EAAe,KAAO,CAAC,EAClEG,EAAaA,CAAC33B,EAAenuG,KAC7B4lI,GAAcA,EAAWz3B,KAAWnuG,IAGtB,MAAd6lI,IACFA,EAAa,IAAKD,IAEpBC,EAAW13B,GAASnuG,IAGtB,IAAK,IAAMmuG,KAASwzB,EACb+D,EAAmBzgI,IAAIkpG,IAAYy3B,GAAgBz3B,KAASy3B,GAC/DE,EAAW33B,EAAOwzB,EAAexzB,IAIrC,IAAK,IAAMA,KAAS6zB,EAClB,GAAI7zB,KAASw2B,EAAa,CACxB,IAAMzD,EAAmByD,EAAYx2B,GAC/B43B,EAAmBX,IAAiBj3B,GACpC63B,EAAiBJ,EAAaA,EAAWz3B,QAAS5oG,EAClD0gI,EAAsBtE,EAAexzB,GAE3C,IAAI,EAAAH,EAAAA,gBAAekzB,GACjB,QAAyB37H,IAArBwgI,IAAmC,EAAA/3B,EAAAA,gBAAe+3B,GAE/C,CACL,IAAMn+B,GAAa,EAAAm4B,EAAAA,qCAAoCmB,EAAkB6E,GACzE,GAAmB,YAAfn+B,EACFk+B,EAAW33B,EAAO83B,QACb,GAAmB,eAAfr+B,EAA6B,CACtC,IAAMm9B,GAAW,EAAA3F,EAAAA,sCAAqC8B,GAChD8D,GAAW,EAAA5F,EAAAA,sCAAqC2G,GAClDhB,EAASplI,EAAIqlI,EAASrlI,GACxBmmI,EAAW33B,EAAO83B,EAEtB,CACF,MAZEH,EAAW33B,EAAO83B,QAaf,IAAI,EAAAh4B,EAAAA,sBAAqBizB,GAAmB,CACjD,IAAMiE,GAAiB,EAAAl3B,EAAAA,sBAAqB83B,GAAoBA,OAAmBxgI,EAOnFugI,EAAW33B,EANI9tG,KAAK6kI,yBAClBc,EACAb,EACAjE,EACA+E,GAGJ,MAAW,EAAA5G,EAAAA,kBAAiB6B,KAAqB,EAAAY,EAAAA,8BAA6BmE,IAQ5EH,EAAW33B,EAPI9tG,KAAKykI,oBAClBkB,EACAD,EACA7E,EACA+E,EACA,GAAG9K,KAAQhtB,KAIjB,CAGF,GAAkB,MAAd03B,EACF,OAAOZ,EAGT,IAAMiB,EAAY7lI,KAAKw9H,aAAasI,iBAAiBxE,EAAe/lG,OACpE,OAAIsqG,IAAcA,EAAU3gE,GAAGsgE,IAC7B5kG,QAAQ1N,IAAI,2CAA2CouG,EAAe/lG,iCAC/DqpG,GAGFY,CACT,CAEA,IAAI,EAAA/D,EAAAA,8BAA6BmD,GAAY,CAC3C,IAAMG,GAAiB,EAAAxB,EAAAA,0CAAyCgB,GAChE,OAAOvkI,KAAKkmG,IAAI0+B,EAAWG,EAAgBT,EAAahD,EAC1D,CACE,OAAOA,GAAkBsD,CAE7B,CAEA,OAAOA,CACT,GAAC,CAAAvjI,IAAA,2BAAA1B,MAED,SACEilI,EACAL,EACAD,EACAhD,GAEA,IACMzK,EAD2C,MAA3ByN,EAAY/E,aAAmD,MAA5BgF,GAAahF,YAElE,IAAIr2G,IACJ,IAAIA,IAAY,IACVq7G,GAAan/E,QAAUjkD,OAAOuB,KAAK6hI,EAAYn/E,SAAW,MAC1Dk/E,EAAYl/E,QAAUjkD,OAAOuB,KAAK4hI,EAAYl/E,SAAW,KAEnE,GAAInmD,MAAME,QAAQylI,IAAc3lI,MAAME,QAAQmiI,GAAiB,CAC7D,IAAMyE,GAAc,EAAAvO,EAAAA,4BAA2BoN,EAAY9wD,IACzD,EAAAouD,EAAAA,2BAA0BpuD,EAAM9zE,KAAKw9H,eAEjCwI,GAAmB,EAAAxO,EAAAA,4BAA2B8J,EAAiBxtD,IACnE,EAAAouD,EAAAA,2BAA0BpuD,EAAM9zE,KAAKw9H,eAEvC,GAAgC,IAA5BwI,EAAiBlnI,QAAqC,IAArB+3H,EAAY3zG,MAAc6iH,EAAYjnI,SAAW8lI,EAAU9lI,OAC9F,OAAO8lI,EAET,IAAMqB,EAAkB,IAAIthI,IAC5B,IAAK,IAAMmvE,KAAQiyD,EAAa,CAC9B,IAAM9D,GAAS,EAAAC,EAAAA,2BAA0BpuD,EAAM9zE,KAAKw9H,cAChDyE,GACFgE,EAAgBnhI,IAAIm9H,EAAQnuD,EAEhC,CACA,IAAMnlE,EAAoB,GACpBu3H,EAAe,IAAIh9G,IACrBi9G,GAAU,EACRC,EAAYtyD,IAChB,IAAMuyD,EAAM13H,EAAO7P,OACnB6P,EAAOjO,KAAKozE,GACRqyD,IAAYE,GAAOzB,EAAU9lI,QAAU8lI,EAAUyB,KAASvyD,KAC5DqyD,GAAU,IAId,IAAK,IAAMG,KAAiBN,EAAkB,CAC5C,IAAM/D,GAAS,EAAAC,EAAAA,2BAA0BoE,EAAetmI,KAAKw9H,cAC7D,GAAIyE,IAAWpL,EAAYjyH,IAAIq9H,GAAS,CACtCiE,EAAa37G,IAAI03G,GACjB,IAAMsE,EAAkBjC,GAAa7oG,QAAQwmG,GACvCuE,EAAkBjC,GAAa9oG,QAAQwmG,GACvCwE,EAAWR,EAAgBphI,IAAIo9H,IAGnC,EAAAjD,EAAAA,kBAAiBuH,KACjB,EAAAvH,EAAAA,kBAAiBwH,IACjBC,GACoB,iBAAbA,GACkB,iBAAlBH,EASPF,EAPmBpmI,KAAKykI,oBACtBgC,EACAD,EACAD,EACAD,EACA,QAAQrE,MAGDjiI,KAAK0mI,wBAAwBH,EAAiBC,GACvDJ,EAASE,GAETF,EAASK,GAAYH,EAEzB,CACF,CAEA,IAAK,IAAMG,KAAYV,EAAa,CAClC,IAAM9D,GAAS,EAAAC,EAAAA,2BAA0BuE,EAAUzmI,KAAKw9H,eACpDyE,GAAWiE,EAAathI,IAAIq9H,IAAYpL,EAAYjyH,IAAIq9H,IAC1DmE,EAASK,EAEb,CAEA,OAAIN,GAAWx3H,EAAO7P,SAAW8lI,EAAU9lI,OAClC8lI,EAEFj2H,CACT,CAAO,IAAI,EAAA8yH,EAAAA,8BAA6BmD,KAAc,EAAAnD,EAAAA,8BAA6BH,GAAiB,CAClG,GAA2C,IAAvCngI,OAAOuB,KAAK4+H,GAAgBxiI,QAAqC,IAArB+3H,EAAY3zG,KAC1D,OAAO0hH,EAET,IAAMW,EAAaX,EACfj2H,EAAyC,KACvCg4H,EAAeA,KACnB,GAAc,MAAVh4H,EAEF,IAAK,IAAMi4H,KADXj4H,EAAS,IAAK42H,GACG1O,UACRloH,EAAOi4H,GAGlB,OAAOj4H,GAET,IAAK,IAAMi4H,KAAM/P,EACf,GAAK+P,KAAiBrB,EAAY,CAChCoB,IACA,KACF,CAEF,IAAMvC,EAAWA,CAAC/iI,EAAa1B,KAC7B,IAAMib,EAAUjM,GAAU42H,EACtBlkI,KAAOuZ,GAAWA,EAAQvZ,KAAS1B,IAGvCgnI,IAAetlI,GAAO1B,IAGxB,IAAK,IAALoM,KAA2B5K,OAAOk1B,QAAQirG,GAAiB,CAAF,IAAAzuH,GAAA,EAAAiH,EAAAtQ,SAAAuC,EAAA,GAA7C1K,EAAGwR,EAAA,GAAElT,EAAKkT,EAAA,GACd0zH,EAAkBjC,GAAa7oG,QAAQp6B,GACvCmlI,EAAkBjC,GAAa9oG,QAAQp6B,GACvColI,EAAWlB,EAAWlkI,IAG1B,EAAA29H,EAAAA,kBAAiBuH,KACjB,EAAAvH,EAAAA,kBAAiBwH,KACjB,EAAA/E,EAAAA,8BAA6BgF,KAC7B,EAAAhF,EAAAA,8BAA6B9hI,GAG7BykI,EAAS/iI,EADUrB,KAAKykI,oBAAoBgC,EAAUD,EAAiBD,EAAiB5mI,EAAO,QAAQ0B,OAE7Fw1H,EAAYjyH,IAAIvD,IAAQrB,KAAK0mI,wBAAwBH,EAAiBC,IAChFpC,EAAS/iI,EAAK1B,EAEjB,CAED,OAAOgP,GAAU42H,CACnB,CAEA,OAAOjE,CACT,GAAC,CAAAjgI,IAAA,0BAAA1B,MAED,SACE2kI,EACAC,GAEA,IAAI,EAAA52B,EAAAA,gBAAe22B,KAAgB,EAAA32B,EAAAA,gBAAe42B,GAAc,CAC9D,IAAMh9B,GAAa,EAAAm4B,EAAAA,qCAAoC4E,EAAaC,GACpE,GAAmB,YAAfh9B,EACF,OAAO,EAET,GAAmB,eAAfA,EAA6B,CAC/B,IAAMm9B,GAAW,EAAA3F,EAAAA,sCAAqCuF,GAChDK,GAAW,EAAA5F,EAAAA,sCAAqCwF,GACtD,OAAOG,EAASplI,EAAIqlI,EAASrlI,CAC/B,CACA,OAAO,CACT,CAEA,YAAoB4F,IAAhBo/H,QAA6Cp/H,IAAhBq/H,OAI7B,EAAAvF,EAAAA,kBAAiBsF,MAAgB,EAAAtF,EAAAA,kBAAiBuF,UAIlCr/H,IAAhBo/H,QAA6Cp/H,IAAhBq/H,CAKnC,I,oJC7ZF/rG,EAAApzB,EAAA,OACA+/D,EAAA//D,EAAA,OAYAo7H,EAAAp7H,EAAA,OAQwCzG,EAAAA,6BAKrC,EAAA4K,EAAAC,SAFD,SAAA80H,EAAYd,IAA2D,EAAA7zH,EAAAH,SAAA,KAAA80H,GACrEt+H,KAAKw9H,aAAeA,CACtB,EAAC,EAAAn8H,IAAA,MAAA1B,MAED,SAAcu+H,EAA4BC,GACxC,IAAMxvH,EAAS,IAAKuvH,GACdoE,GAAY,EAAAC,EAAAA,sCAAqC5zH,GACjD0yH,GAAU,EAAAkB,EAAAA,sCAAqCpE,GAErD,IAAK,IAAM98H,KAAOF,OAAOuB,KAAK2+H,GAAU,CACtC,IAAMkD,EAAcjC,EAAUjhI,GACxBijI,EAAcjD,EAAQhgI,GAEtBwlI,EAAgB7mI,KAAK8mI,kBAAkBvC,EAAaD,EAAajjI,QACjD6D,IAAlB2hI,IACFvE,EAAUjhI,GAAOwlI,EAErB,CAEA,OAAOl4H,CACT,GAAC,CAAAtN,IAAA,oBAAA1B,MAED,SACE4kI,EACAD,EACAxJ,EAAe,IAEf,QAAoB51H,IAAhBo/H,EACF,OAAOC,EAGT,IAAI,EAAA52B,EAAAA,gBAAe42B,KAAgB,EAAA52B,EAAAA,gBAAe22B,GAEhD,OADmB,EAAAyC,EAAAA,wCAAuCxC,EAAaD,GAIzE,IAAI,EAAA32B,EAAAA,gBAAe22B,GAKjB,OAAI,EAAA12B,EAAAA,sBAAqB22B,GAChBA,EAEFD,EAGT,IAAI,EAAA12B,EAAAA,sBAAqB02B,GAAc,CACrC,IAAMQ,GAAiB,EAAAl3B,EAAAA,sBAAqB22B,GAAeA,OAAcr/H,EACzE,OAAOlF,KAAKgnI,wBAAwBlC,EAAgBR,EAAaxJ,EACnE,CAEA,IAAI,EAAAkE,EAAAA,kBAAiBsF,GAAc,CACjC,IAAMzG,GAAU,EAAA0F,EAAAA,0CAAyCgB,GAGnDU,EAAgBjlI,KAAKinI,cAAcpJ,GACnCsH,EAAgBnlI,KAAKinI,cAAc3C,GAEzC,GAAIW,GAAiBE,GAAiBF,EAActlI,QAAUwlI,EAAcxlI,MAG1E,OADe,EAAAylI,EAAAA,0CAAyCH,EAAeE,KACxDA,EAENb,EAGAzG,EAIX,IAAMlvH,EAA0B,IAAKkvH,GAErC,IAAK,IAAMx8H,KAAOF,OAAOuB,KAAK4hI,GAAc,CAC1C,IAAM4C,EAAclnI,KAAK8mI,kBAAkBjJ,EAAQx8H,GAAMijI,EAAYjjI,GAAMy5H,EAAO,GAAGA,KAAQz5H,IAAQA,QACjF6D,IAAhBgiI,IACFv4H,EAAOtN,GAAO6lI,EAElB,CAEA,OAAOv4H,CACT,CAEA,OAAO21H,CACT,GAAC,CAAAjjI,IAAA,gBAAA1B,MAED,SAAsB0+B,GACpB,IAAK,IAAMh9B,KAAOF,OAAOuB,KAAK27B,GAAW,CACvC,IAAM1+B,EAAQ0+B,EAASh9B,GACvB,IAAI,EAAAi+H,EAAAA,aAAY3/H,GACd,OAAOA,CAEX,CAEF,GAAC,CAAA0B,IAAA,0BAAA1B,MAED,SACEmlI,EACA/D,EACAjG,GAEA,IAAMyE,EAC0B,MAA9BwB,EAAexB,aAAsD,MAA/BuF,GAAgBvF,YAClD94G,KAAKw0C,IAAI8lE,EAAexB,aAAe,EAAGuF,GAAgBvF,aAAe,QACzEr6H,EACAyJ,EAA8B,CAClC8sB,MAAO,IAAMqpG,GAAgBrpG,OAAS,CAAC,GACvC2pB,QAAwB,MAAfm6E,EAAsB,CAAC,EAAI,IAAMuF,GAAgB1/E,SAAW,CAAC,KAAQ27E,GAAgB37E,SAAW,CAAC,MACvF,MAAfm6E,GAAuBA,EAAcC,EAAAA,0CACrC,CAAED,YAAaA,EAAc,GAC7B,CAAC,GAGP,IAAK,IAAMz1H,KAAM3I,OAAOuB,KAAKq+H,EAAetlG,OAAS,CAAC,GAAI,CACxD,IAAM+qG,EAAkB73H,EAAO8sB,QAAQ3xB,GACjCy8H,EAAkBxF,EAAetlG,QAAQ3xB,GAEzCq9H,EAAoBnnI,KAAK8mI,kBAAkBN,EAAiBD,QACxCrhI,IAAtBiiI,IAAoC,EAAAv5B,EAAAA,sBAAqBu5B,KAC3Dx4H,EAAO8sB,MAAQ9sB,EAAO8sB,OAAS,CAAC,EAChC9sB,EAAO8sB,MAAM3xB,GAAMq9H,EAEvB,CAEA,IAAM9uC,EACJyiC,GAAQ96H,KAAKw9H,aAAakB,qBAAuB1+H,KAAKw9H,aAAakB,qBAAqB5D,QAAQ51H,EAC5Fu5H,EAAmB5uH,KAAKC,MAE9B,IAAK,IAAMzO,KAAO,EAAA80B,EAAAA,kBAAiBxnB,EAAOy2C,SAAW,CAAC,GAAI,CACpDz2C,EAAO8sB,cACF9sB,EAAO8sB,MAAMp6B,GAEtB,IAAM+lI,EAAkBtC,GAAgB1/E,UAAU/jD,GAC5CgmI,EAAkBtG,GAAgB37E,UAAU/jD,GAC5C45D,GAAOosE,GAAmB,IAAMD,GAAmB,GAAKC,EAAkBD,EAErE,MAAPnsE,KACGo9B,GAAaomC,EAAmBxjE,EAAMo9B,EACzC1pF,EAAOy2C,QAAS/jD,GAAO45D,SAEhBtsD,EAAOy2C,QAAS/jD,GAG7B,CAEA,OAAOsN,CACT,I,mKC1KF6pB,EAAApzB,EAAA,OACA2T,EAAA3T,EAAA,OACA+/D,EAAA//D,EAAA,OAYAo7H,EAAAp7H,EAAA,OAgBAi4H,EAAAj4H,EAAA,OAEyCzG,EAAAA,8BAStC,EAAA4K,EAAAC,SAJD,SAAAo0H,EAAYJ,EAA2DztH,IAAkB,EAAApG,EAAAH,SAAA,KAAAo0H,GACvF59H,KAAKw9H,aAAeA,EACpBx9H,KAAK+P,SAAWA,EAChB/P,KAAK25H,cAAgB,IAAI2E,EAAAA,4BAA4Bd,EACvD,EAAC,EAAAn8H,IAAA,MAAA1B,MAED,SACE89H,EACAC,EACAC,EACA73E,EACAl2C,GAEA,IAAMyuB,GAAW,EAAA+tB,EAAAA,mBAAkBuxE,GAC7B2J,GAAc,EAAA/E,EAAAA,sCAAqClkG,GACnDkpG,GAAiB,EAAAhF,EAAAA,sCAAqCz8E,GAEtDpjD,GAAO,EAAAyzB,EAAAA,kBAAiBunG,GAAQ96H,OAAQvB,GAAgB,cAARA,GAEtD,IAAK,IAAMysG,KAASprG,EAAM,CACxB,IAAM0pG,EAAWqxB,EAAO3vB,GAClB9vC,EAAW0/D,EAAO5vB,GAExB,KAAI,EAAA05B,EAAAA,8BAA6Bp7B,EAAUpuC,GAA3C,CAIA,IAAMwkE,EAAW10B,EACX25B,EAAiBznI,KAAK0nI,mBAC1BjK,EACAC,EACAC,EACA73E,EACAsmD,EACApuC,EACAspE,EAAY9E,GACZ+E,EAAe/E,GACf5yH,EACA4yH,QAEqBt9H,IAAnBuiI,IACFH,EAAY9E,GAAYiF,EAhB1B,CAkBF,CAEA,OAAOppG,CACT,GAAC,CAAAh9B,IAAA,qBAAA1B,MAED,SACEgoI,EACAC,EACAC,EACAC,EACA17B,EACApuC,EACA4M,EACA+1D,EACA/wH,EACAkrH,GAEA,GAAI77H,MAAME,QAAQ6+D,GAAW,CAC3B,IAAM2kE,EAAoB3kE,EAASp7C,KAChCkxD,QAAgE5uE,KAAvD,EAAAg9H,EAAAA,2BAA0BpuD,EAAM9zE,KAAKw9H,eAE3CuK,EACJ9oI,MAAME,QAAQitG,IACdA,EAASxpF,KAAMkxD,QAAyE5uE,KAAvD,EAAAg9H,EAAAA,2BAA0BpuD,EAAM9zE,KAAKw9H,eAExE,GAAImF,GAAqBoF,EACvB,OAAO/nI,KAAKgoI,6BAA6B57B,EAAUpuC,EAAU4M,EAAgB+1D,EAAY/wH,EAAWkrH,GAEpG,IAAM+L,EAAgB7mI,KAAK25H,cAAcmN,kBAAkBl8D,EAAgB+1D,EAAY7F,GACjF/sB,GAAe,EAAAJ,EAAAA,gBAAek5B,GAAiBA,OAAgB3hI,EACrE,OAAO,EAAAg+H,EAAAA,mCAAkCtzH,EAAWm+F,EAAc/tG,KAAK+P,SAE3E,CAAO,GAAwB,iBAAbiuD,GAAsC,OAAbA,EAAmB,CAC5D,GAAIh+D,KAAKw9H,aAAa2F,iBAAiBrhH,SAASg5G,GAC9C,OAAO96H,KAAKioI,kCACV77B,EACApuC,EACA4M,EACA+1D,EACA/wH,EACAkrH,GAEG,IAAI,EAAAsE,EAAAA,sCAAqCphE,EAAUh+D,KAAKw9H,cAAe,CAC5E,IAAMqJ,EAAgB7mI,KAAK25H,cAAcmN,kBAAkBl8D,EAAgB+1D,EAAY7F,GACvF,OAAO96H,KAAKkoI,8BAA8B97B,EAAUpuC,EAAU6oE,EAAej3H,EAAWkrH,EAC1F,CAAO,IAAI,EAAAuI,EAAAA,kCAAiCrlE,EAAUh+D,KAAKw9H,cAAe,CACxE,IAAMqJ,EAAgB7mI,KAAK25H,cAAcmN,kBAAkBl8D,EAAgB+1D,EAAY7F,GACjF/sB,GAAe,EAAAJ,EAAAA,gBAAek5B,GAAiBA,OAAgB3hI,EACrE,OAAO,EAAAg+H,EAAAA,mCAAkCtzH,EAAWm+F,EAAc/tG,KAAK+P,SACzE,CACE,IAAMo4H,GAAc,EAAA1G,EAAAA,8BAA6Br1B,GAAYA,OAAWlnG,EAaxE,OAZuBlF,KAAKooI,qBAC1BT,EACAC,EACAC,EACAC,EACAK,EACAnqE,GACA,EAAAulE,EAAAA,0CAAyC34D,IACzC,EAAA24D,EAAAA,0CAAyC5C,GACzC/wH,EACAkrH,EAIN,CACE,IAAM+L,EAAgB7mI,KAAK25H,cAAcmN,kBAAkBl8D,EAAgB+1D,EAAY7F,GACjF/sB,GAAe,EAAAJ,EAAAA,gBAAek5B,GAAiBA,OAAgB3hI,EACrE,OAAO,EAAAg+H,EAAAA,mCAAkCtzH,EAAWm+F,EAAc/tG,KAAK+P,SAE3E,GAAC,CAAA1O,IAAA,+BAAA1B,MAED,SACEysG,EACApuC,EACA4M,EACA+1D,EACA/wH,EACAkrH,GAEA,IAAM8H,GAAqB,EAAAyF,EAAAA,2CACzB,EAAAxF,EAAAA,8CAA6Cj4D,IAEzCnvC,EAAQmnG,EAAmBnnG,OAAS,CAAC,EAErC6sG,EAAS,IAAIp/G,IACnB,IAAK,IAAM4qD,KAAQ9V,EAAU,CAC3B,IAAMikE,GAAS,EAAAC,EAAAA,2BAA0BpuD,EAAM9zE,KAAKw9H,cAChDyE,GACFqG,EAAO/9G,IAAI03G,EAEf,CAEA,IAAMsG,EAAgC,GAChCC,EAAe,IAAI7jI,IACzB,GAAI1F,MAAME,QAAQitG,GAChB,IAAK,IAAMq8B,KAAWr8B,EAAU,CAC9B,IAAMs8B,GAAY,EAAAxG,EAAAA,2BAA0BuG,EAASzoI,KAAKw9H,cACrDkL,IAGAF,EAAa5jI,IAAI8jI,IACpBF,EAAa1jI,IAAI4jI,EAAWD,GAEzBH,EAAO1jI,IAAI8jI,KACd9F,EAAmBx9E,QAAUw9E,EAAmBx9E,SAAW,CAAC,EAC5Dw9E,EAAmBx9E,QAAQsjF,GAAa94H,SACjC6rB,EAAMitG,GACbH,EAAoB7nI,KAAKgoI,IAE7B,CAaF,IAAK,IAAM50D,KAVPy0D,EAAoBzpI,OAAS,IAC/B,EAAAq1B,EAAAA,IAAG,sCAAuC,CACxC2mG,OACA6N,aAAcJ,EAAoBzpI,OAClCq/B,OAAQl/B,MAAME,QAAQitG,GAAYA,EAASttG,OAAS,EACpDs/B,OAAQ4/B,EAASl/D,OACjB8Q,cAIeouD,GAAU,CAC3B,IAAMikE,GAAS,EAAAC,EAAAA,2BAA0BpuD,EAAM9zE,KAAKw9H,cACpD,GAAIyE,EAAQ,CACV,IAAMwG,EAAUD,EAAa3jI,IAAIo9H,GAEjC,KAAK,EAAAuF,EAAAA,8BAA6BiB,EAAS30D,GAAO,CAChD,IAAM80D,GAAuB,EAAAh7B,EAAAA,sBAAqB+yB,GAAcA,OAAaz7H,EACvEi8H,EAAiByH,GAAsBntG,QAAQwmG,GAC/Ca,EAAW,GAAGhI,WAAcmH,IAC5BkF,EAAoBnnI,KAAK25H,cAAcmN,kBAAkBrrG,EAAMwmG,GAASd,EAAgB2B,GAExFX,EAAcniI,KAAK6oI,eAAeJ,EAAS30D,EAAMqzD,EAAmBv3H,EAAWkzH,QACjE59H,IAAhBi9H,IACF1mG,EAAMwmG,GAAUE,EAEpB,CAEIS,EAAmBx9E,SAAW68E,KAAUW,EAAmBx9E,gBACtDw9E,EAAmBx9E,QAAQ68E,EAEtC,CACF,CAEA,IAAMxB,EACJt/H,OAAOuB,KAAK+4B,GAAO38B,OAAS,GAC3B8jI,EAAmBx9E,SAAWjkD,OAAOuB,KAAKkgI,EAAmBx9E,SAAStmD,OAAS,EAE5EgqI,GAAsB,EAAAC,EAAAA,qCAC1BnG,EACA9H,EACAlrH,EACA5P,KAAKw9H,cAEP,OAAOiD,GAAc71D,EAAiBk+D,OAAsB5jI,CAC9D,GAAC,CAAA7D,IAAA,oCAAA1B,MAED,SACEysG,EACApuC,EACA4M,EACA+1D,EACA/wH,EACAkrH,GAEA,IAAM8H,GAAqB,EAAAyF,EAAAA,2CACzB,EAAAxF,EAAAA,8CAA6Cj4D,IAEzCnvC,EAAQmnG,EAAmBnnG,OAAS,CAAC,EAErCutG,GAAU,EAAAvH,EAAAA,8BAA6Br1B,GAAYA,OAAWlnG,EAEpE,GAAI8jI,EACF,IAAK,IAAM3nI,KAAO,EAAA80B,EAAAA,kBAAiB6yG,GAC3B3nI,KAAO28D,IACX4kE,EAAmBx9E,QAAUw9E,EAAmBx9E,SAAW,CAAC,EAC5Dw9E,EAAmBx9E,QAAQ/jD,GAAOuO,SAC3B6rB,EAAMp6B,IAKnB,IAAK,IAAL0K,KAA0B5K,OAAOk1B,QAAQ2nC,GAAW,KAAAnrD,GAAA,EAAAiH,EAAAtQ,SAAAuC,EAAA,GAAxC1K,EAAGwR,EAAA,GAAEihE,EAAIjhE,EAAA,GACb41H,EAAUO,IAAU3nI,GAC1B,GAAIonI,IAAY30D,EAAM,CACpB,IAAM80D,GAAuB,EAAAh7B,EAAAA,sBAAqB+yB,GAAcA,OAAaz7H,EACvEi8H,EAAiByH,GAAsBntG,QAAQp6B,GAC/CyhI,EAAW,GAAGhI,WAAcz5H,IAC5B8lI,EAAoBnnI,KAAK25H,cAAcmN,kBAAkBrrG,EAAMp6B,GAAM8/H,EAAgB2B,GAErFX,EAAcniI,KAAK6oI,eAAeJ,EAAS30D,EAAMqzD,EAAmBv3H,EAAWkzH,QACjE59H,IAAhBi9H,IACF1mG,EAAMp6B,GAAO8gI,EAEjB,CAEIS,EAAmBx9E,SAAW/jD,KAAOuhI,EAAmBx9E,gBACnDw9E,EAAmBx9E,QAAQ/jD,EAEtC,CAEA,IAAMo/H,EACJt/H,OAAOuB,KAAK+4B,GAAO38B,OAAS,GAC3B8jI,EAAmBx9E,SAAWjkD,OAAOuB,KAAKkgI,EAAmBx9E,SAAStmD,OAAS,EAE5EgqI,GAAsB,EAAAC,EAAAA,qCAC1BnG,EACA9H,EACAlrH,EACA5P,KAAKw9H,cAEP,OAAOiD,GAAc71D,EAAiBk+D,OAAsB5jI,CAC9D,GAAC,CAAA7D,IAAA,iBAAA1B,MAED,SACE8oI,EACAQ,EACAC,EACAt5H,EACAkrH,GAEA,IAAI,EAAAuI,EAAAA,kCAAiC4F,EAASjpI,KAAKw9H,cAAe,CAChE,IAAMzvB,GAAe,EAAAJ,EAAAA,gBAAeu7B,GAAsBA,OAAqBhkI,EAC/E,OAAO,EAAAg+H,EAAAA,mCAAkCtzH,EAAWm+F,EAAc/tG,KAAK+P,SACzE,CAAO,IAAI,EAAAqvH,EAAAA,sCAAqC6J,EAASjpI,KAAKw9H,cAC5D,OAAOx9H,KAAKkoI,8BAA8BO,EAASQ,EAASC,EAAoBt5H,EAAWkrH,GAE3F,IAAM/sB,GAAe,EAAAJ,EAAAA,gBAAeu7B,GAAsBA,OAAqBhkI,EAC/E,OAAO,EAAAg+H,EAAAA,mCAAkCtzH,EAAWm+F,EAAc/tG,KAAK+P,SAE3E,GAAC,CAAA1O,IAAA,gCAAA1B,MAED,SACEysG,EACApuC,EACA4M,EACAh7D,EACAkrH,GAEA,IAAM6G,EAAmB3hI,KAAKw9H,aAAamE,iBAAiB3jE,EAASziC,QAAU,GACzEoxE,GAAiC,EAAA42B,EAAAA,0CAAyC34D,GAC5E61D,GAAa,EAGXvB,GAAU,EAAAsE,EAAAA,oCAAmCxlE,EAASziC,MAAOv7B,KAAKw9H,cACxE,GAAI0B,EAAS,CACX,IAAMuE,GAAU,EAAAC,EAAAA,gCAA+B1lE,EAAUh+D,KAAKw9H,cAC9D,GAAe,MAAXiG,EAAiB,CACnB,IAAM0F,GAAmB,EAAA7J,EAAAA,aAAY3yB,EAAcuyB,IAAYvyB,EAAcuyB,QAAWh6H,EAEnFikI,GAAoBA,EAAiBxpI,QAAU8jI,IAClD92B,EAAcuyB,IAAW,EAAAyE,EAAAA,qCACvB/zH,EACA6zH,EACA0F,EACAnpI,KAAK+P,UAEP0wH,GAAa,EAEjB,CACF,CAEA,IAAK,IAAMmD,KAAmBjC,EAAkB,CAC9C,IAAMyH,GACJ,EAAA3H,EAAAA,8BAA6Br1B,IAAaw3B,KAAmBx3B,EAAWA,EAASw3B,QAAmB1+H,EAChGmkI,EAAgBrrE,EAAS4lE,GAK/B,KAAK,EAAA4D,EAAAA,8BAA6B4B,EAAeC,GAAgB,CAC/D,IAAMC,EAAsB38B,EAAci3B,GACpCE,EAAYhJ,EAAO,GAAGA,KAAQ8I,IAAoBA,EAClD6D,EAAiBznI,KAAKupI,6BAC1BH,EACAC,EACAC,EACA15H,EACAk0H,GAEoB,MAAlB2D,IACF96B,EAAci3B,GAAmB6D,EACjChH,GAAa,EAEjB,CACF,CAEA,OAAOA,GAAct/H,OAAOuB,KAAKiqG,GAAe7tG,OAAS,EAAI6tG,OAAgBznG,CAC/E,GAAC,CAAA7D,IAAA,+BAAA1B,MAED,SACEysG,EACApuC,EACA4M,EACAh7D,EACAkrH,GAEA,GAAI77H,MAAME,QAAQ6+D,GAAW,CAC3B,IAAM2kE,EAAoB3kE,EAASp7C,KAChCkxD,QAAgE5uE,KAAvD,EAAAg9H,EAAAA,2BAA0BpuD,EAAM9zE,KAAKw9H,eAE3CuK,EACJ9oI,MAAME,QAAQitG,IACdA,EAASxpF,KAAMkxD,QAAyE5uE,KAAvD,EAAAg9H,EAAAA,2BAA0BpuD,EAAM9zE,KAAKw9H,eACxE,GAAImF,GAAqBoF,EACvB,OAAO/nI,KAAKgoI,6BAA6B57B,EAAUpuC,EAAU4M,OAAgB1lE,EAAW0K,EAAWkrH,GAC9F,GAAI98D,EAASl/D,OAAS,GAAMG,MAAME,QAAQitG,IAAaA,EAASttG,OAAS,EAAI,CAClF,IAAMivG,GAAe,EAAAJ,EAAAA,gBAAe/iC,GAAkBA,OAAiB1lE,EACvE,OAAO,EAAAg+H,EAAAA,mCAAkCtzH,EAAWm+F,EAAc/tG,KAAK+P,SACzE,CACE,OAAO/P,KAAKgoI,6BAA6B57B,EAAUpuC,EAAU4M,OAAgB1lE,EAAW0K,EAAWkrH,EAEvG,CAEA,IAAI,EAAA2G,EAAAA,8BAA6BzjE,GAAW,CAC1C,GAAIh+D,KAAKw9H,aAAa2F,iBAAiBrhH,SAASg5G,GAC9C,OAAO96H,KAAKioI,kCAAkC77B,EAAUpuC,EAAU4M,OAAgB1lE,EAAW0K,EAAWkrH,GAE1G,IAAI,EAAAsE,EAAAA,sCAAqCphE,EAAUh+D,KAAKw9H,cACtD,OAAOx9H,KAAKkoI,8BAA8B97B,EAAUpuC,EAAU4M,EAAgBh7D,EAAWkrH,GAE3F,IAAI,EAAAuI,EAAAA,kCAAiCrlE,EAAUh+D,KAAKw9H,cAAe,CACjE,IAAMzvB,GAAe,EAAAJ,EAAAA,gBAAe/iC,GAAkBA,OAAiB1lE,EACvE,OAAO,EAAAg+H,EAAAA,mCAAkCtzH,EAAWm+F,EAAc/tG,KAAK+P,SACzE,CACF,CAEA,IAAMg+F,GAAe,EAAAJ,EAAAA,gBAAe/iC,GAAkBA,OAAiB1lE,EACvE,OAAO,EAAAg+H,EAAAA,mCAAkCtzH,EAAWm+F,EAAc/tG,KAAK+P,SACzE,GAAC,CAAA1O,IAAA,uBAAA1B,MAED,SACEgoI,EACAC,EACAC,EACAC,EACArK,EACAC,EACAC,EACA73E,EACAl2C,EACAq0H,GAEA,IAAM5lG,EAA4B,IAAKs/F,GACjCj7H,GAAO,EAAAyzB,EAAAA,kBAAiBunG,GAC1B+C,GAAa,EAEjB,IAAK,IAAMp/H,KAAOqB,EAAM,CACtB,IAAM0pG,EAAWqxB,IAASp8H,GACpB28D,EAAW0/D,EAAOr8H,GAClB8iI,EAAcF,EAAa,GAAGA,KAAc5iI,IAAQA,EAE1D,KAAI,EAAAmmI,EAAAA,8BAA6Bp7B,EAAUpuC,GAI3C,GAAgB,MAAZouC,GAAgC,MAAZpuC,EAAkB,CACxC,IAAMypE,EAAiBznI,KAAK0nI,mBAC1BC,EACAC,EACAC,EACAC,OACA5iI,EACA84D,EACA3/B,EAASh9B,GACTykD,EAAYzkD,GACZuO,EACAu0H,QAEqBj/H,IAAnBuiI,IACFppG,EAASh9B,GAAOomI,EAChBhH,GAAa,EAEjB,MAAO,GAAgB,MAAZr0B,EAAkB,CAC3B,IAAMq7B,EAAiBznI,KAAK0nI,mBAC1BC,EACAC,EACAC,EACAC,EACA17B,EACApuC,EACA3/B,EAASh9B,GACTykD,EAAYzkD,GACZuO,EACAu0H,QAEqBj/H,IAAnBuiI,IACFppG,EAASh9B,GAAOomI,EAChBhH,GAAa,EAEjB,CACF,CAEA,OAAOA,GAAct/H,OAAOuB,KAAKi7H,GAAiB7+H,OAAS,EAAIu/B,OAAWn5B,CAC5E,I,mGC5dK,SACL0V,EACAg0D,GAEA,OAA6B,MAAtBh0D,EAAQlL,YAA6C,MAAvBk/D,EAASl/D,YAAsBkL,EAAQlL,aAAek/D,EAASl/D,UACtG,C,6ECyVO,SAAoB0lB,GACzB,OAAOI,EAAa/O,KAAKowD,IAAIzhD,EAAOz1B,OAAQy1B,EAAOigC,KACrD,E,gCA0IO,SACLqO,EACA0oC,EACAzsG,EACA6pI,GAEA,MAAY,MAARA,EACK7pI,EAEAgkE,EAAUD,EAAO0oC,EAAUzsG,EADjB,OAAR6pI,EACgC,CAAC3qI,EAAG4kE,IAAM5kE,EAAI4kE,EACtC,OAAR+lE,EACgC,CAAC3qI,EAAG4kE,IAAM5kE,EAAI4kE,EACtC,OAAR+lE,EACgC,CAAC3qI,EAAG4kE,KAAM,EAAAgmE,EAAAA,sBAAqB5qI,EAAI4kE,GAEnC,CAAC5kE,EAAG4kE,KAAM,EAAAgmE,EAAAA,sBAAqB5qI,EAAI4kE,GAEhF,E,mCAlXO,SAAyB9jE,EAAe01D,GAC7C,MAAa,MAATA,EACKwL,EAAgBlhE,GAEhB61B,EAAa71B,EAAO01D,EAE/B,E,wEA2bO,SACLq0E,EACAC,EACAC,EACAva,EACAC,GAEA,IACM5rD,EAAQkmE,EADalf,EAAqBgf,EAAWC,GAErDE,EAAsBnf,EAAqB2E,EAAYC,GAC7D,OAAO7oG,KAAKC,MAAMg9C,EAAQmmE,EAC5B,E,eAxbO,SAAsBlqI,GAC3B,OAAO61B,EAAa71B,EAAMA,MAAOA,EAAM01D,KACzC,E,iBA2SO,SAAwBx2D,EAAY4kE,GACzC,OAAO5kE,EAAEc,MAAQqwE,EAAiBvM,EAAG5kE,EAAEw2D,MAAM11D,KAC/C,E,wEAoHO,SAAgC+jE,EAAgB/jE,EAAuC01D,GAC5F,MAAqB,iBAAV11D,EACF61B,EAAa71B,EAAO01D,GAClBsC,EAAah4D,GACfqwE,EAAiB0oB,EAAgBh1B,GAAO,EAAA9C,EAAAA,sBAAqBjhE,EAAMA,MAAQ,IAAK,IAAK01D,GAErF11D,CAEX,E,mBA3WO,SAA0By1B,EAAiBjC,EAAqBwkB,GACrE,OAAOmyF,EAAW10G,EAAQjC,EAAUwkB,GAAe,EACrD,E,iBA1MO,SAAwBviB,EAAwC20G,GAAoB,GACzF,MAAsB,iBAAX30G,EACF,GAAGA,IACDuiC,EAAaviC,GACf,GAAGA,EAAOz1B,QAAQoqI,EAAW,IAAM,KAEnC,GAAG/3E,WAAW58B,EAAOz1B,MAAMkoG,QAAQ,IAAIjmG,aAAamoI,EAAW,IAAI30G,EAAOigC,OAAS,IAE9F,E,8BAwXO,SAAmBjgC,EAAwCz1B,GAChE,OAAO4nG,EAAWnyE,EAAQz1B,EAAO,CAACd,EAAG4kE,IAAM5kE,IAAM4kE,EACnD,E,gBAjBO,SACLruC,EACAz1B,GAEA,OAAc,MAAVy1B,GAA2B,MAATz1B,IAED,MAAVy1B,GAA2B,MAATz1B,KAER,MAAVy1B,GAA2B,MAATz1B,IAGpB4nG,EAAWnyE,EAASz1B,EAAQ,CAACd,EAAG4kE,IAAM5kE,IAAM4kE,EAEvD,E,cAMO,SAAqBruC,EAAiBz1B,GAC3C,OAAOy1B,EAAOz1B,QAAUA,EAAMA,OAASy1B,EAAOigC,OAAS11D,EAAM01D,IAC/D,E,wBAxXO,SACLjgC,EACAuiB,EACAxkB,GAEA,GAAIukC,EAAUtiC,GACZ,OAAOA,EACF,GAAIuiC,EAAaviC,GAAS,CAC/B,IAAM5e,GAAW,EAAAi3D,EAAAA,cAAa91B,EAAcxkB,EAASiR,WAErD,OAAOs0D,GADO,EAAAuI,EAAAA,gBAAezqF,EAAU2c,GACTiC,EAAOz1B,MAAQ,IAC/C,CAEE,OAAO61B,EAAa,GADP,EAAAswD,EAAAA,2CAA0C3yD,EAAUwkB,GAGrE,E,oBAyLO,SAA2BqyF,EAAoBztE,GACpD,OAAa,IAATA,EACK/mC,EAAa,EAAGw0G,EAAU30E,MACf,IAATkH,EACFytE,EAEAj6D,EAAkB2oB,EAAgBsxC,EAAWtf,EAAqBnuD,EAAM,KAEnF,E,gDAEO,SAA+BnnC,EAAiBmnC,EAAcppC,GACnE,OAAOm3F,EAAa5xB,EAAgB+E,EAAoBroE,EAAQmnC,GAAO,IAAMppC,EAAUiC,EAAOigC,KAChG,E,YA+HO,SAAmBjgC,EAAwCz1B,GAChE,OAAO4nG,EAAWnyE,EAAQz1B,EAAO,CAACd,EAAG4kE,IAAM5kE,EAAI4kE,EACjD,E,aAMO,SAAoBruC,EAAwCz1B,GACjE,OAAO4nG,EAAWnyE,EAAQz1B,EAAO,CAACd,EAAG4kE,IAAM5kE,GAAK4kE,EAClD,E,mBAvKO,SAA0BruC,EAAiBjC,EAAqBwkB,GACrE,OAAOmyF,EAAW10G,EAAQjC,EAAUwkB,EAAc,EACpD,E,gBAuIO,SAAuBviB,GAC5B,OAAOI,GAAcJ,EAAOz1B,MAAOy1B,EAAOigC,KAC5C,E,+BAnMO,SAAwBkQ,GAC7B,IAAM0kE,EAAY1kE,EAClB,OACE0kE,GACqB,iBAAdA,GACP,SAAUA,GACV,UAAWA,IACS,OAAnBA,EAAU50E,MAAoC,OAAnB40E,EAAU50E,MAAoC,MAAnB40E,EAAU50E,KAErE,E,mDAgNO,SAAmBjgC,EAAwCz1B,GAChE,OAAO4nG,EAAWnyE,EAAQz1B,EAAO,CAACd,EAAG4kE,IAAM5kE,EAAI4kE,EACjD,E,aAMO,SAAoBruC,EAAwCz1B,GACjE,OAAO4nG,EAAWnyE,EAAQz1B,EAAO,CAACd,EAAG4kE,IAAM5kE,GAAK4kE,EAClD,E,aAyBO,SAAoBxH,GACzB,OAAO,EAAA2L,EAAAA,sBAAqB3L,EAASiuE,GAAuB,EAC9D,E,6EAvVO,SAA6B70E,GAClC,MAAgB,OAATA,EAAgB,KAAO,IAChC,E,mCAoBO,SAAyB2jC,GAC9B,GAAW,MAAPA,EAAJ,CAGA,IAAMub,EAAQvb,EAAIub,MAAM,sBACxB,OAAIA,EACK1zC,GAAgB,EAAAD,EAAAA,sBAAqB5O,WAAWuiD,EAAM,IAAK,IAE3D41B,EAAanxC,EALtB,CAOF,E,sBAiJO,SAA6BxoB,GAClC,IAAMnb,EAAOmb,EAAO,IAAIp7C,OAAOigC,MAAQ,KACvC,OAAOmb,EAAO1zC,OACZ,CAACC,EAAM24C,IAAU2sB,EAAWtlE,EAAM27D,EAAgBhjB,EAAMtgD,OAAQsgD,EAAMpd,MACtE9iC,EAAa,EAAG6/B,GAEpB,E,oCA3KO,SAA0BjgC,GAC/B,OAAc,MAAVA,EACK,GACoB,iBAAXA,EACT,IAAG,EAAAp2B,EAAAA,GAAEo2B,KAEL,IAAG,EAAAp2B,EAAAA,GAAEo2B,EAAOz1B,SAASy1B,EAAOigC,MAEvC,E,uBAqCO,SAA8BjgC,GACnC,MAAyB,iBAAXA,EAAsB,GAAGA,IAAWwiC,EAAaxiC,EACjE,E,qBA2MO,SACLA,EACAjC,EACAwkB,EACAlQ,GAEA,IAAMyB,EAAQkhG,EAAwBh1G,EAAQjC,EAAUwkB,GACxD,GAAa,MAATzO,EAGJ,OAAO,EAAAmhG,EAAAA,6BAA4BnhG,EAAO9T,EAAQ,CAChD2mB,WAAY5oB,EAASkC,qBACjBoS,EAAW,CAAE0sC,OAAQ,CAAC,GAAM,CAAC,GAErC,E,yCAqEO,SACL/+C,EACAjC,EACAkiC,EACA1d,GAEA,OAAO2yE,EAAat6C,EAAiB56C,EAAQigC,GAAOliC,EAAUkiC,EAAM1d,EACtE,E,uBAnKO,SAA8BviB,GACnC,OAAOI,GAAa,EAAAigD,EAAAA,yBAAwBrgD,EAAOz1B,OAAQy1B,EAAOigC,KACpE,E,2CA8CO,SACLjgC,EACAjC,EACAkiC,EACA1d,EACA0lC,GAEA,IAAMhqD,EAAY28C,EAAiB56C,EAAQigC,GAC3C,OAAoB,MAAhB1d,EACKo4B,EAAkB18C,GAEpBi3G,EAAcj3G,EAAWF,EAAUkiC,EAAM1d,EAAc,CAAE0lC,uBAAsBy6C,WACxF,E,yCAlSO,SAAuBv7D,EAAcsiC,GAC1C,OAAOh+B,GAAgB,EAAA4oE,EAAAA,sBAAuD,IAAlC/e,EAAqBnuD,EAAMsiC,IACzE,E,kDAmBO,SAA6BzpE,EAAiBq3B,GACnD,GAAIr3B,EAAOigC,OAAS5I,EAClB,OAAOr3B,EAET,IAAMz1B,EAAQy1B,EAAOz1B,MACrB,MAAoB,OAAhBy1B,EAAOigC,KAEA7/B,EADL71B,EAAQ,GACkB,EAARA,GAEA,EAAA0+D,EAAAA,iBAAwB,KAAR1+D,EAAc,GAFnB8sD,GAMxBj3B,EADL71B,EAAQ,IACU,EAAA0+D,EAAAA,iBAAgB1+D,EAAQ,EAAG,MAE3B,EAAA0+D,EAAAA,iBAAgB1+D,EAAQ,KAAM,KAFI8sD,EAK5D,E,qBA+CO,SAA4BusC,GACjC,IAAMub,EAAQvb,EAAIub,MAAM,wDACxB,GAAKA,EAAL,CAGA,IAAM50G,EAAQqyD,WAAWuiD,EAAM,IAC/B,GAAKhzB,SAAS5hF,GAGd,OAAO61B,GAAa,EAAAorC,EAAAA,sBAAqBjhE,EAAO,GAAI40G,EAAM,GAL1D,CAMF,E,kBA2OO,SAAyBn/E,EAAiBz1B,GAC/C,OAAO4qI,EAAiBn1G,EAAQz1B,EAAO,CAACd,EAAG4kE,IAAM5kE,EAAI4kE,EACvD,E,cA8DO,SAAqB9jE,GAC1B,MAAqB,iBAAVA,EACF,SACEg4D,EAAah4D,GACf,aAEA,QAEX,E,qBAlbA,IAAA2F,EAAAF,EAAA,OAGAsiB,EAAAtiB,EAAA,OACA8zB,EAAA9zB,EAAA,OAKAi7E,EAAAj7E,EAAA,OAQA0zB,EAAA1zB,EAAA,OAEMolI,EAAoD,CAAC,EAyDpD,SAAS5yE,EAAaxiC,GAC3B,MAAsB,iBAAXA,EACF,IAAG,EAAAp2B,EAAAA,GAAEo2B,KAEL,IAAG,EAAAp2B,EAAAA,GAAEo2B,EAAOz1B,SAASy1B,EAAOigC,MAEvC,CAwBO,SAAS80E,EAAanxC,GAC3B,IAAMub,EAAQvb,EAAIub,MAAM,+BACxB,OAAIA,EACK/+E,GAAa,EAAAorC,EAAAA,sBAAqB5O,WAAWuiD,EAAM,IAAK,GAAIA,EAAM,SAEzE,CAEJ,CAoBO,SAAS1zC,EAAgBlhE,GAC9B,MAAO,CAAEA,QAAO01D,KAAM,IACxB,CAUO,SAAS7/B,EAAa71B,EAAe01D,GAC1C,IACMo1E,EAAiBD,EADX,GAAG7qI,KAAS01D,KAExB,GAAsB,MAAlBo1E,EACF,OAAOA,EAEP,IAAM3pG,EAAI,CAAEnhC,MAAwB,iBAAVA,EAAqBqyD,WAAWryD,GAASA,EAAO01D,QAE1E,OADAm1E,EAAgB,GAAG7qI,KAAS01D,KAAUv0B,EAC/BA,CAEX,CAiBO,SAAS42B,EAAU6N,GACxB,IAAM0kE,EAAY1kE,EAClB,OACE0kE,GACqB,iBAAdA,GACP,SAAUA,GACV,UAAWA,IACS,OAAnBA,EAAU50E,MAAoC,OAAnB40E,EAAU50E,KAE1C,CAEO,SAASsC,EAAa4N,GAE3B,OADkBA,GAEkB,iBAFlBA,GAE8B,SAF9BA,GAEqD,UAFrDA,GAEgG,MAFhGA,EAEuFlQ,IAE3G,CAEO,SAASi1D,EAAal1F,EAAiBjC,EAAqBkiC,EAAa1d,GAC9E,OAAoB,MAAhBA,EACKo4B,EAAkB36C,GAEpBs1G,EAAuBt1G,EAAQjC,EAAUkiC,EAAM1d,GAAcmgF,WACtE,CAEA,SAASgS,EACP10G,EACAjC,EACAwkB,EACA6/B,GAEA,IAAM4gB,EAAgBzgD,GAAe,EAAA25B,EAAAA,2CAA0Cn+C,EAAUwkB,QAAgBzyC,EACzG,GAAqB,MAAjBkzF,EAAuB,CACzB,IAAMlvD,GAAQ,EAAA0oC,EAAAA,mBAAkBwmB,EAAeA,EAAc/iC,MAAQjgC,EAAOigC,MACtE2e,EAAQ,CAAEj4B,WAAY5oB,EAASkC,mBAC/Bs1G,GAAU,EAAAC,EAAAA,4BAA2B1hG,EAAO9T,EAAQ4+C,GAAOoC,MACjE,OAAqB,IAAdoB,GACH,EAAAqzD,EAAAA,0BAAyB3hG,EAAOyhG,EAAS32D,IACzC,EAAA82D,EAAAA,8BAA6B5hG,EAAOyhG,EAAS32D,EACnD,CACA,IAAM5V,EAAcksD,EAAal1F,EAAQjC,EAAUiC,EAAOigC,KAAM1d,GAC1Du9B,EAAWv9B,GAAe,EAAAozF,EAAAA,0BAAyBpzF,EAAcxkB,GAAY,EACnF,OAAOqC,EAAa4oC,EAAYz+D,MAAQ63E,EAAYtC,EAAU9W,EAAY/I,KAC5E,CAUO,SAASooC,EAAoBroE,EAAiBmnC,EAAcsiC,GACjE,OAAa,IAATtiC,EACK/mC,EAAa,EAAGJ,EAAOigC,MACZ,IAATkH,EACFnnC,EAEA26C,EAAkBgoD,EAAc3iG,EAAQs1F,EAAqBnuD,EAAMsiC,GAAO,KAErF,CAwBO,SAAS9uB,EAAkB36C,GAChC,OAAOI,GAAa,EAAAi0G,EAAAA,sBAAqBr0G,EAAOz1B,OAAQy1B,EAAOigC,KACjE,CAYO,SAAS21E,EAAkB3pG,GAChC,IAAM47C,EAAc57C,EAAK47C,YACzB,MAA0B,WAAtBA,GAAatvE,MAAkD,IAA7BsvE,EAAYxI,MAAM31E,OAC/C,GAEFm+E,EAAYxI,MAAM,GAAGjE,OAAOlkE,IAAK3L,IAAC,CACvCy0B,OAAQI,EAAa70B,EAAEy0B,OAAQiM,EAAKg0B,MACpCiD,IAAK33D,EAAE23D,IAAM2kB,EAAYzI,QAE7B,CAEA,SAAS81D,EACPW,EACA93G,EACAxc,EACAghC,EACAw8B,GAEA,IAAMikB,GAAgB,EAAA9mB,EAAAA,2CAA0Cn+C,EAAUwkB,GAC1E,GAAqB,MAAjBygD,EAAuB,CACzB,IAAMljB,GAAW,EAAA61D,EAAAA,0BAAyBpzF,EAAcxkB,GAExD,MAAO,CAAEq9C,OAAQ,GAAIsnD,YADLtiG,GAAa,EAAA6oC,EAAAA,iBAAgB4sE,EAAUtrI,MAAOu1E,GAAW+1D,EAAU51E,MAErF,CACA,IAAMnsB,GAAQ,EAAA0oC,EAAAA,mBAAkBwmB,EAAezhF,GACzC0qB,GAAO,EAAAupG,EAAAA,4BAA2B1hG,EAAO+hG,EAAW,CAAElvF,WAAY5oB,EAASkC,kBAAmB8+C,WACpG,MAAO,CAAE3D,OAAQw6D,EAAkB3pG,GAAOy2F,YAAaz2F,EAAK+0C,MAAO/0C,OACrE,CAEO,SAASqpG,EACdO,EACA93G,EACAxc,EACAghC,GAEA,OAAO2yF,EAAcW,EAAW93G,EAAUxc,EAAOghC,EACnD,CAgBO,SAASyyF,EACdh1G,EACAjC,EACAwkB,GAEA,IAAMygD,GAAgB,EAAA9mB,EAAAA,2CAA0Cn+C,EAAUwkB,GAC1E,OAAwB,MAAjBygD,GACH,EAAAxmB,EAAAA,mBAAkBwmB,EAAeA,EAAc/iC,MAAQjgC,EAAOigC,WAC9DnwD,CACN,CA0BO,SAASm9F,EAAWjtE,EAAiBz1B,GAC1C,OAAO4qI,EAAiBn1G,EAAQz1B,EAAO,CAACd,EAAG4kE,IAAM5kE,EAAI4kE,EACvD,CAMO,SAASi1B,EAAgBtjE,EAAiBz1B,GAC/C,OAAO4qI,EAAiBn1G,EAAQz1B,EAAO,CAACd,EAAG4kE,IAAM5kE,EAAI4kE,EACvD,CAEO,SAASs0D,EAAc3iG,EAAiBz1B,GAC7C,OAAO4qI,EAAiBn1G,EAAQz1B,EAAO,CAACd,EAAG4kE,IAAM5kE,EAAI4kE,EACvD,CAmEO,SAASuM,EACd56C,EACAigC,GAEA,MAAsB,iBAAXjgC,GAEgB,MAAhBA,EAAOigC,MAAyB,MAATA,GAG5BjgC,EAAOigC,OAASA,EAJbjgC,EAMoB,OAAhBA,EAAOigC,MAA0B,OAATA,EAC1B7/B,EAAwD,GAA3C/O,KAAKC,MAAsB,MAAf0O,EAAOz1B,MAAiB,IAAY01D,GAE7D7/B,EAAsD,GAAzC/O,KAAKC,MAAM0O,EAAOz1B,MAAQ,MAAQ,IAAY01D,EAGxE,CAMO,SAAS60E,EAAsBrrI,EAAY4kE,GAChD,OAAOuM,EAAiBvM,EAAG5kE,EAAEw2D,MAAM11D,MAAQd,EAAEc,KAC/C,CAEA,SAAS4nG,EACPnyE,EACAz1B,EACAJ,GAEA,MAAsB,iBAAX61B,GAAwC,iBAAVz1B,EAChCJ,EAAE61B,EAAQz1B,GACU,iBAAXy1B,GAAwC,iBAAVz1B,EACvCJ,EAAE61B,EAAQz1B,EAAMA,OACI,iBAAXy1B,GAAwC,iBAAVz1B,EACvCJ,EAAE61B,EAAOz1B,MAAOA,GACI,iBAAXy1B,GAAwC,iBAAVz1B,IAC1B,MAAhBy1B,EAAOigC,MAA+B,MAAf11D,EAAM01D,KACxB91D,EAAE61B,EAAOz1B,MAAOA,EAAMA,UACpB+3D,EAAUtiC,KAAWsiC,EAAU/3D,KACjCJ,EAAE61B,EAAOz1B,MAAOqwE,EAAiBrwE,EAAOy1B,EAAOigC,MAAM11D,OAOlE,CAqBO,SAASgkE,EACdD,EACA7kE,EACA4kE,EACAlkE,GAEA,GAAiB,iBAANV,GAA+B,iBAAN4kE,EAClC,OAAOlkE,EAAEV,EAAG4kE,GAEd,GAAiB,iBAAN5kE,GAAkB84D,EAAa8L,GACxC,OAAO5C,EAAgBthE,EAAEV,EAAG4kE,EAAE9jE,QAEhC,GAAiB,iBAANd,GAAkB64D,EAAU+L,GACrC,OAAO8mE,EAAiB1rI,EAAG4kE,EAAGlkE,GAGhC,GAAIo4D,EAAa94D,IAAmB,iBAAN4kE,EAC5B,OAAO5C,EAAgBthE,EAAEV,EAAEc,MAAO8jE,IAEpC,GAAI9L,EAAa94D,IAAM84D,EAAa8L,GAClC,OAAO5C,EAAgBthE,EAAEV,EAAEc,MAAO8jE,EAAE9jE,QAEtC,GAAIg4D,EAAa94D,IAAM64D,EAAU+L,GAE/B,OAAO8mE,EADS7mE,EAAQg1B,EAAgBh1B,EAAO7kE,EAAEc,MAAQ,MAAO,EAAAihE,EAAAA,sBAAqB/hE,EAAEc,MAAQ,IAAK,GACnE8jE,EAAGlkE,GAGtC,GAAIm4D,EAAU74D,IAAmB,iBAAN4kE,EACzB,OAAO8mE,EAAiB1rI,EAAG4kE,EAAGlkE,GAEhC,GAAIm4D,EAAU74D,IAAM84D,EAAa8L,GAE/B,OAAO8mE,EAAiB1rI,EADR6kE,EAAQg1B,EAAgBh1B,EAAOD,EAAE9jE,MAAQ,MAAO,EAAAihE,EAAAA,sBAAqB6C,EAAE9jE,MAAQ,IAAK,GAChEJ,GAEtC,GAAIm4D,EAAU74D,IAAM64D,EAAU+L,GAC5B,OAAO8mE,EAAiB1rI,EAAG4kE,EAAGlkE,GAGhC,MAAM,IAAImN,MAAM,4BAA4B7N,SAAS4kE,IACvD,CAYO,SAAS8mE,EACdn1G,EACAz1B,EACAJ,GAEA,GAAsB,iBAAX61B,GAAwC,iBAAVz1B,EACvC,OAAO61B,EAAaj2B,EAAE61B,EAAQz1B,EAAMA,OAAQA,EAAM01D,MAC7C,GAAsB,iBAAXjgC,GAAwC,iBAAVz1B,EAC9C,OAAO61B,EAAaj2B,EAAE61B,EAAOz1B,MAAOA,GAAQy1B,EAAOigC,MAC9C,GAAsB,iBAAXjgC,GAAwC,iBAAVz1B,EAC9C,OAAO61B,EAAaj2B,EAAE61B,EAAOz1B,MAAOqwE,EAAiBrwE,EAAOy1B,EAAOigC,MAAM11D,OAAQy1B,EAAOigC,MAExF,MAAM,IAAI3oD,MAAM,uDAEpB,CAyBO,SAASg+G,EAAqBnuD,EAAcsiC,GACjD,GAAa,IAATtiC,GAAsB,KAARsiC,EAChB,OAAO,EAETtiC,EAAO91C,KAAKw0C,IAAIx0C,KAAKu0C,IAAIuB,EAAM,IAAK,GAGpC,IAAMuZ,EAAI,IAFV+oB,EAAMp4E,KAAKw0C,IAAIx0C,KAAKu0C,IAAI6jC,EAAK,IAAK,KAEVtiC,EAAO,GAC/B,OAAIuZ,GAAK,GACA,GAKLA,GADiB,MAET,QAGEA,EAAIA,GAFL,QAEaA,EADd,SACuB,MAEtB,QAECA,EADF,SACW,GAEzB,CAEiCn3E,EAAAA,YAAG,CAAEgB,MAAO,EAAG01D,KAAM,K,+GC3lB/C,SAAqC61E,GAC1C,OAAmB,MAAfA,GAGK/pI,OAAOuB,KAAKyoI,EAAoBD,IAAcpsI,OAAS,CAElE,E,wBA5BA,IASIssI,EATJ5yG,EAAApzB,EAAA,OACAC,EAAAD,EAAA,OACAimI,EAAAjmI,EAAA,OASO,SAASkmI,IACd,IAAKF,EAAQ,CACX,IAAMz8H,EAAoC,CAAC,EAC3C,IAAK,IAAM2nB,KAAS,EAAAi1G,EAAAA,2BAClB58H,EAAO2nB,EAAM8vF,SAAW,CAAE/1F,MAAOiG,EAAMjG,MAAOrmB,KAAMssB,EAAMtsB,MAE5DohI,EAASz8H,CACX,CACA,OAAOy8H,CACT,CAUO,SAASD,EAAoBD,GAClC,GAAsB,oBAAX12H,QAA0BA,OAAOC,UAAUC,MAG7B,OAFX,EAAArL,EAAAA,gBAAemL,OAAOC,SAASC,MACfpL,aAAazE,IAAI,kBAE3C,MAAO,CAAC,EAGZ,IAAMooD,EAAWq+E,IACX3nC,EAAW77B,SAASojE,EAAa,IACvC,OAAO,EAAA/0G,EAAAA,kBAAiB82B,GAAUnwB,OAAkC,CAACC,EAAMqpF,KAC5Dt+C,SAASs+C,EAAS,IACpBziB,IACT5mE,EAAKqpF,GAAWn5D,EAASm5D,IAEpBrpF,GACN,CAAC,EACN,C,0FCrCO,WACL,OAAIquG,IAGJA,EAIF,SAAe94H,GAKb,IAJA,IAAM+0D,EAAQ/0D,EAAO0lD,MAAM,SACrB3hC,EAA4B,GAE9B52B,EAAI,EACDA,EAAI4nE,EAAMvoE,QACf,GAAwB,QAApBuoE,EAAM5nE,GAAG4hB,OAAb,CAIA5hB,GAAK,EAGL,IADA,IAAMgS,EAA+B,CAAC,EAC/BhS,EAAI4nE,EAAMvoE,QAA8B,QAApBuoE,EAAM5nE,GAAG4hB,QAAkB,CACpD,IAAMgzC,EAAOgT,EAAM5nE,GACb80G,EAAQ,wCAAwCi3B,KAAKn3E,GACvDkgD,IACF9iG,EAAK8iG,EAAM,GAAGtrF,eAAiBsrF,EAAM,GAAGlzF,QAE1C5hB,GAAK,CACP,CACA,GAAIA,GAAK4nE,EAAMvoE,OACb,MAEFW,GAAK,EAGL,IADA,IAAMgsI,EAAsB,GACrBhsI,EAAI4nE,EAAMvoE,SACS,QAApBuoE,EAAM5nE,GAAG4hB,SAAoBqqH,EAAmBrkE,EAAO5nE,KAG3DgsI,EAAU/qI,KAAK2mE,EAAM5nE,IACrBA,GAAK,EAGP,IACM2mH,GADU30G,EAAKsuB,MAAQ,IACLwhC,QAAQ,KAAM,IAChClxC,EAAQ5e,EAAK4e,OAAS,GACvB,UAAUpuB,KAAKmkH,IAGpB/vF,EAAQ31B,KAAK,CACX0lH,UACA/1F,QACArmB,KAAMyhI,EAAUj/H,KAAK,MAAM6U,QAnC7B,MAFE5hB,GAAK,EAyCT,OAAO42B,CACT,CArDWziB,CAAM+3H,EAAAA,SAEjB,EAhBA,IAQIP,EARJ57B,EAAApqG,EAAA,MAqEA,SAASsmI,EAAmBrkE,EAAiBg/D,GAC3C,IAAK,IAAIxpB,EAAIwpB,EAAM,EAAGxpB,EAAIx1C,EAAMvoE,OAAQ+9G,GAAK,EAAG,CAC9C,IAAMt5B,EAAUlc,EAAMw1C,GAAGx7F,OACzB,GAAgB,QAAZkiE,EACF,OAAO,EAET,GAAgB,KAAZA,EACF,OAAO,EAET,IAAK,8BAA8BthF,KAAKshF,GACtC,OAAO,CAEX,CACA,OAAO,CACT,C,wFCrEO,SAA+B3rE,IACpC,EAAA2b,EAAAA,aAAY3b,EAAU,EAAC,EAAA4b,EAAAA,MAAa7yB,EAAE,gBAAgB8yB,QAAO,IAAQ,kBACvE,E,yBAXO,SAAgC7b,GACrC,IAAMg0H,EAAgBzqI,OAAOuB,MAAK,EAAA4oI,EAAAA,iBAAgBthE,OAAOyR,UAAU,IACnE,EAAAloD,EAAAA,aACE3b,EACA,EAAC,EAAA4b,EAAAA,MAAa7yB,EAAE,WAAWA,EAAE,YAAY8yB,OAAOm4G,IAAgB,EAAAp4G,EAAAA,MAAa7yB,EAAE,gBAAgB8yB,QAAO,IACtG,0BAEJ,EAXA,IAAAyE,EAAA9yB,EAAA,OACA6yB,EAAA7yB,EAAA,OACAoqG,EAAApqG,EAAA,M,qFCIO,SACLymI,EACA1rG,GAGA,MAAO,KADS0rG,GAAY,IAAIjpI,OAAQrD,GAAMA,EAAEuK,KAAOq2B,EAAQr2B,IAC5C,CAAEyxB,MAAO,qBAA+B4E,IACxD6pC,KAAK,CAACnrE,EAAG4kE,IAAM5kE,EAAEuhC,QAAUqjC,EAAErjC,SAAWvhC,EAAEiL,GAAK25D,EAAE35D,IACjDjI,OAVsB,GAW3B,E,8DAMO,SACLiqI,EACAC,EACAnhI,EACAohI,GAEA,IAAMC,EAAS,IAAI/iH,KAAK4iH,GAAe,IAAIx/H,IAAK/M,GAAMA,EAAEuK,KAClD2tB,EAAoC,GAAG2iC,EAAA,SAAAj6B,GAE3C,GACE8rG,EAAOrnI,IAAIu7B,EAAQr2B,KACC,WAApBq2B,EAAQA,UACPA,EAAQR,YACTqsG,EAAQ7rG,EAAQC,QA7BK,MA8BrB,SAGF,IAAM3M,EAAS7oB,EAAQ6yC,KAAM7+C,GAAMA,EAAEkL,KAAOq2B,EAAQr2B,IACtC,MAAV2pB,GACFgE,EAAS/2B,KAAKwrI,EAA6Bz4G,GAE/C,EAbA,IAAK,IAAM0M,KAAW4rG,GAAe,GAAE3xE,EAAAj6B,GAcvC,OAAO1I,CACT,E,0BA1CA,IAAAuB,EAAA5zB,EAAA,OAeO,SAAS+mI,EAAsBriI,GACpC,MAAO,qBAAqBA,GAC9B,CA2BO,SAASoiI,EAA6Bz4G,GAC3C,IAAM8M,GAAwC9M,EAAO8M,WAAa,IAAIj0B,IAAI,EAAEoxC,EAAG3+C,KAAO,CAAC2+C,EAAG3+C,GAAK,OACzFqtI,EAAS7rG,EAAU39B,OAAQnD,GAAqC,MAARA,EAAE,IAC1D4sI,EAAUD,EAAO,KAAK,IAAM34G,EAAO+L,UACzC,MAAO,CACL6sG,UACAC,MAAOF,EAAOA,EAAOttI,OAAS,KAAK,IAAM20B,EAAO2M,SAAWisG,EAC3D79D,UAAU,EAAA+9D,EAAAA,kBAAiB94G,GAC3B8M,YACAisG,OAAQL,EAAsB14G,EAAO3pB,IAEzC,C,aCpCA,SAAS2iI,EAAU3nI,EAA8B+zF,GAI/C,OAAsC,MAHtB/zF,EAAIyxG,KAAO,EAHN,KAIY,MAAhBzxG,EAAI2gC,SAAmB3gC,EAAI2gC,SALxB,GAKoC3gC,EAAIy3D,MAAQ,KACtDs8B,EAAe,EAAI,GAEnC,CAqBA,SAAS6zC,EAAel2H,EAAwC8wB,GAC9D,OAAO9wB,EAASuxB,KAAKjL,OACnB,CAAC00C,EAAK1sE,IAAQ0sE,EAAMi7D,EAAU3nI,EAAK0R,EAASqiF,cAA2C,KAA1B/zF,EAAIurC,OAAS/I,GAC1E,EAEJ,C,6EAxBO,SACLlD,EACA3D,GAEA,IAAIksG,EAAU,EACRC,EAAmB,IAAI1jH,IAAckxC,EAAA,SAAA5jD,GAEzC,GAAyB,MAArBA,EAASq9F,SACX84B,GAAWD,EAAel2H,EAAUiqB,EAAOxZ,WACtC,IAAK2lH,EAAiBhoI,IAAI4R,EAASq9F,UAAW,CACnD+4B,EAAiBriH,IAAI/T,EAASq9F,UAC9B,IAAM3D,EAAQ9rE,EAAUxhC,OAAQ7D,GAAMA,EAAE80G,WAAar9F,EAASq9F,UAC9D84B,GACEz8B,EAAMpxG,OAAS,EAavB,SAAoBoxG,EAAuCzvE,GAGzD,IAFA,IAAMosG,EAASpmH,KAAKw0C,OAAOi1C,EAAM5jG,IAAKvN,GAAMA,EAAEgpC,KAAKjpC,SAC/C6tI,EAAU,EAAE3yD,EAAA,SAAAtzD,GAEd,IAAMomH,EAAe58B,EAAMttG,OAAQ7D,GAAuB,MAAjBA,EAAEgpC,KAAKrhB,IAChDomH,EAAa/pI,QAAQ,CAACyT,EAAUk0C,KAC9B,IAAM5lD,EAAM0R,EAASuxB,KAAKrhB,GAEpBO,EADgByjC,IAAUoiF,EAAahuI,OAAS,EACxBgG,EAAIurC,OAAS5P,EAAOozE,UAAYpzE,EAAOxZ,KAASwZ,EAAOozE,UAAY,EACjG84B,GAAWF,EAAU3nI,EAAK0R,EAASqiF,cAAuB,IAAP5xE,GAEvD,EARSP,EAAQ,EAAGA,EAAQmmH,EAAQnmH,GAAS,EAACszD,EAAAtzD,GAS9C,OAAOimH,CACT,CA1B2BI,CAAW78B,EAAOzvE,GAAUisG,EAAel2H,EAAUiqB,EAAOozE,UAAYpzE,EAAOxZ,KACtG,CACF,EATA,IAAK,IAAMzQ,KAAY4tB,EAASg2B,EAAA5jD,GAUhC,OAAOm2H,CACT,C,uFCrCO,WACL,OAAO,6BAAmC5sI,KAAMitI,GAAQA,EAAIC,kBAC9D,E,mBANO,WACL,OAAO,qDACT,E,uBANO,WACL,OAAO,sDACT,C,kFCAO,WACL,OACE,EAAAxuI,EAAAsc,MAAA,WAASC,UAAU,4CAA2CtD,SAAA,EAC5D,EAAAjZ,EAAA0Y,KAAA,MAAI6D,UAAU,qBAAoBtD,SAAC,iDACnC,EAAAjZ,EAAA0Y,KAAA,KAAG6D,UAAU,2BAA0BtD,SAAC,+NAKxC,EAAAjZ,EAAA0Y,KAAA,MAAI6D,UAAU,yBAAwBtD,SAAC,gCACvC,EAAAjZ,EAAAsc,MAAA,KAAGC,UAAU,2BAA0BtD,SAAA,CAAC,MAClC,KACJ,EAAAjZ,EAAA0Y,KAAA,KAAG6D,UAAU,qCAAqCtG,KAAK,WAAUgD,SAAC,yBAE7D,IAAI,4IAIX,EAAAjZ,EAAAsc,MAAA,KAAGC,UAAU,2BAA0BtD,SAAA,EACrC,EAAAjZ,EAAA0Y,KAAA,UAAAO,SAAQ,6BAAiC,gSAEkE,KAC3G,EAAAjZ,EAAA0Y,KAAA,KAAG6D,UAAU,qCAAqCtG,KAAK,WAAUgD,SAAC,eAE7D,IAAI,0EAGX,EAAAjZ,EAAAsc,MAAA,KAAGC,UAAU,2BAA0BtD,SAAA,EACrC,EAAAjZ,EAAA0Y,KAAA,UAAAO,SAAQ,aAAiB,2OAK3B,EAAAjZ,EAAA0Y,KAAA,MAAI6D,UAAU,yBAAwBtD,SAAC,kBACvC,EAAAjZ,EAAA0Y,KAAA,KAAG6D,UAAU,2BAA0BtD,SAAC,wNAIxC,EAAAjZ,EAAA0Y,KAAA,KAAG6D,UAAU,2BAA0BtD,SAAC,qUAMxC,EAAAjZ,EAAAsc,MAAA,KAAGC,UAAU,2BAA0BtD,SAAA,CAAC,UAC9B,KACR,EAAAjZ,EAAA0Y,KAAA,KAAG6D,UAAU,qCAAqCtG,KAAK,WAAUgD,SAAC,oBAE7D,IAAI,iCACsB,KAC/B,EAAAjZ,EAAA0Y,KAAA,KAAG6D,UAAU,qCAAqCtG,KAAK,OAAMgD,SAAC,qBAEzD,IAAI,+CAKjB,E,gKCkqBO,SACL5N,EACAuI,EACA8gB,EACA65C,GAEA,IAAQ6iC,EAAmBq9B,EAAwB76H,EAAS8gB,GAApD08E,eAEFkC,EAAkD,CACtDjoG,KACA6D,KAAM,KACNy9B,SAAS,EAAAsD,EAAAA,6BACTr8B,QAASA,EACT4/F,gBAAiB9+E,EAAS4B,QAC1B5B,SAAU,CACRiR,UAAW+oG,EAA6Bh6G,EAASiR,UAAWyrE,GAC5Dx/D,MAAOld,EAASsN,OAAOqN,SAAW,IAGtC,OAAO,EAAAs/F,EAAAA,iDAAgDr7B,EAAwB/kC,EACjF,E,yBAlbO,SACLqgE,EACAjlE,EACAj1C,EACAm6G,EACA5vB,GAEA,IAAI5N,EAAW,EACT4R,EAAqB,IAAIx4F,IACvB2mF,EAAmBq9B,GAAwB,EAAA9gF,EAAAA,mBAAkBihF,GAAoBl6G,GAAjF08E,eACgB09B,EAAsBL,GAAwB,EAAA9gF,EAAAA,mBAAkBgc,GAAiBj1C,GAAjG08E,eACR,IAAK,IAAM29B,IAAM,CAAC39B,EAAgB09B,IAChC,EAAA30B,EAAAA,YAAW40B,EAAKh3H,IACS,MAAnBA,EAASmrG,QAAkBnrG,EAASmrG,OAAO7iH,OAAS,GACtD4iH,EAAmBn3F,IAAI/T,EAASnV,OAItC,IAAK,IAAMorE,KAAM6gE,GAAgC,GAC/C5rB,EAAmBn3F,IAAIkiD,GAQzB,IAAMghE,EAAoD,CAAC,EAa3D,SAASC,EAAU/tI,EAAemsE,EAAmBikC,GACnD,OAAK2N,GAGkB,EAAAiwB,EAAAA,iCACrBjwB,EACA,CAACzrG,EAAG6uB,IACFA,EAAEyzB,KAAO50D,IACK,MAAbmhC,EAAEkZ,SAAoBlZ,EAAEkZ,QAAQykB,OAASqN,EAAY,GAAKhrC,EAAEkZ,QAAQwrB,YAAcuqC,EAAiB,KAE/EpwG,EARhBA,CASX,EAvBA,EAAAi5G,EAAAA,YAAW/I,EAAgB,CAACr5F,EAAUs1D,EAAWikC,KAC/C,IAAKv5F,EAASy8F,UAA+B,MAAnBz8F,EAASmrG,QAAkBnrG,EAASmrG,OAAO7iH,OAAS,EAAG,CAC/E,IAAM8uI,EAAe,GAAGp3H,EAASnV,OAAO0uG,IACxC09B,EAAqBG,GAAgBH,EAAqBG,IAAiB,IAAI1kH,IAC/EukH,EAAqBG,GAAcrjH,IAAIuhD,EACzC,IAoBF,IAAM+hE,EAAgE,CAAC,EACvEzlE,EAAep8B,MAAMjpC,QAAS07D,IAC5BA,EAAKoK,KAAK9lE,QAAQ,CAACmyB,EAAK66E,KACkB,MAApC89B,EAAiB99B,GACnB89B,EAAiB99B,GAAkB76E,EAAI81B,YAC9B6iF,EAAiB99B,KAAoB76E,EAAI81B,YAClD91B,EAAI81B,iBAAc9lD,EAElB2oI,EAAiB99B,GAAkB76E,EAAI81B,gBAK7C,IAAM8iF,EAAU1lE,EAAep8B,MAAM1/B,IAAI,CAACmyD,EAAMqN,IACvCrN,EAAKoK,KAAKv8D,IAAI,CAAC4oB,EAAK66E,KACzB,IAAMg+B,EAAOC,EAAAA,OAAsBp6H,MAAMshB,EAAI+zC,cACvCglE,EAAY,IAAIllE,EAAAA,yBAAyB7zC,EAAI+zC,aAAc91C,EAAU,SAAU,CACnF+B,IAAK46E,EAAW,EAChBtqC,UAAWuqC,EAAiB,EAC5BtxC,KAAMqN,EAAY,IAIpB,OAFAgkC,GAAY,EACAm+B,EAAU9uB,WAAW4uB,EAAKG,YAS1C,IAAK,IAAMC,IAAiB,EAAC,GAAM,GACjC,IADyC,IAAAn0D,EAAA,SAAAlO,GAEvC,IAAMrN,EAAOqvE,EAAQhiE,GACrB,IAAKgkC,EAAW,EAAGA,EAAWrxC,EAAK3/D,OAAQgxG,GAAY,EAAG,CACxD,IAAM56E,EAAMupC,EAAKqxC,GAAUs+B,EAAA,SAAA/5E,GAEzB,GAAkB,aAAdA,EAAK1mD,MAAuB0mD,EAAKukB,OAAS8oC,EAAmB98G,IAAIyvD,EAAK10D,OAAQ,SAGlF,IAAM0uI,EAAiBZ,EAAqB,GAAGC,EAAUr5E,EAAK10D,MAAOmsE,EAAWgkC,MAAaA,KAC7F,KAAMu+B,GAAgBzpI,IAAIknE,KAAeqiE,EAAe,SAkCxD,IA/BA,IAAMG,EAAaC,IACjB,IAAMC,EAAYV,EAAQS,KAAmBz+B,GACvC2+B,GAAqBD,GAAa,IAAI5rI,OAAQ7D,IAClD,GACa,aAAXA,EAAE4O,MACF5O,EAAE65E,MACF75E,EAAEY,QAAU00D,EAAK10D,OACjBZ,EAAE2vI,kBAAoBr6E,EAAKq6E,iBAC3B3vI,EAAEixG,gBAAkB37C,EAAK27C,iBACxB,EAAAn7E,EAAAA,qBAAoB91B,EAAEoyG,cAAgB,GAAI98C,EAAK88C,cAAgB,IAEhE,OAAO,EAET,IAAMyX,EAAS8kB,EAAUr5E,EAAK10D,MAAO4uI,EAAiBz+B,GAItD,GAAI29B,EAAqB,GAAG7kB,KAAU9Y,MAAalrG,IAAI2pI,GACrD,OAAO,EAET,IAAMI,EAAS9+B,EAAe0+B,GAAiBz+B,GACzCtiC,EAAcmhE,EAAO3/H,QAAU2/H,EAAO1/H,KAAKwuC,KAAMgvB,GAAOA,EAAGprE,MAAQunH,QAAU1jH,EACnF,OAAOsoE,GAAaohE,WAAW9sH,SAASgqD,EAAY,KAEtD,IAAK,IAAM/sE,KAAK0vI,EACd1vI,EAAE65E,MAAO,EAEX,OAAO61D,EAAkB3vI,OAAS,GAEhC+vI,EAAY/iE,EAAY,EACxBgjE,EAAWhjE,EAAY,EAClByiE,EAAkBziE,EAAY,EAAGyiE,EAAkBT,EAAQhvI,QAC7DwvI,EAAUC,GAD2DA,GAAmB,EAI7FO,EAAWP,EAAkB,EAE/B,GAAIJ,EACF,IAAK,IAAII,EAAkBziE,EAAY,EAAGyiE,GAAmB,GACtDD,EAAUC,GAD+CA,GAAmB,EAIjFM,EAAYN,EAAkB,EAGlCl6E,EAAK06E,aAAeF,IAAcC,EAAW,GAAK,CAAC,GAAGD,KAAaC,IACrE,EAtDA,IAAK,IAAMz6E,KAAQn/B,EAAGk5G,EAAA/5E,EAuDxB,CACF,EA5DSyX,EAAY,EAAGA,EAAYgiE,EAAQhvI,OAAQgtE,GAAa,EAACkO,EAAAlO,GA+DpE,IAAK,IAAIA,EAAY,EAAGA,EAAYgiE,EAAQhvI,OAAQgtE,GAAa,EAAG,CAClE,IAAMquC,EAAc/xC,EAAep8B,MAAM8/B,GACnCrN,EAAOqvE,EAAQhiE,GACrB,IAAKgkC,EAAW,EAAGA,EAAWrxC,EAAK3/D,OAAQgxG,GAAY,EAAG,CACxD,IAAM56E,EAAMupC,EAAKqxC,GACXlH,EAAauR,EAAYtxC,KAAKinC,GAChC9W,EAAM,GACNg2C,GAAsB,EAC1B,IAAK,IAAM36E,KAAQn/B,EACjB,GAAkB,gBAAdm/B,EAAK1mD,KACPqhI,GAAsB,OAEjB,GAAkB,aAAd36E,EAAK1mD,MAEd,GADAqhI,GAAsB,GACjB36E,EAAKukB,KAAM,CACVvkB,EAAK88C,cAAgB98C,EAAK88C,aAAaryG,OAAS,IAClDk6F,GAAO,GAAG3kC,EAAK88C,aAAavuG,OAAQ0hB,GAAMA,EAAEjD,QAAQ7U,KAAK,aAE3D,IAAIyiI,EAAY,GAChB,GAAmB,MAAd56E,EAAK6tD,OAAgC,IAAf7tD,EAAK6tD,OAAiB7tD,EAAK06E,cAAgB16E,EAAK06E,aAAajwI,OAAS,EAAI,CACnG,IAAMowI,EAAc,GACF,MAAd76E,EAAK6tD,OAAgC,IAAf7tD,EAAK6tD,OAC7BgtB,EAAYxuI,KAAK2zD,EAAK6tD,OAEpB7tD,EAAK06E,cAAgB16E,EAAK06E,aAAajwI,OAAS,GAClDowI,EAAYxuI,KAAK2zD,EAAK06E,aAAaviI,KAAK,MAE1CyiI,EAAY,IAAIC,EAAY1iI,KAAK,OACnC,CACAwsF,GAAO,CAAC,GAAG3kC,EAAKuyB,WAAWqoD,IAAa56E,EAAK86E,UAAUvsI,OAAQhE,GAAMA,GAAG4N,KAAK,OAAS,IACxF,MACuB,UAAd6nD,EAAK1mD,MACTqhI,IAILh2C,GAAO3kC,EAAK10D,MAAQ,MAGxBipG,EAAW3/B,aAAe+vB,EAAI33E,MAChC,CACF,CAEA,OAAO+mD,CACT,E,iDAwMO,SACLrzC,EACA5B,GAEA,IAAMyB,GAAa,EAAAi2B,EAAAA,gBAAe91B,EAAQ1iB,QAAQtQ,KAAMgzB,EAAQjrB,IAC1D0wF,EAAyB,IAC1BrnE,EACHiR,UAAW,IAAKjR,EAASiR,aAAcrP,EAAQ5B,SAASiR,YAG1D,MAAO,CACL/xB,QAFc,IAAKuiB,EAAYG,QAASA,EAAQ1iB,SAGhD8gB,SAAU,CACRsN,OAAQ+5D,EAAY/5D,OACpB1L,QAASylE,EAAYzlE,QACrBpe,MAAO6jF,EAAY7jF,OAErBqtB,gBAAiBjP,EAAQ5B,SAASiR,UAClCgH,QAASrW,EAAQqW,QAErB,E,0DAhIO,SACLgkG,EACAj8G,GAEA,OAAO,EAAAk8G,EAAAA,+BAA8BD,EAAiBj8G,EACxD,E,8BAEO,SAAqCi8G,GAC1C,IAAMrB,EAAOC,EAAAA,OAAsBp6H,MAAMw7H,GACzC,OAAOE,EAAmB,IAAIC,EAAAA,6BAA6BH,GAAiB72E,SAASw1E,EAAKG,SAC5F,E,sCAmCO,SAA6CsB,GAClD,OAAOA,EAAWxgI,QACdwgI,EAAWvgI,KAAK3C,IAAKmyD,GAASA,EAAKoK,KAAKv8D,IAAKgY,IAAC,CAAQtV,SAAS,EAAMC,KAAMqV,EAAE8f,cAC7E,CAAC,CAACorG,GACR,E,kCAEO,SAAyCxjG,GAC9C,IAAI4uD,EAAW,GACf,IAAK,IAAMn8B,KAAQzyB,EAAO,CASxB,IAAK,IAAM9W,KARa,MAApBupC,EAAKzT,cACP4vC,GACEn8B,EAAKzT,YACFgN,MAAM,MACN1rD,IAAK1I,GAAOA,EAAI,MAAMA,IAAM,MAC5B4I,KAAK,MAAQ,MAEpBouF,GAAY,KAAKn8B,EAAK18D,SACJ08D,EAAKoK,MACE,MAAnB3zC,EAAI81B,cACN4vC,GACE1lE,EAAI81B,YACDgN,MAAM,MACN1rD,IAAK1I,GAAM,MAAMA,KACjB4I,KAAK,MAAQ,MAEpBouF,GAAY,MAAM1lE,EAAInzB,SACtB64F,GAAY,GAAG1lE,EAAI+zC,mBAErB2xB,GAAY,IACd,CACA,OAAOA,CACT,E,2CA0EC,SAE6DxvF,EAAAC,GAAA,OAAAokI,EAAAvvI,MAAC,KAADD,UAAA,E,iCAlPvD,SAAwCyvI,GAE7C,IADA,IAAMzyB,EAA8C,GAC3CnxC,EAAY,EAAGA,EAAY4jE,EAAQ5wI,OAAQgtE,GAAa,EAAG,CAClE,IAAM6jE,EAAcD,EAAQ5jE,GAC5BmxC,EAAev8G,KAAK,IACpB,IAAK,IAAIqvG,EAAiB,EAAGA,EAAiB4/B,EAAY7wI,OAAQixG,GAAkB,EAAG,CACrF,IAAM6/B,EAAaD,EAAY5/B,GACzBG,EAAiC,GACvC+M,EAAenxC,GAAWprE,KAAKwvG,GAE/B,IADA,IAAI2/B,GAAQ,EACHxvB,EAAY,EAAGA,EAAYuvB,EAAW9wI,OAAQuhH,GAAa,EAAG,CACjEwvB,IACF3/B,EAAMxvG,KAAK,IACXmvI,GAAQ,GAEV,IAAMx7E,EAAOu7E,EAAWvvB,GACxBnQ,EAAMA,EAAMpxG,OAAS,GAAKoxG,EAAMA,EAAMpxG,OAAS,IAAM,GACrDoxG,EAAMA,EAAMpxG,OAAS,GAAG4B,KAAK2zD,GACX,aAAdA,EAAK1mD,OACPkiI,GAAQ,EAEZ,CACF,CACF,CACA,IAAK,IAAMpxE,KAAQw+C,EACjB,IAAK,IAAM/nF,KAAOupC,EAChBvpC,EAAI80C,KAAK,CAAC8lE,EAAQC,KAChB,IAAMC,EAAMF,EAAOryF,KAAM75C,GAAiB,aAAXA,EAAE+J,MAC3BsiI,EAAMF,EAAOtyF,KAAM75C,GAAiB,aAAXA,EAAE+J,MACjC,OAAW,MAAPqiI,GAAsB,MAAPC,EACV,GAEF,EAAAC,EAAAA,uCAAsCF,EAAKC,KAIxD,OAAOhzB,CACT,E,0CApPO,SAAiD70C,EAAiCj1C,GACvF,IAAK,IAAMsrC,KAAQ2J,EAAep8B,MAChC,IAAK,IAAM9W,KAAOupC,EAAKoK,KAAM,CAC3B,IAAMklE,EAAOC,EAAAA,OAAsBp6H,MAAMshB,EAAI+zC,cAE7C,GADkB,IAAIF,EAAAA,yBAAyB7zC,EAAI+zC,aAAc91C,EAAU,UAC7Dg9G,gBAAgBpC,EAAKG,QAA4B,OAAnB/6G,EAASxc,MAAiB,KAAO,MAC3E,OAAO,CAEX,CAEF,OAAO,CACT,E,yBA5PO,SAAgCtE,EAAsC8gB,GAC3E,QAAK9gB,GAGsB66H,EAAwB76H,EAAS8gB,GAApD08E,eACc9gF,MAAO0vC,GAASA,EAAK1vC,MAAOmG,GAAQA,EAAIlmB,SAChE,E,oCAyIO,SACLohI,EACAj9G,EACAk9G,GAQA,IAAIvgC,EAAW,EACT1nC,GAAiB,EAAAhc,EAAAA,mBAAkBgkF,GACnCtC,EAAU1lE,EAAep8B,MAAM1/B,IAAI,CAACmyD,EAAMqN,IACvCrN,EAAKoK,KAAKv8D,IAAI,CAAC4oB,EAAK66E,KACzB,IAAMg+B,EAAOC,EAAAA,OAAsBp6H,MAAMshB,EAAI+zC,cACvCglE,EAAY,IAAIllE,EAAAA,yBAAyB7zC,EAAI+zC,aAAc91C,EAAU,SAAU,CACnF+B,IAAK46E,EAAW,EAChBtqC,UAAWuqC,EAAiB,EAC5BtxC,KAAMqN,EAAY,IAIpB,OAFAgkC,GAAY,EACAm+B,EAAU9uB,WAAW4uB,EAAKG,YAK1Cp+B,EAAW,EACX,IAAK,IAAIhkC,EAAY,EAAGA,EAAYgiE,EAAQhvI,OAAQgtE,GAAa,EAE/D,IADA,IAAMrN,EAAOqvE,EAAQhiE,GACZikC,EAAiB,EAAGA,EAAiBtxC,EAAK3/D,OAAQixG,GAAkB,EAAG,CAE9E,IADA,IAAM76E,EAAMupC,EAAKsxC,GACRsQ,EAAY,EAAGA,EAAYnrF,EAAIp2B,OAAQuhH,GAAa,EAAG,CAC9D,IACMiwB,EAAUD,EADHn7G,EAAImrF,GACev0C,EAAWikC,EAAgBD,EAAUuQ,GACrEnrF,EAAImrF,GAAaiwB,CACnB,CACAxgC,GAAY,CACd,CAGF,IAAK,IAAIhkC,EAAY,EAAGA,EAAYgiE,EAAQhvI,OAAQgtE,GAAa,EAG/D,IAFA,IAAMquC,EAAc/xC,EAAep8B,MAAM8/B,GACnCrN,EAAOqvE,EAAQhiE,GACZikC,EAAiB,EAAGA,EAAiBtxC,EAAK3/D,OAAQixG,GAAkB,EAAG,CAC9E,IAAM76E,EAAMupC,EAAKsxC,GACXnH,EAAauR,EAAYtxC,KAAKknC,GAChC/W,EAAM,GACV,IAAK,IAAM3kC,KAAQn/B,EACjB8jE,GAAOu3C,EAAiCl8E,GAE1Cu0C,EAAW3/B,aAAe+vB,EAAI33E,MAChC,CAGF,OAAO+mD,CACT,E,2BA+VO,SAAkCgnE,GACvC,IAAMnB,EAAY,IAAIsB,EAAAA,6BAA6BH,EAAiB,CAAEoB,UAAU,IAChF,IAEE,MAAO,CAAExhI,SAAS,EAAMC,KAAMqgI,EADjBrB,EAAU11E,SAASy1E,EAAAA,OAAsBp6H,MAAMw7H,GAAiBlB,UAE/E,CAAE,MAAOnvI,GACP,GAAIA,aAAa0xI,EAAAA,mBACf,MAAO,CAAEzhI,SAAS,EAAOpB,MAAO7O,GAElC,MAAMA,CACR,CACF,E,4CAlcO,SACLsT,EACAhR,EACAqvI,EACAv9G,EACA6mB,GAEA,IASIpsC,EATE6iG,EAAakgC,EACjBt+H,EAAQ0iB,QACR1zB,OACA6D,EACAwrI,EACAv9G,EACA6mB,GAEM61D,GAAmB,EAAA4I,EAAAA,2BAA0BhI,EAAYt9E,GAAzD08E,eAER,IAAK,IAAMpxC,KAAQoxC,EACjB,IAAK,IAAM36E,KAAOupC,EAChB,IAAKvpC,EAAIlmB,QAAS,CAChBpB,EAAQsnB,EAAItnB,MACZ,KACF,CAGJ,OAAIA,EACK,CAAEoB,SAAS,EAAOpB,MAAOA,EAAMuB,SAE/B,CAAEH,SAAS,EAAMC,KAAM,IAAKoD,EAAS0iB,QAAS07E,GAEzD,E,kEArIO,SACLp+F,EACAqkB,EACAk6G,GAEA,GAAIA,EAAc7hH,MAAO8hH,IAAO,EAAAh8G,EAAAA,qBAAoBg8G,EAAG3oE,eAAgB2oE,EAAGz7G,SACxE,OAAO/iB,EAET,IAAMk6D,GAAqB,EAAAngB,EAAAA,mBAAkB/5C,GAa7C,OAZA,EAAAm6D,EAAAA,aAAYD,EAAmBvgC,MAAQygC,IACrC,GAAIA,EAAGprE,MAAQq1B,EACb,IAAK,IAAMo6G,KAAgBrkE,EAAG0qC,uBAAwB,KAAA/8C,EAAA,SAAAt1D,GAElD,IAAMisI,EAAeH,EAAcnzF,KAAMozF,IAAO,EAAA9zB,EAAAA,eAAc8zB,EAAG3oE,eAAgBpjE,EAAIswB,SACjE,MAAhB27G,IACFjsI,EAAIswB,OAAS27G,EAAa37G,OAE9B,EALA,IAAK,IAAMtwB,KAAOgsI,EAAa/oG,KAAIqyB,EAAAt1D,EAMrC,IAGGynE,CACT,E,8BAuMO,SAAqCnE,EAAiCj1C,GAC3E,IAAM69G,GAAoB,EAAA5kF,EAAAA,mBAAkBgc,GAC5C,IAAK,IAAM3J,KAAQuyE,EAAkBhlG,MACnC,IAAK,IAAM9W,KAAOupC,EAAKoK,KAAM,CAC3B,IAAMolE,EAAY,IAAIllE,EAAAA,yBAAyB7zC,EAAI+zC,aAAc91C,EAAU,UACrE46G,EAAOC,EAAAA,OAAsBp6H,MAAMshB,EAAI+zC,cAC7C/zC,EAAI+zC,aAAeglE,EAAUgD,oBAAoBlD,EAAKG,QAAS/6G,EACjE,CAEF,OAAO69G,CACT,E,oCA5MO,SAA2CpjI,GAChD,MAAqB,iBAAVA,GAA+B,MAATA,GAAqE,iBAA5CA,EAAgCuB,QAChFvB,EAA8BuB,QAEjC3M,OAAOoL,EAChB,E,mEA+bO,SACLw6D,EACAj1C,GAiBA,IAfA,IAAI28E,EAAW,EAETg+B,EAAU1lE,EAAep8B,MAAM1/B,IAAI,CAACmyD,EAAMqN,IACvCrN,EAAKoK,KAAKv8D,IAAI,CAAC4oB,EAAK66E,KACzB,IAAMg+B,EAAOC,EAAAA,OAAsBp6H,MAAMshB,EAAI+zC,cACvCglE,EAAY,IAAIllE,EAAAA,yBAAyB7zC,EAAI+zC,aAAc91C,EAAU,SAAU,CACnF+B,IAAK46E,EAAW,EAChBtqC,UAAWuqC,EAAiB,EAC5BtxC,KAAMqN,EAAY,IAIpB,OAFAgkC,GAAY,EACAm+B,EAAU9uB,WAAW4uB,EAAKG,YAIjCpiE,EAAY,EAAGA,EAAYgiE,EAAQhvI,OAAQgtE,GAAa,EAAG,CAClE,IAAMrN,EAAOqvE,EAAQhiE,GACrB,IAAKgkC,EAAW,EAAGA,EAAWrxC,EAAK3/D,OAAQgxG,GAAY,EAAG,CACxD,IAAM56E,EAAMupC,EAAKqxC,GAAUohC,EAAA,SAAA16H,GAEzB,IAAK,IAAM5X,KAAK4X,EAASmrG,QAAU,GAAI,CACrC,IAAMwvB,EAAWrD,EAAQlvI,EAAI,KAAKkxG,GAClC,GAAIqhC,IAAaA,EAASvuH,KAAM7jB,GAAiB,aAAXA,EAAE4O,MAAuB5O,EAAEY,QAAU6W,EAAS7W,OAAQ,CAC1F,GAAI6W,EAAS26F,aACX,IAAK,IAAIigC,EAAK,EAAGA,EAAK56H,EAAS26F,aAAaryG,OAAQsyI,GAAM,EAC7C,IAAPA,GACFD,EAASzwI,KAAK,CAAEiN,KAAM,QAAShO,MAAO,KAExCwxI,EAASzwI,KAAK,CAAEiN,KAAM,cAAehO,MAAO6W,EAAS26F,aAAaigC,KAGtED,EAASzwI,KAAK,IAAK8V,EAAUmrG,YAAQz8G,EAAW+tG,UAAU,GAC5D,CACF,CACF,EAfA,IAAK,IAAMz8F,KAAY0e,EAAGg8G,EAAA16H,EAgB5B,CACF,CACA,OAAOs3H,CACT,E,+BAwGO,SACLj3G,EACAg5E,GAEA,OAAO,EAAA3jD,EAAAA,oBAAmBr1B,EAAW,CAACx1B,EAAK1B,IAClCkwG,EAAejtF,KAAM67C,GACnBA,EAAK77C,KAAMsS,GACTA,EAAIlmB,SAAWkmB,EAAIjmB,KAAK2T,KAAM0B,GAAMA,EAAEuS,WAAW5N,gBAAkB5nB,KAIlF,E,uIApsBAgwI,EAAAjsI,EAAA,OACA2iE,EAAA3iE,EAAA,OAgBAozB,EAAApzB,EAAA,OAMAksI,EAAAlsI,EAAA,OAEAw7C,EAAAx7C,EAAA,OAQAwwG,EAAAxwG,EAAA,OAMA4yB,EAAA5yB,EAAA,MACAg0B,EAAAh0B,EAAA,OACA8nE,EAAA9nE,EAAA,OAEA48C,EAAA58C,EAAA,OACAgoE,EAAAhoE,EAAA,OACAm/D,EAAAn/D,EAAA,OACA0zB,EAAA1zB,EAAA,OACAgT,EAAAhT,EAAA,OACAE,EAAAF,EAAA,OAAoE,SAAA09C,EAAAxjD,EAAAC,EAAAR,GAAA,OAAAQ,GAAA,EAAAwjD,EAAAv5C,SAAAjK,IAAA,EAAAyjD,EAAAx5C,SAAAlK,EAAAmE,IAAAjD,QAAAC,UAAAlB,EAAAR,GAAA,MAAAgkD,EAAAv5C,SAAAlK,GAAAwC,aAAAvC,EAAAW,MAAAZ,EAAAP,GAAA,UAAA0E,IAAA,QAAAnE,GAAAoE,QAAA7C,UAAA8C,QAAAjC,KAAAlB,QAAAC,UAAAiD,QAAA,wBAAApE,GAAA,QAAAmE,EAAA,mBAAAnE,CAAA,KA0D7D,SAASqxI,EACd57G,EACA1zB,EACAkwI,EACAb,EACAv9G,EACA6mB,GAEA,IAAMnS,GAAmB,EAAAukB,EAAAA,oBAAkB,EAAAn3B,EAAAA,kBAAiB,KAAK,EAAA41B,EAAAA,gBAAe,QAAS91B,WAAW5B,IAC9FyxD,GAAe,EAAA6tB,EAAAA,gCAA+B5qE,GAChD2pG,OAAkCtsI,EAClCusI,GAAc,EAElB,SAASC,EAASn2H,GAChB,OAAQg2H,GAAYh2H,IAAUi2H,GAC1B,EAAA/6G,EAAAA,yBAAwB,CAAC86G,GAAYh2H,EAAOi2H,IAAchlI,KAAK,UAC/DtH,CACN,CAMA,IAJI80C,IACFy3F,GAAc,IAGRA,GACuB7sD,EAAahiF,OAAQ7D,IAChD,IAAM8pH,EACsB,iBAAnB6nB,GACH,EAAAiB,EAAAA,sCAAqCD,EAAS3yI,EAAEwc,OAAQm1H,OAAgBxrI,EAAWiuB,EAASiR,YAC5F,EAAAwtG,EAAAA,6BAA4BlB,EAAgBgB,EAAS3yI,EAAEwc,QAC7D,OACExc,EAAEsC,MAAQwnH,KAAY7uE,GAAYA,EAAQykB,OAAS1/D,EAAEi7C,QAAQykB,MAAQzkB,EAAQwrB,YAAczmE,EAAEi7C,QAAQwrB,aAGhF1mE,OAAS,GAChC2yI,GAAc,EACdD,GAAc,EAAAzyH,EAAAA,wBAAuB,IAErC0yH,GAAc,EAIlB,IAAM/zB,EAA8E,CAAC,EAyBrF,OAxBA,EAAAlxC,EAAAA,aAAY3kC,EAAiBmE,MAAO,CAACx1B,EAAUs1D,EAAWikC,KACxD,GAAIv5F,EAASnV,MAAQA,KACd24C,GAAYA,EAAQykB,OAASqN,EAAY,GAAK9xB,EAAQwrB,YAAcuqC,EAAiB,GAAI,CAC5Fv5F,EAASmhC,aAAyC,iBAAnB+4F,OAA8BxrI,EAAYwrI,EACzE,IAAMmB,EAAYH,EAASl7H,EAAS+E,OACpC/E,EAAS+E,MAAQs2H,EAGjB,IAAMC,EACsB,iBAAnBpB,EAA8BA,GAAiB,EAAAjjE,EAAAA,cAAaijE,EAAgBv9G,EAASiR,WAAWriC,KACzGyU,EAASokG,mBAAqB,CAAC,CAAEjjE,aAAcnhC,EAASmhC,aAAc51C,KAAM+vI,EAASjkG,WAAW,IAClE,iBAAnB6iG,IACTl6H,EAASk9F,SAAU,EACnBl9F,EAASowE,SAAW,GAAGirD,EAAY,GAAGA,MAAgB,KAAKnB,KAE7D,IAAM7nB,EACsB,iBAAnB6nB,GACH,EAAAiB,EAAAA,sCAAqCE,EAAWnB,OAAgBxrI,EAAWiuB,EAASiR,YACpF,EAAAwtG,EAAAA,6BAA4BlB,EAAgBmB,GAClDn0B,EAAclnG,EAASnV,KAAO,CAAEkzD,GAAIs0D,EAAQ7uE,WAC5CxjC,EAASnV,IAAMwnH,CACjB,IAGG,IAAIh8C,EAAAA,iBAAiBhlC,EAAkB1U,GAAU25C,iBAAiB,CAAE4wC,iBAC7E,CA4FO,SAAS6yB,EAAiCl8E,GAC/C,IAAI2kC,EAAM,GACV,GAAkB,gBAAd3kC,EAAK1mD,WAEF,GAAkB,aAAd0mD,EAAK1mD,MACd,IAAK0mD,EAAKukB,KAAM,CACVvkB,EAAK88C,cAAgB98C,EAAK88C,aAAaryG,OAAS,IAClDk6F,GAAO,GAAG3kC,EAAK88C,aAAa3kG,KAAK,aAEnC,IAAIyiI,EAAY,GAChB,GAAmB,MAAd56E,EAAK6tD,OAAgC,IAAf7tD,EAAK6tD,OAAiB7tD,EAAK06E,cAAgB16E,EAAK06E,aAAajwI,OAAS,EAAI,CACnG,IAAMowI,EAAc,GACF,MAAd76E,EAAK6tD,OAAgC,IAAf7tD,EAAK6tD,OAC7BgtB,EAAYxuI,KAAK2zD,EAAK6tD,OAEpB7tD,EAAK06E,cAAgB16E,EAAK06E,aAAajwI,OAAS,GAClDowI,EAAYxuI,KAAK2zD,EAAK06E,aAAaviI,KAAK,MAE1CyiI,EAAY,IAAIC,EAAY1iI,KAAK,OACnC,CACAwsF,GAAO,GAAG3kC,EAAKuyB,WAAWqoD,OAAe56E,EAAK86E,YAChD,OAEAn2C,GAAO3kC,EAAK10D,MAAQ,KAEtB,OAAOq5F,CACT,CAgTO,SAASk0C,EACd9kE,EACAj1C,GAEA,OAAO,EAAAslF,EAAAA,2BAA0BrwC,EAAgBj1C,EACnD,CA2BA,SAASm8G,EAAmBrgI,GAC1B,IAAM+8B,EAA+B/8B,EAAK3C,IAAKmyD,IACtC,CACL18D,KAAM08D,EAAK18D,KACXipD,YAAayT,EAAKzT,YAClB6d,KAAMpK,EAAKoK,KAAKv8D,IAAK4oB,IACZ,CACLnzB,KAAMmzB,EAAInzB,KACVipD,YAAa91B,EAAI81B,YACjBie,aAAc/zC,EAAIkP,UAAU53B,KAAK,IAAI6U,aAQ7C,OAHqB,IAAjB2qB,EAAMltC,QACRktC,EAAMtrC,KAAK,CAAEqB,KAAM,SAAU8mE,KAAM,CAAC,CAAE9mE,KAAM,QAASknE,aAAc,OAE9Dj9B,CACT,CAmCO,SAASmhG,EACd/oG,EACAyrE,GAEA,OAAO,EAAA3jD,EAAAA,oBAAmB9nB,EAAW,CAAC6iD,EAAKxa,MACpCA,GAIEojC,EAAejtF,KAAM67C,GACnBA,EAAK77C,KAAMsS,GACTA,EAAIlmB,SAAWkmB,EAAIjmB,KAAK2T,KAAM0B,GAAMA,EAAEviB,KAAKknB,gBAAkBwjD,EAAG1qE,KAAKknB,iBAIpF,CA2D8D,SAAAwmH,IA8B7D,OA9B6DA,GAAA,EAAA7lI,EAAAJ,SAAvD,UACL6I,EACA8gB,GAEA,IAAMxoB,GAAU,EAAAuwB,EAAAA,sBAChBvwB,EAAQygC,QAAU/4B,EAAQ+4B,QAC1BzgC,EAAQspB,SAAW,CAAC,KAAK,EAAA42B,EAAAA,gBAAex4C,EAAQA,QAAQtQ,MAAOgzB,QAAS1iB,EAAQA,UAChF1H,EAAQwoB,SAAW,IAAKxoB,EAAQwoB,SAAU4B,QAAS1iB,EAAQ4/F,iBAAmBtnG,EAAQwoB,SAAS4B,SAC/FpqB,EAAQwoB,SAASiR,UAAY,IAAKz5B,EAAQwoB,SAASiR,aAAcjR,EAASiR,WAE1E,IAAMz1B,GAAS,EAAA+rB,EAAAA,aAAY/vB,GAC3B,GAAIgE,EAAOK,QAAS,CAClB,IAAMywB,EAAa9wB,EAAOM,KAC1B,MAAO,CACLD,SAAS,EACTC,KAAM,CACJnF,GAAIuI,EAAQvI,GACZ6D,KAAM,KACNy9B,QAAS3L,EAAW2L,QACpB/4B,QAASotB,EAAWxL,SAAS,GAAGc,QAChCk9E,gBAAiBtnG,EAAQwoB,SAAS4B,QAClC5B,SAAU,CACRiR,UAAWz5B,EAAQwoB,SAASiR,WAAa,CAAC,EAC1CiM,MAAO1lC,EAAQwoB,SAASsN,QAAQqN,SAAW,MAInD,CACE,MAAO,CAAE9+B,SAAS,EAAOpB,MAAOe,EAAOf,MAE3C,IAAC1N,MAAA,KAAAD,UAAA,CA3tB+BtB,EAAAA,oBAAA,SAAAukD,GAC9B,SAAA6uF,EACE5iI,EACgB6qC,GAChB,IAAAhuC,EAD2C,OAC3C,EAAArC,EAAAH,SAAA,KAAAuoI,IACA/lI,EAAA82C,EAAA,KAAAivF,EAAA,CAAM5iI,KAFU6qC,QAAAA,EAA2BhuC,CAG7C,CAAC,SAAAo3C,EAAA55C,SAAAuoI,EAAA7uF,IAAA,EAAA35C,EAAAC,SAAAuoI,EAAA,CAN6B,EAM7B,EAAA1uF,EAAA75C,SANsCkD,O,gGC2WlC,SACL+/D,EACA/N,EACAvrC,GAEA,IAAM6+G,EAAwBvlE,EAAG0qC,uBAAuBz4C,GACpDuzE,EAAmBD,EAAsBjqG,KAAKiqG,EAAsBjqG,KAAKjpC,OAAS,GACtF,GAAImzI,EACFD,EAAsBjqG,KAAO,IAAIiqG,EAAsBjqG,MAAM,EAAAqkB,EAAAA,mBAAkB6lF,QAC1E,CACL,IAAMrvB,EAAexH,EAA4B3uC,EAAI/N,GAC/C87C,EAAUoI,EAAaA,EAAa9jH,OAAS,GAC/C07G,GACFy3B,EAAmB,CACjB57B,OAAQmE,EAAQa,UAAUhF,QAAU,EACpCD,OAAQoE,EAAQa,UAAUjF,OAC1BhhF,OAAQolF,EAAQplF,QAAU4nF,EAAAA,YAC1Bje,OAAQyb,EAAQzb,SAAU,EAC1BH,QAAS4b,EAAQa,UAAUzc,UAAW,EACtC2b,cAAeC,EAAQa,UAAUd,gBAAiB,EAClDvb,UAAWwb,EAAQxb,YAAa,EAChCH,IAAK2b,EAAQ3b,IACbxuD,MAAOmqE,EAAQnqE,MACf5K,SAAU+0E,EAAQ/0E,SAClBy5D,mBAAoBsb,EAAQtb,mBAC5BqX,KAAMiE,EAAQjE,KACdh7F,MAAOi/F,EAAQj/F,OAEjBy2H,EAAsBjqG,KAAO,IAAIiqG,EAAsBjqG,MAAM,EAAAqkB,EAAAA,mBAAkB6lF,KAE/ED,EAAsBjqG,KAAO,IACxBiqG,EAAsBjqG,KACzB,CACEsuE,OAAQ,EACRjhF,QAAQ,EAAAI,EAAAA,cAAa,IAAKrC,EAASxc,OACnCioF,SAAS,EACTG,QAAQ,EACRC,WAAW,EACXub,eAAe,GAIvB,CACA,OAAO9tC,CACT,E,4CA8KO,WACL,MAAO,msBAsBT,E,uCAEO,SACL9+D,EACA5D,EACAkwC,EAGI,CAAC,GAEL,OAAQtsC,GACN,IAAK,OACH,MAAO,CACLqB,SAAS,EACTC,KAAM,CACJtB,KAAM,OACN6D,MAAO,CAAC,EACRm7D,cAAe,CAAC,IAItB,IAAK,KACH,IAAMxF,EAAYp9D,EAAK,IAAK,EAAAmoI,EAAAA,iBAAgBnoI,EAAK,KAAM,EAAAyrB,EAAAA,cAAa,EAAG,MACjE4xC,EAAYr9D,EAAK,IAAK,EAAAmoI,EAAAA,iBAAgBnoI,EAAK,KAAM,EAAAyrB,EAAAA,cAAa,EAAG,MAuCvE,MAAO,CACLxmB,SAAS,EACTC,KAAM,CACJtB,KAAM,KACN6D,MA1CyB,CAC3B21D,UAAWA,IAAa,EAAA3xC,EAAAA,cAAa,EAAG,MACxCmuF,UAAW55G,EAAK,GAAK+9D,SAAS/9D,EAAK,GAAI,IAAM,EAC7C65G,eAAgB75G,EAAK,GAAK+9D,SAAS/9D,EAAK,GAAI,IAAM,EAClDq9D,UAAWA,IAAa,EAAA5xC,EAAAA,cAAa,EAAG,MACxCquF,SAAU95G,EAAK,GAAK+9D,SAAS/9D,EAAK,GAAI,KAAOq9D,GAAWznE,OAAS,GAAK,EAAI,EAAI,EAC9EmkH,eAAgB/5G,EAAK,GAAK+9D,SAAS/9D,EAAK,GAAI,IAAM,GAqChD4iE,cAAe,CAAC,EAChB1X,OApCW,w9BAwCjB,IAAK,KAQH,MAAO,CACLjmD,SAAS,EACTC,KAAM,CACJtB,KAAM,KACN6D,MAVyB,CAC3B21D,WAFgBp9D,EAAK,IAAK,EAAAmoI,EAAAA,iBAAgBnoI,EAAK,KAAM,EAAAyrB,EAAAA,cAAa,EAAG,SAE7C,EAAAA,EAAAA,cAAa,EAAG,MACxCgnC,QAASzyD,EAAK,GAAK+9D,SAAS/9D,EAAK,GAAI,IAAM,EAC3Cg6G,QAASh6G,EAAK,GAAK+9D,SAAS/9D,EAAK,GAAI,IAAM,GAQzC4iE,cAAe,CAAC,EAChB1X,OAvID,gxBA2IL,IAAK,MACH,IAAMkS,EAAYp9D,EAAK,IAAK,EAAAmoI,EAAAA,iBAAgBnoI,EAAK,KAAM,EAAAyrB,EAAAA,cAAa,EAAG,MAevE,MAAO,CACLxmB,SAAS,EACTC,KAAM,CACJtB,KAAM,MACN6D,MAlByB,CAC3B+qD,KAAMxyD,EAAK,GAAK+9D,SAAS/9D,EAAK,GAAI,IAAM,EACxCo9D,UAAWA,IAAa,EAAA3xC,EAAAA,cAAa,EAAG,OAiBtCm3C,cAAe,CAAC,EAChB1X,OAhBW,8RAoBjB,IAAK,SACH,IACIrnD,EADEqnD,EAAShb,EAAKgb,OAEpBk9E,EAAiCppE,EAAAA,yBAAyBqpE,kBAAkBroI,EAAM,CAACoF,EAASxP,KAC1FiO,EAAQ,CAAEuB,UAASw7C,QAAS,CAAEh9C,KAAM,uBAAwBsB,KAAM,CAAEtP,aAD9D6R,EAAK2gI,EAAL3gI,MAAOm7D,EAAawlE,EAAbxlE,cAGf,OAAI/+D,EACK,CACLoB,SAAS,EACTpB,SAGG,CACLoB,SAAS,EACTC,KAAM,CACJtB,KAAM,SACN6D,MAAAA,EACAm7D,gBACA1X,OAAAA,EACAi+C,MAAOj5D,EAAKo4F,cAAgB,CAAEzrD,SAAU3sC,EAAKo4F,cAAe//H,OAAQ,iBAAepN,IAK7F,E,iDA8CO,SACLoxB,EACA0jB,EACA7mB,EACAu3B,GAEA,IAAM/S,EAAerhB,EAAM9f,SACrBA,GAAW,EAAAi3D,EAAAA,cAAa91B,EAAcxkB,EAASiR,WAC/CwiD,GAAW,EAAA+X,EAAAA,mBAAkBnoF,EAAU2c,GACvCm/G,EAAYC,EAA6C3rD,EAAUzzD,GACzEq/G,EAA4BzpE,EAAAA,yBAAyB0pE,iBAAiB7rD,EAAUzzD,EAASiR,WAAjFriC,EAAIywI,EAAJzwI,KAAM80B,EAAS27G,EAAT37G,UACRkqF,EAAuD,CAC3D,CACElzE,WAAW,EACX9F,KAAMzR,EAAMyR,KAAKz7B,IAAKxH,IAAG,CACvBu2G,SAAU,CACRj/C,aAAc,EACdi6C,OAAQvxG,EAAIk4D,eAAiBl4D,EAAIy3D,KACjC65C,OAAQtxG,EAAI03D,QACZoiC,UAAW95F,EAAI85F,QACf2b,eAAe,GAEjBlqE,MAAOvrC,EAAIurC,MACX5K,SAAU3gC,EAAI2gC,SACdy5D,mBAAoBp6F,EAAIo6F,mBACxBqX,KAAMzxG,EAAIyxG,KACV1X,IAAK/5F,EAAI+5F,IACTE,OAAQj6F,EAAIi6F,OACZt6B,YAAY,EAAA9M,EAAAA,cAAa7yD,EAAIojE,gBAAkBpjE,EAAIojE,eAAevoE,WAAQuF,EAC1EkwB,QAAS,EAAAuiC,EAAAA,cAAa7yD,EAAIojE,qBAAwDhjE,EAArCJ,EAAI4jE,iBAAmB5jE,EAAIswB,OACxE4pE,UAAWl6F,EAAIk6F,eAIf0zC,GAAoB,EAAAj8G,EAAAA,0BACxB,EAAAu1B,EAAAA,qBACE,EAAA2mF,EAAAA,6BAA4Br8G,EAAMoR,WAAa5iC,GACtC,GAAGA,EAAIk4D,eAAiBl4D,EAAIy3D,SAASz3D,EAAI4jE,iBAAmB5jE,EAAIswB,QAAU,CAAEz1B,MAAO,KAAMA,WAIhGi0G,EAA2C,CAC/C9pG,IAAI,EAAAiV,EAAAA,wBAAuB,GAC3B1d,KAAK,EAAAuwI,EAAAA,6BAA4Bp7H,GACjCowE,WACA0rD,YACAt4F,UACArC,eACAgqE,OAAQ,GACRitB,UAAW,GACX5+B,cAAetlD,EACfw3D,MAAO,EACPhzG,KAAM,GACNg8C,KAAM,GACN2oD,SAA4B,MAAlBv9E,EAAMu9E,SAAmB,CAAE9xG,KAAMu0B,EAAMu9E,eAAa3uG,EAC9D2xB,YACA90B,OACAsyD,KAAM,EACN8iD,uBAAwB,GACxB4J,cAAeA,EACfnG,mBAAoB,CAAC,CAAEjjE,eAAc51C,OAAM8rC,WAAW,IACtDnG,WAAYgrG,EAAkBpmI,IAAK4jG,IAAK,CACtCviG,KAAM,SACNyuD,aAAc8zC,EAAMpxG,OACpBy9D,KAAM2zC,EAAM,IAAIlzC,eAAiBkzC,EAAM,IAAI3zC,MAAQ,EACnDnnC,OAAQ86E,EAAM,IAAIxnC,iBAAmBwnC,EAAM,IAAI96E,UAEjD+7E,aAAc,CAAE1pC,OAAQ,IACxB0zC,QAAS,CAAC,EACVrT,OAAQ,CACNlhB,SAAU,CAAEvyB,KAAM,EAAGC,OAAQ,EAAGtyD,KAAM,EAAGuyD,GAAI,KAG3C4iD,EAAyBy7B,EAA6Ch/B,EAAiBmN,GAE7F,OADAnN,EAAgBuD,uBAAyBA,EAClCvD,CACT,E,4CA5fO,SAAmDp9F,GACxD,IAAMk0C,EAAQssD,EAA+CxgG,GAC7D,OAAOA,EAAS26F,aAAa1pC,OAAO/c,IAAQ/qD,KAC9C,E,yGAtBO,SACL6W,GAEA,IAAMk0C,EAAQqsD,EAAyDvgG,GACvE,OAAOA,EAAS2gG,uBAAuBzsD,EACzC,E,+GAOO,SACLl0C,GAEA,IAAMk0C,EAAQusD,EAAqDzgG,GACnE,OAAOA,EAASokG,qBAAqBlwD,EACvC,E,qJA7KO,SACLl0C,EACA2c,GAEA,IAAMuU,EAAclxB,GAAUsyE,gBAAiB,EAAAC,EAAAA,cAAa51D,EAASxc,OAAOH,EAASsyE,gBAAmB,GAClGn6E,EAA6C,GACnD,GAAI+4B,EAAY,CACd,IAAMssE,GAAS,EAAA6+B,EAAAA,kCAAiCnrG,GAChD,IAAK,IAAMwoE,KAAS8D,EAAQ,CAC1B,IAAMhzB,EAAQkvB,EAAM,GACdpxG,EAASoxG,EAAM,GACrBvhG,EAAOjO,KAAK,CACViN,KAAM,SACNyuD,aAAct9D,EACdy9D,KAAMykB,EAAMzkB,KACZkI,WAAmC,iBAAhBuc,EAAMrhF,MAAmC,IAAdqhF,EAAMrhF,MAAcqhF,EAAMrhF,MAAMA,OAElF,CACF,CACA,OAAOgP,CACT,E,2CAmHO,SACL+4B,GAEA,OAAOA,EAAW5K,OAA2C,CAAC00C,EAAK1sE,KACjE,IAAK,IAAIrF,EAAI,EAAGA,EAAIqF,EAAIs3D,aAAc38D,IACpC+xE,EAAI9wE,KAAK,IAAKoE,EAAKs3D,aAAc,IAEnC,OAAOoV,GACN,GACL,E,qGA3EO,SACLzpC,EACA5U,GAEA,IAAMggG,EAA6B,GACnC,IAAK,IAAMruH,KAAOijC,EAAM,CACtB,IAAM3S,EAAStwB,EAAIswB,QAAS,EAAAykF,EAAAA,gBAAe/0G,EAAIswB,QAAQ,QAASlwB,EAC1DmwD,EAAOvwD,EAAIswB,QAAQigC,MAAQliC,EAASxc,MAC1Cw8G,EAAYzyH,KAAK,CACfoyI,SAAS,EACTC,QAASjuI,EAAIi6F,OACbi0C,WAAYluI,EAAIswB,OAChB69G,SAAuB,MAAbnuI,EAAIurC,MACdksB,KAAM,GAAiB,MAAdz3D,EAAIsxG,OAAiB,GAAGtxG,EAAIsxG,UAAUtxG,EAAIuxG,SAAW,GAAGvxG,EAAIuxG,WAAWvxG,EAAI85F,QAAU,IAAM,KACpGC,IAAK/5F,EAAI+5F,KAAKj9F,WACdwzB,SACAigC,OACA2pC,UAAWl6F,EAAIk6F,UACf3uD,MAAOvrC,EAAIurC,MACX5K,SAAU3gC,EAAI2gC,SACdy5D,mBAAoBp6F,EAAIo6F,mBACxBqX,KAAMzxG,EAAIyxG,MAEd,CACA,OAAO,EAAA28B,EAAAA,uBAAsB/f,EAC/B,E,4CAgQO,SAAmD38G,GACxD,OAAOA,EAASuqG,cAAcn+F,KAAK,CAAC+3F,EAAIl7G,IACtC27G,EAA4B5kG,EAAU/W,GAAGmjB,KAAM86B,GAAoB,MAAdA,EAAE29D,UAAoB39D,EAAE29D,SAASjF,SAAW14D,EAAE29D,SAAShF,QAEhH,E,sCARO,SAA6C7/F,GAClD,OAAOA,EAASuqG,cAAcn+F,KAAK,CAAC+3F,EAAIl7G,IAAM27G,EAA4B5kG,EAAU/W,GAAGmjB,KAAM86B,GAAe,MAATA,EAAEmhD,KACvG,E,qCApfO,SACL+U,EACAzgF,GAEA,IAAM3c,GAAW,EAAA28H,EAAAA,qBAAoBv/B,EAAgB7xG,KAAMoxB,EAASiR,WACpE,GAAgB,MAAZ5tB,EAIJ,OADAA,EAASqgB,UAAY+8E,EAAgB/8E,WAAargB,GAAUqgB,WAAargB,GAAU4tD,iBAC5E5tD,CACT,E,+FAkfO,SAAuD7I,GAC5D,OAAQA,GACN,IAAK,OAQL,IAAK,SACH,MAAO,GAPT,IAAK,KACH,MAAO,CAAC,OACV,IAAK,KACH,MAAO,CAAC,MAAO,IAAK,MACtB,IAAK,MACH,MAAO,CAAC,KAAM,OAIpB,E,2CA7HO,SAAkD6I,GACvD,OACEA,EAASqd,UAAUohC,QACnBz+C,EAASqd,UAAUq/E,OAAO18F,UAAUqd,UAAUohC,QAC9Cz+C,EAASqd,UAAUq/E,OAAO18F,UAAUqd,UAAUq/E,OAAO18F,UAAUqd,UAAUohC,QACzEz+C,EAAS08F,OAAO18F,UAAUqd,UAAUohC,QACpCz+C,EAAS08F,OAAO18F,UAAUqd,UAAUq/E,OAAO18F,UAAUqd,UAAUohC,MAEnE,E,8EA8DO,SAASumD,EACdhlG,EACA48H,GAEA,GAAI58H,EAASqd,UAAU84C,gBAAkBn2D,EAASqd,SAASq/E,MACzD,OAAO18F,EAASqd,SAAS84C,cAEzB,IAAMyhC,EAAOglC,GAAW,IAAIlqH,IAC5B,OAAIklF,EAAKxpG,IAAI4R,GACJ,CAAC,GAEV43F,EAAK7jF,IAAI/T,GAOF,IANeA,EAASqd,UAAUq/E,OAAO18F,SAC5CglG,EAAwChlG,EAASqd,SAASq/E,MAAM18F,SAAU43F,GAC1E53F,EAAS08F,OAAO18F,SACdglG,EAAwChlG,EAAS08F,MAAM18F,SAAU43F,GACjE,CAAC,KAEuB53F,EAASqd,UAAU84C,eAErD,E,yCAEO,SAAgDn2D,GACrD,OACEA,EAAS28F,QAAQl+C,QACjBz+C,EAAS28F,QAAQD,OAAO18F,UAAU28F,QAAQl+C,QAC1Cz+C,EAAS28F,QAAQD,OAAO18F,UAAU28F,QAAQD,OAAO18F,UAAU28F,QAAQl+C,QACnEz+C,EAAS08F,OAAO18F,UAAU28F,QAAQl+C,QAClCz+C,EAAS08F,OAAO18F,UAAU28F,QAAQD,OAAO18F,UAAU28F,QAAQl+C,MAE/D,E,+CA1FO,SAAsDz+C,GAC3D,IAAM+lG,EAAgB/lG,EAAS08F,OAAO18F,SACtC,OAC6B,MAA3B+lG,GAAe1oF,UACM,MAArBrd,EAASqd,UACTrd,EAASqd,SAASlmB,OAAS4uG,EAAc1oF,UAAUlmB,OAClD6I,EAASqd,SAASq/E,OAAOtsB,WAAa21B,EAAc31B,UACnDpwE,EAASqd,SAASohC,SAAWsnD,EAAc1oF,SAASohC,SACuB,IAA7E9zD,OAAOuB,KAAKg6G,EAA2ClmG,IAAW1X,MAEtE,E,sFAjCO,SAAqDs9H,EAAsB39D,GAChF,OAAOA,EAAK3hC,OAAO,CAAC00C,EAAK3I,IACnBA,EAAK75D,QAIAwiE,EAHqB3I,EAAK55D,KAC9BrM,OAAQ7D,GAAMA,EAAEgD,OAASq6H,GACzBt/F,OAAO,CAACu2G,EAAMt0I,IAAMs0I,EAAOC,EAAoCv0I,GAAI,GAG/DyyE,EAER,EACL,E,wCA7WO,SACLh7D,EACA2c,GAEA,IAAMogH,EAAkBxxB,EAA+BvrG,GACvD,GAAuB,MAAnB+8H,EAAJ,CAGA,IAAMxrG,EAAoC,GAC1C,IAAK,IAAMipF,KAAMuiB,EACf,IAAK,IAAI9zI,EAAI,EAAGA,EAAIuxH,EAAG50D,aAAc38D,GAAK,EAAG,CAC3C,IAAIE,EAAsCqxH,EAAGvsD,WAAausD,EAAGvsD,WAAa,SAAMv/D,EACnE,MAATvF,IACFA,EAAQqxH,EAAG57F,QAEA,MAATz1B,IACFA,GAAQ,EAAA6zI,EAAAA,wBAAsB,EAAA9oB,EAAAA,sBAAqBsG,EAAGz0D,KAAM,KAE9Dx0B,EAAKrnC,KAAK,CACR67D,KAAMy0D,EAAGz0D,KACT58D,QACA04F,WAAW,EAAA7iE,EAAAA,cAAa,EAAGrC,EAASxc,QAExC,CAEF,OAAOoxB,CAlBP,CAmBF,E,yCAopBO,SACLvxB,GAEA,IAAMqd,EAAWrd,EAASqd,SAC1B,GAAKA,EAAL,CAGA,IAAM9xB,EAAO8xB,EAASlmB,KAChB6D,EAAQ66D,EAAgC71D,GAC9C,MAAa,OAATzU,EACK,CACL4L,KAAM,SACN8lI,SAAUjiI,EAAM21D,UAChBusE,kBAAmBliI,EAAMmyG,UACzBgwB,iBAAkBniI,EAAMoyG,eACxBgwB,SAAUpiI,EAAM41D,UAChBysE,iBAAkBriI,EAAMqyG,SACxBiwB,gBAAiBtiI,EAAMsyG,gBAEP,OAAT/hH,EACF,CACL4L,KAAM,SACN8lI,SAAUjiI,EAAM21D,UAChB3K,QAAShrD,EAAMgrD,QACfunD,QAASvyG,EAAMuyG,SAEC,QAAThiH,EACF,CACL4L,KAAM,UACN8lI,SAAUjiI,EAAM21D,UAChB5K,KAAM/qD,EAAM+qD,MAEI,WAATx6D,EACF,CAAE4L,KAAM,eADV,CA1BP,CA8BF,E,0CAjkBO,SAAiDimG,GACtD,IAAM+N,EAAS/N,EAAgBg7B,UACzBh8D,EAA6B,GACnC,IAAK,IAAMmhE,KAAOpyB,EACM,IAAlB/uC,EAAO9zE,QACT8zE,EAAOlyE,KAAK,CAACqzI,EAAKA,IAGhBA,GADYnhE,EAAOA,EAAO9zE,OAAS,GAAG,GACrB,EACnB8zE,EAAOA,EAAO9zE,OAAS,GAAG,GAAKi1I,EAE/BnhE,EAAOlyE,KAAK,CAACqzI,EAAKA,IAGtB,OAAOnhE,EAAOtmE,IAAK1N,GAAM,GAAGA,EAAE,MAAMA,EAAE,MAAM4N,KAAK,KACnD,E,uCAjLO,SACLgK,GAEA,IAAMw9H,EAAwBx9H,EAASuqG,cACjCkzB,EAAqBz9H,EAAS08F,OAAO18F,UAAUuqG,cAC/CA,GAAiBizB,GAAuBl1I,OAAS,EAAIk1I,EAAwBC,IAAuB,GAC1G,OAAgC,IAAzBlzB,EAAcjiH,OACjB,CAAC,CAAEipC,KAAMqzE,EAA4B5kG,GAAWq3B,WAAW,IAC3DkzE,CACN,E,2EAmOO,SACLh5E,EACAmsG,EACA/4B,EACAhoF,GAEA,IAAMggG,EAA6B,GACnC,IAAK,IAAMruH,KAAOijC,EAChB,IAAK,IAAIV,EAAW,EAAGA,GAAYviC,EAAIu2G,UAAUj/C,cAAgB,GAAI/0B,IAAY,CAC/E,IAAMm1B,EAAU13D,EAAIu2G,UAAUjF,OACxB2N,EAAUj/G,EAAIu2G,UAAUhF,QAAU,EAClCjhF,EACc,MAAlBtwB,EAAI2/D,WACA,GAAG3/D,EAAI2/D,cACc,MAArB3/D,EAAIswB,QAAQz1B,MACVmF,EAAIswB,OAAOz1B,MAAMiC,gBACjBsD,EACFmwD,EAAyB,MAAlBvwD,EAAI2/D,WAAqB3/D,EAAIswB,QAAQigC,MAAQliC,EAASxc,WAAQzR,EAC3EiuH,EAAYzyH,KAAK,CACfoyI,SAAUoB,EACVnB,QAASmB,GAAiC,MAAf/4B,EAAQtc,IACnCm0C,WAAYkB,GAAoC,MAAlB/4B,EAAQ/lF,QAAwC,MAAtB+lF,EAAQ12C,WAChEwuE,UAAWiB,GAAmC,MAAjB/4B,EAAQ9qE,MACrCksB,KAAM,GAAc,MAAXC,EAAkB,GAAGA,KAAa,KAAKunD,IAAUj/G,EAAIu2G,UAAUzc,QAAU,IAAM,KACxFC,IAAK/5F,EAAI+5F,KAAKj9F,WACdwzB,OAAQA,EACRigC,OACA2pC,UAAWl6F,EAAIk6F,UACf3uD,MAAOvrC,EAAIurC,MACX5K,SAAU3gC,EAAI2gC,SACdy5D,mBAAoBp6F,EAAIo6F,mBACxBqX,KAAMzxG,EAAIyxG,MAEd,CAGF,OAAO,EAAA28B,EAAAA,uBAAsB/f,EAC/B,E,iFApOO,SACL38G,GAEA,OAA8B,MAA1BA,GAAUmhC,aACLnhC,OAEP,CAEJ,E,mCAoJO,SAA0CA,GAC/C,MAAO,GAAGA,EAASnV,OAAOmV,EAASwjC,QAAQykB,QAAQjoD,EAASwjC,QAAQwrB,WACtE,E,sCAEO,SAA6C1gE,GAClD,MAAO,GAAGA,EAAIsxG,UAAUtxG,EAAIuxG,UAAUvxG,EAAI85F,WAAW95F,EAAIswB,QAAQz1B,QAAQmF,EAAIswB,QAAQigC,OAAOvwD,EAAIk6F,aAAal6F,EAAI+5F,MAAM/5F,EAAIi6F,UAAUj6F,EAAIurC,SAASvrC,EAAI2gC,WAAW3gC,EAAIo6F,qBAAqBp6F,EAAIyxG,MAChM,E,iDA5BO,SACLxuE,GAEA,IAAMorF,EAA6B,GACnC,IAAK,IAAMruH,KAAOijC,EAChB,IAAK,IAAIV,EAAW,EAAGA,GAAYviC,EAAIs3D,cAAgB,GAAI/0B,IAAY,CACrE,IAAMjS,EACc,MAAlBtwB,EAAI2/D,WACA,GAAG3/D,EAAI2/D,cACc,MAArB3/D,EAAIswB,QAAQz1B,MACVmF,EAAIswB,OAAOz1B,MAAMiC,WACjB,GAAG6kB,KAAKC,MAA2C,KAArC,EAAAgkG,EAAAA,sBAAqB5lH,EAAIy3D,KAAM,QACrD42D,EAAYzyH,KAAK,CACf67D,KAAM,GAAGz3D,EAAIy3D,OACbnnC,OAAQA,GAEZ,CAGF,OAAO,EAAA89G,EAAAA,uBAAsB/f,EAC/B,E,mCA3RA,IAAAprD,EAAA3iE,EAAA,OAEAozB,EAAApzB,EAAA,OACAg0B,EAAAh0B,EAAA,OAoBA0zB,EAAA1zB,EAAA,OAQAo9F,EAAAp9F,EAAA,OACAsiB,EAAAtiB,EAAA,OACAgT,EAAAhT,EAAA,OACAm/D,EAAAn/D,EAAA,OACAE,EAAAF,EAAA,OAEA08C,EAAA18C,EAAA,OA+BO,SAASkuI,EAAoC98H,GAClD,OAAO4kG,EAA4B5kG,GAAUsmB,OAAO,CAAC00C,EAAK1sE,IAAQ0sE,GAAO1sE,EAAIu2G,UAAUj/C,cAAgB,GAAI,EAC7G,CAyBO,SAAS2lD,EACdvrG,GAEA,OAAOA,EAASkxB,YAAclxB,EAAS08F,OAAO18F,UAAUkxB,UAC1D,CAwCO,SAASkrG,EACdp8H,EACAuqG,GAGA,IADA,IAAM5J,EAAyE,GACtE13G,EAAI,EAAGA,EAAIshH,EAAcjiH,OAAQW,IAAK,CAC7C,IAAMsoC,EAAOqzE,EAA4B5kG,EAAU/W,GAC7C00I,EAAuD,GAC7D,IAAK,IAAMxoB,KAAQ5jF,EACjB,GAAqB,MAAjB4jF,EAAKtQ,SAGT,IAAK,IAAIwB,EAAI,EAAGA,EAAI8O,EAAKtQ,SAASj/C,aAAcygD,IAC9Cs3B,EAAczzI,KAAK,CACjB21G,OAAQsV,EAAKtQ,SAAShF,OACtBD,OAAQuV,EAAKtQ,SAASjF,OACtBhhF,OAAQu2F,EAAKv2F,OAASu2F,EAAKv2F,OAASu2F,EAAKlnD,YAAa,EAAA5D,EAAAA,iBAAgB8qD,EAAKlnD,iBAAcv/D,EACzFmrC,MAAOs7E,EAAKt7E,MACZ5K,SAAUkmF,EAAKlmF,SACfy5D,mBAAoBysB,EAAKzsB,mBACzBqX,KAAMoV,EAAKpV,KACX1X,IAAK8sB,EAAK9sB,IACVE,SAAU4sB,EAAK5sB,OACfxjF,MAAOowG,EAAKpwG,MACZqjF,UAAW+sB,EAAKtQ,SAASzc,QACzB2b,gBAAiBoR,EAAKtQ,SAASd,cAC/Bvb,YAAa2sB,EAAK3sB,YAIxBmY,EAAuBz2G,KAAK,CAAEqnC,KAAMosG,EAAetmG,UAAWkzE,EAActhH,GAAGouC,WACjF,CACA,OAAOspE,CACT,CAEO,SAASiE,EACd5kG,EACA6jG,GAEA,IAAM+5B,EAAa59H,EAAS08F,OAAO18F,SAC/BA,EAAS08F,OAAO18F,UAAUuqG,cACxB1G,GAAkBwW,EAAgDr6G,EAAS08F,OAAO18F,YACjFuxB,UACH7iC,EACEu3G,EAAgBjmG,EAAS08F,OAAO18F,UAAU2kG,SAAW,CAAC,EAC5Dd,EAAiBA,GAAkBwW,EAAgDr6G,GACnF,IAAM69H,EAAc79H,EAASuqG,cAAc1G,IAAiBtyE,KACtDusG,EAAiB99H,EAAS2kG,QAEhC,OADak5B,GAAeD,GAAc,IAC9B9nI,IAAKq/G,IACf,IAAM7mH,GAAkC,EAAAsnD,EAAAA,mBAAkBu/D,GA+B1D,OA9BA7mH,EAAI+5F,IAA4B,MAAtBy1C,EAAez1C,IAAcy1C,EAAez1C,IAAO/5F,EAAI+5F,KAAO4d,EAAc5d,IACtF/5F,EAAIurC,MAAgC,MAAxBikG,EAAejkG,MAAgBikG,EAAejkG,MAASvrC,EAAIurC,OAASosE,EAAcpsE,MAC9FvrC,EAAI2gC,SAAsC,MAA3B6uG,EAAe7uG,SAAmB6uG,EAAe7uG,SAAY3gC,EAAI2gC,UAAYg3E,EAAch3E,SAG1G3gC,EAAIo6F,mBACyB,MAA3Bo1C,EAAe7uG,WACT6uG,EAAep1C,mBAChBp6F,EAAIo6F,oBAAsBud,EAAcvd,mBAC/Cp6F,EAAIyxG,KAA8B,MAAvB+9B,EAAe/9B,KAAe+9B,EAAe/9B,KAAQzxG,EAAIyxG,MAAQkG,EAAclG,KAC7D,MAAzB+9B,EAAel/G,QAA+C,MAA7Bk/G,EAAe7vE,WACrB,MAAzB6vE,EAAel/G,QACjBtwB,EAAIswB,OAASk/G,EAAel/G,OAC5BtwB,EAAI2/D,gBAAav/D,IAEjBJ,EAAI2/D,WAAa6vE,EAAe7vE,WAChC3/D,EAAIswB,YAASlwB,IAGfJ,EAAIswB,OAAStwB,EAAIswB,QAAUqnF,EAAcrnF,OACzCtwB,EAAI2/D,WAAa3/D,EAAI2/D,YAAcg4C,EAAch4C,YAGnD3/D,EAAIi6F,UAAkC,MAAtBu1C,EAAez1C,KAAwC,MAAzBy1C,EAAev1C,OACzDu1C,EAAev1C,OACdj6F,EAAIi6F,QAAU0d,EAAc1d,QACjCj6F,EAAIk6F,aAAyC,MAAzBs1C,EAAel/G,QAA+C,MAA7Bk/G,EAAe7vE,YACxC,MAA5B6vE,EAAet1C,UAEVl6F,EAAIk6F,WAAayd,EAAczd,UADhCs1C,EAAet1C,WAEZl6F,GAEX,CAoJO,SAAS+rH,EAAgDr6G,GAC9D,IAAMk0C,EAAQl0C,EAASuqG,cAAcp0D,UAAWguD,GAAOA,EAAG9sE,WAC1D,OAAkB,IAAX6c,EAAe,EAAIA,CAC5B,CAEO,SAASqsD,EAAyDvgG,GACvE,IAAMk0C,EAAQl0C,EAAS2gG,uBAAuBxqD,UAAWguD,GAAOA,EAAG9sE,WACnE,OAAkB,IAAX6c,EAAe,EAAIA,CAC5B,CASO,SAASusD,EAAqDzgG,GACnE,IAAMk0C,GAASl0C,EAASokG,oBAAsB,IAAIjuD,UAAW7rB,GAAMA,EAAE+M,WACrE,OAAkB,IAAX6c,EAAe,EAAIA,CAC5B,CA4DO,SAASssD,EAA+CxgG,GAC7D,IAAMk0C,EAAQl0C,EAAS26F,aAAa1pC,OAAO9a,UAAWroC,GAAMA,EAAEupB,WAC9D,OAAkB,IAAX6c,EAAe,EAAIA,CAC5B,CAyCO,SAAS2hB,EACd71D,EACA48H,GAEA,GAAI58H,EAASqd,UAAUriB,QAAUgF,EAASqd,SAASq/E,MACjD,OAAO18F,EAASqd,SAASriB,MAEzB,IAAM48F,EAAOglC,GAAW,IAAIlqH,IAC5B,OAAIklF,EAAKxpG,IAAI4R,GACJ,CAAC,GAEV43F,EAAK7jF,IAAI/T,GAOF,IANeA,EAASqd,UAAUq/E,OAAO18F,SAC5C61D,EAAgC71D,EAASqd,SAASq/E,MAAM18F,SAAU43F,GAClE53F,EAAS08F,OAAO18F,SACd61D,EAAgC71D,EAAS08F,MAAM18F,SAAU43F,GACzD,CAAC,KAEuB53F,EAASqd,UAAUriB,OAErD,CAEO,SAASkrG,EAA2ClmG,GACzD,IAAM+9H,EAAgB/9H,EAASqd,UAAUq/E,OAAO18F,SAC5CA,EAASqd,SAASq/E,MAAM18F,SAASqd,UAAUriB,OAAS,CAAC,EACrDgF,EAAS08F,OAAO18F,UACdA,EAAS08F,MAAM18F,SAASqd,UAAUriB,OAClC,CAAC,EACDgjI,EAAwBh+H,EAASqd,UAAUq/E,OAAO18F,SACpDA,EAASqd,SAASq/E,MAAM18F,SAASqd,UAAU84C,eAAiB,CAAC,EAC7Dn2D,EAAS08F,OAAO18F,UACdA,EAAS08F,MAAM18F,SAASqd,UAAU84C,eAClC,CAAC,EACDn7D,EAAQgF,EAASqd,UAAUriB,OAAS,CAAC,EACrCm7D,EAAgBn2D,EAASqd,UAAU84C,eAAiB,CAAC,EAC3D,OAAO,EAAAzgB,EAAAA,oBACL16C,EACA,CAACnQ,EAAK1B,IACkB,MAAtB40I,EAAclzI,MACb,EAAAq0B,EAAAA,WAAU6+G,EAAclzI,GAAM1B,IAC/B60I,EAAsBnzI,IAAMo6G,eAAiB9uC,EAActrE,IAAMo6G,aAEvE,CAiSO,SAAS82B,EAA6C3rD,EAAkBzzD,GAC7E,IAAAshH,EAA4B1rE,EAAAA,yBAAyB0pE,iBAAiB7rD,EAAUzzD,EAASiR,WAAjFriC,EAAI0yI,EAAJ1yI,KAAM80B,EAAS49G,EAAT59G,UAEd,MADkB,GAAG90B,IAAO80B,EAAY,MAAK,EAAAo6C,EAAAA,eAAcp6C,KAAe,IAE5E,C,2GCt0BO,SACL+jC,EACA85C,GAEA,IAAMljG,EAAuB,CAAC,EACxBm7D,EAAuC,CAAC,EAC9C,IAAK,IAAMhtE,KAASi7D,EAAQ,CAE1B,IAAA85E,EAA8B/0I,EAAMq4D,MAAM,KAAK1rD,IAAKw0B,GAAMA,EAAEzf,QAAOszH,GAAA,EAAA76H,EAAAtQ,SAAAkrI,EAAA,GAA9DE,EAAQD,EAAA,GAAEE,EAAWF,EAAA,IACtBjgC,GAAakgC,GAAaC,GAC5BngC,EAAQ,oBAAoB/0G,IAASA,GAEnCi1I,EAASE,SAAS,KAEpBnoE,EADAioE,EAAWA,EAASrzE,QAAQ,IAAK,KACP,CAAEk6C,cAAc,GAE1C9uC,EAAcioE,GAAY,CAAEn5B,cAAc,GAE5C,IACE,IAAMs5B,EAAWF,EAAYtgC,MAAM,YAC/B,EAAA41B,EAAAA,cAAa0K,GACbA,EAAYtgC,MAAM,MAChB,EAAA1zC,EAAAA,iBAAgB7O,WAAW6iF,KAC3B,EAAAj0E,EAAAA,sBAAqB5O,WAAW6iF,GAAc,GACpDrjI,EAAMojI,GAAYG,GAAY,CAChC,CAAE,MAAOh2I,GACP,IAAI21G,EAGF,MAAM31G,EAFN21G,EAAQ,oBAAoB/0G,IAASA,EAIzC,CACF,CACA,MAAO,CAAE6R,QAAOm7D,gBAClB,E,kBArCAvzC,EAAAh0B,EAAA,OACAsiB,EAAAtiB,EAAA,M,qHCqQO,SACL8J,EACAlN,EACAuyD,EACAphC,GAEA,IAAM86G,EAAY,IAAIllE,EAAAA,yBAAyB75D,EAAMikB,EAAU,UACzD46G,EAAOC,EAAAA,OAAsBp6H,MAAM1E,GAEzC,OADe++H,EAAU+G,mBAAmBjH,EAAKG,QAASlsI,EAAMuyD,EAElE,E,6SAm1BO,SACL66E,EACAj8G,GAEA,IAAA8hH,EAAqCC,EAAuC9F,EAAiBj8G,GAArF08E,EAAcolC,EAAdplC,eAAgB1X,EAAQ88C,EAAR98C,SACxB,GAAI0X,EAAe7gG,QAAS,CAC1B,IAAMmmI,GAAuB,EAAAC,EAAAA,qCAAoCvlC,GAEjE,IAAK,IAAMpxC,KADX42E,EAA6BF,EAAsBhiH,EAAUglE,GAC1Cg9C,GACjB,IAAK,IAAMjgH,KAAOupC,EAChB,IAAKvpC,EAAIlmB,QACP,MAAO,CACL6gG,eAAgB,CAAE7gG,SAAS,EAAOpB,MAAOsnB,EAAItnB,OAC7C0nI,kBAAmBr2I,MAAM+C,KAAKm2F,EAASo9C,WAKjD,CACA,MAAO,CAAE1lC,iBAAgBylC,kBAAmBr2I,MAAM+C,KAAKm2F,EAASo9C,WAClE,E,8mBAlkCO,SAAwC1lC,GAC7C,IAAIjiG,EACJ,IAAK,IAAM6wD,KAAQoxC,EACjB,IAAK,IAAM36E,KAAOupC,EACXvpC,EAAIlmB,UACPpB,EAAQsnB,EAAItnB,OAIlB,OAAOA,CACT,E,qTA/DAyjI,EAAAjsI,EAAA,OACAq9F,EAAAlzE,EAAAnqB,EAAA,QACA2iE,EAAA3iE,EAAA,OAeAm/D,EAAAn/D,EAAA,OACAozB,EAAApzB,EAAA,OACAg0B,EAAAh0B,EAAA,OACAs9C,EAAAt9C,EAAA,OACAswG,EAAAtwG,EAAA,OACAy8C,EAAAz8C,EAAA,OACAowI,EAAApwI,EAAA,OAEA+nE,EAAA/nE,EAAA,OAwCO,SAASqwI,EACdj/H,EACA2hF,EACAn+C,GAQA,GANgC,OAA5BxjC,EAASqd,UAAUlmB,MACJ6I,EAASuqG,cAAcn+F,KAAM+3F,GAAOA,EAAG5yE,KAAKnlB,KAAM86B,GAA4B,MAAtBA,EAAE29D,UAAUjF,WAEnF5/F,EAASqd,SAAW,IAAKrd,EAASqd,SAAUohC,QAAQ,EAAAygF,EAAAA,+CAGqC,MAAzFv9C,EAASw9C,kBAAkB37F,EAAQykB,KAAO,KAAKzkB,EAAQwrB,UAAY,KAAKhvD,EAASnV,KACnF,MAAMovI,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,0HACApwE,EAASsxF,OAAOlhB,SAChB,CAAEj5E,KAAM,yBAA0BsB,KAAM,CAAE5N,IAAKmV,EAASnV,OAG5D,IAAMw0I,EAAWr/H,EAAS00C,KAC1B,GAAgB,MAAZ2qF,GAAoBA,EAAS/2I,OAAS,EAAG,CAC3C,IAAMg3I,EAAe39C,EAAS49C,WAAWjsI,GAAG0M,EAASnV,KACrD,GAAoB,MAAhBy0I,KAAyB,EAAAjhH,EAAAA,qBAAoBihH,EAAah3B,SAAU+2B,GAAW,CACjF,IAAMG,EAAQx/H,EAASsxF,OAAO8W,SAAWpoG,EAASsxF,OAAOlhB,SACzD,MAAM6pD,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,iGAAiGpwE,EAASzU,uBAChG+zI,EAAa97F,QAAQykB,KAAO,UAAUq3E,EAAa97F,QAAQwrB,UAAY,cACnExrB,EAAQykB,aAAazkB,EAAQwrB,YAC3CwwE,EACA,CACEroI,KAAM,sBACNsB,KAAM,CAAE6vG,SAAU,KAAMtoG,SAAUA,EAASzU,KAAMlD,EAAGi3I,EAAa97F,QAASypB,EAAGzpB,IAGnF,CACAm+C,EAAS49C,WAAWjsI,GAAG0M,EAASnV,KAAO,CACrCy9G,SAAU+2B,EACV77F,UAEJ,CAEA,IAAMi8F,EAAez/H,EAASqd,SAC9B,GAAoB,MAAhBoiH,GAA8C,SAAtBA,EAAatoI,KAAiB,CACxD,IAAMuoI,EAAmB/9C,EAAS49C,WAAWliH,SAASrd,EAASnV,KAC/D,GACsB,MAApB60I,IACCntE,EAAAA,yBAAyBotE,gBAAgBF,EAAcC,EAAiBp3B,UACzE,CACA,IAAMk3B,EAAQx/H,EAASsxF,OAAO2W,eAAiBjoG,EAASsxF,OAAOlhB,SAC/D,MAAM6pD,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,uGAAuGpwE,EAASzU,uBACtGm0I,EAAiBl8F,QAAQykB,KAAO,UAAUy3E,EAAiBl8F,QAAQwrB,UAAY,cAC3ExrB,EAAQykB,aAAazkB,EAAQwrB,YAC3CwwE,EACA,CACEroI,KAAM,sBACNsB,KAAM,CAAE6vG,SAAU,WAAYtoG,SAAUA,EAASzU,KAAMlD,EAAGq3I,EAAiBl8F,QAASypB,EAAGzpB,IAG7F,CACAm+C,EAAS49C,WAAWliH,SAASrd,EAASnV,KAAO,CAC3Cy9G,SAAUm3B,EACVj8F,UAEJ,CAEA,IAAMo8F,EAAa5/H,EAAS28F,OAC5B,GAAkB,MAAdijC,EAAoB,CACtB,IAAMC,EAAiBl+C,EAAS49C,WAAW5iC,OAAO38F,EAASnV,KAC3D,GAAsB,MAAlBg1I,IAA2BttE,EAAAA,yBAAyButE,cAAcF,EAAYC,EAAev3B,UAAW,CAC1G,IAAMk3B,EAAQx/H,EAASsxF,OAAO4W,aAAeloG,EAASsxF,OAAOlhB,SAC7D,MAAM6pD,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,qGAAqGpwE,EAASzU,uBACpGs0I,EAAer8F,QAAQykB,KAAO,UAAU43E,EAAer8F,QAAQwrB,UAAY,cACvExrB,EAAQykB,aAAazkB,EAAQwrB,YAC3CwwE,EACA,CACEroI,KAAM,sBACNsB,KAAM,CAAE6vG,SAAU,SAAUtoG,SAAUA,EAASzU,KAAMlD,EAAGw3I,EAAer8F,QAASypB,EAAGzpB,IAGzF,CACAm+C,EAAS49C,WAAW5iC,OAAO38F,EAASnV,KAAO,CACzCy9G,SAAUs3B,EACVp8F,UAEJ,CAIA,GAHIxjC,EAASk9F,SACXvb,EAASub,QAAQnpF,IAAI/T,EAASnV,KAEL,MAAvBmV,EAASkxB,WAAoB,CAC/B,IAAM6uG,EAAStsI,KAAKC,UAAUsM,EAASkxB,YACjCspF,EAAK74B,EAAS49C,WAAW5hE,OAAO39D,EAASnV,KAC/C,GAAU,MAAN2vH,GAAc/mH,KAAKC,UAAU8mH,EAAGtpF,cAAgB6uG,EAClD,MAAM9F,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,4EAA4EpwE,EAASzU,uBAC3EivH,EAAGh3E,QAAQykB,KAAO,UAAUuyD,EAAGh3E,QAAQwrB,UAAY,cAC/CxrB,EAAQykB,aAAazkB,EAAQwrB,YAC3ChvD,EAASsxF,OAAO6W,aAAenoG,EAASsxF,OAAOlhB,SAC/C,CACEj5E,KAAM,sBACNsB,KAAM,CAAE6vG,SAAU,SAAUtoG,SAAUA,EAASzU,KAAMlD,EAAGmyH,EAAGh3E,QAASypB,EAAGzpB,KAI7Em+C,EAAS49C,WAAW5hE,OAAO39D,EAASnV,KAAO,CACzCqmC,WAAYlxB,EAASkxB,WACrBsS,UAEJ,CACAw8F,EACEr+C,EAASw9C,kBACTn/H,EAASnV,IACT24C,EAAQykB,KAAO,EACfzkB,EAAQwrB,UAAY,EACpBhvD,GAEFigI,EACEt+C,EAASu+C,kBACTlgI,EAASnV,IACT24C,EAAQykB,KAAO,EACfzkB,EAAQwrB,UAAY,EACpBhvD,GAEF2hF,EAASo9C,UAAUhrH,IAAI/T,EAASowE,SAClC,CAEO,SAAS+vD,EACdzhH,EACA8kB,EACA7mB,GAEA,IAAM46G,EAAOC,EAAAA,OAAsBp6H,MAAMshB,EAAI+zC,cAEvCt6D,EADY,IAAIo6D,EAAAA,yBAAyB7zC,EAAI+zC,aAAc91C,EAAU,SAAU6mB,GAC5Due,SAASw1E,EAAKG,SACvC,OAAIv/H,EAAOK,QAEF,CAAEA,SAAS,EAAMC,KADNN,EAAOM,KAAK,IAAI45D,KAAK,IAAIzkC,WAAa,IAGjDz1B,CAEX,CAEO,SAASioI,EACdxuE,EACAj1C,GAKA,IAAI28E,EAAW,EACT3X,EAAiC,CACrCu+C,kBAAmB,CAAC,EACpBf,kBAAmB,CAAC,EACpBJ,UAAW,IAAIrsH,IACfwqF,QAAS,IAAIxqF,IACb6sH,WAAY,CAAEliH,SAAU,CAAC,EAAGs/E,OAAQ,CAAC,EAAGh/B,OAAQ,CAAC,EAAGrqE,GAAI,CAAC,IAkC3D,MAAO,CAAE+lG,eAhCsCznC,EAAep8B,MAAM1/B,IAAI,CAACmyD,EAAMqN,IACtErN,EAAKoK,KAAKv8D,IAAI,CAAC4oB,EAAK66E,KACzB,IAAM/1D,EAAU,CACdykB,KAAMqN,EAAY,EAClBtG,UAAWuqC,EAAiB,EAC5B76E,IAAK46E,EAAW,GAEZnhG,EAASgoI,EACbzhH,EACA,CAAEupC,KAAMqN,EAAY,EAAGtG,UAAWuqC,EAAiB,EAAG76E,IAAK46E,EAAW,GACtE38E,GAGF,GADA28E,GAAY,EACRnhG,EAAOK,QAAS,CAClB,IAAMo1B,EAAYz1B,EAAOM,KACzB,IAAK,IAAMuH,KAAY4tB,EACrB,IACEqxG,EAAgCj/H,EAAU2hF,EAAUn+C,EACtD,CAAE,MAAOj7C,GACP,GAAIA,aAAa0xI,EAAAA,mBACf,MAAO,CAAEzhI,SAAS,EAAOpB,MAAO7O,GAEhC,MAAMA,CAEV,CAEF,MAAO,CAAEiQ,SAAS,EAAMC,KAAMm1B,EAChC,CACE,OAAOz1B,KAIYwpF,WAC3B,CAcO,SAAS+8C,EACd9F,EACAj8G,GAKA,IAAI28E,EAAW,EACT3X,EAAiC,CACrCu+C,kBAAmB,CAAC,EACpBf,kBAAmB,CAAC,EACpBJ,UAAW,IAAIrsH,IACfwqF,QAAS,IAAIxqF,IACb6sH,WAAY,CAAEliH,SAAU,CAAC,EAAGs/E,OAAQ,CAAC,EAAGh/B,OAAQ,CAAC,EAAGrqE,GAAI,CAAC,IAErDmkI,EAAY,IAAIllE,EAAAA,yBAAyBqmE,EAAiBj8G,EAAU,QACpE46G,EAAOC,EAAAA,OAAsBp6H,MAAMw7H,GACnCzgI,EAASs/H,EAAU11E,SAASw1E,EAAKG,SACvC,GAAIv/H,EAAOK,QAAS,CAClB,IACE,IAAK,IAAI88D,EAAY,EAAGA,EAAYn9D,EAAOM,KAAKnQ,OAAQgtE,GAAa,EAEnE,IADA,IAAMrN,EAAO9vD,EAAOM,KAAK68D,GAChBikC,EAAiB,EAAGA,EAAiBtxC,EAAKoK,KAAK/pE,OAAQixG,GAAkB,EAAG,CACnF,IACM3rE,EADMq6B,EAAKoK,KAAKknC,GACA3rE,UACtB,IAAK,IAAM5tB,KAAY4tB,EAErBqxG,EAAgCj/H,EAAU2hF,EAD1B,CAAE15B,KAAMqN,EAAY,EAAGtG,UAAWuqC,EAAiB,EAAG76E,IAAK46E,EAAW,IAGxFA,GAAY,CACd,CAEJ,CAAE,MAAO/wG,GACP,GAAIA,aAAa0xI,EAAAA,mBACf,MAAO,CAAE5gC,eAAgB,CAAE7gG,SAAS,EAAOpB,MAAO7O,GAAKo5F,YAEvD,MAAMp5F,CAEV,CACA,MAAO,CAAE8wG,eAAgBlhG,EAAQwpF,WACnC,CACE,MAAO,CAAE0X,eAAgBlhG,EAAQwpF,WAErC,CAEO,SAAS0+C,EACdhnC,EACA/jC,EACAikC,GAGA,IADA,IAAID,EAAW,EACNrwG,EAAI,EAAGA,EAAIowG,EAAe/wG,OAAQW,GAAK,EAE9C,IADA,IAAMg/D,EAAOoxC,EAAepwG,GACnBo9G,EAAI,EAAGA,EAAIp+C,EAAK3/D,OAAQ+9G,GAAK,EAAG,CACvC,GAAIp9G,IAAMqsE,GAAa+wC,IAAM9M,EAC3B,OAAOD,EAETA,GAAY,CACd,CAGJ,CAEO,SAASgnC,EACdtgI,EACAq5F,EACAE,EACA2mC,GAEA,IAAK,IAAMK,KAAcvgI,EAASmrG,QAAU,GAAI,CAC9C,IAAM4sB,EAAkBwI,EAAa,EACrC,GAA4E,MAAxEL,EAAkBlgI,EAASnV,OAAOktI,KAAmBx+B,GAAyB,CAChF,IAAM/1D,EAAU,CACdykB,KAAMs4E,EACNvxE,UAAWuqC,EAAiB,EAC5B76E,KACG2hH,EAAsDhnC,EAAgB0+B,EAAiBx+B,IACtF,GAAK,GAELinC,EAA4C,IAC7CxgI,EACH08F,MAAO18F,EAAS08F,MAAQ,IAAK18F,EAAS08F,YAAUhuG,EAChD2uB,SAAUrd,EAASqd,SACf,IAAKrd,EAASqd,SAAUq/E,MAAO18F,EAASqd,SAASq/E,MAAQ,IAAK18F,EAASqd,SAASq/E,YAAUhuG,QAC1FA,EACJiuG,OAAQ38F,EAAS28F,OACb,IAAK38F,EAAS28F,OAAQD,MAAO18F,EAAS28F,OAAOD,MAAQ,IAAK18F,EAAS28F,OAAOD,YAAUhuG,QACpFA,EACJy8G,OAAQ,GACR3nE,UACAi5D,UAAU,GAEZwjC,EACEC,EACAlgI,EAASnV,IACTktI,EACAx+B,EACAinC,GAEF,IAAM9hH,EAAM26E,EAAe0+B,KAAmBx+B,GAC1C76E,GAAKlmB,SACPkmB,EAAIjmB,KAAKvO,KAAKs2I,EAElB,CACF,CACF,CAWO,SAAS9G,EACdF,EACAC,GAEA,OAAKD,EAAIhgC,eAAiB,MAAQigC,EAAIjgC,eAAiB,IAC7CggC,EAAIhgC,eAAiB,IAAMigC,EAAIjgC,eAAiB,KAEpDggC,EAAIt8B,WAAcu8B,EAAIv8B,QACnBs8B,EAAIt8B,SAAW,EAAI,GAEpBs8B,EAAI/8B,SAAW,EAAI,IAAMg9B,EAAIh9B,SAAW,EAAI,EACtD,CAQA,SAASgkC,EACPzgI,EACA0gI,EACA/nI,EACA6mI,EACAmB,GAEA,GAAID,IAAqB1gI,EACvB,MAAMi6H,EAAAA,mBAAmBmF,UAAUp/H,EAASowE,SAAUz3E,EAAS6mI,EAAO,CAAEroI,KAAM,YAAasB,KAAM,CAAEkoI,YAEvG,CAEO,SAASC,EACd5gI,EACAq5F,EACA/jC,EACA34C,EACAglE,GAEA,GAAI3hF,EAAS08F,OAAS18F,EAASsxF,OAAOuvC,cAAe,CACnD,IAAMnkC,EAAQ18F,EAAS08F,MACjBokC,EAAoBC,EACxBpkH,EACA+/E,EAAMtsB,SACNipB,EACAqD,EAAMz0C,MAAQqN,EAAY,GAAK,EAC/BonC,EAAMh+E,KAER,GAAIoiH,EAAkBx4I,OAAS,EAC7B,MAAM2xI,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,sFACApwE,EAASsxF,OAAOuvC,cAChB,CAAE1pI,KAAM,mBAGZ,IAAMupI,EAAmBI,EAAkB,GAC3C,IAAKJ,EACH,MAAMzG,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,oBAAoBssB,EAAMtsB,qBAAqBssB,EAAMz0C,MAAQqN,EAAY,IAC1D,MAAbonC,EAAMh+E,IAAc,UAAUg+E,EAAMh+E,MAAQ,KAE9C1e,EAASsxF,OAAOuvC,cAChB,CACE1pI,KAAM,sBACNsB,KAAM,CAAE23E,SAAUssB,EAAMtsB,SAAUnoB,KAAMy0C,EAAMz0C,MAAQqN,EAAY,EAAG52C,IAAKg+E,EAAMh+E,OAWtF,GAPA+hH,EACEzgI,EACA0gI,EAAiB1gI,SACjB,+BACAA,EAASsxF,OAAOuvC,cAChB,QAE+C,MAA7CH,EAAiB1gI,SAAS08F,OAAOtsB,SACnC,MAAM6pD,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,gEACApwE,EAASsxF,OAAOuvC,cAChB,CAAE1pI,KAAM,eAAgBsB,KAAM,CAAEkoI,QAAS,UAG7C,IAAKD,EAAiB1gI,SAASokG,oBAAoB97G,QAAU,GAAK,EAChE,MAAM2xI,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,iBAAiBssB,EAAMtsB,qIACvBpwE,EAASsxF,OAAOuvC,cAChB,CAAE1pI,KAAM,gCAAiCsB,KAAM,CAAE23E,SAAUssB,EAAMtsB,YAGrE,GAC+C,MAA7CswD,EAAiB1gI,SAASqd,UAAUq/E,OACf,MAArB18F,EAASqd,WACRqjH,EAAiB1gI,SAASk9F,QAE3B,MAAM+8B,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,6HACApwE,EAASsxF,OAAOuvC,cAChB,CAAE1pI,KAAM,yBAA0BsB,KAAM,CAAEkoI,QAAS,cAGvD,GAC6C,MAA3CD,EAAiB1gI,SAAS28F,QAAQD,OACf,MAAnB18F,EAAS28F,SACR+jC,EAAiB1gI,SAASk9F,QAE3B,MAAM+8B,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,wHACApwE,EAASsxF,OAAOuvC,cAChB,CAAE1pI,KAAM,yBAA0BsB,KAAM,CAAEkoI,QAAS,YAGvD,GAA0C,MAAtCD,EAAiB1gI,SAASqd,UAAyC,MAArBrd,EAASqd,SAAkB,CAC3E,IAAM2jH,EAA4C,CAChD5wD,SAAUswD,EAAiB1gI,SAASowE,SACpCt0E,OAAQ,WAEJmlI,EAAmBP,EAAiB1gI,SAASqd,SACnD6jH,EAAwClhI,EAAU2hF,EAAWv+B,IACrC,MAAlBA,EAAM/lC,WACR+lC,EAAM/lC,SAAW,CACflmB,KAAM8pI,EAAiB9pI,KACvB6D,OAAO,EAAA46C,EAAAA,mBAAkBqrF,EAAiBjmI,OAC1Cm7D,eAAe,EAAAvgB,EAAAA,mBAAkBqrF,EAAiB9qE,eAClDumC,MAAOskC,KAIf,CACA,GAAwC,MAApCN,EAAiB1gI,SAAS28F,QAAqC,MAAnB38F,EAAS28F,OAAgB,CACvE,IAAMwkC,EAA0C,CAC9C/wD,SAAUswD,EAAiB1gI,SAASowE,SACpCt0E,OAAQ,WAEJslI,EAAiBV,EAAiB1gI,SAAS28F,OACjDukC,EAAwClhI,EAAU2hF,EAAWv+B,IACvC,MAAhBA,EAAMu5C,SACRv5C,EAAMu5C,OAAS,CACbxlG,KAAMiqI,EAAejqI,KACrBulG,MAAOykC,KAIf,CAEAnhI,EAAS08F,MAAM18F,SAAW0gI,EAAiB1gI,QAC7C,CACF,CAEA,SAASkhI,EACPlhI,EACA2hF,EACAl3D,GAEA,IAAMqtC,EAAQ6pB,EAASu+C,kBAAkBlgI,EAASnV,KAClD,GAAa,MAATitE,EAGJ,IAAK,IAAMupE,KAAW,EAAA1hH,EAAAA,kBAAiBm4C,GAAQ,CAC7C,IAAMwpE,EAAYxpE,EAAMupE,GACxB,IAAK,IAAME,KAAU,EAAA5hH,EAAAA,kBAAiB2hH,GACpC72G,EAAG62G,EAAUC,GAEjB,CACF,CAEO,SAASC,EAA4CxhI,GAC1D,IAAMuqG,GAAgB,EAAAk3B,EAAAA,sCAAqCzhI,GACrD2gG,GAAyB,EAAAy7B,EAAAA,8CAA6Cp8H,EAAUuqG,GACtFvqG,EAAS2gG,uBAAyBA,CACpC,CAEO,SAAS+gC,EACd1hI,EACAq5F,EACA/jC,EACAgkC,GAEA,GAA6B,MAAzBt5F,EAAS26F,cAAgE,IAAxC36F,EAAS26F,aAAa1pC,OAAO3oE,OAAc,CAC9E,IAAMs9G,EAAmB+7B,EACvBtoC,EACA/jC,EACAgkC,EACAt5F,EACCi2D,GAA0B,MAAnBA,EAAG0kC,cAETiL,GAAoBA,EAAiBjL,eACvC36F,EAAS26F,cAAe,EAAA/kD,EAAAA,mBAAkBgwD,EAAiBjL,cAE/D,CACF,CAaO,SAASinC,EACd5hI,EACAs1D,EACA4qE,EACAvjH,GAEA,GAC2B,MAAzB3c,EAAS26F,cAC+B,IAAxC36F,EAAS26F,aAAa1pC,OAAO3oE,QAC7B0X,EAAS26F,aAAa1pC,OAAO,GAAG9nE,OAAOikB,WAAW,OAClD,CACA,IACMjV,EAAS0pI,EADK7hI,EAAS26F,aAAa1pC,OAAO,GAAG9nE,MAAMkC,MAAM,GAAGwf,OACCyqD,EAAW4qE,EAAmBvjH,GAClG,GAAc,MAAVxkB,EAAgB,CAClB,IAAQwiG,EAA6CxiG,EAA7CwiG,aAAwB+lC,EAAqBvoI,EAA/B6H,SActB,GAbAygI,EACEzgI,EACA0gI,EACA,4CACA1gI,EAASsxF,OAAOlhB,SAChB,eA3BR,SAA6CuqB,GAC3C,OACwB,MAAtBA,EAAa+B,OACmB,IAA/B/B,EAAa1pC,OAAO3oE,UAAkBqyG,EAAa1pC,OAAO,GAAG9nE,OAAOikB,WAAW,MAEpF,CA8BU00H,CAAoCnnC,GACtC,MAAMs/B,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,4FACApwE,EAASsxF,OAAOlhB,SAChB,CAAEj5E,KAAM,eAAgBsB,KAAM,CAAEkoI,QAAS,iBAG7C3gI,EAAS26F,aAAe,CACtB1pC,OAAQ,KAAI,EAAArb,EAAAA,mBAAkB+kD,EAAa1pC,SAC3CyrC,MAAO,CAAEtsB,SAAUswD,EAAiBtwD,SAAUpwE,SAAU0gI,EAAkB5kI,OAAQ,YAEtF,CACF,CACF,CAYO,SAASimI,EACd/hI,EACA2hF,GAEIA,EAASub,QAAQ9uG,IAAI4R,EAASnV,OAChCmV,EAASk9F,SAAU,GAG6B,MAA9Cvb,EAAS49C,WAAWliH,SAASrd,EAASnV,OACfmV,EAASqd,WAEhCrd,EAASqd,SAAWskE,EAAS49C,WAAWliH,SAASrd,EAASnV,KAAKy9G,WAInB,MAA5C3mB,EAAS49C,WAAW5iC,OAAO38F,EAASnV,MAAiBmV,EAAS28F,SAChE38F,EAAS28F,OAAShb,EAAS49C,WAAW5iC,OAAO38F,EAASnV,KAAKy9G,UAGb,MAA5C3mB,EAAS49C,WAAW5hE,OAAO39D,EAASnV,OACtCmV,EAASkxB,WAAaywD,EAAS49C,WAAW5hE,OAAO39D,EAASnV,KAAKqmC,WAEnE,CAEO,SAAS8wG,EACd3oC,EACAr5F,EACA2c,EACAglE,GAEA,IAAMtkE,EAAWrd,EAASqd,SAC1B,GAAuB,WAAnBA,GAAUlmB,KAAmB,CAC/B,IAAMi5E,EAAW/yD,EAASq/E,OAAOtsB,SACjC,GAAI/yD,EAASq/E,OAAStsB,EAAU,CAC9B,IAAMvlF,GAAM,EAAAijE,EAAAA,yBAAwBsiB,EAAUzzD,EAASiR,WACjD4xG,EAAQx/H,EAASsxF,OAAO2W,eAAiBjoG,EAASsxF,OAAOlhB,SAC/D,GAAuC,MAAnCuR,EAASu+C,kBAAkBr1I,GAC7B,MAAMovI,EAAAA,mBAAmBmF,UAAUp/H,EAASowE,SAAU,oBAAoBA,IAAYovD,EAAO,CAC3FroI,KAAM,sBACNsB,KAAM,CAAE23E,cAGZ,IAAM6xD,EAAmBtgD,EAAS49C,WAAWliH,SAASxyB,GAChD24C,EAAUy+F,GAAkBz+F,QAC5By9F,EAAmBgB,GAAkB35B,SAC3C,IAAK24B,IAAqBz9F,EACxB,MAAMy2F,EAAAA,mBAAmBmF,UAAUp/H,EAASowE,SAAU,4CAA6CovD,EAAO,CACxGroI,KAAM,4BACNsB,KAAM,CAAEkoI,QAAS,cAKrB,GAAIM,IAAqB5jH,EACvB,MAAM48G,EAAAA,mBAAmBmF,UAAUp/H,EAASowE,SAAU,yCAA0CovD,EAAO,CACrGroI,KAAM,YACNsB,KAAM,CAAEkoI,QAAS,cAGrB,GAAwC,MAApCM,EAAiBvkC,OAAOtsB,SAAkB,CAG5C,IAAM8xD,GAAmB,EAAAp0E,EAAAA,yBAAwBmzE,EAAiBvkC,MAAMtsB,SAAUzzD,EAASiR,WAC3F,IAAK+zD,EAASub,QAAQ9uG,IAAI8zI,GACxB,MAAMjI,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,kDACAovD,EACA,CAAEroI,KAAM,eAAgBsB,KAAM,CAAEkoI,QAAS,aAG/C,CACA,GAA8B,WAA1BM,EAAiB9pI,KACnB,MAAM8iI,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,mDACAovD,EACA,CAAEroI,KAAM,uBAAwBsB,KAAM,CAAEkoI,QAAS,cAGrD,IAAM5C,EAAgBkD,EAAiBjmI,MACjCA,EAAQqiB,EAASriB,MACvB,IAAK,IAAMynD,KAAY,EAAA9iC,EAAAA,kBAAiBo+G,GAAgB,CACtD,IAAM50I,EAAQ40I,EAAct7E,GAC5B,GAAkB,MAAdznD,EAAMnQ,KAAgB,EAAAs3I,EAAAA,aAAYh5I,MAAW,EAAAg5I,EAAAA,aAAYnnI,EAAMynD,IACjE,MAAMw3E,EAAAA,mBAAmBmF,UAAUp/H,EAASowE,SAAU,gCAAgC3tB,IAAY+8E,EAAO,CACvGroI,KAAM,yBACNsB,KAAM,CAAEgqD,aAGd,CACA,IAAMq+E,EAAoBC,EACxBpkH,EACAyzD,EACAipB,EACA71D,EAAQykB,KACRzkB,EAAQwrB,WAEJ0xE,EAAmBI,EAAkB,IAAI9gI,SAC/C,GAC6B,MAA3B0gI,GAAkBhkC,QACY,MAA7BgkC,EAAiBrjH,UAAuD,MAAnCqjH,EAAiBrjH,SAASq/E,OAEhE,MAAMu9B,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,sBAAsBswD,EAAiBtwD,4CACvCovD,EACA,CAAEroI,KAAM,eAAgBsB,KAAM,CAAEkoI,QAAS,cAG7CtjH,EAASq/E,MAAM18F,SAAW0gI,CAC5B,CACF,CACF,CAEO,SAAS0B,EACdpiI,EACA2c,EACA6mB,GAEA,IAAMm5D,EAAS38F,EAAS28F,OACxB,GAAqB,WAAjBA,GAAQxlG,KAAmB,CAC7B,IAAQsnD,EAA4Bk+C,EAA5Bl+C,OAAQ4jF,EAAoB1lC,EAApB0lC,gBAChB,GAAI5jF,GAAU4jF,EAAiB,CAC7B,IAAMlhG,GAAe,EAAAmhG,EAAAA,oCAAmCtiI,EAAU2c,GAC5D3hB,GAAQ,EAAA66D,EAAAA,iCAAgC71D,GACxCuiI,EAAuB,IAAIxhC,EAAAA,aAC/BtiD,EACAzjD,EACA,CAAC,GACD,EAAA24G,EAAAA,oCAAmCnwE,EAAS7mB,IAC5C,EAAAikF,EAAAA,gCAA+BjkF,GAC/BA,EAASxc,MACT,CAAEghC,eAAc0d,KAAMliC,EAASxc,MAAO+wD,OAAQ,IAC9C,UAEF,IACEqxE,EAAqBnlI,OACvB,CAAE,MAAO7U,GACP,GAAIA,aAAao1D,EAAAA,wBAA0B0kF,EAAiB,CAC1D,IAAA1G,EAAeppE,EAAAA,yBAAyBrT,iBAAiBT,EAAQ4jF,GAA1DxkF,GAA0E,EAAAv6C,EAAAtQ,SAAA2oI,EAAA,GAAtE,GACX,MAAM,IAAI1B,EAAAA,mBACR1xI,EAAEoQ,QACFklD,EAAOt1D,EAAEs1D,KACTt1D,EAAEu1D,OACFukF,EAAgB72I,KAAOjD,EAAEiD,KACzB62I,EAAgB72I,KAAOjD,EAAEw1D,GACzBx1D,EAAE4rD,QAEN,CACE,MAAM5rD,CAEV,CACF,CACF,CACF,CAEO,SAASi6I,EACdnpC,EACAr5F,EACA2c,EACAglE,GAEA,IAAMgb,EAAS38F,EAAS28F,OACxB,GAAqB,WAAjBA,GAAQxlG,KAAmB,CAC7B,IAAMi5E,EAAWusB,EAAOD,OAAOtsB,SAC/B,GAAIusB,EAAOD,OAAStsB,EAAU,CAC5B,IAAMvlF,GAAM,EAAAijE,EAAAA,yBAAwBsiB,EAAUzzD,EAASiR,WACjD4xG,EAAQx/H,EAASsxF,OAAO4W,aAAeloG,EAASsxF,OAAOlhB,SAE7D,GAAuC,MAAnCuR,EAASu+C,kBAAkBr1I,GAC7B,MAAMovI,EAAAA,mBAAmBmF,UAAUp/H,EAASowE,SAAU,oBAAoBA,IAAYovD,EAAO,CAC3FroI,KAAM,sBACNsB,KAAM,CAAE23E,cAGZ,IAAM6xD,EAAmBtgD,EAAS49C,WAAW5iC,OAAO9xG,GAC9Cu2I,EAAiBa,GAAkB35B,SACnC9kE,EAAUy+F,GAAkBz+F,QAClC,IAAK49F,IAAmB59F,EACtB,MAAMy2F,EAAAA,mBAAmBmF,UAAUp/H,EAASowE,SAAU,0CAA2CovD,EAAO,CACtGroI,KAAM,4BACNsB,KAAM,CAAEkoI,QAAS,YAIrB,GAAIS,IAAmBzkC,EACrB,MAAMs9B,EAAAA,mBAAmBmF,UAAUp/H,EAASowE,SAAU,uCAAwCovD,EAAO,CACnGroI,KAAM,YACNsB,KAAM,CAAEkoI,QAAS,YAGrB,GAAsC,MAAlCS,EAAe1kC,OAAOtsB,SAAkB,CAE1C,IAAM8xD,GAAmB,EAAAp0E,EAAAA,yBAAwBszE,EAAe1kC,MAAMtsB,SAAUzzD,EAASiR,WACzF,IAAK+zD,EAASub,QAAQ9uG,IAAI8zI,GACxB,MAAMjI,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,gDACAovD,EACA,CACEroI,KAAM,eACNsB,KAAM,CAAEkoI,QAAS,WAIzB,CACA,GAA4B,WAAxBS,EAAejqI,KACjB,MAAM8iI,EAAAA,mBAAmBmF,UAAUp/H,EAASowE,SAAU,iDAAkDovD,EAAO,CAC7GroI,KAAM,uBACNsB,KAAM,CAAEkoI,QAAS,YAGrB,IAAMp+E,EAAY6+E,EAAenmI,MAAMsnD,WAAa,IAAI7vC,IACxD,GAAuB,IAAnB6vC,EAAU71C,KAAY,CAExB,GAAgB,MADC1M,EAASqd,SAExB,MAAM48G,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,0FACAovD,EACA,CAAEroI,KAAM,+BAGZ,IAAM6D,GAAQ,EAAA66D,EAAAA,iCAAgC71D,GAC9C,IAAK,IAAMyiD,KAAYF,EACrB,GAAuB,MAAnBvnD,EAAMynD,GACR,MAAMw3E,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,0BAA0B3tB,6CAC1B+8E,EACA,CAAEroI,KAAM,4BAA6BsB,KAAM,CAAEgqD,aAIrD,CACA,IAAMq+E,EAAoBC,EACxBpkH,EACAyzD,EACAipB,EACA71D,EAAQykB,KACRzkB,EAAQwrB,WAEJ0xE,EAAmBI,EAAkB,IAAI9gI,SAC/C,GAC6B,MAA3B0gI,GAAkBhkC,QACU,MAA3BgkC,EAAiB/jC,QAAmD,MAAjC+jC,EAAiB/jC,OAAOD,OAE5D,MAAMu9B,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,sBAAsBswD,EAAiBtwD,4CACvCovD,EACA,CAAEroI,KAAM,eAAgBsB,KAAM,CAAEkoI,QAAS,YAG7ChkC,EAAOD,MAAM18F,SAAW0gI,CAC1B,CACF,CACF,CAsBO,SAAS+B,EAAiCziI,GAG/C,IAFA,IAAM43F,EAAO,IAAIllF,IACbtO,EAA+CpE,EACjC,MAAXoE,IAAyC,MAApBA,EAAQiZ,UAA8C,MAA1BjZ,EAAQiZ,SAASq/E,QAAgB,CACvF,GAAI9E,EAAKxpG,IAAIgW,GACX,MAAM61H,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,+DACApwE,EAASsxF,OAAO2W,eAAiBjoG,EAASsxF,OAAOuvC,eAAiB7gI,EAASsxF,OAAOlhB,SAClF,CAAEj5E,KAAM,eAGZygG,EAAK7jF,IAAI3P,GACTA,EAAUA,EAAQiZ,UAAUq/E,OAAO18F,UAAYoE,EAAQs4F,OAAO18F,QAChE,CACF,CAQO,SAAS0iI,EAAoC1iI,GAClD,GAAgC,WAA5BA,EAASqd,UAAUlmB,MAA2E,OAAtD,EAAAmpG,EAAAA,0CAAyCtgG,GACnF,MAAMi6H,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,6FACApwE,EAASsxF,OAAO2W,eAAiBjoG,EAASsxF,OAAOlhB,SACjD,CAAEj5E,KAAM,sBAAuBsB,KAAM,CAAEkoI,QAAS,cAGpD,GAAuB,MAAnB3gI,EAAS28F,QAAsE,OAApD,EAAAyI,EAAAA,wCAAuCplG,GACpE,MAAMi6H,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,2FACApwE,EAASsxF,OAAO4W,aAAeloG,EAASsxF,OAAOlhB,SAC/C,CAAEj5E,KAAM,sBAAuBsB,KAAM,CAAEkoI,QAAS,WAGtD,CAEO,SAAS9B,EACdxlC,EACA18E,EACAglE,GAiCA,IAAK,IAAM15B,KA/BX06E,EACEtpC,EACA,CAAC/jC,EAAWikC,EAAgBD,EAAUE,EAAex5F,KACnD0hI,EAAkC1hI,EAAUq5F,EAAgB/jC,EAAWikC,GACvE+mC,EAA6BtgI,EAAUq5F,EAAgBE,EAAgB5X,EAASu+C,mBAChF6B,EAAsC/hI,EAAU2hF,GAChDihD,EAAuC5iI,EAAU2hF,KAIrDghD,EACEtpC,EACA,CAAC/jC,EAAWikC,EAAgBD,EAAUE,EAAex5F,KACnD4gI,EAA+B5gI,EAAUq5F,EAAgB/jC,EAAW34C,EAAUglE,GAC9EigD,EAAuC5hI,EAAUs1D,EAAWqsB,EAASu+C,kBAAmBvjH,GACxFqlH,EAAoC3oC,EAAgBr5F,EAAU2c,EAAUglE,GACxE6gD,EAAkCnpC,EAAgBr5F,EAAU2c,EAAUglE,GACtEygD,EAAmCpiI,EAAU2c,EAAU,CACrDsrC,KAAMqN,EAAY,EAClBtG,UAAWuqC,EAAiB,EAC5B76E,IAAK66E,EAAiB,MAO5BopC,EAAsCtpC,EAAgB,CAACwpC,EAAYC,EAAiBC,EAAWC,EAAQhjI,KACrGyiI,EAAiCziI,GACjC0iI,EAAoC1iI,KAEnBq5F,GACjB,IAAK,IAAM36E,KAAOupC,EACZvpC,EAAIlmB,SACNkmB,EAAIjmB,KAAK+6D,KAAKkmE,GAKpBiJ,EACEtpC,EACA,CAAC/jC,EAAWikC,EAAgBD,EAAUE,EAAex5F,KACnDwhI,EAA4CxhI,IAGlD,CAEO,SAAS4iI,EACd5iI,EACA2hF,GAEA,IAAIA,EAASub,QAAQ9uG,IAAI4R,EAASnV,KAAlC,CAGA,IAAM0vG,EAAav6F,EAASokG,mBAC5B,GAAkB,MAAd7J,GAAsBA,EAAWjyG,OAAS,GAC5C,IAAK,IAAMo7G,KAAanJ,EACtB,GAA8B,MAA1BmJ,EAAUviE,aACZ,MAAM84F,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,oBAAoBszB,EAAUn4G,OAC9ByU,EAASsxF,OAAOlhB,SAChB,CAAEj5E,KAAM,kBAAmBsB,KAAM,CAAElN,KAAMm4G,EAAUn4G,aAIpD,GAA6B,MAAzByU,EAASmhC,aAClB,MAAM84F,EAAAA,mBAAmBmF,UACvBp/H,EAASowE,SACT,oBAAoBpwE,EAASzU,OAC7ByU,EAASsxF,OAAOlhB,SAChB,CAAEj5E,KAAM,kBAAmBsB,KAAM,CAAElN,KAAMyU,EAASzU,OAlBtD,CAqBF,CAEO,SAASs2I,EACdoB,EACAC,EACAhD,EACAvjH,GAEA,IACI24C,EACAgkC,EAFE6pC,EAAeF,EAAYllC,MAAM,cAGvC,GAAoB,MAAhBolC,EAAsB,CACxB,IAAAC,EAA+BD,EAAa,GAAG3hF,MAAM,KAAI6hF,GAAA,EAAA//H,EAAAtQ,SAAAowI,EAAA,GAAlDE,EAAYD,EAAA,GAAEE,EAAMF,EAAA,GACb,MAAVE,GACFjuE,EAAYhE,SAASgyE,EAAc,IACnChuE,EAAYkC,MAAMlC,QAAa5mE,EAAY4mE,EAAY,EACvDgkC,EAAWhoC,SAASiyE,EAAQ,IAC5BjqC,EAAW9hC,MAAM8hC,QAAY5qG,EAAY4qG,EAAW,IAEpDA,EAAWhoC,SAASgyE,EAAc,IAClChqC,EAAW9hC,MAAM8hC,QAAY5qG,EAAY4qG,EAAW,EAExD,CACA2pC,EAAcA,EAAYl4E,QAAQ,aAAc,IAAIlgD,OACpD,IAAMhgB,GAAM,EAAAijE,EAAAA,yBAAwBm1E,EAAatmH,EAASiR,WACpD41G,GAAgB,EAAAhuF,EAAAA,oBAAmB0qF,EAAkBr1I,KAAOyqE,GAAa4tE,IAAqB,IAC9FO,EAAmBD,EAAc1tI,IAAKgY,GAAMA,EAAE6sF,cAC9CzmD,EAAQolD,GAAY,EAC1B,OAAImqC,EAAiBvvF,GACZ,CAAEymD,aAAc8oC,EAAiBvvF,GAAQl0C,SAAUwjI,EAActvF,SAExE,CAEJ,CAEO,SAAS6sF,EACdpkH,EACAyzD,EACAv0E,EACA6nI,EACAC,GAEA,IAAM7C,EAA0F,GAC1F74E,EAAOpsD,EAAQ6nI,EAAS,GAC9B,GAAY,MAARz7E,EACF,OAAO64E,EAIT,IAFA,IAAM8C,EAAyB,MAATD,EAAgB,CAAC17E,EAAK07E,EAAQ,IAAM17E,EACpD47E,GAAc,EAAA/1E,EAAAA,yBAAwBsiB,EAAUzzD,EAASiR,WACtD2rE,EAAiB,EAAGA,EAAiBqqC,EAAct7I,OAAQixG,GAAkB,EAAG,CACvF,IAAM76E,EAAMklH,EAAcrqC,GAC1B,GAAW,MAAP76E,GAAgBA,EAAIlmB,QAGxB,IAAK,IAAMwH,KAAY0e,EAAIjmB,MACN,EAAA2yG,EAAAA,gCAA+BprG,EAAU2c,KACzCknH,GACjB/C,EAAkB52I,KAAK,CACrB8V,WACAwjC,QAAS,CACPykB,KAAMy7E,EACN10E,UAAWuqC,EAAiB,EAC5B76E,IAAK,IAKf,CACA,OAAOoiH,CACT,CAwBO,SAASa,EACd9lI,EACAy5D,EACAgkC,EACAt5F,EACA8jI,GAEA,IACE,IAAI76I,EAAIqsE,EAAY,EAAGyuE,EAAcloI,EAAQ5S,KAAKqwG,GAClDrwG,GAAK,GAAoB,MAAf86I,EACV96I,GAAK,EAAG86I,EAAcloI,EAAQ5S,KAAKqwG,GAEnC,GAAIyqC,EAAYvrI,QAAS,CACvB,IAAMotG,EAAmBm+B,EAAYtrI,KAAKwuC,KAAMgvB,GAAOA,EAAGprE,MAAQmV,EAASnV,KAC3E,GAAwB,MAApB+6G,IAAqC,MAARk+B,GAAgBA,EAAKl+B,IACpD,OAAOA,CAEX,CAGJ,CAEO,SAASq6B,EACdroE,EACA53D,EACAs1D,EACAgkC,EACA0qC,GAEApsE,EAAK53D,GAAuB43D,EAAK53D,IAAwB,CAAC,EAC1D43D,EAAK53D,GAAqBs1D,GAAasC,EAAK53D,GAAqBs1D,IAAc,CAAC,EAChFsC,EAAK53D,GAAqBs1D,GAAWgkC,GAAY0qC,CACnD,CAEO,SAAShE,EACdpoE,EACA53D,EACAs1D,EACAgkC,EACA0qC,GAEApsE,EAAKtC,GAAasC,EAAKtC,IAAc,CAAC,EACtCsC,EAAKtC,GAAWgkC,GAAY1hC,EAAKtC,GAAWgkC,IAAa,CAAC,EAC1D1hC,EAAKtC,GAAWgkC,GAAUt5F,GAAYgkI,CACxC,CAEO,SAASrB,EACd9mI,EACA4uB,GASA,IADA,IAAI6uE,EAAW,EACNhkC,EAAY,EAAGA,EAAYz5D,EAAQvT,OAAQgtE,GAAa,EAE/D,IADA,IAAMrN,EAAOpsD,EAAQy5D,GACZikC,EAAiB,EAAGA,EAAiBtxC,EAAK3/D,OAAQixG,GAAkB,EAAG,CAC9E,IAAM76E,EAAMupC,EAAKsxC,GACjB,IACE,GAAI76E,GAAKlmB,QAEP,IADA,IAAMo1B,EAAYlP,EAAIjmB,KACb+gG,EAAgB,EAAGA,EAAgB5rE,EAAUtlC,OAAQkxG,GAAiB,EAC7E/uE,EAAG6qC,EAAWikC,EAAgBD,EAAUE,EAAe5rE,EAAU4rE,GAGvE,CAAE,MAAOjxG,GACP,KAAIA,aAAa0xI,EAAAA,oBAGf,MAAM1xI,EAFN0/D,EAAKsxC,GAAkB,CAAE/gG,SAAS,EAAOpB,MAAO7O,EAIpD,CACA+wG,GAAY,CACd,CAEJ,CA9jB+CnxG,EAAAA,mCAAG,CAAC,SAAU,WAAY,SAAU,QAgkB5E,IAAMm6G,EAAiCA,CAC5C1wC,EACAj1C,KAKA,IAAAsnH,EAAqC7D,EAAyCxuE,EAAgBj1C,GAAtF08E,EAAc4qC,EAAd5qC,eAAgB1X,EAAQsiD,EAARtiD,SAExB,OADAk9C,EAA6BxlC,EAAgB18E,EAAUglE,GAChD,CAAE0X,iBAAgBylC,kBAAmBr2I,MAAM+C,KAAKm2F,EAASo9C,aAChE52I,EAAAA,+BAAAm6G,EAEoCn6G,EAAAA,2BAAG,EAAAmmG,EAAAA,SAAQgU,EAAgC,CAC/E/T,QAAS,GACT3lC,QAASA,CAACvgE,EAAgC4kE,IAC/B,MAAL5kE,GAAkB,MAAL4kE,EACR5kE,IAAM4kE,EAEX,UAAW5kE,GAAK,UAAW4kE,GACf,EAAA13B,EAAAA,iCAAgCltC,EAAEmtC,UAClC,EAAAD,EAAAA,iCAAgC03B,EAAEz3B,OAGzCntC,IAAM4kE,G,0PC/tCnB3qC,EAAA1zB,EAAA,OACAE,EAAAF,EAAA,OACAisI,EAAAjsI,EAAA,OA0BAg0B,EAgB0D,SAAAr6B,GAAA,sBAAAuoB,QAAA,KAAA1oB,EAAA,IAAA0oB,QAAA,IAAAA,OAAA,iBAAAvoB,GAAA,GAAAA,GAAAA,EAAAG,WAAA,OAAAH,EAAA,IAAAQ,EAAAE,EAAAoE,EAAA,CAAAP,UAAA,KAAAkG,QAAAzK,GAAA,UAAAA,GAAA,iBAAAA,GAAA,mBAAAA,EAAA,OAAA8E,EAAA,GAAAtE,EAAAX,EAAA,IAAAW,EAAAqF,IAAA7F,GAAA,OAAAQ,EAAAsF,IAAA9F,GAAAQ,EAAAuF,IAAA/F,EAAA8E,EAAA,SAAA0jB,KAAAxoB,EAAA,YAAAwoB,GAAA,GAAAnlB,eAAAV,KAAA3C,EAAAwoB,MAAA9nB,GAAAF,EAAA4B,OAAAC,iBAAAD,OAAA0B,yBAAA9D,EAAAwoB,MAAA9nB,EAAAoF,KAAApF,EAAAqF,KAAAvF,EAAAsE,EAAA0jB,EAAA9nB,GAAAoE,EAAA0jB,GAAAxoB,EAAAwoB,IAAA,OAAA1jB,CAAA,EAAA9E,EAAA,CAhB1DyoB,CAAApiB,EAAA,QAAyCs1I,EAAAthH,EACzCuhH,EAAAv1I,EAAA,MACAswG,EAAAtwG,EAAA,OACAy8C,EAAAz8C,EAAA,OACAowI,EAAApwI,EAAA,OAGAw1I,EAAAx1I,EAAA,OACAm/D,EAAAn/D,EAAA,OACAgT,EAAAhT,EAAA,OACAozB,EAAApzB,EAAA,OACA+nE,EAAA/nE,EAAA,OAIAq9F,EAAAlzE,EAAAnqB,EAAA,QACAqiB,EAAAriB,EAAA,OAA0D,SAAA09C,EAAAxjD,EAAAC,EAAAR,GAAA,OAAAQ,GAAA,EAAAwjD,EAAAv5C,SAAAjK,IAAA,EAAAyjD,EAAAx5C,SAAAlK,EAAAmE,IAAAjD,QAAAC,UAAAlB,EAAAR,GAAA,MAAAgkD,EAAAv5C,SAAAlK,GAAAwC,aAAAvC,EAAAW,MAAAZ,EAAAP,GAAA,UAAA0E,IAAA,QAAAnE,GAAAoE,QAAA7C,UAAA8C,QAAAjC,KAAAlB,QAAAC,UAAAiD,QAAA,wBAAApE,GAAA,QAAAmE,EAAA,mBAAAnE,CAAA,SAoB7CmxI,EAAkB9xI,EAAAA,mBAAA,SAAAy1D,GA0B7B,SAAAq8E,EAAYthI,EAAiBklD,EAAcC,EAAgBtyD,EAAcuyD,EAAY5J,GAA+B,IAAA3+C,EAM3F,OAN2F,EAAArC,EAAAH,SAAA,KAAAinI,IAClHzkI,EAAA82C,EAAA,KAAA2tF,EAAA,CAAMthI,KACDklD,KAAOA,EACZroD,EAAKsoD,OAASA,EACdtoD,EAAKhK,KAAOA,EACZgK,EAAKuoD,GAAKA,EACVvoD,EAAK2+C,QAAUA,EAAQ3+C,CACzB,CAAC,SAAAo3C,EAAA55C,SAAAinI,EAAAr8E,IAAA,EAAA7qD,EAAAC,SAAAinI,EAAA,EAAApvI,IAAA,WAAA1B,MAED,WACE,OAAOK,KAAKmP,OACd,IAAC,EAAA9N,IAAA,YAAA1B,MA9BD,SACEinF,EACAz3E,EACA6mI,EACArrF,GAKA,OAAO,IAAI8lF,EACT,GAAG7pD,EAAW,GAAGA,MAAe,KAAKz3E,MAAY6mI,EAAM3hF,QAAQ2hF,EAAM1hF,UACrE0hF,EAAM3hF,KACN2hF,EAAM1hF,OACN0hF,EAAMh0I,KACNg0I,EAAMzhF,GACM,MAAZqyB,EAAmB,IAAKj8B,EAASkwF,QAASj0D,GAAaj8B,EAE3D,IAAC,CAxB4B,EAwB5B,EAAAtH,EAAA75C,SAxBqCgrD,cA2CxC,SAASC,EAAYC,GACnB,IAAMC,EAAMD,EAAKE,SACXjmD,EAAuB,GAC7B,IAAKgmD,EAAIE,aACP,OAAOlmD,EAET,GACEA,EAAOjO,KAAKi0D,EAAID,YACTC,EAAIG,eACb,OAAOnmD,CACT,CAEA,SAASomD,EAAOhzD,GACd,MAAM,IAAI0uI,EAAmB,8BAA8B1uI,8BAAkC,EAAG,EAAG,EAAG,EAAG,CACvG4L,KAAM,WACNsB,KAAM,CAAEylD,KAAM3yD,IAElB,EAUqCpD,EAAAA,yBAAA,WAUnC,SAAAoqE,EAAY9T,EAAgB9hC,EAAqB9iB,EAAqC2pC,IAA8B,EAAArwC,EAAAH,SAAA,KAAAu/D,GAAA,KAL5G/8B,MAAyC,GAAE,KAC3CgkE,cAAwB,EAAC,KAEzB8qC,mBAAiC,GAGvC96I,KAAKi1D,OAASA,EACdj1D,KAAKmzB,SAAWA,EAChBnzB,KAAKg6C,QAAUA,GAAW,CAAE9kB,IAAK,EAAGupC,KAAM,EAAG+G,UAAW,GACxDxlE,KAAKqQ,KAAOA,CACd,CAAC,SAAA9G,EAAAC,SAAAu/D,EAAA,EAAA1nE,IAAA,WAAA1B,MAED,SAAiB+0D,GACf,OAAO10D,KAAK+6I,aAAarmF,GAAM6M,QAAQ,MAAO,OAAOA,QAAQ,MAAO,MACtE,GAAC,CAAAlgE,IAAA,eAAA1B,MAED,SAAqB+0D,GACnB,OAAO10D,KAAKi1D,OAAOpzD,MAAM6yD,EAAK1yD,KAAM0yD,EAAKH,GAC3C,GAAC,CAAAlzD,IAAA,WAAA1B,MAkCD,SAAiB+0D,GACf,IAAAe,EAAuBz1D,KAAK01D,iBAAiBhB,GAAKiB,GAAA,EAAA77C,EAAAtQ,SAAAisD,EAAA,GAClD,MAAO,CAAEpB,KADEsB,EAAA,GACIrB,OADIqB,EAAA,GACI3zD,KAAM0yD,EAAK1yD,KAAMuyD,GAAIG,EAAKH,GACnD,GAAC,CAAAlzD,IAAA,QAAA1B,MAED,SAAcwP,EAAiBulD,EAAkB/J,GAC/C,IAAMqrF,EAAQh2I,KAAKg7I,SAAStmF,GAC5B,MAAM+7E,EAAmBmF,eAAU1wI,EAAWiK,EAAS6mI,EAAOrrF,EAChE,GAAC,CAAAtpD,IAAA,mBAAA1B,MAeD,SAAyB+0D,GACvB,OAAOqU,EAAyBrT,iBAAiB11D,KAAKi1D,OAAQP,EAChE,GAAC,CAAArzD,IAAA,QAAA1B,MAED,SAAau4D,GACX,IAAMtD,EAASsD,EAAKtD,SACpB,GACMA,EAAOF,KAAK/mD,KAAK2sD,SACnBt6D,KAAK4N,MAAM,eAAgBgnD,EAAOF,KAAM,CAAE/mD,KAAM,gBAE3CinD,EAAOjzD,OAClB,GAAC,CAAAN,IAAA,gBAAA1B,MAED,SAAsBs7I,GACpB,IAAAC,EAAiCD,EAASjjF,MAAM,IAAK,GAAEmjF,GAAA,EAAArhI,EAAAtQ,SAAA0xI,EAAA,GAAlDE,EAAeD,EAAA,GAAEE,EAAOF,EAAA,GAC7B,OAAKC,GAGAC,IACHA,EAAUD,EACVA,EAAkB,KAEb,CACL7+E,KAAMuL,SAASuzE,EAAS,IACxBj/E,aAAc0L,SAASszE,EAAiB,MARjC,CAAEh/E,aAAc,EAAGG,KAAM,EAUpC,GAAC,CAAAl7D,IAAA,cAAA1B,MAED,SAAoBs7I,GAClB,GAAKA,EAAL,CAGA,IAAAK,EAAuCL,EAASjjF,MAAM,IAAK,GAAEujF,GAAA,EAAAzhI,EAAAtQ,SAAA8xI,EAAA,GAAtDF,EAAeG,EAAA,GAEhBC,EAF6BD,EAAA,GAENvjF,MAAM,IAAK,GACpCyjF,EAAgCD,EAAS,GACzCE,EAAgCF,EAAS,GACxCE,IACHA,EAAYD,EACZA,OAAYv2I,GAEd,IAAI05F,GAAU,EAKd,OAJI88C,EAAU5G,SAAS,OACrBl2C,GAAU,EACV88C,EAAUn6E,QAAQ,MAAO,KAEpB,CACLnF,aAAc0L,SAASszE,EAAiB,IACxChlC,OAAqB,MAAbqlC,EAAoB3zE,SAAS2zE,EAAW,SAAMv2I,EACtDmxG,OAAQvuC,SAAS4zE,EAAW,IAC5B98C,QAASA,EACT2b,cAAe6gC,EAAgBtG,SAAS,KApB1C,CAsBF,GAAC,CAAAzzI,IAAA,YAAA1B,MAED,SAAkBu4D,GAChB,GAAIA,GAAMvqD,KAAK5L,OAAS45I,EAAAA,gBAAgBC,gBAAkB1jF,GAAMvqD,KAAK5L,OAAS45I,EAAAA,gBAAgBE,OAAQ,CACpG,IAAMl8I,EAAQK,KAAKw1D,SAAS0C,GAAMqJ,QAAQ,IAAK,IACzClM,GAAgC,IAAzB11D,EAAMwD,QAAQ,MAAe,KAAO,KACjD,OAAOu3I,EAAEllH,aAAaw8B,WAAWryD,GAAQ01D,EAC3C,CAGF,GAAC,CAAAh0D,IAAA,oBAAA1B,MAED,SAA0Bu4D,GACxB,GAAIA,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgBG,kBAAmB,CACxD,IACMb,EADe/iF,EAAKzD,YAAYknF,EAAAA,gBAAgBI,eACxBzvI,IAAK0vI,GAAgBh8I,KAAKw1D,SAASwmF,IAAcxvI,KAAK,IACpFyvI,EAA+Bj8I,KAAKk8I,cAAcjB,GAA1C7+E,EAAY6/E,EAAZ7/E,aAAcG,EAAI0/E,EAAJ1/E,KAChB4/E,EAAiBjkF,EAAKlB,SAAS2kF,EAAAA,gBAAgB7lF,YAC/CsmF,EAAalkF,EAAKlB,SAAS2kF,EAAAA,gBAAgBE,QAC3Cp3E,EACc,MAAlB03E,OAAyBj3I,EAAY8sD,WAAWhyD,KAAKw1D,SAAS2mF,GAAgB56E,QAAQ,IAAK,KACvFnsC,EAASp1B,KAAK04D,UAAU0jF,GAC9B,OAAI33E,EACK,CACL92D,KAAM,SACN4uD,OACAH,eACAqI,cAGK,CACL92D,KAAM,SACN4uD,OACAH,eACAhnC,OAAQA,EAGd,CACE2/B,EAAO4mF,EAAAA,gBAAgBU,gBAE3B,GAAC,CAAAh7I,IAAA,cAAA1B,MAYD,SAAoBu4D,GAClB,GAAIA,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgBW,YAAa,CAClD,IACMrB,EADe/iF,EAAKzD,YAAYknF,EAAAA,gBAAgBY,SACxBjwI,IAAK0vI,GAAgBh8I,KAAKw1D,SAASwmF,IAAcxvI,KAAK,IAC9E6uG,EAAWr7G,KAAKw8I,YAAYvB,GAC5BwB,EAAUvkF,EAAKlB,SAAS2kF,EAAAA,gBAAgBe,KACxCC,EAAYzkF,EAAKlB,SAAS2kF,EAAAA,gBAAgBiB,OAC1CC,EAAe3kF,EAAKlB,SAAS2kF,EAAAA,gBAAgBmB,UAC7CC,EAAW7kF,EAAKlB,SAAS2kF,EAAAA,gBAAgBqB,MACzCb,EAAiBjkF,EAAKlB,SAAS2kF,EAAAA,gBAAgBsB,oBAC/Cb,EAAalkF,EAAKlB,SAAS2kF,EAAAA,gBAAgBC,gBAC3CsB,EAAYhlF,EAAKlB,SAAS2kF,EAAAA,gBAAgBwB,UAE1Cn+C,EACa,MAFG9mC,EAAKlB,SAAS2kF,EAAAA,gBAAgByB,YAGnC,MAAdhB,IAAkE,IAA5Cp8I,KAAKw1D,SAAS4mF,GAAYj5I,QAAQ,MACtC,MAAlBg5I,IAA0E,IAAhDn8I,KAAKw1D,SAAS2mF,GAAgBh5I,QAAQ,KAC7D47F,EAAoB,MAAX09C,OAAkBv3I,GAAqD,IAAzClF,KAAKw1D,SAASinF,GAASt5I,QAAQ,KACxE07F,EAAiB,MAAX49C,OAAkBv3I,EAAY8sD,WAAWhyD,KAAKw1D,SAASinF,GAASl7E,QAAQ,IAAK,IAAIA,QAAQ,IAAK,KAC7F,MAAPs9B,GAAe7wB,MAAM6wB,KACvBA,OAAM35F,GAER,IACIugC,EACAy5D,EAFA7uD,EAAqB,MAAbssG,OAAoBz3I,EAAY4iE,SAAS9nE,KAAKw1D,SAASmnF,GAAWp7E,QAAQ,IAAK,IAAK,IAGhG,GAAoB,MAAhBs7E,EAAsB,CAExB,IAAAQ,EAA4Br9I,KAAKw1D,SAASqnF,GAAc7kF,MAAM,KAAIslF,GAAA,EAAAxjI,EAAAtQ,SAAA6zI,EAAA,GAA3DE,EAAOD,EAAA,GAAEE,EAAQF,EAAA,GACxBp+C,GAA+C,IAA1Bq+C,EAAQp6I,QAAQ,WAAqB+B,EAC1DugC,EAAWqiC,SAASy1E,EAAQh8E,QAAQ,IAAK,IAAIA,QAAQ,IAAK,IAAK,IAE/DlxB,EAAqB,MAAbmtG,OAAmBt4I,EAAY4iE,SAAS01E,EAASj8E,QAAQ,IAAK,IAAK,GAC7E,CACA,IAAMg1C,EAAmB,MAAZwmC,QAA0B73I,EACjCu/D,EACc,MAAlB03E,OAAyBj3I,EAAY8sD,WAAWhyD,KAAKw1D,SAAS2mF,GAAgB56E,QAAQ,QAAS,KAC3FnsC,EAASp1B,KAAK04D,UAAU0jF,GACxB7gI,EAAQ2hI,EACVzoF,EAAYyoF,GACT5wI,IAAKtN,GAAMgB,KAAKw1D,SAASx2D,IACzBwN,KAAK,UACRtH,EAIJ,OAHIg4I,GAAa3hI,GAASA,EAAMzc,OAAS,GACvCkB,KAAK4N,MAAM,qCAAsCsvI,EAAW,CAAEvvI,KAAM,eAAgBsB,KAAM,CAAEgsD,IAAK,KAE5F,CACLogD,WACAhrE,QACA5K,WACAy5D,qBACAqX,OACAxX,SACAF,MACAzpE,SACAqvC,aACAlpD,QACAyjF,YAEJ,CACEjqC,EAAO4mF,EAAAA,gBAAgBU,gBAE3B,GAAC,CAAAh7I,IAAA,aAAA1B,MAED,SAAmBu4D,GACjB,GAAIA,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgB8B,iBAAkB,CACvD,IAAMC,EAAYxlF,EAAKlB,SAAS2kF,EAAAA,gBAAgBgC,oBAChD,GAAiB,MAAbD,EACF,MAAM19I,KAAK4N,MAAM,sCAAuCsqD,EAAM,CAC5DvqD,KAAM,uBACNsB,KAAM,CAAE6vG,SAAU,QAGtB,IAAM8+B,EAAaF,EAAU1mF,SAAS2kF,EAAAA,gBAAgBkC,cACpC,MAAdD,GACF7oF,EAAO4mF,EAAAA,gBAAgBkC,cAEzB,IAAMC,EAAS99I,KAAKw1D,SAASooF,IACK,IAA9B,CAAC,QAAQz6I,QAAQ26I,IACnB99I,KAAK4N,MAAM,8BAA8BkwI,KAAWF,EAAY,CAC9DjwI,KAAM,gBACNsB,KAAM,CAAElN,KAAM+7I,KAGlB,IAAMljF,EAAS8iF,EAAUjpF,YAAYknF,EAAAA,gBAAgBoC,kBAAkBzxI,IAAK0xI,GAAYh+I,KAAKw1D,SAASwoF,IAMtG,MALe,SAAXF,GACoB,IAAlBljF,EAAO97D,QACTkB,KAAK4N,MAAM,mDAAoDgwI,EAAY,CAAEjwI,KAAM,gBAGhFitD,EAAOtuD,IAAKhN,GAAMwoE,SAASxoE,EAAG,KAAKsD,OAAQtD,IAAO0uE,MAAM1uE,GACjE,CACEy1D,EAAO4mF,EAAAA,gBAAgB8B,iBAE3B,GAAC,CAAAp8I,IAAA,iBAAA1B,MAED,SAAuBu4D,EAAkBvgB,GACvC,GAAIugB,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgB8B,iBAAkB,CACvD,IAAMC,EAAYxlF,EAAKlB,SAAS2kF,EAAAA,gBAAgBgC,oBAChD,GAAiB,MAAbD,EACF,MAAM19I,KAAK4N,MAAM,0CAA2CsqD,EAAM,CAChEvqD,KAAM,uBACNsB,KAAM,CAAE6vG,SAAU,YAGtB,IAAM8+B,EAAaF,EAAU1mF,SAAS2kF,EAAAA,gBAAgBkC,cACpC,MAAdD,GACF7oF,EAAO4mF,EAAAA,gBAAgBkC,cAEzB,IAEI5oF,EACAjrD,EACAyH,EACAonI,EALEiF,EAAS99I,KAAKw1D,SAASooF,GACvBhjF,EAAS8iF,EAAUjpF,YAAYknF,EAAAA,gBAAgBoC,kBAAkBzxI,IAAK0xI,GAAYh+I,KAAKw1D,SAASwoF,IAKtG,GAAe,WAAXF,EAAqB,CAEvB7oF,GADA4jF,EAAkB6E,EAAU1mF,SAAS2kF,EAAAA,gBAAgBsC,mBAAgB/4I,GAC1ClF,KAAK+6I,aAAalC,QAAmB3zI,EAC5D01D,EAAO97D,OAAS,GAClBkB,KAAK4N,MAAM,wEAAyEgwI,EAAY,CAC9FjwI,KAAM,4BAGV,IAAMuwI,EAAuBR,EAC1B1mF,SAAS2kF,EAAAA,gBAAgBwC,mBACxBnnF,SAAS2kF,EAAAA,gBAAgByC,eACzBpnF,SAAS2kF,EAAAA,gBAAgB0C,cAuB7B,OAtBAr0I,EAAOk0I,EAAuBl+I,KAAKw1D,SAAS0oF,QAAwBh5I,EAChE+vD,IAYFxjD,EAAO,CAAEsnD,UAXoB,IAAIw+C,EAAAA,aAC/BtiD,EACA,CAAC,EACD,CAAC,GACD,EAAAk1D,EAAAA,oCAAmCnqH,KAAKg6C,QAASh6C,KAAKmzB,WACtD,EAAAikF,EAAAA,gCAA+Bp3G,KAAKmzB,UACpCnzB,KAAKmzB,SAASxc,MACd,CAAEghC,eAAc0d,KAAMr1D,KAAKmzB,SAASxc,MAAO+wD,OAAQ,IACnD,UAEqC42E,yBAGpCrpF,GAAWjrD,GACdhK,KAAK4N,MACH,6FACA8vI,EACA,CAAE/vI,KAAM,sBAAuBsB,KAAM,CAAEkoI,QAAS,YAG7C,CACLxpI,KAAM,SACNsnD,SACA4jF,kBACApnI,OACAyhG,MAAOlpG,EAAO,CAAE48E,SAAU58E,EAAMsI,OAAQ,iBAAepN,EAE3D,CACElF,KAAK4N,MAAM,gDAAgDkwI,KAAWF,EAAY,CAChFjwI,KAAM,gBACNsB,KAAM,CAAElN,KAAM+7I,IAGpB,MACE/oF,EAAO4mF,EAAAA,gBAAgB8B,iBAE3B,GAAC,CAAAp8I,IAAA,mBAAA1B,MAED,SAAyBm+I,EAAgBljF,EAAkBgjF,EAAwBF,GAOjF,IAN+D,IAA3D,CAAC,KAAM,MAAO,KAAM,SAAU,QAAQv6I,QAAQ26I,IAChD99I,KAAK4N,MAAM,yCAAyCkwI,KAAWF,EAAY,CACzEjwI,KAAM,qBACNsB,KAAM,CAAElN,KAAM+7I,KAGH,OAAXA,EACEljF,EAAO97D,OAAS,EAClBkB,KAAK4N,MAAM,mDAAoD8vI,EAAW,CACxE/vI,KAAM,mBACNsB,KAAM,CAAEmF,GAAI,KAAM6mD,IAAK,MAEhBL,EAAO,IAAOA,EAAO,GAAGk6E,SAAS,OAAUl6E,EAAO,GAAGk6E,SAAS,OAAUl6E,EAAO,GAAGk6E,SAAS,KAM9E,MAAbl6E,EAAO,IAAcoT,MAAMlG,SAASlN,EAAO,GAAI,KACxD56D,KAAK4N,MAAM,sEAAuE8vI,EAAW,CAC3F/vI,KAAM,sBACNsB,KAAM,CAAEmF,GAAI,KAAMs2C,MAAO,EAAGwQ,SAAU,YAElB,MAAbN,EAAO,IAAcoT,MAAMlG,SAASlN,EAAO,GAAI,KACxD56D,KAAK4N,MACH,oGACA8vI,EACA,CAAE/vI,KAAM,sBAAuBsB,KAAM,CAAEmF,GAAI,KAAMs2C,MAAO,EAAGwQ,SAAU,YAG1D,MAAbN,EAAO,IACNA,EAAO,GAAGk6E,SAAS,OACnBl6E,EAAO,GAAGk6E,SAAS,OACnBl6E,EAAO,GAAGk6E,SAAS,KAOE,MAAbl6E,EAAO,IAAcoT,MAAMlG,SAASlN,EAAO,GAAI,KACxD56D,KAAK4N,MAAM,6EAA8E8vI,EAAW,CAClG/vI,KAAM,sBACNsB,KAAM,CAAEmF,GAAI,KAAMs2C,MAAO,EAAGwQ,SAAU,YAElB,MAAbN,EAAO,IAAcoT,MAAMlG,SAASlN,EAAO,GAAI,MACxD56D,KAAK4N,MACH,gGACA8vI,EACA,CAAE/vI,KAAM,sBAAuBsB,KAAM,CAAEmF,GAAI,KAAMs2C,MAAO,EAAGwQ,SAAU,YAdvEl7D,KAAK4N,MACH,iIACA8vI,EACA,CAAE/vI,KAAM,sBAAuBsB,KAAM,CAAEmF,GAAI,KAAMs2C,MAAO,EAAGwQ,SAAU,wBAzBvEl7D,KAAK4N,MACH,iIACA8vI,EACA,CAAE/vI,KAAM,sBAAuBsB,KAAM,CAAEmF,GAAI,KAAMs2C,MAAO,EAAGwQ,SAAU,6BAoCpE,GAAe,QAAX4iF,EACLljF,EAAO97D,OAAS,EAClBkB,KAAK4N,MAAM,sDAAuD8vI,EAAW,CAC3E/vI,KAAM,mBACNsB,KAAM,CAAEmF,GAAI,MAAO6mD,IAAK,KAEJ,MAAbL,EAAO,IAAcoT,MAAMlG,SAASlN,EAAO,GAAI,KACxD56D,KAAK4N,MAAM,mEAAoE8vI,EAAW,CACxF/vI,KAAM,sBACNsB,KAAM,CAAEmF,GAAI,MAAOs2C,MAAO,EAAGwQ,SAAU,YAG5B,MAAbN,EAAO,KACLA,EAAO,GAAGk6E,SAAS,OAAUl6E,EAAO,GAAGk6E,SAAS,OAAUl6E,EAAO,GAAGk6E,SAAS,OAE/E90I,KAAK4N,MACH,kIACA8vI,EACA,CAAE/vI,KAAM,sBAAuBsB,KAAM,CAAEmF,GAAI,MAAOs2C,MAAO,EAAGwQ,SAAU,6BAGrE,GAAe,OAAX4iF,EACa,IAAlBljF,EAAO97D,OACTkB,KAAK4N,MAAM,kDAAmD8vI,EAAW,CACvE/vI,KAAM,mBACNsB,KAAM,CAAEmF,GAAI,KAAM6mD,IAAK,KAGZ,MAAbL,EAAO,KACLA,EAAO,GAAGk6E,SAAS,OAAUl6E,EAAO,GAAGk6E,SAAS,OAAUl6E,EAAO,GAAGk6E,SAAS,MAOzD,MAAbl6E,EAAO,IAAcoT,MAAMlG,SAASlN,EAAO,GAAI,KACxD56D,KAAK4N,MAAM,+EAAgF8vI,EAAW,CACpG/vI,KAAM,sBACNsB,KAAM,CAAEmF,GAAI,KAAMs2C,MAAO,EAAGwQ,SAAU,aAElB,MAAbN,EAAO,IAAcoT,MAAMlG,SAASlN,EAAO,GAAI,OACxD56D,KAAK4N,MAAM,gFAAiF8vI,EAAW,CACrG/vI,KAAM,sBACNsB,KAAM,CAAEmF,GAAI,KAAMs2C,MAAO,EAAGwQ,SAAU,YAbxCl7D,KAAK4N,MACH,iIACA8vI,EACA,CAAE/vI,KAAM,sBAAuBsB,KAAM,CAAEmF,GAAI,KAAMs2C,MAAO,EAAGwQ,SAAU,6BAapE,GAAe,WAAX4iF,EAAqB,CAC9B,IAAMjF,EAAkB6E,EAAU1mF,SAAS2kF,EAAAA,gBAAgBsC,aACrDhpF,EAAS4jF,EAAkB74I,KAAK+6I,aAAalC,QAAmB3zI,EAChEg5I,EAAuBR,EAC1B1mF,SAAS2kF,EAAAA,gBAAgBwC,mBACxBnnF,SAAS2kF,EAAAA,gBAAgByC,eACzBpnF,SAAS2kF,EAAAA,gBAAgB0C,cACvBr0I,EAAOk0I,EAAuBl+I,KAAKw1D,SAAS0oF,QAAwBh5I,EACrE+vD,GAAWjrD,GACdhK,KAAK4N,MACH,kGACA8vI,EACA,CAAE/vI,KAAM,sBAAuBsB,KAAM,CAAEkoI,QAAS,aAGtD,CACF,GAAC,CAAA91I,IAAA,mBAAA1B,MAED,SAAyBu4D,EAAkBvgB,GACzC,IAAMhpC,EAAS3O,KAAKu+I,qBAAqBrmF,EAAMvgB,GAC/C,GAAIhpC,EAAOK,QACT,OAAOL,EAAOM,KAEd,MAAMjP,KAAK4N,MAAMe,EAAOf,MAAMuB,QAAS+oD,EAAMvpD,EAAOf,MAAM+8C,QAE9D,GAAC,CAAAtpD,IAAA,uBAAA1B,MAED,SACEu4D,EACAvgB,GAEA,GAAIugB,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgB8B,iBAAkB,CACvD,IAAMC,EAAYxlF,EAAKlB,SAAS2kF,EAAAA,gBAAgBgC,oBAChD,GAAiB,MAAbD,EAAmB,CAErB,GAAY,MADCxlF,EAAKlB,SAAS2kF,EAAAA,gBAAgB6C,MAEzC,OAAO,EAAAC,EAAAA,sCAAqC,OAAQ,IAEpD,MAAMz+I,KAAK4N,MAAM,4CAA6CsqD,EAAM,CAClEvqD,KAAM,uBACNsB,KAAM,CAAE6vG,SAAU,aAGxB,CACA,IAAM8+B,EAAaF,EAAU1mF,SAAS2kF,EAAAA,gBAAgBkC,cACpC,MAAdD,GACF7oF,EAAO4mF,EAAAA,gBAAgBkC,cAEzB,IAAMC,EAAS99I,KAAKw1D,SAASooF,GACvBhjF,EAAS8iF,EAAUjpF,YAAYknF,EAAAA,gBAAgBoC,kBAAkBzxI,IAAK0xI,GAAYh+I,KAAKw1D,SAASwoF,IACtGh+I,KAAK0+I,iBAAiBZ,EAAQljF,EAAQgjF,EAAYF,GAElD,IAAM/vI,EAAOmwI,EACb,GAAa,WAATnwI,EAAmB,CACrB,IAAMkrI,EAAkB6E,EAAU1mF,SAAS2kF,EAAAA,gBAAgBsC,aACrDhpF,EAAS4jF,EAAkB74I,KAAK+6I,aAAalC,QAAmB3zI,EAC9DsM,EAAUu3D,EAAyBqpE,kBAAkBx3E,EAAQ,CAACzrD,EAASxP,IAC7EK,KAAK4N,MAAMuB,EAASyuI,EAAY,CAAEjwI,KAAM,uBAAwBsB,KAAM,CAAEtP,YADlE6R,MAGR,GAAIyjD,EAAQ,CACV,IAAM8jF,EAAuB,IAAIxhC,EAAAA,aAC/BtiD,EACAzjD,EACA,CAAC,GACD,EAAA24G,EAAAA,oCAAmCnqH,KAAKg6C,QAASh6C,KAAKmzB,WACtD,EAAAikF,EAAAA,gCAA+Bp3G,KAAKmzB,UACpCnzB,KAAKmzB,SAASxc,MACd,CAAEghC,eAAc0d,KAAMr1D,KAAKmzB,SAASxc,MAAO+wD,OAAQ,IACnD,WAEF,IACEqxE,EAAqBnlI,OACvB,CAAE,MAAO7U,GACP,GAAIA,aAAao1D,EAAAA,wBAA0B0kF,EAAiB,CAC1D,IAAA8F,EAAe3+I,KAAK01D,iBAAiBmjF,GAA9BxkF,GAA8C,EAAAv6C,EAAAtQ,SAAAm1I,EAAA,GAA1C,GACX,MAAM,IAAIlO,EACR1xI,EAAEoQ,QACFklD,EAAOt1D,EAAEs1D,KACTt1D,EAAEu1D,OACFukF,EAAgB72I,KAAOjD,EAAEiD,KACzB62I,EAAgB72I,KAAOjD,EAAEw1D,GACzBx1D,EAAE4rD,QAEN,CACE,MAAM5rD,CAEV,CACF,CACA,IAAMm/I,EAAuBR,EAC1B1mF,SAAS2kF,EAAAA,gBAAgBwC,mBACxBnnF,SAAS2kF,EAAAA,gBAAgByC,eACzBpnF,SAAS2kF,EAAAA,gBAAgB0C,cACvBr0I,EAAOk0I,EAAuBl+I,KAAKw1D,SAAS0oF,QAAwBh5I,EAC1E,OAAO,EAAAu5I,EAAAA,sCAAqC9wI,EAAMitD,EAAQ,CACxD3F,SACAo9E,cAAeroI,GAEnB,CACE,OAAO,EAAAy0I,EAAAA,sCAAqC9wI,EAAMitD,EAEtD,CACE7F,EAAO4mF,EAAAA,gBAAgB8B,iBAE3B,GAAC,CAAAp8I,IAAA,iBAAA1B,MAED,SAAuBu4D,GACrB,GAAIA,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgB8B,iBAAkB,CAEvD,GAAY,MADCvlF,EAAKlB,SAAS2kF,EAAAA,gBAAgB6C,MAEzC,MAAO,GAET,IAAMI,EAAW1mF,EAAKlB,SAAS2kF,EAAAA,gBAAgBkD,oBAC/C,GAAgB,MAAZD,EAAkB,CACpB,IAAM72G,EAAO62G,EAASnqF,YAAYknF,EAAAA,gBAAgBG,mBAClD,GAAI/zG,EAAKjpC,OAAS,EAChB,OAAOipC,EAAKz7B,IAAKxH,GAAQ9E,KAAK8+I,kBAAkBh6I,GAEpD,CACA,MAAO,EACT,CACEiwD,EAAO4mF,EAAAA,gBAAgB8B,iBAE3B,GAAC,CAAAp8I,IAAA,mBAAA1B,MAED,SAAyBu4D,GACvB,GAAIA,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgBoD,SAAU,CAC/C,IAAMC,EAAmB9mF,EAAKlB,SAAS2kF,EAAAA,gBAAgB0C,cACvD,GAAwB,MAApBW,EAEF,MAAO,CACLrxI,KAAM,WACNsB,KAAM,CAAElN,KAHG/B,KAAKw1D,SAASwpF,KAM3BjqF,EAAO4mF,EAAAA,gBAAgB0C,aAE3B,MACEtpF,EAAO4mF,EAAAA,gBAAgBoD,SAE3B,GAAC,CAAA19I,IAAA,mBAAA1B,MAED,SACEu4D,EACAvgB,GAOA,GAAIugB,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgB8B,iBAAkB,CACvD,IAAM1mF,EAAWmB,EAAKlB,SAAS2kF,EAAAA,gBAAgBsD,sBAC/B,MAAZloF,GACFhC,EAAO4mF,EAAAA,gBAAgBsD,sBAEzB,IAAMl9I,EAAO/B,KAAKw1D,SAASuB,GAC3B,GAAa,aAATh1D,EACF,MAAO,CAAE4L,KAAM,WAAYsB,KAAMjP,KAAKk/I,iBAAiBhnF,EAAMvgB,IACxD,GAAa,WAAT51C,EACT,MAAO,CAAE4L,KAAM,SAAUsB,KAAMjP,KAAKm/I,eAAejnF,EAAMvgB,IACpD,GAAa,WAAT51C,EACT,MAAO,CAAE4L,KAAM,SAAUsB,KAAMjP,KAAKo/I,eAAelnF,IAC9C,GAAa,OAATn2D,EACT,MAAO,CAAE4L,KAAM,KAAMsB,KAAMjP,KAAKq/I,WAAWnnF,IACtC,GAAa,SAATn2D,EACT,MAAO,CAAE4L,KAAM,OAAQsB,KAAM,IAE7BjP,KAAK4N,MAAM,sCAAsC7L,KAASg1D,EAAU,CAClEppD,KAAM,kBACNsB,KAAM,CAAElN,SAGd,MACEgzD,EAAO4mF,EAAAA,gBAAgB8B,iBAE3B,GAAC,CAAAp8I,IAAA,kBAAA1B,MAED,SAAwB2/I,GACtB,IAAI7gF,EACAvpC,EACJ,GAAmB,MAAfoqH,EAAqB,CACvB,IAAM3wI,EAAS2wI,EAAY7qF,YAAYknF,EAAAA,gBAAgB4D,WAAWjzI,IAAKtN,IACrE,IAAM2gE,EAAQlL,EAAYz1D,GAAG,GAC7B,OAAI2gE,EAAMhyD,KAAK5L,OAAS45I,EAAAA,gBAAgB6D,IAC/B13E,SAAS9nE,KAAKw1D,SAASmK,GAAQ,SAEtC,IAGkB,IAAlBhxD,EAAO7P,OACTo2B,EAAMvmB,EAAO,IAEb8vD,EAAO9vD,EAAO,GACdumB,EAAMvmB,EAAO,GAEjB,CACA,MAAO,CAAE8vD,OAAMvpC,MACjB,GAAC,CAAA7zB,IAAA,oBAAA1B,MAED,SAA0Bu4D,GACxB,GAAIA,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgB8D,wBAAyB,CAC9D,IAAM1oF,EAAWmB,EAAKlB,SAAS2kF,EAAAA,gBAAgByC,eAAepnF,SAAS2kF,EAAAA,gBAAgB0C,cACvE,MAAZtnF,GACFhC,EAAO4mF,EAAAA,gBAAgB0C,cAEzB,IAAMt8I,EAAO/B,KAAKw1D,SAASuB,GAC3B2oF,EAAsB1/I,KAAK2/I,gBAAgBznF,EAAKlB,SAAS2kF,EAAAA,gBAAgBiE,UACzE,MAAO,CAAEjyI,KAAM,QAASsB,KAAM,CAAE23E,SAAU7kF,EAAM08D,KADpCihF,EAAJjhF,KAC8CvpC,IADrCwqH,EAAHxqH,IAC6C5iB,OAAQ,WACrE,CACEyiD,EAAO4mF,EAAAA,gBAAgB8D,wBAE3B,GAAC,CAAAp+I,IAAA,kBAAA1B,MAED,SACEu4D,EACAvgB,GAUA,GAAIugB,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgBU,gBAAiB,CACtD,IAAMwD,EAAY3nF,EAAKlB,SAAS2kF,EAAAA,gBAAgB8D,yBAChD,GAAiB,MAAbI,EACF,OAAO7/I,KAAK8/I,kBAAkBD,GAEhC,IAAMjB,EAAW1mF,EAAKlB,SAAS2kF,EAAAA,gBAAgBoE,cAC/C,GAAgB,MAAZnB,EAAkB,CACpB,IAAM72G,EAAO62G,EAASnqF,YAAYknF,EAAAA,gBAAgBW,aAC5CzuG,EAAmE,MAAvD+wG,EAAS5nF,SAAS2kF,EAAAA,gBAAgBqE,kBACpD,GAAIj4G,EAAKjpC,OAAS,EAChB,MAAO,CAAE6O,KAAM,OAAQsB,KAAM84B,EAAKz7B,IAAKxH,GAAQ9E,KAAKigJ,YAAYn7I,IAAO+oC,YAE3E,CACA,IAAMgmE,EAAW37C,EAAKlB,SAAS2kF,EAAAA,gBAAgBoD,UAC/C,GAAgB,MAAZlrC,EACF,OAAO7zG,KAAKkgJ,iBAAiBrsC,GAE/B,IAAMiL,EAAW5mD,EAAKlB,SAAS2kF,EAAAA,gBAAgB8B,kBAC/C,GAAgB,MAAZ3+B,EACF,OAAO9+G,KAAKmgJ,iBAAiBrhC,EAAUnnE,GAEvCod,EAAO4mF,EAAAA,gBAAgB8B,iBAE3B,MACE1oF,EAAO4mF,EAAAA,gBAAgBU,gBAE3B,GAAC,CAAAh7I,IAAA,iBAAA1B,MAqBD,SAAuBA,GACrBA,EAAQA,EAAM4hE,QAAQ,QAAS,IACQ,IAAnCvhE,KAAK86I,mBAAmBh8I,QAC1BkB,KAAK86I,mBAAmBp6I,KAAK,IAE/BV,KAAK86I,mBAAmB96I,KAAK86I,mBAAmBh8I,OAAS,GAAG4B,KAAKf,EACnE,GAAC,CAAA0B,IAAA,WAAA1B,MAED,SAAiBu4D,GACf,GAAIA,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgByE,mBAAoB,CACzD,IAAMC,EAAanoF,EAAKlB,SAAS2kF,EAAAA,gBAAgB2E,QACjD,GAAkB,MAAdD,EACF,OAAO,EAET,IAAM3oI,EAAW+8C,EAAY4rF,GAC7B,IAAK,IAAME,KAAa7oI,EACtB,GAAI6oI,EAAU5yI,KAAK5L,OAAS45I,EAAAA,gBAAgB6E,IAC1C,OAAO14E,SAAS9nE,KAAKw1D,SAAS+qF,GAAY,IAG9C,OAAO,CACT,CACExrF,EAAO4mF,EAAAA,gBAAgByE,mBAE3B,GAAC,CAAA/+I,IAAA,YAAA1B,MAED,SAAkBu4D,GAChB,GAAIA,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgByE,mBAAoB,CACzD,IAAMC,EAAanoF,EAAKlB,SAAS2kF,EAAAA,gBAAgB2E,QACjD,GAAkB,MAAdD,EACF,MAAO,GAET,IAAM1xI,EAAsB,IAAIua,IAC1BxR,EAAW+8C,EAAY4rF,GAC7B,IAAK,IAAME,KAAa7oI,EACtB,GAAI6oI,EAAU5yI,KAAK5L,OAAS45I,EAAAA,gBAAgB8E,SAAU,CAEpD,IADA,IAAAC,EAAmBjsF,EAAY8rF,GAAWj0I,IAAKtN,GAAM8oE,SAAS9nE,KAAKw1D,SAASx2D,GAAI,KAAI2hJ,GAAA,EAAA7mI,EAAAtQ,SAAAk3I,EAAA,GAA7E1+I,EAAI2+I,EAAA,GAAEpsF,EAAEosF,EAAA,GACNlhJ,EAAIuC,EAAMvC,GAAK80D,EAAI90D,GAAK,EAC/BkP,EAAO4b,IAAI9qB,GAEb,KACF,CAEF,OAAOR,MAAM+C,KAAK2M,GAAQq7D,KAAK,CAACnrE,EAAG4kE,IAAM5kE,EAAI4kE,EAC/C,CACE1O,EAAO4mF,EAAAA,gBAAgByE,mBAE3B,GAAC,CAAA/+I,IAAA,kBAAA1B,MAED,SAAwBihJ,GAEtB,GAAuB,IAAnBA,EAAQ9hJ,OACV,MAAO,GAOT,IAJA,IAAM8zE,EAAmB,GACrBiuE,EAAaD,EAAQ,GACrBE,EAAWF,EAAQ,GAEdnhJ,EAAI,EAAGA,EAAImhJ,EAAQ9hJ,OAAQW,IAC9BmhJ,EAAQnhJ,KAAOqhJ,EAAW,IAK5BluE,EAAOlyE,KAAK,GAAGmgJ,KAAcC,KAC7BD,EAAaD,EAAQnhJ,IAJrBqhJ,EAAWF,EAAQnhJ,GAYvB,OAFAmzE,EAAOlyE,KAAK,GAAGmgJ,KAAcC,KAEtBluE,CACT,GAAC,CAAAvxE,IAAA,eAAA1B,MAED,SAAqBu4D,GACnB,GAAIA,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgByE,mBAAoB,CACzD,IAAMjR,EAAWj3E,EAAKzD,YAAYknF,EAAAA,gBAAgBU,iBAClD,IAAK,IAAMlF,KAAWhI,EAAU,CAC9B,IAAM4G,EAAaoB,EAAQ1iF,YAAYknF,EAAAA,gBAAgB8B,kBACvD,IAAK,IAAM3+B,KAAYi3B,EAAY,CACjC,IAAMh/E,EAAW+nD,EAAS9nD,SAAS2kF,EAAAA,gBAAgBsD,sBAC7Cl9I,EAAOg1D,EAAW/2D,KAAK+6I,aAAahkF,QAAY7xD,EAChDw4I,EAAY5+B,EAAS9nD,SAAS2kF,EAAAA,gBAAgB6C,MACpD,GAAa,SAATz8I,GAAgC,MAAb27I,EACrB,OAAO,CAEX,CACF,CACA,OAAO,CACT,CACE3oF,EAAO4mF,EAAAA,gBAAgBU,gBAE3B,GAAC,CAAAh7I,IAAA,mBAAA1B,MAED,SAAyBu4D,GACvB,GAAIA,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgBoF,iBAAmB7oF,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgBqF,kBAKtF,GAAI9oF,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgBsF,KAAM,CAChC,WAAdjhJ,KAAKqQ,MACPrQ,KAAK4N,MACH,oGACAsqD,EACA,CAAEvqD,KAAM,6BAGZ,IAAMuzI,EAAWlhJ,KAAK+6I,aAAa7iF,GAAMqJ,QAAQ,MAAO,IAAIlgD,OAC5D8/H,EAAenhJ,KAAK01D,iBAAiBwC,GAA9B7D,GAAmC,EAAAv6C,EAAAtQ,SAAA23I,EAAA,GAA/B,GACXnhJ,KAAKgsC,MAAMtrC,KAAK,CAAEqB,KAAMm/I,EAAU7sF,OAAMwU,KAAM,KAC9C7oE,KAAKg6C,QAAU,CAAE9kB,IAAKl1B,KAAKg6C,QAAQ9kB,IAAKupC,KAAMz+D,KAAKgsC,MAAMltC,OAAS,EAAG0mE,UAAW,EAClF,MAAO,GAAItN,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgByF,IAAK,CAC/B,WAAdphJ,KAAKqQ,MACPrQ,KAAK4N,MACH,mGACAsqD,EACA,CAAEvqD,KAAM,4BAGc,IAAtB3N,KAAKgsC,MAAMltC,QACbkB,KAAK4N,MAAM,0CAA2CsqD,EAAM,CAAEvqD,KAAM,mBAEtE,IAAM+wF,EAAU1+F,KAAK+6I,aAAa7iF,GAAMqJ,QAAQ,MAAO,IAAIlgD,OAC3DggI,EAAerhJ,KAAK01D,iBAAiBwC,GAA9B7D,GAAmC,EAAAv6C,EAAAtQ,SAAA63I,EAAA,GAA/B,GACXrhJ,KAAKgsC,MAAMhsC,KAAKgsC,MAAMltC,OAAS,GAAG+pE,KAAKnoE,KAAK,CAAEqB,KAAM28F,EAASrqC,KAAAA,EAAMjwB,UAAW,KAC9EpkC,KAAKg6C,QAAU,CACb9kB,IAAKl1B,KAAKg6C,QAAQ9kB,IAAM,EACxBupC,KAAMz+D,KAAKg6C,QAAQykB,KACnB+G,WAAYxlE,KAAKg6C,QAAQwrB,WAAa,GAAK,GAE7CxlE,KAAKgwG,cAAgB,CACvB,KAAO,IAAI93C,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgB2F,YAAa,CACzD,IAAM3hJ,EAAQK,KAAK+6I,aAAa7iF,GAAM72C,OAEtC,YADArhB,KAAKuhJ,eAAe5hJ,EAEtB,CAAO,GAAIu4D,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgByE,mBAAoB,CAC9C,SAAdpgJ,KAAKqQ,MAA0C,IAAtBrQ,KAAKgsC,MAAMltC,QAAkE,IAAlDkB,KAAKgsC,MAAMhsC,KAAKgsC,MAAMltC,OAAS,GAAG+pE,KAAK/pE,OAI9D,IAAtBkB,KAAKgsC,MAAMltC,QACpBkB,KAAKgsC,MAAMtrC,KAAK,CAAEqB,KAAM,SAAUsyD,KAAM,EAAGwU,KAAM,CAAC,CAAE9mE,KAAM,QAASsyD,KAAM,EAAGjwB,UAAW,OAJvFpkC,KAAK4N,MAAM,qEAAsEsqD,EAAM,CACrFvqD,KAAM,uBAKV,IAAM6zI,EAAiBtpF,EAAKlB,SAAS2kF,EAAAA,gBAAgB8F,oBAC/B,MAAlBD,GACFzsF,EAAO4mF,EAAAA,gBAAgB8F,oBAQzB,IANA,IAKIlmI,EALEw7C,EAAWyqF,EAEX56D,EAAW5mF,KAAKw1D,SAASgsF,GACzBE,EAAiBF,EAAe/sF,YAAYknF,EAAAA,gBAAgBgG,mBAC5D/mC,EAAyD,GAEtDn7G,EAAI,EAAGA,EAAIiiJ,EAAe5iJ,OAAQW,GAAK,EAAG,CACjD,IAAMmiJ,EAAgBF,EAAejiJ,GAC/BouC,EAAwE,MAA5D+zG,EAAc5qF,SAAS2kF,EAAAA,gBAAgBqE,kBACnD6B,EAAoBD,EAAc5qF,SAAS2kF,EAAAA,gBAAgB0C,cACxC,MAArBwD,GACF9sF,EAAO4mF,EAAAA,gBAAgB0C,cAEzB,IAAMyD,EAAoB9hJ,KAAKw1D,SAASqsF,GAClC/hE,EAAQ/W,EAAyB0pE,iBAAiBqP,EAAmB9hJ,KAAKmzB,SAASiR,WAC/E,IAAN3kC,IACF8b,EAAQukE,EAAMvkE,OAEhB,IAAMwmI,GAAqB,EAAAxP,EAAAA,8CAA6CuP,EAAmB9hJ,KAAKmzB,UAC1F6uH,GAAwB,EAAAC,EAAAA,iCAAgCF,EAAoB/hJ,KAAKmzB,SAASiR,WAChGw2E,EAAmBl6G,KAAK,CACtBi3C,aAAcqqG,EACdjgJ,KAAM+9E,EAAM/9E,KACZ8rC,aAEJ,CACA,IAYIq0G,EACAhvC,EAKAr/E,EACAs/E,EACAU,EApBE8H,EAAwBf,EAAmBjuD,UAAW7rB,GAAMA,EAAE+M,WAE9Ds0G,EAAkBvnC,GADgC,IAA3Be,EAA+B,EAAIA,GAE1D55G,EAAOogJ,GAAiBpgJ,MAAQ,GAChCyU,EAAW2rI,GAAiBxqG,aAC5B9gB,EAAYrgB,GAAUqgB,UACtBx1B,GAAM,EAAA+gJ,EAAAA,mCAAkCxnC,EAAoBr/F,GAC5D+2H,GAAY,EAAA7pD,EAAAA,oBAAmB1mF,EAAM/B,KAAKmzB,cAAUjuB,EAAW2xB,GACjE68E,EAAU1zG,KAAKqiJ,aAAanqF,GAC1BoqF,EAAepqF,EAAKzD,YAAYknF,EAAAA,gBAAgBU,iBAChDt7B,EAAuD,GACvDwhC,EAAwC,GAGxC5gC,EAAS3hH,KAAKwiJ,UAAUtqF,GACxBgqD,EAAQliH,KAAKyiJ,SAASvqF,GACtBhpD,EAAOlP,KAAK+6I,aAAa7iF,GAAM72C,OACjC6pC,EAAiB,GAIrB,IAAK,IAAMw3F,KAAeJ,EAAc,CACtC,IAAMnL,EAAUn3I,KAAK2iJ,gBAAgBD,EAAalsI,EAAW,CAAE1M,GAAI0M,EAAS1M,GAAI+sB,kBAAc3xB,GAC9F,GAAqB,SAAjBiyI,EAAQxpI,KACV40I,EAAQ7hJ,QAAQy2I,EAAQloI,MACpBkoI,EAAQloI,KAAK2T,KAAM9d,GAAwB,MAAhBA,EAAIu2G,WACjC0F,EAAcrgH,KAAK,CAAEqnC,KAAMovG,EAAQloI,KAAM4+B,UAAWspG,EAAQtpG,iBAEzD,GAAqB,WAAjBspG,EAAQxpI,MACjBu0I,EAAgBA,GAAiB,IACnBxhJ,QAAQy2I,EAAQloI,WACzB,GAAqB,aAAjBkoI,EAAQxpI,KACjBkmB,EAAWsjH,EAAQloI,UACd,GAAqB,WAAjBkoI,EAAQxpI,KACjBwlG,EAASgkC,EAAQloI,UACZ,GAAqB,UAAjBkoI,EAAQxpI,KACjBulG,EAAQikC,EAAQloI,UACX,GAAqB,OAAjBkoI,EAAQxpI,KACjBu9C,EAAOA,EAAK1C,OAAO2uF,EAAQloI,WACtB,GAAqB,aAAjBkoI,EAAQxpI,KACjBkmG,EAAWsjC,EAAQloI,SACd,IAAqB,SAAjBkoI,EAAQxpI,KAGjB,MAAM,IAAIjB,MAAM,2BAFhBgnG,GAAU,CAGZ,CACF,CACA,IAAM7U,EAAM0jD,EAAQ9kG,KAAM34C,GAAwB,MAAhBA,EAAIu2G,UAA+B,MAAXv2G,EAAI+5F,MAAcA,IACtExuD,GAAQkyG,EAAQ9kG,KAAM34C,GAAwB,MAAhBA,EAAIu2G,UAAiC,MAAbv2G,EAAIurC,QAAgBA,MAC1E5K,GAAW88G,EAAQ9kG,KAAM34C,GAAwB,MAAhBA,EAAIu2G,UAAoC,MAAhBv2G,EAAI2gC,WAAmBA,SAChFy5D,GAAqBqjD,EAAQ9kG,KAChC34C,GAAwB,MAAhBA,EAAIu2G,UAA8C,MAA1Bv2G,EAAIo6F,qBACpCA,mBACGqX,GAAOgsC,EAAQ9kG,KAAM34C,GAAwB,MAAhBA,EAAIu2G,UAAgC,MAAZv2G,EAAIyxG,OAAeA,KACxE9xC,GAAa89E,EAAQ9kG,KAAM34C,GAAwB,MAAhBA,EAAIu2G,UAAsC,MAAlBv2G,EAAI2/D,aAAqBA,WACpFrvC,GAASmtH,EAAQ9kG,KAAM34C,GAAwB,MAAhBA,EAAIu2G,UAAkC,MAAdv2G,EAAIswB,SAAiBA,OAC5E2pE,GAASwjD,EAAQ9kG,KAAM34C,GAAwB,MAAhBA,EAAIu2G,UAAkC,MAAdv2G,EAAIi6F,SAAiBA,OAC5EC,GAAYujD,EAAQ9kG,KAAM34C,GAAwB,MAAhBA,EAAIu2G,UAAqC,MAAjBv2G,EAAIk6F,YAAoBA,UACxF4jD,GAAe5iJ,KAAK01D,iBAAiBwC,GAA9B7D,IAAmC,EAAAv6C,EAAAtQ,SAAAo5I,GAAA,GAA/B,GACLC,GAA4B7iJ,KAAK86I,mBAAmBxuI,IAAKgY,GAAMA,EAAE9X,KAAK,OACtEuuG,GAA0B8nC,GAAgBl2F,UAAWroC,GAAM,QAAQriB,KAAKqiB,IAC1E6sF,GAAe0xC,GAAgBv2I,IAAI,CAACgY,EAAG7kB,KAAM,CAC/CE,MAAO2kB,EAAEi9C,QAAQ,QAAS,IAC1B1zB,UAAWpuC,IAAMs7G,MAEf5J,GAAaryG,OAAS,IACxBqyG,GAAeA,GAAavuG,OAAQ0hB,GAAMA,EAAE3kB,QAE9CwxG,GAAeA,GAAa7kG,IAAKgY,IAAC,IAAWA,EAAG3kB,OAAO,EAAAmjJ,EAAAA,sBAAqBx+H,EAAE3kB,UAC9EK,KAAK86I,mBAAqB,GAC1B,IAAMiI,GAAgB/iJ,KAAKg7I,SAASjkF,GAE9BisF,GAAgB9qF,EACnBzD,YAAYknF,EAAAA,gBAAgBU,iBAC5B/vI,IAAKtN,GAAMA,EAAEg4D,SAAS2kF,EAAAA,gBAAgB8D,0BACtC78I,OAAQ5D,GAAMA,GAAG,GACdq4I,GAAgB2L,GAAgBhjJ,KAAKg7I,SAASgI,SAAiB99I,EAE/D+9I,GAAe/qF,EAClBzD,YAAYknF,EAAAA,gBAAgBU,iBAC5B/vI,IAAKtN,IACJ,IAAM01D,EAAO11D,EAAEg4D,SAAS2kF,EAAAA,gBAAgB8B,mBAAmBzmF,SAAS2kF,EAAAA,gBAAgBsD,sBACpF,OAAe,MAARvqF,GAA4C,aAA5B10D,KAAK+6I,aAAarmF,GAAuBA,OAAOxvD,IAExE0H,KAAK,GACLhK,OAAQ5D,GAAMA,GAAG,GACdy/G,GAAgBwkC,GAAejjJ,KAAKg7I,SAASiI,SAAgB/9I,EAE7Dg+I,GAAahrF,EAChBzD,YAAYknF,EAAAA,gBAAgBU,iBAC5B/vI,IAAKtN,IACJ,IAAM01D,EAAO11D,EAAEg4D,SAAS2kF,EAAAA,gBAAgB8B,mBAAmBzmF,SAAS2kF,EAAAA,gBAAgBsD,sBACpF,OAAe,MAARvqF,GAA4C,WAA5B10D,KAAK+6I,aAAarmF,GAAqBA,OAAOxvD,IAEtE0H,KAAK,GACLhK,OAAQ5D,GAAMA,GAAG,GACd0/G,GAAcwkC,GAAaljJ,KAAKg7I,SAASkI,SAAch+I,EAEvDi+I,GAASjrF,EACZzD,YAAYknF,EAAAA,gBAAgBU,iBAC5B/vI,IAAKtN,IACJ,IAAM01D,EAAO11D,EAAEg4D,SAAS2kF,EAAAA,gBAAgB8B,mBAAmBzmF,SAAS2kF,EAAAA,gBAAgBsD,sBACpF,OAAe,MAARvqF,GAA4C,OAA5B10D,KAAK+6I,aAAarmF,GAAiBA,OAAOxvD,IAElE0H,KAAK,GACLhK,OAAQ5D,GAAMA,GAAG,GACd4/G,GAAUukC,GAASnjJ,KAAKg7I,SAASmI,SAAUj+I,EAI3Ck+I,GAAalrF,EAChBzD,YAAYknF,EAAAA,gBAAgBU,iBAC5B/vI,IAAKtN,IACJ,IAAM01D,EAAO11D,EAAEg4D,SAAS2kF,EAAAA,gBAAgB8B,mBAAmBzmF,SAAS2kF,EAAAA,gBAAgBsD,sBACpF,OAAe,MAARvqF,GAA4C,WAA5B10D,KAAK+6I,aAAarmF,GAAqBA,OAAOxvD,IAEtE0H,KAAK,GACLhK,OAAQ5D,GAAMA,GAAG,GACd2/G,GAAcykC,GAAapjJ,KAAKg7I,SAASoI,SAAcl+I,EAEvDm+I,GAAenrF,EAClBzD,YAAYknF,EAAAA,gBAAgBU,iBAC5B/vI,IAAKtN,GAAMA,EAAEg4D,SAAS2kF,EAAAA,gBAAgBoD,WACtCn8I,OAAQ5D,GAAMA,GAAG,GACdskJ,GAAgBD,GAAerjJ,KAAKg7I,SAASqI,SAAgBn+I,EAE7D0uG,GAA2C,CAC/C9pG,IAAI,EAAAiV,EAAAA,wBAAuB,GAC3B1d,MACAulF,WACA0rD,YACA36F,aAAcnhC,EACd+E,QACAy+B,QAASh6C,KAAKg6C,QACd9qC,OACAyyG,SACAitB,UAAW,IAAIjtB,GACfO,QACArO,WACA9xG,OACA80B,YACAm5E,cAAehwG,KAAKgwG,cACpB37C,KAAAA,GACAnJ,OACAwoD,QAASA,EACTyD,uBAAwB,GACxB4J,gBACAnG,qBACAzJ,aAAc,CACZ1pC,OAAQ0pC,IAEVzpE,WAAYw6G,EACZhvC,QACAr/E,WACAs/E,SACAgI,QAAS,CACPtc,MACAE,UACAC,aACA3uD,SACA5K,YACAy5D,sBACAqX,QACA9xC,cACArvC,WAEF0yE,OAAQ,CACNlhB,SAAUm8D,GACVO,iBACAjM,iBACA54B,iBACAG,WACAF,eACAC,iBAGJ3+G,KAAKgsC,MAAMhsC,KAAKgsC,MAAMltC,OAAS,GAAG+pE,KAAK7oE,KAAKgsC,MAAMhsC,KAAKgsC,MAAMltC,OAAS,GAAG+pE,KAAK/pE,OAAS,GAAGslC,UAAU1jC,KAClGkzG,IAEGF,IACH1zG,KAAKgwG,eAAiB,EAE1B,MACEhwG,KAAK4N,MAAM,wBAAwBsqD,EAAKxD,KAAK/mD,KAAK5L,OAAQm2D,EAAM,CAC9DvqD,KAAM,iBACNsB,KAAM,CAAEylD,KAAMwD,EAAKxD,KAAK/mD,KAAK5L,OAEjC,MAzQM/B,KAAK86I,mBAAmBh8I,OAAS,GACnCkB,KAAK86I,mBAAmBp6I,KAAK,GAyQnC,GAAC,CAAAW,IAAA,kBAAA1B,MAED,SAAwBu4D,GACtB,GAAIA,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgBhoF,QAAS,CAG9C,IAAK,IAAMgM,KAFX3/D,KAAKgsC,MAAQ,GACbhsC,KAAKgwG,cAAgB,GACD,EAAAv5E,EAAAA,yBAAwBg+B,EAAYyD,KACtDl4D,KAAKujJ,iBAAiB5jF,GAExB,OAAO3/D,KAAKgsC,KACd,CACEhsC,KAAK4N,MAAM,wBAAwBsqD,EAAKxD,KAAK/mD,KAAK5L,OAAQm2D,EAAM,CAC9DvqD,KAAM,iBACNsB,KAAM,CAAEylD,KAAMwD,EAAKxD,KAAK/mD,KAAK5L,OAGnC,GAAC,CAAAV,IAAA,WAAA1B,MAED,SAAgB64D,GACd,IAGE,OAFAx4D,KAAK4T,MAAM4kD,GAEJ,CAAEvpD,KADOjP,KAAKwjJ,gBAAgBhrF,GACbxpD,SAAS,EACnC,CAAE,MAAOjQ,GACP,GAAIA,aAAa0xI,EACf,MAAO,CAAE7iI,MAAO7O,EAAGiQ,SAAS,GAE5B,MAAMjQ,CAEV,CACF,GAAC,CAAAsC,IAAA,kBAAA1B,MAED,SAAuB64D,EAAyBnD,GAC9C,IAAMT,EAAS4D,EAAY5D,SAC3B,EAAG,CACD,IAAMx/B,EAASp1B,KAAK04D,UAAU9D,EAAOF,MACrC,GAAc,MAAVt/B,GACEA,EAAOigC,OAASA,EAClB,OAAO,CAGb,OAAST,EAAOjzD,QAChB,OAAO,CACT,GAAC,CAAAN,IAAA,sBAAA1B,MAED,SAA2B64D,EAAyBrlC,GAClD,IAAMyhC,EAAS4D,EAAY5D,SACvBK,EAASj1D,KAAKi1D,OACdwD,EAAQ,EACZ,GACE,GAAI7D,EAAOF,KAAK/mD,KAAK5L,OAAS45I,EAAAA,gBAAgBE,OAAQ,CACpD,IAAMzmH,EAASp1B,KAAK04D,UAAU9D,EAAOF,MACrC,GAAc,MAAVt/B,GACEA,EAAOigC,OAASliC,EAASxc,MAAO,CAClC,IAAM3U,EAAO4yD,EAAOF,KAAK1yD,KACnBuyD,EAAKK,EAAOF,KAAKH,GACjBoE,GAAe,EAAAf,EAAAA,cAAaxiC,GAC5BwjC,GAAe,EAAAhB,EAAAA,eAAa,EAAAiB,EAAAA,qBAAoBzjC,EAAQjC,EAASxc,QACvEs+C,EAASA,EAAO6D,UAAU,EAAG92D,EAAOy2D,GAASG,EAAe3D,EAAO6D,UAAUvE,EAAKkE,GAClFA,EAAQA,EAAQG,EAAa95D,OAAS65D,EAAa75D,MACrD,CAEJ,MAAO,GAAI81D,EAAOF,KAAK/mD,KAAK5L,OAAS45I,EAAAA,gBAAgBsC,YAAa,CAChE,IAAMwF,EAAiBzjJ,KAAK+6I,aAAanmF,EAAOF,MAW1CgvF,EAVuB,IAAInsC,EAAAA,aAC/BksC,EACA,CAAC,EACD,CAAC,GACD,EAAAt5B,EAAAA,oCAAmC,CAAEj1F,IAAK,EAAGupC,KAAM,EAAG+G,UAAW,GAAKryC,IACtE,EAAAikF,EAAAA,gCAA+BjkF,GAC/BA,EAASxc,MACT,CAAE0+C,KAAMliC,EAASxc,MAAO+wD,OAAQ,IAChC,WAE0CupE,oBAAoB99G,EAASxc,OACzEs+C,EACEA,EAAO6D,UAAU,EAAGlE,EAAOF,KAAK1yD,KAAOy2D,GAASirF,EAAiBzuF,EAAO6D,UAAUlE,EAAOF,KAAKH,GAAKkE,GACrGA,EAAQA,EAAQirF,EAAe5kJ,OAAS2kJ,EAAe3kJ,MACzD,QACO81D,EAAOjzD,QAChB,OAAOszD,CACT,GAAC,CAAA5zD,IAAA,qBAAA1B,MAED,SAA0B+0D,EAAkB1yD,EAAcuyD,GACxD,IAAMK,EAASF,EAAKE,SAChBK,EAASj1D,KAAKi1D,OACdwD,EAAQ,EACZ,GACE,GAAI7D,EAAOF,KAAK/mD,KAAK5L,OAAS45I,EAAAA,gBAAgB0C,aAAc,CAC1D,IAAMt8I,EAAO/B,KAAKw1D,SAASZ,EAAOF,MAClC,GAAI3yD,IAASC,EAAM,CACjB,IAAM2hJ,EAAW/uF,EAAOF,KAAK1yD,KACvB4hJ,EAAShvF,EAAOF,KAAKH,GAC3BU,EAASA,EAAO6D,UAAU,EAAG6qF,EAAWlrF,GAASlE,EAAKU,EAAO6D,UAAU8qF,EAASnrF,GAChFA,EAAQA,EAAQlE,EAAGz1D,OAASiD,EAAKjD,MACnC,CACF,QACO81D,EAAOjzD,QAChB,OAAOszD,CACT,GAAC,CAAA5zD,IAAA,aAAA1B,MAoBD,SAAkB64D,GACZA,EAAY7qD,KAAK5L,OAAS45I,EAAAA,gBAAgBhoF,SAC5C3zD,KAAK4N,MAAM,wBAAwB4qD,EAAY7qD,KAAK5L,2BAA4By2D,EAAa,CAC3F7qD,KAAM,iBACNsB,KAAM,CAAEylD,KAAM8D,EAAY7qD,KAAK5L,QAGnC,IAAM2V,EAAW+8C,EAAY+D,GACvB7pD,EAAgC,GAClCk/H,EAA+B,GAC/BmB,GAAsB,EACtBh/B,EAAgB,EACpB,IAAK,IAAMrwC,KAASjoD,EAClB,GAAIioD,EAAMhyD,KAAK5L,OAAS45I,EAAAA,gBAAgByE,mBAAoB,CAC1DpR,GAAsB,EACtB,IAAMj4E,EAAW4I,EAAM3I,SAAS2kF,EAAAA,gBAAgB8F,oBAC1C76D,EAAW5mF,KAAKw1D,SAASuB,GACzB11D,GAAM,EAAAijE,EAAAA,yBAAwBsiB,EAAU5mF,KAAKmzB,SAASiR,WACtDu9E,EAAS3hH,KAAKwiJ,UAAU7iF,GACxBovE,EAAe/uI,KAAK6jJ,gBAAgBliC,GACpCO,EAAQliH,KAAKyiJ,SAAS9iF,GACtBmkF,GAAU9jJ,KAAKqiJ,aAAa1iF,GAC5BokF,EAAepkF,EAAMlL,YAAYknF,EAAAA,gBAAgBU,iBACjDlN,EAAW4U,EAAaz3I,IAAK6qI,GAAYn3I,KAAK+6I,aAAa5D,GAAS91H,QAAQ7U,KAAK,OACjFkiI,EAAkBqV,EACrBnhJ,OAAQu0I,IACP,IAAMpB,EAAaoB,EAAQngF,SAAS2kF,EAAAA,gBAAgB8B,kBACpD,GAAkB,MAAd1H,EACF,OAAO,EAET,IAAMiO,EAAmBjO,EAAW/+E,SAAS2kF,EAAAA,gBAAgBsD,sBAE7D,MAAqB,cADA+E,EAAmBhkJ,KAAKw1D,SAASwuF,QAAoB9+I,IAGzD,MADF6wI,EAAW/+E,SAAS2kF,EAAAA,gBAAgB6C,QAKpDlyI,IAAK6qI,GAAYn3I,KAAK+6I,aAAa5D,GAAS91H,QAC5C7U,KAAK,OACRmC,EAAOjO,KAAK,CACViN,KAAM,WACNi5E,WACAs7B,QACAxO,SAAUowC,EACVnkJ,MAAO0B,EACP2uG,gBACA2R,SACAotB,eACA59B,aAAc08B,EAAiBvhI,IAAKgY,GAAMA,EAAE9X,KAAK,OACjD2iI,WACAT,oBAEEoV,IACF9zC,GAAiB,GAEnB69B,EAAmB,EACrB,MAAO,GAAIluE,EAAMhyD,KAAK5L,OAAS45I,EAAAA,gBAAgB2F,YAAa,CAC1DtS,GAAsB,EACtB,IAAMhkF,EAAchrD,KAAK+6I,aAAap7E,GAAOt+C,OACb,IAA5BwsH,EAAiB/uI,QACnB+uI,EAAiBntI,KAAK,IAExBmtI,EAAiBA,EAAiB/uI,OAAS,GAAG4B,KAAKsqD,GACnDr8C,EAAOjO,KAAK,CAAEiN,KAAM,cAAehO,MAAOqrD,GAC5C,MAAW2U,EAAMhyD,KAAK5L,OAAS45I,EAAAA,gBAAgBqF,kBAC7CryI,EAAOjO,KAAK,CAAEiN,KAAM,UAAWhO,MAAOK,KAAK+6I,aAAap7E,GAAOt+C,SACtDs+C,EAAMhyD,KAAK5L,OAAS45I,EAAAA,gBAAgBoF,iBAC7CpyI,EAAOjO,KAAK,CAAEiN,KAAM,QAAShO,MAAO,KAChCqvI,GACFnB,EAAiBntI,KAAK,KAGxBV,KAAK4N,MACH,wBAAwB+xD,EAAMhyD,KAAK5L,oEACnC49D,EACA,CAAEhyD,KAAM,iBAAkBsB,KAAM,CAAEylD,KAAMiL,EAAMhyD,KAAK5L,QAIzD,OAAO4M,CACT,IAAC,EAAAtN,IAAA,uBAAA1B,MA/uCD,SAAmCs1D,EAAgB2d,GAEjD,IADA,IAAIte,EAAS,EACNse,EAAO9zE,OAAS,GAAG,CACxB,IAAAiN,EAAgC6mE,EAAOna,QAAO5lD,GAAA,EAAAiH,EAAAtQ,SAAAuC,EAAA,GAAvC/J,EAAI6Q,EAAA,GAAE0hD,EAAE1hD,EAAA,GAAEy7F,EAAWz7F,EAAA,GAC5BoiD,EAASA,EAAOpzD,MAAM,EAAGG,EAAOsyD,GAAUg6C,EAAcr5C,EAAOpzD,MAAM0yD,EAAKD,GAC1EA,GAAUg6C,EAAYxvG,QAAUy1D,EAAKvyD,EACvC,CACA,OAAOizD,CACT,GAAC,CAAA5zD,IAAA,kBAAA1B,MAED,SAA8Bd,EAA4B4kE,GACxD,OAAO5kE,EAAEi/I,SAAWr6E,EAAEq6E,QAAUj/I,EAAE+7D,OAAOpuD,SAAWi3D,EAAE7I,OAAOpuD,QAAU3N,EAAEo2D,SAAWwO,EAAExO,QAAUp2D,EAAEmL,OAASy5D,EAAEz5D,IAC/G,GAAC,CAAA3I,IAAA,kBAAA1B,MAED,SAA8Bd,EAA6B4kE,GACzD,IAAMwgF,EAAQ,KACT,EAAAxxF,EAAAA,kBAAiB5zD,EAAG,CAAC,OAAQ,QAAS,gBAAiB,WAC1Dq0G,MAAOr0G,EAAEq0G,OAAOtsB,UAEZs9D,EAAQ,KACT,EAAAzxF,EAAAA,kBAAiBgR,EAAG,CAAC,OAAQ,QAAS,gBAAiB,WAC1DyvC,MAAOzvC,EAAEyvC,OAAOtsB,UAElB,OAAO,EAAA/xD,EAAAA,qBAAoBovH,EAAOC,EACpC,GAAC,CAAA7iJ,IAAA,gBAAA1B,MAED,SAA4Bd,EAA2B4kE,GACrD,IAAMwgF,EAAQ,KAAK,EAAAxxF,EAAAA,kBAAiB5zD,EAAG,CAAC,OAAQ,WAAYq0G,MAAOr0G,EAAEq0G,OAAOtsB,UACtEs9D,EAAQ,KAAK,EAAAzxF,EAAAA,kBAAiBgR,EAAG,CAAC,OAAQ,WAAYyvC,MAAOzvC,EAAEyvC,OAAOtsB,UAC5E,OAAO,EAAA/xD,EAAAA,qBAAoBovH,EAAOC,EACpC,GAAC,CAAA7iJ,IAAA,mBAAA1B,MAYD,SAA+Bs1D,EAAgBP,GAG7C,IAFA,IAAMqD,EAAe9C,EAAO+C,MAAM,MAAM1rD,IAAK1I,GAAMA,EAAE9E,OAAS,GAC1Dw1D,EAAS,EACJ70D,EAAI,EAAGA,EAAIs4D,EAAaj5D,OAAQW,IAAK,CAC5C,IAAMw4D,EAAaF,EAAat4D,GAChC,GAAIi1D,EAAK1yD,MAAQsyD,GAAUI,EAAK1yD,KAAOsyD,EAAS2D,EAC9C,MAAO,CAACx4D,EAAI,EAAGi1D,EAAK1yD,KAAOsyD,GAE7BA,GAAU2D,CACZ,CACA,MAAO,CAACF,EAAaj5D,OAAQi5D,EAAaA,EAAaj5D,OAAS,GAClE,GAAC,CAAAuC,IAAA,oBAAA1B,MAiGD,SACEi7D,EACA85C,GAKA,OAAO,EAAAyvC,EAAAA,2BAA0BvpF,EAAQ85C,EAC3C,GAAC,CAAArzG,IAAA,kCAAA1B,MA8+BD,SAA8CikE,GAC5C,IACMhP,EADOo5E,EAAAA,OAAsBp6H,MAAMgwD,GACrBhP,SAChBK,EAAS2O,EACTnL,EAAQ,EACZ,GACE,GAAI7D,EAAOF,KAAK/mD,KAAK5L,OAAS45I,EAAAA,gBAAgBsC,YAAa,CACzD,IAAMt+I,EAAQq1D,EAAAA,qBAAqB8L,YAAY8C,EAAWhP,EAAOF,MAC3D1yD,EAAO4yD,EAAOF,KAAK1yD,KACnBuyD,EAAKK,EAAOF,KAAKH,GACjByJ,EAAWhJ,EAAAA,qBAAqBovF,+BAA+BzkJ,GACrEs1D,EAASA,EAAO6D,UAAU,EAAG92D,EAAOy2D,GAASuF,EAAW/I,EAAO6D,UAAUvE,EAAKkE,GAC9EA,EAAQA,EAAQuF,EAASl/D,OAASa,EAAMb,MAC1C,QACO81D,EAAOjzD,QAChB,OAAOszD,CACT,IAAC,CArrCkC,IAgsBrBw9E,kBAAmB,EAAA3tC,EAAAA,SAC/B,CAAC9L,EAAa50D,KACZ,IAAAigH,EAAqCrrD,EAAIhhC,MAAM,KAAIssF,GAAA,EAAA5pF,EAAAlxD,SAAA66I,GAA9C9oI,EAAK+oI,EAAA,GAAKC,EA5xBqC,SAAA3lJ,EAAAC,IAAA,MAAAA,GAAAA,EAAAD,EAAAE,UAAAD,EAAAD,EAAAE,QAAA,QAAAC,EAAA,EAAAC,EAAAC,MAAAJ,GAAAE,EAAAF,EAAAE,IAAAC,EAAAD,GAAAH,EAAAG,GAAA,OAAAC,CAAA,CA4xBnBsC,CAAAgjJ,GAAAziJ,MAAA,GACC,IAA9B0iJ,EAAmBzlJ,QACrBylJ,EAAqB,CAAChpI,GACtBA,EAAQ,IAERA,EAAQA,EAAM8F,OAEhB,IAAMmjI,EAAgBD,EAAmB/3I,KAAK,KAAK6U,OAC7CojI,GAAmB,EAAAxC,EAAAA,iCAAgCuC,EAAepgH,GACxE,OAAIqgH,EACK,CAAE1iJ,KAAM0iJ,EAAiB1iJ,KAAMwZ,MAAOA,QAAgBrW,EAAW2xB,UAAW4tH,EAAiB5tH,WAE/F,CAAE90B,KAAMyiJ,EAAejpI,MAAOA,QAAgBrW,IAEvD,CAAE6/F,QAAS,K,mKCv1Bfz/F,EAAAF,EAAA,OACAu1I,EAAAv1I,EAAA,MACA2iE,EAAA3iE,EAAA,OAgCA,SAASs/I,EAAiCrwF,GACxC,OAAQA,EAAK1mD,MACX,IAAK,UACH,OAAO0mD,EAAKA,KAAKkN,QAAQ,cAAe,IAAIlgD,OAC9C,IAAK,oBACH,OAAOgzC,EAAKA,KAAKkN,QAAQ,gBAAiB,IAAIlgD,OAChD,IAAK,QACH,MAAO,GAEb,CAEyC1iB,EAAAA,8BAUtC,EAAA4K,EAAAC,SAHD,SAAA+lI,EAAYt6E,EAAgBkiB,EAAkC,CAAC,IAAG,EAAAxtE,EAAAH,SAAA,KAAA+lI,GAAA,KAL1DvjG,MAA6C,GAAE,KAC/C24G,aAAkD,GAKxD3kJ,KAAKi1D,OAASA,EACdj1D,KAAKwwI,SAAWr5D,EAAQq5D,WAAY,CACtC,EAAC,EAAAnvI,IAAA,WAAA1B,MAED,SAAiB+0D,GACf,OAAO10D,KAAKi1D,OAAOpzD,MAAM6yD,EAAK1yD,KAAM0yD,EAAKH,GAC3C,GAAC,CAAAlzD,IAAA,yBAAA1B,MAED,WASE,IALA,IAAMglJ,EAAe,IAAI3kJ,KAAK2kJ,cAC1BC,GAAoB,EACpBC,GAAiB,EACfC,EAA6D,GAC7DC,EAA+C,GAC5CtlJ,EAAI,EAAGA,EAAIklJ,EAAa7lJ,OAAQW,IAAK,CAC5C,IAAM40D,EAAOswF,EAAallJ,IACrBmlJ,GAAoC,UAAfvwF,GAAM1mD,QAGb,YAAf0mD,GAAM1mD,MAAqC,sBAAf0mD,GAAM1mD,OACpCi3I,GAAoB,GAEH,YAAfvwF,GAAM1mD,OACRk3I,GAAiB,GAEfD,IAAsBC,GACxBC,EAAwBpkJ,KAAK2zD,GAE3BwwF,GAAiC,YAAfxwF,GAAM1mD,MAC1Bo3I,EAAUrkJ,KAAK2zD,GAEnB,CACA,IAAK,IAAI50D,EAAIslJ,EAAUjmJ,OAAS,EAAGW,GAAK,GAEpB,UADLslJ,EAAUtlJ,GACdkO,KAFgClO,IAGvCslJ,EAAUC,MAKd,IAAK,IAAIvlJ,EAAIqlJ,EAAwBhmJ,OAAS,EAAGW,GAAK,GAElC,UADLqlJ,EAAwBrlJ,GAC5BkO,KAF8ClO,IAGrDqlJ,EAAwBE,MAK5B,MAAO,CAAEF,0BAAyBC,YACpC,GAAC,CAAA1jJ,IAAA,sCAAA1B,MAED,WACE,IAAAslJ,EAA+CjlJ,KAAKklJ,yBAA5CJ,EAAuBG,EAAvBH,wBAAyBC,EAASE,EAATF,UACjC,GAAID,EAAwBhmJ,OAAS,EAAG,CACtC,IAAMqmJ,EAAUnlJ,KAAKolJ,aACjBD,GACFA,EAAQ/gH,UAAU1jC,QAAQokJ,EAAwBx4I,IAAK+nD,GAASA,EAAKA,MAEzE,CAGA,OADE0wF,EAAUjmJ,OAAS,EAAIimJ,EAAUz4I,IAAIo4I,GAAkCl4I,KAAK,MAAM6U,YAASnc,CAE/F,GAAC,CAAA7D,IAAA,QAAA1B,MAED,SAAcwP,EAAiBulD,EAAkB/J,GAC/C,IAAAwnF,EAAuBppE,EAAAA,yBAAyBrT,iBAAiB11D,KAAKi1D,OAAQP,GAAK+/E,GAAA,EAAA36H,EAAAtQ,SAAA2oI,EAAA,GAA5E99E,EAAIogF,EAAA,GAAEngF,EAAMmgF,EAAA,GACnB,MAAMhE,EAAAA,mBAAmBmF,eAAU1wI,EAAWiK,EAAS,CAAEklD,OAAMC,SAAQtyD,KAAM0yD,EAAK1yD,KAAMuyD,GAAIG,EAAKH,IAAM5J,EACzG,GAAC,CAAAtpD,IAAA,aAAA1B,MAED,WACE,IAAMmvI,EAAW9uI,KAAKgsC,MAAMhsC,KAAKgsC,MAAMltC,OAAS,GAChD,OAAOgwI,GAAUjmE,KAAKimE,EAASjmE,KAAK/pE,OAAS,EAC/C,GAAC,CAAAuC,IAAA,eAAA1B,MAED,SAAqBu4D,GACnB,GAAIA,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgBsF,KAAM,CAC3C,IAAMC,EAAWlhJ,KAAKw1D,SAAS0C,GAAMqJ,QAAQ,MAAO,IAAIlgD,OAClD2pC,EAAchrD,KAAKqlJ,sCACzBrlJ,KAAKgsC,MAAMtrC,KAAK,CAAEqB,KAAMm/I,EAAUl2F,cAAa6d,KAAM,KACrD7oE,KAAK2kJ,aAAe,EACtB,MAAO,GAAIzsF,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgByF,IAAK,CACvB,IAAtBphJ,KAAKgsC,MAAMltC,QACbkB,KAAK4N,MAAM,0CAA2CsqD,EAAM,CAAEvqD,KAAM,mBAEtE,IAAM+wF,EAAU1+F,KAAKw1D,SAAS0C,GAAMqJ,QAAQ,MAAO,IAAIlgD,OACjD2pC,EAAchrD,KAAKqlJ,sCACzBrlJ,KAAKgsC,MAAMhsC,KAAKgsC,MAAMltC,OAAS,GAAG+pE,KAAKnoE,KAAK,CAAEqB,KAAM28F,EAASt6D,UAAW,GAAI4mB,YAAAA,IAC5EhrD,KAAK2kJ,aAAe,EACtB,MAAO,GAAIzsF,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgBoF,gBAC5C/gJ,KAAK2kJ,aAAajkJ,KAAK,CAAEiN,KAAM,QAAS0mD,KAAMr0D,KAAKw1D,SAAS0C,UACvD,GAAIA,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgB2F,YAC5CthJ,KAAK2kJ,aAAajkJ,KAAK,CAAEiN,KAAM,UAAW0mD,KAAMr0D,KAAKw1D,SAAS0C,UACzD,GAAIA,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgBqF,kBAC5ChhJ,KAAK2kJ,aAAajkJ,KAAK,CAAEiN,KAAM,oBAAqB0mD,KAAMr0D,KAAKw1D,SAAS0C,UACnE,GAAIA,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgByE,mBAAoB,CAChE,IAAM+E,EAAUnlJ,KAAKolJ,aACrB,GAAe,MAAXD,EAAiB,CACnB,IAAKnlJ,KAAKwwI,SACR,OAEFxwI,KAAK4N,MAAM,qEAAsEsqD,EAAM,CACrFvqD,KAAM,sBAEV,CACA,IAAK,IAAM0mD,KAAQr0D,KAAK2kJ,aACtBQ,EAAQ/gH,UAAU1jC,KAAK2zD,EAAKA,MAE9B8wF,EAAQ/gH,UAAU1jC,KAAKV,KAAKw1D,SAAS0C,IACrCl4D,KAAK2kJ,aAAe,EACtB,CACF,GAAC,CAAAtjJ,IAAA,WAAA1B,MAED,SAAgBu4D,GACd,GAAIA,EAAKvqD,KAAK5L,OAAS45I,EAAAA,gBAAgBhoF,QAAS,CAG9C,IAAK,IAAMgM,KAFX3/D,KAAK2kJ,aAAe,GACpB3kJ,KAAKgsC,MAAQ,IACO,EAAAvV,EAAAA,yBAvK1B,SAAqBi+B,GACnB,IAAMC,EAAMD,EAAKE,SACXjmD,EAAuB,GAC7B,IAAKgmD,EAAIE,aACP,OAAOlmD,EAET,GACEA,EAAOjO,KAAKi0D,EAAID,YACTC,EAAIG,eACb,OAAOnmD,CACT,CA6JkD8lD,CAAYyD,KACtDl4D,KAAKslJ,aAAa3lF,GAEpB,OAAO3/D,KAAKgsC,KACd,CACE,MAAM,IAAIt/B,MAAM,wBAAwBwrD,EAAKvqD,KAAK5L,OAEtD,I,gFClLF,IAAA4wD,EAAAvtD,EAAA,OACMwtD,EAAoB,CAAEtvD,UAAW,KAAMiiJ,KAAM,IAAKhvC,KAAM,KAC3C53G,EAAAA,OAAGq0D,EAAAA,SAASC,YAAY,CACzC7nB,QAAS,GACTlD,OACE,khDACFgrB,UACE,4qCACFC,KAAM,shBACNC,UACE,gpBACFC,QAAS,GACTC,aAAc,CAAC,GACfC,gBAAiB,GACjBC,UACE,srIACFC,WAAY,CAAC,EAAG,EAAG,EAAG,GACtBC,SAAU,CAAEC,QAAS,CAAC,EAAG,IACzBC,YAAa,CAAC,CAAEC,KAAM,GAAIhvD,IAAMlF,GAAeizD,EAAajzD,KAAW,IACvEm0D,UAAW,K,gHCrBb,IAAA0xF,EAAApgJ,EAAA,OAEYu2I,EAAeh9I,EAAAA,gBAAA,SAAfg9I,GAAe,OAAfA,EAAe,kBAAfA,EAAe,0BAAfA,EAAe,sCAAfA,EAAe,YAAfA,EAAe,UAAfA,EAAe,wCAAfA,EAAe,wCAAfA,EAAe,sCAAfA,EAAe,4BAAfA,EAAe,4BAAfA,EAAe,gBAAfA,EAAe,UAAfA,EAAe,UAAfA,EAAe,oBAAfA,EAAe,oCAAfA,EAAe,kCAAfA,EAAe,oCAAfA,EAAe,4CAAfA,EAAe,kBAAfA,EAAe,wCAAfA,EAAe,4BAAfA,EAAe,oCAAfA,EAAe,gBAAfA,EAAe,YAAfA,EAAe,sBAAfA,EAAe,cAAfA,EAAe,gBAAfA,EAAe,wBAAfA,EAAe,UAAfA,EAAe,oBAAfA,EAAe,0BAAfA,EAAe,oCAAfA,EAAe,4BAAfA,EAAe,wCAAfA,EAAe,sCAAfA,EAAe,8BAAfA,EAAe,YAAfA,EAAe,4BAAfA,EAAe,oCAAfA,EAAe,0BAAfA,EAAe,cAAfA,EAAe,oBAAfA,EAAe,YAAfA,EAAe,kBAAfA,EAAe,gCAAfA,EAAe,wCAAfA,EAAe,oBAAfA,EAAe,kDAAfA,EAAe,kBAAfA,EAAe,sBAAfA,EAAe,kBAAfA,EAAe,oBAAfA,EAAe,kCAAfA,EAAe,sBAAfA,EAAe,kCAAfA,CAAe,MA0DOh9I,EAAAA,sBAAG,CACnC,CAAC,GAAG,CAACg9I,EAAgBY,gBAAiBj9I,EAAAA,KAAEmmJ,KACxC,CAAC,GAAG,CAAC9J,EAAgBI,sBAAuBz8I,EAAAA,KAAEmmJ,KAC9C,CAAC,GAAG,CAAC9J,EAAgBe,YAAap9I,EAAAA,KAAEklE,OACpC,CAAC,GAAG,CAACm3E,EAAgBiB,cAAet9I,EAAAA,KAAEq7D,QACtC,CAAC,GAAG,CAACghF,EAAgBmB,iBAAkBx9I,EAAAA,KAAEq7D,QACzC,CAACghF,EAAgBqB,MAAO19I,EAAAA,KAAEq7D,QAC1B,CAAC,GAAG,CAACghF,EAAgBE,eAAgBv8I,EAAAA,KAAEklE,OACvC,CAAC,GAAG,CAACm3E,EAAgB7lF,mBAAoBx2D,EAAAA,KAAEklE,OAC3C,CAACm3E,EAAgByB,WAAY99I,EAAAA,KAAEklE,OAC/B,CAACm3E,EAAgB2F,aAAchiJ,EAAAA,KAAEomJ,YACjC,CAAC/J,EAAgBqF,mBAAoB1hJ,EAAAA,KAAEqmJ,aACvC,CAAChK,EAAgBiK,iBAAkBtmJ,EAAAA,KAAEq7D,QACrC,CAACghF,EAAgBkK,kBAAmBvmJ,EAAAA,KAAEomJ,YACtC,CAAC,GAAG,CAAC/J,EAAgBsD,6BAA8B3/I,EAAAA,KAAEq7D,QACrD,CAAC,GAAG,CAACghF,EAAgBkC,qBAAsBv+I,EAAAA,KAAEwmJ,cAC7C,CAAC,GAAG,CAACnK,EAAgBoC,yBAA0Bz+I,EAAAA,KAAEymJ,eACjD,CAACpK,EAAgB6C,MAAOl/I,EAAAA,KAAEmmJ,KAC1B,CAAC9J,EAAgBsF,MAAO3hJ,EAAAA,KAAE0mJ,WAC1B,CAACrK,EAAgByF,KAAM9hJ,EAAAA,KAAE2mJ,WACzB,CAACtK,EAAgBiE,SAAUtgJ,EAAAA,KAAEmmJ,KAC7B,CAAC9J,EAAgB2E,QAAShhJ,EAAAA,KAAEmmJ,K,8PC3EvB,SAAwC7xC,EAA0CzgF,GACvF,OAA0C,MAAtCygF,EAAgBgH,oBAA8BhH,EAAgBgH,mBAAmB97G,OAAS,EACrFsjJ,EAAkCxuC,EAAgBgH,mBAAoBhH,EAAgBr4F,OACpFq4F,EAAgBj8D,aAClBi6F,EAA4Bh+B,EAAgBj8D,aAAci8D,EAAgBr4F,OAE1E+oD,EAAwBsvC,EAAgBhtB,SAAUzzD,EAASiR,UAEtE,EAdA,IAAAq+D,EAAAlzE,EAAAnqB,EAAA,QACA0zB,EAAA1zB,EAAA,OAGA2iE,EAAA3iE,EAAA,OAYO,SAASg9I,EACdrxC,EACAx1F,GAGA,MAAO,GAAGA,EAAQ,GAAGA,KAAW,KADhBw1F,EAAWzkG,IAAKw0B,GAAOA,EAAE6W,cAAe,EAAAphB,EAAAA,gBAAeuK,EAAE6W,cAAgB7W,EAAE/+B,MAAOyK,KAAK,OACxDyc,aACjD,CAEO,SAAS2oH,EAA4Bj6F,EAA6Bp8B,GAGvE,MADmB,GAAGA,EAAQ,GAAGA,KAAW,MADhC,EAAAgb,EAAAA,gBAAeohB,KAC4B1uB,aAEzD,CAEO,IAAMq7C,EAAuB3lE,EAAAA,yBAAG,EAAAmmG,EAAAA,SACrC,CAACle,EAAkBxiD,KACjB,IAKI7oB,EALE2qI,EAAWt/D,EAAS5uB,MAAM,KAChC,GAAwB,IAApBkuF,EAASpnJ,OAAc,CACzB,IAAAqzI,EAAmCppE,EAAAA,yBAAyB0pE,iBAAiB7rD,EAAUxiD,GAA/E7oB,EAAK42H,EAAL52H,MAAOxZ,EAAIowI,EAAJpwI,KAAM80B,EAASs7G,EAATt7G,UACrB,OAAO86G,EAAqCp2H,EAAOxZ,EAAM80B,EAAWuN,EACtE,CAEA,IAAM+hH,EAAWD,EAAS55I,IAAI,CAAC21G,EAASxiH,KACtC,IAAM2mJ,EAAUnkC,EAAQ5gG,OAAOkgD,QAAQ,QAAS,IAChDkzE,EAAiD1rE,EAAAA,yBAAyB0pE,iBAAiB2T,EAAShiH,GAArFiiH,EAAY5R,EAAnBl5H,MAAqBxZ,EAAI0yI,EAAJ1yI,KAAM80B,EAAS49G,EAAT59G,UACzB,IAANp3B,IACF8b,EAAQ8qI,GAEV,IAAM7vI,GAAW,EAAA8vI,EAAAA,8BAA6BliH,EAAWriC,EAAM80B,GAC/D,OAAOrgB,GAAW,EAAA+f,EAAAA,gBAAe/f,GAAYzU,IAE/C,MAAO,GAAGwZ,EAAQ,GAAGA,KAAW,KAAK4qI,EAAS35I,KAAK,OAAOyc,eAE5D,CAAE87E,QAAS,MAGA4sC,EAAoChzI,EAAAA,sCAAG,EAAAmmG,EAAAA,SAClD,CAACvpF,EAA2BxZ,EAAc80B,EAA+BuN,KACvE,IAAM5tB,GAAW,EAAA8vI,EAAAA,8BAA6BliH,EAAWriC,EAAM80B,GAG/D,MADmB,GAAGtb,EAAQ,GAAGA,KAAW,KADhC/E,GAAW,EAAA+f,EAAAA,gBAAe/f,GAAYzU,IACKknB,eAGzD,CACE87E,QAAS,K,mJC3DbywC,EAAApwI,EAAA,OACA4uD,EAAA5uD,EAAA,OACAy8C,EAAAz8C,EAAA,OAOAg0B,EAAAh0B,EAAA,OAMA8T,EAAA9T,EAAA,OACAq9F,EAAAlzE,EAAAnqB,EAAA,QAIMmhJ,EAAwD,CAAC,EAEzDC,GAAmB,EAAA1hD,EAAAA,SAAS7vC,GAAyB4O,EAAAA,OAAkBjwD,MAAMqhD,GAAS,CAAE8vC,QAAS,MAIjG0hD,GAAsB,EAAA3hD,EAAAA,SAC1B,CAAC4hD,EAAiBC,EAAqBC,EAAoBC,EAAsBC,KAC/EA,KACO,GAET,CAAE/hD,QAAS,IAAKgiD,aAAeh9I,GAASA,EAAKlI,MAAM,EAAG,KAKxD,SAASmlJ,EAAernJ,GACtB,OAAOwB,OAAOkC,eAAe1D,KAAWwB,OAAON,SACjD,CAEA,IAAMomJ,GAAqB,EAAAniD,EAAAA,SACzB,CAAC7vC,EAAgBlzD,KACf,IACM6yD,EADO4xF,EAAiBvxF,GACVL,SACpB,GACE,GAAIA,EAAOF,KAAK/mD,KAAK5L,OAASmyD,EAAAA,SAAS+C,SACjCjC,EAAAA,qBAAqBQ,SAASP,EAAQL,EAAOF,QAAU3yD,EACzD,OAAO,QAGJ6yD,EAAOjzD,QAChB,OAAO,GAET,CAAEojG,QAAS,MAGYpmG,EAAAA,aAAA,WAWvB,SAAA44G,EACEtiD,EACAzjD,EACAgrB,EACA04B,EACAC,EACAx+C,EACAw2B,EACA98B,IACA,EAAA1G,EAAAH,SAAA,KAAA+tG,GAAA,KAXMhiD,QAAyC,GAY/Cv1D,KAAKi1D,OAASA,EACdj1D,KAAKwR,MAAQA,EACbxR,KAAKw8B,YAAcA,EACnBx8B,KAAKk1D,SAAWA,EAChBl1D,KAAKm1D,IAAMA,EACXn1D,KAAK2W,MAAQA,EACb3W,KAAKmtC,QAAUA,EACfntC,KAAKqQ,KAAOA,CACd,CAAC,SAAA9G,EAAAC,SAAA+tG,EAAA,EAAAl2G,IAAA,QAAA1B,MA+BD,WACE,IAAMunJ,EAAkBV,EAAiBxmJ,KAAKi1D,QACxC8jF,EAAuB,IAAI/jF,EAAAA,qBAC/Bh1D,KAAKi1D,OACLj1D,KAAKwR,MACLxR,KAAKw8B,YACLx8B,KAAKk1D,SACLl1D,KAAKm1D,IACLn1D,KAAKmtC,QACLntC,KAAK2W,MACL3W,KAAKqQ,MAEDy2I,EAAWA,IAAY/N,EAAqBnlI,MAAMszI,EAAgBhZ,SAYxE,OAXI8Y,EAAehnJ,KAAKwR,QAAUw1I,EAAehnJ,KAAKk1D,UACpDuxF,EACEzmJ,KAAKi1D,OACLj1D,KAAKqQ,KACLlP,OAAOuB,KAAK1C,KAAKwR,OAAOw4D,OAAOx9D,KAAK,MACpCrL,OAAOuB,KAAK1C,KAAKk1D,UAAU8U,OAAOx9D,KAAK,MACvCs6I,GAGFA,IAEK,CAAC/N,EAAsBmO,EAChC,GAAC,CAAA7lJ,IAAA,sBAAA1B,MAED,SAA2B8sD,GACzB,IAAMy6F,EAAkBV,EAAiBxmJ,KAAKi1D,QAW9C,OAV6B,IAAID,EAAAA,qBAC/Bh1D,KAAKi1D,OACLj1D,KAAKwR,MACLxR,KAAKw8B,YACLx8B,KAAKk1D,SACLl1D,KAAKm1D,IACLn1D,KAAKmtC,QACLntC,KAAK2W,MACL3W,KAAKqQ,MAEqB4gI,oBAAoBiW,EAAgBhZ,QAASzhF,EAC3E,GAAC,CAAAprD,IAAA,uBAAA1B,MAED,WACE,IAAMunJ,EAAkBV,EAAiBxmJ,KAAKi1D,QAW9C,OAV6B,IAAID,EAAAA,qBAC/Bh1D,KAAKi1D,OACLj1D,KAAKwR,MACLxR,KAAKw8B,YACLx8B,KAAKk1D,SACLl1D,KAAKm1D,IACLn1D,KAAKmtC,QACLntC,KAAK2W,MACL3W,KAAKqQ,MAEqBiuI,qBAAqB4I,EAAgBhZ,QACnE,GAAC,CAAA7sI,IAAA,UAAA1B,MAqDD,SAAegO,GACb,IAAAw5I,EAAgDnnJ,KAAK4T,QAAOwzI,GAAA,EAAAttI,EAAAtQ,SAAA29I,EAAA,GAArDpO,EAAoBqO,EAAA,GAAEF,EAAeE,EAAA,GACtCC,EAAYtO,EAAqBxgF,SAAS2uF,EAAgBhZ,SAC5Dv/H,EAAS1P,MAAME,QAAQkoJ,GAAaA,EAAU,GAAKA,EACzC,MAAV14I,IACFA,EAAS,GAEX,IAAM24I,EAAStnJ,KAAKunJ,cAAc55I,EAAMgB,GAGxC,OAFA3O,KAAKu1D,QAAUwjF,EAAqBxjF,QAE7B+xF,CACT,GAAC,CAAAjmJ,IAAA,aAAA1B,MAED,WACE,OAAOK,KAAKu1D,OACd,GAAC,CAAAl0D,IAAA,gBAAA1B,MAED,SACEgO,EACAgB,GAEA,GAAa,SAAThB,GAA4B,UAATA,EAAkB,CACvC,GAAsB,iBAAXgB,EACT,MAAM,IAAIwlD,EAAAA,uBAAuB,qCAAsC,EAAG,EAAG,EAAG,EAAG,CACjFxmD,KAAM,kBACNsB,KAAM,CAAEisD,SAAU,YAEf,OAAIvsD,EAAS,EACX,EAEAA,CAEX,CAAO,GAAa,QAAThB,EAAgB,CACzB,GAAsB,iBAAXgB,EACT,MAAM,IAAIwlD,EAAAA,uBAAuB,qCAAsC,EAAG,EAAG,EAAG,EAAG,CACjFxmD,KAAM,kBACNsB,KAAM,CAAEisD,SAAU,YAGpB,MAA6D,GAAtDz0C,KAAKC,MAAMD,KAAKu0C,IAAI,GAAIv0C,KAAKw0C,IAAI,EAAGtsD,IAAW,GAE1D,CAAO,GAAa,WAAThB,EAAmB,CAC5B,GAAsB,kBAAXgB,GAA0C,iBAAXA,EACxC,MAAM,IAAIwlD,EAAAA,uBAAuB,2DAA4D,EAAG,EAAG,EAAG,EAAG,CACvGxmD,KAAM,kBACNsB,KAAM,CAAEisD,SAAU,gCAEf,MAAsB,iBAAXvsD,GACT,EAAA6mB,EAAAA,cAAa7mB,EAAQ3O,KAAK2W,OAE7BhI,EAAOhP,MAAQ,GACV,EAAA61B,EAAAA,cAAa,EAAGx1B,KAAK2W,OAErBhI,CAGb,CACE,OAAOA,CAEX,IAAC,EAAAtN,IAAA,UAAA1B,MApMD,SACEs1D,EACAzjD,EACAwoC,EACA7mB,EACAwkB,GAEA,IAAMohG,EAAuB,IAAIxhC,EAC/BtiD,EACAzjD,EACA,CAAC,GACD,EAAA24G,EAAAA,oCAAmCnwE,EAAS7mB,IAC5C,EAAAikF,EAAAA,gCAA+BjkF,GAC/BA,EAASxc,MACT,CAAEghC,aAAcA,EAAc0d,KAAMliC,EAASxc,MAAO+wD,OAAQ,IAC5D,WAEF,IACEqxE,EAAqBnlI,OACvB,CAAE,MAAO7U,GACP,GAAIA,aAAao1D,EAAAA,uBACf,OAAOp1D,EAEP,MAAMA,CAEV,CAEF,GAAC,CAAAsC,IAAA,mBAAA1B,MA2DD,SAA+Bs1D,EAAgBlzD,GAC7C,IACM6yD,EADO4xF,EAAiBvxF,GACVL,SACpB,GACE,GAAIA,EAAOF,KAAK/mD,KAAK5L,OAASmyD,EAAAA,SAAS8E,cAAe,CACpD,IAAM8K,EAAclP,EAAOF,KAAKsC,SAAS9C,EAAAA,SAAS+C,SAClD,GAAmB,MAAf6M,GACY9O,EAAAA,qBAAqBQ,SAASP,EAAQ6O,KACtC/hE,EACZ,OAAO,CAGb,QACO6yD,EAAOjzD,QAChB,OAAO,CACT,GAAC,CAAAN,IAAA,aAAA1B,MAED,SAAyBs1D,EAAgBlzD,GAEvC,OAA8B,IAA1BkzD,EAAO9xD,QAAQpB,IAGZklJ,EAAmBhyF,EAAQlzD,EACpC,GAAC,CAAAV,IAAA,OAAA1B,MAED,SAAsBshC,EAAaumH,EAAgC5+H,EAAiB9M,GAClF,IAAInc,EACJ,IACEA,EAAQshC,GACV,CAAE,MAAOliC,GACP,GAAK+c,KAAY/c,aAAao1D,EAAAA,wBAU5B,MAAMp1D,EATN,IAAM0oJ,EAAclB,EAAqBxnJ,EAAEoQ,SAC3CyxB,QAAQhzB,MAAM7O,IACK,MAAf0oJ,GAAuBA,EAAc53I,KAAKC,MAAQ,QACpD,EAAAuP,EAAAA,cAAamoI,EAASzoJ,IACtBiB,KAAK0nJ,YAAY,qCAAsC3oJ,GACvDwnJ,EAAqBxnJ,EAAEoQ,SAAWU,KAAKC,OAEzCnQ,EAAQipB,CAIZ,CACA,OAAOjpB,CACT,GAAC,CAAA0B,IAAA,cAAA1B,MAoED,SAA2Bu/G,EAAatxG,GACtC,GAAuB,oBAAZw/B,QAAX,CAGA,IAAMl9B,EAAU,CACdtC,MAAOA,EAAQ,CAAEuB,QAASvB,EAAMuB,QAASpN,KAAM6L,EAAM7L,KAAM8nD,MAAOj8C,EAAMi8C,YAAU3kD,GAEpFkoC,QAAQx/B,MAAMsxG,EAAKhvG,EAJnB,CAKF,IAAC,CA7OsB,E,4FCvDkBvR,EAAAA,qBAAG,CAC5C48B,MAAO,UACPyQ,MAAO,GACP8e,OAAQ,aACRuB,SAAU,cACVrB,YACE,8QACFD,iBAAkB,8BAClB3hD,IAAK,qEACL8hD,KAAM,GACN9mB,UAAW,GACXriC,KAAM,yBACN8mE,KAAM,GACN/+D,GAAI,gBACJirB,QAAS,CACPwG,MAAO,UACPx5B,KAAM,yBACNiqC,MAAO,CACL,CACEjqC,KAAM,SACN8mE,KAAM,CACJ,CACE9mE,KAAM,YACNknE,aACE,iNAEJ,CACElnE,KAAM,YACNknE,aACE,gNAEJ,CACElnE,KAAM,YACNknE,aAAc,gGAIpB,CACElnE,KAAM,SACN8mE,KAAM,CACJ,CACE9mE,KAAM,YACNknE,aAAc,6FAEhB,CACElnE,KAAM,YACNknE,aAAc,8FAEhB,CACElnE,KAAM,YACNknE,aAAc,iGAMxB+D,QAAS,EACT/hB,aAAa,E,uqEC1Df,IAAAnqB,EAA6B,SAAA/hC,GAAA,sBAAAuoB,QAAA,KAAA1oB,EAAA,IAAA0oB,QAAA,IAAAA,OAAA,iBAAAvoB,GAAA,GAAAA,GAAAA,EAAAG,WAAA,OAAAH,EAAA,IAAAQ,EAAAE,EAAAoE,EAAA,CAAAP,UAAA,KAAAkG,QAAAzK,GAAA,UAAAA,GAAA,iBAAAA,GAAA,mBAAAA,EAAA,OAAA8E,EAAA,GAAAtE,EAAAX,EAAA,IAAAW,EAAAqF,IAAA7F,GAAA,OAAAQ,EAAAsF,IAAA9F,GAAAQ,EAAAuF,IAAA/F,EAAA8E,EAAA,SAAA0jB,KAAAxoB,EAAA,YAAAwoB,GAAA,GAAAnlB,eAAAV,KAAA3C,EAAAwoB,MAAA9nB,GAAAF,EAAA4B,OAAAC,iBAAAD,OAAA0B,yBAAA9D,EAAAwoB,MAAA9nB,EAAAoF,KAAApF,EAAAqF,KAAAvF,EAAAsE,EAAA0jB,EAAA9nB,GAAAoE,EAAA0jB,GAAAxoB,EAAAwoB,IAAA,OAAA1jB,CAAA,EAAA9E,EAAA,CAA7ByoB,CAAApiB,EAAA,QAIa0rE,EAAUnyE,EAAAA,WAAG,CACxB,UACA,QACA,WACA,QACA,OACA,aACA,aACA,kBACA,eACA,QACA,WAyKWq+H,GAtKar+H,EAAAA,cAAG,CAC3B,UACA,cACA,iBACA,gBACA,YACA,cACA,WACA,aACA,sBACA,qBACA,oBACA,cACA,YACA,gBACA,UACA,WACA,sBACA,SACA,iBACA,cACA,gBACA,mBACA,aACA,sBACA,4BACA,WACA,WACA,aACA,SACA,QACA,eACA,oBACA,kBACA,SACA,UACA,WACA,mBACA,oBACA,gBACA,kBACA,oBACA,WACA,gBACA,eACA,aACA,aACA,cACA,mBACA,gBACA,cACA,cACA,YACA,aACA,kBACA,YACA,aACA,kBACA,gBACA,UACA,cACA,cACA,YACA,oBACA,kBACA,oBACA,cACA,aACA,cACA,uBACA,gBACA,iBACA,WACA,YACA,cACA,kBACA,yBACA,gBACA,YACA,mBACA,gBACA,cACA,iBACA,eACA,eACA,WACA,QACA,eACA,kBACA,WACA,gBACA,gBACA,gBACA,UACA,aACA,cACA,QACA,aACA,cACA,eACA,aACA,SACA,WACA,YACA,SACA,gBACA,cACA,aACA,+BACA,wBACA,mBACA,eACA,eACA,mBACA,SACA,eACA,kBACA,gBACA,iBACA,sBACA,yBACA,YACA,oBACA,gBACA,QACA,WACA,aACA,kBACA,gBACA,YACA,kBACA,oBACA,4BACA,+BACA,+BACA,qBACA,QACA,eACA,SACA,aACA,aACA,YACA,QACA,WACA,oBACA,SACA,mBACA,sBACA,eACA,uBACA,WACA,UACA,WACA,YACA,gBACA,kBACA,aACA,mBACA,kBACA,aACA,MACA,aACA,YACA,cACA,gBAE2BA,EAAAA,iBAAG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,GACE7D,EACA7C,EACA2G,EACAC,GAEM,KAARxoE,GACEqoE,GAA8BzG,EAAapkC,UAAWokC,GAU9D,CACA,SAASkH,GACPb,EACAxB,EACAsC,EACAC,EACAd,GAKA,IAHAA,EACEA,OACmC,MAA3BzB,EAAYvpB,gBAAyB,GAC1CupB,EAAcA,EAAY31K,MAAO,OAAS21K,GAAe,CAC5D,IAAIhC,EAAewD,EACjBrG,EAAe6E,EACf8B,EAAiBQ,EACjBP,EAAuBQ,EACvBhpE,EAAQ4hE,EAAa5hE,MACvB,OAAQ4hE,EAAa53H,KACnB,KAAK,EACL,KAAK,GACL,KAAK,GACH8+H,GACErE,EACA7C,EACA2G,EACAC,EACAN,GAEFvG,GAA0B,EAAGC,GAC7B,MACF,KAAK,GACH,MACF,KAAK,GACH,IAAIlhB,EAAWkhB,EAAat5B,UAC5B,OAASs5B,EAAahkC,cACK,EAAvB8iB,EAASnE,YACPusB,GACErE,EACA7C,EACA2G,EACAC,EACAN,GAEFW,GACEpE,EACA7C,IAEFlhB,EAASnE,aAAe,EAC1BusB,GACErE,EACA7C,EACA2G,EACAC,EACAN,IAENA,GACU,KAARloE,GACAmoE,GACEvG,EAAapkC,UACbokC,GAEJ,MACF,KAAK,GACHkH,GACErE,EACA7C,EACA2G,EACAC,EACAN,GAEFA,GACU,KAARloE,GACAqoE,GAA8BzG,EAAapkC,UAAWokC,GACxD,MACF,QACEkH,GACErE,EACA7C,EACA2G,EACAC,EACAN,GAGNzB,EAAcA,EAAYvoC,OAC5B,CACF,CACA,SAAS2qC,GACPZ,EACAxB,GAEA,GAA+B,MAA3BA,EAAYvpB,aACd,IAAKupB,EAAcA,EAAY31K,MAAO,OAAS21K,GAAe,CAC5D,IAAIhC,EAAewD,EACjBrG,EAAe6E,EACfzmE,EAAQ4hE,EAAa5hE,MACvB,OAAQ4hE,EAAa53H,KACnB,KAAK,GACH6+H,GAAwCpE,EAAc7C,GAC9C,KAAR5hE,GACEmoE,GACEvG,EAAapkC,UACbokC,GAEJ,MACF,KAAK,GACHiH,GAAwCpE,EAAc7C,GAC9C,KAAR5hE,GACEqoE,GAA8BzG,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","sources":["webpack:///webpack/runtime/load script","webpack:///./src/aiPrompt.tsx","webpack:///./node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack:///./node_modules/@babel/runtime/helpers/arrayWithHoles.js","webpack:///./node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack:///./node_modules/@babel/runtime/helpers/asyncToGenerator.js","webpack:///./node_modules/@babel/runtime/helpers/classCallCheck.js","webpack:///./node_modules/@babel/runtime/helpers/construct.js","webpack:///./node_modules/@babel/runtime/helpers/createClass.js","webpack:///./node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelperLoose.js","webpack:///./node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/esm/extends.js","webpack:///./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack:///./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack:///./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack:///./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectSpread2.js","webpack:///./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","webpack:///./node_modules/@babel/runtime/helpers/getPrototypeOf.js","webpack:///./node_modules/@babel/runtime/helpers/inherits.js","webpack:///./node_modules/@babel/runtime/helpers/interopRequireDefault.js","webpack:///./node_modules/@babel/runtime/helpers/isNativeFunction.js","webpack:///./node_modules/@babel/runtime/helpers/isNativeReflectConstruct.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","webpack:///./node_modules/@babel/runtime/helpers/nonIterableRest.js","webpack:///./node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js","webpack:///./node_modules/@babel/runtime/helpers/objectWithoutProperties.js","webpack:///./node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js","webpack:///./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","webpack:///./node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack:///./node_modules/@babel/runtime/helpers/slicedToArray.js","webpack:///./node_modules/@babel/runtime/helpers/toArray.js","webpack:///./node_modules/@babel/runtime/helpers/toPrimitive.js","webpack:///./node_modules/@babel/runtime/helpers/toPropertyKey.js","webpack:///./node_modules/@babel/runtime/helpers/typeof.js","webpack:///./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack:///./node_modules/@babel/runtime/helpers/wrapNativeSuper.js","webpack:///./src/api/service.ts","webpack:///./src/components/account.tsx","webpack:///./src/components/button.tsx","webpack:///./src/components/footerPage.tsx","webpack:///./src/components/icons/iconApple.tsx","webpack:///./src/components/icons/iconClose.tsx","webpack:///./src/components/icons/iconCloseCircleOutline.tsx","webpack:///./src/components/icons/iconDiscord.tsx","webpack:///./src/components/icons/iconDoc.tsx","webpack:///./src/components/icons/iconDumbbell.tsx","webpack:///./src/components/icons/iconGoogle.tsx","webpack:///./src/components/icons/iconGooglePlay.tsx","webpack:///./src/components/icons/iconHamburger.tsx","webpack:///./src/components/icons/iconInstagramFlat.tsx","webpack:///./src/components/icons/iconMoon.tsx","webpack:///./src/components/icons/iconReddit.tsx","webpack:///./src/components/icons/iconSpinner.tsx","webpack:///./src/components/icons/iconSun.tsx","webpack:///./src/components/icons/iconSvg.tsx","webpack:///./src/components/icons/iconUser.tsx","webpack:///./src/components/icons/iconYoutube.tsx","webpack:///./src/components/input.tsx","webpack:///./src/components/linkButton.tsx","webpack:///./src/components/modal.tsx","webpack:///./src/components/onelink.tsx","webpack:///./src/components/pageWrapper.tsx","webpack:///./src/components/primitives/pressable.tsx","webpack:///./src/components/primitives/svg.tsx","webpack:///./src/components/primitives/text.tsx","webpack:///./src/components/themeToggle.tsx","webpack:///./src/components/topNavMenu.tsx","webpack:///./src/ducks/reducer.ts","webpack:///./src/ducks/thunks.ts","webpack:///./src/generated/whatsnew.ts","webpack:///./src/lib/healthSync.ts","webpack:///./src/lib/importexporter.ts","webpack:///./src/liftoscript.ts","webpack:///./src/liftoscriptEvaluator.ts","webpack:///./src/liftoscriptExerciseName.ts","webpack:///./src/liftoscriptFns.ts","webpack:///./src/liftoscriptPrint.ts","webpack:///./src/migrations/migrations.ts","webpack:///./src/migrations/runner.ts","webpack:///./src/models/account.ts","webpack:///./src/models/adminDebug.ts","webpack:///./src/models/editProgram.ts","webpack:///./src/models/editProgramLenses.ts","webpack:///./src/models/editStats.ts","webpack:///./src/models/equipment.ts","webpack:///./src/models/equipmentDefaults.ts","webpack:///./src/models/equipmentLegacyDefaults.ts","webpack:///./src/models/equipmentLoadSolver.ts","webpack:///./src/models/equipmentLoadText.ts","webpack:///./src/models/equipmentSetup.ts","webpack:///./src/models/equipmentSetupEdit.ts","webpack:///./src/models/equipmentUnits.ts","webpack:///./src/models/exercise.ts","webpack:///./src/models/exerciseImage.ts","webpack:///./src/models/history.ts","webpack:///./src/models/importSession.ts","webpack:///./src/models/length.ts","webpack:///./src/models/muscle.ts","webpack:///./src/models/muscleGroupSplit.ts","webpack:///./src/models/muscleRangePresets.ts","webpack:///./src/models/nativeEffects.ts","webpack:///./src/models/onloadModal.ts","webpack:///./src/models/pp.ts","webpack:///./src/models/program.ts","webpack:///./src/models/programExercise.ts","webpack:///./src/models/programSet.ts","webpack:///./src/models/programToPlanner.ts","webpack:///./src/models/progress.ts","webpack:///./src/models/screen.ts","webpack:///./src/models/set.ts","webpack:///./src/models/settings.ts","webpack:///./src/models/state.ts","webpack:///./src/models/stats.ts","webpack:///./src/models/storage.ts","webpack:///./src/models/timedSet.ts","webpack:///./src/models/ungroupedMuscles.ts","webpack:///./src/models/versionTracker.ts","webpack:///./src/models/versionTracker/types.ts","webpack:///./src/models/versionTracker/utils.ts","webpack:///./src/models/versionTracker/versionTrackerDiffVersions.ts","webpack:///./src/models/versionTracker/versionTrackerExtractByVersions.ts","webpack:///./src/models/versionTracker/versionTrackerFillVersions.ts","webpack:///./src/models/versionTracker/versionTrackerMergeByVersions.ts","webpack:///./src/models/versionTracker/versionTrackerMergeVersions.ts","webpack:///./src/models/versionTracker/versionTrackerUpdateVersions.ts","webpack:///./src/models/watchStorageAccount.ts","webpack:///./src/models/weight.ts","webpack:///./src/models/whatsnew.tsx","webpack:///./src/models/whatsnewParser.ts","webpack:///./src/models/whatsnewUtils.ts","webpack:///./src/models/workoutOutcome.ts","webpack:///./src/models/workoutTimeEstimate.ts","webpack:///./src/navigation/navUtils.ts","webpack:///./src/pages/ai/aiPromptContent.tsx","webpack:///./src/pages/planner/models/plannerProgram.ts","webpack:///./src/pages/planner/models/plannerProgramExercise.ts","webpack:///./src/pages/planner/models/plannerStateVars.ts","webpack:///./src/pages/planner/plannerEvaluator.ts","webpack:///./src/pages/planner/plannerExerciseEvaluator.ts","webpack:///./src/pages/planner/plannerExerciseEvaluatorText.ts","webpack:///./src/pages/planner/plannerExerciseParser.ts","webpack:///./src/pages/planner/plannerExerciseStyles.ts","webpack:///./src/pages/planner/plannerKey.tsx","webpack:///./src/parser.ts","webpack:///./src/programs/basicBeginnerProgram.ts","webpack:///./src/types.ts","webpack:///./src/utils/analytics.ts","webpack:///./src/utils/appAttribution.ts","webpack:///./src/utils/appleAuth.ts","webpack:///./src/utils/clickTracking.tsx","webpack:///./src/utils/clipboard.tsx","webpack:///./src/utils/collection.ts","webpack:///./src/utils/collector.ts","webpack:///./src/utils/csv.ts","webpack:///./src/utils/date.ts","webpack:///./src/utils/deviceId.ts","webpack:///./src/utils/diagnostics.ts","webpack:///./src/utils/dialog.ts","webpack:///./src/utils/encoder.ts","webpack:///./src/utils/eventManager.ts","webpack:///./src/utils/exporter.ts","webpack:///./src/utils/generator.ts","webpack:///./src/utils/googleAccessToken.ts","webpack:///./src/utils/hermesProfile.ts","webpack:///./src/utils/historyDelta.ts","webpack:///./src/utils/historyIds.ts","webpack:///./src/utils/hydrate.ts","webpack:///./src/utils/iapHelpers.ts","webpack:///./src/utils/importFromHevy.ts","webpack:///./src/utils/importFromLiftosaur.ts","webpack:///./src/utils/importFromLink.ts","webpack:///./src/utils/importTypes.ts","webpack:///./src/utils/inAppReview.ts","webpack:///./src/utils/indexeddb.ts","webpack:///./src/utils/liveActivityManager.ts","webpack:///./src/utils/log.ts","webpack:///./src/utils/math.ts","webpack:///./src/utils/object.ts","webpack:///./src/utils/pageTheme.ts","webpack:///./src/utils/perfEnabled.ts","webpack:///./src/utils/perfSampling.ts","webpack:///./src/utils/perfScorecard.ts","webpack:///./src/utils/perfSetCompleteProbe.ts","webpack:///./src/utils/perfTracker.ts","webpack:///./src/utils/platform.ts","webpack:///./src/utils/posthog.ts","webpack:///./src/utils/pushRegistration.ts","webpack:///./src/utils/rollbar.ts","webpack:///./src/utils/safeLocalStorage.ts","webpack:///./src/utils/scaledSpacings.generated.ts","webpack:///./src/utils/setUtils.ts","webpack:///./src/utils/signIn.ts","webpack:///./src/utils/storeRuntime.ts","webpack:///./src/utils/string.ts","webpack:///./src/utils/subscriptionReceipts.ts","webpack:///./src/utils/subscriptions.ts","webpack:///./src/utils/sync.ts","webpack:///./src/utils/syncAccountMismatch.ts","webpack:///./src/utils/syncBaseline.ts","webpack:///./src/utils/tailwindConfig.ts","webpack:///./src/utils/theme.ts","webpack:///./src/utils/undoingFlag.ts","webpack:///./src/utils/url.ts","webpack:///./src/utils/urlPolyfill.ts","webpack:///./src/utils/useRem.ts","webpack:///./src/utils/watchAuthHandoff.ts","webpack:///./src/utils/watchHost.ts","webpack:///./node_modules/css-in-js-utils/es/assignStyle.js","webpack:///./node_modules/css-in-js-utils/es/camelCaseProperty.js","webpack:///./node_modules/css-in-js-utils/es/hyphenateProperty.js","webpack:///./node_modules/css-in-js-utils/es/cssifyDeclaration.js","webpack:///./node_modules/css-in-js-utils/es/cssifyObject.js","webpack:///./node_modules/css-in-js-utils/es/isPrefixedProperty.js","webpack:///./node_modules/css-in-js-utils/es/isPrefixedValue.js","webpack:///./node_modules/css-in-js-utils/es/isUnitlessProperty.js","webpack:///./node_modules/css-in-js-utils/es/unprefixProperty.js","webpack:///./node_modules/css-in-js-utils/es/normalizeProperty.js","webpack:///./node_modules/css-in-js-utils/es/resolveArrayValue.js","webpack:///./node_modules/css-in-js-utils/es/unprefixValue.js","webpack:///./node_modules/css-in-js-utils/lib/hyphenateProperty.js","webpack:///./node_modules/css-in-js-utils/lib/isPrefixedValue.js","webpack:///./node_modules/culori/src/rgb/parseNumber.js","webpack:///./node_modules/culori/src/colors/named.js","webpack:///./node_modules/culori/src/rgb/parseHex.js","webpack:///./node_modules/culori/src/util/regex.js","webpack:///./node_modules/culori/src/rgb/parseRgbLegacy.js","webpack:///./node_modules/culori/src/converter.js","webpack:///./node_modules/culori/src/_prepare.js","webpack:///./node_modules/culori/src/modes.js","webpack:///./node_modules/culori/src/parse.js","webpack:///./node_modules/culori/src/interpolate/linear.js","webpack:///./node_modules/culori/src/interpolate/piecewise.js","webpack:///./node_modules/culori/src/interpolate/lerp.js","webpack:///./node_modules/culori/src/fixup/alpha.js","webpack:///./node_modules/culori/src/rgb/definition.js","webpack:///./node_modules/culori/src/rgb/parseRgb.js","webpack:///./node_modules/culori/src/rgb/parseNamed.js","webpack:///./node_modules/culori/src/rgb/parseTransparent.js","webpack:///./node_modules/culori/src/a98/convertA98ToXyz65.js","webpack:///./node_modules/culori/src/a98/convertXyz65ToA98.js","webpack:///./node_modules/culori/src/lrgb/convertRgbToLrgb.js","webpack:///./node_modules/culori/src/xyz65/convertRgbToXyz65.js","webpack:///./node_modules/culori/src/lrgb/convertLrgbToRgb.js","webpack:///./node_modules/culori/src/xyz65/convertXyz65ToRgb.js","webpack:///./node_modules/culori/src/a98/definition.js","webpack:///./node_modules/culori/src/util/normalizeHue.js","webpack:///./node_modules/culori/src/fixup/hue.js","webpack:///./node_modules/culori/src/cubehelix/constants.js","webpack:///./node_modules/culori/src/cubehelix/convertRgbToCubehelix.js","webpack:///./node_modules/culori/src/difference.js","webpack:///./node_modules/culori/src/average.js","webpack:///./node_modules/culori/src/cubehelix/definition.js","webpack:///./node_modules/culori/src/cubehelix/convertCubehelixToRgb.js","webpack:///./node_modules/culori/src/lch/convertLabToLch.js","webpack:///./node_modules/culori/src/lch/convertLchToLab.js","webpack:///./node_modules/culori/src/xyz65/constants.js","webpack:///./node_modules/culori/src/constants.js","webpack:///./node_modules/culori/src/lab65/convertLab65ToXyz65.js","webpack:///./node_modules/culori/src/lab65/convertLab65ToRgb.js","webpack:///./node_modules/culori/src/lab65/convertXyz65ToLab65.js","webpack:///./node_modules/culori/src/lab65/convertRgbToLab65.js","webpack:///./node_modules/culori/src/dlch/constants.js","webpack:///./node_modules/culori/src/dlch/convertDlchToLab65.js","webpack:///./node_modules/culori/src/dlch/convertLab65ToDlch.js","webpack:///./node_modules/culori/src/dlab/definition.js","webpack:///./node_modules/culori/src/dlch/definition.js","webpack:///./node_modules/culori/src/hsi/definition.js","webpack:///./node_modules/culori/src/hsi/convertHsiToRgb.js","webpack:///./node_modules/culori/src/hsi/convertRgbToHsi.js","webpack:///./node_modules/culori/src/hsl/parseHslLegacy.js","webpack:///./node_modules/culori/src/hsl/definition.js","webpack:///./node_modules/culori/src/hsl/convertHslToRgb.js","webpack:///./node_modules/culori/src/hsl/convertRgbToHsl.js","webpack:///./node_modules/culori/src/hsl/parseHsl.js","webpack:///./node_modules/culori/src/util/hue.js","webpack:///./node_modules/culori/src/hsv/convertHsvToRgb.js","webpack:///./node_modules/culori/src/hsv/convertRgbToHsv.js","webpack:///./node_modules/culori/src/hsv/definition.js","webpack:///./node_modules/culori/src/hwb/definition.js","webpack:///./node_modules/culori/src/hwb/convertHwbToRgb.js","webpack:///./node_modules/culori/src/hwb/convertRgbToHwb.js","webpack:///./node_modules/culori/src/hwb/parseHwb.js","webpack:///./node_modules/culori/src/hdr/transfer.js","webpack:///./node_modules/culori/src/itp/convertItpToXyz65.js","webpack:///./node_modules/culori/src/hdr/constants.js","webpack:///./node_modules/culori/src/itp/convertXyz65ToItp.js","webpack:///./node_modules/culori/src/itp/definition.js","webpack:///./node_modules/culori/src/jab/convertXyz65ToJab.js","webpack:///./node_modules/culori/src/jab/convertJabToXyz65.js","webpack:///./node_modules/culori/src/jab/convertRgbToJab.js","webpack:///./node_modules/culori/src/jab/convertJabToRgb.js","webpack:///./node_modules/culori/src/jab/definition.js","webpack:///./node_modules/culori/src/jch/convertJabToJch.js","webpack:///./node_modules/culori/src/jch/convertJchToJab.js","webpack:///./node_modules/culori/src/jch/definition.js","webpack:///./node_modules/culori/src/xyz50/constants.js","webpack:///./node_modules/culori/src/lab/convertLabToXyz50.js","webpack:///./node_modules/culori/src/xyz50/convertXyz50ToRgb.js","webpack:///./node_modules/culori/src/lab/convertLabToRgb.js","webpack:///./node_modules/culori/src/xyz50/convertRgbToXyz50.js","webpack:///./node_modules/culori/src/lab/convertXyz50ToLab.js","webpack:///./node_modules/culori/src/lab/convertRgbToLab.js","webpack:///./node_modules/culori/src/lab/definition.js","webpack:///./node_modules/culori/src/lab/parseLab.js","webpack:///./node_modules/culori/src/lab65/definition.js","webpack:///./node_modules/culori/src/lch/definition.js","webpack:///./node_modules/culori/src/lch/parseLch.js","webpack:///./node_modules/culori/src/lch65/definition.js","webpack:///./node_modules/culori/src/lchuv/convertLuvToLchuv.js","webpack:///./node_modules/culori/src/lchuv/convertLchuvToLuv.js","webpack:///./node_modules/culori/src/luv/convertXyz50ToLuv.js","webpack:///./node_modules/culori/src/luv/convertLuvToXyz50.js","webpack:///./node_modules/culori/src/lchuv/definition.js","webpack:///./node_modules/culori/src/lrgb/definition.js","webpack:///./node_modules/culori/src/luv/definition.js","webpack:///./node_modules/culori/src/oklab/convertLrgbToOklab.js","webpack:///./node_modules/culori/src/oklab/convertRgbToOklab.js","webpack:///./node_modules/culori/src/oklab/convertOklabToLrgb.js","webpack:///./node_modules/culori/src/oklab/convertOklabToRgb.js","webpack:///./node_modules/culori/src/okhsl/helpers.js","webpack:///./node_modules/culori/src/okhsl/convertOklabToOkhsl.js","webpack:///./node_modules/culori/src/okhsl/convertOkhslToOklab.js","webpack:///./node_modules/culori/src/okhsl/modeOkhsl.js","webpack:///./node_modules/culori/src/okhsv/convertOklabToOkhsv.js","webpack:///./node_modules/culori/src/okhsv/convertOkhsvToOklab.js","webpack:///./node_modules/culori/src/okhsv/modeOkhsv.js","webpack:///./node_modules/culori/src/oklab/definition.js","webpack:///./node_modules/culori/src/oklab/parseOklab.js","webpack:///./node_modules/culori/src/oklch/definition.js","webpack:///./node_modules/culori/src/oklch/parseOklch.js","webpack:///./node_modules/culori/src/p3/convertP3ToXyz65.js","webpack:///./node_modules/culori/src/p3/convertXyz65ToP3.js","webpack:///./node_modules/culori/src/p3/definition.js","webpack:///./node_modules/culori/src/prophoto/convertXyz50ToProphoto.js","webpack:///./node_modules/culori/src/prophoto/convertProphotoToXyz50.js","webpack:///./node_modules/culori/src/prophoto/definition.js","webpack:///./node_modules/culori/src/rec2020/convertXyz65ToRec2020.js","webpack:///./node_modules/culori/src/rec2020/convertRec2020ToXyz65.js","webpack:///./node_modules/culori/src/rec2020/definition.js","webpack:///./node_modules/culori/src/xyb/constants.js","webpack:///./node_modules/culori/src/xyb/convertRgbToXyb.js","webpack:///./node_modules/culori/src/xyb/convertXybToRgb.js","webpack:///./node_modules/culori/src/xyb/definition.js","webpack:///./node_modules/culori/src/xyz50/definition.js","webpack:///./node_modules/culori/src/xyz65/definition.js","webpack:///./node_modules/culori/src/xyz65/convertXyz65ToXyz50.js","webpack:///./node_modules/culori/src/xyz65/convertXyz50ToXyz65.js","webpack:///./node_modules/culori/src/yiq/definition.js","webpack:///./node_modules/culori/src/yiq/convertYiqToRgb.js","webpack:///./node_modules/culori/src/yiq/convertRgbToYiq.js","webpack:///./node_modules/culori/src/formatter.js","webpack:///./node_modules/culori/src/index.js","webpack:///./node_modules/deepmerge/dist/cjs.js","webpack:///./node_modules/dequal/dist/index.js","webpack:///./node_modules/fbjs/lib/emptyFunction.js","webpack:///./node_modules/fbjs/lib/invariant.js","webpack:///./node_modules/fbjs/lib/warning.js","webpack:///./node_modules/hyphenate-style-name/index.js","webpack:///./node_modules/inline-style-prefixer/lib/createPrefixer.js","webpack:///./node_modules/inline-style-prefixer/lib/plugins/crossFade.js","webpack:///./node_modules/inline-style-prefixer/lib/plugins/imageSet.js","webpack:///./node_modules/inline-style-prefixer/lib/plugins/logical.js","webpack:///./node_modules/inline-style-prefixer/lib/plugins/position.js","webpack:///./node_modules/inline-style-prefixer/lib/plugins/sizing.js","webpack:///./node_modules/inline-style-prefixer/lib/plugins/transition.js","webpack:///./node_modules/inline-style-prefixer/lib/utils/addNewValuesOnly.js","webpack:///./node_modules/inline-style-prefixer/lib/utils/capitalizeString.js","webpack:///./node_modules/inline-style-prefixer/lib/utils/isObject.js","webpack:///./node_modules/inline-style-prefixer/lib/utils/prefixProperty.js","webpack:///./node_modules/inline-style-prefixer/lib/utils/prefixValue.js","webpack:///./node_modules/lens-shmens/dist/index.js","webpack:///./node_modules/lens-shmens/dist/utils/object.js","webpack:///./node_modules/micro-memoize/dist/micro-memoize.js","webpack:///./node_modules/nullthrows/nullthrows.js","webpack:///./node_modules/papaparse/papaparse.min.js","webpack:///./node_modules/react-dom/cjs/react-dom-client.production.js","webpack:///./node_modules/react-dom/cjs/react-dom.production.js","webpack:///./node_modules/react-dom/client.js","webpack:///./node_modules/react-dom/index.js","webpack:///./node_modules/react-native-web/dist/exports/Appearance/index.js","webpack:///./node_modules/react-native-web/dist/exports/BackHandler/index.js","webpack:///./node_modules/react-native-web/dist/exports/DeviceEventEmitter/index.js","webpack:///./node_modules/react-native-web/dist/exports/Dimensions/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/bezier.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/Easing.js","webpack:///./node_modules/react-native-web/dist/exports/Easing/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/deepDiffer/index.js","webpack:///./node_modules/react-native-web/node_modules/memoize-one/dist/memoize-one.esm.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/FlatList/index.js","webpack:///./node_modules/react-native-web/dist/exports/FlatList/index.js","webpack:///./node_modules/react-native-web/dist/exports/I18nManager/index.js","webpack:///./node_modules/react-native-web/dist/modules/AssetRegistry/index.js","webpack:///./node_modules/react-native-web/dist/modules/ImageLoader/index.js","webpack:///./node_modules/react-native-web/dist/exports/Image/index.js","webpack:///./node_modules/react-native-web/dist/modules/requestIdleCallback/index.js","webpack:///./node_modules/react-native-web/dist/exports/InteractionManager/index.js","webpack:///./node_modules/react-native-web/dist/exports/InteractionManager/TaskQueue.js","webpack:///./node_modules/react-native-web/dist/exports/Keyboard/index.js","webpack:///./node_modules/react-native-web/dist/exports/PixelRatio/index.js","webpack:///./node_modules/react-native-web/dist/exports/Platform/index.js","webpack:///./node_modules/react-native-web/dist/exports/RefreshControl/index.js","webpack:///./node_modules/react-native-web/dist/exports/ScrollView/ScrollViewBase.js","webpack:///./node_modules/react-native-web/dist/exports/ScrollView/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/VirtualizedSectionList/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/SectionList/index.js","webpack:///./node_modules/react-native-web/dist/exports/SectionList/index.js","webpack:///./node_modules/react-native-web/dist/exports/StatusBar/index.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/compiler/createReactDOMStyle.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/compiler/normalizeColor.js","webpack:///./node_modules/react-native-web/dist/modules/isWebColor/index.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/compiler/unitlessNumbers.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/compiler/normalizeValueWithProperty.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/dom/createCSSStyleSheet.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/dom/createOrderedCSSStyleSheet.js","webpack:///./node_modules/uniwind/dist/module/components/web/createOrderedCSSStyleSheet.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/dom/index.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/compiler/hyphenateStyleName.js","webpack:///./node_modules/react-native-web/dist/modules/prefixStyles/static.js","webpack:///./node_modules/react-native-web/dist/modules/prefixStyles/index.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/compiler/index.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/compiler/hash.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/index.js","webpack:///./node_modules/react-native-web/dist/exports/StyleSheet/preprocess.js","webpack:///./node_modules/react-native-web/dist/exports/Text/TextAncestorContext.js","webpack:///./node_modules/react-native-web/dist/exports/Text/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/PooledClass/index.js","webpack:///./node_modules/react-native-web/dist/exports/Touchable/BoundingDimensions.js","webpack:///./node_modules/react-native-web/dist/exports/Touchable/Position.js","webpack:///./node_modules/react-native-web/dist/exports/Touchable/index.js","webpack:///./node_modules/react-native-web/dist/exports/TouchableNativeFeedback/index.js","webpack:///./node_modules/react-native-web/dist/modules/unitlessNumbers/index.js","webpack:///./node_modules/react-native-web/dist/modules/setValueForStyles/dangerousStyleValue.js","webpack:///./node_modules/react-native-web/dist/modules/setValueForStyles/index.js","webpack:///./node_modules/react-native-web/dist/exports/UIManager/index.js","webpack:///./node_modules/react-native-web/dist/exports/View/index.js","webpack:///./node_modules/react-native-web/dist/modules/createDOMProps/index.js","webpack:///./node_modules/react-native-web/dist/exports/createElement/index.js","webpack:///./node_modules/react-native-web/dist/exports/findNodeHandle/index.js","webpack:///./node_modules/react-native-web/dist/exports/processColor/index.js","webpack:///./node_modules/react-native-web/dist/modules/AccessibilityUtil/propsToAriaRole.js","webpack:///./node_modules/react-native-web/dist/modules/AccessibilityUtil/propsToAccessibilityComponent.js","webpack:///./node_modules/react-native-web/dist/modules/AccessibilityUtil/index.js","webpack:///./node_modules/react-native-web/dist/modules/AccessibilityUtil/isDisabled.js","webpack:///./node_modules/react-native-web/dist/modules/TextInputState/index.js","webpack:///./node_modules/react-native-web/dist/modules/UnimplementedView/index.js","webpack:///./node_modules/react-native-web/dist/modules/canUseDom/index.js","webpack:///./node_modules/react-native-web/dist/modules/dismissKeyboard/index.js","webpack:///./node_modules/react-native-web/dist/modules/forwardedProps/index.js","webpack:///./node_modules/react-native-web/dist/modules/getBoundingClientRect/index.js","webpack:///./node_modules/react-native-web/dist/modules/mergeRefs/index.js","webpack:///./node_modules/react-native-web/dist/modules/pick/index.js","webpack:///./node_modules/react-native-web/dist/modules/useElementLayout/index.js","webpack:///./node_modules/react-native-web/dist/modules/useLayoutEffect/index.js","webpack:///./node_modules/react-native-web/dist/modules/useLocale/isLocaleRTL.js","webpack:///./node_modules/react-native-web/dist/modules/useLocale/index.js","webpack:///./node_modules/react-native-web/dist/modules/useMergeRefs/index.js","webpack:///./node_modules/react-native-web/dist/modules/usePlatformMethods/index.js","webpack:///./node_modules/react-native-web/dist/modules/usePressEvents/PressResponder.js","webpack:///./node_modules/react-native-web/dist/modules/usePressEvents/index.js","webpack:///./node_modules/react-native-web/dist/modules/useResponderEvents/createResponderEvent.js","webpack:///./node_modules/react-native-web/dist/modules/useResponderEvents/ResponderEventTypes.js","webpack:///./node_modules/react-native-web/dist/modules/useResponderEvents/utils.js","webpack:///./node_modules/react-native-web/dist/modules/useResponderEvents/ResponderTouchHistoryStore.js","webpack:///./node_modules/react-native-web/dist/modules/useResponderEvents/ResponderSystem.js","webpack:///./node_modules/react-native-web/dist/modules/isSelectionValid/index.js","webpack:///./node_modules/react-native-web/dist/modules/useResponderEvents/index.js","webpack:///./node_modules/react-native-web/dist/modules/useStable/index.js","webpack:///./node_modules/react-native-web/dist/modules/warnOnce/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/EventEmitter/NativeEventEmitter.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/EventEmitter/RCTDeviceEventEmitter.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/VirtualizeUtils/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Batchinator/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Utilities/clamp.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/CellRenderMask.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/ChildListCollection.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/FillRateHelper/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/StateSafePureComponent.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/ViewabilityHelper/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/VirtualizedListContext.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/VirtualizedListCellRenderer.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/VirtualizedList/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/infoLog/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/vendor/emitter/EventEmitter.js","webpack:///./node_modules/react-native-web/node_modules/@react-native/normalize-colors/index.js","webpack:///./node_modules/react/cjs/react-jsx-runtime.production.js","webpack:///./node_modules/react/cjs/react.production.js","webpack:///./node_modules/react/index.js","webpack:///./node_modules/react/jsx-runtime.js","webpack:///./node_modules/scheduler/cjs/scheduler.production.js","webpack:///./node_modules/scheduler/index.js","webpack:///./node_modules/styleq/dist/styleq.js","webpack:///./node_modules/styleq/dist/transform-localize-style.js","webpack:///./node_modules/uniwind/dist/module/components/utils.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Utilities/Platform.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/ReactNative/ReactNativeFeatureFlags.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/NativeAnimatedHelper.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/TurboModule/TurboModuleRegistry.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedNode.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedWithChildren.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedInterpolation.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedValue.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/AnimatedEvent.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedTransform.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedStyle.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedProps.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/useAnimatedProps.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/createAnimatedComponent.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Utilities/useRefEffect.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Utilities/useMergeRefs.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedFlatList.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedImage.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedScrollView.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedSectionList.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedText.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/components/AnimatedView.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedAddition.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedDiffClamp.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedDivision.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedModulo.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedMultiplication.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedSubtraction.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedTracking.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedValueXY.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/animations/Animation.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/animations/DecayAnimation.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/SpringConfig.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/animations/SpringAnimation.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/animations/TimingAnimation.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/nodes/AnimatedColor.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/AnimatedImplementation.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/AnimatedMock.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/Animated/Animated.js","webpack:///./node_modules/react-native-web/dist/exports/Animated/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/Animated.js","webpack:///./node_modules/uniwind/dist/module/components/web/FlatList.js","webpack:///./node_modules/uniwind/dist/module/components/web/Image.js","webpack:///./node_modules/react-native-web/dist/modules/addEventListener/index.js","webpack:///./node_modules/react-native-web/dist/modules/modality/index.js","webpack:///./node_modules/react-native-web/dist/modules/useEvent/index.js","webpack:///./node_modules/react-native-web/dist/modules/useHover/index.js","webpack:///./node_modules/react-native-web/dist/exports/Pressable/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/Pressable.js","webpack:///./node_modules/uniwind/dist/module/components/web/RefreshControl.js","webpack:///./node_modules/uniwind/dist/module/components/web/ScrollView.js","webpack:///./node_modules/uniwind/dist/module/components/web/SectionList.js","webpack:///./node_modules/react-native-web/dist/modules/multiplyStyleLengthValue/index.js","webpack:///./node_modules/react-native-web/dist/exports/Switch/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/Switch.js","webpack:///./node_modules/uniwind/dist/module/components/web/Text.js","webpack:///./node_modules/react-native-web/dist/exports/TextInput/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/TextInput.js","webpack:///./node_modules/uniwind/dist/module/components/web/View.js","webpack:///./node_modules/uniwind/dist/module/components/web/generateDataSet.js","webpack:///./node_modules/react-native-web/dist/exports/render/index.js","webpack:///./node_modules/react-native-web/dist/exports/unmountComponentAtNode/index.js","webpack:///./node_modules/react-native-web/dist/exports/NativeModules/index.js","webpack:///./node_modules/react-native-web/dist/exports/AccessibilityInfo/index.js","webpack:///./node_modules/react-native-web/dist/exports/Alert/index.js","webpack:///./node_modules/react-native-web/dist/exports/AppRegistry/AppContainer.js","webpack:///./node_modules/react-native-web/dist/exports/AppRegistry/index.js","webpack:///./node_modules/react-native-web/dist/exports/AppRegistry/renderApplication.js","webpack:///./node_modules/react-native-web/dist/exports/AppState/index.js","webpack:///./node_modules/react-native-web/dist/exports/Clipboard/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/LayoutAnimation/index.js","webpack:///./node_modules/react-native-web/dist/exports/LayoutAnimation/index.js","webpack:///./node_modules/react-native-web/dist/exports/Linking/index.js","webpack:///./node_modules/react-native-web/dist/exports/NativeEventEmitter/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/TouchHistoryMath/index.js","webpack:///./node_modules/react-native-web/dist/vendor/react-native/PanResponder/index.js","webpack:///./node_modules/react-native-web/dist/exports/PanResponder/index.js","webpack:///./node_modules/react-native-web/dist/exports/Share/index.js","webpack:///./node_modules/react-native-web/dist/exports/Vibration/index.js","webpack:///./node_modules/react-native-web/dist/exports/CheckBox/index.js","webpack:///./node_modules/react-native-web/dist/exports/Picker/index.js","webpack:///./node_modules/react-native-web/dist/exports/Picker/PickerItem.js","webpack:///./node_modules/react-native-web/dist/exports/ProgressBar/index.js","webpack:///./node_modules/react-native-web/dist/exports/YellowBox/index.js","webpack:///./node_modules/react-native-web/dist/exports/LogBox/index.js","webpack:///./node_modules/react-native-web/dist/exports/useColorScheme/index.js","webpack:///./node_modules/react-native-web/dist/exports/useLocaleContext/index.js","webpack:///./node_modules/react-native-web/dist/exports/useWindowDimensions/index.js","webpack:///./node_modules/react-native-web/dist/exports/ActivityIndicator/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/ActivityIndicator.js","webpack:///./node_modules/react-native-web/dist/exports/TouchableOpacity/index.js","webpack:///./node_modules/react-native-web/dist/exports/Button/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/Button.js","webpack:///./node_modules/react-native-web/dist/exports/ImageBackground/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/ImageBackground.js","webpack:///./node_modules/react-native-web/dist/exports/KeyboardAvoidingView/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/KeyboardAvoidingView.js","webpack:///./node_modules/react-native-web/dist/exports/Modal/ModalPortal.js","webpack:///./node_modules/react-native-web/dist/exports/Modal/ModalAnimation.js","webpack:///./node_modules/react-native-web/dist/exports/Modal/ModalContent.js","webpack:///./node_modules/react-native-web/dist/exports/Modal/ModalFocusTrap.js","webpack:///./node_modules/react-native-web/dist/exports/Modal/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/Modal.js","webpack:///./node_modules/react-native-web/dist/exports/SafeAreaView/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/SafeAreaView.js","webpack:///./node_modules/react-native-web/dist/exports/TouchableHighlight/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/TouchableHighlight.js","webpack:///./node_modules/uniwind/dist/module/components/web/TouchableOpacity.js","webpack:///./node_modules/react-native-web/dist/exports/TouchableWithoutFeedback/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/TouchableWithoutFeedback.js","webpack:///./node_modules/react-native-web/dist/exports/VirtualizedList/index.js","webpack:///./node_modules/uniwind/dist/module/components/web/VirtualizedList.js","webpack:///./node_modules/uniwind/dist/module/hooks/useCSSVariable/getVariableValue.js","webpack:///./node_modules/uniwind/dist/module/core/config/config.common.js","webpack:///./node_modules/uniwind/dist/module/hooks/useCSSVariable/useCSSVariable.js","webpack:///./node_modules/uniwind/dist/module/core/config/config.js","webpack:///./node_modules/uniwind/dist/module/common/utils.js","webpack:///./node_modules/uniwind/dist/module/components/web/rnw.js","webpack:///./node_modules/uniwind/dist/module/components/web/useUniwindAccent.js","webpack:///./node_modules/uniwind/dist/module/core/listener.js","webpack:///./node_modules/uniwind/dist/module/core/web/cssListener.js","webpack:///./node_modules/uniwind/dist/module/core/web/formatColor.js","webpack:///./node_modules/uniwind/dist/module/core/web/parseCSSValue.js","webpack:///./node_modules/uniwind/dist/module/core/web/getWebStyles.js","webpack:///./node_modules/uniwind/dist/module/core/context.js","webpack:///./node_modules/uniwind/dist/module/hooks/useResolveClassNames.js","webpack:///./node_modules/uniwind/dist/module/types.js","webpack:///./node_modules/@lezer/common/dist/index.cjs","webpack:///./node_modules/@lezer/highlight/dist/index.cjs","webpack:///./node_modules/@lezer/lr/dist/index.cjs","webpack:///./node_modules/fflate/lib/index.cjs","webpack:///./node_modules/fflate/lib/worker.cjs","webpack:///./node_modules/valibot/dist/index.cjs","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/ensure chunk","webpack:///webpack/runtime/get javascript chunk filename","webpack:///webpack/runtime/get mini-css chunk filename","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/runtime/publicPath","webpack:///webpack/runtime/jsonp chunk loading"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"liftosaur:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import { HydrateUtils_hydratePage } from \"./utils/hydrate\";\nimport { AiPromptContent } from \"./pages/ai/aiPromptContent\";\nimport { PageWrapper } from \"./components/pageWrapper\";\n\nfunction main(): void {\n  HydrateUtils_hydratePage<Record<string, never>>((pageWrapperProps) => (\n    <PageWrapper {...pageWrapperProps}>\n      <AiPromptContent />\n    </PageWrapper>\n  ));\n}\n\nmain();\n","function _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayWithHoles(r) {\n  if (Array.isArray(r)) return r;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _assertThisInitialized(e) {\n  if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  return e;\n}\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function asyncGeneratorStep(n, t, e, r, o, a, c) {\n  try {\n    var i = n[a](c),\n      u = i.value;\n  } catch (n) {\n    return void e(n);\n  }\n  i.done ? t(u) : Promise.resolve(u).then(r, o);\n}\nfunction _asyncToGenerator(n) {\n  return function () {\n    var t = this,\n      e = arguments;\n    return new Promise(function (r, o) {\n      var a = n.apply(t, e);\n      function _next(n) {\n        asyncGeneratorStep(a, r, o, _next, _throw, \"next\", n);\n      }\n      function _throw(n) {\n        asyncGeneratorStep(a, r, o, _next, _throw, \"throw\", n);\n      }\n      _next(void 0);\n    });\n  };\n}\nmodule.exports = _asyncToGenerator, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classCallCheck(a, n) {\n  if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\");\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var isNativeReflectConstruct = require(\"./isNativeReflectConstruct.js\");\nvar setPrototypeOf = require(\"./setPrototypeOf.js\");\nfunction _construct(t, e, r) {\n  if (isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments);\n  var o = [null];\n  o.push.apply(o, e);\n  var p = new (t.bind.apply(t, o))();\n  return r && setPrototypeOf(p, r.prototype), p;\n}\nmodule.exports = _construct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperties(e, r) {\n  for (var t = 0; t < r.length; t++) {\n    var o = r[t];\n    o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, toPropertyKey(o.key), o);\n  }\n}\nfunction _createClass(e, r, t) {\n  return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", {\n    writable: !1\n  }), e;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nexport { _arrayLikeToArray as default };","import unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nfunction _createForOfIteratorHelperLoose(r, e) {\n  var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (t) return (t = t.call(r)).next.bind(t);\n  if (Array.isArray(r) || (t = unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) {\n    t && (r = t);\n    var o = 0;\n    return function () {\n      return o >= r.length ? {\n        done: !0\n      } : {\n        done: !1,\n        value: r[o++]\n      };\n    };\n  }\n  throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nexport { _createForOfIteratorHelperLoose as default };","import arrayLikeToArray from \"./arrayLikeToArray.js\";\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;\n  }\n}\nexport { _unsupportedIterableToArray as default };","function _extends() {\n  return _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nexport { _typeof as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import defineProperty from \"./defineProperty.js\";\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n      defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nexport { _objectSpread2 as default };","function _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (-1 !== e.indexOf(n)) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","function _getPrototypeOf(t) {\n  return module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {\n    return t.__proto__ || Object.getPrototypeOf(t);\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _getPrototypeOf(t);\n}\nmodule.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nfunction _inherits(t, e) {\n  if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\");\n  t.prototype = Object.create(e && e.prototype, {\n    constructor: {\n      value: t,\n      writable: !0,\n      configurable: !0\n    }\n  }), Object.defineProperty(t, \"prototype\", {\n    writable: !1\n  }), e && setPrototypeOf(t, e);\n}\nmodule.exports = _inherits, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _interopRequireDefault(e) {\n  return e && e.__esModule ? e : {\n    \"default\": e\n  };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _isNativeFunction(t) {\n  try {\n    return -1 !== Function.toString.call(t).indexOf(\"[native code]\");\n  } catch (n) {\n    return \"function\" == typeof t;\n  }\n}\nmodule.exports = _isNativeFunction, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _isNativeReflectConstruct() {\n  try {\n    var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n  } catch (t) {}\n  return (module.exports = _isNativeReflectConstruct = function _isNativeReflectConstruct() {\n    return !!t;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports)();\n}\nmodule.exports = _isNativeReflectConstruct, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArray(r) {\n  if (\"undefined\" != typeof Symbol && null != r[Symbol.iterator] || null != r[\"@@iterator\"]) return Array.from(r);\n}\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArrayLimit(r, l) {\n  var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (null != t) {\n    var e,\n      n,\n      i,\n      u,\n      a = [],\n      f = !0,\n      o = !1;\n    try {\n      if (i = (t = t.call(r)).next, 0 === l) {\n        if (Object(t) !== t) return;\n        f = !1;\n      } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n    } catch (r) {\n      o = !0, n = r;\n    } finally {\n      try {\n        if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n      } finally {\n        if (o) throw n;\n      }\n    }\n    return a;\n  }\n}\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _objectDestructuringEmpty(t) {\n  if (null == t) throw new TypeError(\"Cannot destructure \" + t);\n}\nmodule.exports = _objectDestructuringEmpty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var objectWithoutPropertiesLoose = require(\"./objectWithoutPropertiesLoose.js\");\nfunction _objectWithoutProperties(e, t) {\n  if (null == e) return {};\n  var o,\n    r,\n    i = objectWithoutPropertiesLoose(e, t);\n  if (Object.getOwnPropertySymbols) {\n    var n = Object.getOwnPropertySymbols(e);\n    for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n  }\n  return i;\n}\nmodule.exports = _objectWithoutProperties, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (-1 !== e.indexOf(n)) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nmodule.exports = _objectWithoutPropertiesLoose, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar assertThisInitialized = require(\"./assertThisInitialized.js\");\nfunction _possibleConstructorReturn(t, e) {\n  if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e;\n  if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\");\n  return assertThisInitialized(t);\n}\nmodule.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _setPrototypeOf(t, e) {\n  return module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _setPrototypeOf(t, e);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _slicedToArray(r, e) {\n  return arrayWithHoles(r) || iterableToArrayLimit(r, e) || unsupportedIterableToArray(r, e) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArray = require(\"./iterableToArray.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _toArray(r) {\n  return arrayWithHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableRest();\n}\nmodule.exports = _toArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? arrayLikeToArray(r, a) : void 0;\n  }\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var getPrototypeOf = require(\"./getPrototypeOf.js\");\nvar setPrototypeOf = require(\"./setPrototypeOf.js\");\nvar isNativeFunction = require(\"./isNativeFunction.js\");\nvar construct = require(\"./construct.js\");\nfunction _wrapNativeSuper(t) {\n  var r = \"function\" == typeof Map ? new Map() : void 0;\n  return module.exports = _wrapNativeSuper = function _wrapNativeSuper(t) {\n    if (null === t || !isNativeFunction(t)) return t;\n    if (\"function\" != typeof t) throw new TypeError(\"Super expression must either be null or a function\");\n    if (void 0 !== r) {\n      if (r.has(t)) return r.get(t);\n      r.set(t, Wrapper);\n    }\n    function Wrapper() {\n      return construct(t, arguments, getPrototypeOf(this).constructor);\n    }\n    return Wrapper.prototype = Object.create(t.prototype, {\n      constructor: {\n        value: Wrapper,\n        enumerable: !1,\n        writable: !0,\n        configurable: !0\n      }\n    }), setPrototypeOf(Wrapper, t);\n  }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports, _wrapNativeSuper(t);\n}\nmodule.exports = _wrapNativeSuper, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import { Platform } from \"react-native\";\nimport {\n  IStorage,\n  IHistoryRecord,\n  ISettings,\n  IUnit,\n  IMuscleGeneratorResponse,\n  IPlannerProgramWeek,\n  IAffiliateData,\n  IWebEditorSettings,\n} from \"../types\";\nimport { IAccount } from \"../models/account\";\nimport { IEither } from \"../utils/types\";\nimport { UrlUtils_build } from \"../utils/url\";\nimport { IStorageUpdate2 } from \"../utils/sync\";\nimport { IExportedProgram, IProgramIndexEntry } from \"../models/program\";\nimport { CollectionUtils_inGroupsOf, CollectionUtils_uniqBy } from \"../utils/collection\";\nimport { Encoder_encode, Encoder_decode } from \"../utils/encoder\";\nimport { IAppleOffer, IGoogleOffer } from \"../models/state\";\nimport {\n  HistoryDelta_apply,\n  HistoryDelta_missingIds,\n  HistoryDelta_unresolvedIds,\n  IHistoryDeltaLocal,\n} from \"../utils/historyDelta\";\nimport { HistoryIds_MAX } from \"../utils/historyIds\";\n\nexport type IPostSyncHistory = { mode: \"page\" } | { mode: \"none\" } | { mode: \"delta\"; local: IHistoryDeltaLocal };\n\nfunction Service_nativeClientHeaders(): Record<string, string> {\n  if (Platform.OS === \"ios\") {\n    return { \"X-Client\": \"liftosaur-native-ios\" };\n  }\n  if (Platform.OS === \"android\") {\n    return { \"X-Client\": \"liftosaur-native-android\" };\n  }\n  return {};\n}\n\nexport interface IServiceError {\n  status?: number;\n  message: string;\n  body?: string;\n}\n\nexport interface IProgramDetail {\n  fullDescription: string;\n  faq?: string;\n  planner: {\n    vtype: \"planner\";\n    name: string;\n    weeks: IPlannerProgramWeek[];\n  };\n}\n\nexport type IEmailAuthResponse =\n  | { type: \"success\"; response: IGetStorageResponse }\n  | { type: \"confirmation_sent\" }\n  | { type: \"error\"; error: string; providers?: string[] };\n\nexport interface IGetStorageResponse {\n  email: string;\n  storage: IStorage;\n  user_id: string;\n  is_new_user: boolean;\n  key?: string;\n  session?: string;\n}\n\nexport type IPostSyncResponse =\n  | {\n      type: \"dirty\";\n      storage: IStorage;\n      email: string;\n      user_id: string;\n      key?: string;\n    }\n  | {\n      type: \"clean\";\n      new_original_id: number;\n      email: string;\n      user_id: string;\n      key?: string;\n    }\n  | {\n      type: \"error\";\n      error: \"account_mismatch\";\n      email: string;\n      user_id: string;\n      key?: string;\n    }\n  | {\n      type: \"error\";\n      error: string;\n      key?: string;\n    };\n\nexport type IPostStorageResponse =\n  | {\n      status: \"success\";\n      newOriginalId: number;\n    }\n  | {\n      status: \"request\";\n      data: (\"programs\" | \"history\" | \"stats\")[];\n    }\n  | {\n      status: \"merged\";\n      storage: IStorage;\n    };\n\ntype IRedeemCouponError =\n  | \"not_authorized\"\n  | \"coupon_not_found\"\n  | \"coupon_already_claimed\"\n  | \"wrong_platform\"\n  | \"coupon_disabled\"\n  | \"unknown\";\n\nexport interface IAiConvertResponse {\n  program: string;\n}\n\nexport type IEventPayload =\n  | {\n      type: \"event\";\n      userId?: string;\n      timestamp: number;\n      name: string;\n      isMobile?: boolean;\n      iOSVersion?: number;\n      androidVersion?: number;\n      iOSOSVersion?: number;\n      androidOSVersion?: number;\n      deviceModel?: string;\n      commithash: string;\n      extra?: Record<string, string | number>;\n    }\n  | {\n      type: \"error\";\n      userId?: string;\n      timestamp: number;\n      message: string;\n      stack: string;\n      commithash: string;\n      isMobile?: boolean;\n      rollbar_id: string;\n    }\n  | {\n      type: \"safesnapshot\";\n      userId?: string;\n      timestamp: number;\n      storage_id: string;\n      commithash: string;\n      isMobile?: boolean;\n      update: string;\n    }\n  | {\n      type: \"mergesnapshot\";\n      userId?: string;\n      timestamp: number;\n      storage_id: string;\n      commithash: string;\n      isMobile?: boolean;\n      update: string;\n    }\n  | {\n      type: \"log\";\n      userId?: string;\n      timestamp: number;\n      action: string;\n      detail?: string;\n      affiliates?: Partial<Record<string, IAffiliateData>>;\n      subscriptions: string[];\n      referrer?: string;\n      landingPage?: string;\n      platform: { name: string; version?: string };\n      commithash: string;\n      isMobile?: boolean;\n    };\n\nconst cachePromises: Partial<Record<string, Promise<{ result: boolean }>>> = {};\n\ndeclare let __API_HOST__: string;\ndeclare let __HOST__: string;\ndeclare let __COMMIT_HASH__: string;\n\nexport interface IRecordResponse {\n  history: IHistoryRecord[];\n  record: IHistoryRecord;\n  settings: ISettings;\n}\n\nexport interface ISubscriptionServerDetails {\n  type: \"apple\" | \"google\";\n  product: string;\n  isActive: boolean;\n  expires: number;\n  autoRenew?: boolean;\n  // The product a queued plan switch will renew as, read authoritatively from Google\n  // subscriptionsv2 `deferredItemReplacement` server-side. Empty when no switch is queued.\n  pendingProduct?: string;\n}\n\nexport interface IServiceAdminTarget {\n  userId: string;\n  adminKey: string;\n}\n\nexport function Service_adminTarget(adminKey?: string, userId?: string): IServiceAdminTarget | undefined {\n  return adminKey != null && userId != null ? { userId, adminKey } : undefined;\n}\n\nfunction Service_withAdminTarget(rawUrl: string, admin?: IServiceAdminTarget): string {\n  if (admin == null) {\n    return rawUrl;\n  }\n  const url = UrlUtils_build(rawUrl);\n  url.searchParams.set(\"userid\", admin.userId);\n  url.searchParams.set(\"key\", admin.adminKey);\n  return url.toString();\n}\n\nexport class Service {\n  public readonly client: Window[\"fetch\"];\n\n  constructor(client: Window[\"fetch\"]) {\n    this.client = client;\n  }\n\n  public async googleSignIn(\n    token: string,\n    id: string,\n    args: { forcedUserEmail?: string }\n  ): Promise<IGetStorageResponse> {\n    const historylimit = 20;\n    const body = JSON.stringify({\n      token,\n      id,\n      forceuseremail: args.forcedUserEmail,\n      historylimit,\n    });\n    const response = await this.client(`${__API_HOST__}/api/signin/google`, {\n      method: \"POST\",\n      body: body,\n      credentials: \"include\",\n      headers: Service_nativeClientHeaders(),\n    });\n    const json: IGetStorageResponse = await response.json();\n    json.storage.history = await this.getAllHistoryRecords({\n      alreadyFetchedHistory: json.storage.history,\n      historyLimit: historylimit,\n    });\n    return {\n      email: json.email,\n      storage: json.storage,\n      user_id: json.user_id,\n      is_new_user: json.is_new_user,\n      session: json.session,\n    };\n  }\n\n  public async getAllHistoryRecords(args: {\n    alreadyFetchedHistory?: IHistoryRecord[];\n    historyLimit?: number;\n    userId?: string;\n    adminKey?: string;\n  }): Promise<IHistoryRecord[]> {\n    let history = args.alreadyFetchedHistory || [];\n    let historyResponse: IHistoryRecord[] | undefined = undefined;\n    let historyLimit = args.historyLimit || 20;\n    while ((historyResponse || history).length > historyLimit - 1) {\n      historyLimit = 100;\n      historyResponse = await this.getHistory({\n        after: history.length > 1 ? history[history.length - 2].id : undefined,\n        limit: historyLimit,\n        userId: args.userId,\n        adminKey: args.adminKey,\n      });\n      if (historyResponse.length > 0) {\n        history = [...history, ...historyResponse];\n      } else {\n        break;\n      }\n    }\n    history = CollectionUtils_uniqBy(history, \"id\");\n    return history;\n  }\n\n  public async getHistory(args: {\n    after?: number;\n    limit?: number;\n    userId?: string;\n    adminKey?: string;\n  }): Promise<IHistoryRecord[]> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/history`);\n    if (args.after) {\n      url.searchParams.set(\"after\", args.after.toString());\n    }\n    if (args.limit) {\n      url.searchParams.set(\"limit\", args.limit.toString());\n    }\n    if (args.userId != null && args.adminKey != null) {\n      url.searchParams.set(\"userid\", args.userId);\n      url.searchParams.set(\"key\", args.adminKey);\n    }\n    const response = await this.client(url.toString(), { credentials: \"include\" });\n    const json: { history: IHistoryRecord[] } = await response.json();\n    return json.history;\n  }\n\n  public async getHistoryByIds(ids: number[]): Promise<IHistoryRecord[]> {\n    const chunks = CollectionUtils_inGroupsOf(HistoryIds_MAX, ids);\n    const pages = await Promise.all(\n      chunks.map(async (chunk) => {\n        const url = UrlUtils_build(`${__API_HOST__}/api/history`);\n        url.searchParams.set(\"ids\", chunk.join(\",\"));\n        const response = await this.client(url.toString(), { credentials: \"include\" });\n        if (response.status !== 200) {\n          throw new Error(`Failed to fetch history records by ids: ${response.status}`);\n        }\n        const json: { history: IHistoryRecord[] } = await response.json();\n        return json.history;\n      })\n    );\n    return pages.flat();\n  }\n\n  public async appleSignIn(code: string, idToken: string, id: string): Promise<IGetStorageResponse> {\n    const historylimit = 20;\n    const response = await this.client(`${__API_HOST__}/api/signin/apple`, {\n      method: \"POST\",\n      body: JSON.stringify({\n        code,\n        idToken,\n        id,\n        historylimit,\n      }),\n      credentials: \"include\",\n      headers: Service_nativeClientHeaders(),\n    });\n    const json: IGetStorageResponse = await response.json();\n    json.storage.history = await this.getAllHistoryRecords({\n      alreadyFetchedHistory: json.storage.history,\n      historyLimit: historylimit,\n    });\n    return {\n      email: json.email,\n      storage: json.storage,\n      user_id: json.user_id,\n      is_new_user: json.is_new_user,\n      session: json.session,\n    };\n  }\n\n  public async emailSignUp(email: string, password: string, id: string): Promise<IEmailAuthResponse> {\n    return this.emailAuth(`${__API_HOST__}/api/signup/email`, { email, password, id });\n  }\n\n  public async emailSignIn(email: string, password: string, id: string): Promise<IEmailAuthResponse> {\n    return this.emailAuth(`${__API_HOST__}/api/signin/email`, { email, password, id });\n  }\n\n  private async emailAuth(url: string, body: Record<string, string>): Promise<IEmailAuthResponse> {\n    const historylimit = 20;\n    let response: Response;\n    let json: IGetStorageResponse & { status?: string; error?: string; providers?: string[] };\n    try {\n      response = await this.client(url, {\n        method: \"POST\",\n        body: JSON.stringify({ ...body, historylimit }),\n        credentials: \"include\",\n        headers: Service_nativeClientHeaders(),\n      });\n      json = await response.json();\n    } catch (e) {\n      return { type: \"error\", error: \"network_error\" };\n    }\n    if (!response.ok) {\n      return { type: \"error\", error: json.error || \"unknown_error\", providers: json.providers };\n    }\n    if (json.status === \"confirmation_sent\") {\n      return { type: \"confirmation_sent\" };\n    }\n    json.storage.history = await this.getAllHistoryRecords({\n      alreadyFetchedHistory: json.storage.history,\n      historyLimit: historylimit,\n    });\n    return {\n      type: \"success\",\n      response: {\n        email: json.email,\n        storage: json.storage,\n        user_id: json.user_id,\n        is_new_user: json.is_new_user,\n        key: json.key,\n        session: json.session,\n      },\n    };\n  }\n\n  public async forgotPassword(email: string): Promise<{ error?: string; providers?: string[] }> {\n    try {\n      const response = await this.client(`${__API_HOST__}/api/auth/forgotpassword`, {\n        method: \"POST\",\n        body: JSON.stringify({ email }),\n        credentials: \"include\",\n        headers: Service_nativeClientHeaders(),\n      });\n      if (response.ok) {\n        return {};\n      }\n      const json = await response.json().catch(() => ({}));\n      return { error: json.error || \"unknown_error\", providers: json.providers };\n    } catch (e) {\n      return { error: \"network_error\" };\n    }\n  }\n\n  public async resetPassword(token: string, password: string): Promise<{ error?: string }> {\n    try {\n      const response = await this.client(`${__API_HOST__}/api/auth/resetpassword`, {\n        method: \"POST\",\n        body: JSON.stringify({ token, password }),\n        credentials: \"include\",\n        headers: Service_nativeClientHeaders(),\n      });\n      if (response.ok) {\n        return {};\n      }\n      const json = await response.json().catch(() => ({}));\n      return { error: json.error || \"unknown_error\" };\n    } catch (e) {\n      return { error: \"network_error\" };\n    }\n  }\n\n  public async verifyEmail(token: string): Promise<{ error?: string }> {\n    try {\n      const response = await this.client(`${__API_HOST__}/api/auth/verifyemail`, {\n        method: \"POST\",\n        body: JSON.stringify({ token }),\n        credentials: \"include\",\n        headers: Service_nativeClientHeaders(),\n      });\n      if (response.ok) {\n        return {};\n      }\n      const json = await response.json().catch(() => ({}));\n      return { error: json.error || \"unknown_error\" };\n    } catch (e) {\n      return { error: \"network_error\" };\n    }\n  }\n\n  public async changePassword(currentPassword: string | undefined, newPassword: string): Promise<string | undefined> {\n    try {\n      const response = await this.client(`${__API_HOST__}/api/auth/changepassword`, {\n        method: \"POST\",\n        body: JSON.stringify({ currentPassword, newPassword }),\n        credentials: \"include\",\n        headers: Service_nativeClientHeaders(),\n      });\n      if (response.ok) {\n        return undefined;\n      }\n      const json = await response.json().catch(() => ({}));\n      return json.error || \"unknown_error\";\n    } catch (e) {\n      return \"network_error\";\n    }\n  }\n\n  public async signout(): Promise<void> {\n    await this.client(`${__API_HOST__}/api/signout`, {\n      method: \"POST\",\n      body: JSON.stringify({}),\n      credentials: \"include\",\n    });\n  }\n\n  public async refreshGoogleSubscription(\n    userId: string,\n    googlePurchaseToken: string\n  ): Promise<ISubscriptionServerDetails | undefined> {\n    // Re-verifies the live purchase token (which also rewrites the server's details row) and returns the\n    // freshly-derived status incl. any queued deferred plan switch. Authorized by possession of the purchase\n    // token, so no userId-based read. Deliberately uncached: each refresh must reflect live Play state.\n    try {\n      const url = UrlUtils_build(`${__API_HOST__}/api/verifygooglepurchasetoken`);\n      const result = await this.client(url.toString(), {\n        method: \"POST\",\n        body: JSON.stringify({ googlePurchaseToken, userId }),\n        credentials: \"include\",\n      });\n      if (result.status === 200) {\n        const json = (await result.json()) as { subscription?: ISubscriptionServerDetails };\n        return json.subscription;\n      }\n    } catch {\n      // Network/parse failure: caller keeps its prior state rather than clearing the pending card.\n    }\n    return undefined;\n  }\n\n  public async getProgramRevisions(\n    programId: string,\n    admin?: IServiceAdminTarget\n  ): Promise<IEither<string[], IServiceError>> {\n    try {\n      const url = Service_withAdminTarget(`${__API_HOST__}/api/programrevisions/${programId}`, admin);\n      const result = await this.client(url, {\n        method: \"GET\",\n        credentials: \"include\",\n      });\n      if (result.ok) {\n        const json = await result.json();\n        return { success: true, data: json.data };\n      } else {\n        const body = await result.text().catch(() => \"\");\n        return {\n          success: false,\n          error: { status: result.status, message: `http_error`, body: body.slice(0, 500) },\n        };\n      }\n    } catch (e) {\n      return { success: false, error: { message: e instanceof Error ? e.message : String(e) } };\n    }\n  }\n\n  public async getProgramRevision(\n    programId: string,\n    revision: string,\n    admin?: IServiceAdminTarget\n  ): Promise<IEither<string, string>> {\n    const url = Service_withAdminTarget(`${__API_HOST__}/api/programrevision/${programId}/${revision}`, admin);\n    const result = await this.client(url, {\n      method: \"GET\",\n      credentials: \"include\",\n    });\n    if (result.ok) {\n      const json = await result.json();\n      return { success: true, data: json.text };\n    } else {\n      return { success: false, error: \"error\" };\n    }\n  }\n\n  public async postSync(args: {\n    storageUpdate: IStorageUpdate2;\n    tempUserId: string | undefined;\n    signal?: AbortSignal;\n    deviceId?: string;\n    history?: IPostSyncHistory;\n  }): Promise<IPostSyncResponse> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/sync2`);\n    if (args.tempUserId) {\n      url.searchParams.set(\"tempuserid\", args.tempUserId);\n    }\n    const body = JSON.stringify({\n      storageUpdate: args.storageUpdate,\n      timestamp: Date.now(),\n      historylimit: 20,\n      deviceId: args.deviceId,\n    });\n    const compressedBody = await Encoder_encode(body);\n    const payload = JSON.stringify({ data: compressedBody });\n    const result = await this.client(url.toString(), {\n      method: \"POST\",\n      body: payload,\n      credentials: \"include\",\n      signal: args.signal,\n    });\n    const json: IPostSyncResponse = await result.json();\n    if (json.type === \"dirty\") {\n      json.storage = await this.completeSyncHistory(json.storage, args.history || { mode: \"page\" });\n    }\n    return json;\n  }\n\n  private async completeSyncHistory(storage: IStorage, history: IPostSyncHistory): Promise<IStorage> {\n    if (history.mode === \"none\") {\n      return storage;\n    }\n    const missingIds =\n      history.mode === \"delta\" ? HistoryDelta_missingIds(history.local, storage._versions, storage.history) : undefined;\n    const fetched = missingIds != null && missingIds.length > 0 ? await this.getHistoryByIds(missingIds) : [];\n    if (missingIds == null || HistoryDelta_unresolvedIds(missingIds, fetched).length > 0) {\n      const full = await this.getAllHistoryRecords({ alreadyFetchedHistory: storage.history, historyLimit: 20 });\n      return { ...storage, history: full };\n    }\n    return HistoryDelta_apply(storage, fetched);\n  }\n\n  public async createDebugSession(\n    userId: string,\n    adminKey: string\n  ): Promise<{ session?: string; userId: string; email: string } | undefined> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/admin/debugsession`);\n    url.searchParams.set(\"userid\", userId);\n    url.searchParams.set(\"key\", adminKey);\n    const response = await this.client(url.toString(), {\n      method: \"POST\",\n      body: JSON.stringify({}),\n      credentials: \"include\",\n    });\n    if (response.status !== 200) {\n      return undefined;\n    }\n    return response.json();\n  }\n\n  public async postSetupTestAccount(apiKey?: string, session?: string): Promise<{ apiKeyBound: boolean; key: string }> {\n    const response = await this.client(`${__API_HOST__}/api/dev/setuptestaccount`, {\n      method: \"POST\",\n      body: JSON.stringify({ apiKey }),\n      credentials: \"include\",\n      headers: {\n        ...Service_nativeClientHeaders(),\n        ...(session ? { authorization: `Bearer ${session}` } : {}),\n      },\n    });\n    const json: { data?: { apiKeyBound: boolean; key: string }; error?: string } = await response\n      .json()\n      .catch(() => ({}));\n    if (response.status !== 200 || json.data == null) {\n      throw new Error(`Test account setup failed (${response.status}): ${json.error || \"unknown error\"}`);\n    }\n    return json.data;\n  }\n\n  public async postDebug(id: string, state: string, meta: Record<string, string>): Promise<boolean> {\n    try {\n      const compressed = await Encoder_encode(JSON.stringify({ state, meta }));\n      const response = await this.client(`${__API_HOST__}/api/debug`, {\n        method: \"POST\",\n        body: JSON.stringify({ id, data: compressed }),\n        credentials: \"include\",\n      });\n      const json = await response.json();\n      return json?.data === \"ok\";\n    } catch (e) {\n      return false;\n    }\n  }\n\n  public async postClaimKey(userid: string): Promise<{ key: string; expires: number } | undefined> {\n    const response = await this.client(`${__API_HOST__}/api/claimkey/${userid}`, {\n      method: \"POST\",\n      credentials: \"include\",\n    });\n    const json = await response.json();\n    return json?.data?.claim;\n  }\n\n  public async checkAdminKey(adminKey: string): Promise<boolean> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/admin/check`);\n    url.searchParams.set(\"key\", adminKey);\n    try {\n      const response = await this.client(url.toString(), { credentials: \"include\" });\n      return response.status === 200;\n    } catch (_) {\n      return false;\n    }\n  }\n\n  public async postAddFreeUser(userid: string, adminKey: string): Promise<void> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/addfreeuser/${userid}`);\n    url.searchParams.set(\"key\", adminKey);\n    await this.client(url.toString(), {\n      method: \"POST\",\n      credentials: \"include\",\n    });\n  }\n\n  public async postSaveProgram(\n    program: IExportedProgram,\n    deviceId?: string,\n    source?: string\n  ): Promise<IEither<string, string>> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/program`);\n    try {\n      const response = await this.client(url.toString(), {\n        method: \"POST\",\n        body: JSON.stringify({ program, deviceId, source }),\n        credentials: \"include\",\n      });\n      if (response.status === 200) {\n        const json = await response.json();\n        return { success: true, data: json.data.id };\n      } else {\n        const json = await response.json();\n        return { success: false, error: json.error };\n      }\n    } catch (error) {\n      const e = error as Error;\n      return { success: false, error: e.message };\n    }\n  }\n\n  public async postSaveSettings(args: {\n    settings: IWebEditorSettings;\n    deletedExerciseDataKeys: string[];\n    deletedStarredExerciseKeys?: string[];\n    deletedMuscleGroupKeys?: string[];\n    version: string;\n    deviceId?: string;\n  }): Promise<IEither<undefined, string>> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/settings`);\n    try {\n      const response = await this.client(url.toString(), {\n        method: \"POST\",\n        body: JSON.stringify(args),\n        credentials: \"include\",\n      });\n      if (response.status === 200) {\n        return { success: true, data: undefined };\n      } else {\n        const json = await response.json();\n        return { success: false, error: json.error };\n      }\n    } catch (error) {\n      const e = error as Error;\n      return { success: false, error: e.message };\n    }\n  }\n\n  public async deleteProgram(id: string): Promise<IEither<string, string>> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/program/${id}`);\n    try {\n      const response = await this.client(url.toString(), {\n        method: \"DELETE\",\n        credentials: \"include\",\n      });\n      if (response.status === 200) {\n        const json = await response.json();\n        return { success: true, data: json.data.id };\n      } else {\n        const json = await response.json();\n        return { success: false, error: json.error };\n      }\n    } catch (error) {\n      const e = error as Error;\n      return { success: false, error: e.message };\n    }\n  }\n\n  public async postClaimCoupon(\n    code: string,\n    platform?: \"ios\" | \"android\"\n  ): Promise<\n    IEither<\n      {\n        key?: string;\n        expires?: number;\n        appleOffer?: IAppleOffer;\n        googleOffer?: IGoogleOffer;\n        affiliate?: string;\n      },\n      IRedeemCouponError\n    >\n  > {\n    const url = UrlUtils_build(`${__API_HOST__}/api/coupon/claim/${code}`);\n    const result = await this.client(url.toString(), {\n      method: \"POST\",\n      credentials: \"include\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n      },\n      body: JSON.stringify({ platform }),\n    });\n    const json = await result.json();\n    if (result.status === 200) {\n      const { key, expires, appleOffer, googleOffer, affiliate } = json.data || {};\n      if (key && expires) {\n        return { success: true, data: { key, expires } };\n      } else if (appleOffer) {\n        return { success: true, data: { appleOffer, affiliate } };\n      } else if (googleOffer) {\n        return { success: true, data: { googleOffer, affiliate } };\n      }\n    } else if (\"error\" in json) {\n      const error = json.error as IRedeemCouponError;\n      if (\n        error === \"not_authorized\" ||\n        error === \"coupon_not_found\" ||\n        error === \"coupon_already_claimed\" ||\n        error === \"coupon_disabled\"\n      ) {\n        return { success: false, error };\n      }\n    }\n    return { success: false, error: \"unknown\" };\n  }\n\n  public async getStorage(\n    tempUserId: string,\n    userId?: string,\n    storageId?: string,\n    adminKey?: string\n  ): Promise<IGetStorageResponse> {\n    const historylimit = 20;\n    const url = UrlUtils_build(`${__API_HOST__}/api/storage`);\n    if (tempUserId) {\n      url.searchParams.set(\"tempuserid\", tempUserId);\n    }\n    if (userId != null && adminKey != null) {\n      url.searchParams.set(\"userid\", userId);\n      url.searchParams.set(\"key\", adminKey);\n      if (storageId) {\n        url.searchParams.set(\"storageid\", storageId);\n      }\n    }\n    url.searchParams.set(\"historylimit\", historylimit.toString());\n    const result = await this.client(url.toString(), { credentials: \"include\" });\n    const json = await result.json();\n    if (json.storage?.history) {\n      json.storage.history = await this.getAllHistoryRecords({\n        alreadyFetchedHistory: json.storage.history,\n        historyLimit: historylimit,\n        userId: userId != null && adminKey != null ? userId : undefined,\n        adminKey: userId != null && adminKey != null ? adminKey : undefined,\n      });\n    }\n    return {\n      email: json.email,\n      storage: json.storage,\n      user_id: json.user_id,\n      key: json.key,\n      is_new_user: json.is_new_user,\n    };\n  }\n\n  public async getDebugSnapshotList(userId: string, adminKey: string): Promise<string[]> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/debuginfo`);\n    url.searchParams.set(\"userid\", userId);\n    url.searchParams.set(\"key\", adminKey);\n    const result = await this.client(url.toString(), { credentials: \"include\" });\n    const json = await result.json();\n    return json.list ?? [];\n  }\n\n  public async getDebugSnapshotStorage(\n    userId: string,\n    adminKey: string,\n    timestamp: string\n  ): Promise<IStorage | undefined> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/debuginfo`);\n    url.searchParams.set(\"userid\", userId);\n    url.searchParams.set(\"key\", adminKey);\n    url.searchParams.set(\"timestamp\", timestamp);\n    const result = await this.client(url.toString(), { credentials: \"include\" });\n    const json = await result.json();\n    if (json.storage == null) {\n      return undefined;\n    }\n    return JSON.parse(await Encoder_decode(json.storage));\n  }\n\n  public async getExceptionData(id: string, key: string): Promise<string | undefined> {\n    const apiUrl = UrlUtils_build(`${__API_HOST__}/api/exception/${id}`);\n    apiUrl.searchParams.set(\"key\", key);\n    try {\n      const result = await this.client(apiUrl.toString(), { credentials: \"include\" });\n      const json = await result.json();\n      const s3Response = await this.client(json.url);\n      return s3Response.text();\n    } catch (_) {\n      return undefined;\n    }\n  }\n\n  // A negative verdict is not cached: the phone re-adds the same receipt after a cleanup, and a page-lifetime\n  // `false` would delete it again on every sync.\n  private async cacheVerdict(key: string, fn: () => Promise<{ result: boolean }>): Promise<boolean> {\n    if (cachePromises[key] == null) {\n      cachePromises[key] = fn();\n    }\n    const result = !!(await cachePromises[key]).result;\n    if (!result) {\n      delete cachePromises[key];\n    }\n    return result;\n  }\n\n  public async postEvent(event: IEventPayload): Promise<void> {\n    const nosync =\n      typeof window !== \"undefined\" && UrlUtils_build(window.location.href).searchParams.get(\"nosync\") === \"true\";\n    if (nosync) {\n      return;\n    }\n    const url = UrlUtils_build(`${__API_HOST__}/api/event`);\n    await this.client(url.toString(), {\n      method: \"POST\",\n      body: JSON.stringify(event),\n      credentials: \"include\",\n    });\n  }\n\n  public async getUploadedImages(): Promise<string[]> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/uploadedimages`);\n    const response = await this.client(url.toString(), { credentials: \"include\" });\n    if (response.ok) {\n      const json: { data: { images: string[] } } = await response.json();\n      return json.data.images;\n    } else {\n      return [];\n    }\n  }\n\n  public async postImageUploadUrl(\n    fileName: string,\n    contentType: string\n  ): Promise<{ uploadUrl: string; imageUrl: string; key: string }> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/imageuploadurl`);\n    const response = await this.client(url.toString(), {\n      method: \"POST\",\n      body: JSON.stringify({ fileName, contentType }),\n      credentials: \"include\",\n      headers: {\n        \"Content-Type\": \"application/json\",\n      },\n    });\n\n    if (!response.ok) {\n      const error = await response.text();\n      throw new Error(`Failed to get upload URL: ${error}`);\n    }\n\n    return response.json();\n  }\n\n  public async verifyAppleReceipt(userId: string, appleReceipt: string): Promise<boolean> {\n    return this.cacheVerdict(`verifyAppleReceipt:${userId}:${appleReceipt}`, async () => {\n      try {\n        const url = UrlUtils_build(`${__API_HOST__}/api/verifyapplereceipt`);\n        const result = await this.client(url.toString(), {\n          method: \"POST\",\n          body: JSON.stringify({ appleReceipt, userId }),\n          credentials: \"include\",\n        });\n        return result.status === 200 ? result.json() : { result: true };\n      } catch {\n        return { result: true };\n      }\n    });\n  }\n\n  public async verifyGooglePurchaseToken(userId: string, googlePurchaseToken: string): Promise<boolean> {\n    return this.cacheVerdict(`verifyGooglePurchaseToken:${userId}:${googlePurchaseToken}`, async () => {\n      try {\n        const url = UrlUtils_build(`${__API_HOST__}/api/verifygooglepurchasetoken`);\n        const result = await this.client(url.toString(), {\n          method: \"POST\",\n          body: JSON.stringify({ googlePurchaseToken, userId }),\n          credentials: \"include\",\n        });\n        return result.status === 200 ? result.json() : { result: true };\n      } catch {\n        return { result: true };\n      }\n    });\n  }\n\n  public async verifySubscriptionKey(userId: string, key: string): Promise<{ clear: boolean }> {\n    try {\n      const url = UrlUtils_build(`${__API_HOST__}/api/verifysubscriptionkey`);\n      // The server only verifies keys outside of prod when `enforce` is set — tests rely on it\n      const enforce =\n        typeof window !== \"undefined\" && window.location?.href\n          ? !!UrlUtils_build(window.location.href).searchParams.get(\"enforce\")\n          : false;\n      const result = await this.client(url.toString(), {\n        method: \"POST\",\n        body: JSON.stringify({ user: userId, key, enforce }),\n        credentials: \"include\",\n      });\n      if (result.status !== 200) {\n        return { clear: false };\n      }\n      const json = (await result.json()) as { data?: { clear?: boolean } };\n      return { clear: !!json.data?.clear };\n    } catch {\n      return { clear: false };\n    }\n  }\n\n  public async deleteAccount(): Promise<boolean> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/deleteaccount`);\n    const response = await this.client(url.toString(), { method: \"DELETE\", credentials: \"include\" });\n    const json = await response.json();\n    return json.data === \"ok\";\n  }\n\n  public async postShortUrl(urlToShorten: string, type: string, src?: string): Promise<string> {\n    const url = UrlUtils_build(`${__API_HOST__}/shorturl/${type}`);\n    const result = await this.client(url.toString(), {\n      method: \"POST\",\n      credentials: \"include\",\n      body: JSON.stringify({ url: urlToShorten, src }),\n    });\n    if (result.ok) {\n      const json: { url: string } = await result.json();\n      return UrlUtils_build(json.url, __HOST__).toString();\n    } else {\n      throw new Error(\"Couldn't shorten url\");\n    }\n  }\n\n  public async getDataFromShortUrl(type: \"p\" | \"n\", id: string): Promise<{ data: string; s?: string; u?: string }> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/${type}/${id}`);\n    const result = await this.client(url.toString(), { credentials: \"include\" });\n    if (result.ok) {\n      const json: { data: string; s?: string; u?: string } = await result.json();\n      return json;\n    } else {\n      throw new Error(`Couldn't parse short url: ${url.toString()}`);\n    }\n  }\n\n  public async programsIndex(): Promise<IProgramIndexEntry[]> {\n    const response = await this.client(`${__HOST__}/programdata/index.json?v=${__COMMIT_HASH__}`);\n    return response.json();\n  }\n\n  public async programDetail(id: string, category: string = \"builtin\"): Promise<IProgramDetail> {\n    const response = await this.client(`${__HOST__}/programdata/programs/${category}/${id}.json?v=${__COMMIT_HASH__}`);\n    return response.json();\n  }\n\n  public async getMuscles(exercise: string): Promise<IMuscleGeneratorResponse | undefined> {\n    const url = UrlUtils_build(`${__API_HOST__}/api/muscles`);\n    url.searchParams.set(\"exercise\", exercise);\n    if (typeof window !== \"undefined\" && window.tempUserId) {\n      url.searchParams.set(\"tempuserid\", window.tempUserId);\n    }\n    const response = await this.client(url.toString(), { credentials: \"include\" });\n    if (response.ok) {\n      const json: { data: IMuscleGeneratorResponse } = await response.json();\n      return json.data;\n    } else {\n      return undefined;\n    }\n  }\n\n  public async getUserContext(): Promise<{ account?: IAccount; units?: IUnit }> {\n    const result = await this.client(`${__API_HOST__}/api/usercontext`, {\n      method: \"GET\",\n      credentials: \"include\",\n    });\n    if (result.ok) {\n      const json = await result.json();\n      return { account: json.account || undefined, units: json.units || undefined };\n    }\n    return {};\n  }\n\n  public async getApiKeys(): Promise<{ key: string; name: string; createdAt: number }[]> {\n    const result = await this.client(`${__API_HOST__}/api/apikeys`, {\n      method: \"GET\",\n      credentials: \"include\",\n    });\n    if (result.ok) {\n      const json = await result.json();\n      return json.data?.keys || [];\n    }\n    return [];\n  }\n\n  public async postPushToken(args: { deviceId: string; platform: \"ios\" | \"android\"; token: string }): Promise<void> {\n    const result = await this.client(`${__API_HOST__}/api/pushtoken`, {\n      method: \"POST\",\n      body: JSON.stringify(args),\n      credentials: \"include\",\n      headers: { \"Content-Type\": \"application/json\" },\n    });\n    if (!result.ok) {\n      throw new Error(`postPushToken failed: ${result.status}`);\n    }\n  }\n\n  public async deletePushToken(deviceId: string): Promise<void> {\n    const result = await this.client(`${__API_HOST__}/api/pushtoken/${encodeURIComponent(deviceId)}`, {\n      method: \"DELETE\",\n      credentials: \"include\",\n    });\n    if (!result.ok) {\n      throw new Error(`deletePushToken failed: ${result.status}`);\n    }\n  }\n\n  public async createApiKey(name: string): Promise<{ key: string; name: string; createdAt: number } | undefined> {\n    const result = await this.client(`${__API_HOST__}/api/apikeys`, {\n      method: \"POST\",\n      body: JSON.stringify({ name }),\n      credentials: \"include\",\n      headers: { \"Content-Type\": \"application/json\" },\n    });\n    if (result.ok) {\n      const json = await result.json();\n      return json.data;\n    }\n    return undefined;\n  }\n\n  public async deleteApiKey(key: string): Promise<boolean> {\n    const result = await this.client(`${__API_HOST__}/api/apikeys/${encodeURIComponent(key)}`, {\n      method: \"DELETE\",\n      credentials: \"include\",\n    });\n    return result.ok;\n  }\n}\n","import { JSX, useEffect, useRef, useState } from \"react\";\nimport { View, Pressable, Platform } from \"react-native\";\nimport { Text } from \"./primitives/text\";\nimport { Service } from \"../api/service\";\nimport { IAccount } from \"../models/account\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { getGoogleAccessToken } from \"../utils/googleAccessToken\";\nimport { Button } from \"./button\";\nimport { Input } from \"./input\";\nimport { LinkButton } from \"./linkButton\";\nimport { IconApple } from \"./icons/iconApple\";\nimport { IconDoc } from \"./icons/iconDoc\";\nimport { IconDumbbell } from \"./icons/iconDumbbell\";\nimport { IconGoogle } from \"./icons/iconGoogle\";\nimport { IconSpinner } from \"./icons/iconSpinner\";\nimport { IDispatch } from \"../ducks/types\";\nimport { IState } from \"../models/state\";\nimport {\n  Thunk_googleSignIn,\n  Thunk_appleSignIn,\n  Thunk_emailAuth,\n  Thunk_forgotPassword,\n  Thunk_logOut,\n} from \"../ducks/thunks\";\nimport { IEmailAuthResult } from \"../ducks/thunks\";\nimport { track } from \"../utils/posthog\";\nimport { Tailwind_semantic } from \"../utils/tailwindConfig\";\nimport { AppleAuth_init, AppleAuth_signIn } from \"../utils/appleAuth\";\nimport { Dialog_alert } from \"../utils/dialog\";\n\ninterface IAccountProps {\n  account?: IAccount;\n  redirectUrl?: string;\n  dispatch?: IDispatch;\n  client: Window[\"fetch\"];\n  onSignIn?: (state: IState) => void;\n  // App-only: renders a \"Sign in with Email\" button opening the email-auth modal\n  // instead of the inline form. Kept as a callback so this (server-rendered)\n  // module never imports react-navigation\n  onOpenEmailAuth?: () => void;\n}\n\nconst isWeb = Platform.OS === \"web\";\n\nexport function Account(props: IAccountProps): JSX.Element {\n  const service = new Service(props.client);\n  return (\n    <View style={{ minWidth: 256, maxWidth: 416, alignSelf: \"center\", width: \"100%\" }}>\n      {props.account ? (\n        <AccountLoggedInView service={service} account={props.account} dispatch={props.dispatch} />\n      ) : (\n        <AccountLoggedOutView\n          service={service}\n          redirectUrl={props.redirectUrl}\n          dispatch={props.dispatch}\n          onSignIn={props.onSignIn}\n          onOpenEmailAuth={props.onOpenEmailAuth}\n        />\n      )}\n    </View>\n  );\n}\n\nconst changePasswordErrorMessages: Record<string, string> = {\n  invalid_credentials: \"Current password is incorrect\",\n  invalid_password: \"Password must be at least 8 characters\",\n  password_too_long: \"Password must be at most 256 characters\",\n  not_authorized: \"You're not signed in\",\n  network_error: \"Network error, please try again\",\n};\n\nexport function ChangePasswordForm(props: { service: Service; onDone: () => void }): JSX.Element {\n  const [isSubmitting, setIsSubmitting] = useState(false);\n  const [error, setError] = useState<string | undefined>(undefined);\n  const [done, setDone] = useState(false);\n  const currentRef = useRef(\"\");\n  const newRef = useRef(\"\");\n  const repeatRef = useRef(\"\");\n\n  async function submit(): Promise<void> {\n    setError(undefined);\n    if (newRef.current.length < 8) {\n      setError(changePasswordErrorMessages.invalid_password);\n      return;\n    }\n    if (newRef.current !== repeatRef.current) {\n      setError(\"Passwords don't match\");\n      return;\n    }\n    setIsSubmitting(true);\n    const err = await props.service.changePassword(currentRef.current || undefined, newRef.current);\n    setIsSubmitting(false);\n    if (err) {\n      setError(changePasswordErrorMessages[err] || \"Something went wrong, please try again\");\n    } else {\n      setDone(true);\n    }\n  }\n\n  if (done) {\n    return (\n      <View className=\"items-center py-4\">\n        <Text className=\"text-center text-text-secondary\">Your password has been updated.</Text>\n        <View className=\"items-center mt-4\">\n          <Button name=\"change-password-done\" kind=\"purple\" onClick={() => props.onDone()}>\n            Done\n          </Button>\n        </View>\n      </View>\n    );\n  }\n\n  return (\n    <View>\n      <Input\n        label=\"Current password\"\n        identifier=\"change-password-current\"\n        type=\"password\"\n        changeType=\"oninput\"\n        autoCapitalize=\"none\"\n        autoCorrect={false}\n        changeHandler={(r) => {\n          if (r.success) {\n            currentRef.current = r.data;\n          }\n        }}\n      />\n      <Text className=\"mt-1 text-xs text-text-secondary\">\n        Leave blank if you sign in with Google or Apple and haven't set a password yet.\n      </Text>\n      <View className=\"mt-3\">\n        <Input\n          label=\"New password\"\n          identifier=\"change-password-new\"\n          type=\"password\"\n          changeType=\"oninput\"\n          autoCapitalize=\"none\"\n          autoCorrect={false}\n          changeHandler={(r) => {\n            if (r.success) {\n              newRef.current = r.data;\n            }\n          }}\n        />\n      </View>\n      <View className=\"mt-3\">\n        <Input\n          label=\"Repeat new password\"\n          identifier=\"change-password-repeat\"\n          type=\"password\"\n          changeType=\"oninput\"\n          autoCapitalize=\"none\"\n          autoCorrect={false}\n          changeHandler={(r) => {\n            if (r.success) {\n              repeatRef.current = r.data;\n            }\n          }}\n        />\n      </View>\n      {error && <Text className=\"mt-2 text-xs text-text-error\">{error}</Text>}\n      <View className=\"items-center mt-4\">\n        <Button\n          name=\"change-password-submit\"\n          kind=\"purple\"\n          testID=\"change-password-submit\"\n          data-testid=\"change-password-submit\"\n          className=\"min-w-scaled-32\"\n          disabled={isSubmitting}\n          onClick={() => submit()}\n        >\n          {isSubmitting ? (\n            <IconSpinner width={20} height={20} color={Tailwind_semantic().text.alwayswhite} />\n          ) : (\n            \"Change Password\"\n          )}\n        </Button>\n      </View>\n    </View>\n  );\n}\n\ninterface IAccountLoggedInViewProps {\n  service: Service;\n  account: IAccount;\n  dispatch?: IDispatch;\n}\n\nfunction AccountLoggedInView(props: IAccountLoggedInViewProps): JSX.Element {\n  const [isLoading, setIsLoading] = useState(false);\n  const [showChangePassword, setShowChangePassword] = useState(false);\n  const { account, service } = props;\n\n  if (showChangePassword) {\n    return (\n      <View>\n        <Text className=\"mb-4 text-lg font-bold text-center\">Change Password</Text>\n        <ChangePasswordForm service={service} onDone={() => setShowChangePassword(false)} />\n        <View className=\"items-center mt-4\">\n          <LinkButton name=\"change-password-back\" className=\"text-xs\" onPress={() => setShowChangePassword(false)}>\n            Back\n          </LinkButton>\n        </View>\n      </View>\n    );\n  }\n\n  return (\n    <View>\n      <Text className=\"mb-4 text-lg font-bold text-center\">Current Account</Text>\n      {isLoading ? (\n        <View className=\"items-center my-4\">\n          <IconSpinner width={48} height={48} />\n        </View>\n      ) : (\n        <>\n          <View className=\"flex-row items-center\">\n            <Text className=\"flex-1 mr-2 text-lg\">{account.name || `id: ${account.id}`}</Text>\n            <View className=\"flex-row items-center\">\n              {account.numberOfPrograms != null && (\n                <>\n                  <Text className=\"pr-2\">{account.numberOfPrograms}</Text>\n                  <View className=\"pr-4\">\n                    <IconDoc width={12} height={16} />\n                  </View>\n                </>\n              )}\n              {account.numberOfWorkouts != null && (\n                <>\n                  <Text className=\"pr-2\">{account.numberOfWorkouts}</Text>\n                  <View>\n                    <IconDumbbell width={28} height={19} />\n                  </View>\n                </>\n              )}\n            </View>\n          </View>\n          {account.name && <Text className=\"text-xs text-text-secondary\">id: {account.id}</Text>}\n          {account.email !== \"noemail@example.com\" && (\n            <Text className=\"text-xs text-text-secondary\">\n              Signed in as <Text className=\"text-xs font-bold text-text-secondary\">{account.email}</Text>\n            </Text>\n          )}\n          <View className=\"items-center mt-4\">\n            <Button\n              name=\"account-sign-out\"\n              kind=\"purple\"\n              data-testid=\"menu-item-logout\"\n              testID=\"menu-item-logout\"\n              className=\"ls-logout\"\n              onClick={async () => {\n                setIsLoading(true);\n                if (props.dispatch && !isWeb) {\n                  props.dispatch(Thunk_logOut(() => setIsLoading(false)));\n                  return;\n                }\n                await service.signout();\n                if (isWeb && typeof window !== \"undefined\") {\n                  window.location.reload();\n                } else {\n                  setIsLoading(false);\n                }\n              }}\n            >\n              Sign Out\n            </Button>\n            <View className=\"mt-3\">\n              <LinkButton\n                name=\"account-change-password\"\n                className=\"text-sm\"\n                onPress={() => setShowChangePassword(true)}\n              >\n                Change password\n              </LinkButton>\n            </View>\n          </View>\n        </>\n      )}\n    </View>\n  );\n}\n\ninterface IAccountLoggedOutViewProps {\n  service: Service;\n  redirectUrl?: string;\n  dispatch?: IDispatch;\n  onSignIn?: (state: IState) => void;\n  onOpenEmailAuth?: () => void;\n}\n\nfunction AccountLoggedOutView(props: IAccountLoggedOutViewProps): JSX.Element {\n  const [isLoading, setIsLoading] = useState(false);\n  const [showEmailForm, setShowEmailForm] = useState(false);\n\n  useEffect(() => {\n    if (!isWeb) {\n      return;\n    }\n    AppleAuth_init();\n  }, []);\n\n  return (\n    <View>\n      <Text className=\"mb-4 text-lg font-bold text-center\">Account</Text>\n      {isLoading ? (\n        <View className=\"items-center my-4\">\n          <IconSpinner width={48} height={48} />\n        </View>\n      ) : showEmailForm ? (\n        <View>\n          <EmailAuthForm service={props.service} redirectUrl={props.redirectUrl} onSignIn={props.onSignIn} />\n          <View className=\"items-center mt-4\">\n            <LinkButton name=\"email-auth-back\" className=\"text-xs\" onPress={() => setShowEmailForm(false)}>\n              Back to sign in options\n            </LinkButton>\n          </View>\n        </View>\n      ) : (\n        <View>\n          <Pressable\n            className=\"flex-row items-center w-full px-4 py-2 mt-2 rounded-lg nm-sign-in-with-google bg-background-default\"\n            style={Platform.select({\n              ios: { shadowColor: \"#000\", shadowOffset: { width: 0, height: 1 }, shadowOpacity: 0.1, shadowRadius: 4 },\n              android: { elevation: 2 },\n              default: { boxShadow: \"0 1px 4px 0 rgba(0,0,0,0.1)\" },\n            })}\n            data-testid=\"menu-item-login\"\n            testID=\"menu-item-login\"\n            onPress={async () => {\n              track({ name: \"SignUp\" });\n              setIsLoading(true);\n              if (props.dispatch) {\n                props.dispatch(\n                  Thunk_googleSignIn((newState) => {\n                    setIsLoading(false);\n                    props.onSignIn?.(newState);\n                  })\n                );\n                return;\n              }\n              const accessToken = await getGoogleAccessToken(true);\n              if (accessToken != null) {\n                const userId = UidFactory_generateUid(8);\n                const result = await props.service.googleSignIn(accessToken, userId, {});\n                if (result.email) {\n                  if (props.redirectUrl && typeof window !== \"undefined\") {\n                    window.location.href = props.redirectUrl;\n                  } else if (typeof window !== \"undefined\") {\n                    window.location.reload();\n                  }\n                } else {\n                  setIsLoading(false);\n                }\n              }\n            }}\n          >\n            <View>\n              <IconGoogle />\n            </View>\n            <Text className=\"flex-1 ml-2 text-base text-center\">Sign in with Google</Text>\n          </Pressable>\n          <Pressable\n            className=\"flex-row items-center w-full px-4 py-3 mt-2 bg-black rounded-lg nm-sign-in-with-apple\"\n            onPress={async () => {\n              track({ name: \"SignUp\" });\n              setIsLoading(true);\n              if (props.dispatch) {\n                props.dispatch(\n                  Thunk_appleSignIn((newState) => {\n                    setIsLoading(false);\n                    props.onSignIn?.(newState);\n                  })\n                );\n                return;\n              }\n              const appleResult = await AppleAuth_signIn();\n              if (appleResult.type !== \"success\") {\n                if (appleResult.type === \"error\") {\n                  Dialog_alert(appleResult.error);\n                }\n                setIsLoading(false);\n                return;\n              }\n              const userId = UidFactory_generateUid(8);\n              try {\n                const result = await props.service.appleSignIn(appleResult.code, appleResult.id_token, userId);\n                if (result.email && typeof window !== \"undefined\") {\n                  window.location.reload();\n                } else {\n                  setIsLoading(false);\n                }\n              } catch (e) {\n                Dialog_alert(\"Couldn't sign in with Apple. Please try again.\");\n                setIsLoading(false);\n              }\n            }}\n          >\n            <View style={{ marginTop: -3 }}>\n              <IconApple />\n            </View>\n            <Text className=\"flex-1 ml-2 text-base text-center text-text-alwayswhite\">Sign in with Apple</Text>\n          </Pressable>\n          <EmailAuthButton onPress={props.onOpenEmailAuth || (() => setShowEmailForm(true))} />\n        </View>\n      )}\n    </View>\n  );\n}\n\nexport function EmailAuthButton(props: { onPress: () => void }): JSX.Element {\n  return (\n    <View className=\"items-center mt-3\">\n      <LinkButton name=\"menu-item-login-email\" className=\"text-xs\" onPress={props.onPress}>\n        or use email login\n      </LinkButton>\n    </View>\n  );\n}\n\nexport type IEmailAuthMode = \"signin\" | \"signup\" | \"forgot\";\n\nconst emailAuthErrorMessages: Record<string, string> = {\n  invalid_email: \"Please enter a valid email address\",\n  invalid_password: \"Password must be at least 8 characters\",\n  password_too_long: \"Password must be at most 256 characters\",\n  account_exists: \"An account with this email already exists - sign in instead\",\n  invalid_credentials: \"Wrong email or password\",\n  account_not_found: \"No account exists with this email\",\n  wrong_password: \"Wrong password\",\n  too_many_attempts: \"Too many attempts, try again in 15 minutes\",\n  email_send_failed: \"Couldn't send the confirmation email, please try again later\",\n  network_error: \"Network error, please try again\",\n};\n\ninterface IEmailAuthFormProps {\n  // Required only for the web no-dispatch path; in-app callers pass dispatch and go through thunks\n  service?: Service;\n  redirectUrl?: string;\n  dispatch?: IDispatch;\n  onSignIn?: (state: IState) => void;\n  onModeChange?: (mode: IEmailAuthMode) => void;\n}\n\nexport function EmailAuthForm(props: IEmailAuthFormProps): JSX.Element {\n  const [mode, setMode] = useState<IEmailAuthMode>(\"signin\");\n  const [isSubmitting, setIsSubmitting] = useState(false);\n  const [error, setError] = useState<string | undefined>(undefined);\n  const [info, setInfo] = useState<string | undefined>(undefined);\n  const emailRef = useRef(\"\");\n  const passwordRef = useRef(\"\");\n\n  function switchMode(newMode: IEmailAuthMode): void {\n    setMode(newMode);\n    setError(undefined);\n    setInfo(undefined);\n    props.onModeChange?.(newMode);\n  }\n\n  function handleResult(result: IEmailAuthResult): void {\n    setIsSubmitting(false);\n    if (result.error === \"use_oauth\") {\n      const providers = result.providers?.length ? result.providers : [\"Google\", \"Apple\"];\n      setError(`This email signs in with ${providers.join(\" or \")}`);\n    } else if (result.error) {\n      setError(emailAuthErrorMessages[result.error] || \"Something went wrong, please try again\");\n    } else if (result.confirmationSent) {\n      setInfo(\n        \"This email already has a Liftosaur account. We've emailed you a link to set a password for it - check your email.\"\n      );\n    }\n  }\n\n  async function submit(): Promise<void> {\n    const email = emailRef.current.trim();\n    const password = passwordRef.current;\n    setError(undefined);\n    setInfo(undefined);\n    if (mode === \"forgot\") {\n      if (!email) {\n        setError(emailAuthErrorMessages.invalid_email);\n        return;\n      }\n      setIsSubmitting(true);\n      const onSent = (result: IEmailAuthResult): void => {\n        if (result.error) {\n          handleResult(result);\n        } else {\n          setIsSubmitting(false);\n          setInfo(`We've sent an email with instructions to ${email}.`);\n        }\n      };\n      if (props.dispatch) {\n        props.dispatch(Thunk_forgotPassword(email, onSent));\n      } else if (props.service) {\n        onSent(await props.service.forgotPassword(email));\n      }\n      return;\n    }\n    if (mode === \"signup\") {\n      track({ name: \"SignUp\" });\n    }\n    setIsSubmitting(true);\n    if (props.dispatch) {\n      props.dispatch(\n        Thunk_emailAuth(mode, email, password, (result, newState) => {\n          handleResult(result);\n          if (!result.error && !result.confirmationSent) {\n            props.onSignIn?.(newState);\n          }\n        })\n      );\n      return;\n    }\n    if (!props.service) {\n      setIsSubmitting(false);\n      return;\n    }\n    const userId = UidFactory_generateUid(8);\n    const result =\n      mode === \"signup\"\n        ? await props.service.emailSignUp(email, password, userId)\n        : await props.service.emailSignIn(email, password, userId);\n    if (result.type === \"success\" && typeof window !== \"undefined\") {\n      if (props.redirectUrl) {\n        window.location.href = props.redirectUrl;\n      } else {\n        window.location.reload();\n      }\n      return;\n    }\n    handleResult(\n      result.type === \"error\"\n        ? { error: result.error, providers: result.providers }\n        : result.type === \"confirmation_sent\"\n          ? { confirmationSent: true }\n          : {}\n    );\n  }\n\n  return (\n    <View className=\"mt-2\">\n      <Input\n        label=\"Email\"\n        identifier=\"email-auth-email\"\n        type=\"email\"\n        changeType=\"oninput\"\n        autoCapitalize=\"none\"\n        autoCorrect={false}\n        changeHandler={(r) => {\n          if (r.success) {\n            emailRef.current = r.data;\n          }\n        }}\n      />\n      {mode !== \"forgot\" && (\n        <View className=\"mt-2\">\n          <Input\n            label=\"Password\"\n            identifier=\"email-auth-password\"\n            type=\"password\"\n            changeType=\"oninput\"\n            autoCapitalize=\"none\"\n            autoCorrect={false}\n            changeHandler={(r) => {\n              if (r.success) {\n                passwordRef.current = r.data;\n              }\n            }}\n          />\n        </View>\n      )}\n      {error && <Text className=\"mt-2 text-xs text-text-error\">{error}</Text>}\n      {info && <Text className=\"mt-2 text-xs text-text-secondary\">{info}</Text>}\n      <View className=\"items-center mt-3\">\n        <Button\n          name={`email-auth-${mode}`}\n          kind=\"purple\"\n          testID=\"email-auth-submit\"\n          data-testid=\"email-auth-submit\"\n          className=\"min-w-scaled-32\"\n          disabled={isSubmitting}\n          onClick={() => submit()}\n        >\n          {isSubmitting ? (\n            <IconSpinner width={20} height={20} color={Tailwind_semantic().text.alwayswhite} />\n          ) : mode === \"signin\" ? (\n            \"Sign In\"\n          ) : mode === \"signup\" ? (\n            \"Create Account\"\n          ) : (\n            \"Send Reset Link\"\n          )}\n        </Button>\n      </View>\n      <View className=\"flex-row justify-between mt-4 gap-4\">\n        {mode !== \"signin\" && (\n          <LinkButton name=\"email-auth-mode-signin\" className=\"text-sm\" onPress={() => switchMode(\"signin\")}>\n            Sign in\n          </LinkButton>\n        )}\n        {mode !== \"signup\" && (\n          <LinkButton name=\"email-auth-mode-signup\" className=\"text-sm\" onPress={() => switchMode(\"signup\")}>\n            Create account\n          </LinkButton>\n        )}\n        {mode !== \"forgot\" && (\n          <LinkButton name=\"email-auth-mode-forgot\" className=\"text-sm\" onPress={() => switchMode(\"forgot\")}>\n            Forgot password?\n          </LinkButton>\n        )}\n      </View>\n    </View>\n  );\n}\n","import { JSX, ReactNode } from \"react\";\nimport { GestureResponderEvent, Pressable } from \"react-native\";\nimport { Pressable as StickyPressable } from \"./primitives/pressable\";\nimport { Text } from \"./primitives/text\";\nimport { useTrackClick } from \"../utils/clickTracking\";\n\nfunction containsString(children: ReactNode): boolean {\n  if (typeof children === \"string\" || typeof children === \"number\") {\n    return true;\n  }\n  if (Array.isArray(children)) {\n    return children.some((c) => typeof c === \"string\" || typeof c === \"number\");\n  }\n  return false;\n}\n\ninterface IProps {\n  buttonSize?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"lg2\";\n  kind: \"orange\" | \"purple\" | \"grayv2\" | \"red\" | \"transparent-purple\" | \"lightpurple\" | \"lightgrayv3\";\n  name: string;\n  onPress?: (e: GestureResponderEvent) => void;\n  onClick?: (e: GestureResponderEvent) => void;\n  disabled?: boolean;\n  className?: string;\n  children?: ReactNode;\n  testID?: string;\n  type?: string;\n  title?: string;\n  style?: Record<string, unknown>;\n  tabIndex?: number;\n  sticky?: boolean;\n}\n\nexport function Button(props: IProps): JSX.Element {\n  const { children, buttonSize, kind, disabled } = props;\n  const testID = props.testID || props.name;\n\n  // extract classname text size\n  const textSize = props.className\n    ? props.className.includes(\"text-xs\")\n      ? \"text-xs\"\n      : props.className.includes(\"text-sm\")\n        ? \"text-sm\"\n        : props.className.includes(\"text-lg\")\n          ? \"text-lg\"\n          : props.className.includes(\"text-base\")\n            ? \"text-base\"\n            : undefined\n    : undefined;\n\n  let containerCn = \"rounded-lg items-center justify-center\";\n  let textCn = \"text-center \";\n  if (!textSize) {\n    textCn += \"text-xs \";\n  } else {\n    textCn += textSize + \" \";\n  }\n\n  if (disabled) {\n    containerCn += \" bg-background-darkgray opacity-50\";\n    textCn += \" text-text-alwayswhite\";\n  } else if (kind === \"purple\") {\n    containerCn += \" bg-button-primarybackground\";\n    textCn += \" text-text-alwayswhite\";\n  } else if (kind === \"grayv2\") {\n    containerCn += \" bg-background-darkgray\";\n    textCn += \" text-text-alwayswhite\";\n  } else if (kind === \"red\") {\n    containerCn += \" bg-background-darkred\";\n    textCn += \" text-text-alwayswhite\";\n  } else if (kind === \"transparent-purple\") {\n    containerCn += \" bg-transparent\";\n    textCn += \" text-text-purple\";\n  } else if (kind === \"lightpurple\") {\n    containerCn += \" bg-background-purpledark\";\n    textCn += \" text-text-link\";\n  } else if (kind === \"lightgrayv3\") {\n    containerCn += \" bg-background-subtle border border-background-subtle\";\n    textCn += \" text-text-link\";\n  } else {\n    containerCn += \" bg-button-orangebackground\";\n    textCn += \" text-text-primaryinverse\";\n  }\n\n  if (buttonSize === \"sm\") {\n    containerCn += \" px-2 py-1\";\n    textCn += \" font-semibold\";\n  } else if (buttonSize === \"xs\") {\n    containerCn += \" px-1 py-0\";\n    textCn += \" font-normal\";\n  } else if (buttonSize === \"md\") {\n    containerCn += \" px-4 py-2\";\n    textCn += \" font-semibold\";\n  } else if (buttonSize === \"lg2\") {\n    containerCn += \" px-2 py-3\";\n    textCn += \" font-semibold\";\n  } else {\n    containerCn += \" px-8 py-3\";\n    textCn += \" font-semibold\";\n  }\n\n  if (props.className) {\n    containerCn += ` ${props.className}`;\n  }\n  containerCn += ` nm-${props.name}`;\n\n  const accessibilityLabel = typeof children === \"string\" ? children : undefined;\n  const trackClick = useTrackClick();\n  const userOnPress = props.onPress || props.onClick;\n  const onPress = (e: GestureResponderEvent): void => {\n    trackClick(props.name, props.className);\n    userOnPress?.(e);\n  };\n  const PressableComponent = props.sticky ? StickyPressable : Pressable;\n  return (\n    <PressableComponent\n      accessibilityRole=\"button\"\n      accessibilityLabel={accessibilityLabel}\n      className={containerCn}\n      onPress={onPress}\n      disabled={disabled}\n      testID={testID}\n      data-testid={testID}\n    >\n      {containsString(children) ? <Text className={textCn}>{children}</Text> : children}\n    </PressableComponent>\n  );\n}\n","import type { JSX } from \"react\";\nimport { IconInstagramFlat } from \"./icons/iconInstagramFlat\";\nimport { IconYoutube } from \"./icons/iconYoutube\";\nimport { IconReddit } from \"./icons/iconReddit\";\nimport { IconDiscord } from \"./icons/iconDiscord\";\nimport { Tailwind_semantic } from \"../utils/tailwindConfig\";\n\ninterface IProps {\n  maxWidth?: number;\n}\n\nconst footerLinks: [string, string][] = [\n  [\"Roadmap\", \"https://github.com/astashov/liftosaur/discussions\"],\n  [\"Features\", \"/features\"],\n  [\"Docs\", \"/doc\"],\n  [\"Web Editor\", \"/planner\"],\n  [\"1RM Calculator\", \"/one-rep-max-calculator\"],\n  [\"Your Programs\", \"/user/programs\"],\n  [\"Blog\", \"/blog\"],\n  [\"Exercises\", \"/exercises\"],\n  [\"Terms & Conditions\", \"/terms.html\"],\n  [\"Privacy\", \"/privacy.html\"],\n  [\"Affiliate Program\", \"/affiliates\"],\n];\n\nexport function FooterPage(props: IProps): JSX.Element {\n  const maxWidth = props.maxWidth != null ? `${props.maxWidth}px` : \"800px\";\n  return (\n    <footer className=\"mt-8 \">\n      <div style={{ backgroundColor: \"#28204B\" }}>\n        <div className=\"px-6 mx-auto\" style={{ maxWidth }}>\n          <div className=\"flex flex-col md:flex-row md:items-center md:gap-10\">\n            <div className=\"hidden pt-8 md:block shrink-0\">\n              <img src=\"/images/logo.svg\" alt=\"\" style={{ height: \"200px\" }} />\n            </div>\n\n            <div className=\"shrink-0\">\n              <div className=\"pt-8 text-3xl font-bold text-text-alwayswhite md:pt-0\">Liftosaur</div>\n              <div className=\"flex items-center gap-4 mt-5\">\n                <span className=\"text-sm text-text-alwayswhite\">Follow us:</span>\n                <a\n                  href=\"https://www.instagram.com/liftosaurapp\"\n                  target=\"_blank\"\n                  className=\"opacity-80 hover:opacity-100\"\n                >\n                  <IconInstagramFlat size={28} color={Tailwind_semantic().text.alwayswhite} />\n                </a>\n                <a href=\"https://www.youtube.com/@Liftosaur\" target=\"_blank\" className=\"opacity-80 hover:opacity-100\">\n                  <IconYoutube size={28} color={Tailwind_semantic().text.alwayswhite} secondaryColor=\"#28204B\" />\n                </a>\n                <a href=\"https://www.reddit.com/r/liftosaur\" target=\"_blank\" className=\"opacity-80 hover:opacity-100\">\n                  <IconReddit size={28} color={Tailwind_semantic().text.alwayswhite} secondaryColor=\"#28204B\" />\n                </a>\n                <a href=\"https://discord.gg/AAh3cvdBRs\" target=\"_blank\" className=\"opacity-80 hover:opacity-100\">\n                  <IconDiscord size={28} color={Tailwind_semantic().text.alwayswhite} />\n                </a>\n              </div>\n              <div className=\"mt-4 text-sm text-text-alwayswhite\">\n                Questions?{\" \"}\n                <a href=\"mailto:info@liftosaur.com\" className=\"text-purple-300 underline\">\n                  info@liftosaur.com\n                </a>\n              </div>\n            </div>\n\n            <div className=\"flex-1 mt-8 md:mt-0 md:flex md:justify-end\">\n              <div className=\"footer-links-grid gap-x-10 gap-y-3\">\n                {footerLinks.map(([text, link]) => (\n                  <a\n                    key={text}\n                    className=\"text-sm text-gray-300 no-underline hover:text-text-alwayswhite\"\n                    href={link}\n                    target={link.startsWith(\"http\") ? \"_blank\" : undefined}\n                  >\n                    {text}\n                  </a>\n                ))}\n                <a\n                  className=\"text-sm text-gray-300 no-underline cursor-pointer hover:text-text-alwayswhite\"\n                  href=\"#privacy-settings\"\n                  onClick={(e) => {\n                    e.preventDefault();\n                    (window as unknown as { lftConsent?: { open: () => void } }).lftConsent?.open();\n                  }}\n                >\n                  Privacy Settings\n                </a>\n              </div>\n            </div>\n          </div>\n\n          <div className=\"mt-8 md:hidden\">\n            <img src=\"/images/logo.svg\" alt=\"\" style={{ height: \"200px\" }} />\n          </div>\n        </div>\n      </div>\n    </footer>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\n\nexport function IconApple(props: { color?: string; size?: number }): JSX.Element {\n  const color = props.color || \"white\";\n  const size = props.size || 20;\n  const height = size * 1.2;\n  return (\n    <IconSvg width={size} height={height} viewBox=\"0 0 20 24\" fill=\"none\">\n      <Path\n        d=\"M19.1266 18.424C18.7788 19.2275 18.3671 19.9672 17.8901 20.6472C17.2398 21.5743 16.7074 22.216 16.2971 22.5724C15.6611 23.1573 14.9797 23.4568 14.2499 23.4739C13.726 23.4739 13.0943 23.3248 12.3589 23.0224C11.621 22.7214 10.943 22.5724 10.323 22.5724C9.67278 22.5724 8.97542 22.7214 8.2295 23.0224C7.48245 23.3248 6.88063 23.4824 6.42051 23.498C5.72073 23.5278 5.02323 23.2197 4.327 22.5724C3.88263 22.1848 3.32682 21.5204 2.66097 20.5791C1.94657 19.5739 1.35924 18.4084 0.899113 17.0795C0.406331 15.6442 0.159302 14.2543 0.159302 12.9087C0.159302 11.3673 0.492366 10.0379 1.15949 8.92385C1.68379 8.029 2.38129 7.32312 3.25427 6.80493C4.12725 6.28674 5.0705 6.02267 6.08631 6.00578C6.64212 6.00578 7.371 6.1777 8.27678 6.51559C9.18 6.85462 9.75995 7.02655 10.0142 7.02655C10.2043 7.02655 10.8486 6.82552 11.9408 6.42473C12.9736 6.05305 13.8453 5.89916 14.5594 5.95978C16.4945 6.11595 17.9483 6.87876 18.9151 8.25303C17.1845 9.30163 16.3284 10.7703 16.3454 12.6544C16.361 14.122 16.8934 15.3432 17.9397 16.3129C18.4139 16.7629 18.9435 17.1107 19.5327 17.3578C19.4049 17.7283 19.27 18.0832 19.1266 18.424ZM14.6886 0.960131C14.6886 2.11039 14.2684 3.18439 13.4307 4.17847C12.4199 5.36023 11.1973 6.04311 9.8714 5.93536C9.8545 5.79736 9.8447 5.65213 9.8447 5.49951C9.8447 4.39526 10.3254 3.21349 11.1791 2.24724C11.6053 1.75801 12.1473 1.35122 12.8047 1.02671C13.4606 0.707053 14.081 0.530273 14.6645 0.5C14.6815 0.653772 14.6886 0.807554 14.6886 0.960116V0.960131Z\"\n        fill={color}\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  size?: number;\n  color?: string;\n}\n\nexport function IconClose(props: IProps = {}): JSX.Element {\n  const size = props.size ?? 24;\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg width={size} height={size} viewBox=\"0 0 512 512\">\n      <Path\n        fill={color}\n        d=\"M443.6,387.1L312.4,255.4l131.5-130c5.4-5.4,5.4-14.2,0-19.6l-37.4-37.6c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4  L256,197.8L124.9,68.3c-2.6-2.6-6.1-4-9.8-4c-3.7,0-7.2,1.5-9.8,4L68,105.9c-5.4,5.4-5.4,14.2,0,19.6l131.5,130L68.4,387.1  c-2.6,2.6-4.1,6.1-4.1,9.8c0,3.7,1.4,7.2,4.1,9.8l37.4,37.6c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1L256,313.1l130.7,131.1  c2.7,2.7,6.2,4.1,9.8,4.1c3.5,0,7.1-1.3,9.8-4.1l37.4-37.6c2.6-2.6,4.1-6.1,4.1-9.8C447.7,393.2,446.2,389.7,443.6,387.1z\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path, Rect } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  size?: number;\n  color?: string;\n  bgColor?: string;\n}\n\nexport function IconCloseCircleOutline(props: IProps = {}): JSX.Element {\n  const size = props.size ?? 20;\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  const bgColor = props.bgColor ?? Tailwind_semantic().background.subtle;\n  return (\n    <IconSvg width={size} height={size} viewBox=\"0 0 32 32\" fill=\"none\">\n      <Rect width=\"32\" height=\"32\" rx=\"16\" fill={bgColor} />\n      <Path\n        d=\"M21.9081 21.4999C21.4635 21.9446 20.7425 21.9446 20.2978 21.4999L16.2721 17.4742L12.2463 21.4999C11.8017 21.9446 11.0807 21.9446 10.636 21.4999C10.1914 21.0553 10.1914 20.3343 10.636 19.8896L14.6618 15.8639L10.636 11.8381C10.1914 11.3935 10.1914 10.6725 10.636 10.2278C11.0807 9.78317 11.8017 9.78317 12.2463 10.2278L16.2721 14.2536L20.2978 10.2278C20.7425 9.78317 21.4635 9.78317 21.9081 10.2278C22.3528 10.6725 22.3528 11.3935 21.9081 11.8381L17.8824 15.8639L21.9081 19.8896C22.3528 20.3343 22.3528 21.0553 21.9081 21.4999Z\"\n        fill={color}\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\n\ninterface IProps {\n  style?: { [key: string]: string | number };\n  size?: number;\n  className?: string;\n  color?: string;\n}\n\nexport function IconDiscord(props: IProps): JSX.Element {\n  const size = props.size || 24;\n  const color = props.color || \"#5865F2\";\n  return (\n    <IconSvg width={size} height={size} viewBox=\"0 -28.5 256 256\">\n      <Path\n        d=\"M216.856339,16.5966031 C200.285002,8.84328665 182.566144,3.2084988 164.041564,0 C161.766523,4.11318106 159.108624,9.64549908 157.276099,14.0464379 C137.583995,11.0849896 118.072967,11.0849896 98.7430163,14.0464379 C96.9108417,9.64549908 94.1925838,4.11318106 91.8971895,0 C73.3526068,3.2084988 55.6133949,8.86399117 39.0420583,16.6376612 C5.61752293,67.146514 -3.4433191,116.400813 1.08711069,164.955721 C23.2560196,181.510915 44.7403634,191.567697 65.8621325,198.148576 C71.0772151,190.971126 75.7283628,183.341335 79.7352139,175.300261 C72.104019,172.400575 64.7949724,168.822202 57.8887866,164.667963 C59.7209612,163.310589 61.5131304,161.891452 63.2445898,160.431257 C105.36741,180.133187 151.134928,180.133187 192.754523,160.431257 C194.506336,161.891452 196.298154,163.310589 198.110326,164.667963 C191.183787,168.842556 183.854737,172.420929 176.223542,175.320965 C180.230393,183.341335 184.861538,190.991831 190.096624,198.16893 C211.238746,191.588051 232.743023,181.531619 254.911949,164.955721 C260.227747,108.668201 245.831087,59.8662432 216.856339,16.5966031 Z M85.4738752,135.09489 C72.8290281,135.09489 62.4592217,123.290155 62.4592217,108.914901 C62.4592217,94.5396472 72.607595,82.7145587 85.4738752,82.7145587 C98.3405064,82.7145587 108.709962,94.5189427 108.488529,108.914901 C108.508531,123.290155 98.3405064,135.09489 85.4738752,135.09489 Z M170.525237,135.09489 C157.88039,135.09489 147.510584,123.290155 147.510584,108.914901 C147.510584,94.5396472 157.658606,82.7145587 170.525237,82.7145587 C183.391518,82.7145587 193.761324,94.5189427 193.539891,108.914901 C193.539891,123.290155 183.391518,135.09489 170.525237,135.09489 Z\"\n        fill={color}\n        fillRule=\"nonzero\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  style?: { [key: string]: string | number };\n  width?: number;\n  height?: number;\n  className?: string;\n  color?: string;\n}\n\nexport function IconDoc(props: IProps): JSX.Element {\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  const width = props.width || 17;\n  const height = props.height || 22;\n  return (\n    <IconSvg\n      style={props.style}\n      className={`inline-block ${props.className ?? \"\"}`}\n      width={width}\n      height={height}\n      viewBox=\"0 0 17 22\"\n      fill=\"none\"\n    >\n      <Path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M13.1195 20.807H3.88537C2.29826 20.807 1 19.4965 1 17.8944V3.91333C1 2.31123 2.29826 1 3.88537 1H8.06936C8.50281 1 9.00786 1.21825 9.36866 1.43649L15.5725 7.69895C15.9333 8.06281 16.0049 8.50035 16.0049 9.01053V17.894C16.0049 19.4965 14.7793 20.807 13.1195 20.807Z\"\n        stroke={color}\n        strokeWidth=\"1.6\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <Path\n        d=\"M8.50246 1.27441V5.68669C8.50246 5.68669 8.42252 8.66424 10.9655 8.61336H15.6448\"\n        stroke={color}\n        strokeWidth=\"1.6\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <Path\n        d=\"M4.46238 12.4861H12.5425\"\n        stroke={color}\n        strokeWidth=\"1.6\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n      <Path\n        d=\"M4.42206 16.3123H12.5019\"\n        stroke={color}\n        strokeWidth=\"1.6\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  style?: { [key: string]: string | number };\n  className?: string;\n  color?: string;\n  width?: number;\n  height?: number;\n}\n\nexport function IconDumbbell(props: IProps): JSX.Element {\n  const width = props.width || 32;\n  const height = props.height || 21;\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg\n      style={props.style}\n      className={`inline-block ${props.className ?? \"\"}`}\n      width={width}\n      height={height}\n      viewBox=\"0 0 32 21\"\n      fill=\"none\"\n    >\n      <Path d=\"M9.09267 8.46919L22.7291 8.46919M22.7291 13.0846L9.09272 13.0846\" stroke={color} />\n      <Path\n        d=\"M9.09286 6.16169C9.09286 4.88719 8.17708 3.854 7.04741 3.854C5.91773 3.854 5.00195 4.88719 5.00195 6.16169L5.00195 15.3924C5.00195 16.667 5.91773 17.7001 7.04741 17.7001C8.17708 17.7001 9.09286 16.667 9.09286 15.3924L9.09286 6.16169Z\"\n        stroke={color}\n      />\n      <Path\n        d=\"M5.00156 8.46882C5.00156 7.19432 4.08577 6.16113 2.9561 6.16113C1.82643 6.16113 0.910644 7.19432 0.910644 8.46882L0.910644 13.0842C0.910643 14.3587 1.82643 15.3919 2.9561 15.3919C4.08577 15.3919 5.00156 14.3587 5.00156 13.0842L5.00156 8.46882Z\"\n        stroke={color}\n      />\n      <Path\n        d=\"M30.9105 8.46882C30.9105 7.19432 29.9947 6.16113 28.865 6.16113C27.7354 6.16113 26.8196 7.19432 26.8196 8.46882L26.8196 13.0842C26.8196 14.3587 27.7354 15.3919 28.865 15.3919C29.9947 15.3919 30.9105 14.3587 30.9105 13.0842L30.9105 8.46882Z\"\n        stroke={color}\n      />\n      <Path\n        d=\"M26.8199 6.16169C26.8199 4.88719 25.9041 3.854 24.7745 3.854C23.6448 3.854 22.729 4.88719 22.729 6.16169L22.729 15.3924C22.729 16.667 23.6448 17.7001 24.7745 17.7001C25.9041 17.7001 26.8199 16.667 26.8199 15.3925L26.8199 6.16169Z\"\n        stroke={color}\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\n\nexport function IconGoogle(): JSX.Element {\n  return (\n    <IconSvg width={24} height={24} viewBox=\"0 0 24 24\" fill=\"none\">\n      <Path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M23.04 12.2613C23.04 11.4459 22.9668 10.6618 22.8309 9.90906H12V14.3575H18.1891C17.9225 15.795 17.1123 17.0129 15.8943 17.8284V20.7138H19.6109C21.7855 18.7118 23.04 15.7636 23.04 12.2613Z\"\n        fill=\"#4285F4\"\n      />\n      <Path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M12 23.4998C15.105 23.4998 17.7081 22.47 19.6109 20.7137L15.8943 17.8282C14.8645 18.5182 13.5472 18.9259 12 18.9259C9.00474 18.9259 6.46951 16.903 5.56519 14.1848H1.72314V17.1644C3.61542 20.9228 7.50451 23.4998 12 23.4998Z\"\n        fill=\"#34A853\"\n      />\n      <Path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M5.56523 14.1851C5.33523 13.4951 5.20455 12.7581 5.20455 12.0001C5.20455 11.2422 5.33523 10.5051 5.56523 9.81512V6.83557H1.72318C0.944318 8.38807 0.5 10.1444 0.5 12.0001C0.5 13.8558 0.944318 15.6122 1.72318 17.1647L5.56523 14.1851Z\"\n        fill=\"#FBBC05\"\n      />\n      <Path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M12 5.07386C13.6884 5.07386 15.2043 5.65409 16.3961 6.79364L19.6945 3.49523C17.7029 1.63955 15.0997 0.5 12 0.5C7.50451 0.5 3.61542 3.07705 1.72314 6.83545L5.56519 9.815C6.46951 7.09682 9.00474 5.07386 12 5.07386Z\"\n        fill=\"#EA4335\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\n\ninterface IProps {\n  size?: number;\n  color?: string;\n  className?: string;\n}\n\nexport function IconGooglePlay(props: IProps): JSX.Element {\n  const size = props.size ?? 24;\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg width={size} height={size} className={props.className} viewBox=\"0 0 24 24\" fill=\"none\">\n      <Path\n        d=\"M12.6225 12.75L3.17246 3.5775C3.05288 3.82352 2.99374 4.09453 2.99996 4.368V21.135C2.99996 21.456 3.06596 21.723 3.17846 21.936L12.6225 12.75ZM13.17 12.219L16.08 9.3885L4.98296 3.258C4.71764 3.09893 4.41614 3.01014 4.10696 3C3.98064 2.99976 3.85526 3.02159 3.73646 3.0645L13.17 12.219ZM20.184 11.6565L16.782 9.777L13.722 12.7545L16.782 15.7245L20.184 13.8435C21.273 13.2435 21.273 12.258 20.184 11.6565ZM13.176 13.287L3.76346 22.4445C4.09946 22.5555 4.52096 22.503 4.98296 22.2495L16.086 16.11L13.176 13.287Z\"\n        fill={color}\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  style?: { [key: string]: string | number };\n  className?: string;\n  size?: number;\n  color?: string;\n}\n\nexport function IconHamburger(props: IProps): JSX.Element {\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  const size = props.size ?? 22;\n  return (\n    <IconSvg style={props.style} className={props.className} width={size} height={size} viewBox=\"0 0 22 22\" fill=\"none\">\n      <Path\n        d=\"M1.57143 6.2H20.4286C21.296 6.2 22 5.4832 22 4.6C22 3.7168 21.296 3 20.4286 3H1.57143C0.704 3 0 3.7168 0 4.6C0 5.4832 0.704 6.2 1.57143 6.2ZM20.4286 9.4H1.57143C0.704 9.4 0 10.1168 0 11C0 11.8832 0.704 12.6 1.57143 12.6H20.4286C21.296 12.6 22 11.8832 22 11C22 10.1168 21.296 9.4 20.4286 9.4ZM20.4286 15.8H1.57143C0.704 15.8 0 16.5168 0 17.4C0 18.2832 0.704 19 1.57143 19H20.4286C21.296 19 22 18.2832 22 17.4C22 16.5168 21.296 15.8 20.4286 15.8Z\"\n        fill={color}\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  style?: { [key: string]: string | number };\n  size?: number;\n  className?: string;\n  color?: string;\n}\n\nexport function IconInstagramFlat(props: IProps): JSX.Element {\n  const size = props.size || 24;\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg width={size} height={size} className={props.className} style={props.style} viewBox=\"0 0 26 26\">\n      <Path\n        d=\"M13.0047 6.32379C12.1286 6.32365 11.261 6.49611 10.4515 6.83131C9.6421 7.16652 8.90662 7.65791 8.28712 8.27741C7.66761 8.89692 7.17623 9.6324 6.84102 10.4418C6.50581 11.2513 6.33335 12.1188 6.3335 12.995C6.33335 13.8711 6.50581 14.7386 6.84102 15.5481C7.17623 16.3575 7.66761 17.093 8.28712 17.7125C8.90662 18.332 9.6421 18.8234 10.4515 19.1586C11.261 19.4938 12.1286 19.6663 13.0047 19.6661C13.8808 19.6663 14.7483 19.4938 15.5578 19.1586C16.3672 18.8234 17.1027 18.332 17.7222 17.7125C18.3417 17.093 18.8331 16.3575 19.1683 15.5481C19.5035 14.7386 19.676 13.8711 19.6758 12.995C19.676 12.1188 19.5035 11.2513 19.1683 10.4418C18.8331 9.6324 18.3417 8.89692 17.7222 8.27741C17.1027 7.65791 16.3672 7.16652 15.5578 6.83131C14.7483 6.49611 13.8808 6.32365 13.0047 6.32379ZM13.0047 17.325C12.1486 17.3248 11.3117 17.0708 10.6 16.595C9.88827 16.1193 9.33358 15.4432 9.00606 14.6522C8.67855 13.8612 8.59291 12.9909 8.75998 12.1512C8.92705 11.3116 9.33932 10.5403 9.94468 9.93498C10.55 9.32962 11.3213 8.91735 12.1609 8.75028C13.0006 8.58321 13.8709 8.66884 14.6619 8.99636C15.4529 9.32388 16.129 9.87857 16.6047 10.5903C17.0805 11.302 17.3345 12.1389 17.3347 12.995C17.335 13.5637 17.2232 14.1269 17.0057 14.6523C16.7882 15.1778 16.4693 15.6553 16.0671 16.0574C15.665 16.4596 15.1875 16.7785 14.6621 16.996C14.1366 17.2135 13.5734 17.3253 13.0047 17.325Z\"\n        fill={color}\n      />\n      <Path\n        d=\"M18.3606 0.0816689C15.9686 -0.0299145 10.0438 -0.0244978 7.64966 0.0816689C5.54583 0.180252 3.69008 0.688335 2.194 2.18442C-0.306337 4.68475 0.0132462 8.05392 0.0132462 12.995C0.0132462 18.052 -0.26842 21.3432 2.194 23.8056C4.70408 26.3146 8.122 25.9863 13.0046 25.9863C18.0139 25.9863 19.7429 25.9896 21.5142 25.3038C23.9224 24.3689 25.7402 22.2163 25.9179 18.3499C26.0306 15.9568 26.0241 10.0332 25.9179 7.639C25.7034 3.07492 23.254 0.307002 18.3606 0.0816689ZM22.1468 22.1513C20.5077 23.7904 18.2338 23.6442 12.9732 23.6442C7.5565 23.6442 5.38441 23.7243 3.7995 22.1351C1.97408 20.3183 2.3045 17.4009 2.3045 12.9777C2.3045 6.99225 1.69025 2.68167 7.69733 2.374C9.0775 2.32525 9.48375 2.309 12.958 2.309L13.0067 2.3415C18.7798 2.3415 23.3092 1.737 23.5812 7.743C23.6429 9.11342 23.657 9.52508 23.657 12.9939C23.6559 18.3478 23.7577 20.5328 22.1468 22.1513Z\"\n        fill={color}\n      />\n      <Path\n        d=\"M19.94 7.61942C20.801 7.61942 21.4989 6.92147 21.4989 6.0605C21.4989 5.19954 20.801 4.50159 19.94 4.50159C19.0791 4.50159 18.3811 5.19954 18.3811 6.0605C18.3811 6.92147 19.0791 7.61942 19.94 7.61942Z\"\n        fill={color}\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  size?: number;\n  color?: string;\n  className?: string;\n}\n\nexport function IconMoon(props: IProps): JSX.Element {\n  const size = props.size ?? 20;\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg className={props.className} width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n      <Path\n        d=\"M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z\"\n        stroke={color}\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        strokeLinejoin=\"round\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\n\ninterface IProps {\n  style?: { [key: string]: string | number };\n  size?: number;\n  className?: string;\n  color?: string;\n  secondaryColor?: string;\n}\n\nexport function IconReddit(props: IProps): JSX.Element {\n  const size = props.size || 24;\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  const secondaryColor = props.secondaryColor || Tailwind_semantic().icon.white;\n  return (\n    <IconSvg width={size} height={size} className={props.className} style={props.style} viewBox=\"0 0 26 26\" fill=\"none\">\n      <Path\n        d=\"M25.2943 11.7445C25.3958 12.8278 24.8871 13.6315 24.049 14.2517C23.8477 14.4006 23.7855 14.5257 23.8212 14.7842C24.0838 16.7224 23.5183 18.4213 22.242 19.8828C20.6325 21.7251 18.5419 22.7307 16.1941 23.2596C14.5627 23.6267 12.9112 23.7053 11.2505 23.4979C9.35197 23.2596 7.54126 22.7389 5.90896 21.7104C4.47888 20.8098 3.30132 19.6681 2.61693 18.0889C2.13566 16.9782 2.01213 15.8237 2.21068 14.6335C2.23173 14.5057 2.20611 14.4353 2.08899 14.3577C1.37898 13.8827 0.863856 13.257 0.731187 12.3921C0.393565 10.1917 2.35342 8.8527 4.00401 9.2893C4.48162 9.41534 4.92355 9.67566 5.37645 9.88482C5.48716 9.93597 5.56128 9.96885 5.68205 9.88665C7.006 8.98514 8.46171 8.39509 10.0272 8.06444C10.9001 7.87994 11.7803 7.75389 12.6733 7.76029C12.8499 7.7612 12.8846 7.66621 12.9258 7.53468C13.4016 6.0212 13.881 4.50954 14.3586 2.99697C14.5279 2.4599 14.785 2.30919 15.3349 2.42702C16.6589 2.70925 17.9828 2.98692 19.3049 3.27647C19.4687 3.31209 19.562 3.28195 19.6718 3.15407C20.7945 1.85067 22.5366 2.4462 23.0975 3.44179C23.7983 4.68765 23.0133 6.24315 21.5667 6.47606C20.5145 6.64504 19.4724 5.97918 19.1924 4.93426C19.1329 4.71323 19.0286 4.64015 18.8191 4.59722C17.798 4.38989 16.7815 4.16428 15.764 3.94598C15.6835 3.92863 15.6012 3.91949 15.4987 3.90305C15.0723 5.22746 14.6505 6.53909 14.2168 7.88542C14.473 7.91191 14.6963 7.93566 14.9195 7.95849C16.9132 8.16035 18.7624 8.77871 20.4404 9.883C20.5465 9.95241 20.6097 9.94876 20.7131 9.86473C21.618 9.12671 22.6272 8.9961 23.6821 9.4601C24.6566 9.89213 25.1946 10.6822 25.2943 11.7445ZM16.797 15.9908C17.6818 15.9899 18.4687 15.2071 18.465 14.3321C18.4613 13.4005 17.7047 12.6387 16.7879 12.6414C15.8976 12.6442 15.1217 13.4041 15.1226 14.2709C15.1236 15.219 15.8766 15.9917 16.797 15.9908ZM17.1923 19.1639C17.3844 18.942 17.335 18.678 17.1584 18.5035C16.9132 18.2606 16.5966 18.193 16.3505 18.3337C16.2517 18.3903 16.1611 18.4606 16.0641 18.52C14.3687 19.5485 12.5973 19.7083 10.7619 18.9465C10.3859 18.7904 10.04 18.5584 9.68593 18.3528C9.42242 18.1994 9.0912 18.2533 8.83867 18.5081C8.67215 18.6753 8.65111 18.963 8.81763 19.1986C8.91187 19.3311 9.03905 19.4507 9.17264 19.5439C10.32 20.3477 11.6101 20.6829 13.1024 20.7002C13.2644 20.6884 13.5297 20.6738 13.795 20.6491C14.7228 20.5641 15.6076 20.3203 16.4082 19.8398C16.7 19.6626 16.9672 19.4215 17.1923 19.1639ZM9.26413 15.9908C10.0958 15.989 10.8928 15.1742 10.8891 14.3285C10.8854 13.4114 10.1141 12.6414 9.201 12.6423C8.29976 12.6423 7.53211 13.4151 7.53394 14.3202C7.53668 15.2354 8.32081 15.9926 9.26413 15.9908Z\"\n        fill={color}\n      />\n      <Path\n        d=\"M18.4649 14.3319C18.4686 15.207 17.6817 15.9897 16.7969 15.9906C15.8765 15.9916 15.1235 15.2188 15.1226 14.2707C15.1216 13.403 15.8975 12.644 16.7878 12.6412C17.7046 12.6376 18.4603 13.3994 18.4649 14.3319Z\"\n        fill={secondaryColor}\n      />\n      <Path\n        d=\"M17.1585 18.5035C17.3351 18.678 17.3845 18.9419 17.1923 19.1639C16.9673 19.4224 16.7001 19.6635 16.4073 19.8389C15.6067 20.3193 14.7219 20.5632 13.7942 20.6481C13.5288 20.6728 13.2644 20.6874 13.1015 20.6993C11.6092 20.6828 10.3191 20.3467 9.17178 19.5429C9.03728 19.4489 8.91101 19.3301 8.81677 19.1977C8.65025 18.962 8.67129 18.6734 8.83782 18.5072C9.09126 18.2523 9.42156 18.1993 9.68507 18.3519C10.0392 18.5583 10.385 18.7894 10.7611 18.9456C12.5965 19.7083 14.3679 19.5475 16.0633 18.519C16.1603 18.4606 16.2518 18.3902 16.3497 18.3327C16.5967 18.192 16.9133 18.2605 17.1585 18.5035Z\"\n        fill={secondaryColor}\n      />\n      <Path\n        d=\"M10.8901 14.3276C10.8937 15.1734 10.0968 15.9881 9.26511 15.99C8.32087 15.9918 7.53766 15.2346 7.53492 14.3185C7.53309 13.4133 8.30074 12.6406 9.20198 12.6406C10.1151 12.6406 10.8864 13.4106 10.8901 14.3276Z\"\n        fill={secondaryColor}\n      />\n    </IconSvg>\n  );\n}\n","import { JSX, useEffect, useRef } from \"react\";\nimport { Animated, Easing, Platform } from \"react-native\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { useRemScale } from \"../../utils/useRem\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  width: number;\n  height: number;\n  color?: string;\n}\n\nexport function IconSpinner(props: IProps): JSX.Element {\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  const scale = useRemScale();\n  const spinValue = useRef(new Animated.Value(0)).current;\n\n  useEffect(() => {\n    const animation = Animated.loop(\n      Animated.timing(spinValue, {\n        toValue: 1,\n        duration: 1000,\n        easing: Easing.linear,\n        useNativeDriver: Platform.OS !== \"web\",\n      })\n    );\n    animation.start();\n    return () => animation.stop();\n  }, []);\n\n  const rotate = spinValue.interpolate({\n    inputRange: [0, 1],\n    outputRange: [\"0deg\", \"360deg\"],\n  });\n\n  return (\n    <Animated.View\n      style={{\n        width: Math.round(props.width * scale),\n        height: Math.round(props.height * scale),\n        transform: [{ rotate }],\n      }}\n    >\n      <IconSvg viewBox=\"0 0 512 512\" width={props.width} height={props.height}>\n        <Path\n          fill={color}\n          d=\"M256,150.6c-9,0-15.1-6-15.1-15.1V15.1C240.9,6,247,0,256,0c9,0,15.1,6,15.1,15.1v120.5C271.1,144.6,265,150.6,256,150.6z\"\n        />\n        <Path\n          fill={color}\n          d=\"M256,361.4c-9,0-15.1,6-15.1,15.1v120.5c0,9,6,15.1,15.1,15.1c9,0,15.1-6,15.1-15.1V376.5 C271.1,367.4,265,361.4,256,361.4\"\n        />\n        <Path\n          fill={color}\n          d=\"M376.6,34c-4.8,0-9.1,2.7-12.2,6.7l-60.2,103.9c-4.5,7.5-1.5,15.1,4.5,19.6c3,1.5,4.5,1.5,7.5,1.5 c4.5,0,9-3,12-6l60.2-103.9c4.5-7.5,1.5-15.1-4.5-19.6C381.5,34.6,379,34,376.6,34\"\n        />\n        <Path\n          fill={color}\n          d=\"M195.9,347.2c-4.8,0-9.1,2.7-12.2,6.7l-60.2,103.9c-4.5,7.5-1.5,15.1,4.5,19.6c3,1.5,4.5,1.5,7.5,1.5 c4.5,0,9-3,12-6l60.2-103.9c4.5-7.5,1.5-15.1-4.5-19.6C200.8,347.9,198.3,347.2,195.9,347.2\"\n        />\n        <Path\n          fill={color}\n          d=\"M134.7,32.5c-2.4,0-4.7,0.7-6.7,2.2c-6,4.5-9,13.6-4.5,19.6l60.2,103.9c3,4.5,7.5,7.5,12,7.5c3,0,4.5,0,7.5-3 c6-4.5,9-13.6,4.5-19.6L147.6,39.2C144.6,35.1,139.5,32.5,134.7,32.5\"\n        />\n        <Path\n          fill={color}\n          d=\"M315.5,345.7c-2.4,0-4.7,0.7-6.7,2.2c-6,4.5-9,13.6-4.5,19.6l60.2,103.9c3,4.5,7.5,7.5,12,7.5 c3,0,4.5-1.5,7.5-3c6-4.5,9-13.6,4.5-19.6l-60.2-103.9C325.3,348.4,320.3,345.7,315.5,345.7\"\n        />\n        <Path\n          fill={color}\n          d=\"M135.5,240.9H15.1C6,240.9,0,247,0,256c0,9,6,15.1,15.1,15.1h120.5c9,0,15.1-6,15.1-15.1 C150.6,247,144.6,240.9,135.5,240.9\"\n        />\n        <Path\n          fill={color}\n          d=\"M496.9,240.9H376.5c-9,0-15.1,6-15.1,15.1c0,9,6,15.1,15.1,15.1h120.5c9,0,15.1-6,15.1-15.1 C512,247,506,240.9,496.9,240.9\"\n        />\n        <Path\n          fill={color}\n          d=\"M48.3,121.3c-4.8,0-9.1,2.7-12.2,6.7c-4.5,7.5-1.5,15.1,4.5,19.6l103.9,60.2c3,1.5,4.5,1.5,7.5,1.5 c4.5,0,9-1.5,12-6c4.5-7.5,1.5-15.1-4.5-19.6L55.7,123.5C53.2,122,50.7,121.3,48.3,121.3\"\n        />\n        <Path\n          fill={color}\n          d=\"M361.5,302c-4.8,0-9.1,2.7-12.2,6.7c-4.5,7.5-1.5,15.1,4.5,19.6l103.9,60.2c3,1.5,4.5,1.5,7.5,1.5 c4.5,0,9-1.5,12.1-6c4.5-7.5,1.5-15.1-4.5-19.6l-103.9-60.2C366.4,302.7,363.9,302,361.5,302\"\n        />\n        <Path\n          fill={color}\n          d=\"M149.8,300.5c-2.4,0-4.7,0.7-6.7,2.2L39.2,362.9c-6,4.5-9,13.6-4.5,19.6c3,4.5,7.5,7.5,12.1,7.5c3,0,6,0,7.5-3 l103.9-60.2c6-4.5,9-13.6,4.5-19.6C159.6,303.2,154.6,300.5,149.8,300.5\"\n        />\n        <Path\n          fill={color}\n          d=\"M463,119.8c-2.4,0-4.7,0.7-6.8,2.2l-103.9,60.2c-6,4.5-9,13.6-4.5,19.6c3,4.5,7.5,7.5,12,7.5c3,0,4.5,0,7.5-3 l103.9-60.2c6-4.5,9-13.6,4.5-19.6C472.8,122.5,467.8,119.8,463,119.8\"\n        />\n      </IconSvg>\n    </Animated.View>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Circle, Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\n\ninterface IProps {\n  size?: number;\n  color?: string;\n  className?: string;\n}\n\nexport function IconSun(props: IProps): JSX.Element {\n  const size = props.size ?? 20;\n  const color = props.color ?? Tailwind_semantic().icon.neutral;\n  return (\n    <IconSvg className={props.className} width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\">\n      <Circle cx=\"12\" cy=\"12\" r=\"4.5\" stroke={color} strokeWidth=\"2\" />\n      <Path\n        d=\"M12 2v2M12 20v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M2 12h2M20 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42\"\n        stroke={color}\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Svg } from \"../primitives/svg\";\nimport type { ISvgComponentProps } from \"../primitives/svg\";\nimport { useRemScale } from \"../../utils/useRem\";\n\ntype IIconSvgProps = ISvgComponentProps & { noRemScale?: boolean };\n\nexport function IconSvg(props: IIconSvgProps): JSX.Element {\n  const { noRemScale, width, height, ...rest } = props;\n  const scale = useRemScale();\n  return (\n    <Svg\n      {...rest}\n      width={noRemScale ? width : IconSvg_scale(width, scale)}\n      height={noRemScale ? height : IconSvg_scale(height, scale)}\n    />\n  );\n}\n\nfunction IconSvg_scale(value: ISvgComponentProps[\"width\"], scale: number): ISvgComponentProps[\"width\"] {\n  return typeof value === \"number\" ? Math.round(value * scale) : value;\n}\n","import type { JSX } from \"react\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\n\ninterface IProps {\n  style?: { [key: string]: string | number };\n  size?: number;\n  className?: string;\n  color?: string;\n}\n\nexport function IconUser(props: IProps): JSX.Element {\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  const size = props.size || 24;\n  return (\n    <IconSvg style={props.style} className={props.className} width={size} height={size} viewBox=\"0 0 48 48\" fill=\"none\">\n      <Path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M24 4.5C13.2304 4.5 4.5 13.2304 4.5 24C4.5 28.3561 5.92835 32.3786 8.34225 35.6246C13.0342 33.2014 18.3593 31.8333 24 31.8333C29.6407 31.8333 34.9658 33.2014 39.6577 35.6246C42.0716 32.3786 43.5 28.3561 43.5 24C43.5 13.2304 34.7696 4.5 24 4.5ZM41.2135 38.4903C44.5122 34.5756 46.5 29.5199 46.5 24C46.5 11.5736 36.4264 1.5 24 1.5C11.5736 1.5 1.5 11.5736 1.5 24C1.5 29.5199 3.48773 34.5756 6.78646 38.4902C6.79811 38.5045 6.81 38.5186 6.8221 38.5324C10.9493 43.4061 17.1134 46.5 24 46.5C30.8863 46.5 37.0501 43.4064 41.1774 38.5331C41.1896 38.5191 41.2017 38.5048 41.2135 38.4903ZM37.6176 37.9574C33.5048 35.9563 28.8853 34.8333 24 34.8333C19.1147 34.8333 14.4952 35.9563 10.3824 37.9575C13.8968 41.3869 18.7016 43.5 24 43.5C29.2984 43.5 34.1032 41.3869 37.6176 37.9574ZM24 13.8333C20.9624 13.8333 18.5 16.2958 18.5 19.3333C18.5 22.3709 20.9624 24.8333 24 24.8333C27.0376 24.8333 29.5 22.3709 29.5 19.3333C29.5 16.2958 27.0376 13.8333 24 13.8333ZM15.5 19.3333C15.5 14.6389 19.3056 10.8333 24 10.8333C28.6944 10.8333 32.5 14.6389 32.5 19.3333C32.5 24.0278 28.6944 27.8333 24 27.8333C19.3056 27.8333 15.5 24.0278 15.5 19.3333Z\"\n        fill={color}\n      />\n    </IconSvg>\n  );\n}\n","import type { JSX } from \"react\";\nimport { Tailwind_semantic } from \"../../utils/tailwindConfig\";\nimport { Path } from \"../primitives/svg\";\nimport { IconSvg } from \"./iconSvg\";\n\ninterface IProps {\n  style?: { [key: string]: string | number };\n  size?: number;\n  className?: string;\n  color?: string;\n  secondaryColor?: string;\n}\n\nexport function IconYoutube(props: IProps): JSX.Element {\n  const size = props.size || 24;\n  const color = props.color || Tailwind_semantic().icon.neutral;\n  const secondaryColor = props.secondaryColor || Tailwind_semantic().icon.white;\n  return (\n    <IconSvg width={size} height={size} className={props.className} style={props.style} viewBox=\"0 0 26 26\" fill=\"none\">\n      <Path\n        d=\"M24.9772 6.98253C24.6892 5.90623 23.8433 5.06041 22.767 4.77229C20.8182 4.24957 13 4.24957 13 4.24957C13 4.24957 5.18183 4.24957 3.23295 4.77229C2.15665 5.06041 1.31083 5.90623 1.02272 6.98253C0.5 8.93141 0.5 13 0.5 13C0.5 13 0.5 17.0686 1.02272 19.0175C1.31083 20.0938 2.15665 20.9396 3.23295 21.2276C5.18183 21.7504 13 21.7504 13 21.7504C13 21.7504 20.8182 21.7504 22.767 21.2276C23.8433 20.9396 24.6892 20.0938 24.9772 19.0175C25.5 17.0686 25.5 13 25.5 13C25.5 13 25.4979 8.93141 24.9772 6.98253Z\"\n        fill={color}\n      />\n      <Path d=\"M10.4978 16.7499L16.9927 13.0003L10.4978 9.25073V16.7499Z\" fill={secondaryColor} />\n    </IconSvg>\n  );\n}\n","import React, { JSX, Ref, forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState } from \"react\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { StringUtils_dashcase } from \"../utils/string\";\nimport { IEither } from \"../utils/types\";\nimport { MathUtils_normalizeNumStr } from \"../utils/math\";\n\nexport const inputClassName =\n  \"inline-block w-full px-4 text-base py-2 leading-normal bg-background-default border border-border-prominent rounded-lg appearance-none focus:outline-none focus:shadow-outline text-base\";\n\nexport type IValidationError = \"required\" | \"pattern-mismatch\";\n\nexport interface IInputHandle {\n  touch: () => void;\n}\n\nexport interface IProps\n  extends Omit<\n    React.InputHTMLAttributes<HTMLInputElement> & React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n    \"ref\" | \"autoCapitalize\" | \"autoCorrect\"\n  > {\n  label?: string;\n  identifier?: string;\n  multiline?: number;\n  changeType?: \"onblur\" | \"oninput\";\n  isLabelOutside?: boolean;\n  defaultValue?: number | string | readonly string[];\n  inputSize?: \"md\" | \"sm\";\n  labelSize?: \"xs\" | \"sm\";\n  errorMessage?: string;\n  patternMessage?: string;\n  requiredMessage?: string;\n  changeHandler?: (e: IEither<string, Set<IValidationError>>) => void;\n  handleRef?: Ref<IInputHandle>;\n  autoCapitalize?: \"none\" | \"sentences\" | \"words\" | \"characters\";\n  autoCorrect?: boolean;\n}\n\nexport function selectInputOnFocus(e: React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>): boolean | undefined {\n  const target = e.target;\n  if (target instanceof HTMLInputElement) {\n    const handleNumber = target.type === \"number\";\n    if (handleNumber) {\n      target.type = \"text\";\n    }\n    const value = (target as HTMLInputElement).value;\n    target.setSelectionRange(0, value.length);\n    if (handleNumber) {\n      target.type = \"number\";\n    }\n    return false;\n  }\n  return undefined;\n}\n\nexport const Input = forwardRef((props: IProps, ref: Ref<HTMLInputElement> | Ref<HTMLTextAreaElement>): JSX.Element => {\n  const {\n    inputSize,\n    label,\n    changeHandler,\n    errorMessage,\n    patternMessage,\n    requiredMessage,\n    changeType: changeTypeProp,\n    isLabelOutside,\n    labelSize: labelSizeProp,\n    identifier: identifierProp,\n    multiline,\n    value: valueProp,\n    defaultValue: _defaultValue,\n    handleRef: _handleRef,\n    autoCapitalize,\n    autoCorrect,\n    ...otherProps\n  } = props;\n  const autoCorrectStr = autoCorrect == null ? undefined : autoCorrect ? \"on\" : \"off\";\n  const changeType = changeTypeProp || \"onblur\";\n  const identifier = identifierProp || StringUtils_dashcase((label || UidFactory_generateUid(8))?.toLowerCase());\n  const [validationErrors, setValidationErrors] = useState<Set<IValidationError>>(new Set());\n  const [touched, setTouched] = useState(false);\n  const size = inputSize || \"md\";\n\n  const internalInputRef = useRef<HTMLInputElement | HTMLTextAreaElement | null>(null);\n  const setInputRef = useCallback(\n    (el: HTMLInputElement | HTMLTextAreaElement | null) => {\n      internalInputRef.current = el;\n      if (typeof ref === \"function\") {\n        (ref as (instance: HTMLInputElement | HTMLTextAreaElement | null) => void)(el);\n      } else if (ref) {\n        (ref as React.MutableRefObject<HTMLInputElement | HTMLTextAreaElement | null>).current = el;\n      }\n    },\n    [ref]\n  );\n\n  useImperativeHandle(props.handleRef, () => ({\n    touch: () => {\n      setTouched(true);\n      const el = internalInputRef.current;\n      if (el instanceof HTMLInputElement) {\n        validateTarget(el, \"snapshot\");\n      }\n    },\n  }));\n\n  const isControlled = valueProp !== undefined;\n  const [localValue, setLocalValue] = useState(valueProp);\n  useEffect(() => {\n    if (isControlled) {\n      setLocalValue(valueProp);\n    }\n  }, [valueProp, isControlled]);\n\n  const validateTarget = useCallback(\n    (target: HTMLInputElement, displayMode: \"clear-only\" | \"snapshot\") => {\n      if (props.type === \"number\") {\n        const normalized = MathUtils_normalizeNumStr(target.value);\n        if (normalized !== target.value) {\n          target.value = normalized;\n        }\n      }\n      const errors = new Set<IValidationError>();\n      if (target.validity.patternMismatch) {\n        errors.add(\"pattern-mismatch\");\n      }\n      if (target.validity.valueMissing) {\n        errors.add(\"required\");\n      }\n      if (displayMode === \"snapshot\") {\n        setValidationErrors(errors);\n      } else {\n        setValidationErrors((prev) => {\n          const next = new Set<IValidationError>();\n          for (const err of prev) {\n            if (errors.has(err)) {\n              next.add(err);\n            }\n          }\n          return next;\n        });\n      }\n      if (changeHandler != null) {\n        if (errors.size > 0) {\n          changeHandler({ success: false, error: errors });\n        } else {\n          changeHandler({ success: true, data: target.value });\n        }\n      }\n    },\n    [changeHandler, props.type]\n  );\n\n  const onInputHandler = useCallback(\n    (\n      e:\n        | React.FocusEvent<HTMLInputElement | HTMLTextAreaElement>\n        | React.FormEvent<HTMLInputElement | HTMLTextAreaElement>\n    ) => {\n      const target = e.target;\n      if (target instanceof HTMLInputElement) {\n        validateTarget(target, \"clear-only\");\n      }\n    },\n    [validateTarget]\n  );\n\n  let className = \"relative block w-full text-left border rounded-lg appearance-none \";\n  if (errorMessage || (touched && validationErrors.size > 0)) {\n    className += \" border-text-error\";\n  } else {\n    className += \" border-form-inputstroke\";\n  }\n\n  const errorMessages = [];\n  if (errorMessage) {\n    errorMessages.push(errorMessage);\n  }\n  if (touched) {\n    for (const error of validationErrors) {\n      if (error === \"required\") {\n        errorMessages.push(requiredMessage);\n      } else if (error === \"pattern-mismatch\") {\n        errorMessages.push(patternMessage);\n      }\n    }\n  }\n\n  let containerClassName = \"inline-block bg-background-default rounded-lg\";\n  if (className.indexOf(\"w-full\") !== -1) {\n    containerClassName += \" w-full\";\n  }\n  const labelSizeVal = labelSizeProp || \"sm\";\n  return (\n    <div className={containerClassName}>\n      {label && isLabelOutside && (\n        <div className={`leading-none ${labelSizeVal === \"xs\" ? \"text-xs\" : \"text-sm\"} text-text-secondary pb-1`}>\n          {label}\n        </div>\n      )}\n      <label\n        data-testid={`${identifier}-label`}\n        className={className}\n        style={{\n          minHeight: size === \"md\" ? (isLabelOutside ? \"40px\" : \"48px\") : isLabelOutside ? \"32px\" : \"40px\",\n        }}\n      >\n        <div\n          className={`relative ${isLabelOutside ? \"mx-2\" : \"mx-4\"} ${size === \"md\" ? \"my-1\" : \"\"}`}\n          style={size !== \"md\" ? { marginTop: \"1px\", marginBottom: \"1px\" } : {}}\n        >\n          {label && !isLabelOutside && (\n            <div\n              className={`leading-none relative ${labelSizeVal === \"xs\" ? \"text-xs\" : \"text-sm\"} text-text-secondary`}\n              style={{ top: \"2px\", left: \"0\" }}\n            >\n              {label}\n            </div>\n          )}\n          <div className=\"relative flex\" style={{ top: label ? \"3px\" : \"8px\", left: \"0\" }}>\n            {multiline ? (\n              <textarea\n                data-testid={`${identifier}-input`}\n                ref={setInputRef}\n                value={isControlled ? localValue : undefined}\n                defaultValue={!isControlled ? props.defaultValue : undefined}\n                onChange={(e) => {\n                  if (isControlled) {\n                    setLocalValue(e.target.value);\n                  }\n                }}\n                onBlur={(e) => {\n                  setTouched(true);\n                  const target = e.target;\n                  if (target instanceof HTMLInputElement) {\n                    validateTarget(target, \"snapshot\");\n                  }\n                }}\n                onInput={changeType === \"oninput\" ? onInputHandler : undefined}\n                onFocus={selectInputOnFocus}\n                autoCapitalize={autoCapitalize}\n                autoCorrect={autoCorrectStr}\n                className=\"flex-1 w-0 min-w-0 text-base border-none focus:outline-none bg-background-default\"\n                style={{ fontSize: size === \"md\" ? \"16px\" : \"15px\", height: `${multiline * 25}px` }}\n                {...otherProps}\n              />\n            ) : (\n              <input\n                data-testid={`${identifier}-input`}\n                ref={setInputRef}\n                value={isControlled ? localValue : undefined}\n                defaultValue={!isControlled ? props.defaultValue : undefined}\n                onChange={(e) => {\n                  if (isControlled) {\n                    setLocalValue(e.target.value);\n                  }\n                }}\n                onBlur={(e) => {\n                  setTouched(true);\n                  const target = e.target;\n                  if (target instanceof HTMLInputElement) {\n                    validateTarget(target, \"snapshot\");\n                  }\n                }}\n                onInput={changeType === \"oninput\" ? onInputHandler : undefined}\n                onFocus={selectInputOnFocus}\n                autoCapitalize={autoCapitalize}\n                autoCorrect={autoCorrectStr}\n                className=\"flex-1 w-0 min-w-0 text-base border-none focus:outline-none bg-background-default\"\n                style={{ height: \"1.25rem\", fontSize: size === \"md\" ? \"16px\" : \"15px\" }}\n                {...otherProps}\n              />\n            )}\n          </div>\n        </div>\n      </label>\n      {errorMessages.map((message) => (\n        <div className=\"text-xs text-left text-text-error\" key={message}>\n          {message}\n        </div>\n      ))}\n    </div>\n  );\n});\n","import { JSX, ReactNode } from \"react\";\nimport { GestureResponderEvent, Pressable } from \"react-native\";\nimport { Text } from \"./primitives/text\";\nimport { useTrackClick } from \"../utils/clickTracking\";\n\ninterface IProps {\n  name: string;\n  onPress?: (e: GestureResponderEvent) => void;\n  onClick?: (e: GestureResponderEvent) => void;\n  className?: string;\n  children?: ReactNode;\n  testID?: string;\n  disabled?: boolean;\n}\n\nfunction containsString(children: ReactNode): boolean {\n  if (typeof children === \"string\" || typeof children === \"number\") {\n    return true;\n  }\n  if (Array.isArray(children)) {\n    return children.some((c) => typeof c === \"string\" || typeof c === \"number\");\n  }\n  return false;\n}\n\nexport function LinkButton(props: IProps): JSX.Element {\n  const { className, children } = props;\n  const testID = props.testID || props.name;\n  const isFontNormal = className?.includes(\"font-normal\");\n  const isNoUnderline = className?.includes(\"no-underline\");\n  const textCn = `text-text-link ${!isFontNormal ? \"font-bold\" : \"\"} ${!isNoUnderline ? \"underline\" : \"\"} ${className || \"\"}`;\n  const accessibilityLabel = typeof children === \"string\" ? children : undefined;\n  const trackClick = useTrackClick();\n  const userOnPress = props.onPress || props.onClick;\n  const onPress = (e: GestureResponderEvent): void => {\n    trackClick(props.name, props.className);\n    userOnPress?.(e);\n  };\n  return (\n    <Pressable\n      accessibilityRole=\"button\"\n      accessibilityLabel={accessibilityLabel}\n      onPress={onPress}\n      testID={testID}\n      data-testid={testID}\n      disabled={props.disabled}\n      hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}\n    >\n      {containsString(children) ? <Text className={textCn}>{children}</Text> : children}\n    </Pressable>\n  );\n}\n","import { JSX, ReactNode, RefObject, useEffect, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { IconCloseCircleOutline } from \"./icons/iconCloseCircleOutline\";\n\ninterface IProps {\n  name?: string;\n  children: ReactNode;\n  autofocusInputRef?: RefObject<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement | null>;\n  preautofocus?: [RefObject<HTMLElement | null>, (el: HTMLElement) => void][];\n  isHidden?: boolean;\n  isFullWidth?: boolean;\n  isFullHeight?: boolean;\n  noPaddings?: boolean;\n  shouldShowClose?: boolean;\n  closeOnOverlayClick?: boolean;\n  overflowHidden?: boolean;\n  innerClassName?: string;\n  zIndex?: number;\n  maxWidth?: string;\n  style?: Record<string, string | undefined>;\n  onClose?: () => void;\n}\n\nexport function Modal(props: IProps): JSX.Element {\n  const modalRef = useRef<HTMLElement>(null);\n\n  let className = \"fixed inset-0 flex items-center justify-center bottom-sticked\";\n  if (props.isHidden) {\n    className += \" invisible\";\n  }\n\n  const prevProps = useRef<IProps>(props);\n  useEffect(() => {\n    prevProps.current = props;\n  });\n\n  useEffect(() => {\n    if (!props.isHidden) {\n      document.body.classList.add(\"stop-scrolling-modal\");\n    } else {\n      document.body.classList.remove(\"stop-scrolling-modal\");\n    }\n    return () => {\n      document.body.classList.remove(\"stop-scrolling-modal\");\n    };\n  }, [props.isHidden]);\n\n  if (modalRef.current != null && prevProps.current.isHidden && !props.isHidden) {\n    for (const [ref, callback] of props.preautofocus ?? []) {\n      if (ref.current != null) {\n        callback(ref.current);\n      }\n    }\n    if (props.autofocusInputRef?.current != null) {\n      modalRef.current.classList.remove(\"invisible\");\n      props.autofocusInputRef.current.focus();\n    }\n  }\n\n  const containerRef = typeof window !== \"undefined\" ? window.document.getElementById(\"modal\") : undefined;\n\n  const element = (\n    <section ref={modalRef} className={className} style={{ zIndex: props.zIndex ?? 40 }}>\n      <div\n        data-name=\"overlay\"\n        onClick={props.shouldShowClose || props.closeOnOverlayClick ? props.onClose : undefined}\n        className=\"absolute inset-0 z-10 overflow-scroll scrolling-touch opacity-50 bg-background-darkgray\"\n      ></div>\n      <div\n        data-name=\"modal\"\n        data-testid={`modal${props.name ? `-${props.name}` : \"\"}`}\n        className={`relative z-20 flex flex-col ${props.noPaddings ? \"\" : \"py-6\"} bg-background-default rounded-lg shadow-lg text-text-primary`}\n        style={{\n          maxWidth: props.maxWidth ?? \"92%\",\n          maxHeight: \"90%\",\n          width: props.isFullWidth ? \"92%\" : \"auto\",\n          height: props.isFullHeight ? \"90%\" : \"auto\",\n          ...props.style,\n        }}\n      >\n        <div\n          className={`relative h-full ${props.noPaddings ? \"\" : \"px-6\"} ${\n            props.overflowHidden ? \"overflow-hidden\" : \"overflow-auto\"\n          } ${props.innerClassName}`}\n        >\n          {props.children}\n        </div>\n        {props.shouldShowClose && (\n          <button\n            data-testid={`modal-close${props.name ? `-${props.name}` : \"\"}`}\n            onClick={props.onClose}\n            className=\"absolute p-2 nm-modal-close\"\n            style={{ top: \"-3px\", right: \"-3px\" }}\n          >\n            <IconCloseCircleOutline />\n          </button>\n        )}\n      </div>\n    </section>\n  );\n\n  return containerRef ? createPortal(element, containerRef) : element;\n}\n","import React, { JSX, useEffect, useState } from \"react\";\nimport { Platform_onelink } from \"../utils/platform\";\n\ninterface IOnelinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n  type?: \"ios\" | \"android\";\n}\n\nexport function Onelink(props: IOnelinkProps): JSX.Element {\n  const { type, ...rest } = props;\n  const initialOnelink = Platform_onelink(true);\n  const [onelink, setOnelink] = useState(initialOnelink);\n  useEffect(() => {\n    setOnelink(Platform_onelink(false, type));\n  }, []);\n\n  return <a href={onelink} {...rest} />;\n}\n","import { JSX, ReactNode, useEffect, useState } from \"react\";\nimport { FooterPage } from \"./footerPage\";\nimport { TopNavMenu } from \"./topNavMenu\";\nimport { IAccount } from \"../models/account\";\nimport { IUnit } from \"../types\";\nimport { Service } from \"../api/service\";\n\nexport interface IUserContext {\n  account?: IAccount;\n  units?: IUnit;\n}\n\nexport interface IPageWrapperProps {\n  skipTopNavMenu?: boolean;\n  skipFooter?: boolean;\n  url?: string;\n  maxWidth?: number;\n  maxBodyWidth?: number;\n  children?: ReactNode | ((ctx: IUserContext) => ReactNode);\n  isLoggedIn?: boolean;\n  client: Window[\"fetch\"];\n}\n\nexport function PageWrapper(props: IPageWrapperProps): JSX.Element {\n  const [userContext, setUserContext] = useState<IUserContext>({});\n  const [isLoggedIn, setIsLoggedIn] = useState(!!props.isLoggedIn);\n\n  useEffect(() => {\n    if (props.isLoggedIn) {\n      const service = new Service(props.client);\n      service.getUserContext().then((ctx) => {\n        setUserContext(ctx);\n        if (!ctx.account) {\n          setIsLoggedIn(false);\n        }\n      });\n    }\n  }, []);\n\n  const children = typeof props.children === \"function\" ? props.children(userContext) : props.children;\n\n  return (\n    <div style={{ display: \"flex\", flexDirection: \"column\", minHeight: \"100vh\" }}>\n      {!props.skipTopNavMenu && (\n        <TopNavMenu\n          maxWidth={props.maxWidth || 1200}\n          current={props.url}\n          isLoggedIn={isLoggedIn}\n          account={userContext.account}\n          client={props.client}\n        />\n      )}\n      <div\n        id=\"app\"\n        style={{ maxWidth: props.maxBodyWidth || props.maxWidth || 800, margin: \"0 auto\", width: \"100%\", flex: 1 }}\n      >\n        {children}\n      </div>\n      {!props.skipFooter && <FooterPage maxWidth={props.maxWidth || 800} />}\n    </div>\n  );\n}\n","export { Pressable } from \"react-native\";\n","import React from \"react\";\nimport { Platform } from \"react-native\";\n\ntype ISvgProps = React.SVGProps<SVGSVGElement> & { children?: React.ReactNode };\ntype IPathProps = React.SVGProps<SVGPathElement>;\ntype ICircleProps = React.SVGProps<SVGCircleElement>;\ntype IRectProps = React.SVGProps<SVGRectElement>;\ntype ILineProps = React.SVGProps<SVGLineElement>;\ntype IGProps = React.SVGProps<SVGGElement>;\ntype IDefsProps = React.SVGProps<SVGDefsElement>;\ntype IClipPathProps = React.SVGProps<SVGClipPathElement>;\ntype IPolygonProps = React.SVGProps<SVGPolygonElement>;\ntype IPolylineProps = React.SVGProps<SVGPolylineElement>;\ntype IEllipseProps = React.SVGProps<SVGEllipseElement>;\ntype IStopProps = React.SVGProps<SVGStopElement>;\ntype ILinearGradientProps = React.SVGProps<SVGLinearGradientElement>;\ntype IRadialGradientProps = React.SVGProps<SVGRadialGradientElement>;\ntype ITextProps = React.SVGProps<SVGTextElement>;\ntype ITSpanProps = React.SVGProps<SVGTSpanElement>;\ntype IUseProps = React.SVGProps<SVGUseElement>;\ntype IMaskProps = React.SVGProps<SVGMaskElement>;\ntype IPatternProps = React.SVGProps<SVGPatternElement>;\ntype IImageProps = React.SVGProps<SVGImageElement>;\ntype IForeignObjectProps = React.SVGProps<SVGForeignObjectElement>;\ntype ISymbolProps = React.SVGProps<SVGSymbolElement>;\n\nexport type ISvgComponentProps = ISvgProps;\n\nexport function Svg(props: ISvgProps): React.JSX.Element {\n  if (\n    Platform.OS === \"web\" &&\n    [\"inline-block\", \"inline\", \"block\", \"flex\"].every((cl) => !props.className?.includes(cl))\n  ) {\n    props = { ...props, className: `inline-block ${props.className || \"\"}` };\n  }\n  return React.createElement(\"svg\", { xmlns: \"http://www.w3.org/2000/svg\", ...props });\n}\n\nexport function Path(props: IPathProps): React.JSX.Element {\n  return React.createElement(\"path\", props);\n}\n\nexport function Circle(props: ICircleProps): React.JSX.Element {\n  return React.createElement(\"circle\", props);\n}\n\nexport function Rect(props: IRectProps): React.JSX.Element {\n  return React.createElement(\"rect\", props);\n}\n\nexport function Line(props: ILineProps): React.JSX.Element {\n  return React.createElement(\"line\", props);\n}\n\nexport function G(props: IGProps): React.JSX.Element {\n  return React.createElement(\"g\", props);\n}\n\nexport function Defs(props: IDefsProps): React.JSX.Element {\n  return React.createElement(\"defs\", props);\n}\n\nexport function ClipPath(props: IClipPathProps): React.JSX.Element {\n  return React.createElement(\"clipPath\", props);\n}\n\nexport function Polygon(props: IPolygonProps): React.JSX.Element {\n  return React.createElement(\"polygon\", props);\n}\n\nexport function Polyline(props: IPolylineProps): React.JSX.Element {\n  return React.createElement(\"polyline\", props);\n}\n\nexport function Ellipse(props: IEllipseProps): React.JSX.Element {\n  return React.createElement(\"ellipse\", props);\n}\n\nexport function LinearGradient(props: ILinearGradientProps): React.JSX.Element {\n  return React.createElement(\"linearGradient\", props);\n}\n\nexport function RadialGradient(props: IRadialGradientProps): React.JSX.Element {\n  return React.createElement(\"radialGradient\", props);\n}\n\nexport function Stop(props: IStopProps): React.JSX.Element {\n  return React.createElement(\"stop\", props);\n}\n\nexport function SvgText(props: ITextProps): React.JSX.Element {\n  return React.createElement(\"text\", props);\n}\n\nexport function TSpan(props: ITSpanProps): React.JSX.Element {\n  return React.createElement(\"tspan\", props);\n}\n\nexport function Use(props: IUseProps): React.JSX.Element {\n  return React.createElement(\"use\", props);\n}\n\nexport function Mask(props: IMaskProps): React.JSX.Element {\n  return React.createElement(\"mask\", props);\n}\n\nexport function Pattern(props: IPatternProps): React.JSX.Element {\n  return React.createElement(\"pattern\", props);\n}\n\nexport function SvgImage(props: IImageProps): React.JSX.Element {\n  return React.createElement(\"image\", props);\n}\n\nexport function ForeignObject(props: IForeignObjectProps): React.JSX.Element {\n  return React.createElement(\"foreignObject\", props);\n}\n\nexport function SvgSymbol(props: ISymbolProps): React.JSX.Element {\n  return React.createElement(\"symbol\", props);\n}\n\ninterface ISvgXmlProps {\n  xml: string;\n  width?: number | string;\n  height?: number | string;\n  style?: React.CSSProperties;\n  className?: string;\n  preserveAspectRatio?: string;\n}\n\nexport function SvgXml(props: ISvgXmlProps): React.JSX.Element {\n  const { xml, width, height, style, className } = props;\n  return React.createElement(\"span\", {\n    className,\n    style: {\n      display: \"inline-block\",\n      width,\n      height,\n      lineHeight: 0,\n      ...style,\n    },\n    dangerouslySetInnerHTML: { __html: xml },\n  });\n}\n\ninterface ISvgUriProps {\n  uri: string;\n  width?: number | string;\n  height?: number | string;\n  style?: React.CSSProperties;\n  className?: string;\n}\n\nexport function SvgUri(props: ISvgUriProps): React.JSX.Element {\n  const { uri, width, height, style, className } = props;\n  return React.createElement(\"img\", {\n    src: uri,\n    width,\n    height,\n    className,\n    style,\n    alt: \"\",\n  });\n}\n","import { Text as RNText, TextProps, Platform } from \"react-native\";\nimport { JSX } from \"react\";\n\nconst textColorPattern =\n  /\\btext-(icon|text|syntax|red|green|blue|yellow|purple|gray|slate|zinc|stone|neutral|orange|amber|lime|emerald|teal|cyan|sky|indigo|violet|fuchsia|pink|rose|white|black|transparent|inherit|current)\\b/;\nconst textSizePattern = /\\btext-(2xs|xs|sm|base|lg|xl|\\dxl|\\[)/;\n\nexport function Text_hasSizeClass(className: string | undefined): boolean {\n  return className != null && textSizePattern.test(className);\n}\n\nexport function Text_resolveFontFamily(className: string | undefined): string {\n  return resolveFontFamily(className);\n}\n\nfunction resolveFontFamily(className: string | undefined): string {\n  if (Platform.OS !== \"android\") {\n    return \"Poppins\";\n  }\n  const isBold = className != null && /\\bfont-bold\\b/.test(className);\n  const isSemiBold = className != null && /\\bfont-semibold\\b/.test(className);\n  const isItalic = className != null && /\\bitalic\\b/.test(className);\n  if (isBold && isItalic) {\n    return \"Poppins-BoldItalic\";\n  }\n  if (isBold) {\n    return \"Poppins-Bold\";\n  }\n  if (isSemiBold && isItalic) {\n    return \"Poppins-SemiBoldItalic\";\n  }\n  if (isSemiBold) {\n    return \"Poppins-SemiBold\";\n  }\n  if (isItalic) {\n    return \"Poppins-Italic\";\n  }\n  return \"Poppins-Regular\";\n}\n\n// RN's <Text> with none of the defaults Text injects below - for nested spans, which would\n// otherwise get text-base forced on them, and for trees that resolve their own font family.\nexport function TextRaw(props: TextProps & { className?: string }): JSX.Element {\n  return <RNText allowFontScaling={false} {...props} />;\n}\n\n// The OS font scale is folded into the rem instead (see Settings_getTextSize), which moves\n// spacing and icons along with the type. Letting RN also scale fontSize here would apply it\n// twice, and only to the text, so it would overflow boxes that didn't grow.\nexport function Text({\n  style,\n  className,\n  ...props\n}: TextProps & { className?: string; \"data-testid\"?: string }): JSX.Element {\n  const defaults: string[] = [];\n  if (className == null || !textColorPattern.test(className)) {\n    defaults.push(\"text-text-primary\");\n  }\n  if (className == null || !textSizePattern.test(className)) {\n    defaults.push(\"text-base\");\n  }\n  const effectiveClassName =\n    defaults.length > 0 ? (className ? `${defaults.join(\" \")} ${className}` : defaults.join(\" \")) : className;\n  const fontFamily = resolveFontFamily(effectiveClassName);\n  const dataTestid = (props as { \"data-testid\"?: string })[\"data-testid\"];\n  const testID = props.testID || dataTestid;\n  return (\n    <RNText\n      className={effectiveClassName}\n      style={[{ fontFamily }, style]}\n      allowFontScaling={false}\n      {...props}\n      testID={testID}\n    />\n  );\n}\n","import type { JSX } from \"react\";\nimport { IconMoon } from \"./icons/iconMoon\";\nimport { IconSun } from \"./icons/iconSun\";\nimport { PageTheme_toggle } from \"../utils/pageTheme\";\nimport { Tailwind_semantic } from \"../utils/tailwindConfig\";\n\ninterface IProps {\n  size?: number;\n  isWhite?: boolean;\n  className?: string;\n}\n\n// Which icon is visible is driven by the `dark`/`light` class on <html> rather than React state,\n// so the server-rendered markup matches whatever theme the pre-paint script picked.\nexport function ThemeToggle(props: IProps): JSX.Element {\n  const size = props.size ?? 20;\n  const color = props.isWhite ? Tailwind_semantic().icon.white : Tailwind_semantic().text.primary;\n  return (\n    <button\n      className={`p-2 leading-none nm-theme-toggle cursor-pointer ${props.className || \"\"}`}\n      title=\"Switch between dark and light theme\"\n      aria-label=\"Switch between dark and light theme\"\n      onClick={() => PageTheme_toggle()}\n    >\n      <span className=\"block dark:hidden\">\n        <IconMoon size={size} color={color} />\n      </span>\n      <span className=\"hidden dark:block\">\n        <IconSun size={size} color={color} />\n      </span>\n    </button>\n  );\n}\n","import { JSX, useState } from \"react\";\nimport { IconHamburger } from \"./icons/iconHamburger\";\nimport { Account } from \"./account\";\nimport { IconUser } from \"./icons/iconUser\";\nimport { IAccount } from \"../models/account\";\nimport { Modal } from \"./modal\";\nimport { IconReddit } from \"./icons/iconReddit\";\nimport { IconDiscord } from \"./icons/iconDiscord\";\nimport { IconClose } from \"./icons/iconClose\";\nimport { IconApple } from \"./icons/iconApple\";\nimport { Onelink } from \"./onelink\";\nimport { IconInstagramFlat } from \"./icons/iconInstagramFlat\";\nimport { IconYoutube } from \"./icons/iconYoutube\";\nimport { IconGooglePlay } from \"./icons/iconGooglePlay\";\nimport { IconSpinner } from \"./icons/iconSpinner\";\nimport { Tailwind_semantic } from \"../utils/tailwindConfig\";\nimport { track } from \"../utils/posthog\";\nimport { ThemeToggle } from \"./themeToggle\";\n\nexport function TopNavMenu(props: {\n  client: Window[\"fetch\"];\n  maxWidth: number;\n  current?: string;\n  isLoggedIn: boolean;\n  account?: IAccount;\n  mobileRight?: JSX.Element;\n  isWhite?: boolean;\n}): JSX.Element {\n  const [isMenuOpen, setIsMenuOpen] = useState(false);\n  const [isAccountModalOpen, setIsAccountModalOpen] = useState(false);\n  const isLoggedIn = props.isLoggedIn;\n\n  return (\n    <nav className=\"w-full mx-auto\">\n      <div className=\"flex items-center\">\n        {/* Mobile nav */}\n        <div className=\"flex items-center w-full gap-2 px-4 py-4 md:hidden\">\n          <div className=\"flex items-center gap-2 mr-auto\">\n            <div className=\"overflow-hidden rounded-lg\" style={{ width: \"2.5rem\", height: \"2.5rem\" }}>\n              <a href=\"/\" className=\"flex items-center no-underline\">\n                <img\n                  className=\"inline align-middle\"\n                  style={{ width: \"2.5rem\", height: \"2.5rem\" }}\n                  src=\"/images/icon.svg\"\n                  alt=\"Liftosaur Logo\"\n                />\n              </a>\n            </div>\n            <div className={`text-xl font-bold ${props.isWhite ? \"text-text-alwayswhite\" : \"\"}`}>Liftosaur</div>\n          </div>\n          {props.mobileRight}\n          <div className=\"flex flex-row items-center gap-2\">\n            <ThemeToggle isWhite={props.isWhite} />\n            <button\n              className=\"p-2 align-middle bg-background-default rounded-lg nm-navbar-hamburger leading-none\"\n              onClick={() => setIsMenuOpen(true)}\n            >\n              <IconHamburger />\n            </button>\n          </div>\n        </div>\n\n        {/* Mobile full-screen overlay menu */}\n        {isMenuOpen && (\n          <div className=\"fixed inset-0 z-50 overflow-y-auto bg-background-default md:hidden\">\n            <div className=\"p-4\">\n              <div className=\"flex items-center justify-between mb-8\">\n                <div className=\"flex items-center gap-2\">\n                  <div className=\"overflow-hidden rounded-lg\" style={{ width: \"2.5rem\", height: \"2.5rem\" }}>\n                    <a href=\"/\" className=\"flex items-center no-underline\">\n                      <img\n                        className=\"inline align-middle\"\n                        style={{ width: \"2.5rem\", height: \"2.5rem\" }}\n                        src=\"/images/icon.svg\"\n                        alt=\"Liftosaur Logo\"\n                      />\n                    </a>\n                  </div>\n                  <div className=\"text-xl font-bold\">Liftosaur</div>\n                </div>\n                <div className=\"flex items-center\">\n                  <ThemeToggle />\n                  <button className=\"p-2\" onClick={() => setIsMenuOpen(false)}>\n                    <IconClose size={20} color={Tailwind_semantic().text.primary} />\n                  </button>\n                </div>\n              </div>\n              <div className=\"flex flex-col gap-4 mb-6\">\n                {getMenuItems(isLoggedIn, !!props.account?.affiliateEnabled).map(([text, link]) => (\n                  <a key={text} className=\"font-semibold no-underline\" href={link} onClick={() => setIsMenuOpen(false)}>\n                    {text}\n                  </a>\n                ))}\n              </div>\n              <div className=\"pt-6 mb-6 border-t border-border-neutral\">\n                {isLoggedIn ? (\n                  <button\n                    className=\"font-semibold text-text-purple\"\n                    onClick={() => {\n                      setIsMenuOpen(false);\n                      setIsAccountModalOpen(true);\n                    }}\n                  >\n                    Sign Out\n                  </button>\n                ) : (\n                  <button\n                    className=\"font-semibold text-text-purple\"\n                    onClick={() => {\n                      setIsMenuOpen(false);\n                      setIsAccountModalOpen(true);\n                    }}\n                  >\n                    Sign In\n                  </button>\n                )}\n              </div>\n              <div className=\"flex flex-col gap-3 mb-8\">\n                <Onelink\n                  className=\"flex items-center gap-3 text-text-primary no-underline\"\n                  onClick={() => track({ redditname: \"Lead\", googlename: \"outbound_click\" })}\n                >\n                  <IconApple color={Tailwind_semantic().text.primary} />\n                  <span className=\"text-base\">App Store</span>\n                </Onelink>\n                <Onelink\n                  type=\"android\"\n                  target=\"_blank\"\n                  className=\"flex items-center gap-3 text-text-primary no-underline\"\n                  onClick={() => track({ redditname: \"Lead\", googlename: \"outbound_click\" })}\n                >\n                  <IconGooglePlay size={20} color={Tailwind_semantic().text.primary} />\n                  <span className=\"text-base\">Google Play</span>\n                </Onelink>\n              </div>\n              <div className=\"pt-6 border-t border-border-neutral\">\n                <div className=\"flex items-center justify-center gap-5\">\n                  <a href=\"https://www.instagram.com/liftosaurapp\" target=\"_blank\">\n                    <IconInstagramFlat size={24} color={Tailwind_semantic().text.primary} />\n                  </a>\n                  <a href=\"https://x.com/liftosaur\" target=\"_blank\">\n                    <IconYoutube size={24} color={Tailwind_semantic().text.primary} />\n                  </a>\n                  <a href=\"https://www.reddit.com/r/liftosaur\" target=\"_blank\">\n                    <IconReddit size={24} color={Tailwind_semantic().text.primary} />\n                  </a>\n                  <a href=\"https://discord.gg/AAh3cvdBRs\" target=\"_blank\">\n                    <IconDiscord size={24} color={Tailwind_semantic().text.primary} />\n                  </a>\n                </div>\n              </div>\n            </div>\n          </div>\n        )}\n\n        <DesktopNav\n          maxWidth={props.maxWidth}\n          current={props.current}\n          onAccountClick={() => setIsAccountModalOpen(true)}\n          isLoggedIn={isLoggedIn}\n          affiliateEnabled={!!props.account?.affiliateEnabled}\n          isWhite={props.isWhite}\n        />\n      </div>\n      <ModalAccount\n        isHidden={!isAccountModalOpen}\n        client={props.client}\n        account={props.account}\n        isLoggedIn={isLoggedIn}\n        onClose={() => setIsAccountModalOpen(false)}\n      />\n    </nav>\n  );\n}\n\nfunction getMenuItems(isLoggedIn: boolean, affiliateEnabled: boolean): readonly (readonly [string, string, string?])[] {\n  return [\n    [\"Programs\", \"/programs\"],\n    [\"Exercises\", \"/exercises\"],\n    [\"Web Editor\", \"/planner\"],\n    [\"Docs\", \"/doc\"],\n    [\"Blog\", \"/blog\"],\n    ...(isLoggedIn ? [[\"My Programs\", \"/user/programs\"] as const] : []),\n    ...(isLoggedIn && affiliateEnabled ? [[\"Affiliate Stats\", \"/user/affiliates\"] as const] : []),\n  ];\n}\n\ninterface IDesktopNavProps {\n  current?: string;\n  onAccountClick: () => void;\n  isLoggedIn: boolean;\n  affiliateEnabled: boolean;\n  isWhite?: boolean;\n  maxWidth: number;\n}\n\nfunction DesktopNav(props: IDesktopNavProps): JSX.Element {\n  return (\n    <div className={`mb-4 w-full hidden md:block ${props.isWhite ? \"\" : \"border-b border-background-neutral\"}`}>\n      <div\n        className={`mx-auto px-4 py-4 items-center gap-4 flex-1 hidden text-text-primary md:flex ${props.isWhite ? \"text-text-alwayswhite\" : \"\"}`}\n        style={{ maxWidth: `${props.maxWidth}px` }}\n      >\n        <a href=\"/\" className=\"flex items-center gap-4 mr-auto no-underline shrink-0\">\n          <div className=\"overflow-hidden rounded-lg\" style={{ width: \"3em\", height: \"3em\" }}>\n            <img\n              className=\"inline align-middle\"\n              style={{ width: \"100%\", height: \"100%\" }}\n              src=\"/images/icon.svg\"\n              alt=\"Liftosaur Logo\"\n            />\n          </div>\n          <span className=\"text-xl font-bold\">Liftosaur</span>\n        </a>\n        <div className=\"flex items-center gap-4\">\n          <ul className=\"flex flex-wrap items-center justify-end leading-none list-none gap-x-4\">\n            {getMenuItems(props.isLoggedIn, props.affiliateEnabled).map(([text, link, hideClass]) => (\n              <li key={text} className={`list-none ${hideClass || \"\"}`}>\n                {props.current === link ? (\n                  <span\n                    className={`py-1 text-sm underline ${props.isWhite ? \"text-text-alwayswhite\" : \"text-text-purple\"}`}\n                  >\n                    {text}\n                  </span>\n                ) : (\n                  <a\n                    className={`py-1 text-sm font-medium ${props.isWhite ? \"text-text-alwayswhite\" : \"text-text-secondary\"} no-underline hover:underline`}\n                    href={link}\n                  >\n                    {text}\n                  </a>\n                )}\n              </li>\n            ))}\n          </ul>\n          <div className=\"bg-border-prominent\" style={{ width: \"1px\", height: \"1.5rem\" }} />\n          <div className=\"flex items-center gap-4 shrink-0\">\n            <a href=\"https://www.instagram.com/liftosaurapp\" target=\"_blank\">\n              <IconInstagramFlat\n                color={props.isWhite ? Tailwind_semantic().icon.white : Tailwind_semantic().text.primary}\n              />\n            </a>\n            <a href=\"https://www.youtube.com/@Liftosaur\" target=\"_blank\">\n              <IconYoutube\n                color={props.isWhite ? Tailwind_semantic().icon.white : Tailwind_semantic().text.primary}\n                secondaryColor={props.isWhite ? Tailwind_semantic().icon.purple : Tailwind_semantic().icon.white}\n              />\n            </a>\n            <a href=\"https://www.reddit.com/r/liftosaur\" target=\"_blank\">\n              <IconReddit\n                color={props.isWhite ? Tailwind_semantic().icon.white : Tailwind_semantic().text.primary}\n                secondaryColor={props.isWhite ? Tailwind_semantic().icon.purple : Tailwind_semantic().icon.white}\n              />\n            </a>\n            <a href=\"https://discord.gg/AAh3cvdBRs\" target=\"_blank\">\n              <IconDiscord color={props.isWhite ? Tailwind_semantic().icon.white : Tailwind_semantic().text.primary} />\n            </a>\n            <div className=\"bg-border-prominent\" style={{ width: \"1px\", height: \"1.5rem\" }} />\n            {props.isLoggedIn ? (\n              <button onClick={() => props.onAccountClick()} className=\"p-1\">\n                <IconUser size={20} color={Tailwind_semantic().icon.green} />\n              </button>\n            ) : (\n              <button\n                onClick={() => props.onAccountClick()}\n                className={`text-sm font-medium ${props.isWhite ? \"text-text-alwayswhite\" : \"text-text-secondary\"} no-underline hover:underline whitespace-nowrap`}\n              >\n                Sign In\n              </button>\n            )}\n            <ThemeToggle isWhite={props.isWhite} />\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n\ninterface IModalAccountProps {\n  client: Window[\"fetch\"];\n  account?: IAccount;\n  isLoggedIn: boolean;\n  isHidden: boolean;\n  onClose: () => void;\n}\n\nfunction ModalAccount(props: IModalAccountProps): JSX.Element {\n  return (\n    <Modal isHidden={props.isHidden} onClose={props.onClose} shouldShowClose={true}>\n      {props.isLoggedIn && props.account == null ? (\n        <div className=\"py-8 text-center\">\n          <IconSpinner width={20} height={20} />\n        </div>\n      ) : (\n        <Account account={props.account} client={props.client} />\n      )}\n    </Modal>\n  );\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Reducer } from \"react\";\nimport {\n  Program_getProgram,\n  Program_nextHistoryRecord,\n  Program_evaluate,\n  Program_getDayExerciseKeys,\n} from \"../models/program\";\nimport { Dialog_alert } from \"../utils/dialog\";\nimport {\n  Progress_getProgress,\n  Progress_getProgressById,\n  Progress_completeSetAction,\n  Progress_changeAmrapAction,\n  Progress_checkSetTimer,\n  Progress_closeTimedSet,\n  Progress_startSetTimerWork,\n  Progress_setProgress,\n  Progress_finishWorkout,\n  Progress_isCurrent,\n  Progress_stop,\n  Progress_showUpdateDate,\n  Progress_changeDate,\n  Progress_stopTimer,\n  Progress_getCurrentProgress,\n  Progress_applyProgramDay,\n  Progress_runInitialUpdateScripts,\n  Progress_isSetTimerCheckDue,\n} from \"../models/progress\";\nimport {\n  Storage_get,\n  Storage_getDefault,\n  Storage_getHistoryRecord,\n  Storage_isChanged,\n  Storage_updateVersions,\n} from \"../models/storage\";\nimport { IScreen, IScreenParams } from \"../models/screen\";\nimport { ILensRecordingPayload, lb } from \"lens-shmens\";\nimport { buildState, IEnv, ILocalStorage, INotification, IState, IStateErrors, updateState } from \"../models/state\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport {\n  IStorage,\n  IWeight,\n  IProgressMode,\n  ISettings,\n  IHistoryRecord,\n  IPercentage,\n  IProgramState,\n  ISubscription,\n  IStats,\n} from \"../types\";\nimport { IndexedDBUtils_get } from \"../utils/indexeddb\";\nimport { Persistence } from \"../utils/persistence\";\nimport { basicBeginnerProgram } from \"../programs/basicBeginnerProgram\";\nimport { AdminDebug_isDebugAccountId } from \"../models/adminDebug\";\nimport { LogUtils_log } from \"../utils/log\";\nimport { Service } from \"../api/service\";\nimport { unrunMigrations } from \"../migrations/runner\";\nimport {\n  ObjectUtils_isEqual,\n  ObjectUtils_changedKeys,\n  ObjectUtils_isNotEmpty,\n  ObjectUtils_keys,\n} from \"../utils/object\";\nimport { UrlUtils_build } from \"../utils/url\";\nimport { DateUtils_formatHHMMSS } from \"../utils/date\";\nimport { IReducerOnAction } from \"./types\";\nimport { Thunk_sync2, Thunk_checkSetTimer, Thunk_saveWorkoutToHealth } from \"./thunks\";\nimport { PushRegistration_identityChanged } from \"../utils/pushRegistration\";\nimport { CollectionUtils_uniqBy, CollectionUtils_compact } from \"../utils/collection\";\nimport { Subscriptions_cleanupOutdatedGooglePurchaseTokens } from \"../utils/subscriptions\";\nimport { UndoingFlag_set } from \"../utils/undoingFlag\";\nimport { Diagnostics_getLastActions, Diagnostics_recordAction, Diagnostics_setLastState } from \"../utils/diagnostics\";\nimport { Exercise_toKey } from \"../models/exercise\";\nimport { INativeEffect, NativeEffects_withoutWatchWorkout } from \"../models/nativeEffects\";\nimport { History_resumeWorkout } from \"../models/history\";\nimport { IPlannerProgramExercise } from \"../pages/planner/models/types\";\nimport { IByExercise } from \"../pages/planner/plannerEvaluator\";\nimport { History_deleteRecords } from \"../models/history\";\nimport { WorkoutOutcome_add, WorkoutOutcome_healthSaves } from \"../models/workoutOutcome\";\nimport { lg } from \"../utils/posthog\";\nimport { Equipment_getCurrentGym, Equipment_getEquipmentIdForExerciseType } from \"../models/equipment\";\nimport { Stats_getCurrentMovingAverageBodyweight } from \"../models/stats\";\nimport { Weight_build, Weight_eq } from \"../models/weight\";\nimport { PerfTracker_recordEvent, PerfTracker_getSessionId } from \"../utils/perfTracker\";\nimport { PerfEnabled_isEnabled, PerfEnabled_tier2 } from \"../utils/perfEnabled\";\nimport { PerfProbe_onAction } from \"../utils/perfSetCompleteProbe\";\nimport { HermesProfile_captureOnce } from \"../utils/hermesProfile\";\nimport { PerfScorecard_recordAction } from \"../utils/perfScorecard\";\nimport { EquipmentUnits_follow } from \"../models/equipmentUnits\";\n\ndeclare let __COMMIT_HASH__: string;\n\nconst isLoggingEnabled =\n  typeof window !== \"undefined\" && window?.location\n    ? !!UrlUtils_build(window.location.href).searchParams.get(\"log\")\n    : false;\n\nexport async function getIdbKey(userId?: string, isAdmin?: boolean): Promise<string> {\n  const currentAccount = await IndexedDBUtils_get(\"current_account\");\n  if (currentAccount) {\n    return `liftosaur_${currentAccount}`;\n  } else {\n    return userId != null && isAdmin ? `liftosaur_${userId}` : \"liftosaur\";\n  }\n}\n\ndeclare let __HOST__: string;\n\nexport async function getInitialState(\n  client: Window[\"fetch\"],\n  args: { url?: URL; rawStorage?: string; localStorage?: ILocalStorage; storage?: IStorage; deviceId: string }\n): Promise<IState> {\n  const url =\n    args?.url ||\n    (typeof document !== \"undefined\" ? UrlUtils_build(document.location.href) : UrlUtils_build(`${__HOST__}/app/`));\n  const messageerror = url.searchParams.get(\"messageerror\") || undefined;\n  const messagesuccess = url.searchParams.get(\"messagesuccess\") || undefined;\n  const nosync = url.searchParams.get(\"nosync\") === \"true\";\n  let storage: ILocalStorage | undefined;\n  if (args?.storage) {\n    storage = { storage: args.storage };\n  } else if (args?.localStorage != null) {\n    storage = args.localStorage;\n  } else if (args?.rawStorage != null) {\n    try {\n      storage = JSON.parse(args.rawStorage);\n    } catch (e) {\n      storage = undefined;\n    }\n  }\n  const notification: INotification | undefined =\n    messageerror || messagesuccess\n      ? {\n          type: messageerror ? (\"error\" as const) : (\"success\" as const),\n          content: messageerror || messagesuccess || \"\",\n        }\n      : undefined;\n\n  const deviceId = args.deviceId;\n  if (storage != null && storage.storage != null) {\n    const hasUnrunMigrations = unrunMigrations(storage.storage).length > 0;\n    const maybeStorage = Storage_get(storage.storage, true);\n    let finalStorage: IStorage;\n    const errors: IStateErrors = {};\n    if (maybeStorage.success) {\n      finalStorage = maybeStorage.data;\n    } else {\n      const service = new Service(client);\n      const userid = (storage.storage?.tempUserId || `missing-${UidFactory_generateUid(8)}`) as string;\n      const serverStorage = await service.getStorage(userid, undefined, undefined);\n      const maybeServerStorage = Storage_get(serverStorage.storage, false);\n      if (maybeServerStorage.success) {\n        finalStorage = maybeServerStorage.data;\n      } else {\n        errors.corruptedstorage = {\n          userid,\n          backup: await service.postDebug(userid, JSON.stringify(storage.storage), { local: \"true\" }),\n          confirmed: false,\n          local: true,\n        };\n        finalStorage = Storage_getDefault();\n      }\n    }\n\n    const lastSynced = hasUnrunMigrations ? undefined : storage.lastSynced;\n\n    // Handle migration from old localStorage format where progress was stored separately\n    // Now progress is stored in storage.progress\n    const oldProgress = (storage as { progress?: IHistoryRecord }).progress;\n    if (oldProgress != null && (finalStorage.progress == null || finalStorage.progress.length === 0)) {\n      const migratedProgress = Storage_getHistoryRecord(oldProgress as unknown as Record<string, unknown>, true);\n      if (migratedProgress.success) {\n        finalStorage = { ...finalStorage, progress: [{ ...migratedProgress.data, vtype: \"progress\" }] };\n      }\n    }\n\n    return {\n      storage: finalStorage,\n      lastSynced,\n      progress: {},\n      notification,\n      loading: { items: {} },\n      programs: [basicBeginnerProgram],\n      programsIndex: [],\n      revisions: {},\n      user: undefined,\n      freshMigrations: maybeStorage.success && hasUnrunMigrations,\n      errors,\n      nosync: nosync || AdminDebug_isDebugAccountId(finalStorage.tempUserId),\n      deviceId,\n      editProgramStates: {},\n    };\n  }\n  const newState = buildState({\n    notification,\n    nosync,\n    deviceId,\n  });\n  LogUtils_log(newState.storage.tempUserId, \"ls-initialize-user\", {}, []);\n  return newState;\n}\n\nexport type IChangeDate = {\n  type: \"ChangeDate\";\n  id: number;\n  date: string;\n  time: number;\n};\n\nexport type IConfirmDate = {\n  type: \"ConfirmDate\";\n  id: number;\n  date?: string;\n  time?: number;\n};\n\nexport type ILoginAction = {\n  type: \"Login\";\n  email: string;\n  userId: string;\n};\n\nexport type ILogoutAction = {\n  type: \"Logout\";\n};\n\nexport type IPushScreen<T extends IScreen> = {\n  type: \"PushScreen\";\n  screen: T;\n  params?: IScreenParams<T>;\n  shouldResetStack?: boolean;\n};\n\nexport type IPullScreen = {\n  type: \"PullScreen\";\n};\n\nexport type ICancelProgress = {\n  type: \"CancelProgress\";\n};\n\nexport type IDeleteProgress = {\n  type: \"DeleteProgress\";\n  id: number;\n};\n\nexport type ICompleteSetAction = {\n  type: \"CompleteSetAction\";\n  entryIndex: number;\n  setIndex: number;\n  programExercise?: IPlannerProgramExercise;\n  otherStates?: IByExercise<IProgramState>;\n  isPlayground: boolean;\n  mode: IProgressMode;\n  forceUpdateEntryIndex: boolean;\n  isExternal: boolean;\n  // Set when completing a timed set from its running clock: the elapsed seconds to record (the model\n  // otherwise derives it from setTimerModal.startedAt), and whether to keep the clock running afterwards.\n  recordedSeconds?: number;\n  keepSetTimerRunning?: boolean;\n};\n\n// Polled by any surface (banner tick, rest-timer tick, live activity, watch) to drive time-based set\n// timer transitions: auto-fire when the work timer hits its target, or auto-advance after rest expires.\n// No-op (returns the same progress) when nothing is due.\nexport type ICheckSetTimerAction = {\n  type: \"CheckSetTimerAction\";\n  programExercise?: IPlannerProgramExercise;\n  otherStates?: IByExercise<IProgramState>;\n  now?: number;\n  // When a playground timer auto-fires at its target, the completion must stay playground-scoped — otherwise\n  // it resumes/updates the real native workout (playground records have id 0 and read as \"current\").\n  isPlayground?: boolean;\n};\n\nexport type IStartSetTimerWorkAction = {\n  type: \"StartSetTimerWorkAction\";\n  // A queued native tap can arrive long after the fact, and stamping it here would start the work clock\n  // late and silently shorten the set.\n  startedAt?: number;\n};\n\n// Discard the set timer banner (no recording); starts the deferred rest if the set was already logged.\nexport type ICloseSetTimerAction = {\n  type: \"CloseSetTimerAction\";\n  // Playground has no rest timers, so closing a logged set-timer there must not start a deferred rest.\n  isPlayground?: boolean;\n};\n\nexport type IFinishProgramDayAction = {\n  type: \"FinishProgramDayAction\";\n  id: number;\n  startTime: number;\n  healthSync: boolean;\n};\n\nexport type IStartProgramDayAction = {\n  type: \"StartProgramDayAction\";\n  programId?: string;\n};\n\nexport type IChangeAMRAPAction = {\n  type: \"ChangeAMRAPAction\";\n  setIndex: number;\n  isPlayground: boolean;\n  entryIndex: number;\n  amrapValue?: number;\n  amrapLeftValue?: number;\n  rpeValue?: number;\n  weightValue?: IWeight;\n  isAmrap?: boolean;\n  logRpe?: boolean;\n  askWeight?: boolean;\n  programExercise?: IPlannerProgramExercise;\n  otherStates?: IByExercise<IProgramState>;\n  userVars?: Record<string, number | IWeight | IPercentage>;\n};\n\nexport type IUpdateSettingsAction = {\n  type: \"UpdateSettings\";\n  lensRecording: ILensRecordingPayload<ISettings>;\n  desc: string;\n};\n\nexport type IUpdateStateAction = {\n  type: \"UpdateState\";\n  lensRecording: ILensRecordingPayload<IState>[];\n  desc: string;\n};\n\nexport type IReplaceStateAction = {\n  type: \"ReplaceState\";\n  state: IState;\n};\n\nexport type IEditHistoryRecordAction = {\n  type: \"EditHistoryRecord\";\n  historyRecord: IHistoryRecord;\n};\n\nexport type IStopTimer = {\n  type: \"StopTimer\";\n};\n\nexport type IResumeWorkoutAction = {\n  type: \"ResumeWorkoutAction\";\n  isPlayground: boolean;\n  hasSubscription: boolean;\n};\n\nexport type IApplyProgramChangesToProgress = {\n  type: \"ApplyProgramChangesToProgress\";\n  programExerciseIds?: string[];\n  // Set only where the program itself changed, which is the only place that can know what the day looked like\n  // before. Without it the pass is value-only — see `Progress_applyProgramDay`.\n  oldDayKeys?: string[];\n};\n\nexport type IUpdateProgressAction = {\n  type: \"UpdateProgress\";\n  lensRecordings: ILensRecordingPayload<IHistoryRecord>[];\n  desc: string;\n};\n\nexport type ICardsAction =\n  | ICompleteSetAction\n  | IChangeAMRAPAction\n  | IUpdateProgressAction\n  | ICheckSetTimerAction\n  | ICloseSetTimerAction\n  | IStartSetTimerWorkAction;\n\nexport type IAction =\n  | ICardsAction\n  | IStartProgramDayAction\n  | IFinishProgramDayAction\n  | IEditHistoryRecordAction\n  | ICancelProgress\n  | IDeleteProgress\n  | IPushScreen<any>\n  | IPullScreen\n  | IChangeDate\n  | IConfirmDate\n  | ILoginAction\n  | ILogoutAction\n  | IStopTimer\n  | IResumeWorkoutAction\n  | IUpdateStateAction\n  | IReplaceStateAction\n  | IUpdateSettingsAction\n  | IApplyProgramChangesToProgress;\n\nfunction isExternalStorageMerge(action: unknown): boolean {\n  return (\n    typeof action === \"object\" &&\n    action != null &&\n    \"type\" in action &&\n    action.type === \"UpdateState\" &&\n    \"desc\" in action &&\n    (action.desc === \"Merge synced storage\" ||\n      action.desc === \"Merge watch storage\" ||\n      action.desc === \"Reload storage from disk\")\n  );\n}\n\nexport function defaultOnActions(env: IEnv): IReducerOnAction[] {\n  return [\n    (dispatch, action, oldState, newState) => {\n      const isFinishDayAction = \"type\" in action && action.type === \"FinishProgramDayAction\";\n      if (!isExternalStorageMerge(action) && Storage_isChanged(oldState.storage, newState.storage)) {\n        dispatch(Thunk_sync2({ log: isFinishDayAction }));\n      }\n    },\n    (dispatch, action, oldState, newState) => {\n      const units = newState.storage.settings.units;\n      if (oldState.storage.settings.units === units) {\n        return;\n      }\n      const gyms = newState.storage.settings.gyms;\n      const converted = EquipmentUnits_follow(gyms, units);\n      if (converted !== gyms) {\n        updateState(\n          dispatch,\n          [lb<IState>().p(\"storage\").p(\"settings\").p(\"gyms\").record(converted)],\n          \"Convert equipment to app units\"\n        );\n      }\n    },\n    (dispatch, action, oldState, newState) => {\n      const identity = PushRegistration_identityChanged(oldState, newState);\n      if (identity !== false) {\n        env.push?.setIdentity(identity);\n      }\n    },\n    (dispatch, action, oldState, newState) => {\n      // useThunkReducer re-runs these observers when a thunk resolves, so without skipping thunks and\n      // CheckSetTimerAction, Thunk_checkSetTimer's own dispatch retriggers this observer forever.\n      if (typeof action === \"function\" || action.type === \"CheckSetTimerAction\") {\n        return;\n      }\n      const progress = Progress_getCurrentProgress(newState);\n      if (progress != null && Progress_isSetTimerCheckDue(progress, Date.now())) {\n        dispatch(Thunk_checkSetTimer());\n      }\n    },\n    (dispatch, action, oldState, newState) => {\n      if (oldState.storage.programs !== newState.storage.programs) {\n        const newProgramIds = newState.storage.programs.map((p) => p.id);\n        if (Array.from(new Set(newProgramIds)).length !== newProgramIds.length) {\n          lg(\"program-duplicate-ids\", {\n            programIds: JSON.stringify(newProgramIds),\n            lastReducerActions: JSON.stringify(\n              Diagnostics_getLastActions().map((a) => [a.type, \"desc\" in a ? a.desc : undefined])\n            ),\n          });\n          const newPrograms = CollectionUtils_uniqBy(newState.storage.programs, \"id\");\n          updateState(\n            dispatch,\n            [lb<IState>().p(\"storage\").pi(\"programs\").record(newPrograms)],\n            \"Remove duplicate programs\"\n          );\n        }\n      }\n    },\n    (dispatch, action, oldState, newState) => {\n      // The ongoing workout, not whichever record is on screen — `ApplyProgramChangesToProgress` only ever\n      // touches that one, and a past workout open for editing has its own program and day. Reading the viewed\n      // record here would diff the wrong day and hand those keys to the live workout.\n      const progress = Progress_getCurrentProgress(newState);\n      if (progress != null) {\n        const oldProgram = Program_getProgram(oldState, progress.programId);\n        const newProgram = Program_getProgram(newState, progress.programId);\n        if (oldProgram != null && newProgram != null && !ObjectUtils_isEqual(oldProgram, newProgram)) {\n          // Exercises can only be added, removed or reordered by the planner moving, and evaluating the old\n          // program to find out what the day held isn't free — so only pay for it when the planner differs.\n          // Evaluated with the *new* settings, so the keys are comparable to the ones the handler derives.\n          const isPlannerSame =\n            oldProgram.planner != null && newProgram.planner != null\n              ? ObjectUtils_isEqual(oldProgram.planner, newProgram.planner)\n              : oldProgram.planner === newProgram.planner;\n          const oldDayKeys = isPlannerSame\n            ? undefined\n            : Program_getDayExerciseKeys(Program_evaluate(oldProgram, newState.storage.settings), progress.day);\n          dispatch({ type: \"ApplyProgramChangesToProgress\", oldDayKeys });\n        }\n      }\n    },\n    (dispatch, action, oldState, newState) => {\n      if (\n        oldState.storage.stats !== newState.storage.stats ||\n        ((newState.storage.stats.weight.weight ?? []).length > 0 && newState.storage.settings.currentBodyweight == null)\n      ) {\n        const oldBodyweight =\n          Stats_getCurrentMovingAverageBodyweight(oldState.storage.stats, oldState.storage.settings) ??\n          Weight_build(0, oldState.storage.settings.units);\n        const newBodyweight =\n          Stats_getCurrentMovingAverageBodyweight(newState.storage.stats, newState.storage.settings) ??\n          Weight_build(0, newState.storage.settings.units);\n        if (!Weight_eq(oldBodyweight, newBodyweight)) {\n          updateState(\n            dispatch,\n            [lb<IState>().p(\"storage\").p(\"settings\").pi(\"currentBodyweight\").record(newBodyweight)],\n            \"Update current bodyweight\"\n          );\n          dispatch({ type: \"ApplyProgramChangesToProgress\" });\n        }\n      }\n    },\n    (dispatch, action, oldState, newState) => {\n      const progress = Progress_getProgress(newState);\n      if (progress != null) {\n        const oldExerciseData = oldState.storage.settings.exerciseData;\n        const newExerciseData = newState.storage.settings.exerciseData;\n        if (\n          oldExerciseData != null &&\n          newExerciseData != null &&\n          !ObjectUtils_isEqual(oldExerciseData, newExerciseData)\n        ) {\n          const changes = ObjectUtils_changedKeys(oldExerciseData, newExerciseData);\n          if (ObjectUtils_isNotEmpty(changes)) {\n            const changedExercises = ObjectUtils_keys(changes);\n            const affectedEntries = progress.entries.filter((entry) => {\n              const key = Exercise_toKey(entry.exercise);\n              return changedExercises.indexOf(key) !== -1;\n            });\n            if (affectedEntries.length > 0) {\n              dispatch({\n                type: \"ApplyProgramChangesToProgress\",\n                programExerciseIds: CollectionUtils_compact(affectedEntries.map((e) => e.programExerciseId)),\n              });\n            }\n          }\n        }\n      }\n    },\n    (dispatch, action, oldState, newState) => {\n      const progress = Progress_getProgress(newState);\n      if (progress != null) {\n        const oldEquipment = Equipment_getCurrentGym(oldState.storage.settings).equipment;\n        const newEquipment = Equipment_getCurrentGym(newState.storage.settings).equipment;\n        if (oldEquipment != null && newEquipment != null && !ObjectUtils_isEqual(oldEquipment, newEquipment)) {\n          const changedEquipmentIds = ObjectUtils_keys(ObjectUtils_changedKeys(oldEquipment, newEquipment));\n          const settings = newState.storage.settings;\n          const affectedEntries = progress.entries.filter((entry) => {\n            const equipmentId = Equipment_getEquipmentIdForExerciseType(settings, entry.exercise);\n            return equipmentId != null && changedEquipmentIds.indexOf(equipmentId) !== -1;\n          });\n          if (affectedEntries.length > 0) {\n            dispatch({\n              type: \"ApplyProgramChangesToProgress\",\n              programExerciseIds: CollectionUtils_compact(affectedEntries.map((e) => e.programExerciseId)),\n            });\n          }\n        }\n      }\n    },\n    (dispatch, action, oldState, newState) => {\n      if (!ObjectUtils_isEqual(oldState.storage.subscription.google, newState.storage.subscription.google)) {\n        const userId = newState.user?.id || newState.storage.tempUserId;\n        Subscriptions_cleanupOutdatedGooglePurchaseTokens(dispatch, userId, env.service, newState.storage.subscription);\n      }\n    },\n    (dispatch, action, oldState, newState) => {\n      if (\"type\" in action && action.type === \"UpdateState\" && action.desc === \"stop-is-undoing\") {\n        setTimeout(() => {\n          UndoingFlag_set(false);\n        }, 200);\n      }\n    },\n    (dispatch, action, oldState, newState) => {\n      if (oldState.storage.workoutOutcomes === newState.storage.workoutOutcomes || typeof action === \"function\") {\n        return;\n      }\n      const isOwnFinish = action.type === \"FinishProgramDayAction\";\n      const isMerge =\n        action.type === \"UpdateState\" &&\n        (action.desc === \"Merge watch storage\" || action.desc === \"Merge synced storage\");\n      if (!isOwnFinish && !isMerge) {\n        return;\n      }\n      const payloads = WorkoutOutcome_healthSaves(\n        oldState.storage.workoutOutcomes,\n        newState.storage.workoutOutcomes,\n        newState.storage.history,\n        Date.now()\n      );\n      for (const payload of payloads) {\n        dispatch(Thunk_saveWorkoutToHealth({ ...payload, source: isOwnFinish ? \"finish\" : \"merge\" }));\n      }\n    },\n  ];\n}\n\nexport const reducerWrapper =\n  (\n    storeToLocalStorage: boolean,\n    persistence: Persistence,\n    applyEffects: (effects: INativeEffect[]) => void\n  ): Reducer<IState, IAction> =>\n  (state, action) => {\n    Diagnostics_setLastState(state);\n    Diagnostics_recordAction({ ...action, time: DateUtils_formatHHMMSS(Date.now(), true) });\n    const perfOn = PerfEnabled_isEnabled();\n    const perfActionType = \"type\" in action ? action.type : \"thunk\";\n    const perfActionDesc = \"type\" in action && action.type === \"UpdateState\" ? action.desc : undefined;\n    const perfSyncStart = perfOn ? Date.now() : 0;\n    const effects: INativeEffect[] = [];\n    let newState = reducer(state, action, effects);\n    applyEffects(\n      AdminDebug_isDebugAccountId(newState.storage.tempUserId) ? NativeEffects_withoutWatchWorkout(effects) : effects\n    );\n    const isMergingStorage = isExternalStorageMerge(action);\n    const isStorageChanged = !isMergingStorage && Storage_isChanged(state.storage, newState.storage);\n    if (isStorageChanged) {\n      const oldHistoryLen = state.storage.history?.length ?? 0;\n      const newHistoryLen = newState.storage.history?.length ?? 0;\n      const actionDesc = \"type\" in action && action.type === \"UpdateState\" ? action.desc : action.type;\n      if (oldHistoryLen > 0 && newHistoryLen === 0) {\n        lg(\"ls-history-deletion-critical\", {\n          oldLen: oldHistoryLen,\n          newLen: newHistoryLen,\n          action: actionDesc || \"unknown\",\n        });\n      } else if (oldHistoryLen - newHistoryLen > 5) {\n        lg(\"ls-history-deletion-warning\", {\n          oldLen: oldHistoryLen,\n          newLen: newHistoryLen,\n          action: actionDesc || \"unknown\",\n        });\n      }\n      const versions = Storage_updateVersions(state.storage, newState.storage, state.deviceId);\n      newState = { ...newState, storage: { ...newState.storage, _versions: versions } };\n    }\n\n    if (typeof window !== \"undefined\") {\n      window.tempUserId = newState.storage.tempUserId;\n      (window as any).state = newState;\n      if (storeToLocalStorage && newState.errors.corruptedstorage == null) {\n        persistence.scheduleSave(newState.user?.id || newState.storage.tempUserId, {\n          storage: newState.storage,\n          lastSynced: newState.lastSynced,\n        });\n      }\n    }\n\n    if (perfOn) {\n      const perfDurationMs = Date.now() - perfSyncStart;\n      PerfScorecard_recordAction(perfActionDesc ?? perfActionType, perfDurationMs);\n      if (\n        perfActionType === \"CompleteSetAction\" ||\n        perfActionType === \"ChangeAMRAPAction\" ||\n        perfActionType === \"UpdateProgress\"\n      ) {\n        PerfProbe_onAction(perfActionDesc ?? perfActionType, perfDurationMs);\n      }\n      if (perfActionType === \"CompleteSetAction\") {\n        HermesProfile_captureOnce(\"complete-set\");\n      }\n      if (PerfEnabled_tier2()) {\n        PerfTracker_recordEvent({\n          type: \"action\",\n          session: PerfTracker_getSessionId(),\n          action: perfActionType,\n          desc: perfActionDesc,\n          duration_ms: perfDurationMs,\n          ts: perfSyncStart,\n        });\n      }\n    }\n    return newState;\n  };\n\nexport function buildCardsReducer(\n  effects: INativeEffect[],\n  settings: ISettings,\n  stats: IStats,\n  subscription?: ISubscription\n): Reducer<IHistoryRecord, ICardsAction> {\n  return (progress, action): IHistoryRecord => {\n    switch (action.type) {\n      case \"CompleteSetAction\": {\n        const newProgress = Progress_completeSetAction(effects, settings, stats, progress, action, subscription);\n        return newProgress;\n      }\n      case \"ChangeAMRAPAction\": {\n        const newProgress = Progress_changeAmrapAction(effects, settings, stats, progress, action, subscription);\n        return newProgress;\n      }\n      case \"CheckSetTimerAction\": {\n        return Progress_checkSetTimer(\n          effects,\n          settings,\n          stats,\n          progress,\n          subscription,\n          action.programExercise,\n          action.otherStates,\n          action.now,\n          action.isPlayground\n        );\n      }\n      case \"CloseSetTimerAction\": {\n        return Progress_closeTimedSet(effects, progress, settings, subscription, action.isPlayground);\n      }\n      case \"StartSetTimerWorkAction\": {\n        return Progress_startSetTimerWork(progress, action.startedAt ?? Date.now());\n      }\n      case \"UpdateProgress\": {\n        return action.lensRecordings.reduce((memo, recording) => recording.fn(memo), progress);\n      }\n    }\n  };\n}\n\nexport type IEffectfulReducer = (state: IState, action: IAction, effects: INativeEffect[]) => IState;\n\nexport const reducer: IEffectfulReducer = (state, action, effects): IState => {\n  if (\n    action.type === \"CompleteSetAction\" ||\n    action.type === \"ChangeAMRAPAction\" ||\n    action.type === \"CheckSetTimerAction\" ||\n    action.type === \"CloseSetTimerAction\" ||\n    action.type === \"StartSetTimerWorkAction\" ||\n    action.type === \"UpdateProgress\"\n  ) {\n    const progress = Progress_getProgress(state);\n    if (progress == null) {\n      return state;\n    }\n    return Progress_setProgress(\n      state,\n      buildCardsReducer(\n        effects,\n        state.storage.settings,\n        state.storage.stats,\n        state.storage.subscription\n      )(progress, action)\n    );\n  } else if (action.type === \"StartProgramDayAction\") {\n    const progress = Progress_getProgress(state);\n    if (progress != null) {\n      return state;\n    } else if (state.storage.currentProgramId != null) {\n      const program = Program_getProgram(state, action.programId || state.storage.currentProgramId);\n      if (program != null) {\n        const newProgress = Program_nextHistoryRecord(program, state.storage.settings, state.storage.stats);\n        return {\n          ...state,\n          storage: { ...state.storage, progress: [newProgress] },\n        };\n      } else {\n        Dialog_alert(\"No currently selected program\");\n        return state;\n      }\n    } else {\n      return state;\n    }\n  } else if (action.type === \"EditHistoryRecord\") {\n    return {\n      ...state,\n      progress: { ...state.progress, [action.historyRecord.id]: { ...action.historyRecord, ui: {} } },\n    };\n  } else if (action.type === \"FinishProgramDayAction\") {\n    const progress = Progress_getProgressById(state, action.id);\n    if (progress == null || progress.startTime !== action.startTime) {\n      return state;\n    }\n    const newStorage = Progress_finishWorkout(effects, state.storage, progress, action.healthSync);\n    return {\n      ...state,\n      storage: newStorage,\n      progress: Progress_isCurrent(progress) ? state.progress : Progress_stop(state.progress, progress.id),\n    };\n  } else if (action.type === \"ChangeDate\") {\n    const progress = Progress_getProgressById(state, action.id);\n    if (progress == null) {\n      return state;\n    }\n    return Progress_setProgress(state, Progress_showUpdateDate(progress, action.date, action.time));\n  } else if (action.type === \"ConfirmDate\") {\n    const progress = Progress_getProgressById(state, action.id);\n    if (progress == null) {\n      return state;\n    }\n    return Progress_setProgress(state, Progress_changeDate(progress, action.date, action.time));\n  } else if (action.type === \"CancelProgress\") {\n    const progress = Progress_getProgress(state)!;\n    return {\n      ...state,\n      storage: Progress_isCurrent(progress) ? { ...state.storage, progress: [] } : state.storage,\n      progress: Progress_isCurrent(progress) ? state.progress : Progress_stop(state.progress, progress.id),\n    };\n  } else if (action.type === \"DeleteProgress\") {\n    const progress = Progress_getProgressById(state, action.id);\n    if (progress != null) {\n      if (Progress_isCurrent(progress)) {\n        effects.push({ type: \"discardWorkout\" });\n        return {\n          ...state,\n          storage: {\n            ...state.storage,\n            history: state.storage.history.filter((h) => h.id !== progress.id),\n            progress: [],\n            workoutOutcomes: WorkoutOutcome_add(state.storage.workoutOutcomes, {\n              id: progress.startTime,\n              outcome: \"discard\",\n              healthSync: false,\n              endTime: Date.now(),\n            }),\n          },\n        };\n      }\n      return {\n        ...state,\n        storage: History_deleteRecords(state.storage, [progress.id]),\n        progress: Progress_stop(state.progress, progress.id),\n      };\n    } else {\n      return state;\n    }\n  } else if (action.type === \"PushScreen\") {\n    return state;\n  } else if (action.type === \"PullScreen\") {\n    return state;\n  } else if (action.type === \"Login\") {\n    return {\n      ...state,\n      user: { email: action.email, id: action.userId },\n      storage: { ...state.storage, email: action.email },\n    };\n  } else if (action.type === \"Logout\") {\n    return { ...state, user: undefined, storage: { ...state.storage, email: undefined } };\n  } else if (action.type === \"StopTimer\") {\n    const progress = Progress_getProgress(state);\n    if (progress != null) {\n      return Progress_setProgress(state, Progress_stopTimer(effects, progress));\n    } else {\n      return state;\n    }\n  } else if (action.type === \"ResumeWorkoutAction\") {\n    const progress = Progress_getCurrentProgress(state);\n    if (progress == null) {\n      return state;\n    }\n    const intervals = History_resumeWorkout(\n      effects,\n      progress,\n      action.isPlayground,\n      state.storage.settings.timers.reminder,\n      action.hasSubscription\n    );\n    return Progress_setProgress(state, { ...progress, intervals });\n  } else if (action.type === \"UpdateSettings\") {\n    if (isLoggingEnabled) {\n      console.log(`%c-------${action.desc ? ` ${action.desc}` : \"\"}`, \"font-weight:bold\");\n    }\n    return {\n      ...state,\n      storage: {\n        ...state.storage,\n        settings: action.lensRecording.fn(state.storage.settings),\n      },\n    };\n  } else if (action.type === \"ReplaceState\") {\n    return action.state;\n  } else if (action.type === \"UpdateState\") {\n    if (isLoggingEnabled) {\n      console.log(`%c-------${action.desc ? ` ${action.desc}` : \"\"}`, \"font-weight:bold\");\n    }\n    return action.lensRecording.reduce((memo, recording) => {\n      if (isLoggingEnabled) {\n        recording.log(\"state\");\n      }\n      const newState = recording.fn(memo);\n      if (isLoggingEnabled && recording.type === \"modify\") {\n        console.log(\"New Value: \", recording.value.v);\n      }\n      return newState;\n    }, state);\n  } else if (action.type === \"ApplyProgramChangesToProgress\") {\n    const progress = Progress_getCurrentProgress(state);\n    if (progress != null) {\n      const program = Program_evaluate(Program_getProgram(state, progress.programId)!, state.storage.settings);\n      let newProgress = Progress_applyProgramDay(progress, program, progress.day, state.storage.settings, {\n        programExerciseIds: action.programExerciseIds,\n        oldDayKeys: action.oldDayKeys,\n        stats: state.storage.stats,\n      });\n      newProgress = Progress_runInitialUpdateScripts(\n        newProgress,\n        action.programExerciseIds,\n        progress.day,\n        program,\n        state.storage.settings,\n        state.storage.stats\n      );\n\n      return {\n        ...state,\n        storage: { ...state.storage, progress: [newProgress] },\n      };\n    } else {\n      return state;\n    }\n  } else {\n    return state;\n  }\n};\n","import { IThunk, IDispatch } from \"./types\";\nimport type { NavigationAction } from \"@react-navigation/native\";\nimport { IScreen, IScreenData, IScreenParams } from \"../models/screen\";\nimport type { INavigateOpts } from \"../navigation/navigationService\";\nimport type { IAllScreenParamList } from \"../navigation/types\";\n\nimport { getNavigationService } from \"../navigation/navUtils\";\nimport RB from \"rollbar\";\nimport { IGetStorageResponse, IPostSyncResponse, Service, Service_adminTarget } from \"../api/service\";\nimport { lb } from \"lens-shmens\";\nimport {\n  Program_getProgram,\n  Program_getFullProgram,\n  Program_evaluate,\n  Program_getProgramExercise,\n  Program_isEmpty,\n  Program_editAction,\n  Program_nextHistoryRecord,\n  Program_create,\n  Program_exportProgramToFile,\n  Program_exportProgramToLink,\n} from \"../models/program\";\nimport { getGoogleAccessToken } from \"../utils/googleAccessToken\";\nimport { SignIn_google, SignIn_apple, SignOut_google } from \"../utils/signIn\";\nimport { Platform } from \"react-native\";\nimport { Dialog_confirm, Dialog_alert } from \"../utils/dialog\";\nimport { InAppReview_request } from \"../utils/inAppReview\";\nimport {\n  IApplePromotionalOffer,\n  IEnv,\n  IGooglePromotionalOffer,\n  ILocalStorage,\n  IOfferData,\n  IState,\n  ISubscriptionLoading,\n  updateProgress,\n  updateState,\n} from \"../models/state\";\nimport {\n  AdminDebug_fetchStorage,\n  AdminDebug_fetchDebugSnapshotStorage,\n  AdminDebug_isDebugAccountId,\n} from \"../models/adminDebug\";\nimport {\n  IProgram,\n  IStorage,\n  IExerciseType,\n  ISettings,\n  IDayData,\n  IHistoryRecord,\n  IWeight,\n  IPercentage,\n  ILength,\n  ICustomExercise,\n  IImportSession,\n  IProgramState,\n} from \"../types\";\nimport { IPlannerProgramExercise } from \"../pages/planner/models/types\";\nimport { IByExercise } from \"../pages/planner/plannerEvaluator\";\nimport { CollectionUtils_compact, CollectionUtils_setAt } from \"../utils/collection\";\nimport { ImportExporter_exportStorage, ImportExporter_getExportedProgram } from \"../lib/importexporter\";\nimport { Storage_mergeStorage, Storage_isChanged, Storage_get, Storage_setAffiliate } from \"../models/storage\";\nimport { History_exportAsCSV, History_pauseWorkoutState } from \"../models/history\";\nimport type { IHealthWorkoutPayload } from \"../utils/healthAdapter\";\nimport { ImportSession_apply, ImportSession_findEditedRecordIds, ImportSession_undo } from \"../models/importSession\";\nimport { ImportFileError } from \"../utils/importTypes\";\nimport { StringUtils_pluralize } from \"../utils/string\";\nimport { CSV_toString } from \"../utils/csv\";\nimport { Exporter_toFile } from \"../utils/exporter\";\nimport { DateUtils_formatYYYYMMDD, DateUtils_format } from \"../utils/date\";\nimport { getInitialState } from \"./reducer\";\nimport { IndexedDBUtils_set } from \"../utils/indexeddb\";\nimport { Account_getAll, IAccount } from \"../models/account\";\nimport { WhatsNew_updateStorage } from \"../models/whatsnewUtils\";\nimport { WatchAuthHandoff_accountId } from \"../utils/watchAuthHandoff\";\nimport { OnloadModal_getNext, OnloadModal_shouldShowHearAboutUs } from \"../models/onloadModal\";\nimport { Screen_shouldConfirmNavigation } from \"../models/screen\";\nimport {\n  Subscriptions_listOfSubscriptions,\n  Subscriptions_hasSubscription,\n  Subscriptions_verifyAppleReceipt,\n  Subscriptions_cleanupOutdatedAppleReceipts,\n  Subscriptions_setAppleReceipt,\n  Subscriptions_verifyGooglePurchaseToken,\n  Subscriptions_setGooglePurchaseToken,\n} from \"../utils/subscriptions\";\nimport { IIapPurchase, IIapPurchaseError } from \"../utils/iapAdapter\";\nimport {\n  IapHelpers_alertAlreadySubscribed,\n  IapHelpers_applePromoToAdapter,\n  IapHelpers_clearLoading,\n  IapHelpers_setLoading,\n  IapHelpers_getSkus,\n  IapHelpers_readReceiptOrJwsIOS,\n} from \"../utils/iapHelpers\";\nimport { StoreRuntime_isAndroid, StoreRuntime_isIos, StoreRuntime_storeName } from \"../utils/storeRuntime\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { ClipboardUtils_copy } from \"../utils/clipboard\";\nimport {\n  Progress_getProgress,\n  Progress_getProgressById,\n  Progress_isSetTimerCheckDue,\n  Progress_getFirstIncompleteWorkoutSet,\n  Progress_updateTimer,\n  Progress_getCurrentProgress,\n  Progress_getProgressId,\n  Progress_isCurrent,\n  Progress_stop,\n  Progress_scheduleTimerNotification,\n  Progress_lbProgress,\n} from \"../models/progress\";\nimport { Reps_findNextEntryAndSetIndex } from \"../models/set\";\nimport { INativeEffect, NativeEffects_apply } from \"../models/nativeEffects\";\nimport { IImportLinkData, ImportFromLink_importFromLink } from \"../utils/importFromLink\";\nimport { getLatestMigrationVersion } from \"../migrations/migrations\";\nimport { LogUtils_log } from \"../utils/log\";\nimport { lg } from \"../utils/posthog\";\nimport { WatchStorageAccount_isOtherAccount } from \"../models/watchStorageAccount\";\nimport { RollbarUtils_config } from \"../utils/rollbar\";\nimport { UrlUtils_build } from \"../utils/url\";\nimport { ImportFromLiftosaur_convertLiftosaurCsvToHistoryRecords } from \"../utils/importFromLiftosaur\";\nimport { ImportFromHevy_convertHevyCsvToHistoryRecords } from \"../utils/importFromHevy\";\nimport { Sync_getStorageUpdate2 } from \"../utils/sync\";\nimport {\n  ISyncBaselineSource,\n  SyncBaseline_afterClean,\n  SyncBaseline_fromServer,\n  SyncBaseline_needsFetch,\n} from \"../utils/syncBaseline\";\nimport {\n  ISyncAccountMismatch,\n  SyncAccountMismatch_fromResponse,\n  SyncAccountMismatch_plan,\n} from \"../utils/syncAccountMismatch\";\nimport { runMigrations } from \"../migrations/runner\";\nimport { HistoryDelta_sortNewestFirst } from \"../utils/historyDelta\";\nimport { PerfProbe_isTarget } from \"../utils/perfSetCompleteProbe\";\nimport {\n  ObjectUtils_values,\n  ObjectUtils_filter,\n  ObjectUtils_clone,\n  ObjectUtils_omit,\n  ObjectUtils_keys,\n} from \"../utils/object\";\nimport { EditStats_uploadDailyMetrics, EditStats_uploadHealthStats } from \"../models/editStats\";\nimport { HealthSync_eligibleForAppleHealth, HealthSync_eligibleForGoogleHealth } from \"../lib/healthSync\";\nimport {\n  PlannerProgram_generateFullText,\n  PlannerProgram_hasNonSelectedWeightUnit,\n  PlannerProgram_switchToUnit,\n} from \"../pages/planner/models/plannerProgram\";\nimport { Weight_oppositeUnit } from \"../models/weight\";\nimport { ICollectionVersions } from \"../models/versionTracker\";\nimport { DeviceId_get } from \"../utils/deviceId\";\nimport {\n  LiveActivityManager_updateProgressLiveActivity,\n  LiveActivityManager_updateLiveActivityForNextEntry,\n} from \"../utils/liveActivityManager\";\nimport { IAuthToken } from \"../utils/keychain\";\nimport { Analytics_trackPurchase, Analytics_trackSignUp } from \"../utils/analytics\";\n\ndeclare let Rollbar: RB;\n\nexport class NoRetryError extends Error {\n  public noretry = true;\n}\n\nexport function Thunk_googleSignIn(cb?: (state: IState) => void): IThunk {\n  return async (dispatch, getState, env) => {\n    if (Platform.OS !== \"web\") {\n      const result = await SignIn_google();\n      if (result?.idToken == null && result?.accessToken == null) {\n        if (cb) {\n          cb(getState());\n        }\n        return;\n      }\n      const token = result.idToken || result.accessToken!;\n      const state = getState();\n      const userId = state.user?.id || state.storage.tempUserId;\n      const loginResult = await load(dispatch, \"Logging in\", async () => {\n        return env.service.googleSignIn(token, userId, {});\n      });\n      await load(dispatch, \"Signing in\", () => {\n        return handleLogin(dispatch, loginResult, env, userId);\n      });\n      if (cb) {\n        cb(getState());\n      }\n      dispatch(Thunk_sync2());\n      return;\n    }\n    const url = UrlUtils_build(window.location.href);\n    const forcedUserEmail = url.searchParams.get(\"forceuseremail\");\n    if (forcedUserEmail == null) {\n      const accessToken = await getGoogleAccessToken();\n      if (accessToken != null) {\n        const state = getState();\n        const userId = state.user?.id || state.storage.tempUserId;\n        const result = await load(dispatch, \"Logging in\", async () => {\n          return env.service.googleSignIn(accessToken, userId, {});\n        });\n        await load(dispatch, \"Signing in\", () => {\n          return handleLogin(dispatch, result, env, userId);\n        });\n        if (cb) {\n          cb(getState());\n        }\n        dispatch(Thunk_sync2());\n      }\n    } else {\n      const state = getState();\n      const userId = state.user?.id || state.storage.tempUserId;\n      const result = await env.service.googleSignIn(forcedUserEmail, userId, { forcedUserEmail });\n      await load(dispatch, \"Logging in\", () => handleLogin(dispatch, result, env, userId));\n      if (cb) {\n        cb(getState());\n      }\n      dispatch(Thunk_sync2());\n    }\n  };\n}\n\nexport interface IEmailAuthResult {\n  error?: string;\n  providers?: string[];\n  confirmationSent?: boolean;\n}\n\nexport function Thunk_emailAuth(\n  mode: \"signin\" | \"signup\",\n  email: string,\n  password: string,\n  cb: (result: IEmailAuthResult, state: IState) => void\n): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(`email-${mode}`));\n    const state = getState();\n    const userId = state.user?.id || state.storage.tempUserId;\n    const result = await load(dispatch, \"Logging in\", () => {\n      return mode === \"signup\"\n        ? env.service.emailSignUp(email, password, userId)\n        : env.service.emailSignIn(email, password, userId);\n    });\n    if (result.type === \"success\") {\n      await load(dispatch, \"Signing in\", () => handleLogin(dispatch, result.response, env, userId));\n      dispatch(Thunk_sync2());\n      cb({}, getState());\n    } else if (result.type === \"confirmation_sent\") {\n      cb({ confirmationSent: true }, getState());\n    } else {\n      cb({ error: result.error, providers: result.providers }, getState());\n    }\n  };\n}\n\nexport function Thunk_forgotPassword(email: string, cb: (result: IEmailAuthResult) => void): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"email-forgot-password\"));\n    const result = await load(dispatch, \"Sending email\", () => env.service.forgotPassword(email));\n    cb(result);\n  };\n}\n\nexport function Thunk_postevent(action: string, extra?: Record<string, string | number>): IThunk {\n  return async (dispatch, getState, env) => {\n    lg(action, extra, env.service, getState().user?.id || getState().storage.tempUserId);\n  };\n}\n\nexport function Thunk_appleSignIn(cb?: (state: IState) => void): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"apple-sign-in\"));\n    let id_token: string | undefined;\n    let code: string | undefined;\n    if (Platform.OS !== \"web\") {\n      const signInResult = await SignIn_apple();\n      if (signInResult == null) {\n        if (cb) {\n          cb(getState());\n        }\n        return;\n      }\n      id_token = signInResult.idToken;\n      code = signInResult.code ?? \"\";\n    } else {\n      if (!window.AppleID?.auth) {\n        Dialog_alert(\"Apple Sign In is not available\");\n        if (cb) {\n          cb(getState());\n        }\n        return;\n      }\n      const response = await window.AppleID.auth.signIn();\n      ({ id_token, code } = response.authorization);\n    }\n    if (id_token != null) {\n      const state = getState();\n      const userId = state.user?.id || state.storage.tempUserId;\n      const result = await load(dispatch, \"Logging in\", async () =>\n        env.service.appleSignIn(code ?? \"\", id_token!, userId)\n      );\n      await load(dispatch, \"Signing in\", () => handleLogin(dispatch, result, env, userId));\n      if (cb) {\n        cb(getState());\n      }\n      dispatch(Thunk_sync2());\n    } else {\n      if (cb) {\n        cb(getState());\n      }\n    }\n  };\n}\n\nexport function Thunk_log(action: string, detail?: string): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    if (!state.nosync) {\n      LogUtils_log(\n        state.user?.id || state.storage.tempUserId,\n        action,\n        state.storage.affiliates,\n        Subscriptions_listOfSubscriptions(state.storage.subscription),\n        state.storage.referrer,\n        state.storage.landingPage,\n        detail\n      );\n    }\n  };\n}\n\nexport function Thunk_verifySubscriptionKey(): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    const key = state.storage.subscription.key;\n    if (state.nosync || key == null) {\n      return;\n    }\n    const userId = state.user?.id || state.storage.tempUserId;\n    const { clear } = await env.service.verifySubscriptionKey(userId, key);\n    if (clear) {\n      updateState(\n        dispatch,\n        [lb<IState>().p(\"storage\").p(\"subscription\").p(\"key\").record(undefined)],\n        \"Clear subscription key\"\n      );\n    }\n  };\n}\n\nexport function Thunk_logOut(cb?: () => void): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"log-out\"));\n    if (getState().user?.id) {\n      const isDebugAccount = AdminDebug_isDebugAccountId(getState().storage.tempUserId);\n      await env.push?.unregisterBeforeSignout();\n      await env.service.signout();\n      dispatch({ type: \"Logout\" });\n      updateState(dispatch, [lb<IState>().p(\"lastSynced\").record(undefined)], \"Clear last sync on logout\");\n      // A debug sandbox borrows the device's native auth, so logging out of it must only drop the\n      // debug session - tearing down the keychain/Google/watch auth here would wipe the admin's own\n      // real persisted login.\n      if (!isDebugAccount) {\n        try {\n          await env.keychain.clearAuthToken();\n        } catch (e) {\n          lg(\"ls-keychain-clear-auth-fail\", { error: e instanceof Error ? e.message : String(e) });\n        }\n        await SignOut_google();\n        env.watch.sendClearAuthToWatch();\n      }\n    }\n    if (cb) {\n      cb();\n    }\n  };\n}\n\nexport function Thunk_postDebug(): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    const userid = state.user?.id || state.storage.tempUserId;\n    await load(dispatch, \"Debug sync\", async () => env.service.postDebug(userid, JSON.stringify(state), {}));\n  };\n}\n\nasync function _sync2(\n  dispatch: IDispatch,\n  getState: () => IState,\n  env: IEnv,\n  args?: { force: boolean },\n  signal?: AbortSignal\n): Promise<void> {\n  const state = getState();\n  type IRequestContext = { kind: \"fetch\" } | { kind: \"upload\"; sent: ISyncBaselineSource };\n  function handleResponse(result: IPostSyncResponse, context: IRequestContext): \"baseline-fetched\" | \"done\" {\n    if (result.type === \"clean\") {\n      dispatch(Thunk_postevent(\"handle-response-clean\"));\n      const baseline = getState().lastSynced;\n      updateState(\n        dispatch,\n        [\n          lb<IState>()\n            .p(\"lastSynced\")\n            .record(baseline && context.kind === \"upload\" ? SyncBaseline_afterClean(baseline, context.sent) : baseline),\n          lb<IState>().p(\"storage\").p(\"originalId\").record(result.new_original_id),\n          lb<IState>().p(\"storage\").p(\"subscription\").p(\"key\").record(result.key),\n        ],\n        \"Update sync metadata\"\n      );\n      if (getState().storage.email !== result.email || getState().user?.id !== result.user_id) {\n        dispatch({ type: \"Login\", email: result.email, userId: result.user_id });\n      }\n      return \"done\";\n    } else if (result.type === \"dirty\") {\n      result.storage.tempUserId = result.user_id;\n      if (context.kind === \"fetch\") {\n        dispatch(Thunk_postevent(\"handle-response-dirty-requested-last-storage\"));\n        updateState(\n          dispatch,\n          [\n            lb<IState>().p(\"lastSynced\").record(SyncBaseline_fromServer(result.storage, Date.now())),\n            lb<IState>().p(\"storage\").p(\"tempUserId\").record(result.user_id),\n          ],\n          \"Update last synced storage\"\n        );\n        return \"baseline-fetched\";\n      } else {\n        dispatch(Thunk_postevent(\"handle-response-dirty\"));\n        const currentStorage = getState().storage;\n        const currentHistoryLen = currentStorage.history?.length ?? 0;\n        const serverHistoryLen = result.storage.history?.length ?? 0;\n        const historyVersions = result.storage._versions?.history as { deleted?: Record<string, number> } | undefined;\n        const serverDeletedHistory = Object.keys(historyVersions?.deleted || {}).length;\n\n        const probeMergeTarget = PerfProbe_isTarget();\n        const probeMergeT0 = probeMergeTarget ? Date.now() : 0;\n        const merged = Storage_mergeStorage(currentStorage, result.storage, getState().deviceId);\n        const newStorage = { ...merged, history: HistoryDelta_sortNewestFirst(merged.history) };\n        if (probeMergeTarget) {\n          lg(\"perf-sync-merge\", {\n            merge_ms: Date.now() - probeMergeT0,\n            history_len: currentStorage.history?.length ?? 0,\n          });\n        }\n        const mergedHistoryLen = newStorage.history?.length ?? 0;\n\n        if (currentHistoryLen > 0 && mergedHistoryLen < currentHistoryLen) {\n          lg(\"ls-history-deletion-server-merge\", {\n            currentHistoryLen,\n            serverHistoryLen,\n            mergedHistoryLen,\n            serverDeletedHistory,\n          });\n        }\n\n        const newProgramIds = newStorage.programs.map((p) => p.id);\n        if (Array.from(new Set(newProgramIds)).length !== newProgramIds.length) {\n          lg(\"program-duplicate-ids-after-merge\", {\n            programIds: JSON.stringify(newProgramIds),\n            oldPrograms: JSON.stringify(currentStorage.programs),\n            newPrograms: JSON.stringify(result.storage.programs),\n            oldVersions: JSON.stringify(currentStorage._versions?.programs),\n            newVersions: JSON.stringify(result.storage._versions?.programs),\n          });\n        }\n        updateState(\n          dispatch,\n          [\n            lb<IState>().p(\"lastSynced\").record(SyncBaseline_fromServer(result.storage, Date.now())),\n            lb<IState>().p(\"storage\").record(newStorage),\n            lb<IState>().p(\"storage\").p(\"subscription\").p(\"key\").record(result.key),\n          ],\n          \"Merge synced storage\"\n        );\n        if (getState().storage.email !== result.email || getState().user?.id !== result.user_id) {\n          dispatch({ type: \"Login\", email: result.email, userId: result.user_id });\n        }\n      }\n      return \"done\";\n    } else if (result.type === \"error\" && result.error === \"not_authorized\") {\n      updateState(\n        dispatch,\n        [\n          lb<IState>().p(\"storage\").p(\"subscription\").p(\"key\").record(result.key),\n          lb<IState>().p(\"lastSynced\").record(undefined),\n        ],\n        \"Update subscription no storage\"\n      );\n      return \"done\";\n    } else if (result.type === \"error\") {\n      if (result.error === \"outdated_client_storage\") {\n        Dialog_alert(\n          \"The version of the storage on a device is older than on the server, so sync failed. \" +\n            \"To fix it - kill/restart the app a couple times.\"\n        );\n      }\n      throw new NoRetryError(result.error);\n    }\n    return \"done\";\n  }\n  async function switchedAccount(result: IPostSyncResponse): Promise<boolean> {\n    const mismatch = SyncAccountMismatch_fromResponse(result);\n    if (mismatch == null) {\n      return false;\n    }\n    await switchToSyncAccount(dispatch, getState, env, state.storage.tempUserId, mismatch);\n    return true;\n  }\n  const fetchReason = SyncBaseline_needsFetch(state.lastSynced, state.storage.tempUserId, Date.now());\n  if (fetchReason != null) {\n    dispatch(\n      Thunk_postevent(\"fetch-last-synced-storage\", {\n        reason: fetchReason,\n        lastUserId: state.lastSynced?.tempUserId ?? \"\",\n        newUserId: state.storage.tempUserId ?? \"\",\n      })\n    );\n    const result = await env.service.postSync({\n      tempUserId: state.storage.tempUserId,\n      storageUpdate: {\n        version: state.storage.version,\n      },\n      signal,\n      deviceId: state.deviceId,\n      history: { mode: \"none\" },\n    });\n    if (signal?.aborted || (await switchedAccount(result))) {\n      return;\n    }\n    if (handleResponse(result, { kind: \"fetch\" }) === \"baseline-fetched\") {\n      await _sync2(dispatch, getState, env, args, signal);\n    }\n  } else {\n    dispatch(Thunk_postevent(\"sync-storage-update\", { force: args?.force ? \"true\" : \"false\" }));\n    const probeSyncTarget = PerfProbe_isTarget();\n    const probeSyncT0 = probeSyncTarget ? Date.now() : 0;\n    const storageUpdate = Sync_getStorageUpdate2(state.storage, state.lastSynced?.versions, state.deviceId);\n    if (probeSyncTarget) {\n      lg(\"perf-sync\", {\n        build_ms: Date.now() - probeSyncT0,\n        has_update: storageUpdate.storage != null ? \"true\" : \"false\",\n      });\n    }\n    if (args?.force || storageUpdate.storage) {\n      const sentStorage = state.storage;\n      const result = await env.service.postSync({\n        tempUserId: state.storage.tempUserId,\n        storageUpdate: storageUpdate,\n        signal,\n        deviceId: state.deviceId,\n        history: { mode: \"delta\", local: { history: state.storage.history, versions: state.storage._versions } },\n      });\n      if (signal?.aborted || (await switchedAccount(result))) {\n        return;\n      }\n      handleResponse(result, { kind: \"upload\", sent: sentStorage });\n    }\n  }\n}\n\nasync function switchToSyncAccount(\n  dispatch: IDispatch,\n  getState: () => IState,\n  env: IEnv,\n  sentTempUserId: string,\n  mismatch: ISyncAccountMismatch\n): Promise<void> {\n  dispatch(Thunk_postevent(\"sync-account-mismatch\", { localUserId: sentTempUserId, serverUserId: mismatch.userId }));\n  await env.persistence.flushSave();\n  const localCopy = await env.persistence.load(`liftosaur_${mismatch.userId}`);\n  const localStorageResult = localCopy?.storage != null ? Storage_get(localCopy.storage) : undefined;\n  const plan = SyncAccountMismatch_plan({\n    sentTempUserId,\n    currentTempUserId: getState().storage.tempUserId,\n    hasLocalCopy: localStorageResult?.success === true && localStorageResult.data.tempUserId === mismatch.userId,\n  });\n  if (plan === \"load-local\" && localCopy != null) {\n    const newState = await getInitialState(env.service.client, { localStorage: localCopy, deviceId: getState().deviceId });\n    newState.user = { id: mismatch.userId, email: mismatch.email };\n    dispatch({ type: \"ReplaceState\", state: newState });\n    dispatch(Thunk_fetchInitial());\n  } else if (plan === \"fetch-server\") {\n    const result = await env.service.getStorage(mismatch.userId);\n    await handleLogin(dispatch, result, env, sentTempUserId);\n  }\n}\n\nfunction getDeletedStats(state: IState): number[] {\n  let deleted: string[] = [];\n  const versionStats = state.storage._versions?.stats as Record<string, Record<string, ICollectionVersions>>;\n  for (const type of Object.keys(versionStats || {})) {\n    for (const statType of Object.keys(versionStats[type] || {})) {\n      const stats = versionStats[type][statType];\n      deleted = deleted.concat(Object.keys(stats.deleted || {}));\n    }\n  }\n  return deleted.map(Number);\n}\n\nasync function _syncHealthKit(dispatch: IDispatch, getState: () => IState, env: IEnv): Promise<void> {\n  const settings = getState().storage.settings;\n  if (!env.health) {\n    return;\n  }\n  const platform: \"ios\" | \"android\" = Platform.OS === \"ios\" ? \"ios\" : \"android\";\n  const syncMeasurements =\n    platform === \"ios\" ? settings.appleHealthSyncMeasurements : settings.googleHealthSyncMeasurements;\n  const syncSleepNutrition =\n    platform === \"ios\" ? settings.appleHealthSyncSleepNutrition : settings.googleHealthSyncSleepNutrition;\n\n  if (syncMeasurements) {\n    dispatch(Thunk_postevent(platform === \"ios\" ? \"read-apple-health\" : \"read-google-health\"));\n    const anchor = platform === \"ios\" ? settings.appleHealthAnchor : settings.googleHealthAnchor;\n    const result = await env.health.syncMeasurements({\n      anchor,\n      weightUnit: settings.units,\n      lengthUnit: settings.lengthUnits,\n    });\n    EditStats_uploadHealthStats(\n      platform,\n      dispatch,\n      { data: result },\n      getState().storage.settings,\n      getDeletedStats(getState())\n    );\n  }\n\n  if (syncSleepNutrition) {\n    dispatch(Thunk_postevent(platform === \"ios\" ? \"read-apple-health-daily\" : \"read-google-health-daily\"));\n    // iOS reads a 90-day rolling window; Android is 30 because Health Connect won't return records older\n    // than 30 days without the READ_HEALTH_DATA_HISTORY permission (which we don't request).\n    const windowDays = platform === \"android\" ? 30 : 90;\n    const daily = await env.health.syncDailyMetrics({ windowDays, metrics: [\"sleep\", \"calories\", \"protein\"] });\n    EditStats_uploadDailyMetrics(platform, dispatch, daily);\n  }\n}\n\nexport function Thunk_saveWorkoutToHealth(\n  args: IHealthWorkoutPayload & { source: \"finish\" | \"merge\"; successAlert?: boolean }\n): IThunk {\n  return async (dispatch, getState, env) => {\n    if (!env.health || AdminDebug_isDebugAccountId(getState().storage.tempUserId)) {\n      return;\n    }\n    const platform = Platform.OS === \"ios\" ? \"apple\" : \"google\";\n    if (args.source === \"merge\" && platform !== \"apple\") {\n      return;\n    }\n    dispatch(Thunk_postevent(`submit-workout-${platform}-health`));\n    dispatch(\n      Thunk_postevent(`storing-workout-to-${platform}-health`, {\n        intervalsCount: args.intervals.length,\n        source: args.source,\n      })\n    );\n    try {\n      await env.health.saveWorkout(args);\n      dispatch(Thunk_postevent(`success-workout-${platform}-health`, { source: args.source }));\n      if (args.successAlert) {\n        Dialog_alert(`Synced to ${platform === \"apple\" ? \"Apple Health\" : \"Google Health\"}`);\n      }\n    } catch (e) {\n      console.warn(\"Failed to save workout to Health\", e);\n      dispatch(\n        Thunk_postevent(`fail-workout-${platform}-health`, {\n          error: (e as Error)?.message ?? \"unknown\",\n          source: args.source,\n        })\n      );\n      if (args.source === \"finish\") {\n        Dialog_alert(`Couldn't save workout to ${platform === \"apple\" ? \"Apple Health\" : \"Google Health\"}`);\n      }\n    }\n  };\n}\n\nexport function Thunk_saveMeasurementsToHealth(args: {\n  bodyweight?: IWeight;\n  bodyfat?: IPercentage;\n  waist?: ILength;\n  timestamp: number;\n}): IThunk {\n  return async (dispatch, getState, env) => {\n    if (!env.health || AdminDebug_isDebugAccountId(getState().storage.tempUserId)) {\n      return;\n    }\n    if (!args.bodyweight && !args.bodyfat && !args.waist) {\n      return;\n    }\n    try {\n      await env.health.saveMeasurements(args);\n    } catch (e) {\n      console.warn(\"Failed to save measurements to Health\", e);\n      const platform = Platform.OS === \"ios\" ? \"apple\" : \"google\";\n      dispatch(\n        Thunk_postevent(`${platform}-health-save-measurements-error`, {\n          error: (e as Error)?.message ?? \"unknown\",\n        })\n      );\n      Dialog_alert(`Couldn't save measurements to ${platform === \"apple\" ? \"Apple Health\" : \"Google Health\"}`);\n    }\n  };\n}\n\nexport function Thunk_requestHealthPermissions(): IThunk {\n  return async (_dispatch, getState, env) => {\n    if (!env.health || AdminDebug_isDebugAccountId(getState().storage.tempUserId)) {\n      return;\n    }\n    try {\n      await env.health.requestPermissions();\n    } catch (e) {\n      console.warn(\"Failed to request health permissions\", e);\n    }\n  };\n}\n\nexport function Thunk_syncHealthKit(cb?: () => void): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    if (AdminDebug_isDebugAccountId(state.storage.tempUserId)) {\n      if (cb != null) {\n        cb();\n      }\n      return;\n    }\n    const s = state.storage.settings;\n    const appleSyncEnabled = s.appleHealthSyncMeasurements || s.appleHealthSyncSleepNutrition;\n    const googleSyncEnabled = s.googleHealthSyncMeasurements || s.googleHealthSyncSleepNutrition;\n    if (\n      !(appleSyncEnabled && HealthSync_eligibleForAppleHealth()) &&\n      !(googleSyncEnabled && HealthSync_eligibleForGoogleHealth())\n    ) {\n      if (cb != null) {\n        cb();\n      }\n      return;\n    }\n    try {\n      await env.queue.enqueue(async () => {\n        try {\n          await _syncHealthKit(dispatch, getState, env);\n        } catch (e) {\n          console.warn(\"Failed to sync from Health\", e);\n          const platform = Platform.OS === \"ios\" ? \"apple\" : \"google\";\n          dispatch(Thunk_postevent(`${platform}-health-sync-error`, { error: (e as Error)?.message ?? \"unknown\" }));\n        }\n      });\n    } finally {\n      if (cb != null) {\n        cb();\n      }\n    }\n  };\n}\n\nexport function Thunk_sync2(args?: { force?: boolean; cb?: () => void; log?: boolean }): IThunk {\n  return async (dispatch, getState, env) => {\n    if (args?.log) {\n      dispatch(\n        Thunk_postevent(\"sync2-enter\", {\n          isProcessing: `${env.queue.getIsProcessing()}`,\n          queueLength: env.queue.length().toString(),\n        })\n      );\n    }\n    try {\n      const state = getState();\n      if (state.errors.corruptedstorage == null && !state.nosync && (state.user != null || args?.force)) {\n        await env.queue.enqueue(\n          async (args2, signal) => {\n            await load(dispatch, \"Sync\", async () => {\n              if (args2?.log) {\n                dispatch(Thunk_postevent(\"sync2-start\"));\n              }\n              await _sync2(dispatch, getState, env, args2, signal);\n            });\n          },\n          { force: !!args?.force, log: !!args?.log }\n        );\n      }\n    } finally {\n      if (args?.cb) {\n        args.cb();\n      }\n    }\n  };\n}\n\nexport function Thunk_updateTimer(\n  newTimer: number,\n  entryIndex: number | undefined,\n  setIndex: number | undefined,\n  skipLiveActivityUpdate: boolean\n): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    const progress = Progress_getProgress(state);\n    if (!progress) {\n      return;\n    }\n    const program = Program_getProgram(state, progress.programId);\n    if (!program) {\n      return;\n    }\n    const effects: INativeEffect[] = [];\n    const newProgress = Progress_updateTimer(\n      effects,\n      progress,\n      program,\n      newTimer,\n      progress.timerSince || Date.now(),\n      entryIndex,\n      setIndex,\n      !!skipLiveActivityUpdate,\n      state.storage.settings,\n      state.storage.subscription\n    );\n    NativeEffects_apply(env, effects);\n    updateProgress(dispatch, lb<IHistoryRecord>().record(newProgress), \"Update rest timer\");\n  };\n}\n\nexport function Thunk_updateLiveActivity(\n  entryIndex: number | undefined,\n  setIndex: number | undefined,\n  restTimer: number | undefined,\n  restTimerSince: number | undefined\n): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    const progress = Progress_getProgress(state);\n    if (!progress) {\n      return;\n    }\n    const program = Program_getProgram(state, progress.programId);\n    if (!program) {\n      return;\n    }\n    const effects: INativeEffect[] = [];\n    LiveActivityManager_updateProgressLiveActivity(\n      effects,\n      program,\n      progress,\n      state.storage.settings,\n      state.storage.subscription,\n      entryIndex,\n      setIndex,\n      restTimer,\n      restTimerSince\n    );\n    NativeEffects_apply(env, effects);\n  };\n}\n\nexport function Thunk_completeSetExternal(\n  entryIndex: number,\n  setIndex: number,\n  restTimer: number,\n  restTimerSince: number\n): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    const progress = Progress_getProgress(state);\n    if (!progress) {\n      return;\n    }\n    const entry = progress.entries[entryIndex];\n    const isWarmup = setIndex < entry.warmupSets.length;\n    let adjustedSetIndex = setIndex;\n    if (!isWarmup) {\n      adjustedSetIndex -= entry.warmupSets.length;\n    }\n    const program = Program_getFullProgram(state, progress.programId);\n    const evaluatedProgram = program ? Program_evaluate(program, state.storage.settings) : undefined;\n    const programExercise = evaluatedProgram\n      ? Program_getProgramExercise(progress.day, evaluatedProgram, entry.programExerciseId)\n      : undefined;\n\n    const set = isWarmup ? entry.warmupSets[adjustedSetIndex] : entry.sets[adjustedSetIndex];\n    if (!set) {\n      dispatch(Thunk_updateLiveActivity(entryIndex, setIndex, restTimer, restTimerSince));\n      return;\n    }\n    if (set.isCompleted) {\n      dispatch(Thunk_updateLiveActivity(entryIndex, setIndex, restTimer, restTimerSince));\n      return;\n    }\n\n    dispatch({\n      type: \"CompleteSetAction\",\n      setIndex: adjustedSetIndex,\n      entryIndex: entryIndex,\n      programExercise: programExercise,\n      otherStates: evaluatedProgram?.states,\n      isPlayground: false,\n      mode: isWarmup ? \"warmup\" : \"workout\",\n      forceUpdateEntryIndex: true,\n      isExternal: true,\n    });\n  };\n}\n\nfunction resolveTimedSetProgramContext(\n  state: IState,\n  progress: IHistoryRecord,\n  entryIndex: number | undefined\n): { programExercise: IPlannerProgramExercise | undefined; otherStates: IByExercise<IProgramState> | undefined } {\n  const entry = entryIndex != null ? progress.entries[entryIndex] : undefined;\n  if (!entry) {\n    return { programExercise: undefined, otherStates: undefined };\n  }\n  const program = Program_getFullProgram(state, progress.programId);\n  const evaluatedProgram = program ? Program_evaluate(program, state.storage.settings) : undefined;\n  const programExercise = evaluatedProgram\n    ? Program_getProgramExercise(progress.day, evaluatedProgram, entry.programExerciseId)\n    : undefined;\n  return { programExercise, otherStates: evaluatedProgram?.states };\n}\n\n// Record the running set timer and complete the set. The model (Progress_completeSetAction) derives the\n// elapsed time from when the clock started, decides whether to advance/close+rest, and may open the\n// AMRAP modal — this thunk just resolves the program context the update script needs.\nexport function Thunk_recordSetTimer(\n  entryIndex: number,\n  setIndex: number,\n  keepTiming: boolean,\n  recordedSeconds?: number,\n  phaseId?: string\n): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    const progress = Progress_getProgress(state);\n    if (!progress) {\n      return;\n    }\n    // A native Live Activity / Live Update \"Stop & Record\"/\"Log & keep\" tap can arrive stale — the timed set\n    // already auto-closed at its target, or the user double-tapped an old notification. The set timer modal is\n    // then gone (or points at a different set), and completing here would fall through to normal set toggling\n    // and flip the already-completed set back off. Ignore it and just resync the surface that sent it.\n    const setTimerModal = progress.setTimer;\n    if (\n      setTimerModal == null ||\n      setTimerModal.entryIndex !== entryIndex ||\n      setTimerModal.setIndex !== setIndex ||\n      (phaseId != null && setTimerModal.id !== phaseId)\n    ) {\n      dispatch(Thunk_refreshLiveActivity());\n      return;\n    }\n    const { programExercise, otherStates } = resolveTimedSetProgramContext(state, progress, entryIndex);\n    dispatch({\n      type: \"CompleteSetAction\",\n      entryIndex,\n      setIndex,\n      mode: \"workout\",\n      programExercise,\n      otherStates,\n      forceUpdateEntryIndex: false,\n      isExternal: false,\n      isPlayground: false,\n      keepSetTimerRunning: keepTiming,\n      // From the live activity this is the elapsed at the moment of the tap (native-computed) — use it\n      // instead of recomputing from startedAt at processing time, which drifts if the app woke late.\n      recordedSeconds,\n    });\n  };\n}\n\n// Polled by the set-timer banner and the rest timer every tick. Cheap no-op unless a time threshold has\n// actually been crossed (auto work timer hit its target, or auto rest expired), in which case the model\n// advances/completes. Gated by the pure predicate so we don't evaluate the program every second.\nexport function Thunk_checkSetTimer(): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    if (Progress_getProgressId(state) !== 0) {\n      return;\n    }\n    const progress = Progress_getCurrentProgress(state);\n    if (!progress || !Progress_isSetTimerCheckDue(progress, Date.now())) {\n      return;\n    }\n    const hadSetTimer = progress.setTimer != null;\n    const hadGetReady = progress.setTimerGetReady != null;\n    const entryIndex =\n      progress.setTimer?.entryIndex ?? progress.setTimerGetReady?.entryIndex ?? progress.timerEntryIndex;\n    const { programExercise, otherStates } = resolveTimedSetProgramContext(state, progress, entryIndex);\n    dispatch({ type: \"CheckSetTimerAction\", programExercise, otherStates });\n    // The set timer just closed — into rest, into an AMRAP prompt, or ended (an EMOM that rolls straight to\n    // the next set keeps setTimer, so it stays silent, matching the watch). Play the set→rest cue.\n    const after = Progress_getProgress(getState());\n    const setTimerClosed = hadSetTimer && (after?.setTimer == null || after?.amrapModal != null);\n    const workStarted = hadGetReady && after?.setTimerGetReady == null && after?.setTimer != null;\n    // Its own sound, not `notification`: in an `auto` circuit the shortened rest expires only seconds\n    // earlier and already chirps `notification`, so the two cues have to be tellable apart.\n    if ((setTimerClosed || workStarted) && getState().adminKey == null) {\n      const settings = getState().storage.settings;\n      env.audio.play(settings.volume, !!settings.vibration, workStarted ? \"get-ready-end\" : \"set-timer-end\");\n    }\n    // The predicate above guarantees the model just advanced (auto work timer hit target, or auto rest\n    // expired → next set timer). Re-push so the live activity/live update follows along — otherwise an\n    // in-app poll advances the UI while the lock-screen stays on the expired rest until the next update.\n    dispatch(Thunk_refreshLiveActivity());\n  };\n}\n\n// Re-pushes the live activity for the current workout state (set timer / rest / next set). Used on app\n// foreground (after Thunk_checkSetTimer reconciles the model) to resync the live activity, which can't\n// advance itself while the app is suspended.\nexport function Thunk_refreshLiveActivity(): IThunk {\n  return async (dispatch, getState, env) => {\n    const state = getState();\n    const progress = Progress_getProgress(state);\n    if (!progress || !Progress_isCurrent(progress)) {\n      return;\n    }\n    const program = Program_getFullProgram(state, progress.programId);\n    const settings = state.storage.settings;\n    const subscription = state.storage.subscription;\n    const setTimerModal = progress.setTimer;\n    const effects: INativeEffect[] = [];\n    if (setTimerModal != null) {\n      // Centralization in LiveActivityManager_updateLiveActivity reads setTimerModal, so the entry/set\n      // passed here are overridden — it renders the set-timer view.\n      LiveActivityManager_updateProgressLiveActivity(\n        effects,\n        program,\n        progress,\n        settings,\n        subscription,\n        setTimerModal.entryIndex,\n        setTimerModal.setIndex,\n        undefined,\n        undefined\n      );\n      NativeEffects_apply(env, effects);\n      return;\n    }\n    if (progress.timer != null && progress.timerSince != null) {\n      // The rest timer belongs to the just-completed set (progress.timerSetIndex), but the live activity\n      // must show the NEXT set so its complete button targets a set that can actually be completed — pushing\n      // the completed set's index makes the button a no-op. Mirrors screenWorkout/restTimer; the rest timer\n      // itself is read from progress.timer/timerSince inside updateLiveActivity, so it still shows.\n      const next =\n        progress.timerEntryIndex != null\n          ? Reps_findNextEntryAndSetIndex(progress, progress.timerEntryIndex, progress.timerMode ?? \"workout\")\n          : undefined;\n      LiveActivityManager_updateProgressLiveActivity(\n        effects,\n        program,\n        progress,\n        settings,\n        subscription,\n        next?.entryIndex ?? progress.timerEntryIndex,\n        next?.setIndex ?? progress.timerSetIndex,\n        progress.timer,\n        progress.timerSince\n      );\n      NativeEffects_apply(env, effects);\n      return;\n    }\n    const next = Progress_getFirstIncompleteWorkoutSet(progress);\n    if (next != null) {\n      const entry = progress.entries[next.entryIndex];\n      const absoluteSetIndex = entry.warmupSets.length + next.setIndex;\n      LiveActivityManager_updateProgressLiveActivity(\n        effects,\n        program,\n        progress,\n        settings,\n        subscription,\n        next.entryIndex,\n        absoluteSetIndex,\n        undefined,\n        undefined\n      );\n      NativeEffects_apply(env, effects);\n    }\n  };\n}\n\n// Volume 0 with vibration on is the vibrate-without-sound path — audioInterface only bails when volume <= 0\n// AND vibration is off. Silent on purpose: both existing sounds already fire inside an `auto` rest.\nexport function Thunk_playGetReadyCue(): IThunk {\n  return async (dispatch, getState, env) => {\n    if (getState().adminKey == null) {\n      const settings = getState().storage.settings;\n      if (settings.vibration) {\n        env.audio.play(0, true);\n      }\n    }\n  };\n}\n\nexport interface IQueueableCountdownTap {\n  entryIndex: number;\n  setIndex: number;\n  tappedAt?: number;\n  countdownStartedAt?: number;\n  phaseId?: string;\n}\n\n// Only the Live Activity and the Android live update pass a tap. Their events can sit in a queue while\n// the app is suspended, and Progress_checkSetTimer fast-forwards every overdue transition on wake — so\n// the countdown the user tapped may be gone and a later one live by the time this runs. The phone\n// banner and the watch dispatch in-process and cannot outlive the countdown they name.\nexport function Thunk_startSetTimerWork(queuedTap?: IQueueableCountdownTap): IThunk {\n  return async (dispatch, getState, env) => {\n    const progress = Progress_getProgress(getState());\n    if (progress == null) {\n      return;\n    }\n    if (queuedTap != null) {\n      const getReady = progress.setTimerGetReady;\n      // Matching on start time as well as indices, because reopening the same set makes a new countdown.\n      const tapMatchesLiveCountdown =\n        getReady != null &&\n        getReady.entryIndex === queuedTap.entryIndex &&\n        getReady.setIndex === queuedTap.setIndex &&\n        (queuedTap.phaseId == null || getReady.id === queuedTap.phaseId) &&\n        (queuedTap.countdownStartedAt == null || getReady.startedAt === queuedTap.countdownStartedAt);\n      if (!tapMatchesLiveCountdown) {\n        dispatch(Thunk_refreshLiveActivity());\n        return;\n      }\n    }\n    dispatch({ type: \"StartSetTimerWorkAction\", startedAt: queuedTap?.tappedAt });\n    if (getState().adminKey == null) {\n      const settings = getState().storage.settings;\n      env.audio.play(settings.volume, !!settings.vibration, \"get-ready-end\");\n    }\n    dispatch(Thunk_refreshLiveActivity());\n  };\n}\n\nexport function Thunk_playAudioNotification(): IThunk {\n  return async (dispatch, getState, env) => {\n    if (getState().adminKey == null) {\n      const settings = getState().storage.settings;\n      env.audio.play(settings.volume, !!settings.vibration);\n    }\n  };\n}\n\nexport function Thunk_handleWatchStorageMerge(storageJson: string, isLiveActivity?: boolean): IThunk {\n  return async (dispatch, getState, env) => {\n    try {\n      const watchStorage: IStorage = runMigrations(JSON.parse(storageJson));\n      const state = getState();\n      if (WatchStorageAccount_isOtherAccount(state.storage, watchStorage)) {\n        lg(\"ls-watch-merge-other-account\", {\n          phoneUserId: state.storage.tempUserId,\n          watchUserId: watchStorage.tempUserId,\n        });\n        return;\n      }\n\n      const phoneHistoryLen = state.storage.history?.length ?? 0;\n      const watchHistoryLen = watchStorage.history?.length ?? 0;\n\n      const wasOnProgressScreen = env.getCurrentScreenData?.()?.name === \"progress\";\n      const hadProgress = state.storage.progress && state.storage.progress.length > 0;\n\n      // Merge watch storage with phone storage. amrapModal now lives on progress (not progress.ui), so it\n      // version-merges across devices like setTimer — no manual propagation past the `ui` exclusion needed.\n      let mergedStorage = Storage_mergeStorage(state.storage, watchStorage, state.deviceId);\n\n      // currentEntryIndex syncs, but the workout pager only scrolls when forceUpdateEntryIndex (a device-local\n      // ui flag) flips — without this a watch-driven exercise switch highlights the thumbnail but never scrolls\n      // the pager to it. Flip the flag when the merge actually moved the shown exercise.\n      const prevEntryIndex = state.storage.progress?.[0]?.currentEntryIndex ?? 0;\n      const mergedEntryIndex = mergedStorage.progress?.[0]?.currentEntryIndex ?? 0;\n      if (mergedEntryIndex !== prevEntryIndex && mergedStorage.progress?.[0]) {\n        mergedStorage = {\n          ...mergedStorage,\n          progress: [\n            {\n              ...mergedStorage.progress[0],\n              ui: {\n                ...mergedStorage.progress[0].ui,\n                forceUpdateEntryIndex: !mergedStorage.progress[0].ui?.forceUpdateEntryIndex,\n              },\n            },\n          ],\n        };\n      }\n\n      if (Storage_isChanged(state.storage, mergedStorage)) {\n        const mergedHistoryLen = mergedStorage.history?.length ?? 0;\n\n        if (phoneHistoryLen > 0 && mergedHistoryLen < phoneHistoryLen) {\n          lg(\"ls-history-deletion-watch-merge\", {\n            phoneHistoryLen,\n            watchHistoryLen,\n            mergedHistoryLen,\n          });\n        }\n\n        updateState(dispatch, [lb<IState>().p(\"storage\").record(mergedStorage)], \"Merge watch storage\");\n\n        const beforeProgress = state.storage.progress?.[0];\n        const afterProgress = mergedStorage.progress?.[0];\n        const timerChanged =\n          beforeProgress?.timer !== afterProgress?.timer || beforeProgress?.timerSince !== afterProgress?.timerSince;\n        if (timerChanged) {\n          if (\n            afterProgress?.timer != null &&\n            afterProgress.timerSince != null &&\n            afterProgress.timerEntryIndex != null &&\n            afterProgress.timerMode != null &&\n            Subscriptions_hasSubscription(mergedStorage.subscription)\n          ) {\n            const remaining = afterProgress.timer - (Date.now() - afterProgress.timerSince) / 1000;\n            const timerEffects: INativeEffect[] = [];\n            if (remaining > 0) {\n              Progress_scheduleTimerNotification(\n                timerEffects,\n                afterProgress,\n                afterProgress.timerEntryIndex,\n                afterProgress.timerMode,\n                mergedStorage.settings,\n                remaining,\n                afterProgress.timerSince,\n                afterProgress.timer\n              );\n            } else {\n              timerEffects.push({ type: \"stopTimer\" });\n            }\n            NativeEffects_apply(env, timerEffects);\n          } else {\n            env.timer.stopTimer();\n          }\n        }\n\n        if (afterProgress != null && beforeProgress !== afterProgress) {\n          const entryIndex = afterProgress.timerEntryIndex ?? 0;\n          const mode = afterProgress.timerMode ?? \"workout\";\n          const program = Program_getProgram(getState(), afterProgress.programId);\n          const evaluatedProgram = program ? Program_evaluate(program, mergedStorage.settings) : undefined;\n          const entry = afterProgress.entries[entryIndex];\n          const programExercise =\n            evaluatedProgram && entry\n              ? Program_getProgramExercise(afterProgress.day, evaluatedProgram, entry.programExerciseId)\n              : undefined;\n          const liveActivityEffects: INativeEffect[] = [];\n          LiveActivityManager_updateLiveActivityForNextEntry(\n            liveActivityEffects,\n            afterProgress,\n            entryIndex,\n            mode,\n            programExercise,\n            mergedStorage.settings,\n            mergedStorage.subscription\n          );\n          NativeEffects_apply(env, liveActivityEffects);\n        }\n\n        const progressIsNowEmpty = !mergedStorage.progress || mergedStorage.progress.length === 0;\n        if (hadProgress && progressIsNowEmpty) {\n          env.workout.discardWorkout();\n        }\n        if (wasOnProgressScreen && hadProgress && progressIsNowEmpty) {\n          dispatch(Thunk_pushScreen(\"main\", undefined, { tab: \"home\" }));\n        }\n      }\n\n      // Sent whether or not the merge changed anything: a record the phone already holds still has to\n      // be confirmed, or the watch would keep it forever waiting for an acknowledgement.\n      const mergedIds = new Set((mergedStorage.history ?? []).map((r) => `${r.id}`));\n      const ackedIds = (watchStorage.history ?? []).map((r) => `${r.id}`).filter((id) => mergedIds.has(id));\n      if (ackedIds.length > 0) {\n        env.watch.sendStorageAckToWatch(ackedIds);\n      }\n    } catch (error) {\n      console.error(\"handleWatchStorageMerge: failed to merge storage\", error);\n    }\n  };\n}\n\nexport function Thunk_fetchStorage(storageId?: string): IThunk {\n  return async (dispatch, getState, env) => {\n    if (getState().errors.corruptedstorage == null) {\n      const result = await load(dispatch, \"Loading from cloud\", () => {\n        const state = getState();\n        const url = typeof window !== \"undefined\" ? UrlUtils_build(window.location.href) : undefined;\n        const userId = url != null ? url.searchParams.get(\"userid\") : state.user?.id;\n        return env.service.getStorage(state.storage.tempUserId, userId || undefined, storageId, state.adminKey);\n      });\n      await handleLogin(dispatch, result, env, getState().user?.id || getState().storage.tempUserId);\n    }\n  };\n}\n\nexport function Thunk_pushToEditProgram(): IThunk {\n  return async (dispatch, getState) => {\n    const state = getState();\n    const currentProgram =\n      state.storage.currentProgramId != null ? Program_getProgram(state, state.storage.currentProgramId) : undefined;\n    if (Program_isEmpty(currentProgram)) {\n      dispatch(Thunk_pushScreen(\"programs\", undefined, { tab: \"program\" }));\n    } else if (currentProgram) {\n      Program_editAction(dispatch, currentProgram, { tab: \"program\" });\n    }\n  };\n}\n\nexport function Thunk_startProgramDay(programId?: string): IThunk {\n  return async (dispatch, getState) => {\n    const state = getState();\n    const progress = Progress_getCurrentProgress(state);\n    if (progress != null) {\n      dispatch(Thunk_pushScreen(\"progress\", { id: progress.id }, { tab: \"workout\" }));\n    } else if (state.storage.currentProgramId != null) {\n      const program = Program_getProgram(state, programId ?? state.storage.currentProgramId);\n      if (program != null) {\n        const newProgress = Program_nextHistoryRecord(program, state.storage.settings, state.storage.stats);\n        updateState(dispatch, [lb<IState>().p(\"storage\").p(\"progress\").record([newProgress])], \"Create new progress\");\n        dispatch(Thunk_log(\"ls-start-workout\"));\n        dispatch(Thunk_pushScreen(\"progress\", { id: newProgress.id }, { tab: \"workout\" }));\n      } else {\n        Dialog_alert(\"No currently selected program\");\n      }\n    }\n  };\n}\n\n// Which program to edit, and — the part that used to be implicit and got it wrong — whether the\n// *saved* copy or the unsaved draft is the one being edited. A workout reads the saved program,\n// because that is what it is performing. Anything inside the program editor has to read the draft,\n// or an exercise that has only been added and not saved yet doesn't exist at all: the sheet finds no\n// declaration for the key and falls back to its sample text, which reads as some other program\n// entirely. Passing an id used to mean \"from a workout\", so the editor supplying its own id was\n// enough to send it down the wrong branch.\nexport function Thunk_pushToEditProgramExercise(\n  key: string,\n  dayData: Required<IDayData>,\n  opts?: { workoutProgramId?: string; editProgramId?: string }\n): IThunk {\n  return async (dispatch, getState) => {\n    const state = getState();\n    const workoutProgramId = opts?.workoutProgramId;\n    const isFromWorkout = workoutProgramId != null;\n    const editProgramIds = Object.keys(state.editProgramStates);\n    const programId = isFromWorkout\n      ? workoutProgramId\n      : (opts?.editProgramId ?? editProgramIds[0] ?? state.storage.currentProgramId);\n    const editProgramState = programId ? state.editProgramStates[programId] : undefined;\n    const currentProgram = isFromWorkout\n      ? programId != null\n        ? Program_getProgram(state, programId)\n        : undefined\n      : editProgramState?.current.program || (programId != null ? Program_getProgram(state, programId) : undefined);\n    if (currentProgram && !Program_isEmpty(currentProgram) && programId) {\n      dispatch(Thunk_log(\"ls-program-edit-exercise-screen\"));\n      const { navigateToModal } = await getNavigationService();\n      // Prototype: exercise edits open the Liftoscript editor sheet instead of the\n      // full edit screen.\n      navigateToModal(\"exerciseLiftoEditorModal\", { programId, key, dayData, fromWorkout: isFromWorkout });\n    } else {\n      dispatch(Thunk_pushScreen(\"main\"));\n    }\n  };\n}\n\nexport function Thunk_openEquipmentModal(progressId: number, exerciseType: IExerciseType): IThunk {\n  return async (dispatch) => {\n    updateState(\n      dispatch,\n      [Progress_lbProgress(progressId).pi(\"ui\", {}).p(\"equipmentModal\").record({ exerciseType })],\n      \"change-equipment\"\n    );\n    const { navigateToModal } = await getNavigationService();\n    navigateToModal(\"equipmentModal\", { context: \"workout\", progressId });\n  };\n}\n\n// The workout screen's day-level edit, and the Program screen's eventually. Takes the absolute\n// day number the workout already carries rather than a dayData, so nothing here has to know how\n// weeks are laid out.\nexport function Thunk_pushToEditProgramDay(day: number, workoutProgramId?: string): IThunk {\n  return async (dispatch, getState) => {\n    const state = getState();\n    const isFromWorkout = workoutProgramId != null;\n    const editProgramIds = Object.keys(state.editProgramStates);\n    const programId = isFromWorkout ? workoutProgramId : (editProgramIds[0] ?? state.storage.currentProgramId);\n    const currentProgram = programId != null ? Program_getProgram(state, programId) : undefined;\n    if (currentProgram && !Program_isEmpty(currentProgram) && programId) {\n      dispatch(Thunk_log(\"ls-program-edit-day-sheet\"));\n      const { navigateToModal } = await getNavigationService();\n      navigateToModal(\"dayLiftoEditorModal\", { programId, day, fromWorkout: isFromWorkout });\n    } else {\n      dispatch(Thunk_pushScreen(\"main\"));\n    }\n  };\n}\n\nexport function Thunk_pushScreen<T extends IScreen>(\n  screen: T,\n  params?: IScreenParams<T>,\n  opts?: INavigateOpts\n): IThunk {\n  return async (dispatch, getState) => {\n    dispatch(Thunk_postevent(\"navigate-to-\" + screen));\n    if (\n      [\"musclesProgram\", \"musclesDay\", \"graphsList\"].indexOf(screen) !== -1 &&\n      !Subscriptions_hasSubscription(getState().storage.subscription)\n    ) {\n      opts = { stack: \"subscription\" };\n      screen = \"subscription\" as T;\n    }\n    if (screen === \"subscription\") {\n      opts = { ...opts, stack: \"subscription\" };\n    }\n    const screensWithoutCurrentProgram = [\n      \"first\",\n      \"onboarding\",\n      \"units\",\n      \"programs\",\n      \"programPreview\",\n      \"setupequipment\",\n      \"setupplates\",\n      \"equipmentDetail\",\n      \"hearaboutus\",\n      \"programselect\",\n    ];\n    if (getState().storage.currentProgramId == null && screensWithoutCurrentProgram.indexOf(screen) === -1) {\n      screen = \"programs\" as T;\n    }\n    const { navigateTo } = await getNavigationService();\n    navigateTo(screen, params as IAllScreenParamList[typeof screen], opts);\n    if (typeof window !== \"undefined\" && window.scroll) {\n      window.scroll(0, 0);\n    }\n  };\n}\n\nexport function Thunk_updateScreenParams<T extends IScreen>(params?: IScreenParams<T>): IThunk {\n  return async (_dispatch, _getState, env) => {\n    if (env.navigationRef?.isReady()) {\n      env.navigationRef.setParams(params as Record<string, unknown>);\n    }\n  };\n}\n\nexport function Thunk_maybeRequestReview(): IThunk {\n  return async (dispatch, getState) => {\n    try {\n      const history = getState().storage.history;\n      const state = getState();\n      const now = Date.now();\n      const reviewRequests = state.storage.reviewRequests;\n      const lastReviewRequest = reviewRequests[reviewRequests.length - 1];\n      if (\n        history.length >= 5 &&\n        reviewRequests.length < 3 &&\n        (!lastReviewRequest || now - lastReviewRequest > 1000 * 60 * 60 * 24 * 32)\n      ) {\n        dispatch(Thunk_postevent(\"request-review\"));\n        updateState(\n          dispatch,\n          [\n            lb<IState>()\n              .p(\"storage\")\n              .p(\"reviewRequests\")\n              .recordModify((r) => [...r, now]),\n          ],\n          \"Add review request\"\n        );\n        InAppReview_request();\n      }\n    } catch (error) {\n      const e = error as Error;\n      Rollbar.error(e);\n    }\n  };\n}\n\nexport function Thunk_maybeRequestSignup(): IThunk {\n  return async (dispatch, getState) => {\n    try {\n      const history = getState().storage.history;\n      const state = getState();\n      const now = Date.now();\n      const signupRequests = state.storage.signupRequests;\n      const lastsignupRequest = signupRequests[signupRequests.length - 1];\n      if (\n        state.user?.id == null &&\n        history.length >= 3 &&\n        signupRequests.length < 3 &&\n        (!lastsignupRequest || now - lastsignupRequest > 1000 * 60 * 60 * 24 * 14)\n      ) {\n        dispatch(Thunk_postevent(\"request-signup\"));\n        updateState(dispatch, [lb<IState>().p(\"showSignupRequest\").record(true)], \"Show signup request\");\n      }\n    } catch (error) {\n      const e = error as Error;\n      Rollbar.error(e);\n    }\n  };\n}\n\nexport function Thunk_maybeShowOnloadModal(): IThunk {\n  return async (dispatch, getState) => {\n    try {\n      const next = OnloadModal_getNext(getState());\n      if (next === \"whatsnew\") {\n        updateState(dispatch, [lb<IState>().p(\"showWhatsNew\").record(true)], \"Show what's new on load\");\n      } else if (next === \"hearaboutus\") {\n        dispatch(Thunk_maybeRequestHearAboutUs());\n      }\n    } catch (error) {\n      Rollbar.error(error as Error);\n    }\n  };\n}\n\nexport function Thunk_maybeRequestHearAboutUs(): IThunk {\n  return async (dispatch, getState) => {\n    try {\n      if (OnloadModal_shouldShowHearAboutUs(getState())) {\n        dispatch(Thunk_postevent(\"request-hear-about-us\"));\n        updateState(dispatch, [lb<IState>().p(\"showHearAboutUs\").record(true)], \"Show hear-about-us\");\n      }\n    } catch (error) {\n      Rollbar.error(error as Error);\n    }\n  };\n}\n\nexport const screensWithEditState: IScreen[] = [\"progress\", \"editProgram\"];\n\nfunction cleanupScreenEditState(dispatch: IDispatch, state: IState, screen: IScreenData): void {\n  if (screen.name === \"progress\") {\n    const progressId = screen.params?.id ?? 0;\n    const progress = Progress_getProgressById(state, progressId);\n    if (progress && !Progress_isCurrent(progress)) {\n      updateState(\n        dispatch,\n        [\n          lb<IState>()\n            .pi(\"progress\")\n            .recordModify((progresses) => Progress_stop(progresses, progress.id)),\n        ],\n        \"Stop workout progress\"\n      );\n    }\n  } else if (screen.name === \"editProgram\") {\n    const programId = screen.params?.programId;\n    if (programId != null && state.editProgramStates[programId] != null) {\n      updateState(\n        dispatch,\n        [\n          lb<IState>()\n            .p(\"editProgramStates\")\n            .recordModify((states) => ObjectUtils_omit(states, [programId])),\n        ],\n        \"Stop edit program\"\n      );\n    }\n  }\n}\n\nexport function Thunk_cleanupRemovedScreens(screens: IScreenData[]): IThunk {\n  return async (dispatch, getState) => {\n    for (const screen of screens) {\n      cleanupScreenEditState(dispatch, getState(), screen);\n    }\n  };\n}\n\nexport function Thunk_pullScreen(): IThunk {\n  return async () => {\n    const { goBack } = await getNavigationService();\n    goBack();\n    if (typeof window !== \"undefined\" && window.scroll) {\n      window.scroll(0, 0);\n    }\n  };\n}\n\nexport function Thunk_confirmScreenLeave(screen: IScreenData, action: NavigationAction): IThunk {\n  return async (dispatch, getState, env) => {\n    // Save flows (e.g. Thunk_finishProgramDay) dispatch their commit synchronously\n    // right after the navigation call that got prevented. Deferring a tick lets that\n    // commit land, so the re-check below sees clean state and proceeds silently.\n    await new Promise((resolve) => setTimeout(resolve, 0));\n    const confirmation = Screen_shouldConfirmNavigation(getState(), screen);\n    if (confirmation == null || (await Dialog_confirm(confirmation))) {\n      env.navigationRef?.dispatch(action);\n    }\n  };\n}\n\nexport function Thunk_editHistoryRecord(historyRecord: IHistoryRecord): IThunk {\n  return async (dispatch) => {\n    dispatch({ type: \"EditHistoryRecord\", historyRecord });\n    const { navigateTo } = await getNavigationService();\n    navigateTo(\"progress\", { id: historyRecord.id });\n  };\n}\n\nexport function Thunk_finishProgramDay(args: {\n  id: number;\n  startTime: number;\n  healthSync: boolean;\n  onStale: () => void;\n}): IThunk {\n  return async (dispatch, getState, env) => {\n    const { id, startTime, healthSync } = args;\n    const progress = Progress_getProgressById(getState(), id);\n    if (progress == null || progress.startTime !== startTime) {\n      args.onStale();\n      return;\n    }\n    const isCurrent = Progress_isCurrent(progress);\n    env.workout.pauseWorkout();\n    if (isCurrent) {\n      dispatch(Thunk_postevent(\"finish-workout\", { workout: JSON.stringify(progress) }));\n      env.workout.finishWorkout();\n    }\n    const { navigateTo, goBack } = await getNavigationService();\n    // Navigate before dispatch so the progress screen unmounts before\n    // FallbackScreen can detect null progress and redirect to home.\n    // The dispatch must stay synchronous after goBack: for a dirty past workout\n    // useConfirmScreenLeave intercepts the goBack, and Thunk_confirmScreenLeave's\n    // one-tick defer needs the save committed by then to proceed without a dialog.\n    // ScreenRemovalCleanup's \"state\" event also fires post-commit, so the save\n    // lands before the removed screen's edit state gets cleaned up.\n    if (isCurrent) {\n      navigateTo(\"finishDay\", { id: progress.startTime }, { tab: \"workout\" });\n    } else {\n      goBack();\n    }\n    dispatch({ type: \"FinishProgramDayAction\", id, startTime, healthSync });\n  };\n}\n\nexport function Thunk_pauseWorkout(): IThunk {\n  return async (dispatch, getState, env) => {\n    env.workout.pauseWorkout();\n    History_pauseWorkoutState(dispatch);\n  };\n}\n\nexport function Thunk_deleteProgress(id: number): IThunk {\n  return async (dispatch) => {\n    dispatch({ type: \"DeleteProgress\", id });\n    const { navigateTo } = await getNavigationService();\n    navigateTo(\"main\", undefined, { tab: \"home\" });\n  };\n}\n\nexport function Thunk_fetchPrograms(): IThunk {\n  return async (dispatch, getState, env) => {\n    const result = await load(dispatch, \"Loading programs\", async () => {\n      const index = await env.service.programsIndex();\n      const details = await Promise.all(index.map((entry) => env.service.programDetail(entry.id)));\n      const programs = index.map((entry, i) => {\n        const detail = details[i];\n        const program: IProgram = {\n          ...Program_create(entry.name, entry.id),\n          author: entry.author,\n          url: entry.url,\n          shortDescription: entry.shortDescription,\n          description: entry.description || \"\",\n          isMultiweek: entry.isMultiweek,\n          tags: entry.tags as IProgram[\"tags\"],\n          planner: detail.planner,\n        };\n        return program;\n      });\n      return { programs, index };\n    });\n    if (result) {\n      dispatch({\n        type: \"UpdateState\",\n        lensRecording: [\n          lb<IState>().p(\"programs\").record(result.programs),\n          lb<IState>().p(\"programsIndex\").record(result.index),\n        ],\n        desc: \"Set loaded Programs\",\n      });\n    }\n  };\n}\n\nexport function Thunk_fetchRevisions(programId: string, cb: () => void): IThunk {\n  return async (dispatch, getState, env) => {\n    const programRevisions = await load(dispatch, \"Loading revisions\", () =>\n      env.service.getProgramRevisions(programId, Service_adminTarget(getState().adminKey, getState().user?.id))\n    );\n    if (programRevisions.success) {\n      updateState(\n        dispatch,\n        [\n          lb<IState>()\n            .p(\"revisions\")\n            .recordModify((revisions) => {\n              return { ...revisions, [programId]: programRevisions.data };\n            }),\n        ],\n        \"Set loaded Revisions\"\n      );\n    } else {\n      const error = programRevisions.error;\n      const state = getState();\n      const context = {\n        programId,\n        status: error.status ?? 0,\n        message: error.message,\n        body: error.body ?? \"\",\n        isLoggedIn: state.user?.id ? \"yes\" : \"no\",\n      };\n      lg(\"ls-program-revisions-fetch-error\", context, env.service, state.user?.id || state.storage.tempUserId);\n      Rollbar.error(\"Couldn't fetch program revisions\", { ...context, userId: state.user?.id });\n      Dialog_alert(\n        `Couldn't fetch program revisions${error.status != null ? ` (${error.status})` : `: ${error.message}`}`\n      );\n    }\n    cb();\n  };\n}\n\nexport function Thunk_exportStorage(): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"export-storage-to-json\"));\n    ImportExporter_exportStorage(getState().storage);\n  };\n}\n\nexport function Thunk_exportProgramToFile(program: IProgram): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"export-program-to-file\"));\n    const state = getState();\n    Program_exportProgramToFile(program, state.storage.settings, state.storage.version);\n  };\n}\n\nexport function Thunk_exportProgramToLink(program: IProgram): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"export-program-to-link\"));\n    const state = getState();\n    const link = await Program_exportProgramToLink(program, state.storage.settings, state.storage.version);\n    await ClipboardUtils_copy(link);\n    Dialog_alert(\"Link copied to clipboard:\\n\\n\" + link);\n  };\n}\n\nexport function Thunk_exportHistoryToCSV(): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"export-history-to-csv\"));\n    const state = getState();\n    const csv = CSV_toString(History_exportAsCSV(state.storage.history, state.storage.settings));\n    Exporter_toFile(`liftosaur_${DateUtils_formatYYYYMMDD(Date.now())}.csv`, csv);\n  };\n}\n\nexport function Thunk_exportProgramsToText(): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"export-programs-to-text\"));\n    let text = \"\";\n    for (const program of getState().storage.programs) {\n      if (!program.planner) {\n        continue;\n      }\n      text += `======= ${program.name} =======\\n\\n`;\n      text += PlannerProgram_generateFullText(program.planner.weeks);\n      text += `\\n\\n\\n`;\n    }\n    Exporter_toFile(`liftosaur_all_programs_${DateUtils_formatYYYYMMDD(Date.now())}.txt`, text);\n  };\n}\n\nexport function Thunk_importStorage(maybeStorage: string): IThunk {\n  return async (dispatch) => {\n    dispatch(Thunk_postevent(\"import-json-storage\"));\n    let parsedMaybeStorage: Record<string, unknown>;\n    try {\n      parsedMaybeStorage = JSON.parse(maybeStorage);\n    } catch (e) {\n      Dialog_alert(\"Couldn't parse the provided file\");\n      return;\n    }\n    const result = Storage_get(parsedMaybeStorage, false);\n    if (result.success) {\n      updateState(dispatch, [lb<IState>().p(\"storage\").record(result.data)], \"Importing Storage\");\n      Dialog_alert(\"Successfully imported\");\n    } else {\n      Dialog_alert(`Couldn't import the storage, errors: \\n${result.error.join(\"\\n\")}`);\n    }\n  };\n}\n\n// Parsing a large CSV blocks the JS thread, so show the navbar spinner while it runs. The yield lets\n// the spinner paint before the synchronous parse starts (otherwise it wouldn't render until parsing\n// finishes). This does NOT use `load()` - that retries up to 3x, which would re-parse a bad file.\nasync function importWithSpinner<T>(dispatch: IDispatch, cb: () => T): Promise<T> {\n  const name = UidFactory_generateUid(4);\n  updateState(\n    dispatch,\n    [lb<IState>().p(\"loading\").p(\"items\").p(name).record({ startTime: Date.now(), type: \"Importing\" })],\n    \"Start import parse\"\n  );\n  try {\n    await new Promise((resolve) => setTimeout(resolve, 16));\n    return cb();\n  } finally {\n    updateState(\n      dispatch,\n      [lb<IState>().p(\"loading\").p(\"items\").pi(name).p(\"endTime\").record(Date.now())],\n      \"End import parse\"\n    );\n  }\n}\n\nexport function Thunk_importCsvData(rawCsv: string): IThunk {\n  return async (dispatch, getState, env) => {\n    try {\n      dispatch(Thunk_postevent(\"import-csv-data\"));\n      const result = await importWithSpinner(dispatch, () =>\n        ImportFromLiftosaur_convertLiftosaurCsvToHistoryRecords(rawCsv, getState().storage.settings)\n      );\n      if (result.historyRecords.length === 0) {\n        Dialog_alert(\"No workouts found in the file.\");\n        return;\n      }\n      updateState(\n        dispatch,\n        [lb<IState>().p(\"importPreview\").record({ source: \"liftosaurCsv\", result })],\n        \"Open import preview\"\n      );\n      dispatch(Thunk_pushScreen(\"importPreview\"));\n    } catch (e) {\n      if (e instanceof ImportFileError) {\n        Dialog_alert(e.message);\n      } else {\n        console.error(e);\n        Dialog_alert(\"Couldn't parse the provided file\");\n      }\n    }\n  };\n}\n\nexport function Thunk_importHevyData(rawCsv: string): IThunk {\n  return async (dispatch, getState) => {\n    try {\n      dispatch(Thunk_postevent(\"import-hevy-data\"));\n      const result = await importWithSpinner(dispatch, () =>\n        ImportFromHevy_convertHevyCsvToHistoryRecords(rawCsv, getState().storage.settings)\n      );\n      if (result.historyRecords.length === 0) {\n        Dialog_alert(\"No workouts found in the file.\");\n        return;\n      }\n      updateState(\n        dispatch,\n        [lb<IState>().p(\"importPreview\").record({ source: \"hevy\", result })],\n        \"Open import preview\"\n      );\n      dispatch(Thunk_pushScreen(\"importPreview\"));\n    } catch (e) {\n      if (e instanceof ImportFileError) {\n        Dialog_alert(e.message);\n      } else {\n        console.error(e);\n        Rollbar.error(e as Error);\n        Dialog_alert(\"Failed to import history from Hevy.\");\n      }\n    }\n  };\n}\n\nexport function Thunk_undoImport(sessionId: string): IThunk {\n  return async (dispatch, getState) => {\n    const storage = getState().storage;\n    const session = (storage.importSessions ?? []).find((s) => s.id === sessionId);\n    if (session == null) {\n      return;\n    }\n    const editedCount = ImportSession_findEditedRecordIds(storage, session).length;\n    const editedWarning = editedCount > 0 ? ` ${editedCount} of them were edited after the import.` : \"\";\n    const sourceName = session.source === \"hevy\" ? \"Hevy\" : \"CSV\";\n    if (\n      !(await Dialog_confirm(\n        `Remove ${session.workoutCount} ${StringUtils_pluralize(\"workout\", session.workoutCount)} imported from ${sourceName} on ${DateUtils_format(session.timestamp)}?${editedWarning}`\n      ))\n    ) {\n      return;\n    }\n    const undone = ImportSession_undo(getState().storage, sessionId);\n    if (undone != null) {\n      updateState(dispatch, [lb<IState>().p(\"storage\").record(undone)], \"Undo import\");\n    }\n  };\n}\n\nexport function Thunk_applyImport(\n  historyRecords: IHistoryRecord[],\n  customExercises: Record<string, ICustomExercise>,\n  source: IImportSession[\"source\"]\n): IThunk {\n  return async (dispatch, getState) => {\n    const applied = ImportSession_apply(getState().storage, historyRecords, customExercises, source);\n    updateState(\n      dispatch,\n      [\n        lb<IState>().p(\"storage\").p(\"history\").record(applied.history),\n        lb<IState>().p(\"storage\").p(\"settings\").p(\"exercises\").record(applied.exercises),\n        lb<IState>().p(\"storage\").p(\"importSessions\").record(applied.importSessions),\n      ],\n      `Import history from ${source === \"hevy\" ? \"Hevy\" : \"CSV\"}`\n    );\n  };\n}\n\nexport function Thunk_importFromLink(link: string): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"import-from-link\"));\n    const data = await ImportFromLink_importFromLink(link, env.service.client);\n    if (data.success) {\n      if (data.data.source) {\n        Storage_setAffiliate(dispatch, data.data.source, \"program\");\n      }\n      dispatch(Thunk_importProgram(data.data));\n    } else {\n      Dialog_alert(data.error.join(\"\\n\"));\n    }\n  };\n}\n\nexport function Thunk_generateAndCopyLink(\n  editProgram: IProgram,\n  settings: ISettings,\n  cb: (link: string) => void\n): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"generate-and-copy-link\"));\n    const link = await Program_exportProgramToLink(editProgram, settings, getLatestMigrationVersion());\n    try {\n      const state = getState();\n      const service = new Service(env.service.client);\n      const url = await service.postShortUrl(\n        link,\n        \"p\",\n        state.storage.settings.affiliateEnabled && state.user?.id ? state.user.id : undefined\n      );\n      ClipboardUtils_copy(url);\n      cb(url);\n    } catch (error) {\n      const e = error as Error;\n      Rollbar.error(e);\n      ClipboardUtils_copy(link);\n      cb(link);\n    }\n  };\n}\n\nexport function Thunk_importProgram(importLinkData: IImportLinkData): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"import-program-from-link\"));\n    const { decoded: maybeProgram, source, userid } = importLinkData;\n    const state = getState();\n    const result = await ImportExporter_getExportedProgram(env.service.client, maybeProgram, state.storage.settings);\n    if (result.success) {\n      const { program, customExercises } = result.data;\n      const existingCustomExerciseNames = new Set(\n        CollectionUtils_compact(ObjectUtils_values(state.storage.settings.exercises).map((e) => e?.name))\n      );\n      const newCustomExercises = ObjectUtils_filter(\n        customExercises,\n        (_, v) => v != null && !existingCustomExerciseNames.has(v.name)\n      );\n      if (source) {\n        program.source = source;\n      }\n      if (userid) {\n        program.authorid = userid;\n      }\n      const newProgram: IProgram = { ...ObjectUtils_clone(program), clonedAt: Date.now() };\n      if (!(await Dialog_confirm(`Do you want to import program ${newProgram.name}?`))) {\n        return;\n      }\n      const hasExistingProgram = getState().storage.programs.some((p) => p.id === newProgram.id);\n      if (\n        hasExistingProgram &&\n        !(await Dialog_confirm(\"Program with the same id already exists, do you want to overwrite it?\"))\n      ) {\n        return;\n      }\n      if (newProgram.planner && PlannerProgram_hasNonSelectedWeightUnit(newProgram.planner, state.storage.settings)) {\n        const fromUnit = Weight_oppositeUnit(state.storage.settings.units);\n        const toUnit = state.storage.settings.units;\n        if (await Dialog_confirm(`The program has weights in ${fromUnit}, do you want to convert them to ${toUnit}?`)) {\n          newProgram.planner = PlannerProgram_switchToUnit(newProgram.planner, state.storage.settings);\n        }\n      }\n      updateState(\n        dispatch,\n        [\n          lb<IState>()\n            .p(\"storage\")\n            .p(\"settings\")\n            .p(\"exercises\")\n            .recordModify((e) => ({ ...e, ...newCustomExercises })),\n          lb<IState>()\n            .p(\"storage\")\n            .p(\"programs\")\n            .recordModify((programs) => {\n              const index = programs.findIndex((p) => p.id === newProgram.id);\n              if (index !== -1) {\n                return CollectionUtils_setAt(programs, index, newProgram);\n              } else {\n                return [...programs, newProgram];\n              }\n            }),\n          lb<IState>().p(\"storage\").p(\"currentProgramId\").record(newProgram.id),\n        ],\n        \"Importing Program\"\n      );\n      Dialog_alert(\"Successfully imported\");\n      const { navigateTo } = await getNavigationService();\n      navigateTo(\"main\", undefined, { tab: \"home\" });\n    } else {\n      Dialog_alert(result.error.join(\"\\n\"));\n    }\n  };\n}\n\nexport function Thunk_createAccount(): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"create-account\"));\n    dispatch(\n      Thunk_logOut(async () => {\n        const newState = await getInitialState(env.service.client, { deviceId: getState().deviceId });\n        dispatch({ type: \"ReplaceState\", state: newState });\n        dispatch(Thunk_fetchInitial());\n      })\n    );\n  };\n}\n\nexport function Thunk_deleteAccount(id: string, cb?: () => void): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"delete-local-account\"));\n    await env.persistence.delete(`liftosaur_${id}`);\n    if (cb) {\n      cb();\n    }\n  };\n}\n\nexport function Thunk_fetchAccounts(cb: (accounts: IAccount[]) => void): IThunk {\n  return async (dispatch, getState, env) => {\n    cb(await Account_getAll(env.persistence));\n  };\n}\n\nexport function Thunk_deleteAccountRemote(cb?: (result: boolean) => void): IThunk {\n  return async (dispatch, getState, env) => {\n    await load(dispatch, \"Delete cloud account\", () => {\n      return new Promise(async (resolve) => {\n        dispatch(Thunk_postevent(\"delete-remove-account\"));\n        const result = await env.service.deleteAccount();\n        dispatch(\n          Thunk_logOut(() => {\n            if (cb) {\n              cb(result);\n              resolve(result);\n            }\n          })\n        );\n      });\n    });\n  };\n}\n\nexport function Thunk_switchAccount(id: string): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(\n      Thunk_logOut(async () => {\n        dispatch(Thunk_postevent(\"switch-account\"));\n        const localStorage = await env.persistence.load(`liftosaur_${id}`);\n        if (localStorage?.storage != null) {\n          const result = Storage_get(localStorage.storage);\n          if (result.success) {\n            const newState = await getInitialState(env.service.client, { localStorage, deviceId: getState().deviceId });\n            dispatch({ type: \"ReplaceState\", state: newState });\n            dispatch(Thunk_fetchInitial());\n          } else {\n            console.error(\"Failed to switch account, error:\", result.error);\n            Dialog_alert(`Error while trying to switch the account: ${result.error}`);\n          }\n        } else {\n          console.error(\"Error while trying to switch the account: missing account\", id);\n          Dialog_alert(`Error while trying to switch the account: missing account ${id}`);\n        }\n      })\n    );\n  };\n}\n\nexport function Thunk_adminCheckKey(adminKey: string, cb: (isValid: boolean) => void): IThunk {\n  return async (dispatch, getState, env) => {\n    const isValid = await load(dispatch, \"Validating admin key\", () => env.service.checkAdminKey(adminKey));\n    cb(isValid);\n  };\n}\n\nexport function Thunk_adminListDebugSnapshots(\n  userId: string,\n  adminKey: string,\n  cb: (snapshots: string[]) => void\n): IThunk {\n  return async (dispatch, getState, env) => {\n    const snapshots = await load(dispatch, \"Listing debug snapshots\", () =>\n      env.service.getDebugSnapshotList(userId, adminKey)\n    );\n    cb(snapshots);\n  };\n}\n\nexport function Thunk_adminLoginAsUser(\n  userId: string,\n  adminKey: string,\n  storageId?: string,\n  debugTimestamp?: string\n): IThunk {\n  return async (dispatch, getState, env) => {\n    const result = await load(dispatch, \"Loading user storage\", () =>\n      debugTimestamp != null\n        ? AdminDebug_fetchDebugSnapshotStorage(env.service, userId, adminKey, debugTimestamp)\n        : AdminDebug_fetchStorage(env.service, getState().storage.tempUserId, userId, adminKey, storageId)\n    );\n    if (!result.success) {\n      Dialog_alert(`Failed to login as user ${userId}: ${result.error}`);\n      return;\n    }\n    const debugStorage = result.data;\n    dispatch(Thunk_postevent(\"admin-login-as-user\"));\n    // Sign out the admin's own session so the debug sandbox is fully anonymous: the server\n    // never minted a target cookie, and clearing the admin's own cookie means no in-session\n    // request can be attributed to anyone. The admin's local account stays in IndexedDB.\n    await env.push?.unregisterBeforeSignout();\n    await env.service.signout();\n    const localStorage: ILocalStorage = { storage: debugStorage };\n    await IndexedDBUtils_set(\"current_account\", debugStorage.tempUserId);\n    await env.persistence.saveFull(`liftosaur_${debugStorage.tempUserId}`, localStorage);\n    const newState = await getInitialState(env.service.client, { localStorage, deviceId: getState().deviceId });\n    dispatch({ type: \"ReplaceState\", state: newState });\n    dispatch(Thunk_fetchInitial());\n    const { navigateTo } = await getNavigationService();\n    navigateTo(\"main\", undefined, { tab: \"home\" });\n  };\n}\n\nexport function Thunk_adminEnableServerSync(adminKey: string): IThunk {\n  return async (dispatch, getState, env) => {\n    const tempUserId = getState().storage.tempUserId;\n    if (!AdminDebug_isDebugAccountId(tempUserId)) {\n      return;\n    }\n    const session = await load(dispatch, \"Creating debug session\", () =>\n      env.service.createDebugSession(tempUserId, adminKey)\n    );\n    if (session == null) {\n      Dialog_alert(\"Failed to create debug session (check the admin key)\");\n      return;\n    }\n    // Enablement is intentionally session-only and fails closed: the set-cookie authenticates this\n    // session via the cookie jar, but on restart getInitialState reloads any debug_ account\n    // force-nosync, so sync turns back off and must be re-enabled here. We deliberately do NOT write\n    // the debug session to the keychain - that slot is the real login auth (+ watch bridge), and a\n    // debug token must never outlive the session or leak to the watch.\n    updateState(\n      dispatch,\n      [\n        lb<IState>().p(\"nosync\").record(false),\n        lb<IState>().p(\"user\").record({ id: session.userId, email: session.email }),\n      ],\n      \"Debug: enable server sync\"\n    );\n    dispatch(Thunk_sync2({ force: true, log: true }));\n  };\n}\n\nexport function Thunk_debugTestLogin(\n  apiKey?: string,\n  cb?: (result: { userId: string; email: string; apiKeyBound: boolean } | { error: string }) => void\n): IThunk {\n  return async (dispatch, getState, env) => {\n    try {\n      const userId = `test_${UidFactory_generateUid(8)}`;\n      const email = `${userId}@test.liftosaur.com`;\n      const result = await env.service.googleSignIn(email, userId, { forcedUserEmail: email });\n      if (result.email == null) {\n        cb?.({ error: \"Sign in failed - forceuseremail only works against a local dev server\" });\n        return;\n      }\n      // Setup before handleLogin so a failure (e.g. non-local backend without the dev route)\n      // doesn't leave the app committed to a half-provisioned account. The signin above already\n      // replaced the session cookie though, so on failure also sign out rather than keep\n      // HTTP-layer auth pointing at the throwaway account.\n      let setup: { apiKeyBound: boolean; key: string };\n      try {\n        setup = await env.service.postSetupTestAccount(apiKey, result.session);\n      } catch (e) {\n        await env.service.signout().catch(() => undefined);\n        throw e;\n      }\n      await handleLogin(dispatch, result, env, getState().user?.id || getState().storage.tempUserId);\n      updateState(\n        dispatch,\n        [lb<IState>().p(\"storage\").p(\"subscription\").p(\"key\").record(setup.key)],\n        \"Set test account subscription key\"\n      );\n      dispatch(Thunk_sync2());\n      cb?.({ userId: result.user_id, email: result.email, apiKeyBound: setup.apiKeyBound });\n    } catch (e) {\n      cb?.({ error: e instanceof Error ? e.message : String(e) });\n    }\n  };\n}\n\nexport function Thunk_claimkey(): IThunk {\n  return async (dispatch, getState, env) => {\n    const claim = await env.service.postClaimKey(getState().storage.tempUserId);\n    if (claim) {\n      finishFreeAccess(dispatch, claim.key, claim.expires);\n    } else {\n      Dialog_alert(\"Failed to claim the free access\");\n      dispatch(Thunk_log(\"ls-claim-free-user-fail\"));\n    }\n  };\n}\n\nfunction finishFreeAccess(dispatch: IDispatch, key: string, expires: number): void {\n  updateState(dispatch, [lb<IState>().p(\"storage\").p(\"subscription\").p(\"key\").record(key)], \"Set subscription key\");\n  const date = DateUtils_format(expires);\n  Dialog_alert(`Successfully claimed the free access until ${date}`);\n  dispatch(Thunk_log(\"ls-claim-free-user-success\"));\n  dispatch(Thunk_pullScreen());\n}\n\nexport function Thunk_fetchInitial(): IThunk {\n  return async (dispatch, getState, env) => {\n    if (getState().storage.whatsNew == null) {\n      WhatsNew_updateStorage(dispatch);\n    }\n    dispatch(Thunk_fetchPrograms());\n    // A debug sandbox must not verify the target's subscription receipts or restore IAPs.\n    if (AdminDebug_isDebugAccountId(getState().storage.tempUserId)) {\n      return;\n    }\n    dispatch(Thunk_verifySubscriptionKey());\n    if (getState().storage.subscription.apple.length > 0) {\n      dispatch(Thunk_postevent(\"check-apple-subscription\"));\n      const receipt = getState().storage.subscription.apple[0]?.value;\n      const userId = getState().user?.id || getState().storage.tempUserId;\n      const isVerified = await Subscriptions_verifyAppleReceipt(userId, env.service, receipt);\n      if (!isVerified) {\n        dispatch(Thunk_postevent(\"apple-subscription-invalid-restore\"));\n        await Subscriptions_cleanupOutdatedAppleReceipts(\n          dispatch,\n          userId,\n          env.service,\n          getState().storage.subscription\n        );\n        if (Platform.OS === \"ios\") {\n          dispatch(Thunk_restorePurchases());\n        }\n      } else {\n        dispatch(Thunk_postevent(\"apple-subscription-verified\"));\n        if (getState().storage.subscription.apple.length === 0) {\n          Subscriptions_setAppleReceipt(dispatch, receipt);\n        }\n      }\n    }\n  };\n}\n\n// Restore on startup for the native stores, dispatched only after iap.initConnection() succeeds (getAvailablePurchases\n// needs an open connection). Android restores unconditionally; iOS only self-heals when no receipt is stored: a\n// lifetime/sub owned on this Apple ID but bought under a different local account (or never persisted) leaves\n// storage.subscription empty - the only signal devices without StoreKit access (the Apple Watch) use to unlock\n// Premium, and the live \"lifetime\" screen state hides the manual Restore button, so there's no other recovery path.\n// StoreKit 2's currentEntitlements read is silent (unlike legacy SK1 restoreCompletedTransactions, which prompts for\n// the App Store password - the reason iOS wasn't restored on load before), so it's safe to do on every launch.\nexport function Thunk_iapRestoreOnStartup(): IThunk {\n  return async (dispatch, getState, env) => {\n    if (env.iap == null) {\n      return;\n    }\n    // A debug sandbox must not restore the admin's IAPs into the target-derived debug account (same guard as\n    // Thunk_fetchInitial) - restoring would also write server-side subscription/payment records under the debug id.\n    if (AdminDebug_isDebugAccountId(getState().storage.tempUserId)) {\n      return;\n    }\n    if (Platform.OS === \"android\") {\n      dispatch(Thunk_restorePurchases());\n    } else if (Platform.OS === \"ios\" && getState().storage.subscription.apple.length === 0) {\n      dispatch(Thunk_restorePurchases());\n    }\n  };\n}\n\nexport function Thunk_redeemCoupon(code: string, cb: (success: boolean) => void): IThunk {\n  return async (dispatch, getState, env) => {\n    dispatch(Thunk_postevent(\"redeem-coupon\"));\n    const platform = StoreRuntime_isIos() ? \"ios\" : StoreRuntime_isAndroid() ? \"android\" : undefined;\n    const result = await load(dispatch, \"Claiming coupon\", () => env.service.postClaimCoupon(code, platform));\n    if (result.success) {\n      const { key, expires, appleOffer, googleOffer, affiliate } = result.data;\n      if (appleOffer) {\n        console.log(\"Apple promotional offer data:\", appleOffer);\n        updateState(dispatch, [lb<IState>().p(\"appleOffer\").record(appleOffer)], \"Set apple promotional offer\");\n        lg(\"ls-coupon-applied\", { code, type: \"apple\" });\n        Dialog_alert(\"Coupon has been applied! Proceed to purchase now.\");\n      } else if (googleOffer) {\n        console.log(\"Google promotional offer data:\", googleOffer);\n        updateState(dispatch, [lb<IState>().p(\"googleOffer\").record(googleOffer)], \"Set google promotional offer\");\n        lg(\"ls-coupon-applied\", { code, type: \"google\" });\n        Dialog_alert(\"Coupon has been applied! Proceed to purchase now.\");\n      } else if (key && expires) {\n        finishFreeAccess(dispatch, key, expires);\n      }\n      if (affiliate) {\n        Storage_setAffiliate(dispatch, affiliate, \"coupon\");\n      }\n      cb(true);\n    } else {\n      switch (result.error) {\n        case \"not_authorized\": {\n          Dialog_alert(\"You need to sign in first to claim the coupon.\");\n          break;\n        }\n        case \"coupon_not_found\": {\n          Dialog_alert(\"Couldn't find the coupon with that code.\");\n          break;\n        }\n        case \"coupon_disabled\": {\n          Dialog_alert(\"Couldn't find the coupon with that code.\");\n          break;\n        }\n        case \"coupon_already_claimed\": {\n          Dialog_alert(\"This coupon is already claimed.\");\n          break;\n        }\n        case \"wrong_platform\": {\n          Dialog_alert(\"This coupon could only be activated on Android or iOS.\");\n          break;\n        }\n        default: {\n          Dialog_alert(\"Failed to claim the coupon.\");\n          break;\n        }\n      }\n      dispatch(Thunk_log(\"ls-claim-coupon-fail\"));\n      cb(false);\n    }\n  };\n}\n\nexport function Thunk_setAppleReceipt(receipt?: string, opts?: { keepSubscriptionScreenOpen?: boolean }): IThunk {\n  return async (dispatch, getState, env) => {\n    if (receipt) {\n      if (\n        await Subscriptions_verifyAppleReceipt(\n          getState().user?.id || getState().storage.tempUserId,\n          env.service,\n          receipt\n        )\n      ) {\n        dispatch(Thunk_postevent(\"complete-apple-subscription\"));\n        dispatch(Thunk_log(\"ls-set-apple-receipt\"));\n        Subscriptions_setAppleReceipt(dispatch, receipt);\n        // A plan switch re-delivers the existing receipt; closing the screen would hide the freshly-updated\n        // pending-switch UI, so keep it open in that case and let the refresh repaint the management state.\n        if (env.getCurrentScreenData?.()?.name === \"subscription\" && !opts?.keepSubscriptionScreenOpen) {\n          dispatch(Thunk_pullScreen());\n        }\n      } else {\n        dispatch(Thunk_postevent(\"apple-subscription-invalid\"));\n      }\n    }\n  };\n}\n\nexport function Thunk_pushExerciseStatsScreen(exerciseType: IExerciseType): IThunk {\n  return async (dispatch, getState, env) => {\n    updateState(dispatch, [lb<IState>().p(\"viewExerciseType\").record(exerciseType)], \"Set exercise type to view\");\n    dispatch(Thunk_pushScreen(\"exerciseStats\"));\n  };\n}\n\nexport function Thunk_setGooglePurchaseToken(\n  productId?: string,\n  token?: string,\n  opts?: { keepSubscriptionScreenOpen?: boolean }\n): IThunk {\n  return async (dispatch, getState, env) => {\n    if (productId && token) {\n      const purchaseToken = JSON.stringify({ productId, token });\n      const state = getState();\n      const userId = state.user?.id || state.storage.tempUserId;\n      if (await Subscriptions_verifyGooglePurchaseToken(env.service, userId, purchaseToken)) {\n        dispatch(Thunk_postevent(\"complete-google-subscription\"));\n        dispatch(Thunk_log(\"ls-set-google-purchase-token\"));\n        Subscriptions_setGooglePurchaseToken(dispatch, purchaseToken);\n        // A plan switch re-delivers the existing token; keep the screen open so the updated pending-switch\n        // UI stays visible instead of being closed out from under the user.\n        if (env.getCurrentScreenData?.()?.name === \"subscription\" && !opts?.keepSubscriptionScreenOpen) {\n          dispatch(Thunk_pullScreen());\n        }\n      } else {\n        dispatch(Thunk_postevent(\"google-subscription-invalid\", { productId, token }));\n      }\n    }\n  };\n}\n\nasync function load<T>(dispatch: IDispatch, type: string, cb: () => Promise<T>): Promise<T> {\n  return new Promise((resolve, reject) => {\n    const name = UidFactory_generateUid(4);\n    _load(dispatch, name, type, cb, 0, resolve, reject);\n  });\n}\n\nfunction _load<T>(\n  dispatch: IDispatch,\n  name: string,\n  type: string,\n  cb: () => Promise<T>,\n  attempt: number,\n  resolve: (arg: T) => void,\n  reject: (arg: unknown) => void\n): void {\n  updateState(\n    dispatch,\n    [\n      lb<IState>()\n        .p(\"loading\")\n        .p(\"items\")\n        .p(name)\n        .recordModify((i) => {\n          if (i == null) {\n            return { startTime: Date.now(), attempt, type };\n          } else {\n            return { ...i, attempt };\n          }\n        }),\n    ],\n    \"Start loading\"\n  );\n  cb()\n    .then((r) => {\n      updateState(\n        dispatch,\n        [\n          lb<IState>().p(\"loading\").p(\"items\").pi(name).p(\"endTime\").record(Date.now()),\n          lb<IState>().p(\"loading\").p(\"items\").pi(name).p(\"error\").record(undefined),\n        ],\n        \"End loading\"\n      );\n      resolve(r);\n    })\n    .catch((e) => {\n      if (e.name === \"AbortError\") {\n        updateState(\n          dispatch,\n          [\n            lb<IState>().p(\"loading\").p(\"items\").pi(name).p(\"endTime\").record(Date.now()),\n            lb<IState>().p(\"loading\").p(\"items\").pi(name).p(\"error\").record(undefined),\n          ],\n          \"Abort loading\"\n        );\n        reject(e);\n        return;\n      }\n      if (attempt >= 3 || (e instanceof NoRetryError && e.noretry)) {\n        updateState(\n          dispatch,\n          [\n            lb<IState>().p(\"loading\").p(\"items\").pi(name).p(\"error\").record(`${type} failed`),\n            lb<IState>().p(\"loading\").p(\"items\").pi(name).p(\"endTime\").record(Date.now()),\n          ],\n          `Failed loading`\n        );\n        if (type === \"Logging in\") {\n          Rollbar.error(\"Error while logging in\", {\n            error: e instanceof Error ? e.message : String(e),\n          });\n          Rollbar.error(e);\n        }\n        reject(e);\n      } else {\n        setTimeout(() => {\n          _load(dispatch, name, type, cb, attempt + 1, resolve, reject);\n        }, 1000);\n      }\n    });\n}\n\nasync function handleLogin(\n  dispatch: IDispatch,\n  result: IGetStorageResponse,\n  env: IEnv,\n  oldUserId?: string\n): Promise<void> {\n  const client = env.service.client;\n  try {\n    if (result.email != null) {\n      dispatch(Thunk_postevent(\"login\"));\n      Rollbar.configure(RollbarUtils_config({ person: { email: result.email, id: result.user_id } }));\n      let storage: IStorage;\n      const lastSynced = SyncBaseline_fromServer(\n        { _versions: result.storage._versions, tempUserId: result.user_id },\n        Date.now()\n      );\n      const storageResult = Storage_get(result.storage, true);\n      const service = new Service(client);\n      if (storageResult.success) {\n        storage = storageResult.data;\n      } else {\n        storage = result.storage;\n        const userid = result.user_id || result.storage.tempUserId || `missing-${UidFactory_generateUid(8)}`;\n        await service.postDebug(userid, JSON.stringify(result.storage), { local: \"false\" });\n      }\n      storage.tempUserId = result.user_id;\n      storage.email = result.email;\n      if (result.is_new_user) {\n        Analytics_trackSignUp();\n        if (oldUserId) {\n          try {\n            await service.postDebug(oldUserId, JSON.stringify(window.state || {}), {\n              new_userid: result.user_id,\n              email: result.email,\n            });\n          } catch (e) {\n            console.error(\"Failed to upload debug data for old user\", e);\n          }\n        }\n      }\n      if (oldUserId === result.user_id) {\n        dispatch(Thunk_postevent(\"login-same-user\"));\n        updateState(dispatch, [lb<IState>().p(\"lastSynced\").record(lastSynced)], \"Set last synced on login\");\n        dispatch({ type: \"Login\", email: result.email, userId: result.user_id });\n        if (storage.subscription.key !== result.key) {\n          updateState(\n            dispatch,\n            [lb<IState>().p(\"storage\").p(\"subscription\").p(\"key\").record(result.key)],\n            \"Set subscription key from login\"\n          );\n        }\n      } else {\n        dispatch(Thunk_postevent(\"login-different-user\"));\n        storage.subscription.key = result.key;\n        const newState = await getInitialState(client, { storage, deviceId: await DeviceId_get() });\n        newState.lastSynced = lastSynced;\n        newState.user = { id: result.user_id, email: result.email };\n        dispatch({ type: \"ReplaceState\", state: newState });\n      }\n      dispatch(Thunk_fetchInitial());\n      if (result.session) {\n        const auth: IAuthToken = {\n          token: result.session,\n          expiresAt: Math.floor(Date.now() / 1000) + 10 * 365 * 24 * 60 * 60,\n          userId: result.user_id,\n        };\n        try {\n          await env.keychain.setAuthToken(auth);\n        } catch (e) {\n          lg(\"ls-keychain-set-auth-fail\", { error: e instanceof Error ? e.message : String(e) });\n        }\n        if (WatchAuthHandoff_accountId({ id: result.user_id, email: result.email }, storage) != null) {\n          env.watch.sendAuthToWatch(auth);\n        }\n      }\n    } else if (result.key) {\n      updateState(\n        dispatch,\n        [lb<IState>().p(\"storage\").p(\"subscription\").p(\"key\").record(result.key)],\n        \"Set subscription free user key\"\n      );\n    }\n  } catch (error) {\n    console.error(error);\n    throw error;\n  }\n}\n\ninterface IIapSubscribeArgs {\n  applePromo?: IApplePromotionalOffer;\n  googlePromo?: IGooglePromotionalOffer;\n}\n\nfunction buildSubscribeThunk(loadingKey: keyof ISubscriptionLoading, sku: string, args?: IIapSubscribeArgs): IThunk {\n  return async (dispatch, getState, env) => {\n    IapHelpers_setLoading(dispatch, getState, { [loadingKey]: true } as ISubscriptionLoading);\n    if (env.iap) {\n      const owned = await env.iap.getAvailablePurchases();\n      if (owned.length > 0) {\n        IapHelpers_alertAlreadySubscribed();\n        IapHelpers_clearLoading(dispatch);\n        return;\n      }\n      try {\n        await env.iap.requestSubscription({\n          sku,\n          applePromo: IapHelpers_applePromoToAdapter(args?.applePromo),\n          googleOfferId: args?.googlePromo?.offerId,\n        });\n      } catch (e) {\n        IapHelpers_clearLoading(dispatch);\n        console.warn(\"IAP requestSubscription failed\", e);\n      }\n    }\n  };\n}\n\nexport function Thunk_subscribeMonthly(args?: IIapSubscribeArgs): IThunk {\n  return buildSubscribeThunk(\"monthly\", IapHelpers_getSkus().monthly, args);\n}\n\nexport function Thunk_subscribeYearly(args?: IIapSubscribeArgs): IThunk {\n  return buildSubscribeThunk(\"yearly\", IapHelpers_getSkus().yearly, args);\n}\n\nexport function Thunk_buyLifetime(): IThunk {\n  return async (dispatch, getState, env) => {\n    IapHelpers_setLoading(dispatch, getState, { lifetime: true });\n    if (env.iap) {\n      const owned = await env.iap.getAvailablePurchases();\n      if (owned.length > 0) {\n        IapHelpers_alertAlreadySubscribed();\n        IapHelpers_clearLoading(dispatch);\n        return;\n      }\n      try {\n        await env.iap.requestInAppProduct({ sku: IapHelpers_getSkus().lifetime });\n      } catch (e) {\n        IapHelpers_clearLoading(dispatch);\n        console.warn(\"IAP requestInAppProduct failed\", e);\n      }\n    }\n  };\n}\n\nexport function Thunk_restorePurchases(args?: { interactive?: boolean }): IThunk {\n  return async (dispatch, _getState, env) => {\n    const interactive = args?.interactive ?? false;\n    if (env.iap) {\n      try {\n        const purchases = await env.iap.getAvailablePurchases();\n        if (purchases.length === 0) {\n          if (interactive) {\n            Dialog_alert(\"No active purchases to restore.\");\n          }\n          return;\n        }\n        if (Platform.OS === \"ios\") {\n          const receipt = await IapHelpers_readReceiptOrJwsIOS(env.iap, purchases[0]);\n          if (receipt) {\n            dispatch(Thunk_setAppleReceipt(receipt));\n          }\n        } else {\n          for (const purchase of purchases) {\n            if (purchase.purchaseToken && purchase.productId) {\n              dispatch(Thunk_setGooglePurchaseToken(purchase.productId, purchase.purchaseToken));\n            }\n          }\n        }\n      } catch (e) {\n        console.warn(\"IAP restorePurchases failed\", e);\n        if (interactive) {\n          Dialog_alert(\"Couldn't restore purchases. Please try again later.\");\n        }\n      }\n    }\n  };\n}\n\nexport function Thunk_iapHandlePurchase(purchase: IIapPurchase): IThunk {\n  return async (dispatch, _getState, env) => {\n    if (!env.iap) {\n      return;\n    }\n    try {\n      const keepScreen = { keepSubscriptionScreenOpen: !!purchase.renewsAsProductId };\n      if (Platform.OS === \"ios\") {\n        const receipt = await IapHelpers_readReceiptOrJwsIOS(env.iap, purchase);\n        if (receipt) {\n          dispatch(Thunk_setAppleReceipt(receipt, keepScreen));\n        } else {\n          console.warn(\"IAP: no receipt obtained for purchase, server will not be notified\");\n        }\n      } else {\n        if (purchase.purchaseToken && purchase.productId) {\n          dispatch(Thunk_setGooglePurchaseToken(purchase.productId, purchase.purchaseToken, keepScreen));\n        }\n      }\n      // A queued plan switch re-delivers the existing transaction (renewsAsProductId set); it's not a\n      // new purchase, so don't double-count it as one.\n      if (!purchase.renewsAsProductId) {\n        let price = purchase.price;\n        let currency = purchase.currency;\n        if (price == null) {\n          // Re-deliveries (background renewals, killed-app replays, restores) arrive before the\n          // paywall fetched prices, so resolve the product price now to avoid reporting af_revenue: 0.\n          // A transient store-lookup failure here must not skip the purchase event entirely - fall\n          // back to whatever the purchase already carried and still track.\n          try {\n            const resolved = await env.iap.getProductPrice(purchase.productId);\n            price = resolved.price ?? price;\n            currency = resolved.currency ?? currency;\n          } catch (e) {\n            console.warn(\"IAP getProductPrice failed\", e);\n          }\n        }\n        Analytics_trackPurchase({\n          productId: purchase.productId,\n          price: price ?? 0,\n          currency: currency || \"USD\",\n          transactionId: purchase.transactionId ?? purchase.id,\n          transactionDate: purchase.transactionDate,\n        });\n      }\n    } finally {\n      try {\n        await env.iap.finishTransaction(purchase);\n      } catch (e) {\n        console.warn(\"IAP finishTransaction failed\", e);\n      }\n      IapHelpers_clearLoading(dispatch);\n      // Refresh so a plan switch (or its cancellation) reflects in subscriptionStatus.pendingProductId\n      // right away, instead of only after the screen re-mounts.\n      dispatch(Thunk_iapRefreshActiveSubscriptions());\n    }\n  };\n}\n\nexport function Thunk_iapHandlePurchaseError(error: IIapPurchaseError): IThunk {\n  return async (dispatch) => {\n    console.warn(\"IAP purchase error\", error);\n    dispatch(\n      Thunk_postevent(\"iap-purchase-error\", {\n        code: error.code,\n        message: error.message,\n        ...(error.productId ? { productId: error.productId } : {}),\n      })\n    );\n    IapHelpers_clearLoading(dispatch);\n  };\n}\n\n// Android's Google Play billing sheet (especially for in-app products) doesn't reliably emit a\n// purchaseError event when the user dismisses it without buying, so the plan-card spinner would\n// otherwise hang until the safety timeout. A real purchase clears its own loading via\n// Thunk_iapHandlePurchase, so by the time the app has been back in the foreground for a moment any\n// still-set loading means the sheet was dismissed.\nexport function Thunk_iapClearStuckLoadingOnForeground(): IThunk {\n  return async (dispatch, getState) => {\n    if (Platform.OS !== \"android\") {\n      return;\n    }\n    if (getState().subscriptionLoading != null) {\n      IapHelpers_clearLoading(dispatch);\n    }\n  };\n}\n\nexport function Thunk_redeemCouponIOS(): IThunk {\n  return async (_dispatch, _getState, env) => {\n    if (!env.iap) {\n      return;\n    }\n    try {\n      await env.iap.presentCodeRedemptionSheetIOS();\n    } catch (e) {\n      console.warn(\"IAP presentCodeRedemptionSheetIOS failed\", e);\n    }\n  };\n}\n\nexport function Thunk_iapFetchProducts(): IThunk {\n  return async (dispatch, getState, env) => {\n    if (!env.iap) {\n      return;\n    }\n    try {\n      const skus = IapHelpers_getSkus();\n      const subs = await env.iap.fetchSubscriptions([skus.monthly, skus.yearly]);\n      const inApp = await env.iap.fetchInAppProducts([skus.lifetime]);\n      const newPrices: Record<string, string> = {};\n      const newOffers: Record<string, IOfferData[]> = {};\n      for (const sub of subs) {\n        newPrices[sub.id] = sub.displayPrice;\n        const mapped: IOfferData[] = sub.subscriptionOffers\n          .filter((o) => !!o.id)\n          .map((o) => ({ offerId: o.id, formattedPrice: o.displayPrice }));\n        if (mapped.length > 0) {\n          newOffers[sub.id] = mapped;\n        }\n      }\n      for (const product of inApp) {\n        newPrices[product.id] = product.displayPrice;\n      }\n      updateState(\n        dispatch,\n        [\n          lb<IState>()\n            .p(\"prices\")\n            .recordModify((v) => ({ ...(v ?? {}), ...newPrices })),\n          lb<IState>()\n            .p(\"offers\")\n            .recordModify((v) => ({ ...(v ?? {}), ...newOffers })),\n        ],\n        \"Update prices for products\"\n      );\n      // Persist localized prices to synced storage so the web paywall can show them. Guard on change\n      // so an unchanged fetch on every app open doesn't bump the storage version and trigger a sync.\n      const storedPrices = getState().storage.subscriptionPrices ?? {};\n      const changed = ObjectUtils_keys(newPrices).some((k) => newPrices[k] !== storedPrices[k]);\n      if (changed) {\n        updateState(\n          dispatch,\n          [\n            lb<IState>()\n              .p(\"storage\")\n              .p(\"subscriptionPrices\")\n              .recordModify((v) => ({ ...(v ?? {}), ...newPrices })),\n          ],\n          \"Save subscription prices to storage\"\n        );\n      }\n    } catch (e) {\n      console.warn(\"IAP fetchProducts failed\", e);\n    }\n  };\n}\n\n// How long the optimistic Android plan-switch hint survives before deferring to the server. Generous\n// enough to cover Google's deferred RTDN propagation; the hint also clears as soon as the server reports.\nconst SUBSCRIPTION_PENDING_HINT_MS = 1 * 60 * 1000;\n\nexport function Thunk_iapRefreshActiveSubscriptions(): IThunk {\n  return async (dispatch, getState, env) => {\n    if (!env.iap) {\n      return;\n    }\n    updateState(\n      dispatch,\n      [lb<IState>().p(\"subscriptionStatusLoading\").record(true)],\n      \"Start subscription status loading\"\n    );\n    try {\n      const [subs, owned] = await Promise.all([env.iap.getActiveSubscriptions(), env.iap.getAvailablePurchases()]);\n      const lifetimeSku = IapHelpers_getSkus().lifetime;\n      const ownedLifetime = owned.some((p) => p.productId === lifetimeSku);\n      let patchedSubs = subs;\n      let serverPending: string | undefined;\n      // Android exposes neither the subscription expiry nor a queued plan switch client-side, so fill\n      // both from the server's verified subscriptionsv2 record (iOS already has them from StoreKit).\n      // `pendingProduct` comes from Google's `deferredItemReplacement` and is authoritative: when the\n      // switch is cancelled in Play or has landed, the server drops it and the pending card clears.\n      if (Platform.OS === \"android\" && subs.some((s) => s.isActive)) {\n        try {\n          // Re-verify the live purchase token to get the server's freshly-derived status (incl. a queued\n          // `deferredItemReplacement` plan switch), so it surfaces immediately instead of waiting on Google's\n          // laggy SUBSCRIPTION_DEFERRED RTDN. Authorized by the purchase token, not a userId lookup.\n          const state = getState();\n          const userId = state.user?.id || state.storage.tempUserId;\n          const activeStoreSub = subs.find((s) => s.isActive && !!s.purchaseTokenAndroid);\n          if (activeStoreSub?.purchaseTokenAndroid) {\n            const purchaseToken = JSON.stringify({\n              productId: activeStoreSub.productId,\n              token: activeStoreSub.purchaseTokenAndroid,\n            });\n            const sub = await env.service.refreshGoogleSubscription(userId, purchaseToken);\n            if (sub) {\n              serverPending = sub.pendingProduct;\n              patchedSubs = subs.map((s) =>\n                s.isActive ? { ...s, expirationDate: s.expirationDate ?? sub.expires } : s\n              );\n            }\n          }\n        } catch (e) {\n          console.warn(\"IAP refreshGoogleSubscription failed\", e);\n        }\n      }\n      // The server's pendingProduct is authoritative once present; until Google's deferred RTDN lands,\n      // a fresh non-expired optimistic hint bridges the gap. Drop the hint when the server takes over,\n      // it expires, or the switch has landed (active product already equals the hint).\n      const hint = getState().subscriptionPendingHint;\n      const hintValid =\n        hint != null &&\n        Date.now() < hint.until &&\n        !patchedSubs.some((s) => s.isActive && s.productId === hint.productId);\n      const keepHint = hintValid && serverPending == null;\n      const effectivePending = serverPending ?? (hintValid ? hint?.productId : undefined);\n      if (effectivePending != null) {\n        patchedSubs = patchedSubs.map((s) => (s.isActive ? { ...s, pendingProductId: effectivePending } : s));\n      }\n      updateState(\n        dispatch,\n        [\n          lb<IState>().p(\"subscriptionStatus\").record(patchedSubs),\n          lb<IState>().p(\"ownedLifetime\").record(ownedLifetime),\n          ...(keepHint ? [] : [lb<IState>().p(\"subscriptionPendingHint\").record(undefined)]),\n        ],\n        \"Update active subscriptions\"\n      );\n    } catch (e) {\n      console.warn(\"IAP getActiveSubscriptions failed\", e);\n    } finally {\n      updateState(\n        dispatch,\n        [lb<IState>().p(\"subscriptionStatusLoading\").record(undefined)],\n        \"Stop subscription status loading\"\n      );\n    }\n  };\n}\n\nexport function Thunk_switchSubscription(target: \"monthly\" | \"yearly\"): IThunk {\n  return async (dispatch, getState, env) => {\n    const sku = target === \"monthly\" ? IapHelpers_getSkus().monthly : IapHelpers_getSkus().yearly;\n    IapHelpers_setLoading(dispatch, getState, { [target]: true } as ISubscriptionLoading);\n    if (!env.iap) {\n      IapHelpers_clearLoading(dispatch);\n      return;\n    }\n    try {\n      if (Platform.OS === \"ios\") {\n        // StoreKit applies the subscription group's upgrade/downgrade rules automatically,\n        // so a switch is just a normal purchase of the target sku. Deliberately skips the\n        // already-subscribed guard that the initial-purchase thunks use.\n        await env.iap.requestSubscription({ sku });\n      } else {\n        let active = getState().subscriptionStatus ?? [];\n        if (active.length === 0) {\n          active = await env.iap.getActiveSubscriptions();\n        }\n        const current = active.find((s) => s.isActive && !!s.purchaseTokenAndroid);\n        if (!current?.purchaseTokenAndroid) {\n          IapHelpers_clearLoading(dispatch);\n          Dialog_alert(\"Couldn't find your active subscription to switch. Please try again.\");\n          return;\n        }\n        // monthly→yearly defers to the next billing cycle (short wait, no wasted paid time);\n        // yearly→monthly prorates immediately (a year is too long to wait).\n        const isDeferred = target === \"yearly\";\n        await env.iap.requestSubscription({\n          sku,\n          androidOldPurchaseToken: current.purchaseTokenAndroid,\n          androidOldProductId: current.productId,\n          androidReplacementMode: isDeferred ? \"deferred\" : \"with-time-proration\",\n        });\n        // Android plan changes don't reliably emit a purchase event, so clear the spinner here. The\n        // pending \"Switching to…\" state is read authoritatively from the server (subscriptionsv2\n        // `deferredItemReplacement`) on refresh, but that lags behind Google's deferred RTDN — so set a\n        // short-lived, non-synced optimistic hint to show the card immediately. The refresh reconciles it\n        // against the server and drops it once the server is authoritative (or after it expires).\n        if (isDeferred) {\n          updateState(\n            dispatch,\n            [\n              lb<IState>()\n                .p(\"subscriptionPendingHint\")\n                .record({ productId: sku, until: Date.now() + SUBSCRIPTION_PENDING_HINT_MS }),\n            ],\n            \"Optimistic pending subscription switch\"\n          );\n        }\n        IapHelpers_clearLoading(dispatch);\n        dispatch(Thunk_iapRefreshActiveSubscriptions());\n      }\n    } catch (e) {\n      IapHelpers_clearLoading(dispatch);\n      console.warn(\"IAP switchSubscription failed\", e);\n    }\n  };\n}\n\nexport function Thunk_openManageSubscriptions(): IThunk {\n  return async (_dispatch, _getState, env) => {\n    if (!env.iap) {\n      Dialog_alert(`Manage your subscription from your ${StoreRuntime_storeName()} account settings.`);\n      return;\n    }\n    try {\n      await env.iap.openManageSubscriptions();\n    } catch (e) {\n      console.warn(\"IAP openManageSubscriptions failed\", e);\n    }\n  };\n}\n","// Auto-generated from ./CHANGELOG.md\n// Do not edit manually - run npm run build:markdown to update\n\nexport const content = `<!--\n  This file is the source of truth for the in-app \"What's new?\" modal.\n  It is bundled into the JS at build time by scripts/build-markdown.js.\n\n  Format: each entry is a YAML-frontmatter block delimited by ---.\n  Required keys: date (YYYY-MM-DD), title.\n  Body is markdown. Each paragraph in the body becomes a paragraph in the modal.\n  Use bullet lists (- ...) only when you want bullets to render as actual bullets.\n\n  Custom inline directives:\n    ::icon-discord::, ::icon-doc::, ::icon-swap::, ::icon-help::, ::icon-edit2::, ::icon-preview::\n    Editor mode buttons: ::icon-reorder:: (grid), ::icon-ui-mode:: (per-day UI),\n      ::icon-day-text-mode:: (per-day text), ::icon-full-text-mode:: (full text)\n    [label](internal:/path)        — internal app/website link\n    \\`\\`\\`liftoscript ... \\`\\`\\`          — Liftoscript code block with syntax highlighting\n-->\n\n---\ndate: 2026-10-28\ntitle: Strings support in Liftoscript\n---\n\nLiftoscript now supports strings. The main use is better \\`print()\\` messages, which before could only show numbers and weights:\n\n\\`\\`\\`liftoscript\nprint(\"Hit all reps, adding 5lb. e1RM: \" + calculate1RM(completedWeights[1], completedReps[1]))\n\\`\\`\\`\n\nYou can also check which exercise runs the script. It is handy in templates shared between several exercises. There's a new \\`exercise\\` variable with the exercise name (like \\`t1: Squat\\`), and two new functions:\n\n* \\`isExercise(\"Squat\")\\` - true if it's a Squat, with any label. Add the equipment to be more specific: \\`isExercise(\"Bench Press, Dumbbell\")\\`\n* \\`isProgramExercise(\"t1: Squat\")\\` - matches the exercise with its label, like it's written in the program text\n\n\\`\\`\\`liftoscript\nif (completedReps >= reps) {\n  weights += isExercise(\"Deadlift\") ? 10lb : 5lb\n}\n\\`\\`\\`\n\nYou can store text in \\`var.\\` variables, compare it with \\`==\\` / \\`!=\\`, and join it with \\`+\\`. Text can't go into state variables, weights, reps, etc - you'll get an error for that.\n\n---\ndate: 2026-10-25\ntitle: More muscle groups and a new muscle map\n---\n\nThe muscle groups used to be a bit coarse, as well as the range of sets per muscle group was.\nI dug into existing research, and also into the available literature on weekly volume per muscle group, and what should the muscle groups even be, and ended up with revamped muscle groups:\n\n* Shoulders got split into Front, Side and Rear Delts\n* Back got split into Lats, Upper Back and Lower Back\n* Forearms got split into Forearm Flexors and Forearm Extensors\n\nThere are also new groups - Upper Traps, Neck, Rotator Cuff, Obliques, Hip Flexors, Abductors and Adductors.\n\nFor the weekly set ranges in the program settings, there are now 3 presets:\n\n* Low (4-10 sets)\n* Moderate (10-18 sets)\n* High (18-30 sets)\n\nThe muscle map in the program stats and week insights is new too. It became more detailed, and now highlights the specific muscles you work, including the ones that are not in any group (like serratus or the front of the shins).\n\n---\ndate: 2026-10-20\ntitle: Redesigned the equipment setup\n---\n\nIt used to be that equipment only supported plates load and fixed weights load - you set base, specify plates or fixed weights, and maybe also switch it to \"assisting\" mode for assisted dips/pullups.\n\nFrom now on, there's 5 types of equipment instead:\n\n* Plates - barbell, loaded dumbbells, leverage machines (including multihorn ones), belts, etc\n* Fixed weights - kettlebells, fixed dumbbells, with ability to specify ranges of those\n* Weight stack - cable machines, with additional weights (like magnets) support\n* Bands - with ability to combine them\n* Electric - Voltra, Tonal, etc\n\nYou can now also exclude plates / weights from warmup, for bodyweight-related ones - specify the percentage ratio of bodyweight (e.g. 80% for pullups), change rounding between down/nearest, specify pull ratio for cables, etc etc.\n\nYou can also easily clone the equipment right during the workout, e.g. for cable machines that use a different stack.\n\nPretty big change, but hopefully will make it more flexible for the programs for full gyms with lots of machines.\n\n---\ndate: 2026-10-03\ntitle: Redesigned the web editor\n---\n\nNow the [Web Editor's UI](https://www.liftosaur.com/planner) is matching the UI of the Program tab in the app. It now also got the new \"Reorder\" tab, where\nyou can edit the program structure by dragging things around. Also you don't need to do \"Apply\" from the full mode like before, anything you change in the Full Text automatically gets applied across other tabs as well, so you can switch between tabs freely.\n\nBut for the rest of it - it's the same functionality, just moved things around a bit.\n\n---\ndate: 2026-09-29\ntitle: Show heart rate on the workout screen\n---\n\nOn iOS, it now shows the heart rate (if available) on the workout screen. It takes it from the Apple Watch - if you have them. Alternatively, it can also get the heart rate from AirPods 3 Pro as well.\n\n---\ndate: 2026-09-22\ntitle: Redesign of the workout screen\n---\n\nRedesigned the workout screen. Main goal was to declutter it, make it easier to use with shaking hands after heavy weight, and also ability to see things in distance (e.g. when your phone is laying down on a bench).\n\nSo, did the following changes. For the next set:\n\n* The next set is **expanded** now, gets a large reps/weight fields, plates, and large checkmark button.\n* It also shows the best/last/same day reps/weights underneath.\n* Swiping of a set is gone, there's ::icon-edit2:: icon to edit/delete it now\n* You can expand / collapse sets by tapping on them\n\nAlso:\n\n* Workout/exercise notes are toggleable now, in the kebab or cog menus\n* Delete, help, etc also moved to the kebab menu\n* You reorder exercises now by long-tapping and dragging them\n* AMRAP modal got bigger inputs and buttons\n\nAnd there're also some other minor tweaks here and there.\n\n---\ndate: 2026-09-19\ntitle: Realtime sync on the phone\n---\n\nNow if you update your workouts or programs or anything outside of the app - e.g. via Claude/ChatGPT, via API, from Web Editor, etc - the phone will get the updates in real time. No need to close/open the app anymore.\n\n---\ndate: 2026-09-17\ntitle: Editable preview in bottom sheet Liftoscript editor\n---\n\nThere's a preview icon ::icon-preview:: in the bottom sheet Liftoscript editor on the right of the pills.\nIt shows how the exercise liftoscript looks with all resolved reuses. E.g. if it shows:\n\n\\`\\`\\`liftoscript\nSquat / ...t1\n\\`\\`\\`\nand t1 is defined like\n\n\\`\\`\\`liftoscript\nt1 / used: none / 3x8 100lb\n\\`\\`\\`\n\nit will show\n\n\\`\\`\\`liftoscript\nSquat / 3x8 100lb\n\\`\\`\\`\n\nNow that preview is editable. You can tap e.g. on that \\`100lb\\` in \\`t1\\` and change it to e.g. \\`105lb\\`, and the\noriginal exercise text will have that override - becomes:\n\n\\`\\`\\`liftoscript\nSquat / ...t1 / 105lb\n\\`\\`\\`\n\nIt's useful when you need to tweak some values of the reusing exercise, but they only exist in the reused exercise.\n\n---\ndate: 2026-09-09\ntitle: Time-based exercises: Countdown and unilateral exercises support\n---\n\nThere's now a countdown timer for the time-based exercises. It starts when you approach the end of rest time.\nYou can set it in **Me -> Timers**.\n\nAlso, now the unilateral exercises will present 2 set timers one after another - for the left, and the for right side. With the countdown in-between as well.\n\nCountdown is extracted from the rest time:\n* With \\`30s|60s\\`, and countdown == 5s, your rest time would be \\`55s\\`, and then \\`5s\\` countdown would start. If you want to disable countdown completely on specific exercise.\n* With \\`30s|0s\\` there will be no countdown (and if it's unilateral - no countdown between sides)\n\n---\ndate: 2026-09-01\ntitle: Autocompletion suggestions in freeform mode in Liftoscript editor\n---\n\nNow if in the freeform mode in Liftoscript editor you have autocompletion. It'll suggest the exercise names,\nvariable names in \\`progress\\`/\\`update\\` blocks, the template names when you add reusing, etc etc.\n\n---\ndate: 2026-08-28\ntitle: New grid view for structuring the program\n---\n\nHuge change on the Program screen - the previous ::icon-reorder:: that let you reorder weeks now is waaay more powerful.\n\nNow, that mode shows a calendar-like view grid view of your program. If your exercises span multiple weeks with repeat ranges, you'll see them as a single strip crossing multiple weeks. You can drag the end of that strip to extend it to more weeks - and it'll adjust the repeat ranges.\n\nWhen you select an exercise, it now highlights the template it reuses.\n\nEverything is draggable there, you can long-tap and then drag exercises to reorder within the same day, and across days.\nYou can also drag weeks to reorder them. When you select a day and drag - it drags across all weeks though - because the program layout is usually the same across all weeks, and dragging a single day in a multiweek program likely would break the program.\n\nYou can pinch-zoom the grid to scale the weeks. All that stuff hopefully gives you a good birds-eye view of your entire program (especially useful if it's multiweek), and you can easily restructure across all of the weeks.\n\nYou can also add multiple exercises from the same picker now there.\n\nI'm thinking to eventually remove per-day mode as well (the ::icon-ui-mode:: mode), that new view should do pretty much all the same things. But let me know what you think!\n\nAnd yeah, it was a massive and very complex change, so let me know if you find any bugs or issues - in Discord, Reddit, or by emailing to **info@liftosaur.com**.\n\n---\ndate: 2026-08-17\ntitle: Some Liftoeditor improvements\n---\n\n1. If you tap ::icon-edit2:: icon on the workout screen, it now opens the liftoeditor in a bottomsheet with the current program day, that you can edit.\n\n2. You can reorder exercises in the editor by long-press and dragging them.\n\n3. On the \"Edit Program Exercise\" sheet, there's ::icon-preview:: icon that shows the preview of the exercise with all the reuses filled in.\n\n4. On the \"Edit Program Exercise\" it also will tell you if the progress is defined on some other week/day, and you jump there, or show it right for this week/day, editable.\n\n---\ndate: 2026-08-12\ntitle: Improvements in exercise swapping during workout\n---\n\nWhen you swap an exercise during a workout, it now remembers the last exercises you swapped, and offers them in a \"Recent\" section at the top of the exercise picker. That should make doing repeated swaps faster.\n\nAlso, it used to keep the same weight when you swap to an adhoc exercise. Which only makes sense if you used 1RM percentage weights. But for absolute weights it almost never makes sense.\n\nSo, now it'll try to adjust the weight. It'll try to find the latest weights you did for the same reps in history, and use that weight. If it couldn't - it'll try to find the closest and infer from it. If it couldn't - it'll infer the weights from 1RM.\n\nAnd for warmups - it'll check if you have specific warmup config in your current program for that exercise, and will use that if it's there. Otherwise - just fallback to the default warmups.\n\n---\ndate: 2026-08-11\ntitle: Swapping an exercise now adjusts the weights to match\n---\n\nWhen you swapped an exercise mid-workout, only the exercise changed - the weights stayed exactly as they were. That's fine if your program uses percentages of 1RM, but if it uses absolute weights, you'd swap Leg Press for a Lateral Raise and end up staring at a 500lb lateral raise.\n\nNow the weights come along with the swap. For each set, the app looks at your history for the exercise you're swapping **to**, finds the set closest in reps to what you're about to do, and converts that weight to your target reps and RPE. If the reps and RPE match, you just get the weight you actually lifted last time. Sets with different reps each get their own weight, so a 12/10/8 pyramid comes back as a pyramid.\n\nIf you've never done the new exercise before, it falls back to your 1RM for it, or the exercise's default starting weight if you haven't set one - which is what percentage-based sets have always done on a swap. Either way, correcting it once is enough: your correction becomes history, so the next swap picks it up.\n\nWarmups get rebuilt for the new exercise too - from the warmups your program defines for it if it has any, and from that exercise's defaults otherwise.\n\n---\ndate: 2026-08-10\ntitle: Text size now scales the whole app, and follows your device setting\n---\n\nWhen you had the Aa (for font-size) slider moved to the right, and also increased font-size in your device settings,\nit used to multiply the values, completely breaking the app layout (because the font size became huuuge).\n\nFixed that, now the font size slider is the only thing that controls the app's text size. It also uses the device's font size as the starting point, so if you have a larger system font, the app will start out larger too.\n\nAlso the icons, exercise thumbnails, etc also scale with the text now. Everything scales together!\n\n---\ndate: 2026-08-09\ntitle: Embrace Liftoscript, part 1: Redesign of the \"Edit Program Exercise\" screen\n---\n\nOne of the main sources of confusion and frustration in Liftosaur are the \"Program\" and \"Edit Program Exercise\" screens. They provide the UI to edit the program, but the problem is that the UI maps pretty poorly to Liftoscript.\nAnd Liftoscript is still source of truth. Also, when you edit UI - you have little idea what Liftoscript it'd result to. Users get weird errors they have no idea how to resolve - because errors come from Liftoscript syntax, not UI.\n\nHistorically, I tried to hide the complexity of Liftoscript, trying to lower the learning curve. But IMHO it doesn't work - I just need to be honest and upfront that knowing at least some Liftoscript basics is required to use Liftosaur effectively. So, I'm pivoting to the new approach - embracing Liftoscript!\n\nAs a first step - now \"Edit Program Exercise\" is not a screen anymore, it's a bottom sheet, where you can edit Liftoscript. For that, I created a new native code editor from ground up. Typing code generally is not convenient on a phone, so it solves that by having 'structured' editing mode, where you can tap values, elements, and use the action pills to do actions with them. So, kinda a mix of UI and code. You can swipe between elements, and you can double-tap on text to switch to freeform editing. Each element also shows a hint what it means, so hopefully it helps to learn Liftoscript basics easier.\n\nFor now, it's only \"Edit Program Exercise\" screen, but I will work on replacing all the editors in the app with this new native editor.\n\nI understand it's a quite controversial change, so please let me know your thoughts in Discord, r/liftosaur subreddit, or by email at **info@liftosaur.com**.\n\n---\ndate: 2026-07-19\ntitle: Added Sleep & Nutrition tracking\n---\n\nLiftosaur can now import your sleep duration, dietary calories, and protein from Apple Health or Google Health Connect. To turn it on, go to the Me screen, then scroll to \"Apple Health\" (or \"Google Health Connect\" on Android), and there enable \"Sync Sleep & Nutrition\".\n\nThere's a new \"Sleep & Nutrition\" screen you can enter from the Me tab, with a trend graph and history for each metric. The import is read-only and happens on app open, daily aggregated. You can also soft-delete (hide) it from the list, and unhide if necessary.\n\nThe data also syncs to your account like the rest of your measurements, so it's available through the [REST API](internal:/docs/api) and the [MCP server](internal:/docs/mcp) as a new \\`health\\` measurements category. So you can e.g. ask an AI assistant to correlate your sleep or protein intake with your training performance.\n\nYou need an iOS/Android native app update (from App Store / Google Play) to get this feature.\n\n---\ndate: 2026-07-17\ntitle: Tap a crossed-out weight to see why it was rounded\n---\n\nWhen a set's target shows a crossed-out weight next to another one - that's the app rounding the program's exact weight to what you can actually load with your equipment. It's been a common source of confusion: why is my working weight different from the target? Why is it suddenly 0?\n\nNow the rounded weight is underlined, and you can tap it to get the full explanation: how the target was calculated (e.g. as a percentage of your 1RM), how it was converted between kg and lb, and how it was matched to your equipment - the bar weight, the plates per side, or the closest fixed dumbbell.\n\nIf the equipment is marked as \"Is Assisting\" (like an assisted pull-up machine, where added weight makes the exercise easier), the explanation will call that out too - accidentally enabling it is the usual reason weights unexpectedly drop to 0.\n\nHopefully that'll help to understand why it crosses out the weights!\n\n---\ndate: 2026-07-13\ntitle: More accurate volume for two-dumbbell exercises\n---\n\nVolume and total weight now count both dumbbells for exercises you load with a pair - like dumbbell shoulder press, bench press, rows, lunges, and split squats. The weight you enter for these is per-dumbbell, so previously we only counted one and undercounted the volume by half. Now it's doubled to reflect the real load moved.\n\nThis changes how numbers look in your volume graphs - your dumbbell volume will double compared to before. So, it's somewhat a breaking change.\n\nIf a particular exercise doesn't fit (say you do a single-dumbbell variation), you can turn this off per-exercise: go to Exercise Stats, and toggle \"Two weights (count both)\".\n\n---\ndate: 2026-07-10\ntitle: Added exercise variations (progression ladders)\n---\n\nA single program exercise can now hold multiple movements, and you can switch between them - either automatically as you progress, or by hand. Great for calisthenics progressions, where you graduate from an easier movement to a harder one once you can do enough reps.\n\nList the movements separated by \\`|\\` in the exercise name. The current one is marked with \\`!\\` (the first is current by default):\n\n\\`\\`\\`liftoscript\nSplit Squat | ! Bulgarian Split Squat | Pistol Squat / 3x8 0lb\n\\`\\`\\`\n\nTo advance automatically, use the new \\`exerciseVariationIndex\\` variable in a progress script - it moves to the next movement when your condition is met:\n\n\\`\\`\\`liftoscript\nSquat | Pistol Squat | Front Squat / 3x8 0lb / progress: custom() {~\n  if (completedReps >= reps) {\n    exerciseVariationIndex += 1\n  }\n~}\n\\`\\`\\`\n\nYou can also add, remove, reorder, and switch variations right from the Edit Program Exercise screen - enable \"Exercise Variations\" from the 3-dot menu. The sets, reps, and progress logic are shared across all movements; only the movement itself changes.\n\nNote that if you had a custom exercise with \\`|\\` or \\`!\\` in the name, it will be replaced to \\`-\\` character. If you program used \\`!\\` or \\`|\\` in the exercise names - you may need to tweak it, there's a migration that tries to fix it automatically, but it may miss some cases.\n\n---\ndate: 2026-07-01\ntitle: Added time-based exercises and intervals/circuits support\n---\n\nYou can now time the set itself, not just the rest after it. Great for planks, timed cardio, or any \"hold for X seconds\" exercise. Use the \\`setTimer|restTimer\\` syntax:\n\n\\`\\`\\`liftoscript\nPlank / 3x1 0lb 60s|30s\n\\`\\`\\`\n\nThat's 3 sets of plank, holding each for 60s, then resting 30s. Add \\`+\\` to count up past the target instead of stopping automatically (like \\`30s+|60s\\`). Add \\`auto\\` to auto-advance to the next set when the rest ends - which is how you build circuits like EMOM or Tabata:\n\n\\`\\`\\`liftoscript\n// EMOM - 5 rounds, 5 reps, 1-minute window\nPower Clean / 5x5 135lb 60s|0s auto\n// Tabata - 8 rounds of 20s work / 10s rest\nSquat, Bodyweight / 8x1+ 0lb 20s|10s auto\n\\`\\`\\`\n\nIn the UI (in the app, in Live Activity / Live Update, and in Apple Watch as well), you'll get a set timer modal if the current set has time.\n\nRead more in the [docs](internal:/docs/liftoscript). You need an iOS/Android native app update (from App Store / Google Play) to get this feature.\n\n---\ndate: 2026-06-17\ntitle: Added Apple Watch complications\n---\n\nTo get them - update the app from App Store\n\n---\ndate: 2026-06-15\ntitle: Added API / MCP for body measurements\n---\n\nNow you can manage your body measurements through the API and MCP server - bodyweight, bodyfat, and body parts (neck, chest, waist, biceps, thighs, and the rest).\n\nRead your full measurement history, record new values (with a custom date if you're backfilling), edit a value, or delete one - all from an AI assistant or directly over the REST API.\n\n---\ndate: 2026-06-14\ntitle: Added API / MCP for the equipment and exercise data\n---\n\nNow you can manage your gyms and equipment through API and MCP, as well as managing the exercise data:\n\n* 1RM value\n* Muscle overrides\n* Equipment assigned to exercises\n* Default rounding\n* Whether the exercise is unilateral\n* Exercise persistent notes\n\n---\ndate: 2026-06-13\ntitle: Added subscription management to the Account screen\n---\n\nIt was somewhat confusing that you couldn't see your current subscription status within the app, so I added it\nto the Account screen. So now you see what's your subscription status there, and can manage it from there as well.\n\n---\ndate: 2026-06-08\ntitle: Improved import history flow\n---\n\nImport history although a pretty rarely used feature - is one of the most dangerous. With slightly wrong CSV file,\nyou can massively mess up your workout history, and cleaning it up or restoring the account may be hard and painful.\n\nNow that functionality is way less destructive. When you import Liftosaur CSV or Hevy CSV, it'll show you\na preview screen, where it will display:\n\n* The workout history preview - the way you'd see it on the Home screen\n* Warnings - like if some weights or reps look suspicious, if there are duplicated workouts, if dates look wrong, etc\n* Summary stats - like how many workouts, exercises, sets, etc would be imported\n* The list of custom exercises that would be created by the import\n\nAnd after your import it - there's still a way to \"undo\" the import - you can go to Me -> Recent Imports, and there you'll see the list of 5 last imports, with the option to undo each of them. Undoing the import would remove all workouts that were imported in that import, as well as custom exercises that were created in that import (unless they already used in other workouts or programs).\n\n---\ndate: 2026-05-31\ntitle: New native iOS and Android apps\n---\n\nBefore, the iOS and Android Liftosaur apps were webapps. Basically, a site, that is rendered inside a little browser window, wrapped as a native app. It worked fine, but didn't have that native feeling, screen navigations, gestures, native-looking modals, etc.\n\nFrom now on, the new versions of the apps on App Store and Google Play are native apps. They look the same, but have smoother animations, native navigation and modals. Update and check them out!\n\nThat was a massive ground-up rewrite of Liftosaur, so in case you find any bugs - please let me know in Discord or at **info@liftosaur.com**!\n\n---\ndate: 2026-05-02\ntitle: Huge update where nothing changed\n---\n\nIn preparation for migrating the app from a webapp (like it is right now) to a native app, I had to do a massive rewrite of the whole codebase. But the functionality stays the same. The only difference is graphs look slightly different (had to rewrite the graphs engine from the scratch).\n\nSo, in case you find any new bugs after this - please let me know in Discord or at **info@liftosaur.com**. Thanks!\n\n---\ndate: 2026-03-16\ntitle: Added \"tour\" modals\n---\n\nIf you're a new user (did less than 4 workouts), you'll see a \"tour\" modal on key screens in the app - **workout screen**, **program editor**, and **program exercise editor**. It walks you through the key features of each screen, so you don't miss out on anything important. You can also access those tours anytime by tapping the ::icon-help:: in the top right corner of those screens.\n\n---\ndate: 2026-03-08\ntitle: MCP Server and REST API\n---\n\nLiftosaur now has an [MCP server](internal:/docs/mcp) - connect AI assistants like Claude, ChatGPT, or Gemini to manage your programs and workout history through natural conversation. Ask the AI to create programs, tweak progressions, log workouts, or analyze your training - it knows Liftoscript and can do it all for you.\n\nThere's also a [REST API](internal:/docs/api) - if you want direct programmatic access. Generate an API key in Settings and make HTTP requests to create programs, log workouts, simulate progressions, pull stats, etc.\n\nBoth require a premium subscription.\n\n---\ndate: 2026-03-03\ntitle: Export workouts as text\n---\n\nYou can now copy your workout as a compact text format. After finishing a workout, tap the \"Text\" button on the finish screen, or open any past workout from history and use the share menu to copy as text.\n\nThe text format is human-readable and can be pasted into notes, messages, or social media.\n\n---\ndate: 2026-02-28\ntitle: Improved Double Progression (dp) to support rep ranges\n---\n\nDouble Progression now properly handles rep range exercises (like 3x8-12). It auto-detects whether your exercise uses ranges, and progressively narrows the range from below until you hit the top, then increases weight and resets.\n\nFor non-range exercises (like 3x8), it works as before — increasing reps from min to max, then bumping weight and resetting reps.\n\nIf you adjust weight during a workout (e.g. the programmed weight wasn't available), the next weight increase will now be based on the weight you actually used, not the originally programmed weight.\n\n---\ndate: 2026-02-22\ntitle: New /programs page on the liftosaur.com site\n---\n\nNot the app, but the site update. There's now the /programs page on the liftosaur.com site, where you can find all the programs available in the app, along with full description (pros/cons, program philosophy, how to run it, etc), preview, Liftoscript code, etc.\n\nIf you're currently figuring out the next program, it could be a great resource to check it out, compare different programs, and pick the one that suits you the best.\n\n---\ndate: 2026-02-08\ntitle: Exerciser Picker by default now hides exercises with hidden equipment\n---\n\nIf you hide some equipment in the \"Available Equipment\" screen, it used to not affect exercise picker, it still was showing e.g. cable, smith machine, etc exercises even though you disabled them in the \"Available Equipment\".\n\nSo from now on, those exercises are hidden. You still can make them show if you tap the checkmark in the filter section inside the exercise picker.\n\nAlso, sorting order (by Name, by Similar Muscles) persists between picker opens from now on.\n\n---\ndate: 2026-01-29\ntitle: ⌚ Add Apple Watch Support\n---\n\nIf you have Premium and iPhone, you can now use Liftosaur on your Apple Watch to track your workouts. You can complete sets, see rest timers, view upcoming exercises, etc. You cannot modify the workout though (like change exercises or add sets, or change targets), for that you'll need to grab your phone.\n\nMake sure to update the native iOS app to >= 6.31 to get the Watch app as well.\n\nThat was a huge and complex project, so definitely let me know if you notice any bugs or issues - in Discord, Reddit, or by [info@liftosaur.com](mailto:info@liftosaur.com)\n\n---\ndate: 2026-01-24\ntitle: Workout now syncs to Apple/Google health when you finish a workout\n---\n\nPreviously, the workout would sync to Apple or Google health when you tap \"Continue\" on the \"Congratulations\" screen. But some users never did that, exiting the app right after they finished a workout, so the workout never got synced to Apple/Google Health.\n\nSo, now the workout syncs to Apple/Google Health right when you finish a workout. You can toggle \"Ask for confirmation\" in the Health settings, if you want. Without it, it just will always submit the workout right away.\n\nYou can also submit past workouts to Apple/Google Health - if you open a past workout, and tap the share icon - there'll be an option to \"Sync to Apple/Google Health\".\n\n---\ndate: 2026-01-20\ntitle: The current ongoing workout now syncs to the server\n---\n\nPreviously, if you start a workout e.g. on a phone, and then open a webapp, you won't be able to see it there. The ongoing workout would only exist locally, and syncs to the server when you finish it.\n\nFrom now on, the ongoing workout also syncs to the server. So, you can start a workout on a phone, but continue in the webapp, and then switch back to phone.\n\n---\ndate: 2026-01-03\ntitle: Changes in progress - lp() and dp() behavior\n---\n\nIf you omit the weight in the program initially, like this:\n\n\\`\\`\\`liftoscript\nSquat / 3x8 / progress: lp(5lb)\n\\`\\`\\`\n\nthe **lp** and **dp** behave weird. They consider the program weight as 0lb, add 5lb to it, and the program weight becomes 5lb. But user may entered e.g. 100lb there for each set, and then they see 5lb as the weight next time, and got confused.\n\nTo address that, there're 2 breaking changes in lp/dp built-in progressions:\n\n- If the weight wasn't specified in the program, it'll set the completed weights to the program.\n- It will increment based on the completed weight, not the target weight in the program from now on.\n\n---\ndate: 2025-11-25\ntitle: Added Live Updates on Android\n---\n\nSimilarly to iOS, there's now Live Updates notification on the lock screen, with the timer, next exercise, set, reps, weights, plates, etc.\n\nYou can adjust the rest timer from there, or complete a set.\n\nThere's also rest timer in the little chip near the clock, which is shown if you're currently in another app.\n\nIt's a **Premium feature**, so you'd need to have Premium subscription to use it.\n\n---\ndate: 2025-11-23\ntitle: Added Live Activity / Dynamic Island on iOS\n---\n\nOn the lock screen, it'll show Live Activity, with the timer, next exercise, set, reps, weights, plates, etc.\n\nYou can adjust the rest timer from there, or complete a set.\n\nThere's also rest timer in the **dynamic island**, and if you long press it - it'll expand into the same info as in the live activity.\n\nIt's a **Premium feature**, so you'd need to have Premium subscription to use it.\n\n---\ndate: 2025-11-09\ntitle: Added unilateral exercise support\n---\n\nFor unilateral exercises (like one-arm dumbbell rows, bicep curls, bulgarian split squats, etc) you can now specify reps per side. It's enabled by default for built-in unilateral exercises, but you can override it on the Exercise Stats screen, via \"Is Unilateral\" checkbox.\n\nThe volume is calculated by summing up reps from both sides. The e1RM is calculated by taking the average from reps of both sides.\n\n---\ndate: 2025-11-03\ntitle: Added ability to customize muscle groups\n---\n\nIf you don't like the current split by muscle group, you can customize it now! Go to Me -> Muscle Groups, and you can hide built-in muscle groups, and create new ones.\n\nFor example, you may want to have Front/Side/Rear delts instead of just \"Shoulders\", or Upper/Lower Back instead of just \"Back\".\n\nYou can also customize it through the \"Planner Settings\" modal (where you set up set ranges for muscle groups), both inside of the app, and in the web editor.\n\n---\ndate: 2025-11-01\ntitle: Add supersets\n---\n\nNow you can add exercises to superset groups, and within that group it will switch between exercises each time you finish a workout set. E.g. if you have 3 exercises in a superset group, you'd do 1 set of the first exercise, it'll switch to the seocond exercise, you finish a set there, it'll switch to the third exercise, and then back to the first one again.\n\nYou can set those groups both in a program and in a workout. In a program, you can do it both in the text and UI. In the text, it looks like this:\n\n\\`\\`\\`liftoscript\nSquat / 3x8 / superset: A\nDeadlift / 3x8 / superset: A\nBent Over Row / 3x8 / superset: A\n\\`\\`\\`\n\nSo, you add **superset: GROUP_NAME** to each exercise you want to be in a superset group. GROUP_NAME could be any string, e.g. A, B, ChestDay1, etc.\n\nThere's a new timer setting for the rest timers within supersets - in Me -> Timers. It takes precedence over the default rest timer, but the per-set rest timers take precedence over both.\n\nThe supersets will be highlighted by a colored line on the bottom side of exercise thumbnails during workout, as well as within the exercise card.\n\n---\ndate: 2025-10-13\ntitle: Override target/synergist muscles of exercises with custom synergist multipliers\n---\n\nIf you disagree with the built-in target/synergist muscles of some exercise, you can now override them! Go to the Exercise Stats screen (e.g. from Me - Exercises), and tap on \"Override Muscles\" at the very top. You can choose the muscles and the multiplier there. If it's **1** - it's a target muscle, if less than 1 - it's a synergist muscle. This will be taken into account in the week insights, in the week volume stats on the Program screen, on the graphs, etc.\n\n---\ndate: 2025-10-01\ntitle: Added estimated 1 Rep Max column to the workout screen\n---\n\nIf you tap on the swap icon at the second column header (where the \"Target\" is) - the last variant would be the estimated 1 Rep Max for the set. Would be semi-transparent for non-completed set, and solid for completed set. It uses completed reps/weight/RPE for calculation, but if not available yet - uses target reps/weight/RPE.\n\n---\ndate: 2025-09-24\ntitle: 🏋️‍♂️ Improved custom exercises\n---\n\nAdded a bunch of changes to address most requests/feedback about the custom exercises:\n\n- People noted it's hard to add target/synergist muscles because you don't know on the top of your head what muscles exercise works, and from what muscle group each muscle is. So now:\n  1. Each muscle has a **little image**\n  2. They're **grouped by a muscle group**\n  3. There's **\"Autofill\"** button, that tries to prefill all the muscles/types based on the exercise name using AI.\n- Added ability to **add exercise notes** to the custom exercise form as well\n- You now can **upload an image** for a custom exercise from your phone (it requires being signed up though, to avoid abusing API for uploading images).\n- You also can pick an image from **\"Image library\"** for your custom exercise. The Image Library has images of built-in exercises, as well as previously uploaded ones.\n- You can **clone from existing** built-in (or existing custom) exercises, and it will prefill the image, the muscles and the types of the cloned exercise to your custom one.\n\nThere's one **breaking change** though - you won't be able to specify URLs of images anymore for custom exercises. It was a temporary hack (which survived for like 2 years!), and external images sometimes don't work if you generate workout or program images. It still will work for existing exercises, but you won't be able to change their image URLs anymore. You can only change the image there by uploading a new one, or picking from a library.\n\n---\ndate: 2025-09-14\ntitle: Exercise and equipment notes\n---\n\nYou can now add exercise and equipment notes.\n\nThose are not tied to a program, those are associated with exercises or equipment. You can use exercise notes to e.g. list form cues for a specific exercise, and the equipment notes to e.g. list tweaks of equipment, e.g. bench angle, cable setup, etc.\n\nSo, this way you have 3 note types in the app:\n\n- **Program exercise description** - the ones you add right in the program text via **// comment**. You can use them to add program-specific details for the exercise, e.g. progression explanation.\n- **Exercise notes** - those would be not tied to a program, but to an exercise. You can use them to add general notes for the exercise, e.g. form cues. You can edit them on the Exercise Stats screen.\n- **Equipment notes** - those would be tied to a specific equipment. You can use them to add details about the equipment, e.g. bench angle, cable setup, etc. You can edit them on the Available Equipment screen.\n\nAll of them would be displayed on the workout screen.\n\nAlso, from now on the previous workout exercise note only would be displayed for two months on the workout screen.\n\n---\ndate: 2025-09-05\ntitle: Preview tab on the Program screen now changes 1RM/Equipment/State vars\n---\n\nIt used to be ephemeral like Playground, but it's non obvious that it behaves that way. Also, seems like a lot of people go there after cloning a program, so this is the place where they'd expect to configure equipment and 1RMs.\n\nSo, now you can change 1RM and Equipment there, adjust state variables, and all those changes would be persisted.\n\nTapping on the name or exercise image also goes to the Exercise Stats screen.\n\n---\ndate: 2025-09-04\ntitle: Add new variables - 'amraps', 'logrpes' and 'askweights'\n---\n\nThey allow to mark a set AMRAP, ask for actual RPE after completing a set or ask for actual weight. Basically the same as adding **+** after appropriate value.\n\nYou can use them in exactly the same way you use **reps** or **weights**.\n\nTo disable, assign 0 to them, to enable - assign any non-zero value. E.g.:\n\n\\`\\`\\`liftoscript\nSquat / 3x8 100lb / progress: custom() {~\n  amraps = 1  // Mark all sets AMRAP\n  askweights[ns] = 1 // Ask for the last set actual weight\n~}\n\\`\\`\\`\n\n---\ndate: 2025-08-30\ntitle: Bar == Bodyweight and \"Assisted\" equipment\n---\n\nYou can now set the bar == your current bodyweight, and also switch the equipment to \"Assisted\" mode.\n\nIf the equipment is in the \"Assisted\" mode, the plates calculator will show the plates you need to add to reduce the weight, not to add to it.\n\nThis is mostly useful for e.g. assisted pull ups or dips. You can set the bar to your bodyweight, check \"Is Assisted\", and enter the plates you have for the leverage machine. It will round to the weight to bodyweight minus plates, so properly would show what you need to load on the machine.\n\n---\ndate: 2025-08-26\ntitle: 🌑 Dark Theme\n---\n\nNow there's Dark Theme! By default it uses your phone's current system theme (Dark or Light), but you can override it in Me - Appearance - Dark mode.\n\nMake sure to update iOS or Android native apps too, otherwise there'll be some parts that are not dark.\n\nLet me know if some colors look weird or contrast is bad - info@liftosaur.com, or our Discord or /r/liftosaur subreddit.\n\n---\ndate: 2025-08-13\ntitle: Hiding equipment, and changes in default exercise equipment\n---\n\nNow you can hide the built-in equipment you don't have / not going to use on the \"Available Equipment\" screen.\n\nAlso **POTENTIALLY BREAKING CHANGE** - if you never ever set the equipment for some exercises, it will be automatically set to matching equipment now. E.g. the exercise is **Bench Press, Barbell** - it will have **Barbell** equipment set by default - only if you never set it before (and it was **None**).\n\nDid that because there was a lot of confusion for new users - like why they set up Barbell equipment, but it's not applied to barbell exercises by default.\n\n---\ndate: 2025-08-10\ntitle: Redesign of the exercise picker\n---\n\nRedesigned the exercise picker. The biggest change is that now you can add/edit not only ad-hoc, but also **program exercises from the current program**, both used and unused. They'll be added with all their sets, and will run the progression logic on workout completion.\n\nSo, now you can define a bunch of unused exercises you may want to switch to (e.g. if some machines are often busy in your gym - you can define alternatives), and quickly add / replace them during the workout.\n\nThere's also ability to \"star\" exercises, so you can quickly find them in the future. There're redesigned filters, with images for each muscle and muscle group. **Substitute** tab is gone, and replaced by sorting by similar muscles (which is exactly the same) in the filters section.\n\nWhen you add exercises to a workout, you can pick multiple exercises now. And when you start an ad-hoc workout, the picker will be open automatically, so you can add exercises right away.\n\nHopefully the whole experience now makes more sense, and it's more logical - you can either add an ad-hoc exercise (and then you set up the sets yourself), or you add program exercise, and it behaves like you defined it in the program.\n\n---\ndate: 2025-07-06\ntitle: Improved syncing mechanism\n---\n\nRewrote the syncing mechanism to make it more reliable, and resolve conflicts better. Ideally you shouldn't notice any changes, and hopefully it'll prevent rare cases when the app doesn't data sync properly between the web editor, web app, and phone app.\n\nIt's a HUGE under the hood change, so if you notice any issues with syncing - please let me know at **info@liftosaur.com** or via Discord/Reddit.\n\n---\ndate: 2025-06-22\ntitle: Added bodyweight varaible\n---\n\nNow there's a **bodyweight** variable that would return the latest bodyweight moving average from **Measurements** screen. You can use it e.g. for pull ups or some other bodyweight exercises.\n\n\\`\\`\\`liftoscript\nPull Up / 3x8 0lb / update: custom() {~\n  if (setIndex == 0) {\n    weights = bodyweight\n  }\n~}\n\\`\\`\\`\n\n---\ndate: 2025-06-21\ntitle: Added increment() and decrement() functions\n---\n\nThey'll accept a weight, and return the previous/next possible weight based on your equipment. E.g. if you have 2x2.5lb smallest plates, **increment()** would increase the weight by 5lb. Or if you have 10lb and then 20lb fixed dumbbells, it would increment by 10lb. Use it like this:\n\n\\`\\`\\`liftoscript\nSquat / 3x8 100lb / progress: custom() {~\n  weights = increment(weights[1])\n~}\n\\`\\`\\`\n\nSame thing for **decrement()**. They work exactly the same way as the +/- buttons on the weight keyboard\n\n---\ndate: 2025-06-19\ntitle: AI prompt generator\n---\n\nTo help you write Liftoscript, there's now a page - [liftosaur.com/ai/prompt](internal:/ai/prompt) - that you could use to generate a prompt e.g. for ChatGPT, Claude, Gemini, etc that would help you to write your program in Liftoscript. It combines all the documentation and a bunch of examples into that huge prompt, and you can copy it, and paste into AI or your choice, and it'll generate a program for you.\n\nIt's not perfect, and sometimes makes mistakes - in that case just copy the errors back to AI chat, and it should be able to fix them.\n\nYou can also paste a URL to some web page, or even a google sheet into the input field on that page, and it will try to generate a program from there.\n\nCurrently works best with Claude, but should provide decent results with ChatGPT too.\n\nYou can access it through the website, tap on \"AI Helper\" at the nav bar.\n\n---\ndate: 2025-06-13\ntitle: Suppressing progress\n---\n\nNow you can suppress progress for an exercise, if you won't want it to run the progress logic and updates weights/reps/etc after finishing a workout.\n\nFor that, after finishing all sets of an exercise, tap \"Suppress\" link near the progress changes info.\n\nSuper optional, but sometimes you may want to do it.\n\n---\ndate: 2025-06-07\ntitle: Redesigned the \"Program\" screen\n---\n\nMade the structure more logical - now there're very prominent tabs for Editing and for Playground, and also 4 icons/tabs to switch between sorting, UI mode, per day code mode and full code mode.\n\nAlso, when you edit a program exercise - it navigates to a separate \"Edit Program Exercise\" screen. On that screen you can edit everything related to the exercise - sets, warmups, descriptions, as well as progress and update logic.\n\nSo from now on, everything you could do in the full text mode is pretty much possible to do via UI, including custom progressions and updates.\n\nAlso, you can go straight to that \"Edit Program Exercise\" screen from the workout screen - so if you need to quickly tweak warmups or e.g. adjust weight for the program exercise during workout - it's now easier to do so.\n\nIt's a **VERY large and complex change**, so if you notice any issues / bugs / etc - don't hesitate to email me at **info@liftosaur.com**, or contact me via Discord/Reddit.\n\n---\ndate: 2025-04-24\ntitle: Redesigned \"Choose Program\" screen\n---\n\nIt now has filters (by frequency, duration of a workout, experience, etc) to help you find a suitable program.\n\nBuiltin and your programs are now separated into separate tabs, and the cards for your programs look similar to built-in programs.\n\nAlso, you can skip selecting a program now, and go without a program. Could be useful if you want to build a program iteratively over time from ad-hoc workouts.\n\n---\ndate: 2025-04-21\ntitle: Sets are now optional in the program\n---\n\nIf you don't specify any sets for an exercise - it won't be an error anymore. So, a program like this is a valid program now:\n\n\\`\\`\\`liftoscript\nSquat\nBench Press\nBicep Curl\n\\`\\`\\`\n\nIt could be also useful for \"templates\", where you could define a template without sets, but e.g. with progress and warmups:\n\n\\`\\`\\`liftoscript\nmain / used: none / warmup: 1x5 45lb, 1x5 135lb / progress: lp(5lb)\nSquat / 3x8 100lb / ...main\n\\`\\`\\`\n\nOne **BREAKING CHANGE** is that if you don't specify the weight - it won't add 1RM percentage anymore based on reps/RPE. It'd be just empty weight field now, and will ask you about the weight on completion.\n\n---\ndate: 2025-04-17\ntitle: Add a way to create program days from Ad-hoc workouts\n---\n\nIf you did an ad-hoc workout, you may want to create a program day from it (either in a new or existing program) - so you could do it again, or incorporate it into your programs.\n\nIt also lowers the barrier for creating programs - you don't have to create programs upfront, you can build them over time iteratively. You do ad-hoc workouts, then create program days from it, slap some progression logic on top of it, and you're good to go.\n\nYou can do that either after finishing the workout - from the congratulations screen, or if you tap on the past workout on Home screen.\n\n---\ndate: 2025-04-13\ntitle: Add \"programNumberOfSets\" and \"completedNumberOfSets\" read-only variables\n---\n\nThose could be useful for number of sets-based progressions.\n\nCurrently, there is **numberOfSets** variable, but it only shows how many sets currently in the workout total. There's currently no way to read how many sets are in the program for that week/day, or how many sets is currently completed.\n\nThose 2 new variables return that. You can use them both in the progress and update scripts.\n\n---\ndate: 2025-04-09\ntitle: 📅 Tweaked the Calendar (Home screen)\n---\n\nBringing back the infinite scroll to the Home screen!\n\nA few months ago I added calendar to the Home screen, and removed the infinite scroll, showing only the currently selected week workouts instead.\n\nThe downside of that was that now the scrolling happens in 2 directions - horizontally (switching weeks) and vertically (scrolling the workouts) - not as convenient. Also, it used to be nice to see the currently ongoing workout on the top of the screen - that was removed with per-week workouts.\n\nSo, now the infinite scroll is back, and it will show the currently ongoing workout (if any) at the top of home screen. While you're scrolling the list, it will update the week insights and week calendar on top. And if you open the month calendar (by tapping on the week calendar) and then tap on the workout there - it will scroll to that workout.\n\n---\ndate: 2025-03-30\ntitle: New Workout Screen!\n---\n\nWorkout screen was completely redesigned.\n\nIt now looks closer to all the rest of the workout apps, where each row is a set, and reps and weights are input fields. It still will prefill the fields with the values from the program, but you can change them if necessary. You don't need to change the fields though, just tap the checkmark if they already look right.\n\nThe **Target** column contains the requirements for the set - from the program. We still use the same color coding to distinguish between success sets (green), failed sets (red) and in-range sets (yellow).\n\nYou can swipe the sets, to edit the target, or delete the set.\n\nInstead of one long list with all exercises, now there're tabs for each exercise at the top, and you can see the progress of each exercise there. Under each exercise there's graphs and history for that exercise.\n\n🚨 **There's a breaking change!!!** 🚨. Completed weights now are contained in the **completedWeights** array var (used to be in **weights**). **weights** now contains the program weights. There's automated migration that should run and theoretically you don't need to do anything, but check your scripts to make sure it looks good.\n\n---\ndate: 2025-03-09\ntitle: Big changes in Liftoscript reuse syntax\n---\n\nThe reuse syntax like **Squat / ...Bench Press** just became way more powerful.\n\n- It now reuses **progress** and **update** scripts as well, including built-in like **lp** or **dp**.\n- For \"template\" exercises (the **/ used: none /** ones) it's not required to have a custom or built-in exercise matching the name anymore. So, you can name your templates like **T1** or something like that, and don't create custom exercises with **T1** name.\n- If you reuse **progress: custom()**, you don't have to list all the state variables again in the reusing **progress: custom()** arguments. They will be inherited, you only need to list the ones that have different value from the original ones.\n- You can reuse exercises with multiple set variations too now.\n\nIt's a slightly breaking change because if you previously used **...Squat** it didn't reuse progress and update scripts, and now it does. So, if you want to reuse everything except progress/update - you'd need to overwrite them in the reusing exercise, like:\n\n\\`\\`\\`liftoscript\nSquat / ...Bench Press / progress: custom() {~ ~}\n\\`\\`\\`\n\n---\ndate: 2025-03-05\ntitle: Added negative weights support\n---\n\nYou can now use negative values for weights, e.g. **-5lb**.\n\nThat could be useful e.g. for the assisted Pull Ups with Leverage Machine, e.g. you can define it as:\n\n\\`\\`\\`liftoscript\nPull Up / 3x8 40lb / progress: lp(-5lb)\n\\`\\`\\`\n\nand it will decrease the weight you load on the machine by 5lb each time you finish a workout.\n\nOr you could do it like:\n\n\\`\\`\\`liftoscript\nPull Up / 3x8 -40lb / progress: lp(5lb)\n\\`\\`\\`\n\ni.e. use negative weight as a base, and incrementing it over time.\n\n---\ndate: 2025-03-04\ntitle: Massive update where nothing is changed\n---\n\nI rewrote the Liftoscript engine from the ground up, to simplify it and remove the dependency on the old-style programs. It's now way easier to add new features to it, but that also means I'm replacing a system that was battle-tested for years with a new one. So, there could be bugs.\n\nIn case you see any issues with the Liftoscript or your programs - please please please let me know at **info@liftosaur.com**! Please include the account name (from Me -> Account) in the email. Thanks!\n\n---\ndate: 2025-02-10\ntitle: 📅 Added calendar\n---\n\nNow instead of a flat list of workouts on the Workout History screen, there's a calendar now.\n\nAt the top there's week calendar now, that you can swipe left and right to change the week. If you tap it - it opens monthly calendar.\n\nYou can switch whether a week starts from Monday or Sunday in Settings.\n\n---\ndate: 2025-02-02\ntitle: Redesigning the navigation\n---\n\nChanging the navigation quite drastically, to accomodate upcoming calendar. The following things changed:\n\n- Footer buttons got changed - now there's \"Home\" for the history, \"Settings\" is renamed to \"Me\", and **\"Measurements\" got moved into \"Me\"**.\n- To start a new workout, tap the Dumbbell button in the footer. **No way to start a workout from the history screen anymore!**\n- If there's ongoing workout, tap the Dumbbell button again to get back to it.\n- Each button in the footer resets the navigation stack. So if you go from Home to Program, there'd be no \"Back\" button. This is to make the app navigation more similar to other apps (like Instagram, Facebook, etc)\n\n---\ndate: 2025-01-19\ntitle: Redesigned the sets, and added PRs to history/exercise stats\n---\n\nChanged what the sets (on the history screen, in the program, etc) look like - now they laid out vertically, and it's easier to scan weight/reps for the sets.\n\nAlso added PRs indication to the history and to the exercise stats screens - highlighting if some set was a PR.\n\n---\ndate: 2025-01-17\ntitle: Share workouts on Social Media\n---\n\nYou can share your finished workouts on Instagram (and once Tiktok approves Liftosaur app - on Tiktok)\n\nYou can do it from the congratulations screen, or if you tap on one of the past workouts. This replaces outdated \"Share\" functionality where you could share via a post on Facebook or Twitter.\n\nIt generates an image of a workout that you could share on some default background, or use your photo as a background. Or you can just generate a workout image via \"... More\" menu, and share it through native share sheet.\n\n---\ndate: 2024-12-23\ntitle: Added a way to generate program images\n---\n\nYou can share them in the social media, chats, etc.\n\nYou can configure what the image would look like - how many columns (days) would it have, what days to include, etc.\n\nAvailable in the Web Editor (the picture icon on the right), or in the kebab menu in the top right corner on the Program screen in the app.\n\n---\ndate: 2024-12-14\ntitle: Added day/week descriptions\n---\n\nNow you can add week and day descriptions, in Markdown format. Current week description will be shown on the history screen, and the day description will be shown on the ongoing workout screen.\n\nYou can do that through UI, or in the full program mode you just add comments above the day or week, similarly how you do that for the exercises. Like:\n\n\\`\\`\\`liftoscript\n// This is a description for week 1\n// * Do this\n// * Then do that\n# Week 1\n\n// This is a description for day 1\n// **Do those exercises:**\n## Day 1\n\nSquat / 5x5 / progress: lp(5lb)\n\\`\\`\\`\n\n---\ndate: 2024-12-08\ntitle: Added \\`print\\` function\n---\n\nUseful for debugging your scripts. Use it like:\n\n\\`\\`\\`liftoscript\nSquat / 3x3 / progress: custom() {~\n  print(1, completedReps[1])\n~}\n\\`\\`\\`\n\nIt accepts any number of arguments, and outputs them in the playground or during a workout. Unfortunately Liftoscript still doesn't support strings, but you can use numbers to distinguish prints, like:\n\n\\`\\`\\`liftoscript\nSquat / 3x3 / progress: custom() {~\n  var.a = 10%\n  print(1, completedReps[1])\n  print(2, 30lb)\n  print(3, var.a)\n~}\n\\`\\`\\`\n\nYou can use them both in **progress** and **update** scripts.\n\n---\ndate: 2024-12-07\ntitle: Added ongoing workout reminder push notification\n---\n\nIn case you forget to finish the workout, there will be an additional push notification that will remind you that you have an ongoing workout.\n\nIt's mostly useful if you keep forgetting to finish it, and then you open it in like 5 hours, and it syncs to Apple/Google Health, and your calories stats go crazy.\n\nYou can control the delay when it will notify you on the Settings - Timers screen. By default it's set to 15 minutes.\n\nYou need to update the app from App Store or Google Play to get the feature.\n\n---\ndate: 2024-11-30\ntitle: Added Week Insights\n---\n\nAfter each week workouts on the Workout History screen - there'll be a card with \"Week Insights\".\n\nIt's pretty much the same as \"Week Stats\" on the Program screen, but for the actual week - it'll show how many sets total, hypertrophy/strength split, sets per muscle group you did with the workouts that week.\n\nIt can help you analyze your performace in case you skipped workouts, or did Ad-Hoc workouts, or mixed different programs.\n\nIt's a Premium-only feature! 💵\n\n---\ndate: 2024-11-17\ntitle: Added some convenience shortcuts\n---\n\nNow you can change the next day or start empty (\"Ad-Hoc\") workout from the history screen.\n\nOn the workout screen there's \"Equipment\" and (if exercises uses it) - \"1RM\" links. They open modal to edit those, and in Equipment you can define availables plates right from the modal.\n\nAdded big bold \"Start\" and \"Continue\" buttons to the start workout card, because some new users were confused how to start a workout.\n\n---\ndate: 2024-11-09\ntitle: Improve experience with kg units\n---\n\nNow all the newly cloned programs will be automatically converted to the unit (kg or lb) you have selected in Settings. And if you import a program via link, and it has different units from the Settings one, it'll ask you if you want to convert into the Settings units.\n\nAlso, for the new users the app will ask to pick your units before choosing a program.\n\n---\ndate: 2024-11-03\ntitle: Change numberOfSets in progress scripts\n---\n\nNow you can change **numberOfSets** in the progress scripts. So, sets based progressions just got way easier to do. Before you had to use either **numsets** state variable + update script, or use multiple set variations. Now you can just do **numberOfSets = 4** or **numberOfSets += 1** in your progress scripts.\n\n**numberOfSets** also behaves a bit differently now both in **progress** and **update** scripts - if you add sets, it'll add them the same as the last set you had before. So, most of the time you don't need to pair it with the **sets()** function anymore. E.g. if you have **2x4, 3x8 / 100lb** and you do **numberOfSets += 1** - you'll end up with **2x4, 4x8 / 100lb**.\n\nIn **progress** scripts you can also specify what week/day/set variation specifically you want to change number of sets for, by doing **numberOfSets[week:day:setvariation] = 3**, for example: **numberOfSets[2:*:2] = 3**.\n\n---\ndate: 2024-10-11\ntitle: Apple Health and Google Health Connect integration\n---\n\nNow you can submit workouts and body measurements to **Apple Health** and **Google Health Connect**.\n\nFor the body measurements - it will submit your bodyweight, body fat, and (Apple Health only) - waist circumference.\n\nIt will also read the bodyweight/bodyfat and (Apple Health only) waist circumference from Apple Health or Google Health Connect, and add them to the app.\n\nYou can enable that in the Settings - Sync - Apple (or Google) Health.\n\nIt's available for **Android 14** and for **iOS 15** and higher.\n\n---\ndate: 2024-09-22\ntitle: Pausing a workout\n---\n\nYou can now pause the workout, by tapping the pause button in the workout screen header. It'll stop the total workout timer.\n\nYou can unpause it the same way, or just log any set - it'll unpause it too.\n\n---\ndate: 2024-09-14\ntitle: Custom unit (lb/kg) for equipment\n---\n\nNow equipment can override the default unit (lb or kg).\n\nThe weight of an exercise would be converted to that unit if that equipment is attached to the exercise. You would see the weight in that unit in the history too, but not on graphs - graphs still use default unit.\n\nThat could be useful if you have equipment with different units in your gym - like some machines are in lb, some plates are in kg - that way you can properly track all of them.\n\nTo make it even better - you may want to use a matching unit in the program exercise as well, to avoid any conversions at all. Like if you live in the US, and you have default unit as lbs, but the gym you usually go has \"Lat Pulldown\" cable machine in kgs - it makes sense to specify weights in kg for Lat Pulldown, and set it to the kg-based equipment.\n\n---\ndate: 2024-08-25\ntitle: 💸 Introducing localized pricing\n---\n\nIt was a bit unfair to ask the same price for users from US and e.g. Afganistan or Phillipines, since the purchasing power is so different in those countries.\n\nSo now the pricing is adjusted according to the country GDP per capita. E.g. it now costs **$5/$40/$80** for monthly/yearly/lifetime in **US**, and **$2.5/$20/$40** in **Turkey**, and **$1/$8/$16** in **Phillipines**.\n\n---\ndate: 2024-08-10\ntitle: Custom Exercise Images\n---\n\nNow you can optionally set exercise images to your custom exercises. You can provide URLs for a small image (used across the workout screen/program preview/etc) and a large image (used on the exercise stats screen).\n\n---\ndate: 2024-08-08\ntitle: Settings - Exercises screen\n---\n\nA lot of users were finding it weird you can only make 1RM or equipment adjustments for exercises during a workout. Which makes sense, so I added a separate \"Exercises\" screen that you can access from the \"Settings\" screen (\"Workout\" section).\n\nYou can see exercises grouped by the ones used in your current program, and the ones you did previously, but not included into the current program. You can filter them by name, type, muscle groups, etc.\n\nAnd for each exercise you can see their 1RM and currently attached equipment (or default rounding if no equipment attached).\n\n---\ndate: 2024-08-03\ntitle: Program Version History\n---\n\nThere's still a way to lose your program changes you did e.g. in the Web Editor, if immediately after saving on the Web you change a program in the app (e.g. by finishing a workout, or changing a program weight) - then the changes from the app will overwrite the changes from the Web.\n\nThat could be super frustrating. So as a way to fix that, I'm adding **Program Version History**.\n\nNow each time you save a program (both on the web or in the app), it creates a snapshot of the program. You can access the history of all the snapshots in the Web Editor (there's **Versions** link there, that opens a modal with all the snapshots), and restore any of the past snapshots. I'll store up to 100 recent snapshots.\n\nHopefully it'll reduce the chances of losing your program changes, and make the process less frustrating!\n\n---\ndate: 2024-07-31\ntitle: Updates related to syncing and program saving\n---\n\nI did a massive under the hood update how the app syncs changes with the server, to ensure it only sends the necessary (that actually changed) data. Hopefully it'll make the data sync faster and more reliable. There're also some user-facing changes related to that:\n\n- The Web Editor now has the \"Save\" button, and the programs don't autosave anymore. Autosaving sometimes worked pretty inconsistently, and it wasn't clear whether the changes got saved or not, so I'm trying to solve it with explicit saving.\n- The app now has \"Pull-to-refresh\" functionality - pull the screen to the bottom to force fetch the data from the server. Could be useful if you make the changes on the Web Editor, and want to sync them immediately to the app.\n- The app also will try to sync when it goes from background to foreground.\n\n---\ndate: 2024-06-12\ntitle: Changed how equipment works and added multi-gym support\n---\n\n⚠️ This is a breaking change! Please read! ⚠️\n\nExercises in Liftosaur used to consist of 2 parts - exercise name and equipment. For example: **Bench Press** and **Dumbbell**, or **Squat** and **Barbell**. And when you select an exercise, you have to pick both equipment and name.\n\nThere were several issues with that, but mainly two:\n\n- It was confusing for new users to **pick the equipment AND exercise name**. The fact that you need to pick equipment first, and then tap on the exercise name, even if you just want to change the equipment for the current exercise was very weird.\n- **Equipment was tied to the available plates**. So, if you wanted to change bar/plates (like to a different barbell) - but keep the old ones - you'd get a new exercise, with the new history, graphs, etc - which sometimes was undesirable.\n\nIn this change I'm trying to simplify it - now exercise only consists of the exercise name. So, there're exercises like **Bench Press, Dumbbell** and **Bench Press, Barbell** - but those are 2 different exercises and exercise names.\n\nEquipment is separated from the exercise now, and it defines only the plates/bar/fixed weights. You can attach equipment to your exercises, and that will be used for rounding and plates calculator - but that's optional!\n\nSo, for example, you can have **Squat, Barbell** exercise, and attach e.g. **Olymplic Barbell** equipment with 45lb bar and one set of plates. Or attach **Standard Barbell** with 35lb bar, and a different set of plates. Or don't attach any equipment - and just specify the default rounding - but in that case you won't have plates calculated.\n\nOr you may have **Bicep Curl, Dumbbell**, and attach **Fixed Dumbbells** or **Loaded Dumbbells** to it for rounding and plates calculation.\n\nIt also changes how custom exercises work. You cannot choose equipment for custom exercises anymore - only the name. So, if you had custom exercises with different equipment or even custom equipment - they will be migrated to \"equipment-less\" new exercises.\n\nAnother new feature is **Gyms**. You can create another **Gym** and specify different set of equipment for it. For each exercise you can specify equipment from each gym. And you can change the current gym in Settings, and that will define what equipment would be used for exercises.\n\nGyms are totally optional, and by default you only have one. But it could be useful if you **go to multiple gyms**, or if you're **travelling** - then you can just create a new gym but don't attach equipment from it to exercises. In that case they'd just use default rounding, which could be good enough for travelling - you probably don't want to enter all the equipment details for temporary gyms.\n\nI know I say that a lot, but - that's a very big new feature, so could be bugs - so don't hesitate to email me at **info@liftosaur.com** or contact via Discord/Reddit if there're issues!\n\n---\ndate: 2024-05-25\ntitle: Add UI for tweaking programs\n---\n\nLiftoscript is an amazing way to define weightlifting programs, but typing on the phone could be tedious. Sometimes you need to tweak your program on a phone, while you're in a gym - adjust warmups, reps, weights, replace/add some exercises. But it's not very convenient to do it in a plain text editor on a phone.\n\nSo now there's a UI mode for editing the programs, which is the default mode on a phone. You can do almost anything you could do in a plain text editor except defining progress, update blocks, descriptions and tags.\n\nYou can still switch to the plain text mode by tapping on ::icon-doc::, and adjust the program text. Also, for the Web Editor the plain text mode is still the main way of editing programs.\n\nThat's a very big feature, so could be bugs - don't hesitate to email me at **info@liftosaur.com** or contact via Discord if there're issues.\n\n---\ndate: 2024-05-06\ntitle: \"Quick-add sets\" is now per set variations\n---\n\nIt used to be per whole exercise, so even if you add **1+x5** in one of the days/weeks for your exercise, it'd apply to ALL days/weeks (or set variations) in a program for that exercise.\n\nIt's a bit inconvenient if you only want to have this feature enabled on certain days/weeks. So, now \"Quick-add sets\" is per set variation - if you have **1+x5** on day 1, and **1x5** on day 2, you won't have \"Quick-add sets\" enabled on day 2.\n\n⚠️ This is a breaking change though! ⚠️ If you use this feature, you likely would need to change your program to enable it across all weeks/days where you want to have it, not only the first week/day of the exercise!!!\n\n---\ndate: 2024-04-21\ntitle: Added rich reps / weight / rpe inputs\n---\n\nNow all the modals (like modal when you edit a set for the current exercise, modal when you edit weights, or the AMRAP modal) have \"rich\" inputs for reps, weight and RPE. They have buttons allowing to adjust the values, weight inputs have a Rep Max Calculator, and the buttons increment and decrement various values properly.\n\nFor example, it'd increment/decrement weights according to available equipment - getting next possible weight with your plates. And for reps - it increments by 1, and for RPE - by 0.5\n\n---\ndate: 2024-04-20\ntitle: Added tags\n---\n\nNow you can add **id: tags(123)** to your exercises, and then change state variables of that exercise from a progress block of another exercise. For example:\n\n\\`\\`\\`liftoscript\nSquat / 3x8 / id: tags(123) / progress: custom(rating: 0) {~ ~}\nBench Press / 3x8 / progress: custom() {~\n  state[123].rating = 2\n~}\n\\`\\`\\`\n\nThat **state[123].rating = 2** will set state variable rating in **Squat** to **2**.\n\nIt's kinda a niche feature, but could be useful for some programs.\n\n---\ndate: 2024-04-17\ntitle: update - custom() improvements\n---\n\nYou can use state variables defined in **progress: custom()** in your **update: custom()** scripts.\n\nAlso kinda breaking change, but also now **update: custom()** script would run right after starting a workout. Before completing any sets. With **setIndex == 0**.\n\nYou can use that to programmatically configure your workout\n\n---\ndate: 2024-04-15\ntitle: Added a bunch of new programs\n---\n\nNamely:\n\n- 5/3/1: Boring But Big\n- 5/3/1: Building The Monolith\n- nSuns LP\n- Madcow 5x5\n- PHUL\n- Phrak's Greyskull LP\n\n---\ndate: 2024-04-13\ntitle: Quickly change weights in a program exercise\n---\n\nFor the old programs, it was pretty convenient to just change **state.weight** state variable to adjust the weight across the sets of the exercise.\n\nIn the new plain-text syntax, it got more complicated - if the program is not 1RM-based, you'd need to edit the absolute weight in the program text. Which could be quite cumbersome, especially if you have multiple weeks to adjust.\n\nSo I added a way to quickly change the weights in the program exercise, in the \"Edit\" modal on the workout screen. It lists all the weights used by the exercise in a program, and you can quickly adjust them, either by typing, or by buttons, and there's also a Rep Max Calculator for convenience.\n\n---\ndate: 2024-04-03\ntitle: All built-in programs are migrated to the new syntax\n---\n\nAll the built-in programs now use the new **Liftoscript 2.0 (aka Workout Planner)** syntax.\n\nAlso, by default you now create the programs with the new syntax.\n\n---\ndate: 2024-04-01\ntitle: Loops\n---\n\nYou can now write **for** loops in the Liftoscripts.\n\nLooks like this:\n\n\\`\\`\\`liftoscript\nBench Press / 3x8 / progress: custom() {~\n  for (var.i in completedReps) {\n    weights[var.i] = weights[var.i] + 5lb\n  }\n~}\n\\`\\`\\`\n\nIn this case, **var.i** would contain an index of a set, starting from 1.\n\n---\ndate: 2024-03-28\ntitle: Improved reusing of sets, reps, weight, RPE, timer and warmups\n---\n\nNow the **...Squat** syntax would also reuse the warmups.\n\nAlso, you can override the reused weights, RPE and timer. For example, if you do:\n\n\\`\\`\\`liftoscript\nSquat / ...Bench Press / 200lb\n\\`\\`\\`\n\nThen it would reuse sets x reps, timer, RPE and warmups from Bench Press - everything except the weight.\n\n---\ndate: 2024-03-18\ntitle: Redesigned exercise picker and ability to replace exercises from the workout and new editor screens.\n---\n\nThere's a new exercise picker modal, that now combines equipment selection + exercise selection, and also the \"Substitute\" feature.\n\nThere's also a new \"Swap\" exercise feature on the workout screen (the ::icon-swap:: icon), where you can replace exercise for this workout only, or for the whole program.\n\nAnd now you can replace the exercise across whole program in the new Liftoscript 2.0 editor, both in Web and app. You were able to do it before as well with Find & Replace, but now there's simpler UI for it.\n\n---\ndate: 2024-02-05\ntitle: New update - custom() syntax for updates after completed sets (in the \"Experimental\" programs)\n---\n\nNow you can dynamically make updates in reps, sets or weights. Like for example, if you want to have AMRAP on the first set, and then based on the completed reps of that set adjust the reps of the rest sets, you can do it now. Do something like:\n\n\\`\\`\\`liftoscript\nSquat / 1x6+, 3x3 / update: custom() {~\n    if (setIndex == 1) {\n      reps = floor(completedReps[1] / 2)\n    }\n  ~}\n\\`\\`\\`\n\nand that will make the rest of the sets update after finishing the first set.\n\nThat **update** script is run after completing every set or updating completed reps on the set. It's available only in the new \"Experimental\" programs.\n\nIn that script, you may change **reps**, **minReps**, **weights**, and **RPE** variables. It doesn't change a program, and you cannot access state variables, but you can access any other built-in variable.\n\nYou can target all incompleted sets (by using **reps = 3**, **weights = 40lb**, etc), or you can target specific sets (e.g. **reps[3] = 10**)\n\n---\ndate: 2024-01-27\ntitle: ✨ New \"Experimental\" programs (aka \"in-app Workout Planner\") ✨\n---\n\nMassive update - now there's a way to build Liftosaur programs using completely different syntax - the one that you used in the [Workout Planner](https://www.liftosaur.com/planner)\n\nThe syntax got extended with the new features, making it pretty much as powerful as a regular way of building programs. You now can use Liftoscript within the new syntax to describe the progressions.\n\nBasically, the new programs is just one blob of text, and it changes over time based on your progressions. You can define set variations, quick add sets, descriptions, ways to switch between them, etc - everything is possible!\n\nTo create that \"experimental\" program, just go to **\"Choose Program\"** screen, tap on **\"Create\"**, and tap the **\"Create experimental program\"** button.\n\nRead more about new syntax and how to write programs that way [in the blogpost.](https://www.liftosaur.com/blog/posts/new-experimental-program-editor/)\n\nIMHO it should be much easier to build programs this way. Eventually I'd like to make it a default way of writing programs in Liftosaur. So, check it out, and don't hesitate to ask questions in our Discord channel, subreddit, or just shooting email to **info@liftosaur.com**!\n\n---\ndate: 2024-01-06\ntitle: Added ability to set 1 Rep Max for exercises\n---\n\n1RM would be reused across programs, and is tied to exercise themselves, not programs. You still can access it in the Liftoscript scripts via **rm1** variable, and you can set it in the Finish Day Script too.\n\nI.e. you can do things like \\`rm1 * 0.9\\` in your Weight Liftoscript expressions, or things like \\`rm1 += 5lb\\` in your Finish Day Scripts\n\nYou can edit 1RM on the Exercise Stats screen (when you tap on the exercise name on the workout screen). Also, it'll show up on the \"Edit\" modal (when you tap on the Edit icon on the working screen) in case it was used anywhere in the program exercise scripts.\n\nThat should be a good way to make 1RM of the exercises transferrable between programs.\n\n---\ndate: 2024-01-03\ntitle: Added \"Full Program\" mode to the Workout Planner\n---\n\nNow there's a new \"Full Program\" mode in the [Workout Planner](https://www.liftosaur.com/planner). You can activate it by clicking on the ::icon-doc:: icon near the \"Convert to Liftosaur program\" button. It represents the planner program as one big text blob. That could be pretty convenient for editing programs, especially multi-week ones. You can save those programs as text files, edit them in any text editor, share them as text blobs.\n\nIt adds 2 new syntax constructions you need to use in the \"Full Program\" mode - for weeks and for days. To create a week, you type a week name from a new line, starting with a hash sign. Like **# Week 1**. To create a week - same thing, just starting with 2 hash signs, like **## Day 1**.\n\nThere's also a bunch of features built-in into the Workout Planner editor:\n\n**Find & Replace** - you can even use regular expressions for powerful replacing\n\n**Multicursor typing** - you can set several cursors (by Cmd+click or Ctrl+click), and type in multiple places simultaneously.\n\n---\ndate: 2023-12-25\ntitle: Improved Program Preview in the app and Web Editor\n---\n\n🎄 Merry Christmas! I tweaked the program preview page in the app (both for built-in and your programs), and also added Program Preview for the Web Editor.\n\nYou can use it to get a quick glance at the whole program, try your state var values (e.g. your weights) there. You can also enable \"Playground\" mode, and try how finish day scripts work for various exercises when you finish all sets.\n\nIt should be especially useful for the Web Editor, before it was sometimes pretty tricky to understand if your program works properly, especially if it has a bunch of set variations. There was Exercise-level Playground, but wasn't Program-level Playground, and now there is!\n\n---\ndate: 2023-12-07\ntitle: You can now fully delete your account\n---\n\nAdded deleting account on the cloud. It's available on the Settings - Account screen.\n\nNow you can be in control of your data, and fully wipe out all your data from the Liftosaur servers if necessary!\n\n---\ndate: 2023-10-16\ntitle: Changed how Web Editor program links work\n---\n\nIt used to be that when you edit a program in a web editor, it'd update the link right in the URL bar, and the short links like /p/123abc would just redirect to the long links with whole program presented into a URL.\n\nBut apprently there's 10K limit in the URL length, so it was breaking for some large programs. So, I had to change how it works. Now, when you edit a program, you need to generate a link to \"Save\" it, each change won't automatically update the browser history. It'll also show a warning (that you can close) when you change a linked program that in order to \"Save\" the changes, you need to generate a new link that'll represent a changed program.\n\n---\ndate: 2023-09-27\ntitle: Offline mode\n---\n\nLiftosaur now can work offline. If there's no Internet, it of course won't be able to load all the built-in programs, and it won't be able to sync your data to the server. But it'll still work, all your history and programs would be there, and it will just sync the data next time when Internet is available if you're logged in.\n\n---\ndate: 2023-09-22\ntitle: Moving Average on the Measurement Graphs\n---\n\nNow, on the Measurement screen, for the graphs there you can add moving average graph. It's super useful especially for tracking bodyweight or body fat, due to high volatility of those measurements. This was added by awesome [@123marvin123](https://github.com/123marvin123), thank you so so much for contributing and adding this feature! It'll help a lot of people tracking their weight, and it's a great addition to Liftosaur. Thank you very very much!\n\n---\ndate: 2023-09-20\ntitle: Added Rep Max Calculator\n---\n\nIt's located near weight state variables. You can enter the known weight, reps and RPE, and target reps and RPE, and it'll calculate the weight for you.\n\nFor actual Rep Max, use RPE = 10.\n\n---\ndate: 2023-09-02\ntitle: Added rep ranges support\n---\n\nThere's a new \"Extra Feature\" you can enable for exercises now - **Rep Ranges**. If you turn it on, you can specify optional **Min Reps** Liftoscript scripts for each set in an exercise. On the sets, you'll see rep ranges instead of just a single rep number.\n\nIf the reps are less than max reps, but more or equal than min reps, the set will be yellow, both in the workout and in the history.\n\nIf the min reps are enabled and provided, you'll have them available in the **minReps** variable in the Finish Day scripts. If they're not enabled or provided, they'll use **reps** (i.e. max reps) variable values. For example, you don't have min reps for the first set, but max reps are **5**. Then, \\`minReps[1]\\` would be **5**.\n\n---\ndate: 2023-08-31\ntitle: Added multi-week support\n---\n\nNow for programs you can enable \"Multi-week\" mode. That adds **Weeks** - they are similar to **Days**. Like you add exercises to Days and can reuse exercises between days - now you can add Days to Weeks and reuse Days between Weeks.\n\nThat makes it easier to create multi-week programs with mesocycles, deload weeks, 1RM testing weeks, etc. You can create regular days, deload days or testing RM days, and then create e.g. 6 weeks with regular days, and then 1 week with deload days.\n\nWhen multi-week mode is enabled, the program follows the order of days in weeks. I.e. when you finish a workout, it'll go to the next day in the week, or when it was the last day in the week - goes to the first day of the next week.\n\nThere are also new variables available for all the Liftoscript scripts - **week** and **dayInWeek**. You can use them to define logic based on the week number, or week day number.\n\n---\ndate: 2023-08-22\ntitle: Added visual cues when rounding weights\n---\n\nIt's currently very confusing when and why we round the weights, especially for the new users of the app. It looks like a bug in the app because it's unexpected, but it just tries to round the weights to your available equipment.\n\nSo, from now on, it'll show strikethrough original weights, and the weight it was rounded to. Also, will show a little help message, explaining where you can adjust the equipment.\n\nThe rounding logic is slightly different now - we round the weights only at the very end, during the workouts. State variable changes are not rounded at all.\n\nIf this change somehow breaks the rounding logic in your program, please contact in Discord or by [info@liftosaur.com](mailto:info@liftosaur.com). It shouldn't break anything, but I could miss some edge cases...\n\n---\ndate: 2023-08-04\ntitle: Added RPE support\n---\n\nRPE (Rating of Perceived Exertion) now is well supported in Liftosaur. It's how hard was the exercise, on the scale of 0-10, where 10 is the hardest (you couldn't make any more reps)\n\nNow you can enable RPE support for your exercises (in Extra Features section), and each set will have 2 additional fields: **RPE** and **Log RPE**.\n\nFor RPE, you can provide Liftoscript expression, that would define required RPE for that set.\n\nIf you enable \"Log RPE\", it'll ask you for YOUR perceived RPE value when you finish the set.\n\nYou can access the required RPE values via \\`RPE\\` and logged RPE in \\`completedRPE\\` variables in the Finish Day Script.\n\nUsing that, you can define progressions based on RPE, e.g. comparing if your RPE was lower than required RPE - then increase the weight, or something like that.\n\nOn the history and workout screens, we show required RPE like **@8** (gray color) and logged RPE like **@9** (orange color), prefixed by **@** sign.\n\n---\ndate: 2023-07-29\ntitle: Add better volume support\n---\n\nNow there's a switch between volume and max weight for exercise graphs.\n\nThere are also muscle group volume per week graphs\n\nThere's also volume in lbs added to the exercise stats screen and also previous workouts.\n\n---\ndate: 2023-07-27\ntitle: Import history from Hevy app\n---\n\nThere's a new item in Settings - \"Import history from other apps\". It opens a modal, where you can choose Hevy app, and upload CSV file - and it'll import the history from the file into Liftosaur.\n\n---\ndate: 2023-07-24\ntitle: Make the rest timer adjustable\n---\n\nNow you can adjust a running rest timer. Tap on the timer on the right bottom corner, it'll expand, and you can add time, reduce time, or cancel the timer completely.\n\n---\ndate: 2023-07-16\ntitle: Improve exercise selection modal\n---\n\nNow listing target, synergetic muscle groups, and also the \"type\" of the exercise (pull, push, upper, lower, etc) for each exercise.\n\nAlso, now you can filter by the \"type\" and by muscle groups. E.g. you can list all the pull exercises with the chest muscle group, or something like that.\n\nYou can assign the \"type\" to your custom exercises now too.\n\n---\ndate: 2023-07-12\ntitle: Add Custom Equipment\n---\n\nNow you can create your own **custom equipment** (in Settings -> Available Equipment).\n\nIt could be useful if you have multiple Cable machines with different plate weights for different exercises, or you want to create some custom equipment like \"Safety Squat Bar\", where the bar weights more than regular olympic bar.\n\nCustom Equipment has all the same properties as built-in equipment (fixed/non-fixed, plates configuration), but also additionally you can specify the name, and \"Similar To\" field.\n\n\"Similar To\" for now only used for the exercise images, so if you create new equipment \"Cable 2\", with different plates, you can set \"Similar To\" to \"Cable\", and it'll use cable exercise image.\n\nYou now also can edit equipment in the Web Editor's Settings modal. You can create new equipment there (e.g. Safety Squat Bar), and assign to your exercises there. Custom equipment is properly exported into a link when you create a link of a program to share.\n\n---\ndate: 2023-07-04\ntitle: Switched \"reps x sets\" to \"sets x reps\" on the history screen\n---\n\nIt was kinda confusing since widely used format is \"sets x reps\".\n\nSo now it's \"sets x reps\"\n\n---\ndate: 2023-06-30\ntitle: Bodyfat tracking\n---\n\nLiftosaur is [open-source](https://github.com/astashov/liftosaur), so anyone can see the code, and potentially add features. Amazing [@codymurdoc](https://github.com/codymurdoc) went ahead and added bodyfat tracking support to Liftosaur! This is so cool, thank you so much! It's really impressing you were able to figure out how to do that in pretty large codebase, and add it in a clean and nice way, it's a pretty big feature. I'm really impressed!\n\n---\ndate: 2023-06-25\ntitle: Added Long Press to edit the quickly edit the sets in current workout\n---\n\nNow, you can do long press on a set square (for 1 second), and it'll open the edit set modal - the same one that you get if you press on the Edit icon, choose \"Only in this workout\", and then tap on a set.\n\nThat works both on the workout screen, and also in playgrounds on the edit program exercise screen. But on the playground, it won't change the program! It's just to simulate the logic if you change the sets only in current running workout.\n\nHopefully that'll make it easier to handle the cases when you want to deviate from a program for some reason only for that workout (change the weight for some set, or number of required reps, etc).\n\n---\ndate: 2023-06-24\ntitle: Made \"Quick Add Set\" supported in playgrounds\n---\n\nSo it's easier to test your program exercise logic when you have \"Quick Add Set\" feature enabled.\n\n---\ndate: 2023-06-13\ntitle: Added sound controls to iOS / Android apps\n---\n\nIf the sound of the rest timer is too loud or too quiet, you can now adjust it in the app. There's a Volume slider now, as well as a toggle to enable vibration when rest timer ends.\n\nYou need to get the new version of the app from App Store / Google Play to get this feature.\n\n---\ndate: 2023-06-11\ntitle: Added a way to add labels to sets\n---\n\nSimilar like there's a label \"Warmup\" for the warmup sets, you can add short labels to workout sets as well. You can use it to mark sets as **\"Drop set\"**, or **\"RPE 7\"**, or **\"TM 70%\"**, or something like that. The space is limited, so the label is 8 characters max.\n\nYou can specify labels on the \"Edit Program Exercise\" screen, where you specify reps, weights and AMRAP.\n\n---\ndate: 2023-06-09\ntitle: Added new functions - sum, min and max\n---\n\nYou can use them in your scripts to find e.g. min or max completed reps, or sum of all reps. They work on variables that are arrays, like \\`reps\\`, \\`weights\\` and \\`completedReps\\`.\n\nLike this: \\`state.allCompletedReps = sum(completedReps)\\`\n\n---\ndate: 2023-05-24\ntitle: Added \"Always On Display\" in Settings\n---\n\nIf you want to keep your screen always on during the workouts, you can enable it in Settings. You need to update the app for that though.\n\n---\ndate: 2023-05-11\ntitle: Improved program exercise timer expressions\n---\n\nNow you can use not only state variables there, but also the workout variables. Like, \\`completedReps\\`, \\`weights\\`, \\`numberOfSets\\`, etc.\n\nAlso, added new variable specifically for the timer expression - \\`setIndex\\`. It contains the index of the just completed set. You can use it to change timer based on the set number. Or to set a timer between exercises (\\`setIndex == numberOfSets ? 90 : 180\\`).\n\n---\ndate: 2023-05-01\ntitle: More Liftoscript features\n---\n\nAdded modulo operator **%** to Liftoscript. I.e. **7 % 2 == 1**, or **5 % 5 == 0**. It's useful for creating programs with repeating patterns.\n\nThen, added functions **floor**, **ceil** and **round**. You use them like **state.foo = floor(23.4)**. Use them if you need rounding.\n\nAlso, finally added increment assignment operators, like **+=**, **-=**, **\\\\*=** and **/=**. Use them like **state.foo += 5lb** - that'd increase \\`foo\\` variable by 5lb.\n\n---\ndate: 2023-04-30\ntitle: New Liftoscript Engine\n---\n\nThe internals of Liftoscript are fully rewrote to a new engine. It's more strict, and it will better find syntax errors, missing variables, and it's generally more correct. Also, it will be way easier to add features to it now.\n\n⚠️ But because it's stricter, it may consider your previously valid scripts invalid now. **If you get an error - please go to edit exercise screen, and fix the errors!**. Otherwise, it may not calculate your reps/weights properly when you finish exercise.\n\n---\ndate: 2023-04-22\ntitle: Quick add sets\n---\n\nAdd a way to enable \"quick add sets\" feature for a program exercise. When enabled, there'll be a button on the workout screen after last set, that allows to add another set. On press, there'll be a modal, where you specify required sets and weight. It also is marked as completed automatically.\n\nAlso, there are 2 new variables available in Finish Day Script - **numberOfSets**, and an alias for it - **ns**. They contain the number of sets for the exercise at the end of the workout.\n\nYou can use this to create set-based programs. E.g. increase weight if you did more than 5 sets with 4 reps each, or if you did at least 5 sets, and last set reps were more than 8. To access last set weight or reps, you can use **weights[numberOfSets]** or **reps[numberOfSets]**.\n\n---\ndate: 2023-04-19\ntitle: Program Exercise Descriptions\n---\n\nYou can now add exercise descriptions when you edit a program exercise. You can add any tips how to do it, reminders, or some notes, that'll persist between workouts. You can use markdown for formatting.\n\n---\ndate: 2023-04-09\ntitle: Edit state variables from workout screen\n---\n\nYou don't need to go to the edit exercise screen to edit the state variables anymore. Now you can do it right from a modal that pops up when you tap \"edit\" icon on the exercise card, on the workout screen.\n\n---\ndate: 2023-03-30\ntitle: User entered state variables\n---\n\nNow you can make a user to provide a value for the state variable when they finish an exercise. For that, there's a checkbox when you create a state variable.\n\nThat's useful e.g. for the programs that use RPE (Rating of Perceived Exertion) or RIR (Reps in Reserve) for progressions. Or if you want to manually choose the weight for the next workout. Or something like that.\n\n---\ndate: 2023-03-24\ntitle: Per Exercise Rest Timers\n---\n\nNow you can specify custom exercise rest timers. By default it still would use your workout timer from Settings, but you can override it for some exercises. So now you can have different rest timers for Deadlift and Bicep Curls!\n\nYou specify timer as a Liftoscript expression, similar to reps and weight, so you can define logic there too, and use state variables. Progressive overload in your rest timer? Why not! :)\n\n---\ndate: 2023-03-19\ntitle: Discord Server\n---\n\nWe've got a Discord server now! You can join it here: [::icon-discord:: Discord Server](https://discord.com/invite/AAh3cvdBRs)\n\nJoin and ask questions there, suggest features, leave feedback, or just chat with other Liftosaur users.\n\n---\ndate: 2023-03-01\ntitle: Notes\n---\n\nAdded ability to add notes to the overall workouts and specific exercises during workout. You can then see those notes on the History screen, on the exercise details screen, and also on the Graphs.\n\nYou can also filter the history on the exercise details screen by whether the history record had notes for that exercise.\n\n---\ndate: 2023-02-24\ntitle: Inspirations in the Advanced Edit Mode\n---\n\nNow in the \"Advanced\" mode of the exercise editor (both on a phone and in the web editor), there's a link at the top that opens a modal with various examples of the reps/weight and finish day scripts.\n\nYou could use it for \"inspiration\", to reuse some of the recipes, or come up with your own based on those. Or just to see what you can do with **Liftoscript**.\n\n---\ndate: 2023-02-22\ntitle: Web Editor for programs\n---\n\nThere's a new web editor for programs, so you could edit the programs from a laptop - [liftosaur.com/program](internal:/program). You can create a program there, then copy the link, and paste it into the app (on the program selection screen). You can also generate a link for any of your programs (on the program edit screen), and open in the web editor, edit there, copy link again, and paste it into the app to import the changes.\n\nThose links are immutable - any change in the program would change the link. You can share those links if you want to share your program with somebody else, and they'll be able to import the program into their app.\n\n---\ndate: 2023-02-09\ntitle: Choose Programs screen redesign\n---\n\nNow it shows all the exercise images a built-in program contains, as well as the required equipment and approximate time to finish a workout from the program. Hopefully it'll help with choosing the right program.\n\n---\ndate: 2023-02-07\ntitle: Footer navigation\n---\n\nWe've got complains that the footer navigation is confusing. And indeed, the left part was different from screen to screen, and it sometimes was hard to understand where are you.\n\nSo, now the footer nav is always the same across all screens. The screen-based buttons got moved to either 3-dot menu in the navbar, or to regular buttons right on the screen.\n\nAlso, had to move the rest timer from the footer, now it's a floating timer, that is visible on all screens. If you tap on it, you will go to the currently ongoing workout.\n\n---\ndate: 2023-01-21\ntitle: Exercise Stats\n---\n\nAdded Exercise Stats - a new screen that shows various statistics for an exercise. It shows the graph, the personal records, the history of the exercise. You can switch between different exercises right on that screen.\n\nThe entrypoint to that screen is from the workout screen - when you tap on the exercise name, exercise image, or when you open the bottom sheet - there's an option \"Exercise Stats\"\n\n---\ndate: 2023-01-15\ntitle: Program Preview\n---\n\nAdded Program Preview, that shows the high-level overview of a program. It lists all the days and exercises, all the sets variations (sets/reps/weight), you could see the formulas/scripts for each exercise, and muscles for each day and the whole program. You can use it for 2 cases:\n\n- When you pick a built-in program, there's a \"Preview\" button in the modal with the program info. So you could see now what you sign up for.\n- When you build your own program, there's \"Preview\" footer button. If will give you high-level overview of the program, and could help to make sure everything works right there.\n\n---\ndate: 2023-01-11\ntitle: Graph Improvements\n---\n\n- Using 2 fingers, you can pinch-zoom graphs now.\n- Also using 2 fingers you can move the zoomed area.\n- By double-tapping a graph, you can reset the zoom and return to its original size.\n- Added vertical lines on the graphs when program was changed.\n- Added a link in the legend to the selected workout on the graph.\n- Removed the horizontal line on the cursor, since it was pretty useless.\n\n---\ndate: 2022-12-28\ntitle: Add Reuse Logic feature\n---\n\nIf you have multiple exercises in a program that share the same logic for sets, reps and weight, and also logic for updating those, you now can \"reuse logic\" from other exercises. This way you can avoid repeating the same logic over and over again, and you'll have a single source of truth for that logic (in the exercise you reuse).\n\nIt should be useful for most programs, since usually they have multiple exercises following the same progression/deload pattern.\n\nEach exercise still has its own state variables values, but it must have the same variable names and types.\n\n---\ndate: 2022-12-26\ntitle: New Account Management.\n---\n\nNow you can have multiple local accounts, and manage them and switch between them. Also, the whole Account screen was updated.\n\n---\ndate: 2022-12-25\ntitle: Redesign.\n---\n\nBig redesign of the whole app! Hopefully it's more visually pleasant, and makes more sense than the previous one.\n\n---\ndate: 2022-08-08\ntitle: Big changes in the equipment settings.\n---\n\nYou can now specify plates separately for each equipment type - barbell, dumbbell, cable, etc.\n\nEach equipment type now supports \"fixed\" weights, without plates, e.g. if you use fixed weight dumbbells.\n\n---\ndate: 2022-06-04\ntitle: Add 1 Rep Max line to the exercises graphs.\n---\n\nIt better shows the progress trend, since it combines weight and reps into one value. We use [Epley formula](https://en.wikipedia.org/wiki/One-repetition_maximum) to calculate it. It's enabled by default, but you can disable it in settings on Graphs screen.\n\n---\ndate: 2022-02-19\ntitle: Import/Export of all data and also specific programs.\n---\n\nYou can now export all your data into a file (history, settings, etc), and then import it later on.\n\nAlso can export and import programs. Could use it to e.g. share a workout program with a friend, or as a backup, or for some other reason.\n`;\n\nexport default content;\n","import { Platform } from \"react-native\";\n\nexport function HealthSync_eligibleForAppleHealth(): boolean {\n  return Platform.OS === \"ios\" && parseFloat(String(Platform.Version)) >= 15;\n}\n\nexport function HealthSync_eligibleForGoogleHealth(): boolean {\n  // Platform.Version on Android is the API level, not the user-facing version. 34 = Android 14 (UPSIDE_DOWN_CAKE),\n  // the minimum for Health Connect's runtime permission flow.\n  return Platform.OS === \"android\" && Number(Platform.Version) >= 34;\n}\n","import { ISettings, IStorage } from \"../types\";\nimport { Dialog_alert } from \"../utils/dialog\";\nimport { DateUtils_formatYYYYMMDD } from \"../utils/date\";\nimport { Exporter_toFile } from \"../utils/exporter\";\nimport { IExportedProgram } from \"../models/program\";\nimport { Storage_getDefault, Storage_get, Storage_setAffiliate } from \"../models/storage\";\nimport { IEither } from \"../utils/types\";\nimport { getLatestMigrationVersion } from \"../migrations/migrations\";\nimport { IDispatch } from \"../ducks/types\";\nimport { Thunk_importProgram } from \"../ducks/thunks\";\nimport { ObjectUtils_clone, ObjectUtils_pick } from \"../utils/object\";\nimport { ImportFromLink_importFromLink } from \"../utils/importFromLink\";\nimport { UrlUtils_build } from \"../utils/url\";\nimport { IExportedPlannerProgram } from \"../pages/planner/models/types\";\nimport { PlannerProgram_convertExportedPlannerToProgram } from \"../pages/planner/models/plannerProgram\";\nimport { Settings_build } from \"../models/settings\";\n\nexport function ImportExporter_exportStorage(storage: IStorage): void {\n  Exporter_toFile(`liftosaur-${DateUtils_formatYYYYMMDD(Date.now())}.json`, JSON.stringify(storage, null, 2));\n}\n\nfunction isPlanProgram(program: IExportedProgram | IExportedPlannerProgram): program is IExportedPlannerProgram {\n  return \"type\" in program && program.type === \"v2\";\n}\n\nexport async function ImportExporter_getExportedProgram(\n  client: Window[\"fetch\"],\n  maybeProgram: string,\n  settings?: ISettings\n): Promise<IEither<IExportedProgram, string[]>> {\n  let parsedMaybeProgram: IExportedProgram | IExportedPlannerProgram;\n  try {\n    parsedMaybeProgram = JSON.parse(maybeProgram);\n  } catch (e) {\n    return { success: false, error: [\"Couldn't parse the provided file\"] };\n  }\n  let exportedProgram: IExportedProgram;\n  if (isPlanProgram(parsedMaybeProgram)) {\n    exportedProgram = PlannerProgram_convertExportedPlannerToProgram(parsedMaybeProgram, settings || Settings_build());\n  } else {\n    exportedProgram = parsedMaybeProgram;\n  }\n  const payload = Storage_getDefault();\n  payload.settings = ObjectUtils_clone(settings || payload.settings);\n  payload.settings.timers.workout = exportedProgram.settings?.timers?.workout || payload.settings.timers.workout;\n  payload.settings.units = exportedProgram.settings?.units || payload.settings.units;\n  payload.settings.exercises = exportedProgram.customExercises;\n  payload.programs.push(exportedProgram.program);\n  payload.version = exportedProgram.version;\n  const result = Storage_get(payload, false);\n  if (result.success) {\n    const storage = result.data;\n    const customExercises = storage.settings.exercises;\n    const program = storage.programs.filter((p) => p.id === exportedProgram.program.id)[0];\n    return {\n      success: true,\n      data: {\n        customExercises,\n        program,\n        version: getLatestMigrationVersion(),\n        settings: ObjectUtils_pick(payload.settings, [\"timers\", \"units\"]),\n      },\n    };\n  } else {\n    return result;\n  }\n}\n\nexport async function ImportExporter_handleUniversalLink(\n  dispatch: IDispatch,\n  link: string,\n  client: Window[\"fetch\"]\n): Promise<void> {\n  const url = UrlUtils_build(link);\n  if ((url.pathname === \"/program\" && url.searchParams.has(\"data\")) || url.pathname.startsWith(\"/p/\")) {\n    const data = await ImportFromLink_importFromLink(link, client);\n    if (data.success) {\n      const source = data.data.source;\n      if (source) {\n        Storage_setAffiliate(dispatch, source, \"program\");\n      }\n      dispatch(Thunk_importProgram(data.data));\n    } else {\n      Dialog_alert(data.error.join(\"\\n\"));\n    }\n  }\n}\n","/* eslint-disable no-template-curly-in-string */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nimport { LRParser } from \"@lezer/lr\";\nconst spec_Keyword: any = { __proto__: null, if: 102, else: 104, for: 106 };\nexport const parser = LRParser.deserialize({\n  version: 14,\n  states:\n    \",fQcQPOOO!lQPO'#DOOOQO'#Cd'#CdO#iQPO'#CdO%UQPO'#DYOcQPO'#CjO%]QPO'#CkO%dQPO'#CmO%iQPO'#CoO%nQQO'#CsO%vQPO'#CvO'gQPO'#DYOcQPO'#C|OOQO'#DY'#DYQcQPOOOcQPO,58yOcQPO,58yOcQPO,58yOcQPO,58yOcQPO,59WOOQO,59O,59OOOQO,59Q,59QO'qQPO,59UOOQO,59V,59VO'xQPO,59VO(PQPO,59XO(UQPO,59ZO(ZQPO,59_OcQPO,59_O(`QSO,59bO(gQPO,59gOcQPO,59^OcQPO,59eOOQO,59h,59hOOQO-E6|-E6|O*UQPO1G.eOOQO1G.e1G.eO*]QPO1G.eO*dQPO1G.eO+zQPO1G.rOOQO1G.p1G.pOOQO1G.q1G.qO,RQPO1G.sO-lQQO1G.uOOQO1G.y1G.yO-qQPO'#CuO-xQPO1G.yO-}QPO'#CwOOQO'#Cx'#CxOOQO'#Cw'#CwO.XQPO1G.|O.aQPO1G/ROcQPO'#DRO.kQPO1G/ROOQO1G/R1G/RO.sQPO1G.xO/|QPO1G/POcQPO7+$^O1VQPO7+$_O1_QPO7+$_OcQPO7+$aO2xQQO7+$eO(`QSO'#DQO2}QPO7+$hOOQO7+$h7+$hO3VQPO7+$mOOQO7+$m7+$mO3_QPO,59mOOQO-E7P-E7PO3iQPO<<GxO%dQPO,59kOOQO<<Gy<<GyO1VQPO<<GyOOQO-E6}-E6}O4rQPO'#CqO4yQPO<<G{O5OQPO<<HPOOQO,59l,59lOOQO-E7O-E7OOOQO<<HS<<HSOOQO<<HX<<HXO(PQPO1G/VOOQOAN=eAN=eP1YQPO'#DPO(PQPOAN=gOOQOAN=kAN=kOOQO7+$q7+$qOOQOG23RG23R\",\n  stateData:\n    \"5`~OxOSPOSyOSzOS{OS~OSROXQO[]O]]ObYOdZOhXOq[O}TO!PUO!TVO!VWO~OS_OT`OUaOVbO!RcO~OXrX[rX]rXbrXdrXhrXqrXvrX}rX!PrX!TrX!VrX!QrX~P!ZOXdO~OS|XT|XU|XV|XX|X[|X]|Xb|Xd|Xh|Xq|Xv|X}|X!P|X!R|X!T|X!V|X!O|X!Q|X!S|X!Y|X!^|X~OZeO~P#nO!QgO~PcO}TO~O}jO~O!XlO!ZkO~O}nO!XmOSjXTjXUjXVjXXjX[jX]jXbjXdjXhjXnjXqjXvjX!PjX!RjX!TjX!VjX!]jX!OjX!QjX!SjX!YjX!^jX~OnpO!]oO~P#nO!OxO~P!ZO!QyO~PcO!PUO~Od{O~Ob|O~O![!QO~PcO!O!WO!^!UO~PcOT`OURiVRiXRi[Ri]RibRidRihRiqRivRi}Ri!PRi!RRi!TRi!VRi!ORi!QRi!SRi!YRi!^Ri~OSRi~P(qOS_O~P(qOS_OT`OUaOVRiXRi[Ri]RibRidRihRiqRivRi}Ri!PRi!RRi!TRi!VRi!ORi!QRi!SRi!YRi!^Ri~O!S!ZO~P!ZO!U![OSaiTaiUaiVaiXai[ai]aibaidaihaiqaivai}ai!Pai!Rai!Tai!Vai!Oai!Qai!Sai!Yai!^ai~O!W!^O~O!YiX~P!ZO!Y!_O~O!SkX!YkX~P!ZO!S!`O!Y!bO~O!O!dO!^!UO~P!ZO!O!dO!^!UO~OXfi[fi]fibfidfihfiqfivfi}fi!Pfi!Tfi!Vfi!Ofi!Qfi!Sfi!Yfi!^fi~P!ZOXmi[mi]mibmidmihmiqmivmi}mi!Pmi!Tmi!Vmi!Omi!Qmi!Smi!Ymi!^mi~P!ZO!PUO!T!hO~O!U!jOSaqTaqUaqVaqXaq[aq]aqbaqdaqhaqqaqvaq}aq!Paq!Raq!Taq!Vaq!Oaq!Qaq!Saq!Yaq!^aq~O!Z!nO~O!S!`O!Y!qO~O!O!rO!^!UO~O!Oua!^ua~P!ZOX`y[`y]`yb`yd`yh`yq`yv`y}`y!P`y!T`y!V`y!O`y!Q`y!S`y!Y`y!^`y~P!ZO!OeX~P!ZO!O!vO~Ob!wO~OPTh[XSdZbZ~\",\n  goto: \"'P}PPP!OPPPP!fP!OPPP!|#j!O!OP!OP$a!O$dP$z$d$}%T!OP!O!OP%X%c%i%oPPPPPP%yy]OTU[^_`abchlmnop!U!Z!^!`ySOTU[^_`abchlmnop!U!Z!^!`x]OTU[^_`abchlmnop!U!Z!^!`QiVR!s!hx]OTU[^_`abchlmnop!U!Z!^!`QziQ!i![Q!t!jQ!x!sR!y!vR!m!^yZOTU[^_`abchlmnop!U!Z!^!`R!OlQ!SmR!o!`T!Rm!`Q^OQhUTr^hQ!]zR!k!]Q!a!SR!p!aQ!VnQ!c!TT!f!V!cWPOU^hQfTQq[Qs_Qt`QuaQvbQwcQ}lS!Pm!`Q!TnQ!XoQ!YpQ!e!UQ!g!ZR!l!^\",\n  nodeNames:\n    \"⚠ LineComment Program BinaryExpression Plus Times Cmp AndOr NumberExpression Number WeightExpression Unit Percentage String ParenthesisExpression BlockExpression Ternary IfExpression Keyword ForExpression Variable ForInExpression AssignmentExpression StateVariable StateKeyword StateVariableIndex VariableExpression VariableIndex Wildcard IncAssignmentExpression IncAssignment BuiltinFunctionExpression UnaryExpression Not\",\n  maxTerm: 60,\n  skippedNodes: [0, 1],\n  repeatNodeCount: 4,\n  tokenData:\n    \"2Q~R!OX^$Rpq$Rqr$vrs%Tuv&Ovw&Txy&`yz&ez{&j{|&y|}'R}!O&y!O!P'W!P!Q'p!Q![(d![!])c!]!^)h!^!_)m!_!`)u!`!a)m!a!b)}!c!}*S!}#O*e#P#Q*j#T#]*S#]#^*o#^#_*S#_#`+k#`#a,g#a#g*S#g#h-O#h#j*S#j#k/`#k#o*S#o#p1]#p#q1j#q#r1p#r#s1u#y#z$R$f$g$R#BY#BZ$R$IS$I_$R$I|$JO$R$JT$JU$R$KV$KW$R&FU&FV$R~$WYx~X^$Rpq$R#y#z$R$f$g$R#BY#BZ$R$IS$I_$R$I|$JO$R$JT$JU$R$KV$KW$R&FU&FV$R~${Pq~!_!`%O~%TOU~~%WXOY%TZ]%T^r%Trs%ss#O%T#P#r%T#s;'S%T;'S;=`%x<%lO%T~%xO]~~%{P;=`<%l%TP&TOTP~&WPvw&Z~&`OV~~&eO}~~&jO!O~T&qP![STP!_!`&tP&yOnP~'OPS~!_!`&t~'WO!^~V']P!ZQ!Q!['`T'eQXTuv'k!Q!['`T'pO[T~'uQTP!P!Q'{!_!`&t~(QSP~OY'{Z;'S'{;'S;=`(^<%lO'{~(aP;=`<%l'{T(iRXTuv'k!O!P(r!Q![(dT(wQXTuv'k!Q![(}T)SRXTuv'k!O!P)]!Q![(}T)`P!Q![(}~)hO!S~~)mOy~~)rPU~!_!`%O~)zP!]~!_!`%O~*SO!R~T*XSbT!Q![*S!c!}*S#R#S*S#T#o*S~*jO!X~~*oO!Y~V*tUbT!Q![*S!c!}*S#R#S*S#T#b*S#b#c+W#c#o*SV+_S!WQbT!Q![*S!c!}*S#R#S*S#T#o*S~+pUbT!Q![*S!c!}*S#R#S*S#T#Z*S#Z#[,S#[#o*S~,ZSZ~bT!Q![*S!c!}*S#R#S*S#T#o*S~,lUbT!Q![*S!c!}*S#R#S*S#T#U*S#U#V,S#V#o*S~-TUbT!Q![*S!c!}*S#R#S*S#T#h*S#h#i-g#i#o*S~-lTbT!Q![*S!c!}*S#R#S*S#T#U-{#U#o*S~.QUbT!Q![*S!c!}*S#R#S*S#T#h*S#h#i.d#i#o*S~.iUbT!Q![*S!c!}*S#R#S*S#T#X*S#X#Y.{#Y#o*S~/SSh~bT!Q![*S!c!}*S#R#S*S#T#o*S~/eTbT!Q![*S!c!}*S#R#S*S#T#U/t#U#o*S~/yUbT!Q![*S!c!}*S#R#S*S#T#f*S#f#g0]#g#o*S~0bTbT!O!P0q!Q![*S!c!}*S#R#S*S#T#o*S~0tQ!c!}0z#T#o0z~1PSd~!Q![0z!c!}0z#R#S0z#T#o0z~1bP!P~#r#s1e~1jOz~~1mP#p#q&Z~1uO!Q~~1xP#q#r1{~2QO{~\",\n  tokenizers: [0, 1, 2],\n  topRules: { Program: [0, 2] },\n  specialized: [{ term: 18, get: (value: any) => spec_Keyword[value] || -1 }],\n  tokenPrec: 925,\n});\n","// import util from \"util\";\nimport { SyntaxNode } from \"@lezer/common\";\nimport { ILiftoscriptErrorDetails } from \"./syntaxErrorTypes\";\nimport { IScriptBindings, IScriptFnContext } from \"./models/progress\";\nimport {\n  IScriptFunctions,\n  IScriptFnName,\n  IScriptStaticType,\n  LiftoscriptFns_isFnName,\n  LiftoscriptFns_arity,\n  LiftoscriptFns_argSignature,\n  LiftoscriptFns_isValidArg,\n  LiftoscriptFns_acceptsTypeAt,\n  LiftoscriptFns_bindingStaticType,\n} from \"./liftoscriptFns\";\nimport {\n  Weight_gt,\n  Weight_lt,\n  Weight_gte,\n  Weight_lte,\n  Weight_eq,\n  Weight_build,\n  Weight_print,\n  Weight_smartConvert,\n  Weight_is,\n  Weight_isPct,\n  Weight_buildAny,\n  Weight_applyOp,\n  Weight_convertToWeight,\n  Weight_buildPct,\n  Weight_op,\n} from \"./models/weight\";\nimport { IProgramState, IWeight, IUnit, IPercentage } from \"./types\";\nimport { CollectionUtils_compact } from \"./utils/collection\";\nimport { MathUtils_applyOp, MathUtils_round, MathUtils_clamp, MathUtils_roundFloat } from \"./utils/math\";\nimport { IProgramMode } from \"./models/program\";\nimport { parser as LiftoscriptParser } from \"./liftoscript\";\nimport { LiftoscriptPrint_formatValue } from \"./liftoscriptPrint\";\n\nexport enum NodeName {\n  LineComment = \"LineComment\",\n  Program = \"Program\",\n  BinaryExpression = \"BinaryExpression\",\n  Plus = \"Plus\",\n  Times = \"Times\",\n  Cmp = \"Cmp\",\n  AndOr = \"AndOr\",\n  NumberExpression = \"NumberExpression\",\n  Number = \"Number\",\n  Percentage = \"Percentage\",\n  String = \"String\",\n  WeightExpression = \"WeightExpression\",\n  ParenthesisExpression = \"ParenthesisExpression\",\n  BlockExpression = \"BlockExpression\",\n  Ternary = \"Ternary\",\n  IfExpression = \"IfExpression\",\n  ForExpression = \"ForExpression\",\n  ForInExpression = \"ForInExpression\",\n  If = \"If\",\n  Else = \"Else\",\n  AssignmentExpression = \"AssignmentExpression\",\n  IncAssignmentExpression = \"IncAssignmentExpression\",\n  IncAssignment = \"IncAssignment\",\n  StateVariable = \"StateVariable\",\n  StateVariableIndex = \"StateVariableIndex\",\n  Variable = \"Variable\",\n  BuiltinFunctionExpression = \"BuiltinFunctionExpression\",\n  Keyword = \"Keyword\",\n  VariableExpression = \"VariableExpression\",\n  VariableIndex = \"VariableIndex\",\n  Current = \"Current\",\n  Wildcard = \"Wildcard\",\n  UnaryExpression = \"UnaryExpression\",\n  Not = \"Not\",\n  Unit = \"Unit\",\n}\n\nexport type IAssignmentOp = \"+=\" | \"-=\" | \"*=\" | \"/=\" | \"=\";\n\nexport type ILiftoscriptScalar = number | boolean | string | IWeight | IPercentage;\nexport type ILiftoscriptValue = ILiftoscriptScalar | (IWeight | IPercentage | number | undefined)[];\ntype ILiftoscriptVarValue = number | string | IWeight | IPercentage;\n\nexport class LiftoscriptSyntaxError extends SyntaxError {\n  public readonly line: number;\n  public readonly offset: number;\n  public readonly from: number;\n  public readonly to: number;\n  public readonly details: ILiftoscriptErrorDetails;\n\n  constructor(\n    message: string,\n    line: number,\n    offset: number,\n    from: number,\n    to: number,\n    details: ILiftoscriptErrorDetails\n  ) {\n    super(message);\n    this.line = line;\n    this.offset = offset;\n    this.from = from;\n    this.to = to;\n    this.details = details;\n  }\n}\n\nfunction getChildren(node: SyntaxNode): SyntaxNode[] {\n  const cur = node.cursor();\n  const result: SyntaxNode[] = [];\n  if (!cur.firstChild()) {\n    return result;\n  }\n  do {\n    result.push(cur.node);\n  } while (cur.nextSibling());\n  return result;\n}\n\nfunction comparing(\n  left: number | IWeight | IPercentage | (number | IWeight | IPercentage | undefined)[],\n  right: number | IWeight | IPercentage | (number | IWeight | IPercentage | undefined)[],\n  operator: \">\" | \"<\" | \">=\" | \"<=\" | \"==\" | \"!=\"\n): boolean {\n  function comparator(l: number | IWeight | IPercentage, r: number | IWeight | IPercentage): boolean {\n    switch (operator) {\n      case \">\":\n        return Weight_gt(l, r);\n      case \"<\":\n        return Weight_lt(l, r);\n      case \">=\":\n        return Weight_gte(l, r);\n      case \"<=\":\n        return Weight_lte(l, r);\n      case \"==\":\n        return Weight_eq(l, r);\n      case \"!=\":\n        return !Weight_eq(l, r);\n    }\n  }\n\n  if (Array.isArray(left) && Array.isArray(right)) {\n    return left.every((l, i) => comparator(l ?? 0, right[i] ?? 0));\n  } else if (Array.isArray(left) && !Array.isArray(right)) {\n    return left.every((l, i) => comparator(l ?? 0, right ?? 0));\n  } else if (!Array.isArray(left) && Array.isArray(right)) {\n    return right.every((r, i) => comparator(left ?? 0, r ?? 0));\n  } else if (!Array.isArray(left) && !Array.isArray(right)) {\n    return comparator(left ?? 0, right ?? 0);\n  } else {\n    throw new Error(\"Impossible case\");\n  }\n}\n\nfunction assert(name: string): never {\n  throw new LiftoscriptSyntaxError(`Missing required nodes for ${name}, this should never happen`, 0, 0, 0, 1, {\n    type: \"internal\",\n    data: { node: name },\n  });\n}\n\nexport interface ILiftoscriptVariableValue<T> {\n  value: T;\n  op: IAssignmentOp;\n  target: (\"*\" | \"_\" | number)[];\n}\n\nexport type ILiftoscriptEvaluatorUpdate =\n  | { type: \"setVariationIndex\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"exerciseVariationIndex\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"descriptionIndex\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"reps\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"minReps\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"weights\"; value: ILiftoscriptVariableValue<number | IPercentage | IWeight> }\n  | { type: \"timers\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"setTime\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"RPE\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"logrpes\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"amraps\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"askweights\"; value: ILiftoscriptVariableValue<number> }\n  | { type: \"numberOfSets\"; value: ILiftoscriptVariableValue<number> };\n\nexport class LiftoscriptEvaluator {\n  private readonly script: string;\n  private readonly state: IProgramState;\n  private readonly otherStates: Record<number, IProgramState>;\n  private readonly bindings: IScriptBindings;\n  private readonly fns: IScriptFunctions;\n  private readonly fnContext: IScriptFnContext;\n  private readonly unit: IUnit;\n  private readonly mode: IProgramMode;\n  private readonly vars: Record<string, ILiftoscriptVarValue> = {};\n  public readonly updates: ILiftoscriptEvaluatorUpdate[] = [];\n\n  constructor(\n    script: string,\n    state: IProgramState,\n    otherStates: Record<number, IProgramState>,\n    bindings: IScriptBindings,\n    fns: IScriptFunctions,\n    fnContext: IScriptFnContext,\n    unit: IUnit,\n    mode: IProgramMode\n  ) {\n    this.script = script;\n    this.state = state;\n    this.otherStates = otherStates;\n    this.bindings = bindings;\n    this.fns = fns;\n    this.fnContext = fnContext;\n    this.unit = unit;\n    this.mode = mode;\n  }\n\n  public static getValueRaw(script: string, node: SyntaxNode): string {\n    return script.slice(node.from, node.to);\n  }\n\n  public static getValue(script: string, node: SyntaxNode): string {\n    return this.getValueRaw(script, node).replace(/\\n/g, \"\\\\n\").replace(/\\t/g, \"\\\\t\");\n  }\n\n  private getValue(node: SyntaxNode): string {\n    return LiftoscriptEvaluator.getValue(this.script, node);\n  }\n\n  private error(message: string, node: SyntaxNode, details: ILiftoscriptErrorDetails): never {\n    const [line, offset] = this.getLineAndOffset(node);\n    throw new LiftoscriptSyntaxError(`${message} (${line}:${offset})`, line, offset, node.from, node.to, details);\n  }\n\n  private staticTypeOfNode(node: SyntaxNode): IScriptStaticType | undefined {\n    if (node.type.name === NodeName.NumberExpression) {\n      return \"number\";\n    } else if (node.type.name === NodeName.WeightExpression) {\n      return \"weight\";\n    } else if (node.type.name === NodeName.Percentage) {\n      return \"percentage\";\n    } else if (node.type.name === NodeName.String) {\n      return \"string\";\n    } else if (node.type.name === NodeName.ParenthesisExpression) {\n      const [inner] = getChildren(node);\n      return inner != null ? this.staticTypeOfNode(inner) : undefined;\n    } else if (node.type.name === NodeName.Ternary) {\n      const [, then, or] = getChildren(node);\n      const thenType = then != null ? this.staticTypeOfNode(then) : undefined;\n      return thenType != null && or != null && this.staticTypeOfNode(or) === thenType ? thenType : undefined;\n    } else if (node.type.name === NodeName.BinaryExpression) {\n      const [left, operator, right] = getChildren(node);\n      if (operator != null && this.getValue(operator) === \"+\") {\n        const isString = [left, right].some((side) => side != null && this.staticTypeOfNode(side) === \"string\");\n        return isString ? \"string\" : undefined;\n      }\n    } else if (node.type.name === NodeName.VariableExpression) {\n      if (node.getChildren(NodeName.VariableIndex).length > 0) {\n        return undefined;\n      }\n      const nameNode = node.getChild(NodeName.Keyword);\n      const name = nameNode != null ? this.getValue(nameNode) : undefined;\n      return name != null ? LiftoscriptFns_bindingStaticType(name) : undefined;\n    }\n    return undefined;\n  }\n\n  private isStaticString(node: SyntaxNode | null | undefined): boolean {\n    return node != null && this.staticTypeOfNode(node) === \"string\";\n  }\n\n  private stringNotAllowed(node: SyntaxNode, target: string): never {\n    this.error(`Text can't be used as ${target}`, node, { type: \"stringNotAllowed\", data: { target } });\n  }\n\n  private rejectString(value: ILiftoscriptValue, node: SyntaxNode, target: string): Exclude<ILiftoscriptValue, string> {\n    if (typeof value === \"string\") {\n      this.stringNotAllowed(node, target);\n    }\n    return value;\n  }\n\n  private validateFnArg(name: IScriptFnName, index: number, node: SyntaxNode, value: unknown): void {\n    if (LiftoscriptFns_isValidArg(name, index, value)) {\n      return;\n    }\n    if (Array.isArray(value) && !LiftoscriptFns_acceptsTypeAt(name, index, \"array\")) {\n      const argText = this.getValue(node);\n      this.error(\n        `Function '${name}' doesn't accept arrays. Use an index to pick one value, like '${argText}[1]'`,\n        node,\n        { type: \"fnArrayArgument\", data: { fn: name, argText } }\n      );\n    }\n    const argSignature = LiftoscriptFns_argSignature(name, index);\n    const printedValue =\n      Weight_is(value) || Weight_isPct(value)\n        ? `${Weight_print(value)}`\n        : Array.isArray(value)\n          ? \"an array\"\n          : String(value);\n    this.error(\n      `Argument ${index + 1} (${argSignature?.name}) of '${name}' should be ${argSignature?.hint}, but got ${printedValue}`,\n      node,\n      {\n        type: \"fnArgumentType\",\n        data: { fn: name, index, argName: argSignature?.name, hint: argSignature?.hint, got: printedValue },\n      }\n    );\n  }\n\n  private getLineAndOffset(node: SyntaxNode): [number, number] {\n    const linesLengths = this.script.split(\"\\n\").map((l) => l.length + 1);\n    let offset = 0;\n    for (let i = 0; i < linesLengths.length; i++) {\n      const lineLength = linesLengths[i];\n      if (node.from > offset && node.from < offset + lineLength) {\n        return [i + 1, node.from - offset];\n      }\n      offset += lineLength;\n    }\n    return [linesLengths.length, linesLengths[linesLengths.length - 1]];\n  }\n\n  public hasKeyword(expr: SyntaxNode, name: string): boolean {\n    const cursor = expr.cursor();\n    do {\n      if (cursor.node.type.name === NodeName.Keyword) {\n        if (this.getValue(cursor.node) === name) {\n          return true;\n        }\n      }\n    } while (cursor.next());\n    return false;\n  }\n\n  private getWeight(expr?: SyntaxNode | null): IWeight | undefined {\n    if (expr?.type.name === NodeName.WeightExpression) {\n      const numberNode = expr.getChild(NodeName.NumberExpression);\n      const unitNode = expr.getChild(NodeName.Unit);\n      if (numberNode == null || unitNode == null) {\n        assert(NodeName.WeightExpression);\n      }\n      const num = this.evaluate(numberNode);\n      if (typeof num !== \"number\") {\n        this.error(\"WeightExpression must contain a number\", numberNode, { type: \"malformedWeight\" });\n      }\n      return Weight_build(num, this.getValue(unitNode) as IUnit);\n    } else {\n      return undefined;\n    }\n  }\n\n  public switchWeightsToUnit(programNode: SyntaxNode, toUnit: IUnit): string {\n    const cursor = programNode.cursor();\n    let script = this.script;\n    let shift = 0;\n    do {\n      if (cursor.node.type.name === NodeName.WeightExpression) {\n        const weight = this.getWeight(cursor.node);\n        if (weight != null) {\n          if (weight.unit !== toUnit) {\n            const from = cursor.node.from;\n            const to = cursor.node.to;\n            const oldWeightStr = Weight_print(weight);\n            const newWeightStr = Weight_print(Weight_smartConvert(weight, toUnit));\n            script = script.substring(0, from + shift) + newWeightStr + script.substring(to + shift);\n            shift = shift + newWeightStr.length - oldWeightStr.length;\n          }\n        }\n      }\n    } while (cursor.next());\n    return script;\n  }\n\n  public getStateVariableKeys(expr: SyntaxNode): Set<string> {\n    const cursor = expr.cursor();\n    const stateKeys: Set<string> = new Set();\n    do {\n      if (cursor.node.type.name === NodeName.StateVariable) {\n        const stateKey = this.getStateKey(cursor.node);\n        if (stateKey != null) {\n          stateKeys.add(stateKey);\n        }\n      }\n    } while (cursor.next());\n    return stateKeys;\n  }\n\n  private getStateKey(expr: SyntaxNode): string | undefined {\n    const index = expr.getChild(NodeName.StateVariableIndex);\n    if (index == null) {\n      const stateKeyNode = expr.getChild(NodeName.Keyword);\n      if (stateKeyNode != null) {\n        const stateKey = this.getValue(stateKeyNode);\n        return stateKey;\n      }\n    }\n    return undefined;\n  }\n\n  private checkStaticStrings(node: SyntaxNode): void {\n    if (node.type.name === NodeName.BinaryExpression) {\n      const [left, operator, right] = getChildren(node);\n      if (operator == null || operator.type.name === NodeName.AndOr) {\n        return;\n      }\n      const isLeftString = this.isStaticString(left);\n      if (!isLeftString && !this.isStaticString(right)) {\n        return;\n      }\n      const op = this.getValue(operator);\n      if (operator.type.name === NodeName.Cmp) {\n        const other = isLeftString ? right : left;\n        const otherType = other != null ? this.staticTypeOfNode(other) : undefined;\n        if (op !== \"==\" && op !== \"!=\" && otherType != null && otherType !== \"string\") {\n          this.error(`Can't compare text with '${op}' to a ${otherType}`, operator, {\n            type: \"stringComparedToNonString\",\n            data: { op },\n          });\n        }\n      } else if (op !== \"+\") {\n        this.error(`Can't apply '${op}' to text`, operator, { type: \"stringOperator\", data: { op } });\n      }\n    } else if (\n      node.type.name === NodeName.AssignmentExpression ||\n      node.type.name === NodeName.IncAssignmentExpression\n    ) {\n      const children = getChildren(node);\n      const target = children[0];\n      const value = children[children.length - 1];\n      if (target == null || !this.isStaticString(value)) {\n        return;\n      }\n      if (target.type.name !== NodeName.Variable) {\n        this.stringNotAllowed(value, `'${this.getValue(target)}'`);\n      }\n      const opNode = node.getChild(NodeName.IncAssignment);\n      const op = opNode != null ? this.getValue(opNode) : \"=\";\n      if (op !== \"=\" && op !== \"+=\") {\n        this.error(`Can't apply '${op}' to text`, opNode ?? node, { type: \"stringOperator\", data: { op } });\n      }\n    } else if (node.type.name === NodeName.VariableIndex || node.type.name === NodeName.StateVariableIndex) {\n      const [inner] = getChildren(node);\n      if (this.isStaticString(inner)) {\n        this.stringNotAllowed(inner, \"an index\");\n      }\n    }\n  }\n\n  public parse(expr: SyntaxNode): void {\n    const cursor = expr.cursor();\n    const vars: IProgramState = {};\n    do {\n      this.checkStaticStrings(cursor.node);\n      if (cursor.node.type.isError) {\n        this.error(\"Syntax error\", cursor.node, { type: \"parse\" });\n      } else if (cursor.node.type.name === NodeName.BuiltinFunctionExpression) {\n        const [keyword, ...fnArgs] = getChildren(cursor.node);\n        if (keyword == null || keyword.type.name !== NodeName.Keyword) {\n          assert(NodeName.BuiltinFunctionExpression);\n        }\n        const name = this.getValue(keyword);\n        if (!LiftoscriptFns_isFnName(name)) {\n          this.error(`Unknown function '${name}'`, keyword, { type: \"unknownFunction\", data: { name } });\n        }\n        const arity = LiftoscriptFns_arity(name);\n        if (fnArgs.length < arity.min || (arity.max != null && fnArgs.length > arity.max)) {\n          const expected = arity.max == null || arity.max === arity.min ? `${arity.min}` : `${arity.min}-${arity.max}`;\n          this.error(\n            `Function '${name}' expects ${expected} argument${arity.max === 1 ? \"\" : \"s\"}, but got ${fnArgs.length}`,\n            keyword,\n            { type: \"fnArity\", data: { fn: name, expected, got: fnArgs.length } }\n          );\n        }\n        fnArgs.forEach((fnArg, index) => {\n          const staticType = this.staticTypeOfNode(fnArg);\n          if (staticType != null && !LiftoscriptFns_acceptsTypeAt(name, index, staticType)) {\n            if (staticType === \"array\") {\n              const argText = this.getValue(fnArg);\n              this.error(\n                `Function '${name}' doesn't accept arrays, and '${argText}' is an array. Use an index to pick one value, like '${argText}[1]'`,\n                fnArg,\n                { type: \"fnArrayArgument\", data: { fn: name, argText } }\n              );\n            } else {\n              const argSignature = LiftoscriptFns_argSignature(name, index);\n              this.error(\n                `Argument ${index + 1} (${argSignature?.name}) of '${name}' should be ${argSignature?.hint}, but '${this.getValue(fnArg)}' is a ${staticType}`,\n                fnArg,\n                {\n                  type: \"fnArgumentType\",\n                  data: {\n                    fn: name,\n                    index,\n                    argName: argSignature?.name,\n                    hint: argSignature?.hint,\n                    got: staticType,\n                  },\n                }\n              );\n            }\n          }\n        });\n      } else if (cursor.node.type.name === NodeName.ForExpression) {\n        const variableNode = cursor.node.getChild(NodeName.Variable);\n        if (variableNode != null) {\n          vars[this.getValue(variableNode)] = 1;\n        }\n      } else if (cursor.node.type.name === NodeName.AssignmentExpression) {\n        const [variableNode] = getChildren(cursor.node);\n        if (variableNode.type.name === NodeName.Variable) {\n          vars[this.getValue(variableNode)] = 1;\n        } else if (variableNode.type.name === NodeName.VariableExpression) {\n          const nameNode = variableNode.getChild(NodeName.Keyword);\n          if (nameNode != null) {\n            const name = this.getValue(nameNode);\n            if (this.mode === \"update\") {\n              if (\n                [\n                  \"reps\",\n                  \"weights\",\n                  \"RPE\",\n                  \"minReps\",\n                  \"numberOfSets\",\n                  \"timers\",\n                  \"setTime\",\n                  \"askweights\",\n                  \"amraps\",\n                  \"logrpes\",\n                ].indexOf(name) === -1\n              ) {\n                this.error(`Cannot assign to '${name}'`, variableNode, { type: \"readonlyVariable\", data: { name } });\n              }\n              const indexExprs = variableNode.getChildren(NodeName.VariableIndex);\n              if (name === \"numberOfSets\" && indexExprs.length > 0) {\n                this.error(`${name} is not an array`, variableNode, { type: \"notAnArray\", data: { name } });\n              } else if (indexExprs.length > 1) {\n                this.error(`Can't assign to set variations, weeks or days here`, variableNode, {\n                  type: \"indexNotAssignableHere\",\n                  data: { name },\n                });\n              }\n            }\n          }\n        }\n      } else if (cursor.node.type.name === NodeName.StateVariable) {\n        const stateKey = this.getStateKey(cursor.node);\n        if (stateKey != null && !(stateKey in this.state)) {\n          this.error(`There's no state variable '${stateKey}'`, cursor.node, {\n            type: \"unknownStateVariable\",\n            data: { stateKey },\n          });\n        }\n      } else if (cursor.node.type.name === NodeName.Variable) {\n        const variableKey = this.getValue(cursor.node);\n        if (!(variableKey in vars)) {\n          this.error(`There's no variable '${variableKey}'`, cursor.node, {\n            type: \"unknownVariable\",\n            data: { name: variableKey },\n          });\n        }\n      } else if (cursor.node.type.name === NodeName.VariableExpression) {\n        const [nameNode, indexExpr] = getChildren(cursor.node);\n        if (nameNode == null) {\n          assert(NodeName.VariableExpression);\n        }\n        const name = this.getValue(nameNode);\n        if (indexExpr != null) {\n          const validNames: (keyof IScriptBindings)[] = [\n            \"originalWeights\",\n            \"weights\",\n            \"reps\",\n            \"minReps\",\n            \"completedReps\",\n            \"completedRepsLeft\",\n            \"completedWeights\",\n            \"timers\",\n            \"setTime\",\n            \"completedSetTime\",\n            \"completedSetTimeLeft\",\n            \"w\",\n            \"r\",\n            \"cr\",\n            \"cw\",\n            \"mr\",\n            \"completedRPE\",\n            \"bodyweight\",\n            \"RPE\",\n            \"setVariationIndex\",\n            \"exerciseVariationIndex\",\n            \"descriptionIndex\",\n            \"numberOfSets\",\n            \"programNumberOfSets\",\n            \"completedNumberOfSets\",\n            \"amraps\",\n            \"logrpes\",\n            \"askweights\",\n          ];\n          if (validNames.indexOf(name as keyof IScriptBindings) === -1) {\n            this.error(`${name} is not an array variable`, nameNode, { type: \"notAnArray\", data: { name } });\n          }\n        } else if (!Object.prototype.hasOwnProperty.call(this.bindings, name)) {\n          this.error(`${name} is not a valid variable`, nameNode, { type: \"unknownVariable\", data: { name } });\n        }\n      }\n    } while (cursor.next());\n  }\n\n  public static changeWeightsToCompleteWeights(oldScript: string): string {\n    const node = LiftoscriptParser.parse(oldScript);\n    const cursor = node.cursor();\n    let script = oldScript;\n    let shift = 0;\n    do {\n      if (cursor.node.type.name === NodeName.VariableExpression) {\n        const keywordNode = cursor.node.getChild(NodeName.Keyword);\n        if (keywordNode) {\n          const keyword = LiftoscriptEvaluator.getValue(oldScript, keywordNode);\n          if (keyword === \"weights\") {\n            const parent = cursor.node.parent;\n            if (\n              parent != null &&\n              !(\n                (parent.type.name === NodeName.AssignmentExpression ||\n                  parent.type.name === NodeName.IncAssignmentExpression) &&\n                parent.firstChild?.from === cursor.node.from &&\n                parent.firstChild?.to === cursor.node.to\n              )\n            ) {\n              const from = keywordNode.from;\n              const to = keywordNode.to;\n              const oldWeightStr = keyword;\n              const newWeightStr = \"completedWeights\";\n              script = script.substring(0, from + shift) + newWeightStr + script.substring(to + shift);\n              shift = shift + newWeightStr.length - oldWeightStr.length;\n            }\n          }\n        }\n      }\n    } while (cursor.next());\n    return script;\n  }\n\n  private evaluateToNumber(expr: SyntaxNode): number {\n    const v = this.rejectString(this.evaluate(expr), expr, \"a number\");\n    const v1 = Array.isArray(v) ? v[0] : v;\n    return Weight_is(v1) ? v1.value : typeof v1 === \"number\" ? v1 : v1 ? 1 : 0;\n  }\n\n  private evaluateToNumberOrWeightOrPercentage(expr: SyntaxNode): number | IWeight | IPercentage {\n    const v = this.rejectString(this.evaluate(expr), expr, \"a number or weight\");\n    const v1 = Array.isArray(v) ? v[0] : v;\n    return Weight_is(v1) || Weight_isPct(v1) ? v1 : typeof v1 === \"number\" ? v1 : v1 ? 1 : 0;\n  }\n\n  private changeNumberOfSets(expression: SyntaxNode, op: IAssignmentOp): number | IWeight | IPercentage {\n    const oldNumberOfSets = this.bindings.weights.length;\n    const evaluatedValue = MathUtils_applyOp(this.bindings.numberOfSets, this.evaluateToNumber(expression), op);\n\n    this.bindings.weights = this.bindings.weights.slice(0, evaluatedValue);\n    this.bindings.originalWeights = this.bindings.originalWeights.slice(0, evaluatedValue);\n    this.bindings.reps = this.bindings.reps.slice(0, evaluatedValue);\n    this.bindings.minReps = this.bindings.minReps.slice(0, evaluatedValue);\n    this.bindings.RPE = this.bindings.RPE.slice(0, evaluatedValue);\n    this.bindings.w = this.bindings.weights.slice(0, evaluatedValue);\n    this.bindings.r = this.bindings.reps.slice(0, evaluatedValue);\n    this.bindings.mr = this.bindings.minReps.slice(0, evaluatedValue);\n    this.bindings.timers = this.bindings.timers.slice(0, evaluatedValue);\n    this.bindings.setTime = this.bindings.setTime.slice(0, evaluatedValue);\n    this.bindings.amraps = this.bindings.amraps.slice(0, evaluatedValue);\n    this.bindings.logrpes = this.bindings.logrpes.slice(0, evaluatedValue);\n    this.bindings.askweights = this.bindings.askweights.slice(0, evaluatedValue);\n    this.bindings.completedReps = this.bindings.completedReps.slice(0, evaluatedValue);\n    this.bindings.completedRepsLeft = this.bindings.completedRepsLeft.slice(0, evaluatedValue);\n    this.bindings.cr = this.bindings.cr.slice(0, evaluatedValue);\n    this.bindings.cw = this.bindings.cw.slice(0, evaluatedValue);\n    this.bindings.completedWeights = this.bindings.completedWeights.slice(0, evaluatedValue);\n    this.bindings.completedRPE = this.bindings.completedRPE.slice(0, evaluatedValue);\n    this.bindings.isCompleted = this.bindings.isCompleted.slice(0, evaluatedValue);\n\n    const ns = oldNumberOfSets - 1;\n    for (let i = 0; i < evaluatedValue; i += 1) {\n      if (i > ns) {\n        this.bindings.weights[i] = Weight_build(\n          this.bindings.weights[ns]?.value ?? 0,\n          this.bindings.weights[ns]?.unit || \"lb\"\n        );\n        this.bindings.originalWeights[i] = Weight_buildAny(\n          this.bindings.originalWeights[ns]?.value ?? 0,\n          this.bindings.originalWeights[ns]?.unit || \"lb\"\n        );\n        this.bindings.reps[i] = this.bindings.reps[ns] ?? 0;\n        this.bindings.timers[i] = this.bindings.timers[ns];\n        this.bindings.setTime[i] = this.bindings.setTime[ns];\n        this.bindings.amraps[i] = this.bindings.amraps[ns];\n        this.bindings.logrpes[i] = this.bindings.logrpes[ns];\n        this.bindings.askweights[i] = this.bindings.askweights[ns];\n        this.bindings.minReps[i] = this.bindings.minReps[ns];\n        this.bindings.RPE[i] = this.bindings.RPE[ns];\n        this.bindings.w[i] = this.bindings.weights[i];\n        this.bindings.r[i] = this.bindings.reps[i];\n        this.bindings.mr[i] = this.bindings.minReps[i];\n        this.bindings.completedReps[i] = undefined;\n        this.bindings.completedRepsLeft[i] = undefined;\n        this.bindings.completedWeights[i] = undefined;\n        this.bindings.completedRPE[i] = undefined;\n        this.bindings.cr[i] = undefined;\n        this.bindings.cw[i] = undefined;\n        this.bindings.isCompleted[i] = 0;\n      }\n    }\n\n    this.bindings.numberOfSets = evaluatedValue;\n    this.bindings.ns = evaluatedValue;\n\n    return evaluatedValue;\n  }\n\n  private changeBinding(\n    key: \"reps\" | \"weights\" | \"RPE\" | \"minReps\" | \"timers\" | \"setTime\" | \"logrpes\" | \"amraps\" | \"askweights\",\n    expression: SyntaxNode,\n    indexExprs: SyntaxNode[],\n    op: IAssignmentOp\n  ): number | IWeight | IPercentage {\n    const indexes = indexExprs.map((ie) => getChildren(ie)[0]);\n    const maxTargetLength = 1;\n    if (indexes.length > maxTargetLength) {\n      this.error(`${key} can only have 1 value inside []`, expression, {\n        type: \"tooManyIndexes\",\n        data: { key, max: 1 },\n      });\n    }\n    const indexValues = this.calculateIndexValues(indexes);\n    const normalizedIndexValues = this.normalizeTarget(indexValues, maxTargetLength);\n    const [setIndex] = normalizedIndexValues;\n    let value: number | IWeight | IPercentage = 0;\n    if (key === \"weights\") {\n      for (let i = 0; i < this.bindings.weights.length; i += 1) {\n        if (!this.bindings.isCompleted[i] && (setIndex === \"*\" || setIndex === i + 1)) {\n          const evalutedValue = this.evaluateToNumberOrWeightOrPercentage(expression);\n          const newValue = Weight_applyOp(\n            this.bindings.rm1,\n            this.bindings.weights[i] ?? Weight_build(0, this.unit),\n            evalutedValue,\n            op\n          );\n          value = Weight_convertToWeight(this.bindings.rm1, newValue, this.unit);\n          this.bindings.originalWeights[i] = value;\n          this.bindings.weights[i] = this.fns.roundWeight([value], this.fnContext, this.bindings);\n        }\n      }\n    } else {\n      for (let i = 0; i < this.bindings[key].length; i += 1) {\n        if (!this.bindings.isCompleted[i] && (setIndex === \"*\" || setIndex === i + 1)) {\n          const evaluatedValue = this.evaluateToNumber(expression);\n          value = MathUtils_applyOp(this.bindings[key][i] ?? 0, evaluatedValue, op);\n          if (key === \"RPE\") {\n            value = MathUtils_round(MathUtils_clamp(value, 0, 10), 0.5);\n          }\n          if (key === \"amraps\" || key === \"logrpes\" || key === \"askweights\") {\n            value = Math.round(MathUtils_clamp(value, 0, 1));\n          }\n          this.bindings[key][i] = value;\n        }\n      }\n    }\n    return value;\n  }\n\n  private recordVariableUpdate(\n    key:\n      | \"reps\"\n      | \"weights\"\n      | \"timers\"\n      | \"setTime\"\n      | \"RPE\"\n      | \"minReps\"\n      | \"setVariationIndex\"\n      | \"exerciseVariationIndex\"\n      | \"descriptionIndex\"\n      | \"numberOfSets\"\n      | \"logrpes\"\n      | \"amraps\"\n      | \"askweights\",\n    expression: SyntaxNode,\n    indexExprs: SyntaxNode[],\n    op: IAssignmentOp\n  ): number | IWeight | IPercentage {\n    const indexes = indexExprs.map((ie) => getChildren(ie)[0]);\n    const maxTargetLength =\n      key === \"setVariationIndex\" || key === \"exerciseVariationIndex\" || key === \"descriptionIndex\"\n        ? 2\n        : key === \"numberOfSets\"\n          ? 3\n          : 4;\n    if (key === \"setVariationIndex\") {\n      if (indexes.length > maxTargetLength) {\n        this.error(`setVariationIndex can only have 2 values inside [*:*]`, expression, {\n          type: \"tooManyIndexes\",\n          data: { key, max: 2 },\n        });\n      }\n    } else if (key === \"exerciseVariationIndex\") {\n      if (indexes.length > maxTargetLength) {\n        this.error(`exerciseVariationIndex can only have 2 values inside [*:*]`, expression, {\n          type: \"tooManyIndexes\",\n          data: { key, max: 2 },\n        });\n      }\n    } else if (key === \"descriptionIndex\") {\n      if (indexes.length > maxTargetLength) {\n        this.error(`descriptionIndex can only have 2 values inside [*:*]`, expression, {\n          type: \"tooManyIndexes\",\n          data: { key, max: 2 },\n        });\n      }\n    } else if (key === \"numberOfSets\") {\n      if (indexes.length > maxTargetLength) {\n        this.error(`numberOfSets can only have 3 values inside [*:*:*]`, expression, {\n          type: \"tooManyIndexes\",\n          data: { key, max: 3 },\n        });\n      }\n    } else if (indexes.length > maxTargetLength) {\n      this.error(`${key} can only have 4 values inside [*:*:*:*]`, expression, {\n        type: \"tooManyIndexes\",\n        data: { key, max: 4 },\n      });\n    }\n    const indexValues = this.calculateIndexValues(indexes);\n    const normalizedIndexValues = this.normalizeTarget(indexValues, maxTargetLength);\n    let result: number | IWeight | IPercentage;\n    if (key === \"weights\") {\n      result = this.evaluateToNumberOrWeightOrPercentage(expression);\n      this.updates.push({ type: key, value: { value: result, op, target: normalizedIndexValues } });\n    } else {\n      result = this.evaluateToNumber(expression);\n      this.updates.push({ type: key, value: { value: result, op, target: normalizedIndexValues } });\n      if (key === \"setVariationIndex\") {\n        const [week, day] = normalizedIndexValues;\n        if ((week === \"*\" || week === this.bindings.week) && (day === \"*\" || day === this.bindings.day)) {\n          this.bindings.setVariationIndex = result;\n        }\n      } else if (key === \"exerciseVariationIndex\") {\n        const [week, day] = normalizedIndexValues;\n        if ((week === \"*\" || week === this.bindings.week) && (day === \"*\" || day === this.bindings.day)) {\n          this.bindings.exerciseVariationIndex = result;\n        }\n      } else if (key === \"descriptionIndex\") {\n        const [week, day] = normalizedIndexValues;\n        if ((week === \"*\" || week === this.bindings.week) && (day === \"*\" || day === this.bindings.day)) {\n          this.bindings.descriptionIndex = result;\n        }\n      } else if (key === \"numberOfSets\") {\n        const [week, day, setVariationIndex] = normalizedIndexValues;\n        if (\n          (week === \"*\" || week === this.bindings.week) &&\n          (day === \"*\" || day === this.bindings.day) &&\n          (setVariationIndex === \"*\" || setVariationIndex === this.bindings.setVariationIndex)\n        ) {\n          this.bindings.numberOfSets = result;\n          this.bindings.ns = result;\n        }\n      }\n    }\n\n    return result;\n  }\n\n  private calculateIndexValues(indexes: SyntaxNode[]): (number | \"*\")[] {\n    return CollectionUtils_compact(indexes).map((ie) => {\n      if (ie.type.name === NodeName.Wildcard) {\n        return \"*\" as const;\n      } else {\n        const v = this.rejectString(this.evaluate(ie), ie, \"an index\");\n        const v1 = Array.isArray(v) ? v[0] : v;\n        return Weight_is(v1) ? v1.value : typeof v1 === \"number\" ? v1 : v1 ? 1 : 0;\n      }\n    });\n  }\n\n  private normalizeTarget(target: (number | \"*\")[], length: number): (number | \"*\")[] {\n    const newTarget = [...target];\n    for (let i = 0; i < length - target.length; i += 1) {\n      newTarget.unshift(\"*\");\n    }\n    return newTarget;\n  }\n\n  private toNumber(\n    value: number | boolean | IWeight | IPercentage | (IWeight | IPercentage | number | undefined)[]\n  ): number {\n    if (typeof value === \"number\") {\n      return value;\n    } else if (typeof value === \"boolean\") {\n      return 0;\n    } else if (Weight_is(value)) {\n      return value.value;\n    } else if (Weight_isPct(value)) {\n      return value.value;\n    } else if (Array.isArray(value)) {\n      return this.toNumber(value[0] ?? 0);\n    } else {\n      return 0;\n    }\n  }\n\n  private compareText(op: string, left: ILiftoscriptValue, right: ILiftoscriptValue, node: SyntaxNode): boolean {\n    if (op === \"&&\") {\n      return !!left && !!right;\n    } else if (op === \"||\") {\n      return !!left || !!right;\n    } else if (op === \"==\" || op === \"!=\") {\n      const isEqual = typeof left === \"string\" && typeof right === \"string\" && left === right;\n      return op === \"==\" ? isEqual : !isEqual;\n    } else if (op === \">\" || op === \"<\" || op === \">=\" || op === \"<=\") {\n      if (typeof left !== \"string\" || typeof right !== \"string\") {\n        this.error(`Can't compare text with '${op}' to something that isn't text`, node, {\n          type: \"stringComparedToNonString\",\n          data: { op },\n        });\n      }\n      return op === \">\" ? left > right : op === \"<\" ? left < right : op === \">=\" ? left >= right : left <= right;\n    } else {\n      this.error(`Unknown operator ${op}`, node, { type: \"unknownOperator\", data: { op } });\n    }\n  }\n\n  private operate(\n    op: string,\n    left: ILiftoscriptValue,\n    right: ILiftoscriptValue,\n    node: SyntaxNode\n  ): ILiftoscriptVarValue {\n    if (Array.isArray(left) || Array.isArray(right)) {\n      this.error(`You cannot apply ${op} to arrays`, node, { type: \"operatorOnArray\", data: { op } });\n    }\n    if (typeof left === \"string\" || typeof right === \"string\") {\n      if (op !== \"+\") {\n        this.error(`Can't apply '${op}' to text`, node, { type: \"stringOperator\", data: { op } });\n      }\n      return LiftoscriptPrint_formatValue(left) + LiftoscriptPrint_formatValue(right);\n    }\n    if (typeof left === \"boolean\" || typeof right === \"boolean\") {\n      this.error(`Unknown operator ${op}`, node, { type: \"unknownOperator\", data: { op } });\n    }\n    if (op === \"+\") {\n      return this.add(left, right);\n    } else if (op === \"-\") {\n      return this.subtract(left, right);\n    } else if (op === \"*\") {\n      return this.multiply(left, right);\n    } else if (op === \"/\") {\n      return this.divide(left, right);\n    } else if (op === \"%\") {\n      return this.modulo(left, right);\n    } else {\n      this.error(`Unknown operator ${op} between ${left} and ${right}`, node, {\n        type: \"unknownOperator\",\n        data: { op },\n      });\n    }\n  }\n\n  public evaluate(expr: SyntaxNode): ILiftoscriptValue {\n    if (expr.type.name === NodeName.Program || expr.type.name === NodeName.BlockExpression) {\n      let result: ILiftoscriptValue = 0;\n      for (const child of getChildren(expr)) {\n        if (!child.type.isSkipped) {\n          result = this.evaluate(child);\n        }\n      }\n      return result;\n    } else if (expr.type.name === NodeName.BinaryExpression) {\n      const [left, operator, right] = getChildren(expr);\n      const evalLeft = this.evaluate(left);\n      const evalRight = this.evaluate(right);\n      const op = this.getValue(operator);\n      if (typeof evalLeft === \"string\" || typeof evalRight === \"string\") {\n        return operator.type.name === NodeName.Plus || operator.type.name === NodeName.Times\n          ? this.operate(op, evalLeft, evalRight, operator)\n          : this.compareText(op, evalLeft, evalRight, operator);\n      } else if (typeof evalLeft === \"boolean\" || typeof evalRight === \"boolean\") {\n        if (op === \"&&\") {\n          return evalLeft && evalRight;\n        } else if (op === \"||\") {\n          return evalLeft || evalRight;\n        } else {\n          this.error(`Unknown operator ${op}`, operator, { type: \"unknownOperator\", data: { op } });\n        }\n      } else {\n        if (op === \">\") {\n          return comparing(evalLeft, evalRight, op);\n        } else if (op === \"<\") {\n          return comparing(evalLeft, evalRight, op);\n        } else if (op === \">=\") {\n          return comparing(evalLeft, evalRight, op);\n        } else if (op === \"<=\") {\n          return comparing(evalLeft, evalRight, op);\n        } else if (op === \"==\") {\n          return comparing(evalLeft, evalRight, op);\n        } else if (op === \"!=\") {\n          return comparing(evalLeft, evalRight, op);\n        } else {\n          return this.operate(op, evalLeft, evalRight, operator);\n        }\n      }\n    } else if (expr.type.name === NodeName.NumberExpression) {\n      const numberNode = expr.getChild(NodeName.Number);\n      if (numberNode == null) {\n        assert(NodeName.NumberExpression);\n      }\n      const value = parseFloat(this.getValue(numberNode));\n      const plusNode = expr.getChild(NodeName.Plus);\n      const sign = plusNode ? this.getValue(plusNode) : undefined;\n      return sign === \"-\" ? -value : value;\n    } else if (expr.type.name === NodeName.Percentage) {\n      const value = MathUtils_roundFloat(parseFloat(this.getValue(expr)), 2);\n      return Weight_buildPct(value);\n    } else if (expr.type.name === NodeName.String) {\n      return LiftoscriptEvaluator.getValueRaw(this.script, expr).slice(1, -1);\n    } else if (expr.type.name === NodeName.Ternary) {\n      const [condition, then, or] = getChildren(expr);\n      return this.evaluate(condition) ? this.evaluate(then) : this.evaluate(or);\n    } else if (expr.type.name === NodeName.ForExpression) {\n      const variableNode = expr.getChild(NodeName.Variable);\n      const forInExpression = expr.getChild(NodeName.ForInExpression);\n      const blockNode = expr.getChild(NodeName.BlockExpression);\n      if (variableNode == null) {\n        assert(NodeName.ForExpression);\n      }\n      if (forInExpression == null) {\n        assert(NodeName.ForInExpression);\n      }\n      if (blockNode == null) {\n        assert(NodeName.BlockExpression);\n      }\n      const forIn = this.evaluate(forInExpression);\n      if (!Array.isArray(forIn)) {\n        this.error(`for in expression should return an array`, forInExpression, { type: \"forInNotArray\" });\n      }\n      const varKey = this.getValue(variableNode).replace(\"var.\", \"\");\n      for (let i = 1; i <= forIn.length; i += 1) {\n        this.vars[varKey] = i;\n        this.evaluate(blockNode);\n      }\n      return forIn.length;\n    } else if (expr.type.name === NodeName.IfExpression) {\n      const parenthesisNodes = expr.getChildren(NodeName.ParenthesisExpression);\n      const blockNodes = expr.getChildren(NodeName.BlockExpression);\n      while (parenthesisNodes.length > 0) {\n        const parenthesisNode = parenthesisNodes.shift()!;\n        const blockNode = blockNodes.shift()!;\n        const condition = this.evaluate(parenthesisNode);\n        if (condition) {\n          return this.evaluate(blockNode);\n        }\n      }\n      const lastBlock = blockNodes.shift();\n      if (lastBlock != null) {\n        return this.evaluate(lastBlock);\n      } else {\n        return 0;\n      }\n    } else if (expr.type.name === NodeName.ParenthesisExpression) {\n      const [node] = getChildren(expr);\n      if (node == null) {\n        assert(NodeName.ParenthesisExpression);\n      }\n      return this.evaluate(node);\n    } else if (expr.type.name === NodeName.StateVariableIndex) {\n      const [expression] = getChildren(expr);\n      return this.evaluate(expression);\n    } else if (expr.type.name === NodeName.AssignmentExpression) {\n      const [variableNode, expression] = getChildren(expr);\n      if (\n        variableNode == null ||\n        (variableNode.type.name !== NodeName.StateVariable &&\n          variableNode.type.name !== NodeName.VariableExpression &&\n          variableNode.type.name !== NodeName.Variable) ||\n        expression == null\n      ) {\n        assert(NodeName.AssignmentExpression);\n      }\n      if (variableNode.type.name === NodeName.VariableExpression) {\n        const nameNode = variableNode.getChild(NodeName.Keyword);\n        if (nameNode == null) {\n          this.error(`Missing variable name`, variableNode, { type: \"missingVariableName\" });\n        }\n        const indexExprs = variableNode.getChildren(NodeName.VariableIndex);\n        const variable = this.getValue(nameNode);\n        if (variable === \"rm1\") {\n          if (indexExprs.length > 0) {\n            this.error(`rm1 is not an array`, expr, { type: \"notAnArray\", data: { name: \"rm1\" } });\n          }\n          const evaluatedValue = this.rejectString(this.evaluate(expression), expression, \"rm1\");\n          let value = Array.isArray(evaluatedValue) ? evaluatedValue[0] : evaluatedValue;\n          value = value ?? 0;\n          value = value === true ? 1 : value === false ? 0 : value;\n          value = Weight_convertToWeight(this.bindings.rm1, value, this.unit);\n          this.bindings.rm1 = value;\n          return value;\n        } else if (\n          this.mode === \"planner\" &&\n          (variable === \"reps\" ||\n            variable === \"weights\" ||\n            variable === \"RPE\" ||\n            variable === \"minReps\" ||\n            variable === \"timers\" ||\n            variable === \"setTime\" ||\n            variable === \"logrpes\" ||\n            variable === \"amraps\" ||\n            variable === \"askweights\" ||\n            variable === \"setVariationIndex\" ||\n            variable === \"exerciseVariationIndex\" ||\n            variable === \"descriptionIndex\" ||\n            variable === \"numberOfSets\")\n        ) {\n          return this.recordVariableUpdate(variable, expression, indexExprs, \"=\");\n        } else if (this.mode === \"update\" && variable === \"numberOfSets\") {\n          return this.changeNumberOfSets(expression, \"=\");\n        } else if (\n          this.mode === \"update\" &&\n          (variable === \"reps\" ||\n            variable === \"weights\" ||\n            variable === \"RPE\" ||\n            variable === \"amraps\" ||\n            variable === \"logrpes\" ||\n            variable === \"askweights\" ||\n            variable === \"minReps\" ||\n            variable === \"timers\" ||\n            variable === \"setTime\")\n        ) {\n          return this.changeBinding(variable, expression, indexExprs, \"=\");\n        } else {\n          this.error(`Unknown variable '${variable}'`, variableNode, {\n            type: \"unknownVariable\",\n            data: { name: variable },\n          });\n        }\n      } else if (variableNode.type.name === NodeName.Variable) {\n        const varKey = this.getValue(variableNode).replace(\"var.\", \"\");\n        const value = this.evaluate(expression);\n        if (Weight_is(value) || Weight_isPct(value) || typeof value === \"number\" || typeof value === \"string\") {\n          this.vars[varKey] = value;\n        } else {\n          this.vars[varKey] = value ? 1 : 0;\n        }\n        return this.vars[varKey];\n      } else {\n        const indexNode = variableNode.getChild(NodeName.StateVariableIndex);\n        const stateKeyNode = variableNode.getChild(NodeName.Keyword);\n        if (stateKeyNode != null) {\n          const stateKey = this.getValue(stateKeyNode);\n          let state: IProgramState | undefined;\n          if (indexNode == null) {\n            if (stateKey in this.state) {\n              state = this.state;\n            } else {\n              this.error(`There's no state variable '${stateKey}'`, variableNode, {\n                type: \"unknownStateVariable\",\n                data: { stateKey },\n              });\n            }\n          } else {\n            const indexEval = this.rejectString(this.evaluate(indexNode), indexNode, \"an index\");\n            const index = this.toNumber(indexEval);\n            state = this.otherStates[index];\n          }\n          const value = this.rejectString(this.evaluate(expression), expression, `state.${stateKey}`);\n          if (state != null) {\n            if (Weight_is(value) || Weight_isPct(value) || typeof value === \"number\") {\n              state[stateKey] = value;\n            } else {\n              state[stateKey] = value ? 1 : 0;\n            }\n          }\n          return value;\n        } else {\n          return 0;\n        }\n      }\n    } else if (expr.type.name === NodeName.IncAssignmentExpression) {\n      const [stateVar, incAssignmentExpr, expression] = getChildren(expr);\n      if (\n        stateVar == null ||\n        (stateVar.type.name !== NodeName.StateVariable &&\n          stateVar.type.name !== NodeName.VariableExpression &&\n          stateVar.type.name !== NodeName.Variable) ||\n        expression == null ||\n        incAssignmentExpr == null\n      ) {\n        assert(NodeName.IncAssignmentExpression);\n      }\n      if (stateVar.type.name === NodeName.VariableExpression) {\n        const nameNode = stateVar.getChild(NodeName.Keyword);\n        if (nameNode == null) {\n          this.error(`Missing variable name`, stateVar, { type: \"missingVariableName\" });\n        }\n        const indexExprs = stateVar.getChildren(NodeName.VariableIndex);\n        const variable = this.getValue(nameNode);\n        if (variable === \"rm1\") {\n          if (indexExprs.length > 0) {\n            this.error(`rm1 is not an array`, expr, { type: \"notAnArray\", data: { name: \"rm1\" } });\n          }\n          const evaluatedValue = this.rejectString(this.evaluate(expression), expression, \"rm1\");\n          let value = Array.isArray(evaluatedValue) ? evaluatedValue[0] : evaluatedValue;\n          value = value ?? 0;\n          value = value === true ? 1 : value === false ? 0 : value;\n\n          const op = this.getValue(incAssignmentExpr);\n          if (op === \"+=\") {\n            this.bindings.rm1 = Weight_convertToWeight(\n              this.bindings.rm1,\n              this.add(this.bindings.rm1, value),\n              this.unit\n            );\n          } else if (op === \"-=\") {\n            this.bindings.rm1 = Weight_convertToWeight(\n              this.bindings.rm1,\n              this.subtract(this.bindings.rm1, value),\n              this.unit\n            );\n          } else if (op === \"*=\") {\n            this.bindings.rm1 = Weight_convertToWeight(\n              this.bindings.rm1,\n              this.multiply(this.bindings.rm1, value),\n              this.unit\n            );\n          } else if (op === \"/=\") {\n            this.bindings.rm1 = Weight_convertToWeight(\n              this.bindings.rm1,\n              this.divide(this.bindings.rm1, value),\n              this.unit\n            );\n          } else {\n            this.error(`Unknown operator ${op} after ${variable}`, incAssignmentExpr, {\n              type: \"unknownAssignmentOperator\",\n              data: { op, variable },\n            });\n          }\n          return this.bindings.rm1;\n        } else if (\n          this.mode === \"planner\" &&\n          (variable === \"reps\" ||\n            variable === \"weights\" ||\n            variable === \"RPE\" ||\n            variable === \"minReps\" ||\n            variable === \"timers\" ||\n            variable === \"setTime\" ||\n            variable === \"setVariationIndex\" ||\n            variable === \"exerciseVariationIndex\" ||\n            variable === \"descriptionIndex\" ||\n            variable === \"numberOfSets\")\n        ) {\n          const op = this.getValue(incAssignmentExpr);\n          if (op !== \"=\" && op !== \"+=\" && op !== \"-=\" && op !== \"*=\" && op !== \"/=\") {\n            this.error(`Unknown operator ${op} after ${variable}`, incAssignmentExpr, {\n              type: \"unknownAssignmentOperator\",\n              data: { op, variable },\n            });\n          }\n          return this.recordVariableUpdate(variable, expression, indexExprs, op);\n        } else if (this.mode === \"update\" && variable === \"numberOfSets\") {\n          const op = this.getValue(incAssignmentExpr);\n          if (op !== \"=\" && op !== \"+=\" && op !== \"-=\" && op !== \"*=\" && op !== \"/=\") {\n            this.error(`Unknown operator ${op} after ${variable}`, incAssignmentExpr, {\n              type: \"unknownAssignmentOperator\",\n              data: { op, variable },\n            });\n          }\n          return this.changeNumberOfSets(expression, op);\n        } else if (\n          this.mode === \"update\" &&\n          (variable === \"reps\" ||\n            variable === \"weights\" ||\n            variable === \"RPE\" ||\n            variable === \"minReps\" ||\n            variable === \"timers\" ||\n            variable === \"setTime\")\n        ) {\n          const op = this.getValue(incAssignmentExpr);\n          if (op !== \"=\" && op !== \"+=\" && op !== \"-=\" && op !== \"*=\" && op !== \"/=\") {\n            this.error(`Unknown operator ${op} after ${variable}`, incAssignmentExpr, {\n              type: \"unknownAssignmentOperator\",\n              data: { op, variable },\n            });\n          }\n          return this.changeBinding(variable, expression, indexExprs, op);\n        } else {\n          this.error(`Unknown variable '${variable}'`, stateVar, {\n            type: \"unknownVariable\",\n            data: { name: variable },\n          });\n        }\n      } else if (stateVar.type.name === NodeName.Variable) {\n        const varKey = this.getValue(stateVar).replace(\"var.\", \"\");\n        let value = this.evaluate(expression);\n        if (!(Weight_is(value) || Weight_isPct(value) || typeof value === \"number\" || typeof value === \"string\")) {\n          value = value ? 1 : 0;\n        }\n        const op = this.getValue(incAssignmentExpr);\n        if (op !== \"+=\" && op !== \"-=\" && op !== \"*=\" && op !== \"/=\") {\n          this.error(`Unknown operator ${op} after ${varKey}`, incAssignmentExpr, {\n            type: \"unknownAssignmentOperator\",\n            data: { op, variable: varKey },\n          });\n        }\n        this.vars[varKey] = this.operate(op.slice(0, 1), this.vars[varKey], value, incAssignmentExpr);\n        return this.vars[varKey];\n      } else {\n        const indexNode = stateVar.getChild(NodeName.StateVariableIndex);\n        const stateKeyNode = stateVar.getChild(NodeName.Keyword);\n        if (stateKeyNode != null) {\n          const stateKey = this.getValue(stateKeyNode);\n          let state: IProgramState | undefined;\n          if (indexNode == null) {\n            if (stateKey in this.state) {\n              state = this.state;\n            } else {\n              this.error(`There's no state variable '${stateKey}'`, stateVar, {\n                type: \"unknownStateVariable\",\n                data: { stateKey },\n              });\n            }\n          } else {\n            const indexEval = this.rejectString(this.evaluate(indexNode), indexNode, \"an index\");\n            const index = this.toNumber(indexEval);\n            state = this.otherStates[index];\n          }\n\n          let value = this.rejectString(this.evaluate(expression), expression, `state.${stateKey}`);\n          if (state != null) {\n            if (!(Weight_is(value) || Weight_isPct(value) || typeof value === \"number\")) {\n              value = value ? 1 : 0;\n            }\n            const op = this.getValue(incAssignmentExpr);\n            const currentValue = state[stateKey] ?? 0;\n            if (op === \"+=\") {\n              state[stateKey] = this.add(currentValue, value);\n            } else if (op === \"-=\") {\n              state[stateKey] = this.subtract(currentValue, value);\n            } else if (op === \"*=\") {\n              state[stateKey] = this.multiply(currentValue, value);\n            } else if (op === \"/=\") {\n              state[stateKey] = this.divide(currentValue, value);\n            } else {\n              this.error(`Unknown operator ${op} after state.${stateKey}`, incAssignmentExpr, {\n                type: \"unknownAssignmentOperator\",\n                data: { op, variable: `state.${stateKey}` },\n              });\n            }\n            return state[stateKey];\n          } else {\n            return value;\n          }\n        } else {\n          return 0;\n        }\n      }\n    } else if (expr.type.name === NodeName.BuiltinFunctionExpression) {\n      const fns = this.fns;\n      const [keyword, ...args] = getChildren(expr);\n      if (keyword == null || keyword.type.name !== NodeName.Keyword) {\n        assert(NodeName.BuiltinFunctionExpression);\n      }\n      const name = this.getValue(keyword);\n      if (LiftoscriptFns_isFnName(name) && fns[name] != null) {\n        const argValues = args.map((a, index) => {\n          const value = this.evaluate(a);\n          this.validateFnArg(name, index, a, value);\n          return value;\n        });\n        const fn = fns[name];\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return (fn as any)(argValues, this.fnContext, this.bindings);\n      } else {\n        this.error(`Unknown function '${name}'`, keyword, { type: \"unknownFunction\", data: { name } });\n      }\n    } else if (expr.type.name === NodeName.UnaryExpression) {\n      const [, expression] = getChildren(expr);\n      if (expression == null) {\n        assert(NodeName.UnaryExpression);\n      }\n      const evaluated = this.evaluate(expression);\n      return !evaluated;\n    } else if (expr.type.name === NodeName.WeightExpression) {\n      return this.getWeight(expr) ?? Weight_build(0, this.unit);\n    } else if (expr.type.name === NodeName.VariableExpression) {\n      const [nameNode, ...indexExprs] = getChildren(expr);\n      if (nameNode == null) {\n        assert(NodeName.VariableExpression);\n      }\n      const name = this.getValue(nameNode) as keyof IScriptBindings;\n      if (indexExprs.some((e) => e.type.name !== NodeName.VariableIndex)) {\n        assert(NodeName.VariableIndex);\n      }\n      if (indexExprs.length === 0) {\n        let value = this.bindings[name];\n        if (Array.isArray(value) && name === \"minReps\") {\n          value = value.map((v, i) => (v as number) ?? this.bindings.reps[i]);\n        }\n        return value;\n      } else if (indexExprs.length === 1) {\n        const indexExpr = indexExprs[0];\n        const indexNode = getChildren(indexExpr)[0];\n        if (indexNode.type.name === NodeName.Wildcard || indexNode.type.name === NodeName.Current) {\n          this.error(`Can't use '*' or '_' as an index when reading from variables`, indexNode, {\n            type: \"wildcardIndexOnRead\",\n          });\n        }\n        const indexEval = this.rejectString(this.evaluate(indexNode), indexNode, \"an index\");\n        let index: number;\n        if (Weight_is(indexEval) || Weight_isPct(indexEval)) {\n          index = indexEval.value;\n        } else if (typeof indexEval === \"number\") {\n          index = indexEval;\n        } else {\n          index = indexEval ? 1 : 0;\n        }\n        index -= 1;\n        const binding = this.bindings[name];\n        if (!Array.isArray(binding)) {\n          this.error(`Variable ${name} should be an array`, nameNode, { type: \"notAnArray\", data: { name } });\n        }\n        if (index >= binding.length) {\n          this.error(`Out of bounds index ${index + 1} for array ${name}`, nameNode, {\n            type: \"indexOutOfBounds\",\n            data: { name, index: index + 1 },\n          });\n        }\n        let value = binding[index];\n        if (value == null) {\n          value = name === \"minReps\" ? (this.bindings.reps[index] ?? 0) : 0;\n        }\n        return value;\n      } else {\n        this.error(`Can't use [1:1] syntax when reading from the ${name} variable`, expr, {\n          type: \"rangeIndexOnRead\",\n          data: { name },\n        });\n      }\n    } else if (expr.type.name === NodeName.StateVariable) {\n      const stateKey = this.getStateKey(expr);\n      if (stateKey == null) {\n        this.error(`You cannot read from other exercises states, you can only write to them`, expr, {\n          type: \"otherStateIsWriteOnly\",\n        });\n      }\n      if (stateKey in this.state) {\n        return this.state[stateKey];\n      } else {\n        this.error(`There's no state variable '${stateKey}'`, expr, {\n          type: \"unknownStateVariable\",\n          data: { stateKey },\n        });\n      }\n    } else if (expr.type.name === NodeName.Variable) {\n      const varKey = this.getValue(expr).replace(\"var.\", \"\");\n      if (varKey in this.vars) {\n        return this.vars[varKey];\n      } else {\n        this.error(`There's no variable '${varKey}'`, expr, { type: \"unknownVariable\", data: { name: varKey } });\n      }\n    } else if (expr.type.name === NodeName.ForInExpression) {\n      const child = getChildren(expr)[0];\n      return this.evaluate(child);\n    } else {\n      this.error(`Unknown node type ${expr.node.type.name}`, expr, {\n        type: \"unexpectedNode\",\n        data: { node: expr.node.type.name },\n      });\n    }\n  }\n\n  private add(\n    one: IWeight | number | IPercentage,\n    two: IWeight | number | IPercentage\n  ): IWeight | number | IPercentage {\n    return this.operation(this.bindings.rm1, one, two, (a, b) => a + b);\n  }\n\n  private subtract(\n    one: IWeight | number | IPercentage,\n    two: IWeight | number | IPercentage\n  ): IWeight | number | IPercentage {\n    return this.operation(this.bindings.rm1, one, two, (a, b) => a - b);\n  }\n\n  private multiply(\n    one: IWeight | number | IPercentage,\n    two: IWeight | number | IPercentage\n  ): IWeight | number | IPercentage {\n    return this.operation(this.bindings.rm1, one, two, (a, b) => a * b);\n  }\n\n  // Division/modulo by zero returns 0 instead of NaN - NaN serializes to null in JSON\n  // and corrupts storage (fails schema validation on the server)\n  private divide(\n    one: IWeight | number | IPercentage,\n    two: IWeight | number | IPercentage\n  ): IWeight | number | IPercentage {\n    return this.operation(this.bindings.rm1, one, two, (a, b) => (b === 0 ? 0 : a / b));\n  }\n\n  private modulo(\n    one: IWeight | number | IPercentage,\n    two: IWeight | number | IPercentage\n  ): IWeight | number | IPercentage {\n    return this.operation(undefined, one, two, (a, b) => (b === 0 ? 0 : a % b));\n  }\n\n  private operation(\n    onerm: IWeight | undefined,\n    a: IWeight | number | IPercentage,\n    b: IWeight | number | IPercentage,\n    op: (x: number, y: number) => number\n  ): IWeight | number | IPercentage {\n    try {\n      return Weight_op(onerm, a, b, op);\n    } catch (error) {\n      const e = error as Error;\n      throw new LiftoscriptSyntaxError(e.message, 0, 0, 0, 0, { type: \"invalidWeightOperation\" });\n    }\n  }\n}\n","import { Exercise_resolveNameAndEquipment } from \"./models/exercise\";\nimport { PlannerKey_fromFullName } from \"./pages/planner/plannerKey\";\nimport { IAllCustomExercises, IExerciseType } from \"./types\";\n\nexport function LiftoscriptExerciseName_isProgramExercise(\n  pattern: string,\n  programExerciseKey: string,\n  customExercises: IAllCustomExercises\n): boolean {\n  return PlannerKey_fromFullName(pattern, customExercises) === programExerciseKey;\n}\n\nexport function LiftoscriptExerciseName_isExercise(\n  pattern: string,\n  exerciseType: IExerciseType,\n  customExercises: IAllCustomExercises\n): boolean {\n  const colonIndex = pattern.indexOf(\":\");\n  const nameAndEquipment = (colonIndex === -1 ? pattern : pattern.slice(colonIndex + 1)).trim();\n  const resolved = Exercise_resolveNameAndEquipment(nameAndEquipment, customExercises);\n  if (resolved == null || resolved.exercise.id !== exerciseType.id) {\n    return false;\n  }\n  const defaultEquipment = resolved.exercise.defaultEquipment;\n  return (resolved.exercise.equipment ?? defaultEquipment) === (exerciseType.equipment ?? defaultEquipment);\n}\n","import * as v from \"valibot\";\nimport { VWeight, VPercentage } from \"./types\";\nimport type { IScriptFnContext } from \"./models/progress\";\n\nconst optionalNumbers = v.array(v.optional(v.number()));\nconst optionalWeights = v.array(v.optional(VWeight));\n\nexport const VScriptBindings = v.object({\n  exercise: v.string(),\n  day: v.number(),\n  week: v.number(),\n  dayInWeek: v.number(),\n  originalWeights: v.array(v.union([VWeight, VPercentage])),\n  weights: optionalWeights,\n  completedWeights: optionalWeights,\n  rm1: VWeight,\n  reps: optionalNumbers,\n  minReps: optionalNumbers,\n  amraps: optionalNumbers,\n  askweights: optionalNumbers,\n  logrpes: optionalNumbers,\n  timers: optionalNumbers,\n  setTime: optionalNumbers,\n  completedSetTime: optionalNumbers,\n  completedSetTimeLeft: optionalNumbers,\n  RPE: optionalNumbers,\n  completedRPE: optionalNumbers,\n  completedReps: optionalNumbers,\n  completedRepsLeft: optionalNumbers,\n  isCompleted: v.array(v.picklist([0, 1])),\n  w: optionalWeights,\n  r: optionalNumbers,\n  mr: optionalNumbers,\n  cr: optionalNumbers,\n  cw: optionalWeights,\n  ns: v.number(),\n  programNumberOfSets: v.number(),\n  numberOfSets: v.number(),\n  completedNumberOfSets: v.number(),\n  setVariationIndex: v.number(),\n  exerciseVariationIndex: v.number(),\n  bodyweight: VWeight,\n  descriptionIndex: v.number(),\n  setIndex: v.number(),\n});\n\nexport type IScriptBindings = v.InferOutput<typeof VScriptBindings>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype IAnySchema = v.GenericSchema<any, any>;\n\nexport interface IScriptFnArgSignature {\n  readonly name: string;\n  readonly schema: IAnySchema;\n  readonly hint: string;\n  readonly optional?: boolean;\n}\n\nexport interface IScriptFnSignature {\n  readonly args?: readonly IScriptFnArgSignature[];\n  readonly variadic?: { readonly schema: IAnySchema; readonly hint: string };\n  readonly returns: IAnySchema;\n}\n\nconst scalar = v.union([v.number(), VWeight, VPercentage]);\nconst numberOrWeight = v.union([v.number(), VWeight]);\nconst numberOrWeightArray = v.array(v.nullish(numberOrWeight));\n// Booleans are allowed in aggregate fns because they historically were silently\n// ignored there, and erroring now would break existing user programs.\nconst aggregatable = v.union([scalar, v.boolean(), v.array(v.nullish(scalar))]);\n\nexport const liftoscriptFnSignatures = {\n  roundWeight: {\n    args: [{ name: \"weight\", schema: numberOrWeight, hint: \"a weight or a number\" }],\n    returns: VWeight,\n  },\n  roundConvertWeight: {\n    args: [{ name: \"weight\", schema: numberOrWeight, hint: \"a weight or a number\" }],\n    returns: VWeight,\n  },\n  calculateTrainingMax: {\n    args: [\n      { name: \"weight\", schema: numberOrWeight, hint: \"a weight or a number\" },\n      { name: \"reps\", schema: v.number(), hint: \"a number of reps\" },\n    ],\n    returns: VWeight,\n  },\n  calculate1RM: {\n    args: [\n      { name: \"weight\", schema: numberOrWeight, hint: \"a weight or a number\" },\n      { name: \"reps\", schema: v.number(), hint: \"a number of reps\" },\n    ],\n    returns: VWeight,\n  },\n  rpeMultiplier: {\n    args: [\n      { name: \"reps\", schema: numberOrWeight, hint: \"a number of reps\" },\n      { name: \"rpe\", schema: numberOrWeight, hint: \"an RPE value\", optional: true },\n    ],\n    returns: v.number(),\n  },\n  floor: {\n    args: [{ name: \"value\", schema: scalar, hint: \"a number, weight or percentage\" }],\n    returns: scalar,\n  },\n  ceil: {\n    args: [{ name: \"value\", schema: scalar, hint: \"a number, weight or percentage\" }],\n    returns: scalar,\n  },\n  round: {\n    args: [{ name: \"value\", schema: scalar, hint: \"a number, weight or percentage\" }],\n    returns: scalar,\n  },\n  sum: {\n    variadic: { schema: aggregatable, hint: \"numbers, weights, percentages or arrays of them\" },\n    returns: scalar,\n  },\n  min: {\n    variadic: { schema: aggregatable, hint: \"numbers, weights, percentages or arrays of them\" },\n    returns: scalar,\n  },\n  max: {\n    variadic: { schema: aggregatable, hint: \"numbers, weights, percentages or arrays of them\" },\n    returns: scalar,\n  },\n  zeroOrGte: {\n    args: [\n      { name: \"values\", schema: numberOrWeightArray, hint: \"an array, like 'completedReps'\" },\n      { name: \"targets\", schema: numberOrWeightArray, hint: \"an array, like 'reps'\" },\n    ],\n    returns: v.boolean(),\n  },\n  print: {\n    variadic: { schema: v.any(), hint: \"any values\" },\n    returns: v.any(),\n  },\n  isProgramExercise: {\n    args: [{ name: \"pattern\", schema: v.string(), hint: \"an exercise name as in the program, like 't1: Squat'\" }],\n    returns: v.boolean(),\n  },\n  isExercise: {\n    args: [{ name: \"pattern\", schema: v.string(), hint: \"an exercise name, like 'Squat' or 'Squat, Barbell'\" }],\n    returns: v.boolean(),\n  },\n  increment: {\n    args: [{ name: \"value\", schema: scalar, hint: \"a number, weight or percentage\" }],\n    returns: scalar,\n  },\n  decrement: {\n    args: [{ name: \"value\", schema: scalar, hint: \"a number, weight or percentage\" }],\n    returns: scalar,\n  },\n  sets: {\n    args: [\n      { name: \"fromIndex\", schema: v.number(), hint: \"a number\" },\n      { name: \"toIndex\", schema: v.number(), hint: \"a number\" },\n      { name: \"minReps\", schema: v.number(), hint: \"a number\" },\n      { name: \"maxReps\", schema: v.number(), hint: \"a number\" },\n      { name: \"isAmrap\", schema: v.number(), hint: \"a number (0 or 1)\" },\n      { name: \"weight\", schema: scalar, hint: \"a weight, number or percentage\" },\n      { name: \"timer\", schema: v.number(), hint: \"a number of seconds\" },\n      { name: \"rpe\", schema: v.number(), hint: \"a number\" },\n      { name: \"shouldLogRpe\", schema: v.number(), hint: \"a number (0 or 1)\" },\n    ],\n    returns: v.number(),\n  },\n} as const satisfies Record<string, IScriptFnSignature>;\n\nexport type IScriptFnName = keyof typeof liftoscriptFnSignatures;\n\ntype IArgOutput<TArg> = TArg extends { schema: infer TSchema extends IAnySchema }\n  ? TArg extends { optional: true }\n    ? v.InferOutput<TSchema> | undefined\n    : v.InferOutput<TSchema>\n  : never;\n\ntype IFnArgs<TSig> = TSig extends { args: infer TArgs extends readonly unknown[] }\n  ? { -readonly [I in keyof TArgs]: IArgOutput<TArgs[I]> }\n  : TSig extends { variadic: { schema: infer TSchema extends IAnySchema } }\n    ? v.InferOutput<TSchema>[]\n    : never;\n\nexport type IScriptFunctions = {\n  [K in IScriptFnName]: (\n    args: IFnArgs<(typeof liftoscriptFnSignatures)[K]>,\n    context: IScriptFnContext,\n    bindings: IScriptBindings\n  ) => v.InferOutput<(typeof liftoscriptFnSignatures)[K][\"returns\"]>;\n};\n\nexport function LiftoscriptFns_isFnName(name: string): name is IScriptFnName {\n  return Object.prototype.hasOwnProperty.call(liftoscriptFnSignatures, name);\n}\n\nexport function LiftoscriptFns_arity(name: IScriptFnName): { min: number; max: number | undefined } {\n  const signature: IScriptFnSignature = liftoscriptFnSignatures[name];\n  if (signature.args == null) {\n    return { min: 0, max: undefined };\n  }\n  const min = signature.args.filter((a) => !a.optional).length;\n  return { min, max: signature.args.length };\n}\n\nexport function LiftoscriptFns_argSignature(name: IScriptFnName, index: number): IScriptFnArgSignature | undefined {\n  const signature: IScriptFnSignature = liftoscriptFnSignatures[name];\n  if (signature.variadic != null) {\n    return { name: \"values\", schema: signature.variadic.schema, hint: signature.variadic.hint };\n  }\n  return signature.args?.[index];\n}\n\nexport function LiftoscriptFns_isValidArg(name: IScriptFnName, index: number, value: unknown): boolean {\n  const argSignature = LiftoscriptFns_argSignature(name, index);\n  if (argSignature == null) {\n    return true;\n  }\n  if (argSignature.optional && value == null) {\n    return true;\n  }\n  return v.is(argSignature.schema, value);\n}\n\nexport type IScriptStaticType = \"number\" | \"weight\" | \"percentage\" | \"array\" | \"string\";\n\nexport function LiftoscriptFns_bindingStaticType(name: string): IScriptStaticType | undefined {\n  const entries: Record<string, IAnySchema | undefined> = VScriptBindings.entries;\n  const schema = Object.prototype.hasOwnProperty.call(entries, name) ? entries[name] : undefined;\n  if (schema == null) {\n    return undefined;\n  }\n  const samples: [IScriptStaticType, unknown][] = [\n    [\"array\", []],\n    [\"number\", 1],\n    [\"weight\", { value: 1, unit: \"lb\" }],\n    [\"percentage\", { value: 1, unit: \"%\" }],\n    [\"string\", \"a\"],\n  ];\n  return samples.find(([, sample]) => v.is(schema, sample))?.[0];\n}\n\nexport function LiftoscriptFns_acceptsTypeAt(name: IScriptFnName, index: number, type: IScriptStaticType): boolean {\n  const samples: Record<IScriptStaticType, unknown[]> = {\n    number: [1],\n    weight: [{ value: 1, unit: \"lb\" }],\n    percentage: [{ value: 1, unit: \"%\" }],\n    array: [[1], [{ value: 1, unit: \"lb\" }], [{ value: 1, unit: \"%\" }], []],\n    string: [\"a\"],\n  };\n  return samples[type].some((sample) => LiftoscriptFns_isValidArg(name, index, sample));\n}\n","import type { ILiftoscriptScalar } from \"./liftoscriptEvaluator\";\nimport { Weight_print } from \"./models/weight\";\nimport { IPercentage, IWeight } from \"./types\";\n\nexport function LiftoscriptPrint_formatValue(value: ILiftoscriptScalar): string {\n  if (typeof value === \"string\") {\n    return value;\n  } else if (typeof value === \"boolean\") {\n    return value ? \"true\" : \"false\";\n  } else {\n    return Weight_print(value);\n  }\n}\n\nexport function LiftoscriptPrint_formatLine(values: (ILiftoscriptScalar | undefined)[]): string {\n  return values.map((value) => LiftoscriptPrint_formatValue(value ?? 0)).join(\", \");\n}\n\nexport function LiftoscriptPrint_formatLegacy(prints?: (number | IWeight | IPercentage)[][]): string[] | undefined {\n  return prints?.map((line) => LiftoscriptPrint_formatLine(line));\n}\n\nexport function LiftoscriptPrint_lines(lines?: string[], legacy?: (number | IWeight | IPercentage)[][]): string[] {\n  return lines ?? LiftoscriptPrint_formatLegacy(legacy) ?? [];\n}\n","import { CollectionUtils_sort } from \"../utils/collection\";\nimport { Dialog_alert } from \"../utils/dialog\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { ObjectUtils_clone, ObjectUtils_keys, ObjectUtils_values } from \"../utils/object\";\nimport { IGraph, IHistoryRecord, IMuscle, ISettings, IStorage } from \"../types\";\nimport { Weight_build } from \"../models/weight\";\nimport { PlannerExerciseEvaluator } from \"../pages/planner/plannerExerciseEvaluator\";\nimport { basicBeginnerProgram } from \"../programs/basicBeginnerProgram\";\nimport { IVersions } from \"../models/versionTracker\";\nimport { Settings_build } from \"../models/settings\";\nimport { Progress_getEntryId } from \"../models/progress\";\nimport { EquipmentUnits_attachSetups } from \"../models/equipmentUnits\";\nimport { MuscleGroupSplit_migrate } from \"../models/muscleGroupSplit\";\n\nlet latestMigrationVersion: number | undefined;\nexport function getLatestMigrationVersion(): string {\n  if (latestMigrationVersion == null) {\n    latestMigrationVersion = CollectionUtils_sort(\n      Object.keys(migrations).map((v) => parseInt(v, 10)),\n      (a, b) => b - a\n    )[0];\n  }\n  return latestMigrationVersion.toString();\n}\n\nexport const migrations = {\n  \"20240720152051_fix_null_entries_set_weights\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const historyRecord of storage.history) {\n      for (const entry of historyRecord.entries) {\n        for (const set of entry.sets) {\n          if (set.weight?.value == null) {\n            set.weight = Weight_build(0, storage.settings.units || \"lb\");\n          }\n        }\n      }\n    }\n    return storage;\n  },\n  \"20240906074315_add_original_weight_to_sets\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const historyRecord of storage.history) {\n      for (const entry of historyRecord.entries) {\n        for (const set of entry.sets) {\n          set.originalWeight = ObjectUtils_clone(set.weight);\n        }\n        for (const set of entry.warmupSets) {\n          set.originalWeight = ObjectUtils_clone(set.weight);\n        }\n      }\n    }\n    return storage;\n  },\n  \"20241101192254_add_deleted_gyms\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    storage.settings.deletedGyms = storage.settings.deletedGyms || [];\n    return storage;\n  },\n  \"20241207120042_add_reminder_timer\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    storage.settings.timers.reminder = storage.settings.timers.reminder ?? 900;\n    return storage;\n  },\n  \"20250211073832_switch_to_planner_programs\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    const currentProgram = storage.programs.find((p) => p.id === storage.currentProgramId);\n    if (currentProgram && currentProgram.planner == null) {\n      const plannerProgram = storage.programs.find((p) => p.planner != null) || {\n        ...basicBeginnerProgram,\n        id: UidFactory_generateUid(8),\n      };\n      storage.programs.push(plannerProgram);\n      storage.currentProgramId = plannerProgram.id;\n      Dialog_alert(\n        `Old-style programs are not supported anymore, your current program now is '${plannerProgram.name}'`\n      );\n    }\n    return storage;\n  },\n  \"20250305183455_cleanup_custom_exercises\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const customExerciseKey of ObjectUtils_keys(storage.settings.exercises)) {\n      const customExercise = storage.settings.exercises[customExerciseKey]!;\n      delete customExercise.defaultEquipment;\n      for (const record of storage.history) {\n        for (const entry of record.entries) {\n          if (entry.exercise.id === customExerciseKey) {\n            entry.exercise = { id: customExerciseKey };\n            record.updatedAt = Date.now();\n          }\n        }\n      }\n      for (const key of ObjectUtils_keys(storage.settings.exerciseData)) {\n        if (key.includes(customExerciseKey)) {\n          if (!storage.settings.exerciseData[customExerciseKey]) {\n            const value = storage.settings.exerciseData[key];\n            delete storage.settings.exerciseData[key];\n            storage.settings.exerciseData[customExercise.id] = value;\n          }\n        }\n      }\n    }\n    return storage;\n  },\n  \"20250306192146_fix_empty_graphs\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const customExerciseKey of ObjectUtils_keys(storage.settings.exercises)) {\n      if (Array.isArray(storage.settings.graphs)) {\n        for (const graph of storage.settings.graphs) {\n          if (graph.type === \"exercise\" && graph.id.includes(customExerciseKey) && graph.id !== customExerciseKey) {\n            graph.id = customExerciseKey;\n          }\n        }\n      }\n    }\n    return storage;\n  },\n  \"20250322014249_add_is_completed\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const record of storage.history) {\n      for (const entry of record.entries) {\n        for (const set of entry.sets) {\n          if (set.completedReps != null) {\n            set.isCompleted = set.isCompleted ?? true;\n            set.completedWeight = set.completedWeight ?? ObjectUtils_clone(set.weight);\n          }\n        }\n      }\n    }\n    return storage;\n  },\n  \"20250329092730_add_workout_settings\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    storage.settings.workoutSettings = storage.settings.workoutSettings || {\n      targetType: \"target\",\n    };\n    return storage;\n  },\n  \"20250331001906_migrate_weights_to_completed_weights\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const program of storage.programs) {\n      for (const week of program.planner?.weeks || []) {\n        for (const day of week.days) {\n          const newExerciseStr = PlannerExerciseEvaluator.changeWeightsToCompletedWeights(day.exerciseText);\n          if (newExerciseStr !== day.exerciseText) {\n            day.exerciseText = newExerciseStr;\n          }\n        }\n      }\n    }\n    return storage;\n  },\n  \"20250429083937_add_ids_to_planner_weeks_and_days\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const program of storage.programs) {\n      for (const week of program.planner?.weeks || []) {\n        week.id = week.id || UidFactory_generateUid(8);\n        for (const day of week.days) {\n          day.id = day.id || UidFactory_generateUid(8);\n        }\n      }\n    }\n    return storage;\n  },\n  \"20250704123128_add_vtypes_and_restructure_subscriptions\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    if (storage.subscription) {\n      if (!Array.isArray(storage.subscription.apple)) {\n        storage.subscription.apple = ObjectUtils_keys(storage.subscription.apple as Record<string, null>).map(\n          (key) => ({\n            vtype: \"subscription_receipt\",\n            value: key,\n            id: UidFactory_generateUid(6),\n            createdAt: Date.now(),\n          })\n        );\n      }\n      if (!Array.isArray(storage.subscription.google)) {\n        storage.subscription.google = ObjectUtils_keys(storage.subscription.google as Record<string, null>).map(\n          (key) => ({\n            vtype: \"subscription_receipt\",\n            value: key,\n            id: UidFactory_generateUid(6),\n            createdAt: Date.now(),\n          })\n        );\n      }\n    }\n\n    for (const program of storage.programs) {\n      program.vtype = program.vtype ?? \"program\";\n      if (program.planner) {\n        program.planner.vtype = program.planner.vtype ?? \"planner\";\n      }\n    }\n    for (const record of storage.history) {\n      record.vtype = record.vtype ?? \"history_record\";\n    }\n    for (const key of ObjectUtils_keys(storage.stats?.weight || {})) {\n      for (const record of storage.stats?.weight[key] || []) {\n        record.vtype = record.vtype ?? \"stat\";\n      }\n    }\n    for (const key of ObjectUtils_keys(storage.stats?.length || {})) {\n      for (const record of storage.stats?.length[key] || []) {\n        record.vtype = record.vtype ?? \"stat\";\n      }\n    }\n    for (const key of ObjectUtils_keys(storage.stats?.percentage || {})) {\n      for (const record of storage.stats?.percentage[key] || []) {\n        record.vtype = record.vtype ?? \"stat\";\n      }\n    }\n    for (const gym of storage.settings.gyms || []) {\n      gym.vtype = gym.vtype ?? \"gym\";\n      for (const equipment of ObjectUtils_values(gym.equipment)) {\n        if (equipment) {\n          equipment.vtype = equipment.vtype ?? \"equipment_data\";\n        }\n      }\n    }\n    for (const exercise of ObjectUtils_values(storage.settings.exercises)) {\n      if (exercise) {\n        exercise.vtype = exercise.vtype ?? \"custom_exercise\";\n      }\n    }\n    if (Array.isArray(storage.settings.graphs || [])) {\n      // @ts-ignore\n      for (const graph of storage.settings.graphs || []) {\n        graph.vtype = graph.vtype ?? \"graph\";\n      }\n    }\n    return storage;\n  },\n  \"20250719104230_add_cloned_at_to_programs\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const program of storage.programs) {\n      program.clonedAt = program.clonedAt ?? Date.now() - Math.round(Math.random() * 1000000);\n    }\n    return storage;\n  },\n  \"20250720120545_make_graphs_atomic_object\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    if (!storage.settings.graphs.vtype) {\n      storage.settings.graphs = {\n        vtype: \"graphs\",\n        graphs: storage.settings.graphs as unknown as IGraph[],\n      };\n      if ((storage._versions?.settings as IVersions<ISettings>)?.graphs) {\n        // @ts-ignore\n        storage._versions.settings.graphs = Date.now();\n      }\n    }\n    return storage;\n  },\n  \"20250815161850_add_gyms_if_empty\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    if (storage.settings.gyms && storage.settings.gyms.length === 0) {\n      storage.settings.gyms.push({\n        ...Settings_build(storage.settings.units).gyms[0],\n      });\n    }\n    return storage;\n  },\n  \"20251005115332_migrate_affiliates_to_affiliates_data\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const key of Object.keys(storage.affiliates || {})) {\n      const value = storage.affiliates[key];\n      if (typeof value === \"number\") {\n        storage.affiliates[key] = { id: key, type: \"program\", timestamp: value, vtype: \"affiliate\" };\n      }\n    }\n    // @ts-ignore\n    if (storage._versions?.affiliates && !(\"items\" in storage._versions?.affiliates)) {\n      const items = storage._versions.affiliates;\n      storage._versions.affiliates = { items, deleted: {} };\n    }\n    return storage;\n  },\n  \"20251030203130_add_muscle_groups\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    storage.settings.muscleGroups = storage.settings.muscleGroups || { vtype: \"muscle_groups_settings\", data: {} };\n    return storage;\n  },\n  \"20251230101232_fix_gym_names\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const gym of storage.settings.gyms || []) {\n      if (gym.name == null) {\n        gym.name = \"Main\";\n      }\n    }\n    return storage;\n  },\n  \"20251231182918_add_vtypes_and_indexes_to_entries_and_sets\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const record of storage.history) {\n      record.vtype = record.vtype || \"history_record\";\n      const progressUi = record.ui;\n      if (progressUi) {\n        progressUi.vtype = progressUi.vtype || \"progress_ui\";\n        progressUi.id = UidFactory_generateUid(8);\n      }\n      for (let entryIndex = 0; entryIndex < record.entries.length; entryIndex++) {\n        const entry = record.entries[entryIndex];\n        entry.vtype = entry.vtype || \"history_entry\";\n        entry.index = entry.index ?? entryIndex;\n        for (let setIndex = 0; setIndex < entry.sets.length; setIndex++) {\n          const set = entry.sets[setIndex];\n          set.vtype = set.vtype || \"set\";\n          set.index = set.index ?? setIndex;\n        }\n        for (let setIndex = 0; setIndex < entry.warmupSets.length; setIndex++) {\n          const set = entry.warmupSets[setIndex];\n          set.vtype = set.vtype || \"set\";\n          set.index = set.index ?? setIndex;\n        }\n      }\n    }\n    return storage;\n  },\n  \"20260103180023_add_progress_array\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    storage.progress = storage.progress || [];\n    return storage;\n  },\n  \"20260124114134_convert_muscle_multipliers_to_object\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const key of ObjectUtils_keys(storage.settings.exerciseData)) {\n      const exerciseData = storage.settings.exerciseData[key];\n      if (exerciseData?.muscleMultipliers && Array.isArray(exerciseData.muscleMultipliers)) {\n        const oldMultipliers = exerciseData.muscleMultipliers as Array<{ muscle: IMuscle; multiplier: number }>;\n        const newMultipliers: Partial<Record<IMuscle, number>> = {};\n        for (const mm of oldMultipliers) {\n          newMultipliers[mm.muscle] = mm.multiplier;\n        }\n        exerciseData.muscleMultipliers = newMultipliers;\n      }\n    }\n    return storage;\n  },\n  \"20260208210220_fill_sets_with_ids\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const record of storage.history) {\n      for (const entry of record.entries) {\n        for (const set of entry.sets) {\n          if (!set.id) {\n            set.id = UidFactory_generateUid(6);\n          }\n        }\n        for (const set of entry.warmupSets) {\n          if (!set.id) {\n            set.id = UidFactory_generateUid(6);\n          }\n        }\n      }\n    }\n    for (const record of storage.progress || []) {\n      for (const entry of record.entries) {\n        for (const set of entry.sets) {\n          if (!set.id) {\n            set.id = UidFactory_generateUid(6);\n          }\n        }\n        for (const set of entry.warmupSets) {\n          if (!set.id) {\n            set.id = UidFactory_generateUid(6);\n          }\n        }\n      }\n    }\n    return storage;\n  },\n  \"20260304084247_fill_entries_with_ids\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const record of storage.history) {\n      for (const entry of record.entries) {\n        if (!entry.id) {\n          entry.id = Progress_getEntryId(entry.exercise);\n        }\n      }\n    }\n    for (const record of storage.progress || []) {\n      for (const entry of record.entries) {\n        if (!entry.id) {\n          entry.id = Progress_getEntryId(entry.exercise);\n        }\n      }\n    }\n    return storage;\n  },\n  \"20260628120000_move_amrap_modal_to_progress\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    // amrapModal and currentEntryIndex moved from progress.ui to progress so they version-sync across devices\n    // like setTimer. Carry over the values from a workout left open across the upgrade.\n    for (const record of storage.progress || []) {\n      const legacyUi = record.ui as\n        | undefined\n        | { amrapModal?: IHistoryRecord[\"amrapModal\"]; currentEntryIndex?: number };\n      if (legacyUi?.amrapModal != null) {\n        if (record.amrapModal == null) {\n          record.amrapModal = legacyUi.amrapModal;\n        }\n        delete legacyUi.amrapModal;\n      }\n      if (legacyUi?.currentEntryIndex != null) {\n        if (record.currentEntryIndex == null) {\n          record.currentEntryIndex = legacyUi.currentEntryIndex;\n        }\n        delete legacyUi.currentEntryIndex;\n      }\n    }\n    return storage;\n  },\n  \"20260702120000_sanitize_pipe_bang_in_custom_exercise_names\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    // `|` now separates exercise variations and `!` marks the current one in Liftoscript, so custom\n    // exercise names can no longer contain them. Occurrence is near-zero (no built-in uses them).\n    const renames: { from: string; to: string }[] = [];\n    for (const customExerciseKey of ObjectUtils_keys(storage.settings.exercises)) {\n      const customExercise = storage.settings.exercises[customExerciseKey];\n      if (customExercise?.name != null && /[|!]/.test(customExercise.name)) {\n        const from = customExercise.name;\n        const to = from.replace(/[|!]/g, \"-\").replace(/\\s+/g, \" \").trim();\n        customExercise.name = to;\n        if (to !== from) {\n          renames.push({ from, to });\n        }\n      }\n    }\n    // Programs reference custom exercises by name in their planner text, so the same names must be\n    // rewritten there - otherwise the parser reads the old `|`/`!` as variation syntax and misparses.\n    if (renames.length > 0) {\n      renames.sort((a, b) => b.from.length - a.from.length);\n      const escapeRegExp = (s: string): string => s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n      for (const program of storage.programs || []) {\n        for (const week of program.planner?.weeks || []) {\n          for (const day of week.days || []) {\n            for (const rename of renames) {\n              day.exerciseText = day.exerciseText.replace(new RegExp(escapeRegExp(rename.from), \"gi\"), rename.to);\n            }\n          }\n        }\n      }\n    }\n    return storage;\n  },\n  \"20260903120000_default_get_ready_to_5s\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    // Only when the key is absent: `0` is someone who deliberately turned the countdown off, and after\n    // this runs a cleared field stays cleared, so the setting is still switchable off.\n    if (storage.settings.timers.getReady == null) {\n      storage.settings.timers.getReady = 5;\n    }\n    return storage;\n  },\n  \"20260906120000_drop_set_timer_without_id\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    for (const record of [...(storage.progress || []), ...(storage.history || [])]) {\n      const setTimer = record.setTimer as { id?: string } | undefined;\n      if (setTimer != null && setTimer.id == null) {\n        record.setTimer = undefined;\n      }\n    }\n    return storage;\n  },\n  \"20260919120000_hide_notes_never_used\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    const records = [...(storage.progress || []), ...(storage.history || [])];\n    const workoutSettings = storage.settings.workoutSettings;\n    if (workoutSettings.showWorkoutNotes == null) {\n      workoutSettings.showWorkoutNotes = records.some((r) => !!r.notes);\n    }\n    if (workoutSettings.showExerciseNotes == null) {\n      workoutSettings.showExerciseNotes = records.some((r) => r.entries.some((e) => !!e.notes));\n    }\n    return storage;\n  },\n  \"20261018120000_attach_equipment_setups\": (aStorage: IStorage): IStorage => {\n    const storage: IStorage = JSON.parse(JSON.stringify(aStorage));\n    storage.settings.gyms = EquipmentUnits_attachSetups(storage.settings.gyms || [], storage.settings.units);\n    return storage;\n  },\n  \"20261022120000_split_muscle_groups\": (aStorage: IStorage): IStorage => {\n    return MuscleGroupSplit_migrate(aStorage);\n  },\n};\n","import { getLatestMigrationVersion, migrations } from \"./migrations\";\nimport { ObjectUtils_keys } from \"../utils/object\";\nimport { IPartialStorage, IStorage } from \"../types\";\nimport { Storage_partialStorageToStorage } from \"../models/storage\";\nimport RB from \"rollbar\";\ndeclare const Rollbar: RB;\n\nexport function unrunMigrations(storage: { version: string }, maxVersion?: string): Array<keyof typeof migrations> {\n  const currentVersion = storage.version != null ? parseInt(storage.version.toString(), 10) : 0;\n  const keys = ObjectUtils_keys(migrations);\n  keys.sort((a, b) => parseInt(a, 10) - parseInt(b, 10));\n  const maxVersionInt = maxVersion != null ? parseInt(maxVersion, 10) : undefined;\n  return keys.filter((versionStr) => {\n    const version = parseInt(versionStr, 10);\n    return version > currentVersion && (maxVersionInt != null ? version <= maxVersionInt : true);\n  });\n}\n\nexport function runMigrations(storage: IStorage | IPartialStorage, maxVersion?: string): IStorage {\n  const newVersions = unrunMigrations(storage, maxVersion);\n  let result = Storage_partialStorageToStorage(storage);\n  for (const version of newVersions) {\n    try {\n      result = migrations[version](result);\n    } catch (error) {\n      const e = error as Error;\n      console.error(`Error running migration ${version}: ${e}`);\n    }\n  }\n  result = { ...result, version: getLatestMigrationVersion() };\n  return result;\n}\n","import { IndexedDBUtils_get } from \"../utils/indexeddb\";\nimport { Persistence } from \"../utils/persistence\";\nimport { IPartialStorage } from \"../types\";\n\nexport interface IAccount {\n  id: string;\n  name?: string;\n  email?: string;\n  numberOfPrograms?: number;\n  numberOfWorkouts?: number;\n  affiliateEnabled?: boolean;\n  isCurrent: boolean;\n}\n\nexport function Account_getFromStorage(id: string, email: string, storage: IPartialStorage): IAccount {\n  return {\n    id,\n    email,\n    name: storage.settings.nickname,\n    numberOfPrograms: storage.programs?.length,\n    numberOfWorkouts: storage.history?.length,\n    affiliateEnabled: storage.settings.affiliateEnabled,\n    isCurrent: true,\n  };\n}\n\nexport async function Account_getAll(persistence: Persistence): Promise<IAccount[]> {\n  const currentAccount = (await IndexedDBUtils_get(\"current_account\")) as string;\n  const summaries = await persistence.getAccountSummaries();\n  return summaries.map((summary) => ({ ...summary, isCurrent: summary.id === currentAccount }));\n}\n","import { Service } from \"../api/service\";\nimport { IStorage } from \"../types\";\nimport { IEither } from \"../utils/types\";\n\n// The \"debug_\" prefix on tempUserId is the single source of truth for a debug session:\n// it forces nosync on every load (see getInitialState) and, since it's never a real\n// user's tempUserId, an accidental sync can only ever land on a throwaway account.\nexport const adminDebugPrefix = \"debug_\";\n\nexport function AdminDebug_scrambledTempUserId(userId: string): string {\n  return `${adminDebugPrefix}${userId}`;\n}\n\nexport function AdminDebug_isDebugAccountId(id: string | undefined): boolean {\n  return id != null && id.startsWith(adminDebugPrefix);\n}\n\nexport async function AdminDebug_fetchStorage(\n  service: Service,\n  tempUserId: string,\n  userId: string,\n  adminKey: string,\n  storageId?: string\n): Promise<IEither<IStorage, string>> {\n  try {\n    const response = await service.getStorage(tempUserId, userId, storageId, adminKey);\n    if (response.storage == null) {\n      return { success: false, error: \"User not found or invalid admin key\" };\n    }\n    const storage: IStorage = { ...response.storage, tempUserId: AdminDebug_scrambledTempUserId(userId) };\n    return { success: true, data: storage };\n  } catch (e) {\n    return { success: false, error: e instanceof Error ? e.message : String(e) };\n  }\n}\n\nexport async function AdminDebug_fetchDebugSnapshotStorage(\n  service: Service,\n  userId: string,\n  adminKey: string,\n  timestamp: string\n): Promise<IEither<IStorage, string>> {\n  try {\n    const snapshotStorage = await service.getDebugSnapshotStorage(userId, adminKey, timestamp);\n    if (snapshotStorage == null) {\n      return { success: false, error: \"Snapshot not found or invalid admin key\" };\n    }\n    const storage: IStorage = { ...snapshotStorage, tempUserId: AdminDebug_scrambledTempUserId(userId) };\n    return { success: true, data: storage };\n  } catch (e) {\n    return { success: false, error: e instanceof Error ? e.message : String(e) };\n  }\n}\n","import { lb } from \"lens-shmens\";\nimport { emptyProgramId, IEvaluatedProgram, Program_create, Program_createFromHistoryRecord } from \"./program\";\nimport { IDispatch } from \"../ducks/types\";\nimport { ObjectUtils_diff, ObjectUtils_keys, ObjectUtils_clone, ObjectUtils_entries } from \"../utils/object\";\nimport { updateState, IState } from \"./state\";\nimport { IProgram, IProgramState, ISettings, IHistoryRecord } from \"../types\";\nimport { Dialog_alert } from \"../utils/dialog\";\nimport { updateStateVariable } from \"./editProgramLenses\";\nimport { IPlannerProgramExercise, IPlannerState, IPlannerUi, IPlannerEditMode } from \"../pages/planner/models/types\";\nimport { PP_iterate2 } from \"./pp\";\nimport { PlannerProgramExercise_getState } from \"../pages/planner/models/plannerProgramExercise\";\nimport { ProgramToPlanner } from \"./programToPlanner\";\nimport { Thunk_pushToEditProgram } from \"../ducks/thunks\";\n\nexport function EditProgram_properlyUpdateStateVariableInPlace(\n  program: IEvaluatedProgram,\n  programExercise: IPlannerProgramExercise,\n  values: Partial<IProgramState>\n): IEvaluatedProgram {\n  const state = PlannerProgramExercise_getState(programExercise);\n  values = ObjectUtils_diff(state, values);\n  if (ObjectUtils_keys(values).length === 0) {\n    return program;\n  }\n  if (!programExercise.progress) {\n    return program;\n  }\n  const newEvalutedProgram = ObjectUtils_clone(program);\n  PP_iterate2(newEvalutedProgram.weeks, (ex) => {\n    if (ex.key === programExercise.key) {\n      const progress = ex.progress;\n      if (progress) {\n        for (const [stateKey, newValue] of ObjectUtils_entries(values)) {\n          if (newValue == null) {\n            delete progress.stateMetadata?.[stateKey];\n          }\n          if (newValue == null || typeof newValue === \"string\") {\n            progress.state = updateStateVariable(state, stateKey, newValue);\n          } else {\n            progress.state = { ...progress.state, [stateKey]: newValue };\n          }\n        }\n      }\n    }\n  });\n  return newEvalutedProgram;\n}\n\nexport function EditProgram_deleteProgram(dispatch: IDispatch, program: IProgram, customPrograms: IProgram[]): void {\n  updateState(\n    dispatch,\n    [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"programs\")\n        .recordModify((pgms) => pgms.filter((p) => p.id !== program.id)),\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"currentProgramId\")\n        .recordModify((id) =>\n          id === program.id ? (customPrograms.filter((p) => p.id !== program.id)[0]?.id ?? emptyProgramId) : id\n        ),\n    ],\n    \"Delete program\"\n  );\n}\n\nexport function EditProgram_setName(dispatch: IDispatch, program: IProgram, name: string): void {\n  updateState(\n    dispatch,\n    [\n      lb<IState>().p(\"storage\").p(\"programs\").findBy(\"id\", program.id).p(\"name\").record(name),\n      lb<IState>().p(\"storage\").p(\"programs\").findBy(\"id\", program.id).pi(\"planner\").p(\"name\").record(name),\n    ],\n    \"Update program name\"\n  );\n}\n\nexport function EditProgram_setNextDay(dispatch: IDispatch, programId: string, nextDay: number): void {\n  updateState(\n    dispatch,\n    [lb<IState>().p(\"storage\").p(\"programs\").findBy(\"id\", programId).p(\"nextDay\").record(nextDay)],\n    \"Set next day\"\n  );\n}\n\nexport const EditProgram_tabLabels = [\"Preview\", \"Edit\", \"Playground\"] as const;\n\nexport function EditProgram_mode(ui: IPlannerUi): IPlannerEditMode {\n  return ui.mode ?? \"grid\";\n}\n\nexport function EditProgram_initPlannerState(id: string, program: IProgram): IPlannerState {\n  return {\n    id,\n    current: { program },\n    ui: {\n      weekIndex: 0,\n      mode: \"grid\",\n      exerciseUi: { edit: new Set(), collapsed: new Set() },\n      dayUi: { collapsed: new Set() },\n    },\n    history: { past: [], future: [] },\n  };\n}\n\nexport function EditProgram_create(dispatch: IDispatch, name: string): void {\n  const newProgram: IProgram = {\n    ...Program_create(name),\n    planner: {\n      vtype: \"planner\",\n      name,\n      weeks: [{ name: \"Week 1\", days: [{ name: \"Day 1\", exerciseText: \"\" }] }],\n    },\n  };\n\n  updateState(\n    dispatch,\n    [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"programs\")\n        .recordModify((pgms) => [...pgms, newProgram]),\n      lb<IState>().p(\"storage\").p(\"currentProgramId\").record(newProgram.id),\n    ],\n    \"Create program\"\n  );\n  dispatch(Thunk_pushToEditProgram());\n}\n\nexport function EditProgram_createFromHistoryRecord(\n  dispatch: IDispatch,\n  name: string,\n  record: IHistoryRecord,\n  settings: ISettings\n): void {\n  const program = Program_createFromHistoryRecord(name, record, settings);\n  updateState(\n    dispatch,\n    [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"programs\")\n        .recordModify((pgms) => [...pgms, program]),\n    ],\n    \"Create program from adhoc\"\n  );\n  Dialog_alert(`Created new program '${program.name}' with this workout`);\n}\n\nexport function EditProgram_updateProgram(dispatch: IDispatch, program: IProgram): void {\n  updateState(\n    dispatch,\n    [lb<IState>().p(\"storage\").p(\"programs\").findBy(\"id\", program.id).record(program)],\n    \"Update program\"\n  );\n}\n\nexport function EditProgram_regenerateProgram(\n  program: IProgram,\n  evaluatedProgram: IEvaluatedProgram,\n  settings: ISettings\n): IProgram {\n  const newPlanner = new ProgramToPlanner(evaluatedProgram, settings).convertToPlanner();\n  return { ...program, planner: newPlanner };\n}\n","import { ILensRecordingPayload, LensBuilder } from \"lens-shmens\";\nimport { IExerciseType, IPercentage, IProgramExercise, IProgramState, ISettings, IWeight } from \"../types\";\nimport { ObjectUtils_entries } from \"../utils/object\";\nimport { Exercise_get } from \"./exercise\";\nimport { Weight_is, Weight_build, Weight_isPct, Weight_buildPct } from \"./weight\";\nimport { IPlannerProgramExercise } from \"../pages/planner/models/types\";\n\nexport function EditProgramLenses_changeExercise<T>(\n  prefix: LensBuilder<T, IProgramExercise, {}>,\n  settings: ISettings,\n  oldExerciseType: IExerciseType,\n  newExerciseType: IExerciseType\n): ILensRecordingPayload<T>[] {\n  const oldExercise = Exercise_get(oldExerciseType, settings.exercises);\n  const exercise = Exercise_get(newExerciseType, settings.exercises);\n  return [\n    prefix.p(\"exerciseType\").p(\"id\").record(exercise.id),\n    prefix.p(\"exerciseType\").p(\"equipment\").record(exercise.equipment),\n    prefix.p(\"state\").recordModify((oldState) => {\n      if (\"weight\" in oldState) {\n        return {\n          ...oldState,\n          weight: settings.units === \"kg\" ? exercise.startingWeightKg : exercise.startingWeightLb,\n        };\n      } else {\n        return oldState;\n      }\n    }),\n    prefix.p(\"name\").recordModify((oldName) => {\n      if (oldExercise != null) {\n        return oldName.replace(oldExercise.name, exercise.name);\n      } else {\n        return exercise.name;\n      }\n    }),\n  ];\n}\n\nfunction editStateVariable<T>(\n  prefix: LensBuilder<T, IPlannerProgramExercise, {}>,\n  stateKey: string,\n  newValue?: string | number | IWeight | IPercentage\n): ILensRecordingPayload<T> {\n  return prefix\n    .pi(\"progress\")\n    .p(\"state\")\n    .recordModify((state) => {\n      if (newValue == null || typeof newValue === \"string\") {\n        return updateStateVariable(state, stateKey, newValue);\n      } else {\n        return { ...state, [stateKey]: newValue };\n      }\n    });\n}\n\nfunction removeStateVariableMetadata<T>(\n  prefix: LensBuilder<T, IPlannerProgramExercise, {}>,\n  stateKey: string\n): ILensRecordingPayload<T> {\n  return prefix\n    .pi(\"progress\")\n    .p(\"stateMetadata\")\n    .recordModify((state) => {\n      const newState = { ...state };\n      delete newState[stateKey];\n      return newState;\n    });\n}\n\nexport function EditProgramLenses_properlyUpdateStateVariable<T>(\n  prefix: LensBuilder<T, IPlannerProgramExercise, {}>,\n  values: Partial<IProgramState>\n): ILensRecordingPayload<T>[] {\n  return ObjectUtils_entries(values).flatMap(([stateKey, newValue]) => {\n    if (newValue == null) {\n      return [removeStateVariableMetadata(prefix, stateKey), editStateVariable(prefix, stateKey, newValue)];\n    } else {\n      return [editStateVariable(prefix, stateKey, newValue)];\n    }\n  });\n}\n\nexport function updateStateVariable(state: IProgramState, stateKey: string, newValue?: string): IProgramState {\n  if (newValue === \"\") {\n    newValue = \"0\";\n  }\n  let v = newValue != null && newValue !== \"\" ? parseFloat(newValue) : null;\n  if (v != null && isNaN(v)) {\n    v = 0;\n  }\n  const newState = { ...state };\n  const value = state[stateKey];\n  if (Weight_is(value) && v != null && v < 0) {\n    v = 0;\n  }\n  if (v != null) {\n    newState[stateKey] = Weight_is(value)\n      ? Weight_build(v || 0, value.unit)\n      : Weight_isPct(value)\n        ? Weight_buildPct(v)\n        : v;\n  } else {\n    delete newState[stateKey];\n  }\n  return newState;\n}\n","import { IDispatch } from \"../ducks/types\";\nimport { lb } from \"lens-shmens\";\nimport {\n  ILength,\n  IPercentage,\n  ISettings,\n  IStatsHealth,\n  IStatsHealthKey,\n  IStatsHealthValue,\n  IStatsLength,\n  IStatsLengthValue,\n  IStatsPercentage,\n  IStatsPercentageValue,\n  IStatsWeight,\n  IStatsWeightValue,\n  IWeight,\n  statsHealthDef,\n} from \"../types\";\nimport { IHealthDailyResult, IHealthDailyValue } from \"../utils/healthAdapter\";\nimport { IState } from \"./state\";\nimport { ObjectUtils_keys } from \"../utils/object\";\nimport { CollectionUtils_sort, CollectionUtils_sortBy, CollectionUtils_uniqBy } from \"../utils/collection\";\nimport { Weight_roundTo005, Weight_convertTo } from \"./weight\";\nimport { Length_convertTo } from \"./length\";\nimport { Stats_insertByTimestamp } from \"./stats\";\n\nexport interface IHealthResponse {\n  added: {\n    timestamp: number;\n    type: \"bodyweight\" | \"bodyfat\" | \"waist\";\n    uuid: string;\n    value: IWeight | IPercentage | ILength;\n  }[];\n  anchor: string;\n  deleted: string[];\n}\n\nexport function EditStats_toggleWeightStats(dispatch: IDispatch, name: keyof IStatsWeight, value: boolean): void {\n  dispatch({\n    type: \"UpdateSettings\",\n    lensRecording: lb<ISettings>().p(\"statsEnabled\").p(\"weight\").p(name).record(value),\n    desc: `Toggle ${name} weight stat`,\n  });\n}\n\nexport function EditStats_toggleLengthStats(dispatch: IDispatch, name: keyof IStatsLength, value: boolean): void {\n  dispatch({\n    type: \"UpdateSettings\",\n    lensRecording: lb<ISettings>().p(\"statsEnabled\").p(\"length\").p(name).record(value),\n    desc: `Toggle ${name} length stat`,\n  });\n}\n\nexport function EditStats_togglePercentageStats(\n  dispatch: IDispatch,\n  name: keyof IStatsPercentage,\n  value: boolean\n): void {\n  dispatch({\n    type: \"UpdateSettings\",\n    lensRecording: lb<ISettings>().p(\"statsEnabled\").p(\"percentage\").p(name).record(value),\n    desc: `Toggle ${name} percentage stat`,\n  });\n}\n\nexport function EditStats_addWeightStats(\n  dispatch: IDispatch,\n  payload: Partial<Record<keyof IStatsWeight, IWeight>>,\n  timestamp?: number\n): void {\n  const sharedTime = timestamp ?? Date.now();\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"weight\")\n        .recordModify((st) => {\n          return ObjectUtils_keys(payload).reduce(\n            (memo, key) => {\n              memo[key] = Stats_insertByTimestamp(memo[key], {\n                vtype: \"stat\",\n                value: payload[key]!,\n                timestamp: sharedTime,\n                updatedAt: sharedTime,\n              });\n              return memo;\n            },\n            { ...st }\n          );\n        }),\n    ],\n    desc: \"Add weight stats\",\n  });\n}\n\nexport function EditStats_addLengthStats(\n  dispatch: IDispatch,\n  payload: Partial<Record<keyof IStatsLength, ILength>>,\n  timestamp?: number\n): void {\n  const sharedTime = timestamp ?? Date.now();\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"length\")\n        .recordModify((st) => {\n          return ObjectUtils_keys(payload).reduce(\n            (memo, key) => {\n              memo[key] = Stats_insertByTimestamp(memo[key], {\n                vtype: \"stat\",\n                value: payload[key]!,\n                timestamp: sharedTime,\n                updatedAt: sharedTime,\n              });\n              return memo;\n            },\n            { ...st }\n          );\n        }),\n    ],\n    desc: \"Add length stats\",\n  });\n}\n\nexport function EditStats_addPercentageStats(\n  dispatch: IDispatch,\n  payload: Partial<Record<keyof IStatsPercentage, IPercentage>>,\n  timestamp?: number\n): void {\n  const sharedTime = timestamp ?? Date.now();\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"percentage\")\n        .recordModify((st) => {\n          return ObjectUtils_keys(payload).reduce(\n            (memo, key) => {\n              memo[key] = Stats_insertByTimestamp(memo[key], {\n                vtype: \"stat\",\n                value: payload[key]!,\n                timestamp: sharedTime,\n                updatedAt: sharedTime,\n              });\n              return memo;\n            },\n            { ...st }\n          );\n        }),\n    ],\n    desc: \"Add percentage stats\",\n  });\n}\n\nexport function EditStats_changeStatWeightValue(\n  dispatch: IDispatch,\n  key: keyof IStatsWeight,\n  index: number,\n  value: IWeight\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"weight\")\n        .p(key)\n        .i(index)\n        .recordModify((v) => ({ ...v, value, updatedAt: Date.now() })),\n    ],\n    desc: `Change weight stat ${key} at index ${index} to ${value?.value}`,\n  });\n}\n\nexport function EditStats_changeStatLengthValue(\n  dispatch: IDispatch,\n  key: keyof IStatsLength,\n  index: number,\n  value: ILength\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"length\")\n        .p(key)\n        .i(index)\n        .recordModify((v) => ({ ...v, value, updatedAt: Date.now() })),\n    ],\n    desc: `Change length stat ${key} at index ${index} to ${value?.value}`,\n  });\n}\n\nexport function EditStats_changeStatPercentageValue(\n  dispatch: IDispatch,\n  key: keyof IStatsPercentage,\n  index: number,\n  value: IPercentage\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"percentage\")\n        .p(key)\n        .i(index)\n        .recordModify((v) => ({ ...v, value, updatedAt: Date.now() })),\n    ],\n    desc: `Change percentage stat ${key} at index ${index} to ${value?.value}`,\n  });\n}\n\nexport function EditStats_changeStatWeightTimestamp(\n  dispatch: IDispatch,\n  key: keyof IStatsWeight,\n  index: number,\n  timestamp: number\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"weight\")\n        .p(key)\n        .recordModify((coll) => {\n          return CollectionUtils_sort(\n            [...(coll || [])].map((v, i) => (i === index ? { ...v, timestamp, updatedAt: Date.now() } : v)),\n            (a, b) => b.timestamp - a.timestamp\n          );\n        }),\n    ],\n    desc: `Change weight stat ${key} timestamp at index ${index} to ${timestamp}`,\n  });\n}\n\nexport function EditStats_changeStatLengthTimestamp(\n  dispatch: IDispatch,\n  key: keyof IStatsLength,\n  index: number,\n  timestamp: number\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"length\")\n        .p(key)\n        .recordModify((coll) => {\n          return CollectionUtils_sort(\n            [...(coll || [])].map((v, i) => (i === index ? { ...v, timestamp, updatedAt: Date.now() } : v)),\n            (a, b) => b.timestamp - a.timestamp\n          );\n        }),\n    ],\n    desc: `Change length stat ${key} timestamp at index ${index} to ${timestamp}`,\n  });\n}\n\nexport function EditStats_changeStatPercentageTimestamp(\n  dispatch: IDispatch,\n  key: keyof IStatsPercentage,\n  index: number,\n  timestamp: number\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"percentage\")\n        .p(key)\n        .recordModify((coll) => {\n          return CollectionUtils_sort(\n            [...(coll || [])].map((v, i) => (i === index ? { ...v, timestamp, updatedAt: Date.now() } : v)),\n            (a, b) => b.timestamp - a.timestamp\n          );\n        }),\n    ],\n    desc: `Change percentage stat ${key} timestamp at index ${index} to ${timestamp}`,\n  });\n}\n\nexport function EditStats_deleteWeightStat(\n  dispatch: IDispatch,\n  key: keyof IStatsWeight,\n  index: number,\n  ts: number\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    desc: \"Delete weight stat\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"weight\")\n        .p(key)\n        .recordModify((s) => [...(s || [])].filter((_, i) => i !== index)),\n    ],\n  });\n}\n\nexport function EditStats_deleteLengthStat(\n  dispatch: IDispatch,\n  key: keyof IStatsLength,\n  index: number,\n  ts: number\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    desc: \"Delete length stat\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"length\")\n        .p(key)\n        .recordModify((s) => [...(s || [])].filter((_, i) => i !== index)),\n    ],\n  });\n}\n\nexport function EditStats_deletePercentageStat(\n  dispatch: IDispatch,\n  key: keyof IStatsPercentage,\n  index: number,\n  ts: number\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    desc: \"Delete percentage stat\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"percentage\")\n        .p(key)\n        .recordModify((s) => [...(s || [])].filter((_, i) => i !== index)),\n    ],\n  });\n}\n\nexport function EditStats_uploadHealthStats(\n  platform: \"ios\" | \"android\",\n  dispatch: IDispatch,\n  dataAny: unknown,\n  settings: ISettings,\n  deletedStatsArr: number[]\n): void {\n  const deletedStats = new Set(deletedStatsArr);\n  const response = dataAny as { data: IHealthResponse };\n  const data = response.data;\n  if (!data.added) {\n    return;\n  }\n  const weightValues: IStatsWeightValue[] = [];\n  const bodyfatValues: IStatsPercentageValue[] = [];\n  const waistValues: IStatsLengthValue[] = [];\n\n  for (const d of data.added) {\n    if (deletedStats.has(d.timestamp)) {\n      continue;\n    }\n    if (d.type === \"bodyweight\") {\n      weightValues.push({\n        vtype: \"stat\",\n        value: Weight_roundTo005(Weight_convertTo(d.value as IWeight, settings.units)),\n        timestamp: d.timestamp,\n        updatedAt: Date.now(),\n        ...(platform === \"ios\" ? { appleUuid: d.uuid } : { googleUuid: d.uuid }),\n      });\n    } else if (d.type === \"bodyfat\") {\n      if (d.value.value > 0) {\n        bodyfatValues.push({\n          vtype: \"stat\",\n          value: d.value as IPercentage,\n          timestamp: d.timestamp,\n          updatedAt: Date.now(),\n          ...(platform === \"ios\" ? { appleUuid: d.uuid } : { googleUuid: d.uuid }),\n        });\n      }\n    } else if (d.type === \"waist\") {\n      waistValues.push({\n        vtype: \"stat\",\n        value: Length_convertTo(d.value as ILength, settings.lengthUnits),\n        timestamp: d.timestamp,\n        updatedAt: Date.now(),\n        ...(platform === \"ios\" ? { appleUuid: d.uuid } : { googleUuid: d.uuid }),\n      });\n    }\n  }\n\n  const applyValues = <T extends { timestamp: number }>(st: T[] | undefined, values: T[]): T[] | undefined => {\n    if (values.length === 0) {\n      return st;\n    }\n    const merged = CollectionUtils_uniqBy([...(st || []), ...values], \"timestamp\");\n    if (st != null && merged.length === st.length) {\n      return st;\n    }\n    return CollectionUtils_sortBy(merged, \"timestamp\", true);\n  };\n\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"weight\")\n        .p(\"weight\")\n        .recordModify((st) => applyValues(st, weightValues)),\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"percentage\")\n        .p(\"bodyfat\")\n        .recordModify((st) => applyValues(st, bodyfatValues)),\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"length\")\n        .p(\"waist\")\n        .recordModify((st) => applyValues(st, waistValues)),\n      platform === \"ios\"\n        ? lb<IState>().p(\"storage\").p(\"settings\").p(\"appleHealthAnchor\").record(data.anchor)\n        : lb<IState>().p(\"storage\").p(\"settings\").p(\"googleHealthAnchor\").record(data.anchor),\n    ],\n    desc: `Upload health stats from ${platform}`,\n  });\n}\n\nexport function EditStats_setHealthStatHidden(\n  dispatch: IDispatch,\n  key: IStatsHealthKey,\n  timestamp: number,\n  hidden: boolean\n): void {\n  dispatch({\n    type: \"UpdateState\",\n    desc: hidden ? \"Hide health stat\" : \"Unhide health stat\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"health\")\n        .recordModify((health) => {\n          const next: IStatsHealth = { ...(health || {}) };\n          next[key] = [...(next[key] || [])].map((v) => (v.timestamp === timestamp ? { ...v, hidden } : v));\n          return next;\n        }),\n    ],\n  });\n}\n\nexport function EditStats_uploadDailyMetrics(\n  platform: \"ios\" | \"android\",\n  dispatch: IDispatch,\n  result: IHealthDailyResult\n): void {\n  const byKey: Record<IStatsHealthKey, IHealthDailyValue[]> = { sleep: [], calories: [], protein: [] };\n  for (const v of result.values) {\n    byKey[v.type].push(v);\n  }\n  const now = Date.now();\n\n  // Daily aggregates are re-read over a rolling window each sync, so a day's total can change.\n  // Upsert by timestamp (replace same-day) rather than dedup-keep-first like measurements, carrying\n  // the user's `hidden` flag forward so hidden records stay hidden across re-syncs. When a day's value\n  // and source uuid are unchanged we keep the exact previous object (with its `updatedAt`) so\n  // VersionTracker doesn't treat the whole rolling window as changed on every sync.\n  //\n  // We intentionally KEEP existing days that are absent from the latest read rather than treating\n  // absence as a source-side deletion. HealthKit doesn't expose read-authorization status, so an\n  // empty/partial read is indistinguishable from revoked permission - auto-deleting on absence would\n  // risk silently wiping a user's history. Edits to a day ARE mirrored (same-day replace); a fully\n  // deleted source day lingers until the user hides it in the app.\n  const upsert = (\n    existing: IStatsHealthValue[] | undefined,\n    incoming: IHealthDailyValue[]\n  ): IStatsHealthValue[] | undefined => {\n    if (incoming.length === 0) {\n      return existing;\n    }\n    const existingByTimestamp = new Map((existing || []).map((v) => [v.timestamp, v]));\n    const incomingByTimestamp = new Set(incoming.map((v) => v.timestamp));\n    const merged = incoming.map((inc): IStatsHealthValue => {\n      const prev = existingByTimestamp.get(inc.timestamp);\n      const prevUuid = platform === \"ios\" ? prev?.appleUuid : prev?.googleUuid;\n      if (prev != null && prev.value === inc.value && prevUuid === inc.uuid) {\n        return prev;\n      }\n      const next: IStatsHealthValue = {\n        vtype: \"stat\",\n        value: inc.value,\n        timestamp: inc.timestamp,\n        updatedAt: now,\n        ...(platform === \"ios\" ? { appleUuid: inc.uuid } : { googleUuid: inc.uuid }),\n      };\n      if (prev?.hidden) {\n        next.hidden = true;\n      }\n      return next;\n    });\n    const kept = (existing || []).filter((v) => !incomingByTimestamp.has(v.timestamp));\n    return CollectionUtils_sortBy([...kept, ...merged], \"timestamp\", true);\n  };\n\n  dispatch({\n    type: \"UpdateState\",\n    lensRecording: [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"stats\")\n        .p(\"health\")\n        .recordModify((health) => {\n          const next: IStatsHealth = { ...(health || {}) };\n          for (const key of statsHealthDef) {\n            const upserted = upsert(next[key], byKey[key]);\n            if (upserted != null) {\n              next[key] = upserted;\n            }\n          }\n          return next;\n        }),\n    ],\n    desc: `Upload daily health metrics from ${platform}`,\n  });\n}\n","import {\n  IEquipment,\n  IEquipmentData,\n  equipments,\n  IAllEquipment,\n  ISettings,\n  IUnit,\n  IWeight,\n  IExerciseType,\n  IGym,\n  IEquipmentSetup,\n} from \"../types\";\nimport { EquipmentSetup_fromLegacy, EquipmentSetup_legacyHash } from \"./equipmentSetup\";\nimport { CollectionUtils_concatBy } from \"../utils/collection\";\nimport { ObjectUtils_keys, ObjectUtils_filter } from \"../utils/object\";\nimport { equipmentName, Exercise_toKey } from \"./exercise\";\nimport { Weight_build } from \"./weight\";\n\nexport function Equipment_build(name: string): IEquipmentData {\n  return {\n    vtype: \"equipment_data\",\n    name,\n    multiplier: 1,\n    bar: {\n      lb: Weight_build(0, \"lb\"),\n      kg: Weight_build(0, \"kg\"),\n    },\n    plates: [\n      { weight: Weight_build(10, \"lb\"), num: 4 },\n      { weight: Weight_build(5, \"kg\"), num: 4 },\n    ],\n    fixed: [],\n    isFixed: false,\n  };\n}\n\nexport function Equipment_getEquipmentOfGym(settings: ISettings, key?: string): IAllEquipment {\n  const firstEquipment = settings.gyms[0].equipment;\n  if (key != null) {\n    return settings.gyms.find((g) => g.id === key)?.equipment ?? firstEquipment;\n  } else {\n    return firstEquipment;\n  }\n}\n\nexport function Equipment_getGymByIdOrCurrent(settings: ISettings, gymId?: string): IGym {\n  return settings.gyms.find((g) => g.id === (gymId ?? settings.currentGymId)) ?? settings.gyms[0];\n}\n\nexport function Equipment_getCurrentGym(settings: ISettings): IGym {\n  return settings.gyms.find((g) => g.id === settings.currentGymId) ?? settings.gyms[0];\n}\n\nexport function Equipment_getEquipmentIdForExerciseType(\n  settings: ISettings,\n  exerciseType?: IExerciseType,\n  gymId?: string\n): string | undefined {\n  if (exerciseType == null) {\n    return undefined;\n  }\n\n  const key = Exercise_toKey(exerciseType);\n  if (\n    !(\n      settings.exerciseData[key] &&\n      (\"equipment\" in settings.exerciseData[key] || \"rounding\" in settings.exerciseData[key])\n    )\n  ) {\n    return exerciseType.equipment;\n  }\n  const exerciseData = settings.exerciseData[key];\n  const exerciseEquipment = exerciseData?.equipment;\n  if (exerciseEquipment == null) {\n    return undefined;\n  }\n\n  const currentGym = Equipment_getGymByIdOrCurrent(settings, gymId);\n  return exerciseEquipment[currentGym.id];\n}\n\nexport function Equipment_getEquipmentNameForExerciseType(\n  settings: ISettings,\n  exerciseType?: IExerciseType\n): string | undefined {\n  const equipment = Equipment_getEquipmentIdForExerciseType(settings, exerciseType);\n  if (equipment == null) {\n    return undefined;\n  }\n  const currentGym = Equipment_getCurrentGym(settings);\n  const gymEquipment = currentGym.equipment[equipment];\n  if (gymEquipment == null || gymEquipment.isDeleted) {\n    return undefined;\n  }\n  const name = gymEquipment.name;\n  return name || equipmentName(equipment);\n}\n\nexport function Equipment_getEquipmentDataForExerciseType(\n  settings: ISettings,\n  exerciseType?: IExerciseType\n): IEquipmentData | undefined {\n  const equipment = Equipment_getEquipmentIdForExerciseType(settings, exerciseType);\n  const currentGym = Equipment_getCurrentGym(settings);\n  return equipment ? currentGym.equipment[equipment] : undefined;\n}\n\nexport function Equipment_legacyChanged(data: IEquipmentData): boolean {\n  return data.setup != null && data.setupLegacyHash !== EquipmentSetup_legacyHash(data);\n}\n\nexport function Equipment_setupIn(data: IEquipmentData, unit: IUnit): IEquipmentSetup {\n  if (data.setup != null && !Equipment_legacyChanged(data)) {\n    return data.setup;\n  }\n  return EquipmentSetup_fromLegacy(data, unit);\n}\n\nexport function Equipment_setupOf(data: IEquipmentData, settings: ISettings): IEquipmentSetup {\n  return Equipment_setupIn(data, data.unit ?? settings.units);\n}\n\nexport function Equipment_activeIdForExercise(\n  settings: ISettings,\n  exerciseType: IExerciseType\n): { gymId: string; equipmentId?: string } {\n  const gym = Equipment_getCurrentGym(settings);\n  const equipmentId = Equipment_getEquipmentIdForExerciseType(settings, exerciseType, gym.id);\n  const data = equipmentId != null ? gym.equipment[equipmentId] : undefined;\n  return { gymId: gym.id, equipmentId: data != null && !data.isDeleted ? equipmentId : undefined };\n}\n\nexport function Equipment_previewBodyweight(settings: ISettings): IWeight {\n  return settings.currentBodyweight ?? { value: 80, unit: \"kg\" };\n}\n\nexport function Equipment_getUnitOrDefaultForExerciseType(settings: ISettings, exerciseType?: IExerciseType): IUnit {\n  const equipment = Equipment_getEquipmentDataForExerciseType(settings, exerciseType);\n  return equipment?.unit ?? settings.units;\n}\n\nexport function Equipment_getUnitForExerciseType(settings: ISettings, exerciseType?: IExerciseType): IUnit | undefined {\n  const equipment = Equipment_getEquipmentDataForExerciseType(settings, exerciseType);\n  const equipmentUnit = equipment?.unit;\n  return equipmentUnit == null || equipmentUnit === settings.units ? undefined : equipmentUnit;\n}\n\nexport function Equipment_getEquipmentData(settings: ISettings, key: string): IEquipmentData | undefined {\n  return Equipment_currentEquipment(settings)?.[key];\n}\n\nexport function Equipment_currentEquipment(settings: ISettings): IAllEquipment {\n  const currentGym = settings.gyms.find((g) => g.id === settings.currentGymId) ?? settings.gyms[0];\n  return currentGym?.equipment;\n}\n\nexport function Equipment_mergeEquipment(\n  oldEquipment: { [key in IEquipment]?: IEquipmentData },\n  newEquipment: { [key in IEquipment]?: IEquipmentData }\n): { [key in IEquipment]?: IEquipmentData } {\n  const newKeys = Array.from(new Set([...ObjectUtils_keys(newEquipment), ...ObjectUtils_keys(oldEquipment)]));\n  return newKeys.reduce<{ [key in IEquipment]?: IEquipmentData }>((acc, name) => {\n    const newEquipmentData = newEquipment[name];\n    const oldEquipmentData = oldEquipment[name];\n    if (newEquipmentData != null && oldEquipmentData == null) {\n      acc[name] = newEquipmentData;\n    } else if (newEquipmentData == null && oldEquipmentData != null) {\n      acc[name] = oldEquipmentData;\n    } else if (newEquipmentData != null && oldEquipmentData != null) {\n      acc[name] = {\n        ...oldEquipmentData,\n        bar: newEquipmentData.bar,\n        isFixed: newEquipmentData.isFixed,\n        plates: CollectionUtils_concatBy(\n          oldEquipmentData.plates,\n          newEquipmentData.plates,\n          (el) => `${el.weight.value}${el.weight.unit}`\n        ),\n        multiplier: newEquipmentData.multiplier,\n        fixed: CollectionUtils_concatBy(\n          oldEquipmentData.fixed,\n          newEquipmentData.fixed,\n          (el) => `${el.value}${el.unit}`\n        ),\n      };\n    }\n    return acc;\n  }, {});\n}\n\nexport function Equipment_isBuiltIn(key: string): boolean {\n  return (equipments as unknown as string[]).indexOf(key) !== -1;\n}\n\nexport function Equipment_customEquipment(equipmentSettings?: IAllEquipment): IAllEquipment {\n  return ObjectUtils_filter(equipmentSettings || {}, (key) => !Equipment_isBuiltIn(key));\n}\n\nexport function Equipment_equipmentKeyByName(name: string, equipmentSettings?: IAllEquipment): string | undefined {\n  const builtInEquipmentKey = equipments.find((eq) => eq === name.toLowerCase());\n  if (builtInEquipmentKey) {\n    return builtInEquipmentKey;\n  }\n\n  const builtInEquipmentName = equipments.find((eq) => equipmentName(eq).toLowerCase() === name.toLowerCase());\n  if (builtInEquipmentName) {\n    return builtInEquipmentName;\n  }\n\n  const customEquipmentKey = ObjectUtils_keys(equipmentSettings || {}).find((eq) => {\n    return equipmentName(eq).toLowerCase() === name.toLowerCase();\n  });\n  return customEquipmentKey;\n}\n","import { IAllEquipment, IEquipmentData, IEquipmentSetup, IUnit } from \"../types\";\nimport { ObjectUtils_isEqual } from \"../utils/object\";\nimport { Equipment_build } from \"./equipment\";\nimport { EquipmentLegacyDefaults_all } from \"./equipmentLegacyDefaults\";\nimport { EquipmentSetup_fromLegacy, EquipmentSetup_save } from \"./equipmentSetup\";\nimport { EquipmentSetupEdit_default } from \"./equipmentSetupEdit\";\n\nfunction typedSetup(key: string, legacy: IEquipmentData, unit: IUnit): IEquipmentSetup {\n  switch (key) {\n    case \"dumbbell\":\n      return {\n        type: \"fixed\",\n        unit,\n        ranges:\n          unit === \"lb\"\n            ? [{ from: 5, to: 100, step: 5 }]\n            : [\n                { from: 2, to: 10, step: 2 },\n                { from: 12.5, to: 50, step: 2.5 },\n              ],\n        values: [],\n      };\n    case \"cable\":\n      return EquipmentSetupEdit_default(\"stack\", unit);\n    case \"band\": {\n      const bands = EquipmentSetupEdit_default(\"bands\", unit);\n      return bands.type === \"bands\" ? { ...bands, combine: true } : bands;\n    }\n    default:\n      return EquipmentSetup_fromLegacy(legacy, unit);\n  }\n}\n\nfunction legacyWithBand(): IAllEquipment {\n  return { ...EquipmentLegacyDefaults_all(), band: Equipment_build(\"\") };\n}\n\nexport function EquipmentDefaults_build(unit: IUnit): IAllEquipment {\n  const result: IAllEquipment = {};\n  for (const [key, legacy] of Object.entries(legacyWithBand())) {\n    if (legacy != null) {\n      result[key] = EquipmentSetup_save({ ...legacy, name: undefined }, typedSetup(key, legacy, unit));\n    }\n  }\n  return result;\n}\n\nfunction legacyDefaultSetup(key: string, unit: IUnit): IEquipmentSetup | undefined {\n  const legacy = EquipmentLegacyDefaults_all()[key];\n  return legacy != null ? EquipmentSetup_fromLegacy(legacy, unit) : undefined;\n}\n\nexport function EquipmentDefaults_inUnit(\n  key: string,\n  setup: IEquipmentSetup,\n  unit: IUnit\n): IEquipmentSetup | undefined {\n  const pairs: [IEquipmentSetup | undefined, IEquipmentSetup | undefined][] = [\n    [EquipmentDefaults_build(setup.unit)[key]?.setup, EquipmentDefaults_build(unit)[key]?.setup],\n    [legacyDefaultSetup(key, setup.unit), legacyDefaultSetup(key, unit)],\n  ];\n  return pairs.find(([source]) => source != null && ObjectUtils_isEqual(source, setup))?.[1];\n}\n","import { IAllEquipment } from \"../types\";\nimport { Weight_build } from \"./weight\";\n\nexport function EquipmentLegacyDefaults_all(): IAllEquipment {\n  return {\n    barbell: {\n      vtype: \"equipment_data\",\n      multiplier: 2,\n      bar: {\n        lb: Weight_build(45, \"lb\"),\n        kg: Weight_build(20, \"kg\"),\n      },\n      plates: [\n        { weight: Weight_build(45, \"lb\"), num: 8 },\n        { weight: Weight_build(25, \"lb\"), num: 4 },\n        { weight: Weight_build(10, \"lb\"), num: 4 },\n        { weight: Weight_build(5, \"lb\"), num: 4 },\n        { weight: Weight_build(2.5, \"lb\"), num: 4 },\n        { weight: Weight_build(1.25, \"lb\"), num: 2 },\n        { weight: Weight_build(20, \"kg\"), num: 8 },\n        { weight: Weight_build(10, \"kg\"), num: 4 },\n        { weight: Weight_build(5, \"kg\"), num: 4 },\n        { weight: Weight_build(2.5, \"kg\"), num: 4 },\n        { weight: Weight_build(1.25, \"kg\"), num: 4 },\n        { weight: Weight_build(0.5, \"kg\"), num: 2 },\n      ],\n      fixed: [],\n      isFixed: false,\n    },\n    trapbar: {\n      vtype: \"equipment_data\",\n      multiplier: 2,\n      bar: {\n        lb: Weight_build(45, \"lb\"),\n        kg: Weight_build(20, \"kg\"),\n      },\n      plates: [\n        { weight: Weight_build(45, \"lb\"), num: 8 },\n        { weight: Weight_build(25, \"lb\"), num: 4 },\n        { weight: Weight_build(10, \"lb\"), num: 4 },\n        { weight: Weight_build(5, \"lb\"), num: 4 },\n        { weight: Weight_build(2.5, \"lb\"), num: 4 },\n        { weight: Weight_build(1.25, \"lb\"), num: 2 },\n        { weight: Weight_build(20, \"kg\"), num: 8 },\n        { weight: Weight_build(10, \"kg\"), num: 4 },\n        { weight: Weight_build(5, \"kg\"), num: 4 },\n        { weight: Weight_build(2.5, \"kg\"), num: 4 },\n        { weight: Weight_build(1.25, \"kg\"), num: 4 },\n        { weight: Weight_build(0.5, \"kg\"), num: 2 },\n      ],\n      fixed: [],\n      isFixed: false,\n    },\n    leverageMachine: {\n      vtype: \"equipment_data\",\n      multiplier: 1,\n      bar: {\n        lb: Weight_build(0, \"lb\"),\n        kg: Weight_build(0, \"kg\"),\n      },\n      plates: [\n        { weight: Weight_build(45, \"lb\"), num: 8 },\n        { weight: Weight_build(25, \"lb\"), num: 4 },\n        { weight: Weight_build(10, \"lb\"), num: 4 },\n        { weight: Weight_build(5, \"lb\"), num: 4 },\n        { weight: Weight_build(2.5, \"lb\"), num: 4 },\n        { weight: Weight_build(1.25, \"lb\"), num: 2 },\n        { weight: Weight_build(20, \"kg\"), num: 8 },\n        { weight: Weight_build(10, \"kg\"), num: 4 },\n        { weight: Weight_build(5, \"kg\"), num: 4 },\n        { weight: Weight_build(2.5, \"kg\"), num: 4 },\n        { weight: Weight_build(1.25, \"kg\"), num: 4 },\n        { weight: Weight_build(0.5, \"kg\"), num: 2 },\n      ],\n      fixed: [],\n      isFixed: false,\n    },\n    smith: {\n      vtype: \"equipment_data\",\n      multiplier: 2,\n      bar: {\n        lb: Weight_build(45, \"lb\"),\n        kg: Weight_build(20, \"kg\"),\n      },\n      plates: [\n        { weight: Weight_build(45, \"lb\"), num: 8 },\n        { weight: Weight_build(25, \"lb\"), num: 4 },\n        { weight: Weight_build(10, \"lb\"), num: 4 },\n        { weight: Weight_build(5, \"lb\"), num: 4 },\n        { weight: Weight_build(2.5, \"lb\"), num: 4 },\n        { weight: Weight_build(1.25, \"lb\"), num: 2 },\n        { weight: Weight_build(20, \"kg\"), num: 8 },\n        { weight: Weight_build(10, \"kg\"), num: 4 },\n        { weight: Weight_build(5, \"kg\"), num: 4 },\n        { weight: Weight_build(2.5, \"kg\"), num: 4 },\n        { weight: Weight_build(1.25, \"kg\"), num: 4 },\n        { weight: Weight_build(0.5, \"kg\"), num: 2 },\n      ],\n      fixed: [],\n      isFixed: false,\n    },\n    dumbbell: {\n      vtype: \"equipment_data\",\n      multiplier: 2,\n      bar: {\n        lb: Weight_build(10, \"lb\"),\n        kg: Weight_build(5, \"kg\"),\n      },\n      plates: [\n        { weight: Weight_build(10, \"lb\"), num: 8 },\n        { weight: Weight_build(5, \"lb\"), num: 4 },\n        { weight: Weight_build(2.5, \"lb\"), num: 4 },\n        { weight: Weight_build(1.25, \"lb\"), num: 2 },\n        { weight: Weight_build(5, \"kg\"), num: 8 },\n        { weight: Weight_build(2.5, \"kg\"), num: 4 },\n        { weight: Weight_build(1.25, \"kg\"), num: 4 },\n        { weight: Weight_build(0.5, \"kg\"), num: 2 },\n      ],\n      fixed: [\n        Weight_build(10, \"lb\"),\n        Weight_build(15, \"lb\"),\n        Weight_build(20, \"lb\"),\n        Weight_build(25, \"lb\"),\n        Weight_build(30, \"lb\"),\n        Weight_build(35, \"lb\"),\n        Weight_build(40, \"lb\"),\n        Weight_build(4, \"kg\"),\n        Weight_build(6, \"kg\"),\n        Weight_build(8, \"kg\"),\n        Weight_build(10, \"kg\"),\n        Weight_build(12, \"kg\"),\n        Weight_build(14, \"kg\"),\n        Weight_build(20, \"kg\"),\n      ],\n      isFixed: false,\n    },\n    ezbar: {\n      vtype: \"equipment_data\",\n      multiplier: 2,\n      bar: {\n        lb: Weight_build(20, \"lb\"),\n        kg: Weight_build(10, \"kg\"),\n      },\n      plates: [\n        { weight: Weight_build(45, \"lb\"), num: 8 },\n        { weight: Weight_build(25, \"lb\"), num: 4 },\n        { weight: Weight_build(10, \"lb\"), num: 4 },\n        { weight: Weight_build(5, \"lb\"), num: 4 },\n        { weight: Weight_build(2.5, \"lb\"), num: 4 },\n        { weight: Weight_build(1.25, \"lb\"), num: 2 },\n        { weight: Weight_build(20, \"kg\"), num: 8 },\n        { weight: Weight_build(10, \"kg\"), num: 4 },\n        { weight: Weight_build(5, \"kg\"), num: 4 },\n        { weight: Weight_build(2.5, \"kg\"), num: 4 },\n        { weight: Weight_build(1.25, \"kg\"), num: 4 },\n        { weight: Weight_build(0.5, \"kg\"), num: 2 },\n      ],\n      fixed: [],\n      isFixed: false,\n    },\n    cable: {\n      vtype: \"equipment_data\",\n      multiplier: 1,\n      bar: {\n        lb: Weight_build(0, \"lb\"),\n        kg: Weight_build(0, \"kg\"),\n      },\n      plates: [\n        {\n          weight: Weight_build(10, \"lb\"),\n          num: 20,\n        },\n        {\n          weight: Weight_build(5, \"lb\"),\n          num: 10,\n        },\n        {\n          weight: Weight_build(5, \"kg\"),\n          num: 20,\n        },\n        {\n          weight: Weight_build(2.5, \"kg\"),\n          num: 10,\n        },\n      ],\n      fixed: [],\n      isFixed: false,\n    },\n    kettlebell: {\n      vtype: \"equipment_data\",\n      multiplier: 1,\n      bar: {\n        lb: Weight_build(0, \"lb\"),\n        kg: Weight_build(0, \"kg\"),\n      },\n      plates: [],\n      fixed: [\n        Weight_build(10, \"lb\"),\n        Weight_build(15, \"lb\"),\n        Weight_build(20, \"lb\"),\n        Weight_build(25, \"lb\"),\n        Weight_build(30, \"lb\"),\n        Weight_build(35, \"lb\"),\n        Weight_build(40, \"lb\"),\n        Weight_build(4, \"kg\"),\n        Weight_build(8, \"kg\"),\n        Weight_build(12, \"kg\"),\n        Weight_build(16, \"kg\"),\n        Weight_build(24, \"kg\"),\n      ],\n      isFixed: true,\n    },\n  };\n}\n","import {\n  IBandsSetup,\n  IEquipmentHorn,\n  IEquipmentSetup,\n  IPlateCount,\n  IPlatesSetup,\n  IUnit,\n  IWeight,\n  IWeightRange,\n} from \"../types\";\nimport { MathUtils_roundTo000005 } from \"../utils/math\";\n\nexport interface IEquipmentLoadQuery {\n  bodyweight?: IWeight;\n  warmup?: { firstWorkingWeight?: IWeight };\n}\n\nexport type IEquipmentLoadInstruction =\n  | { type: \"stack\"; pin: number; pinNumber?: number; stacks?: number; builtin?: number; addOn: IPlateCount[] }\n  | { type: \"plates\"; sides: number; horns: { name?: string; plates: IPlateCount[] }[] }\n  | { type: \"fixed\"; value: number; addOn: IPlateCount[] }\n  | { type: \"electric\"; value: number }\n  | { type: \"bands\"; bands: { name: string; num: number }[] };\n\nexport interface IEquipmentLoad {\n  total: IWeight;\n  exact: boolean;\n  unit: IUnit;\n  instruction?: IEquipmentLoadInstruction;\n}\n\ninterface ILoadOption {\n  load: number;\n  build: () => IEquipmentLoadInstruction;\n}\n\ninterface ILoadPicker {\n  floor(x: number): ILoadOption | undefined;\n  ceil(x: number): ILoadOption | undefined;\n  min(): ILoadOption | undefined;\n}\n\ninterface IEffectiveScale {\n  start: number;\n  ratio: number;\n  sign: 1 | -1;\n  maxLoad: number;\n}\n\nconst LB_PER_KG = 2.205;\nconst EPSILON = 1e-6;\nconst STEP_OFFSET = 0.001;\nconst CONVERTED_ROUNDING_STEP = 0.5;\nconst CONVERSION_TOLERANCE = CONVERTED_ROUNDING_STEP / 2;\nconst MAX_STEPS = 10000;\nconst MAX_COMBINATIONS = 2000;\nconst MAX_SPLIT_STEPS = 200;\n\nfunction clean(value: number): number {\n  return Math.round(value * 1e6) / 1e6;\n}\n\nfunction convertExact(value: number, from: IUnit, to: IUnit): number {\n  if (from === to) {\n    return value;\n  }\n  return from === \"kg\" ? value * LB_PER_KG : value / LB_PER_KG;\n}\n\nfunction convertForCaller(value: number, from: IUnit, to: IUnit): number {\n  if (from === to) {\n    return MathUtils_roundTo000005(value) + 0;\n  }\n  const converted = from === \"kg\" ? value * LB_PER_KG : value / LB_PER_KG;\n  return Math.round(converted / CONVERTED_ROUNDING_STEP) * CONVERTED_ROUNDING_STEP + 0;\n}\n\nfunction mergePlates(plates: IPlateCount[]): IPlateCount[] {\n  const merged = new Map<number, number>();\n  for (const plate of plates) {\n    if (plate.num > 0 && plate.weight > 0) {\n      merged.set(plate.weight, (merged.get(plate.weight) ?? 0) + plate.num);\n    }\n  }\n  return Array.from(merged.entries())\n    .map(([weight, num]) => ({ weight, num }))\n    .sort((a, b) => b.weight - a.weight);\n}\n\nfunction lastInRange(range: IWeightRange): number {\n  return clean(range.from + Math.floor((range.to - range.from) / range.step + EPSILON) * range.step);\n}\n\nfunction rangeFloor(range: IWeightRange, x: number): number | undefined {\n  if (range.step <= 0 || x < range.from - EPSILON) {\n    return undefined;\n  }\n  const n = Math.floor((Math.min(x, range.to) - range.from) / range.step + EPSILON);\n  return clean(range.from + n * range.step);\n}\n\nfunction rangeCeil(range: IWeightRange, x: number): number | undefined {\n  if (range.step <= 0) {\n    return undefined;\n  }\n  const last = lastInRange(range);\n  if (x > last + EPSILON) {\n    return undefined;\n  }\n  if (x <= range.from) {\n    return clean(range.from);\n  }\n  const n = Math.ceil((x - range.from) / range.step - EPSILON);\n  return clean(range.from + n * range.step);\n}\n\nfunction valuesFloor(ranges: IWeightRange[], values: number[], x: number): number | undefined {\n  let best: number | undefined;\n  for (const range of ranges) {\n    const candidate = rangeFloor(range, x);\n    if (candidate != null && (best == null || candidate > best)) {\n      best = candidate;\n    }\n  }\n  for (const value of values) {\n    if (value <= x + EPSILON && (best == null || value > best)) {\n      best = value;\n    }\n  }\n  return best;\n}\n\nfunction valuesCeil(ranges: IWeightRange[], values: number[], x: number): number | undefined {\n  let best: number | undefined;\n  for (const range of ranges) {\n    const candidate = rangeCeil(range, x);\n    if (candidate != null && (best == null || candidate < best)) {\n      best = candidate;\n    }\n  }\n  for (const value of values) {\n    if (value >= x - EPSILON && (best == null || value < best)) {\n      best = value;\n    }\n  }\n  return best;\n}\n\ninterface ICombination<T> {\n  total: number;\n  items: { item: T; num: number }[];\n}\n\nfunction combinations<T>(entries: { item: T; weight: number; num: number }[]): ICombination<T>[] {\n  const result = new Map<number, ICombination<T>>([[0, { total: 0, items: [] }]]);\n  const sorted = entries.filter((e) => e.num > 0 && e.weight > 0).sort((a, b) => b.weight - a.weight);\n  for (const entry of sorted) {\n    const before = Array.from(result.values());\n    for (const combination of before) {\n      for (let count = 1; count <= entry.num; count += 1) {\n        if (result.size >= MAX_COMBINATIONS) {\n          return Array.from(result.values()).sort((a, b) => a.total - b.total);\n        }\n        const total = clean(combination.total + entry.weight * count);\n        if (!result.has(total)) {\n          result.set(total, { total, items: [...combination.items, { item: entry.item, num: count }] });\n        }\n      }\n    }\n  }\n  return Array.from(result.values()).sort((a, b) => a.total - b.total);\n}\n\nfunction pinNumber(ranges: IWeightRange[], pin: number): number {\n  let count = 0;\n  let previousLast: number | undefined;\n  for (const range of ranges) {\n    if (pin < range.from - EPSILON) {\n      break;\n    }\n    const last = lastInRange(range);\n    const steps = Math.floor((Math.min(pin, last) - range.from) / range.step + EPSILON);\n    const isShared = previousLast != null && Math.abs(range.from - previousLast) < EPSILON;\n    count += steps + (isShared ? 0 : 1);\n    previousLast = last;\n    if (pin <= last + EPSILON) {\n      break;\n    }\n  }\n  return count;\n}\n\nexport function EquipmentLoadSolver_hasTooManyTotals(items: { weight: number; num: number }[]): boolean {\n  return combinations(items.map((i) => ({ item: i.weight, weight: i.weight, num: i.num }))).length >= MAX_COMBINATIONS;\n}\n\ninterface IAddOnOption {\n  total: number;\n  builtin?: number;\n  plates: IPlateCount[];\n}\n\nfunction addOnOptions(builtin: number[], addOn: IPlateCount[]): IAddOnOption[] {\n  const builtins: (number | undefined)[] = [undefined, ...builtin.filter((b) => b > 0)];\n  const plateSets = combinations(mergePlates(addOn).map((p) => ({ item: p.weight, weight: p.weight, num: p.num })));\n  const options = new Map<number, IAddOnOption>();\n  for (const b of builtins) {\n    for (const set of plateSets) {\n      const total = clean((b ?? 0) + set.total);\n      if (!options.has(total)) {\n        options.set(total, { total, builtin: b, plates: set.items.map((i) => ({ weight: i.item, num: i.num })) });\n      }\n    }\n  }\n  return Array.from(options.values()).sort((a, b) => a.total - b.total);\n}\n\nfunction rangesPicker(\n  ranges: IWeightRange[],\n  values: number[],\n  addOns: IAddOnOption[],\n  toInstruction: (value: number, addOn: IAddOnOption) => IEquipmentLoadInstruction\n): ILoadPicker {\n  const pick = (x: number, direction: \"floor\" | \"ceil\"): ILoadOption | undefined => {\n    let best: { load: number; value: number; addOn: IAddOnOption } | undefined;\n    for (const addOn of addOns) {\n      const value =\n        direction === \"floor\"\n          ? valuesFloor(ranges, values, x - addOn.total)\n          : valuesCeil(ranges, values, x - addOn.total);\n      if (value == null) {\n        continue;\n      }\n      const load = clean(value + addOn.total);\n      if (best == null || (direction === \"floor\" ? load > best.load : load < best.load)) {\n        best = { load, value, addOn };\n      }\n    }\n    if (best == null) {\n      return undefined;\n    }\n    const chosen = best;\n    return { load: chosen.load, build: () => toInstruction(chosen.value, chosen.addOn) };\n  };\n  return {\n    floor: (x) => pick(x, \"floor\"),\n    ceil: (x) => pick(x, \"ceil\"),\n    min: () => pick(-Infinity, \"ceil\"),\n  };\n}\n\nfunction precisionOf(values: number[]): number {\n  let maxDecimals = 0;\n  for (const value of values) {\n    const s = value.toString();\n    const dot = s.indexOf(\".\");\n    if (dot >= 0) {\n      maxDecimals = Math.max(maxDecimals, s.length - dot - 1);\n    }\n  }\n  return Math.pow(10, Math.min(maxDecimals, 6));\n}\n\nfunction largestPlatesAtMost(inventory: IPlateCount[], target: number): IPlateCount[] | undefined {\n  if (target < -EPSILON) {\n    return undefined;\n  }\n  const types = inventory.filter((p) => p.num > 0 && p.weight > 0).sort((a, b) => b.weight - a.weight);\n  if (target < EPSILON || types.length === 0) {\n    return [];\n  }\n  const precision = precisionOf([target, ...types.map((t) => t.weight)]);\n  const intTarget = Math.round(target * precision);\n  const intWeights = types.map((t) => Math.round(t.weight * precision));\n  const maxFrom = new Array(types.length + 1).fill(0);\n  for (let i = types.length - 1; i >= 0; i--) {\n    maxFrom[i] = maxFrom[i + 1] + intWeights[i] * types[i].num;\n  }\n  const best = new Array(types.length).fill(0);\n  const current = new Array(types.length).fill(0);\n  let bestRemaining = intTarget + 1;\n  let iterations = 0;\n\n  function search(index: number, remaining: number): void {\n    if (bestRemaining === 0 || iterations >= MAX_STEPS) {\n      return;\n    }\n    if (remaining === 0 || index >= types.length) {\n      if (remaining < bestRemaining) {\n        bestRemaining = remaining;\n        for (let i = 0; i < types.length; i++) {\n          best[i] = i < index ? current[i] : 0;\n        }\n      }\n      return;\n    }\n    iterations += 1;\n    const w = intWeights[index];\n    const maxCount = Math.min(types[index].num, w > 0 ? Math.floor(remaining / w) : 0);\n    for (let count = maxCount; count >= 0; count--) {\n      const newRemaining = remaining - count * w;\n      if (newRemaining - maxFrom[index + 1] >= bestRemaining) {\n        continue;\n      }\n      current[index] = count;\n      search(index + 1, newRemaining);\n      if (bestRemaining === 0) {\n        return;\n      }\n    }\n  }\n\n  search(0, intTarget);\n  return types.map((t, i) => ({ weight: t.weight, num: best[i] })).filter((p) => p.num > 0);\n}\n\nfunction platesTotal(plates: IPlateCount[]): number {\n  return clean(plates.reduce((memo, p) => memo + p.weight * p.num, 0));\n}\n\nfunction subtractPlates(inventory: IPlateCount[], used: IPlateCount[]): IPlateCount[] {\n  return inventory.map((p) => {\n    const taken = used.find((u) => u.weight === p.weight)?.num ?? 0;\n    return { weight: p.weight, num: p.num - taken };\n  });\n}\n\nfunction smallestPlatesAtLeast(inventory: IPlateCount[], target: number): IPlateCount[] | undefined {\n  const all = platesTotal(inventory);\n  if (target > all + EPSILON) {\n    return undefined;\n  }\n  const leftOut = largestPlatesAtMost(inventory, all - target);\n  return leftOut == null ? undefined : subtractPlates(inventory, leftOut).filter((p) => p.num > 0);\n}\n\nfunction splitByHorns(\n  inventory: IPlateCount[],\n  plates: IPlateCount[],\n  horns: IEquipmentHorn[]\n): { name?: string; plates: IPlateCount[] }[] {\n  const loaded = horns.filter((h) => h.ratio > 0);\n  if (loaded.length === 0) {\n    return [{ plates }];\n  }\n  const total = platesTotal(plates);\n  const ratioSum = loaded.reduce((memo, h) => memo + h.ratio, 0);\n  const shares = loaded.map((h) => (total * h.ratio) / ratioSum);\n  const greedy = loadHornByHorn(inventory, total, shares);\n  const split = closestSplit(inventory, total, shares, { steps: 0 }, greedy?.deviation ?? Infinity) ?? greedy;\n  const byHorn = split != null ? new Map(loaded.map((h, i) => [h, split.plates[i]])) : handOut(plates, loaded, shares);\n  return horns.map((h) => ({ name: h.name, plates: byHorn.get(h) ?? [] }));\n}\n\ninterface IHornSplit {\n  plates: IPlateCount[][];\n  deviation: number;\n}\n\nfunction loadHornByHorn(inventory: IPlateCount[], total: number, shares: number[]): IHornSplit | undefined {\n  const plates: IPlateCount[][] = [];\n  let remaining = inventory;\n  let loadedSoFar = 0;\n  let deviation = 0;\n  for (let i = 0; i < shares.length; i++) {\n    const isLast = i === shares.length - 1;\n    const goal = isLast ? clean(total - loadedSoFar) : shares[i];\n    const picked = largestPlatesAtMost(remaining, goal) ?? [];\n    if (isLast && Math.abs(platesTotal(picked) - goal) > EPSILON) {\n      return undefined;\n    }\n    plates.push(picked);\n    deviation += Math.abs(platesTotal(picked) - shares[i]);\n    loadedSoFar = clean(loadedSoFar + platesTotal(picked));\n    remaining = subtractPlates(remaining, picked);\n  }\n  return { plates, deviation };\n}\n\nfunction plateSubsets(inventory: IPlateCount[], maxTotal: number): { plates: IPlateCount[]; total: number }[] {\n  let result: { plates: IPlateCount[]; total: number }[] = [{ plates: [], total: 0 }];\n  for (const type of inventory.filter((p) => p.num > 0 && p.weight > 0)) {\n    const next: { plates: IPlateCount[]; total: number }[] = [];\n    for (const subset of result) {\n      for (let count = 0; count <= type.num; count += 1) {\n        const total = clean(subset.total + type.weight * count);\n        if (total > maxTotal + EPSILON || next.length >= MAX_COMBINATIONS) {\n          break;\n        }\n        next.push({\n          plates: count > 0 ? [...subset.plates, { weight: type.weight, num: count }] : subset.plates,\n          total,\n        });\n      }\n    }\n    result = next;\n  }\n  return result;\n}\n\nfunction plateCount(plates: IPlateCount[]): number {\n  return plates.reduce((memo, p) => memo + p.num, 0);\n}\n\nfunction compareHeavierFirst(a: IPlateCount[], b: IPlateCount[]): number {\n  const weights = Array.from(new Set([...a, ...b].map((p) => p.weight))).sort((x, y) => y - x);\n  for (const weight of weights) {\n    const diff = (b.find((p) => p.weight === weight)?.num ?? 0) - (a.find((p) => p.weight === weight)?.num ?? 0);\n    if (diff !== 0) {\n      return diff;\n    }\n  }\n  return 0;\n}\n\nfunction closestSplit(\n  inventory: IPlateCount[],\n  total: number,\n  shares: number[],\n  budget: { steps: number },\n  maxDeviation: number\n): IHornSplit | undefined {\n  if (shares.length === 1) {\n    const deviation = Math.abs(total - shares[0]);\n    const picked = deviation < maxDeviation - EPSILON ? largestPlatesAtMost(inventory, total) : undefined;\n    return picked == null || Math.abs(platesTotal(picked) - total) > EPSILON\n      ? undefined\n      : { plates: [picked], deviation };\n  }\n  const restShares = shares.slice(1).reduce((memo, s) => memo + s, 0);\n  const deviationOf = (candidate: { total: number }): number => Math.abs(candidate.total - shares[0]);\n  const lowerBoundOf = (candidate: { total: number }): number =>\n    deviationOf(candidate) + Math.abs(total - candidate.total - restShares);\n  const candidates = plateSubsets(inventory, total)\n    .filter((c) => lowerBoundOf(c) < maxDeviation - EPSILON)\n    .sort(\n      (a, b) =>\n        lowerBoundOf(a) - lowerBoundOf(b) ||\n        plateCount(a.plates) - plateCount(b.plates) ||\n        compareHeavierFirst(a.plates, b.plates)\n    );\n  let best: IHornSplit | undefined;\n  let limit = maxDeviation;\n  for (const candidate of candidates) {\n    const deviation = deviationOf(candidate);\n    if (lowerBoundOf(candidate) >= limit - EPSILON || budget.steps >= MAX_SPLIT_STEPS) {\n      break;\n    }\n    budget.steps += 1;\n    const rest = closestSplit(\n      subtractPlates(inventory, candidate.plates),\n      clean(total - candidate.total),\n      shares.slice(1),\n      budget,\n      limit - deviation\n    );\n    if (rest != null) {\n      best = { plates: [candidate.plates, ...rest.plates], deviation: deviation + rest.deviation };\n      limit = best.deviation;\n    }\n  }\n  return best;\n}\n\nfunction handOut(plates: IPlateCount[], horns: IEquipmentHorn[], shares: number[]): Map<IEquipmentHorn, IPlateCount[]> {\n  const loads = horns.map(() => 0);\n  const result = new Map<IEquipmentHorn, IPlateCount[]>(horns.map((h) => [h, []]));\n  const singles = [...plates]\n    .sort((a, b) => b.weight - a.weight)\n    .flatMap((p) => new Array<number>(p.num).fill(p.weight));\n  for (const weight of singles) {\n    let target = 0;\n    for (let i = 1; i < horns.length; i++) {\n      if (shares[i] - loads[i] > shares[target] - loads[target]) {\n        target = i;\n      }\n    }\n    loads[target] += weight;\n    const list = result.get(horns[target])!;\n    const existing = list.find((p) => p.weight === weight);\n    if (existing) {\n      existing.num += 1;\n    } else {\n      list.push({ weight, num: 1 });\n    }\n  }\n  return result;\n}\n\nfunction platesPicker(inventory: IPlateCount[], sides: number, horns: IEquipmentHorn[] | undefined): ILoadPicker {\n  const perSide = mergePlates(inventory)\n    .map((p) => ({ weight: p.weight, num: Math.floor(p.num / sides) }))\n    .filter((p) => p.num > 0);\n  const toOption = (plates: IPlateCount[]): ILoadOption => ({\n    load: clean(platesTotal(plates) * sides),\n    build: () => ({\n      type: \"plates\",\n      sides,\n      horns: horns && horns.length > 0 ? splitByHorns(perSide, plates, horns) : [{ plates }],\n    }),\n  });\n  return {\n    floor: (x) => {\n      const plates = largestPlatesAtMost(perSide, x / sides);\n      return plates == null ? undefined : toOption(plates);\n    },\n    ceil: (x) => {\n      const plates = smallestPlatesAtLeast(perSide, Math.max(0, x / sides));\n      return plates == null ? undefined : toOption(plates);\n    },\n    min: () => toOption([]),\n  };\n}\n\nfunction bandsPicker(setup: IBandsSetup): ILoadPicker {\n  const bands = setup.bands.filter((b) => b.num > 0 && b.weight > 0);\n  const options: ILoadOption[] = setup.combine\n    ? combinations(bands.map((b) => ({ item: b.name, weight: b.weight, num: b.num })))\n        .filter((c) => c.total > 0)\n        .map((c) => ({\n          load: c.total,\n          build: () => ({ type: \"bands\", bands: c.items.map((i) => ({ name: i.item, num: i.num })) }),\n        }))\n    : bands\n        .map((b) => ({ load: b.weight, build: () => ({ type: \"bands\" as const, bands: [{ name: b.name, num: 1 }] }) }))\n        .sort((a, b) => a.load - b.load);\n  return {\n    floor: (x) => [...options].reverse().find((o) => o.load <= x + EPSILON),\n    ceil: (x) => options.find((o) => o.load >= x - EPSILON),\n    min: () => options[0],\n  };\n}\n\nfunction pickerFor(setup: IEquipmentSetup, isWarmup: boolean): ILoadPicker {\n  switch (setup.type) {\n    case \"stack\": {\n      const skipAddOns = isWarmup && setup.skipAddOnsInWarmups;\n      const addOns = skipAddOns ? addOnOptions([], []) : addOnOptions(setup.builtin ?? [], setup.addOn ?? []);\n      const stacks = setup.stackCount ?? 1;\n      const allStacks = setup.ranges.map((r) => ({ from: r.from * stacks, to: r.to * stacks, step: r.step * stacks }));\n      return rangesPicker(allStacks, [], addOns, (value, addOn) => {\n        const pin = clean(value / stacks);\n        return {\n          type: \"stack\",\n          pin,\n          ...(setup.showPinNumbers ? { pinNumber: pinNumber(setup.ranges, pin) } : {}),\n          ...(stacks > 1 ? { stacks } : {}),\n          builtin: addOn.builtin,\n          addOn: addOn.plates,\n        };\n      });\n    }\n    case \"plates\": {\n      const inventory =\n        isWarmup && setup.warmupPlates != null\n          ? setup.plates.filter((p) => setup.warmupPlates!.indexOf(p.weight) !== -1)\n          : setup.plates;\n      return platesPicker(inventory, Math.max(1, setup.sides), setup.horns);\n    }\n    case \"fixed\":\n      return rangesPicker(setup.ranges, setup.values, addOnOptions([], setup.addOn ?? []), (value, addOn) => ({\n        type: \"fixed\",\n        value,\n        addOn: addOn.plates,\n      }));\n    case \"electric\":\n      return rangesPicker(\n        [{ from: setup.min, to: setup.max, step: setup.step }],\n        [],\n        addOnOptions([], []),\n        (value) => ({ type: \"electric\", value })\n      );\n    case \"bands\":\n      return bandsPicker(setup);\n  }\n}\n\nfunction hasWarmupInventory(setup: IEquipmentSetup): boolean {\n  return (\n    (setup.type === \"plates\" && setup.warmupPlates != null) || (setup.type === \"stack\" && !!setup.skipAddOnsInWarmups)\n  );\n}\n\nfunction scaleFor(setup: IEquipmentSetup, query: IEquipmentLoadQuery): IEffectiveScale {\n  const ratio = setup.type === \"stack\" ? (setup.pullRatio ?? 1) : 1;\n  const base = setup.type === \"plates\" ? setup.base : setup.type === \"stack\" ? (setup.base ?? 0) * ratio : 0;\n  const hasBodyweight = setup.bodyweight != null && query.bodyweight != null;\n  const bodyweight =\n    hasBodyweight && query.bodyweight\n      ? convertForCaller(query.bodyweight.value, query.bodyweight.unit, setup.unit) * (setup.bodyweight?.share ?? 1)\n      : 0;\n  const start = base + bodyweight;\n  const sign = setup.direction === \"assists\" ? -1 : 1;\n  const maxLoad = sign === -1 && hasBodyweight ? clean(start / ratio) : Infinity;\n  return { start, ratio, sign, maxLoad };\n}\n\nfunction effective(scale: IEffectiveScale, load: number): number {\n  return clean(scale.start + scale.sign * load * scale.ratio);\n}\n\nfunction isMirroredTarget(scale: IEffectiveScale, target: number): boolean {\n  const isAssistanceOnly = scale.sign === -1 && scale.start <= 0;\n  return target < 0 && !isAssistanceOnly;\n}\n\nfunction loadFor(scale: IEffectiveScale, value: number): number {\n  return clean((scale.sign * (value - scale.start)) / scale.ratio);\n}\n\nfunction withinBounds(scale: IEffectiveScale, option: ILoadOption | undefined): ILoadOption | undefined {\n  return option != null && option.load <= scale.maxLoad + EPSILON ? option : undefined;\n}\n\nfunction roundLoad(\n  picker: ILoadPicker,\n  scale: IEffectiveScale,\n  loadTarget: number,\n  rounding: \"down\" | \"nearest\"\n): ILoadOption | undefined {\n  const below = picker.floor(Math.min(loadTarget, scale.maxLoad));\n  if (rounding === \"down\") {\n    return below ?? withinBounds(scale, picker.min());\n  }\n  const above = withinBounds(scale, picker.ceil(loadTarget));\n  if (below == null || above == null) {\n    return below ?? above ?? withinBounds(scale, picker.min());\n  }\n  return above.load - loadTarget < loadTarget - below.load - EPSILON ? above : below;\n}\n\nfunction capLoad(\n  picker: ILoadPicker,\n  scale: IEffectiveScale,\n  option: ILoadOption,\n  cap: number\n): ILoadOption | undefined {\n  if (effective(scale, option.load) <= cap + EPSILON) {\n    return option;\n  }\n  const capLoadValue = loadFor(scale, cap);\n  return scale.sign === 1 ? picker.floor(capLoadValue) : withinBounds(scale, picker.ceil(capLoadValue));\n}\n\ninterface ICallerTarget {\n  value: number;\n  unit: IUnit;\n}\n\nfunction callerValueOf(\n  setup: IEquipmentSetup,\n  scale: IEffectiveScale,\n  option: ILoadOption,\n  caller: ICallerTarget,\n  isMirrored: boolean\n): number {\n  const value = effective(scale, option.load);\n  return convertForCaller(isMirrored ? -value : value, setup.unit, caller.unit);\n}\n\nfunction matchingCallerValue(\n  setup: IEquipmentSetup,\n  scale: IEffectiveScale,\n  picker: ILoadPicker,\n  loadTarget: number,\n  caller: ICallerTarget,\n  isMirrored: boolean\n): ILoadOption | undefined {\n  const candidates = [picker.floor(Math.min(loadTarget, scale.maxLoad)), withinBounds(scale, picker.ceil(loadTarget))];\n  return candidates.find(\n    (c) =>\n      c != null &&\n      callerValueOf(setup, scale, c, caller, isMirrored) === convertForCaller(caller.value, caller.unit, caller.unit)\n  );\n}\n\nfunction toResult(\n  setup: IEquipmentSetup,\n  scale: IEffectiveScale,\n  option: ILoadOption | undefined,\n  caller: ICallerTarget,\n  isMirrored: boolean\n): IEquipmentLoad {\n  if (option == null) {\n    return { total: { value: caller.value, unit: caller.unit }, exact: false, unit: setup.unit };\n  }\n  const value = callerValueOf(setup, scale, option, caller, isMirrored);\n  return {\n    total: { value, unit: caller.unit },\n    exact: value === convertForCaller(caller.value, caller.unit, caller.unit),\n    unit: setup.unit,\n    instruction: option.build(),\n  };\n}\n\nfunction selectIn(\n  setup: IEquipmentSetup,\n  caller: ICallerTarget,\n  query: IEquipmentLoadQuery,\n  rounding: \"down\" | \"nearest\"\n): IEquipmentLoad {\n  const scale = scaleFor(setup, query);\n  const target = convertExact(caller.value, caller.unit, setup.unit);\n  const isMirrored = isMirroredTarget(scale, target);\n  const goal = isMirrored ? -target : target;\n  const loadTarget = loadFor(scale, goal);\n  const hasConversionTolerance = rounding === \"down\" && scale.sign === 1 && caller.unit !== setup.unit;\n  const roundingTarget = hasConversionTolerance ? loadFor(scale, goal + CONVERSION_TOLERANCE) : loadTarget;\n  const warmup = query.warmup;\n  const workingValue =\n    warmup?.firstWorkingWeight != null && !isMirrored\n      ? convertExact(warmup.firstWorkingWeight.value, warmup.firstWorkingWeight.unit, setup.unit)\n      : undefined;\n  const cap = workingValue != null && goal <= workingValue + EPSILON ? workingValue : undefined;\n  const pickers =\n    warmup != null && hasWarmupInventory(setup)\n      ? [pickerFor(setup, true), pickerFor(setup, false)]\n      : [pickerFor(setup, false)];\n  for (const picker of pickers) {\n    const option =\n      matchingCallerValue(setup, scale, picker, loadTarget, caller, isMirrored) ??\n      roundLoad(picker, scale, roundingTarget, rounding);\n    const capped = option != null && cap != null ? capLoad(picker, scale, option, cap) : option;\n    if (capped != null || option == null) {\n      return toResult(setup, scale, capped, caller, isMirrored);\n    }\n  }\n  return toResult(setup, scale, withinBounds(scale, pickers[pickers.length - 1].min()), caller, isMirrored);\n}\n\nexport function EquipmentLoadSolver_select(\n  setup: IEquipmentSetup,\n  target: IWeight,\n  query: IEquipmentLoadQuery\n): IEquipmentLoad {\n  return selectIn(setup, target, query, setup.rounding ?? \"down\");\n}\n\nexport function EquipmentLoadSolver_realize(\n  setup: IEquipmentSetup,\n  weight: IWeight,\n  query: IEquipmentLoadQuery\n): IEquipmentLoad {\n  const withAllPlates: IEquipmentLoadQuery = { bodyweight: query.bodyweight };\n  const attempts = query.warmup != null ? [{ ...withAllPlates, warmup: {} }, withAllPlates] : [withAllPlates];\n  for (const attempt of attempts) {\n    const load = selectIn(setup, weight, attempt, \"nearest\");\n    if (load.exact) {\n      return load;\n    }\n  }\n  return selectIn(setup, weight, withAllPlates, \"down\");\n}\n\nfunction step(setup: IEquipmentSetup, weight: IWeight, query: IEquipmentLoadQuery, direction: 1 | -1): IWeight {\n  const picker = pickerFor(setup, false);\n  const scale = scaleFor(setup, query);\n  let value = convertExact(weight.value, weight.unit, setup.unit);\n  const isMirrored = isMirroredTarget(scale, value);\n  const towards = (isMirrored ? -direction : direction) * scale.sign;\n  if (isMirrored) {\n    value = -value;\n  }\n  for (let attempt = 0; attempt < 50; attempt++) {\n    const load = loadFor(scale, value);\n    const option =\n      towards === 1 ? withinBounds(scale, picker.ceil(load + STEP_OFFSET)) : picker.floor(load - STEP_OFFSET);\n    if (option == null) {\n      return weight;\n    }\n    value = effective(scale, option.load);\n    const result = convertForCaller(isMirrored ? -value : value, setup.unit, weight.unit);\n    if (result !== weight.value) {\n      return { value: result, unit: weight.unit };\n    }\n  }\n  return weight;\n}\n\nexport function EquipmentLoadSolver_next(setup: IEquipmentSetup, weight: IWeight, query: IEquipmentLoadQuery): IWeight {\n  return step(setup, weight, query, 1);\n}\n\nexport function EquipmentLoadSolver_previous(\n  setup: IEquipmentSetup,\n  weight: IWeight,\n  query: IEquipmentLoadQuery\n): IWeight {\n  return step(setup, weight, query, -1);\n}\n\nexport function EquipmentLoadSolver_reachable(\n  setup: IEquipmentSetup,\n  query: IEquipmentLoadQuery,\n  limit: number\n): { values: number[]; truncated: boolean } {\n  const picker = pickerFor(setup, false);\n  const scale = scaleFor(setup, query);\n  const values: number[] = [];\n  let option = withinBounds(scale, picker.min());\n  while (option != null && values.length < limit) {\n    values.push(effective(scale, option.load));\n    const next = withinBounds(scale, picker.ceil(option.load + STEP_OFFSET));\n    option = next != null && next.load > option.load ? next : undefined;\n  }\n  values.sort((a, b) => a - b);\n  return { values, truncated: option != null };\n}\n\nfunction onePlatePerHornLoad(setup: IPlatesSetup): number | undefined {\n  const sides = Math.max(1, setup.sides);\n  const horns = Math.max(1, setup.horns?.length ?? 0);\n  const heaviest = mergePlates(setup.plates)\n    .filter((p) => Math.floor(p.num / sides) >= horns)\n    .reduce<number | undefined>((max, p) => (max == null || p.weight > max ? p.weight : max), undefined);\n  return heaviest == null ? undefined : heaviest * horns * sides;\n}\n\nexport function EquipmentLoadSolver_sampleWeight(setup: IEquipmentSetup, query: IEquipmentLoadQuery): IWeight {\n  const scale = scaleFor(setup, query);\n  const plateLoad = setup.type === \"plates\" ? onePlatePerHornLoad(setup) : undefined;\n  const option = plateLoad != null ? withinBounds(scale, pickerFor(setup, false).floor(plateLoad)) : undefined;\n  if (option != null) {\n    return { value: effective(scale, option.load), unit: setup.unit };\n  }\n  const { values } = EquipmentLoadSolver_reachable(setup, query, 1000);\n  return { value: values.length > 0 ? values[Math.floor(values.length / 2)] : 0, unit: setup.unit };\n}\n","import { IEquipmentSetup, IPlateCount, IWeight } from \"../types\";\nimport { CollectionUtils_compressArray } from \"../utils/collection\";\nimport { IEquipmentLoad, IEquipmentLoadInstruction } from \"./equipmentLoadSolver\";\nimport { EquipmentSetupEdit_bandColor, IEquipmentBandColor } from \"./equipmentSetupEdit\";\n\nfunction singlePlates(plates: IPlateCount[]): number[] {\n  return [...plates].sort((a, b) => b.weight - a.weight).flatMap((p) => new Array<number>(p.num).fill(p.weight));\n}\n\nfunction platesText(plates: IPlateCount[]): string {\n  return CollectionUtils_compressArray(singlePlates(plates), 3).join(\"/\");\n}\n\nexport interface IEquipmentHornBar {\n  name?: string;\n  plates: IWeight[];\n  text: string;\n}\n\nexport interface IEquipmentLoadPicture {\n  text: string;\n  exact: boolean;\n  bars?: IEquipmentHornBar[];\n  chips?: IEquipmentBandChip[];\n}\n\nexport function EquipmentLoadText_picture(\n  load: IEquipmentLoad | undefined,\n  setup: IEquipmentSetup | undefined\n): IEquipmentLoadPicture | undefined {\n  const text = EquipmentLoadText_line(load);\n  if (load == null || text === \"\") {\n    return undefined;\n  }\n  return {\n    text,\n    exact: load.exact,\n    bars: EquipmentLoadText_hornBars(load),\n    chips: setup != null ? EquipmentLoadText_bandChips(load, setup) : undefined,\n  };\n}\n\nexport interface IEquipmentBandChip {\n  name: string;\n  num: number;\n  color: IEquipmentBandColor;\n}\n\nexport function EquipmentLoadText_bandChips(\n  load: IEquipmentLoad,\n  setup: IEquipmentSetup\n): IEquipmentBandChip[] | undefined {\n  const instruction = load.instruction;\n  if (instruction?.type !== \"bands\" || setup.type !== \"bands\" || instruction.bands.length === 0) {\n    return undefined;\n  }\n  return instruction.bands.map((b) => ({\n    name: b.name,\n    num: b.num,\n    color: EquipmentSetupEdit_bandColor(setup.bands.find((s) => s.name === b.name) ?? {}),\n  }));\n}\n\nexport function EquipmentLoadText_hornBars(load: IEquipmentLoad): IEquipmentHornBar[] | undefined {\n  const instruction = load.instruction;\n  if (instruction?.type !== \"plates\") {\n    return undefined;\n  }\n  const bars = instruction.horns\n    .filter((h) => h.plates.length > 0)\n    .map((h) => ({\n      name: h.name,\n      plates: singlePlates(h.plates).map((value) => ({ value, unit: load.unit })),\n      text: platesText(h.plates),\n    }));\n  return bars.length > 0 ? bars : undefined;\n}\n\nfunction addOnText(plates: IPlateCount[]): string {\n  return plates.length > 0 ? ` + ${platesText(plates)}` : \"\";\n}\n\nfunction instructionText(instruction: IEquipmentLoadInstruction): string {\n  switch (instruction.type) {\n    case \"stack\": {\n      const pin = instruction.pinNumber != null ? `#${instruction.pinNumber}` : `${instruction.pin}`;\n      const stacks = instruction.stacks != null ? ` × ${instruction.stacks}` : \"\";\n      const builtin = instruction.builtin != null ? ` + ${instruction.builtin}` : \"\";\n      return `Pin ${pin}${stacks}${builtin}${addOnText(instruction.addOn)}`;\n    }\n    case \"plates\": {\n      if (instruction.horns.length === 1 && instruction.horns[0].name == null) {\n        return platesText(instruction.horns[0].plates);\n      }\n      return instruction.horns\n        .filter((h) => h.plates.length > 0)\n        .map((h) => `${h.name ?? \"\"} ${platesText(h.plates)}`.trim())\n        .join(\" · \");\n    }\n    case \"fixed\":\n      return `${instruction.value}${addOnText(instruction.addOn)}`;\n    case \"electric\":\n      return `${instruction.value}`;\n    case \"bands\":\n      return instruction.bands.map((b) => (b.num > 1 ? `${b.num} × ${b.name}` : b.name)).join(\" + \");\n  }\n}\n\nexport function EquipmentLoadText_format(load: IEquipmentLoad): string {\n  return load.instruction != null ? instructionText(load.instruction) : \"\";\n}\n\nexport function EquipmentLoadText_line(load: IEquipmentLoad | undefined): string {\n  return load != null ? EquipmentLoadText_format(load) : \"\";\n}\n\nexport interface IEquipmentTryResult {\n  main: string;\n  handle?: string;\n  difference?: string;\n  status: \"exact\" | \"over\" | \"under\" | \"none\";\n}\n\nfunction roundForText(value: number): number {\n  return Math.round(value * 100) / 100;\n}\n\nexport function EquipmentLoadText_tryResult(\n  setup: IEquipmentSetup,\n  load: IEquipmentLoad,\n  target: IWeight\n): IEquipmentTryResult {\n  const main = EquipmentLoadText_format(load);\n  if (load.instruction == null || main === \"\") {\n    return { main: \"Nothing to load\", status: \"none\" };\n  }\n  const total = `${roundForText(load.total.value)} ${load.total.unit}`;\n  const hasPullRatio = setup.type === \"stack\" && setup.pullRatio != null && setup.pullRatio !== 1;\n  const hidesWeight = setup.type === \"stack\" && (!!setup.showPinNumbers || (setup.stackCount ?? 1) > 1);\n  const handle = hasPullRatio ? `= ${total} at the handle` : hidesWeight ? `= ${total}` : undefined;\n  if (load.exact) {\n    return { main, handle, status: \"exact\" };\n  }\n  const diff = roundForText(Math.abs(load.total.value - target.value));\n  const isOver = load.total.value > target.value;\n  return {\n    main,\n    handle: handle ?? `= ${total}`,\n    difference: `${diff} ${target.unit} ${isOver ? \"over\" : \"under\"} ${roundForText(target.value)} · ${roundingReason(setup, isOver)}`,\n    status: isOver ? \"over\" : \"under\",\n  };\n}\n\nfunction roundingReason(setup: IEquipmentSetup, isOver: boolean): string {\n  if (setup.rounding === \"nearest\") {\n    return \"closest you can load\";\n  }\n  if (!isOver) {\n    return \"rounded down\";\n  }\n  return setup.direction === \"assists\" ? \"assistance rounded down\" : \"lightest you can load\";\n}\n","import {\n  IEquipmentData,\n  IEquipmentSetup,\n  IPlate,\n  IPlateCount,\n  IStackSetup,\n  IUnit,\n  IWeight,\n  IWeightRange,\n} from \"../types\";\nimport { StringUtils_hashString } from \"../utils/string\";\nimport { EquipmentLoadSolver_hasTooManyTotals, EquipmentLoadSolver_reachable } from \"./equipmentLoadSolver\";\nimport { Weight_smartConvert } from \"./weight\";\n\ntype ILegacyFields = Pick<\n  IEquipmentData,\n  \"bar\" | \"multiplier\" | \"plates\" | \"fixed\" | \"isFixed\" | \"useBodyweightForBar\" | \"isAssisting\"\n>;\n\nconst LEGACY_HASH_VERSION = \"v2\";\nconst MAX_LEGACY_FIXED = 200;\nconst MAX_LEGACY_BAND_TOTALS = 50;\nconst LB_PER_KG = 2.20462;\nconst STEP_PRECISION = 100;\nconst MAX_STACKS = 4;\n\nconst PLATE_EQUIVALENTS: [number, number][] = [\n  [55, 25],\n  [45, 20],\n  [35, 15],\n  [25, 10],\n  [10, 5],\n  [5, 2.5],\n  [2.5, 1.25],\n  [1.25, 0.5],\n];\n\nfunction convertWeight(value: number, from: IUnit, to: IUnit): number {\n  if (from === to) {\n    return value;\n  }\n  const pair = PLATE_EQUIVALENTS.find(([lb, kg]) => (from === \"lb\" ? lb : kg) === value);\n  if (pair != null) {\n    return to === \"lb\" ? pair[0] : pair[1];\n  }\n  return Weight_smartConvert({ value, unit: from }, to).value;\n}\n\nfunction convertStep(step: number, from: IUnit, to: IUnit): number {\n  const converted = convertWeight(step, from, to);\n  if (converted > 0 || step <= 0) {\n    return converted;\n  }\n  const exact = from === \"lb\" ? step / LB_PER_KG : step * LB_PER_KG;\n  return Math.max(1, Math.round(exact * STEP_PRECISION)) / STEP_PRECISION;\n}\n\nfunction weightsIn(weights: IWeight[], unit: IUnit): number[] {\n  return weights.filter((w) => w.unit === unit).map((w) => w.value);\n}\n\nexport function EquipmentSetup_fromLegacy(data: IEquipmentData, unit: IUnit): IEquipmentSetup {\n  if (data.isFixed) {\n    const fixedUnit = data.unit ?? unit;\n    return { type: \"fixed\", unit: fixedUnit, ranges: [], values: weightsIn(data.fixed, fixedUnit) };\n  }\n  const usesBodyweight = !!data.useBodyweightForBar;\n  return {\n    type: \"plates\",\n    unit,\n    base: usesBodyweight ? 0 : data.bar[unit].value,\n    plates: heaviestFirst(\n      data.plates.filter((p) => p.weight.unit === unit).map((p) => ({ weight: p.weight.value, num: p.num }))\n    ),\n    sides: data.multiplier || 1,\n    ...(data.isAssisting ? { direction: \"assists\" as const } : {}),\n    ...(usesBodyweight ? { bodyweight: {} } : {}),\n  };\n}\n\nfunction legacyBar(value: number, unit: IUnit): IEquipmentData[\"bar\"] {\n  const other: IUnit = unit === \"lb\" ? \"kg\" : \"lb\";\n  const otherValue = convertWeight(value, unit, other);\n  return unit === \"lb\"\n    ? { lb: { value, unit: \"lb\" }, kg: { value: otherValue, unit: \"kg\" } }\n    : { lb: { value: otherValue, unit: \"lb\" }, kg: { value, unit: \"kg\" } };\n}\n\nfunction legacyPlates(plates: IPlateCount[], unit: IUnit): IPlate[] {\n  return plates.map((p) => ({ weight: { value: p.weight, unit }, num: p.num }));\n}\n\nfunction rangeValues(ranges: IWeightRange[], limit: number): number[] {\n  const values: number[] = [];\n  for (const range of ranges) {\n    for (\n      let value = range.from;\n      value <= range.to + 1e-6 && values.length < limit && range.step > 0;\n      value += range.step\n    ) {\n      values.push(Math.round(value * 1e6) / 1e6);\n    }\n  }\n  return values;\n}\n\nfunction isAssistanceOnly(setup: IEquipmentSetup, base: number): boolean {\n  return setup.direction === \"assists\" && setup.bodyweight == null && base === 0;\n}\n\nfunction legacyAssisting(setup: IEquipmentSetup, base: number): boolean {\n  return setup.direction === \"assists\" && !isAssistanceOnly(setup, base);\n}\n\nfunction legacyStepPlates(setup: IEquipmentSetup, bar: number, step: number, count: number): ILegacyFields {\n  return {\n    bar: legacyBar(bar, setup.unit),\n    multiplier: 1,\n    plates: count > 0 && step > 0 ? legacyPlates([{ weight: step, num: count }], setup.unit) : [],\n    fixed: [],\n    isFixed: false,\n    useBodyweightForBar: setup.bodyweight != null,\n    isAssisting: legacyAssisting(setup, bar),\n  };\n}\n\nfunction legacyFixed(setup: IEquipmentSetup, values: number[]): ILegacyFields {\n  const unique = Array.from(new Set(values)).sort((a, b) => a - b);\n  return {\n    bar: legacyBar(0, setup.unit),\n    multiplier: 1,\n    plates: [],\n    fixed: unique.map((value) => ({ value, unit: setup.unit })),\n    isFixed: true,\n    useBodyweightForBar: setup.bodyweight != null,\n    isAssisting: legacyAssisting(setup, 0),\n  };\n}\n\nfunction stackToLegacy(setup: IStackSetup): ILegacyFields {\n  const ratio = setup.pullRatio ?? 1;\n  const stacks = setup.stackCount ?? 1;\n  const first = setup.ranges[0];\n  if (first == null) {\n    return legacyFixed(setup, []);\n  }\n  const step = first.step * stacks * ratio;\n  if (setup.direction === \"assists\") {\n    const start = setup.bodyweight != null ? 0 : (setup.base ?? 0) * ratio;\n    return legacyStepPlates(setup, start, step, Math.floor(first.to / first.step + 1e-6));\n  }\n  const count = Math.floor((first.to - first.from) / first.step + 1e-6);\n  return legacyStepPlates(setup, ((setup.base ?? 0) + first.from * stacks) * ratio, step, count);\n}\n\nexport function EquipmentSetup_toLegacy(setup: IEquipmentSetup): ILegacyFields {\n  switch (setup.type) {\n    case \"plates\":\n      return {\n        bar: legacyBar(setup.base, setup.unit),\n        multiplier: setup.sides,\n        plates: legacyPlates(setup.plates, setup.unit),\n        fixed: [],\n        isFixed: false,\n        useBodyweightForBar: setup.bodyweight != null,\n        isAssisting: legacyAssisting(setup, setup.base),\n      };\n    case \"stack\":\n      return stackToLegacy(setup);\n    case \"electric\":\n      return legacyStepPlates(setup, setup.min, setup.step, Math.floor((setup.max - setup.min) / setup.step + 1e-6));\n    case \"fixed\":\n      return legacyFixed(setup, [...rangeValues(setup.ranges, MAX_LEGACY_FIXED), ...setup.values]);\n    case \"bands\":\n      return legacyFixed(setup, EquipmentLoadSolver_reachable(setup, {}, MAX_LEGACY_BAND_TOTALS).values);\n  }\n}\n\nexport function EquipmentSetup_legacyHash(data: IEquipmentData): string {\n  const weight = (w: IWeight): [number, IUnit] => [w.value, w.unit];\n  const canonical = JSON.stringify([\n    weight(data.bar.lb),\n    weight(data.bar.kg),\n    data.plates.map((p) => [...weight(p.weight), p.num]),\n    data.fixed.map(weight),\n    data.isFixed,\n    data.multiplier,\n    !!data.useBodyweightForBar,\n    !!data.isAssisting,\n    data.unit ?? null,\n  ]);\n  return `${LEGACY_HASH_VERSION}:${StringUtils_hashString(canonical)}`;\n}\n\nfunction heaviestFirst(plates: IPlateCount[]): IPlateCount[] {\n  return [...plates].sort((a, b) => b.weight - a.weight);\n}\n\nexport function EquipmentSetup_sortPlates(setup: IEquipmentSetup): IEquipmentSetup {\n  switch (setup.type) {\n    case \"plates\":\n      return { ...setup, plates: heaviestFirst(setup.plates) };\n    case \"stack\":\n    case \"fixed\":\n      return setup.addOn != null ? { ...setup, addOn: heaviestFirst(setup.addOn) } : setup;\n    default:\n      return setup;\n  }\n}\n\nexport function EquipmentSetup_save(data: IEquipmentData, unsortedSetup: IEquipmentSetup): IEquipmentData {\n  const setup = EquipmentSetup_sortPlates(unsortedSetup);\n  const saved: IEquipmentData = { ...data, ...EquipmentSetup_toLegacy(setup), setup };\n  return { ...saved, setupLegacyHash: EquipmentSetup_legacyHash(saved) };\n}\n\nfunction convertRanges(ranges: IWeightRange[], from: IUnit, to: IUnit): IWeightRange[] {\n  const result: IWeightRange[] = [];\n  ranges.forEach((range, index) => {\n    const previous = result[index - 1];\n    const isConnected = index > 0 && ranges[index - 1].to === range.from;\n    const start = isConnected && previous != null ? previous.to : convertWeight(range.from, from, to);\n    const step = convertStep(range.step, from, to);\n    const end = convertWeight(range.to, from, to);\n    const count = step > 0 ? Math.max(0, Math.floor((end - start) / step + 1e-6)) : 0;\n    result.push({ from: start, to: Math.round((start + count * step) * 1e6) / 1e6, step });\n  });\n  return result;\n}\n\nfunction convertPlates(plates: IPlateCount[], from: IUnit, to: IUnit): IPlateCount[] {\n  const merged = new Map<number, number>();\n  for (const plate of plates) {\n    const weight = convertWeight(plate.weight, from, to);\n    merged.set(weight, (merged.get(weight) ?? 0) + plate.num);\n  }\n  return Array.from(merged.entries()).map(([weight, num]) => ({ weight, num }));\n}\n\nfunction convertValues(values: number[], from: IUnit, to: IUnit): number[] {\n  return Array.from(new Set(values.map((v) => convertWeight(v, from, to))));\n}\n\nexport function EquipmentSetup_convertUnit(\n  setup: IEquipmentSetup,\n  unit: IUnit,\n  mode: \"convert\" | \"relabel\"\n): IEquipmentSetup {\n  if (mode === \"relabel\" || setup.unit === unit) {\n    return { ...setup, unit };\n  }\n  const from = setup.unit;\n  switch (setup.type) {\n    case \"stack\":\n      return {\n        ...setup,\n        unit,\n        ...(setup.base != null ? { base: convertWeight(setup.base, from, unit) } : {}),\n        ranges: convertRanges(setup.ranges, from, unit),\n        ...(setup.builtin != null ? { builtin: convertValues(setup.builtin, from, unit) } : {}),\n        ...(setup.addOn != null ? { addOn: convertPlates(setup.addOn, from, unit) } : {}),\n      };\n    case \"plates\":\n      return {\n        ...setup,\n        unit,\n        base: convertWeight(setup.base, from, unit),\n        plates: convertPlates(setup.plates, from, unit),\n        ...(setup.warmupPlates != null ? { warmupPlates: convertValues(setup.warmupPlates, from, unit) } : {}),\n      };\n    case \"fixed\":\n      return {\n        ...setup,\n        unit,\n        ranges: convertRanges(setup.ranges, from, unit),\n        values: convertValues(setup.values, from, unit),\n        ...(setup.addOn != null ? { addOn: convertPlates(setup.addOn, from, unit) } : {}),\n      };\n    case \"electric\": {\n      const [range] = convertRanges([{ from: setup.min, to: setup.max, step: setup.step }], from, unit);\n      return { ...setup, unit, min: range.from, max: range.to, step: range.step };\n    }\n    case \"bands\":\n      return { ...setup, unit, bands: setup.bands.map((b) => ({ ...b, weight: convertWeight(b.weight, from, unit) })) };\n  }\n}\n\nfunction rangesText(ranges: IWeightRange[]): string {\n  if (ranges.length === 0) {\n    return \"\";\n  }\n  if (ranges.length === 1) {\n    return `${ranges[0].from}–${ranges[0].to} by ${ranges[0].step}`;\n  }\n  return `${ranges[0].from}–${ranges[ranges.length - 1].to} · uneven steps`;\n}\n\nfunction ratioText(ratio: number | undefined): string | undefined {\n  if (ratio == null || ratio === 1) {\n    return undefined;\n  }\n  return ratio === 0.5 ? \"half\" : ratio === 0.25 ? \"quarter\" : `×${ratio}`;\n}\n\nfunction bodyweightText(setup: IEquipmentSetup): string | undefined {\n  if (setup.direction === \"assists\") {\n    return setup.bodyweight != null ? \"bodyweight − assist\" : \"assists\";\n  }\n  return setup.bodyweight != null ? \"+ bodyweight\" : undefined;\n}\n\nfunction isNumber(value: number): boolean {\n  return typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction rangeErrors(ranges: IWeightRange[]): string[] {\n  const errors: string[] = [];\n  for (const range of ranges) {\n    if (!isNumber(range.from) || !isNumber(range.to) || !isNumber(range.step)) {\n      errors.push(\"Every range needs a start, an end and a step.\");\n    } else if (range.step <= 0) {\n      errors.push(\"A step must be above 0.\");\n    } else if (range.from > range.to) {\n      errors.push(`A range can't start above its end (${range.from} → ${range.to}).`);\n    } else if (range.from < 0) {\n      errors.push(\"Weights can't be negative.\");\n    }\n  }\n  return errors;\n}\n\nfunction countErrors(items: { weight: number; num: number }[], what: string): string[] {\n  const errors: string[] = [];\n  for (const item of items) {\n    if (!isNumber(item.weight) || item.weight <= 0) {\n      errors.push(`Every ${what} needs a weight above 0.`);\n    } else if (!Number.isInteger(item.num) || item.num < 0) {\n      errors.push(`${what[0].toUpperCase()}${what.slice(1)} counts must be whole numbers.`);\n    }\n  }\n  return errors;\n}\n\nfunction combinationErrors(items: { weight: number; num: number }[], what: string): string[] {\n  return EquipmentLoadSolver_hasTooManyTotals(items)\n    ? [`Too many ${what} to combine. Remove some sizes or lower their counts.`]\n    : [];\n}\n\nfunction typeErrors(setup: IEquipmentSetup): string[] {\n  switch (setup.type) {\n    case \"stack\": {\n      const pullRatio = setup.pullRatio ?? 1;\n      return [\n        ...(setup.ranges.length === 0 ? [\"Add at least one range to the stack.\"] : []),\n        ...rangeErrors(setup.ranges),\n        ...(!isNumber(pullRatio) || pullRatio <= 0 ? [\"The pull ratio must be above 0.\"] : []),\n        ...(setup.stackCount != null &&\n        (!Number.isInteger(setup.stackCount) || setup.stackCount < 1 || setup.stackCount > MAX_STACKS)\n          ? [`The number of stacks must be a whole number from 1 to ${MAX_STACKS}.`]\n          : []),\n        ...((setup.builtin ?? []).some((b) => !isNumber(b) || b <= 0) ? [\"Built-in weights must be above 0.\"] : []),\n        ...countErrors(setup.addOn ?? [], \"added plate\"),\n        ...combinationErrors(setup.addOn ?? [], \"added plates\"),\n      ];\n    }\n    case \"plates\": {\n      const horns = setup.horns ?? [];\n      return [\n        ...(!isNumber(setup.base) || setup.base < 0 ? [\"The base weight can't be negative.\"] : []),\n        ...(!Number.isInteger(setup.sides) || setup.sides < 1 ? [\"Sides must be a whole number, 1 or more.\"] : []),\n        ...countErrors(setup.plates, \"plate\"),\n        ...(horns.some((h) => !isNumber(h.ratio) || h.ratio < 0) ? [\"Horn ratios can't be negative.\"] : []),\n        ...(horns.length > 0 && !horns.some((h) => h.ratio > 0) ? [\"At least one horn needs a ratio above 0.\"] : []),\n      ];\n    }\n    case \"fixed\":\n      return [\n        ...(setup.ranges.length === 0 && setup.values.length === 0 ? [\"Add at least one weight.\"] : []),\n        ...rangeErrors(setup.ranges),\n        ...(setup.values.some((v) => !isNumber(v) || v <= 0) ? [\"Single weights must be above 0.\"] : []),\n        ...countErrors(setup.addOn ?? [], \"added plate\"),\n        ...combinationErrors(setup.addOn ?? [], \"added plates\"),\n      ];\n    case \"electric\":\n      return rangeErrors([{ from: setup.min, to: setup.max, step: setup.step }]);\n    case \"bands\":\n      return [\n        ...(setup.bands.length === 0 ? [\"Add at least one band.\"] : []),\n        ...setup.bands\n          .filter((b, i) => setup.bands.findIndex((other) => other.name === b.name) !== i)\n          .map((b) => `Two bands are named ${b.name}.`),\n        ...countErrors(setup.bands, \"band\"),\n        ...(setup.combine ? combinationErrors(setup.bands, \"bands\") : []),\n      ];\n  }\n}\n\nexport function EquipmentSetup_validate(setup: IEquipmentSetup): string[] {\n  const share = setup.bodyweight?.share;\n  const errors = [\n    ...typeErrors(setup),\n    ...(share != null && (!isNumber(share) || share <= 0 || share > 1)\n      ? [\"The share of bodyweight must be above 0% and at most 100%.\"]\n      : []),\n  ];\n  return Array.from(new Set(errors));\n}\n\nexport function EquipmentSetup_summary(setup: IEquipmentSetup): string {\n  const parts: (string | undefined)[] = [];\n  switch (setup.type) {\n    case \"stack\": {\n      const addOns = [...(setup.builtin ?? []), ...(setup.addOn ?? []).map((p) => p.weight)];\n      parts.push(\"Weight stack\", rangesText(setup.ranges), ratioText(setup.pullRatio));\n      parts.push(setup.stackCount != null && setup.stackCount > 1 ? `${setup.stackCount} stacks` : undefined);\n      parts.push(setup.showPinNumbers ? \"pin numbers\" : undefined);\n      parts.push(addOns.length > 0 ? `+${addOns.join(\"/\")}` : undefined);\n      break;\n    }\n    case \"plates\": {\n      const loadedHorns = (setup.horns ?? []).filter((h) => h.ratio > 0);\n      parts.push(\"Plates\", setup.base > 0 ? `${setup.base} ${setup.unit} base` : undefined);\n      parts.push(setup.horns != null && setup.horns.length > 1 ? `${setup.horns.length} horns` : undefined);\n      parts.push(loadedHorns.length > 1 ? loadedHorns.map((h) => h.ratio).join(\":\") : undefined);\n      parts.push(setup.sides === 1 ? \"one side\" : undefined);\n      parts.push(setup.warmupPlates != null ? `warmups ${setup.warmupPlates.join(\"/\")}` : undefined);\n      break;\n    }\n    case \"fixed\":\n      parts.push(\"Fixed weights\", rangesText(setup.ranges));\n      parts.push(\n        setup.values.length > 0 ? `${setup.ranges.length > 0 ? \"+\" : \"\"}${setup.values.join(\", \")}` : undefined\n      );\n      break;\n    case \"electric\":\n      parts.push(\"Electric\", `${setup.min}–${setup.max} by ${setup.step}`);\n      break;\n    case \"bands\":\n      parts.push(\"Bands\", setup.bands.map((b) => b.name).join(\", \"));\n      break;\n  }\n  parts.push(bodyweightText(setup));\n  return parts.filter((p): p is string => p != null && p !== \"\").join(\" · \");\n}\n","import {\n  IEquipmentBand,\n  IEquipmentData,\n  IEquipmentHorn,\n  IEquipmentSetup,\n  IPlateCount,\n  IStackSetup,\n  IUnit,\n  IWeight,\n  IWeightRange,\n} from \"../types\";\nimport { EquipmentSetup_save } from \"./equipmentSetup\";\nimport { Weight_convertTo } from \"./weight\";\n\ntype IEquipmentSetupType = IEquipmentSetup[\"type\"];\n\nexport type IEquipmentBodyweightMode = \"adds\" | \"assists\";\nexport type IEquipmentBandColor = \"yellow\" | \"red\" | \"blue\" | \"green\" | \"black\" | \"purple\" | \"orange\" | \"gray\";\nexport const EquipmentSetupEdit_bandColors: IEquipmentBandColor[] = [\n  \"yellow\",\n  \"red\",\n  \"blue\",\n  \"green\",\n  \"black\",\n  \"purple\",\n  \"orange\",\n  \"gray\",\n];\nexport type IEquipmentWeightList = \"plates\" | \"addOn\" | \"builtin\" | \"values\";\n\nconst DEFAULT_HORN_NAMES = [\"Top\", \"Middle\", \"Low\"];\nconst MAX_HORNS = 3;\nconst NEW_PLATE_COUNT = 2;\nconst DEFAULT_WARMUP_PLATE_SIZES = 2;\nconst EXAMPLE_LOAD_LB = 45;\nconst EXAMPLE_LOAD_KG = 20;\nconst NEW_BAND_STEP_LB = 10;\nconst NEW_BAND_STEP_KG = 5;\n\nexport const EquipmentSetupEdit_types: { type: IEquipmentSetupType; label: string; description: string }[] = [\n  { type: \"stack\", label: \"Weight stack\", description: \"Cable columns and stack machines\" },\n  { type: \"plates\", label: \"Plates\", description: \"Barbells, plate-loaded machines, dip belts\" },\n  { type: \"fixed\", label: \"Fixed weights\", description: \"Dumbbells, kettlebells, fixed barbells\" },\n  { type: \"electric\", label: \"Electric\", description: \"Voltra, Tonal\" },\n  { type: \"bands\", label: \"Bands\", description: \"Resistance bands, band-assisted pull-ups\" },\n];\n\nexport function EquipmentSetupEdit_typeName(type: IEquipmentSetupType): string {\n  return EquipmentSetupEdit_types.find((t) => t.type === type)?.label ?? type;\n}\n\nexport function EquipmentSetupEdit_typeDescription(type: IEquipmentSetupType): string | undefined {\n  return EquipmentSetupEdit_types.find((t) => t.type === type)?.description;\n}\n\nexport function EquipmentSetupEdit_parseType(value: string | undefined): IEquipmentSetupType | undefined {\n  return EquipmentSetupEdit_types.find((t) => t.type === value)?.type;\n}\n\nfunction defaultPlates(unit: IUnit): IPlateCount[] {\n  return unit === \"lb\"\n    ? [\n        { weight: 45, num: 8 },\n        { weight: 25, num: 4 },\n        { weight: 10, num: 4 },\n        { weight: 5, num: 4 },\n        { weight: 2.5, num: 4 },\n      ]\n    : [\n        { weight: 20, num: 8 },\n        { weight: 10, num: 4 },\n        { weight: 5, num: 4 },\n        { weight: 2.5, num: 4 },\n        { weight: 1.25, num: 4 },\n      ];\n}\n\nfunction defaultBands(unit: IUnit): IEquipmentBand[] {\n  const weights = unit === \"lb\" ? [10, 25, 40, 60, 80] : [5, 10, 20, 30, 40];\n  const colors: IEquipmentBandColor[] = [\"yellow\", \"red\", \"blue\", \"green\", \"black\"];\n  return colors.map((color, i) => ({\n    name: EquipmentSetupEdit_bandColorName(color),\n    color,\n    weight: weights[i],\n    num: 1,\n  }));\n}\n\nexport function EquipmentSetupEdit_bandColorName(color: IEquipmentBandColor): string {\n  return color[0].toUpperCase() + color.slice(1);\n}\n\nexport function EquipmentSetupEdit_bandColor(band: { color?: string }): IEquipmentBandColor {\n  return EquipmentSetupEdit_bandColors.find((c) => c === band.color) ?? \"gray\";\n}\n\nexport function EquipmentSetupEdit_addBand(bands: IEquipmentBand[], unit: IUnit): IEquipmentBand[] {\n  const names = bands.map((b) => b.name);\n  let index = bands.length + 1;\n  while (names.indexOf(`Band ${index}`) !== -1) {\n    index += 1;\n  }\n  const usedColors = bands.map((b) => b.color);\n  const color = EquipmentSetupEdit_bandColors.find((c) => usedColors.indexOf(c) === -1) ?? \"gray\";\n  const heaviest = bands.reduce((memo, b) => Math.max(memo, b.weight), 0);\n  const weight = heaviest + (unit === \"lb\" ? NEW_BAND_STEP_LB : NEW_BAND_STEP_KG);\n  return [...bands, { name: `Band ${index}`, color, weight, num: 1 }];\n}\n\nexport function EquipmentSetupEdit_updateBand(\n  bands: IEquipmentBand[],\n  index: number,\n  patch: Partial<IEquipmentBand>\n): IEquipmentBand[] {\n  const name = patch.name?.trim();\n  const isValid =\n    (patch.name == null || !!name) &&\n    (patch.weight == null || patch.weight > 0) &&\n    (patch.num == null || (patch.num >= 1 && Number.isInteger(patch.num)));\n  if (!isValid || bands[index] == null) {\n    return bands;\n  }\n  return bands.map((band, i) => (i === index ? { ...band, ...patch, ...(name != null ? { name } : {}) } : band));\n}\n\nexport function EquipmentSetupEdit_removeBand(bands: IEquipmentBand[], index: number): IEquipmentBand[] {\n  return bands.filter((_, i) => i !== index);\n}\n\nexport function EquipmentSetupEdit_default(type: IEquipmentSetupType, unit: IUnit): IEquipmentSetup {\n  const isLb = unit === \"lb\";\n  switch (type) {\n    case \"stack\":\n      return { type, unit, ranges: [isLb ? { from: 10, to: 200, step: 10 } : { from: 5, to: 100, step: 5 }] };\n    case \"plates\":\n      return { type, unit, base: isLb ? 45 : 20, plates: defaultPlates(unit), sides: 2 };\n    case \"fixed\":\n      return {\n        type,\n        unit,\n        ranges: [isLb ? { from: 5, to: 50, step: 5 } : { from: 2.5, to: 25, step: 2.5 }],\n        values: [],\n      };\n    case \"electric\":\n      return isLb ? { type, unit, min: 5, max: 200, step: 1 } : { type, unit, min: 2, max: 90, step: 0.5 };\n    case \"bands\":\n      return { type, unit, bands: defaultBands(unit), combine: false };\n  }\n}\n\nexport function EquipmentSetupEdit_changeType(setup: IEquipmentSetup, type: IEquipmentSetupType): IEquipmentSetup {\n  if (setup.type === type) {\n    return setup;\n  }\n  return {\n    ...EquipmentSetupEdit_default(type, setup.unit),\n    ...(setup.rounding != null ? { rounding: setup.rounding } : {}),\n    ...(setup.direction != null ? { direction: setup.direction } : {}),\n    ...(setup.bodyweight != null ? { bodyweight: setup.bodyweight } : {}),\n  };\n}\n\nfunction pinUnit(data: IEquipmentData, setup: IEquipmentSetup, appUnit: IUnit): IEquipmentData {\n  const { unit: _unit, ...rest } = data;\n  return setup.unit === appUnit ? rest : { ...rest, unit: setup.unit };\n}\n\nexport function EquipmentSetupEdit_newEquipment(setup: IEquipmentSetup, name: string, appUnit: IUnit): IEquipmentData {\n  const empty: IEquipmentData = {\n    vtype: \"equipment_data\",\n    name,\n    multiplier: 1,\n    bar: { lb: { value: 0, unit: \"lb\" }, kg: { value: 0, unit: \"kg\" } },\n    plates: [],\n    fixed: [],\n    isFixed: false,\n  };\n  return EquipmentSetupEdit_apply(empty, setup, appUnit);\n}\n\nexport function EquipmentSetupEdit_apply(data: IEquipmentData, setup: IEquipmentSetup, appUnit: IUnit): IEquipmentData {\n  return EquipmentSetup_save(pinUnit(data, setup, appUnit), setup);\n}\n\nexport function EquipmentSetupEdit_setRounding(setup: IEquipmentSetup, rounding: string | undefined): IEquipmentSetup {\n  const { rounding: _rounding, ...rest } = setup;\n  return rounding === \"down\" || rounding === \"nearest\" ? { ...rest, rounding } : rest;\n}\n\nexport function EquipmentSetupEdit_addWeight(\n  setup: IEquipmentSetup,\n  list: IEquipmentWeightList,\n  weight: number\n): IEquipmentSetup {\n  if (list === \"plates\" && setup.type === \"plates\") {\n    return { ...setup, plates: EquipmentSetupEdit_addPlates(setup.plates, weight) };\n  }\n  if (list === \"addOn\" && (setup.type === \"stack\" || setup.type === \"fixed\")) {\n    return { ...setup, addOn: EquipmentSetupEdit_addPlates(setup.addOn ?? [], weight) };\n  }\n  if (list === \"builtin\" && setup.type === \"stack\") {\n    return { ...setup, builtin: EquipmentSetupEdit_addValue(setup.builtin ?? [], weight) };\n  }\n  if (list === \"values\" && setup.type === \"fixed\") {\n    return { ...setup, values: EquipmentSetupEdit_addValue(setup.values, weight) };\n  }\n  return setup;\n}\n\nexport function EquipmentSetupEdit_unitChoice(choice: number | undefined): \"convert\" | \"relabel\" | undefined {\n  return choice === 0 ? \"convert\" : choice === 1 ? \"relabel\" : undefined;\n}\n\nexport function EquipmentSetupEdit_bodyweightMode(setup: IEquipmentSetup): IEquipmentBodyweightMode | undefined {\n  if (setup.direction === \"assists\") {\n    return \"assists\";\n  }\n  return setup.bodyweight != null ? \"adds\" : undefined;\n}\n\nexport function EquipmentSetupEdit_bodyweightModesToAdd(\n  setup: IEquipmentSetup,\n  supported: IEquipmentBodyweightMode[]\n): IEquipmentBodyweightMode[] {\n  return EquipmentSetupEdit_bodyweightMode(setup) != null ? [] : supported;\n}\n\nexport function EquipmentSetupEdit_pinNumbersExample(setup: IStackSetup): string {\n  const pins: number[] = [];\n  for (const range of setup.ranges) {\n    for (let w = range.from; range.step > 0 && w <= range.to + 1e-6 && pins.length < 3; w += range.step) {\n      const pin = Math.round(w * 1e6) / 1e6;\n      if (pins.indexOf(pin) === -1) {\n        pins.push(pin);\n      }\n    }\n  }\n  const examples = pins.map((pin, i) => `#${i + 1} is ${pin} ${setup.unit}`).join(\", \");\n  return examples !== \"\" ? `Counted from the lightest plate: ${examples}.` : \"Counted from the lightest plate.\";\n}\n\nexport function EquipmentSetupEdit_bodyweightPercent(setup: IEquipmentSetup): number {\n  return Math.round((setup.bodyweight?.share ?? 1) * 100);\n}\n\nfunction roundForHelp(value: number): number {\n  return Math.round(value * 10) / 10;\n}\n\nexport function EquipmentSetupEdit_bodyweightHelp(\n  setup: IEquipmentSetup,\n  bodyweight: IWeight,\n  isBodyweightLogged: boolean\n): string {\n  const unit = setup.unit;\n  const example = unit === \"lb\" ? EXAMPLE_LOAD_LB : EXAMPLE_LOAD_KG;\n  const isAssisting = setup.direction === \"assists\";\n  if (setup.bodyweight == null) {\n    return isAssisting ? `-${example} ${unit} in a program means ${example} ${unit} of assistance.` : \"\";\n  }\n  const total = roundForHelp(Weight_convertTo(bodyweight, unit).value);\n  const counted = roundForHelp(total * (setup.bodyweight.share ?? 1));\n  const intro = isBodyweightLogged\n    ? `Your bodyweight is ${total} ${unit}.`\n    : `No bodyweight logged, so it uses ${total} ${unit}.`;\n  const share = counted !== total ? ` ${EquipmentSetupEdit_bodyweightPercent(setup)}% of it counts.` : \"\";\n  const programWeight = roundForHelp(isAssisting ? counted - example : counted + example);\n  const meaning = isAssisting ? `${example} ${unit} of assistance` : `${example} ${unit} added`;\n  return `${intro}${share} ${programWeight} ${unit} in a program means ${meaning}.`;\n}\n\nexport function EquipmentSetupEdit_addValue(values: number[], value: number | undefined): number[] {\n  if (value == null || !(value > 0) || values.indexOf(value) !== -1) {\n    return values;\n  }\n  return [...values, value].sort((a, b) => a - b);\n}\n\nexport function EquipmentSetupEdit_removeValue(values: number[], value: number): number[] {\n  return values.filter((v) => v !== value);\n}\n\nexport function EquipmentSetupEdit_addRange(ranges: IWeightRange[]): IWeightRange[] {\n  const last = ranges[ranges.length - 1];\n  if (last == null) {\n    return [{ from: 5, to: 50, step: 5 }];\n  }\n  return [...ranges, { from: last.to, to: last.to + last.step * 5, step: last.step }];\n}\n\nexport function EquipmentSetupEdit_updateRange(\n  ranges: IWeightRange[],\n  index: number,\n  change: Partial<IWeightRange>\n): IWeightRange[] {\n  const current = ranges[index];\n  if (current == null) {\n    return ranges;\n  }\n  const merged = { ...current, ...change };\n  const isFromPastTo = change.from != null && change.to == null && merged.from > merged.to;\n  const updated = isFromPastTo ? { ...merged, to: merged.from + (current.to - current.from) } : merged;\n  return ranges.map((range, i) => {\n    if (i === index) {\n      return updated;\n    }\n    if (i === index + 1 && updated.to !== current.to && range.from === current.to) {\n      return { ...range, from: updated.to };\n    }\n    if (i === index - 1 && updated.from !== current.from && range.to === current.from) {\n      return { ...range, to: updated.from };\n    }\n    return range;\n  });\n}\n\nexport function EquipmentSetupEdit_removeRange(ranges: IWeightRange[], index: number): IWeightRange[] {\n  const previous = ranges[index - 1];\n  const current = ranges[index];\n  const next = ranges[index + 1];\n  const isBridged = previous != null && current != null && next != null && previous.to === current.from;\n  return ranges\n    .map((range, i) =>\n      isBridged && i === index + 1 && range.from === current.to ? { ...range, from: previous.to } : range\n    )\n    .filter((_, i) => i !== index);\n}\n\nexport function EquipmentSetupEdit_setPlateCount(plates: IPlateCount[], weight: number, num: number): IPlateCount[] {\n  const others = plates.filter((p) => p.weight !== weight);\n  const next = num > 0 ? [...others, { weight, num: Math.floor(num) }] : others;\n  return next.sort((a, b) => b.weight - a.weight);\n}\n\nexport function EquipmentSetupEdit_addPlates(plates: IPlateCount[], weight: number | undefined): IPlateCount[] {\n  if (weight == null || !(weight > 0)) {\n    return plates;\n  }\n  const existing = plates.find((p) => p.weight === weight)?.num ?? 0;\n  return EquipmentSetupEdit_setPlateCount(plates, weight, existing + NEW_PLATE_COUNT);\n}\n\nexport function EquipmentSetupEdit_defaultWarmupPlates(plates: IPlateCount[]): number[] {\n  return [...plates]\n    .sort((a, b) => b.weight - a.weight)\n    .slice(0, DEFAULT_WARMUP_PLATE_SIZES)\n    .map((p) => p.weight);\n}\n\nexport function EquipmentSetupEdit_hornPercents(horns: IEquipmentHorn[]): number[] {\n  const sum = horns.reduce((memo, h) => memo + Math.max(0, h.ratio), 0);\n  return horns.map((h) => (sum > 0 ? Math.round((Math.max(0, h.ratio) / sum) * 100) : 0));\n}\n\nexport function EquipmentSetupEdit_canAddHorn(horns: IEquipmentHorn[]): boolean {\n  return horns.length < MAX_HORNS;\n}\n\nfunction newHorn(horns: IEquipmentHorn[]): IEquipmentHorn {\n  const taken = horns.map((h) => h.name);\n  const name = DEFAULT_HORN_NAMES.find((n) => taken.indexOf(n) === -1) ?? `Horn ${horns.length + 1}`;\n  return { name, ratio: 1 };\n}\n\nexport function EquipmentSetupEdit_addHorn(horns: IEquipmentHorn[]): IEquipmentHorn[] {\n  const withFirst = horns.length === 0 ? [newHorn(horns)] : horns;\n  return [...withFirst, newHorn(withFirst)];\n}\n\nexport function EquipmentSetupEdit_setHornRatio(\n  horns: IEquipmentHorn[],\n  index: number,\n  ratio: number\n): IEquipmentHorn[] {\n  return horns.map((horn, i) => (i === index ? { ...horn, ratio } : horn));\n}\n\nexport function EquipmentSetupEdit_setHornName(horns: IEquipmentHorn[], index: number, name: string): IEquipmentHorn[] {\n  const trimmed = name.trim();\n  const isTaken = horns.some((horn, i) => i !== index && horn.name.toLowerCase() === trimmed.toLowerCase());\n  if (trimmed === \"\" || isTaken || horns[index] == null) {\n    return horns;\n  }\n  return horns.map((horn, i) => (i === index ? { ...horn, name: trimmed } : horn));\n}\n\nexport function EquipmentSetupEdit_removeHorn(horns: IEquipmentHorn[], index: number): IEquipmentHorn[] | undefined {\n  const rest = horns.filter((_, i) => i !== index);\n  return rest.length > 1 ? rest : undefined;\n}\n\nexport function EquipmentSetupEdit_toggleWarmupPlate(warmupPlates: number[], weight: number): number[] {\n  return warmupPlates.indexOf(weight) !== -1 ? warmupPlates.filter((w) => w !== weight) : [...warmupPlates, weight];\n}\n\nexport function EquipmentSetupEdit_setBodyweightShare(setup: IEquipmentSetup, percent: number): IEquipmentSetup {\n  if (setup.bodyweight == null || !(percent > 0 && percent <= 100)) {\n    return setup;\n  }\n  return { ...setup, bodyweight: percent === 100 ? {} : { share: percent / 100 } };\n}\n\nexport function EquipmentSetupEdit_setBodyweight(\n  setup: IEquipmentSetup,\n  mode: \"none\" | \"adds\" | \"assists\",\n  logAsTotal: boolean\n): IEquipmentSetup {\n  const { direction: _direction, bodyweight, ...rest } = setup;\n  const share = bodyweight?.share;\n  const withBodyweight = logAsTotal ? { bodyweight: share != null ? { share } : {} } : {};\n  if (mode === \"none\") {\n    return rest;\n  }\n  if (mode === \"adds\") {\n    return { ...rest, ...withBodyweight };\n  }\n  return { ...rest, direction: \"assists\", ...withBodyweight };\n}\n","import { IAllEquipment, IEquipmentData, IGym, IUnit } from \"../types\";\nimport { Equipment_legacyChanged } from \"./equipment\";\nimport { EquipmentDefaults_inUnit } from \"./equipmentDefaults\";\nimport {\n  EquipmentSetup_convertUnit,\n  EquipmentSetup_fromLegacy,\n  EquipmentSetup_legacyHash,\n  EquipmentSetup_save,\n} from \"./equipmentSetup\";\n\nfunction mapEquipment(gyms: IGym[], fn: (key: string, entry: IEquipmentData) => IEquipmentData | undefined): IGym[] {\n  let isChanged = false;\n  const result = gyms.map((gym) => {\n    let equipment: IAllEquipment | undefined;\n    for (const [key, entry] of Object.entries(gym.equipment)) {\n      const next = entry != null ? fn(key, entry) : undefined;\n      if (next != null) {\n        equipment = { ...(equipment ?? gym.equipment), [key]: next };\n      }\n    }\n    isChanged = isChanged || equipment != null;\n    return equipment != null ? { ...gym, equipment } : gym;\n  });\n  return isChanged ? result : gyms;\n}\n\nexport function EquipmentUnits_attachSetups(gyms: IGym[], appUnit: IUnit): IGym[] {\n  return mapEquipment(gyms, (key, entry) => {\n    if (entry.setup != null && !Equipment_legacyChanged(entry)) {\n      return undefined;\n    }\n    const setup = EquipmentSetup_fromLegacy(entry, entry.unit ?? appUnit);\n    return { ...entry, setup, setupLegacyHash: EquipmentSetup_legacyHash(entry) };\n  });\n}\n\nexport function EquipmentUnits_follow(gyms: IGym[], appUnit: IUnit): IGym[] {\n  return mapEquipment(gyms, (key, entry) => {\n    const setup = entry.setup;\n    if (setup == null || entry.unit != null || setup.unit === appUnit || Equipment_legacyChanged(entry)) {\n      return undefined;\n    }\n    const next = EquipmentDefaults_inUnit(key, setup, appUnit) ?? EquipmentSetup_convertUnit(setup, appUnit, \"convert\");\n    return EquipmentSetup_save(entry, next);\n  });\n}\n","import { ObjectUtils_keys, ObjectUtils_values, ObjectUtils_filter } from \"../utils/object\";\nimport { Weight_build, Weight_gt, Weight_multiply, Weight_roundWarmup, Weight_convertTo } from \"./weight\";\nimport {\n  IExerciseId,\n  IEquipment,\n  IBarKey,\n  IWeight,\n  ISet,\n  IExerciseType,\n  equipments,\n  ISettings,\n  IAllCustomExercises,\n  IMuscle,\n  IMetaExercises,\n  IProgramExerciseWarmupSet,\n  IUnit,\n  ICustomExercise,\n  IScreenMuscle,\n  IAllEquipment,\n  IProgram,\n  IMuscleMultiplier,\n} from \"../types\";\nimport {\n  Muscle_getScreenMusclesFromMuscle,\n  Muscle_getMusclesFromScreenMuscle,\n  Muscle_getAvailableMuscleGroups,\n  Muscle_getMuscleGroupName,\n} from \"./muscle\";\nimport {\n  StringUtils_fuzzySearch,\n  StringUtils_dashcase,\n  StringUtils_uncamelCase,\n  StringUtils_camelCase,\n  StringUtils_undashcase,\n  StringUtils_capitalize,\n} from \"../utils/string\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { CollectionUtils_compact, CollectionUtils_sort, CollectionUtils_flat } from \"../utils/collection\";\nimport { ExerciseImageUtils_exists } from \"./exerciseImage\";\nimport { Equipment_getUnitOrDefaultForExerciseType, Equipment_currentEquipment } from \"./equipment\";\nimport { IDispatch } from \"../ducks/types\";\nimport { Program_changeExerciseName } from \"./program\";\nimport { EditProgram_updateProgram } from \"./editProgram\";\nimport { lb } from \"lens-shmens\";\nimport { updateSettings } from \"./state\";\n\nexport const allExercisesList: Record<IExerciseId, IExercise> = {\n  abWheel: {\n    id: \"abWheel\",\n    name: \"Ab Wheel\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  arnoldPress: {\n    id: \"arnoldPress\",\n    name: \"Arnold Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  aroundTheWorld: {\n    id: \"aroundTheWorld\",\n    name: \"Around The World\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"core\"],\n    startingWeightLb: { value: 15, unit: \"lb\" },\n    startingWeightKg: { value: 5, unit: \"kg\" },\n  },\n  backExtension: {\n    id: \"backExtension\",\n    name: \"Back Extension\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"core\"],\n    startingWeightLb: { value: 50, unit: \"lb\" },\n    startingWeightKg: { value: 22.5, unit: \"kg\" },\n  },\n  ballSlams: {\n    id: \"ballSlams\",\n    name: \"Ball Slams\",\n    defaultEquipment: \"medicineball\",\n    types: [\"core\", \"upper\"],\n    startingWeightLb: { value: 10, unit: \"lb\" },\n    startingWeightKg: { value: 4.5, unit: \"kg\" },\n  },\n  battleRopes: {\n    id: \"battleRopes\",\n    name: \"Battle Ropes\",\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  behindTheNeckPress: {\n    id: \"behindTheNeckPress\",\n    name: \"Behind The Neck Press\",\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  benchDip: {\n    id: \"benchDip\",\n    name: \"Bench Dip\",\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  benchPress: {\n    id: \"benchPress\",\n    name: \"Bench Press\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 135, unit: \"lb\" },\n    startingWeightKg: { value: 60, unit: \"kg\" },\n  },\n  benchPressCloseGrip: {\n    id: \"benchPressCloseGrip\",\n    name: \"Bench Press Close Grip\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 115, unit: \"lb\" },\n    startingWeightKg: { value: 50, unit: \"kg\" },\n  },\n  benchPressWideGrip: {\n    id: \"benchPressWideGrip\",\n    name: \"Bench Press Wide Grip\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 135, unit: \"lb\" },\n    startingWeightKg: { value: 60, unit: \"kg\" },\n  },\n  bentOverOneArmRow: {\n    id: \"bentOverOneArmRow\",\n    name: \"Bent Over One Arm Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  bentOverRow: {\n    id: \"bentOverRow\",\n    name: \"Bent Over Row\",\n    defaultWarmup: 95,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 95, unit: \"lb\" },\n    startingWeightKg: { value: 42.5, unit: \"kg\" },\n  },\n  bicepCurl: {\n    id: \"bicepCurl\",\n    name: \"Bicep Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  bicycleCrunch: {\n    id: \"bicycleCrunch\",\n    name: \"Bicycle Crunch\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  boxJump: {\n    id: \"boxJump\",\n    name: \"Box Jump\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  boxSquat: {\n    id: \"boxSquat\",\n    name: \"Box Squat\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 155, unit: \"lb\" },\n    startingWeightKg: { value: 70, unit: \"kg\" },\n  },\n  bulgarianSplitSquat: {\n    id: \"bulgarianSplitSquat\",\n    name: \"Bulgarian Split Squat\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  burpee: {\n    id: \"burpee\",\n    name: \"Burpee\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"lower\", \"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  cableCrossover: {\n    id: \"cableCrossover\",\n    name: \"Cable Crossover\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  cableCrunch: {\n    id: \"cableCrunch\",\n    name: \"Cable Crunch\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"core\"],\n    startingWeightLb: { value: 50, unit: \"lb\" },\n    startingWeightKg: { value: 22.5, unit: \"kg\" },\n  },\n  cableKickback: {\n    id: \"cableKickback\",\n    name: \"Cable Kickback\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  cablePullThrough: {\n    id: \"cablePullThrough\",\n    name: \"Cable Pull Through\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"lower\", \"pull\"],\n    startingWeightLb: { value: 70, unit: \"lb\" },\n    startingWeightKg: { value: 30, unit: \"kg\" },\n  },\n  cableTwist: {\n    id: \"cableTwist\",\n    name: \"Cable Twist\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"core\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  calfPressOnLegPress: {\n    id: \"calfPressOnLegPress\",\n    name: \"Calf Press on Leg Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 150, unit: \"lb\" },\n    startingWeightKg: { value: 67.5, unit: \"kg\" },\n  },\n  calfPressOnSeatedLegPress: {\n    id: \"calfPressOnSeatedLegPress\",\n    name: \"Calf Press on Seated Leg Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 120, unit: \"lb\" },\n    startingWeightKg: { value: 53.75, unit: \"kg\" },\n  },\n  chestDip: {\n    id: \"chestDip\",\n    name: \"Chest Dip\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  chestFly: {\n    id: \"chestFly\",\n    name: \"Chest Fly\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  chestPress: {\n    id: \"chestPress\",\n    name: \"Chest Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  chestSupportedRow: {\n    id: \"chestSupportedRow\",\n    name: \"Chest-Supported Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 85, unit: \"lb\" },\n    startingWeightKg: { value: 37.5, unit: \"kg\" },\n  },\n  chinUp: {\n    id: \"chinUp\",\n    name: \"Chin Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  clean: {\n    id: \"clean\",\n    name: \"Clean\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"push\"],\n    startingWeightLb: { value: 95, unit: \"lb\" },\n    startingWeightKg: { value: 42.5, unit: \"kg\" },\n  },\n  cleanandJerk: {\n    id: \"cleanandJerk\",\n    name: \"Clean and Jerk\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"push\"],\n    startingWeightLb: { value: 95, unit: \"lb\" },\n    startingWeightKg: { value: 42.5, unit: \"kg\" },\n  },\n  concentrationCurl: {\n    id: \"concentrationCurl\",\n    name: \"Concentration Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  crossBodyCrunch: {\n    id: \"crossBodyCrunch\",\n    name: \"Cross Body Crunch\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  crunch: {\n    id: \"crunch\",\n    name: \"Crunch\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  cycling: {\n    id: \"cycling\",\n    name: \"Cycling\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  deadlift: {\n    id: \"deadlift\",\n    name: \"Deadlift\",\n    defaultWarmup: 95,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"pull\"],\n    startingWeightLb: { value: 185, unit: \"lb\" },\n    startingWeightKg: { value: 82.5, unit: \"kg\" },\n  },\n  deadliftHighPull: {\n    id: \"deadliftHighPull\",\n    name: \"Deadlift High Pull\",\n    defaultWarmup: 95,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"pull\"],\n    startingWeightLb: { value: 75, unit: \"lb\" },\n    startingWeightKg: { value: 32.5, unit: \"kg\" },\n  },\n  declineBenchPress: {\n    id: \"declineBenchPress\",\n    name: \"Decline Bench Press\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 125, unit: \"lb\" },\n    startingWeightKg: { value: 55, unit: \"kg\" },\n  },\n  declineCrunch: {\n    id: \"declineCrunch\",\n    name: \"Decline Crunch\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  deficitDeadlift: {\n    id: \"deficitDeadlift\",\n    name: \"Deficit Deadlift\",\n    defaultWarmup: 95,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"pull\"],\n    startingWeightLb: { value: 165, unit: \"lb\" },\n    startingWeightKg: { value: 75, unit: \"kg\" },\n  },\n  ellipticalMachine: {\n    id: \"ellipticalMachine\",\n    name: \"Elliptical Machine\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  facePull: {\n    id: \"facePull\",\n    name: \"Face Pull\",\n    defaultWarmup: 10,\n    defaultEquipment: \"band\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  flatKneeRaise: {\n    id: \"flatKneeRaise\",\n    name: \"Flat Knee Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  flatLegRaise: {\n    id: \"flatLegRaise\",\n    name: \"Flat Leg Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  frontRaise: {\n    id: \"frontRaise\",\n    name: \"Front Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 15, unit: \"lb\" },\n    startingWeightKg: { value: 5, unit: \"kg\" },\n  },\n  frontSquat: {\n    id: \"frontSquat\",\n    name: \"Front Squat\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 95, unit: \"lb\" },\n    startingWeightKg: { value: 42.5, unit: \"kg\" },\n  },\n  gobletSquat: {\n    id: \"gobletSquat\",\n    name: \"Goblet Squat\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 35, unit: \"lb\" },\n    startingWeightKg: { value: 15, unit: \"kg\" },\n  },\n  goodMorning: {\n    id: \"goodMorning\",\n    name: \"Good Morning\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  gluteBridge: {\n    id: \"gluteBridge\",\n    name: \"Glute Bridge\",\n    defaultWarmup: 45,\n    defaultEquipment: \"dumbbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 35, unit: \"lb\" },\n    startingWeightKg: { value: 15, unit: \"kg\" },\n  },\n  gluteBridgeMarch: {\n    id: \"gluteBridgeMarch\",\n    name: \"Glute Bridge March\",\n    defaultWarmup: 45,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  gluteKickback: {\n    id: \"gluteKickback\",\n    name: \"Glute Kickback\",\n    defaultWarmup: 45,\n    defaultEquipment: \"cable\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 35, unit: \"lb\" },\n    startingWeightKg: { value: 15, unit: \"kg\" },\n  },\n  hackSquat: {\n    id: \"hackSquat\",\n    name: \"Hack Squat\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 115, unit: \"lb\" },\n    startingWeightKg: { value: 50, unit: \"kg\" },\n  },\n  hammerCurl: {\n    id: \"hammerCurl\",\n    name: \"Hammer Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  handstandPushUp: {\n    id: \"handstandPushUp\",\n    name: \"Handstand Push Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  hangClean: {\n    id: \"hangClean\",\n    name: \"Hang Clean\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"pull\"],\n    startingWeightLb: { value: 85, unit: \"lb\" },\n    startingWeightKg: { value: 37.5, unit: \"kg\" },\n  },\n  hangSnatch: {\n    id: \"hangSnatch\",\n    name: \"Hang Snatch\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"pull\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  hangingLegRaise: {\n    id: \"hangingLegRaise\",\n    name: \"Hanging Leg Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  highKneeSkips: {\n    id: \"highKneeSkips\",\n    name: \"High Knee Skips\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  highRow: {\n    id: \"highRow\",\n    name: \"High Row\",\n    defaultWarmup: 45,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  hipAbductor: {\n    id: \"hipAbductor\",\n    name: \"Hip Abductor\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 60, unit: \"lb\" },\n    startingWeightKg: { value: 26.25, unit: \"kg\" },\n  },\n  hipAdductor: {\n    id: \"hipAdductor\",\n    name: \"Hip Adductor\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 60, unit: \"lb\" },\n    startingWeightKg: { value: 26.25, unit: \"kg\" },\n  },\n  hipThrust: {\n    id: \"hipThrust\",\n    name: \"Hip Thrust\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 95, unit: \"lb\" },\n    startingWeightKg: { value: 42.5, unit: \"kg\" },\n  },\n  inclineBenchPress: {\n    id: \"inclineBenchPress\",\n    name: \"Incline Bench Press\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 115, unit: \"lb\" },\n    startingWeightKg: { value: 50, unit: \"kg\" },\n  },\n  inclineBenchPressWideGrip: {\n    id: \"inclineBenchPressWideGrip\",\n    name: \"Incline Bench Press Wide Grip\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 110, unit: \"lb\" },\n    startingWeightKg: { value: 50, unit: \"kg\" },\n  },\n  inclineChestFly: {\n    id: \"inclineChestFly\",\n    name: \"Incline Chest Fly\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  inclineChestPress: {\n    id: \"inclineChestPress\",\n    name: \"Incline Chest Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  inclineCurl: {\n    id: \"inclineCurl\",\n    name: \"Incline Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  inclineRow: {\n    id: \"inclineRow\",\n    name: \"Incline Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  invertedRow: {\n    id: \"invertedRow\",\n    name: \"Inverted Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  isoLateralChestPress: {\n    id: \"isoLateralChestPress\",\n    name: \"Iso-Lateral Chest Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  isoLateralRow: {\n    id: \"isoLateralRow\",\n    name: \"Iso-Lateral Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  jackknifeSitUp: {\n    id: \"jackknifeSitUp\",\n    name: \"Jackknife Sit Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  jumpRope: {\n    id: \"jumpRope\",\n    name: \"Jump Rope\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  jumpSquat: {\n    id: \"jumpSquat\",\n    name: \"Jump Squat\",\n    defaultWarmup: 10,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  jumpingJack: {\n    id: \"jumpingJack\",\n    name: \"Jumping Jack\",\n    defaultWarmup: 10,\n    defaultEquipment: undefined,\n    types: [\"upper\", \"lower\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  kettlebellSwing: {\n    id: \"kettlebellSwing\",\n    name: \"Kettlebell Swing\",\n    defaultWarmup: 10,\n    defaultEquipment: \"kettlebell\",\n    types: [\"upper\", \"lower\", \"core\"],\n    startingWeightLb: { value: 35, unit: \"lb\" },\n    startingWeightKg: { value: 16, unit: \"kg\" },\n  },\n  kettlebellTurkishGetUp: {\n    id: \"kettlebellTurkishGetUp\",\n    name: \"Kettlebell Turkish Get Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"kettlebell\",\n    types: [\"upper\", \"lower\", \"core\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 8, unit: \"kg\" },\n  },\n  kippingPullUp: {\n    id: \"kippingPullUp\",\n    name: \"Kipping Pull Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  kneeRaise: {\n    id: \"kneeRaise\",\n    name: \"Knee Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  kneelingPulldown: {\n    id: \"kneelingPulldown\",\n    name: \"Kneeling Pulldown\",\n    defaultWarmup: 10,\n    defaultEquipment: \"band\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  kneestoElbows: {\n    id: \"kneestoElbows\",\n    name: \"Knees to Elbows\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  latPulldown: {\n    id: \"latPulldown\",\n    name: \"Lat Pulldown\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 70, unit: \"lb\" },\n    startingWeightKg: { value: 30, unit: \"kg\" },\n  },\n  lateralBoxJump: {\n    id: \"lateralBoxJump\",\n    name: \"Lateral Box Jump\",\n    defaultWarmup: 10,\n    defaultEquipment: undefined,\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  lateralRaise: {\n    id: \"lateralRaise\",\n    name: \"Lateral Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 15, unit: \"lb\" },\n    startingWeightKg: { value: 5, unit: \"kg\" },\n  },\n  legsUpBenchPress: {\n    id: \"legsUpBenchPress\",\n    name: \"Legs Up Bench Press\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 135, unit: \"lb\" },\n    startingWeightKg: { value: 60, unit: \"kg\" },\n  },\n  legCurl: {\n    id: \"legCurl\",\n    name: \"Leg Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 60, unit: \"lb\" },\n    startingWeightKg: { value: 26.25, unit: \"kg\" },\n  },\n  legExtension: {\n    id: \"legExtension\",\n    name: \"Leg Extension\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 60, unit: \"lb\" },\n    startingWeightKg: { value: 26.25, unit: \"kg\" },\n  },\n  legPress: {\n    id: \"legPress\",\n    name: \"Leg Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 250, unit: \"lb\" },\n    startingWeightKg: { value: 112.5, unit: \"kg\" },\n  },\n  lunge: {\n    id: \"lunge\",\n    name: \"Lunge\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 75, unit: \"lb\" },\n    startingWeightKg: { value: 32.5, unit: \"kg\" },\n  },\n  lyingBicepCurl: {\n    id: \"lyingBicepCurl\",\n    name: \"Lying Bicep Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 15, unit: \"lb\" },\n    startingWeightKg: { value: 5, unit: \"kg\" },\n  },\n  lyingLegCurl: {\n    id: \"lyingLegCurl\",\n    name: \"Lying Leg Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 60, unit: \"lb\" },\n    startingWeightKg: { value: 26.25, unit: \"kg\" },\n  },\n  mountainClimber: {\n    id: \"mountainClimber\",\n    name: \"Mountain Climber\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\", \"lower\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  muscleUp: {\n    id: \"muscleUp\",\n    name: \"Muscle Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  obliqueCrunch: {\n    id: \"obliqueCrunch\",\n    name: \"Oblique Crunch\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  overheadPress: {\n    id: \"overheadPress\",\n    name: \"Overhead Press\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 75, unit: \"lb\" },\n    startingWeightKg: { value: 32.5, unit: \"kg\" },\n  },\n  overheadSquat: {\n    id: \"overheadSquat\",\n    name: \"Overhead Squat\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 55, unit: \"lb\" },\n    startingWeightKg: { value: 25, unit: \"kg\" },\n  },\n  pecDeck: {\n    id: \"pecDeck\",\n    name: \"Pec Deck\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 50, unit: \"lb\" },\n    startingWeightKg: { value: 22.5, unit: \"kg\" },\n  },\n  pendlayRow: {\n    id: \"pendlayRow\",\n    name: \"Pendlay Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 95, unit: \"lb\" },\n    startingWeightKg: { value: 42.5, unit: \"kg\" },\n  },\n  pistolSquat: {\n    id: \"pistolSquat\",\n    name: \"Pistol Squat\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  plank: {\n    id: \"plank\",\n    name: \"Plank\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  powerClean: {\n    id: \"powerClean\",\n    name: \"Power Clean\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"pull\"],\n    startingWeightLb: { value: 95, unit: \"lb\" },\n    startingWeightKg: { value: 42.5, unit: \"kg\" },\n  },\n  powerSnatch: {\n    id: \"powerSnatch\",\n    name: \"Power Snatch\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"pull\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  preacherCurl: {\n    id: \"preacherCurl\",\n    name: \"Preacher Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  pressUnder: {\n    id: \"pressUnder\",\n    name: \"Press Under\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  pullUp: {\n    id: \"pullUp\",\n    name: \"Pull Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  pullover: {\n    id: \"pullover\",\n    name: \"Pullover\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  pushPress: {\n    id: \"pushPress\",\n    name: \"Push Press\",\n    defaultWarmup: 45,\n    defaultEquipment: \"kettlebell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 35, unit: \"lb\" },\n    startingWeightKg: { value: 16, unit: \"kg\" },\n  },\n  pushUp: {\n    id: \"pushUp\",\n    name: \"Push Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  reverseCrunch: {\n    id: \"reverseCrunch\",\n    name: \"Reverse Crunch\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  reverseCurl: {\n    id: \"reverseCurl\",\n    name: \"Reverse Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 15, unit: \"lb\" },\n    startingWeightKg: { value: 5, unit: \"kg\" },\n  },\n  reverseFly: {\n    id: \"reverseFly\",\n    name: \"Reverse Fly\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 15, unit: \"lb\" },\n    startingWeightKg: { value: 5, unit: \"kg\" },\n  },\n  reverseGripConcentrationCurl: {\n    id: \"reverseGripConcentrationCurl\",\n    name: \"Reverse Grip Concentration Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  reversePlank: {\n    id: \"reversePlank\",\n    name: \"Reverse Plank\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  reverseLatPulldown: {\n    id: \"reverseLatPulldown\",\n    name: \"Reverse Lat Pulldown\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 70, unit: \"lb\" },\n    startingWeightKg: { value: 30, unit: \"kg\" },\n  },\n  reverseLunge: {\n    id: \"reverseLunge\",\n    name: \"Reverse Lunge\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  reverseWristCurl: {\n    id: \"reverseWristCurl\",\n    name: \"Reverse Wrist Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  romanianDeadlift: {\n    id: \"romanianDeadlift\",\n    name: \"Romanian Deadlift\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 40, unit: \"lb\" },\n    startingWeightKg: { value: 17.5, unit: \"kg\" },\n  },\n  reverseHyperextension: {\n    id: \"reverseHyperextension\",\n    name: \"Reverse Hyperextension\",\n    defaultWarmup: 45,\n    defaultEquipment: \"band\",\n    types: [\"core\", \"lower\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  rowing: {\n    id: \"rowing\",\n    name: \"Rowing\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  russianTwist: {\n    id: \"russianTwist\",\n    name: \"Russian Twist\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  safetySquatBarSquat: {\n    id: \"safetySquatBarSquat\",\n    name: \"Safety Squat Bar Squat\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 145, unit: \"lb\" },\n    startingWeightKg: { value: 65, unit: \"kg\" },\n  },\n  seatedCalfRaise: {\n    id: \"seatedCalfRaise\",\n    name: \"Seated Calf Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 90, unit: \"lb\" },\n    startingWeightKg: { value: 40, unit: \"kg\" },\n  },\n  seatedFrontRaise: {\n    id: \"seatedFrontRaise\",\n    name: \"Seated Front Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 15, unit: \"lb\" },\n    startingWeightKg: { value: 5, unit: \"kg\" },\n  },\n  seatedLegCurl: {\n    id: \"seatedLegCurl\",\n    name: \"Seated Leg Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 60, unit: \"lb\" },\n    startingWeightKg: { value: 26.25, unit: \"kg\" },\n  },\n  seatedLegPress: {\n    id: \"seatedLegPress\",\n    name: \"Seated Leg Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 200, unit: \"lb\" },\n    startingWeightKg: { value: 90, unit: \"kg\" },\n  },\n  seatedOverheadPress: {\n    id: \"seatedOverheadPress\",\n    name: \"Seated Overhead Press\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 75, unit: \"lb\" },\n    startingWeightKg: { value: 32.5, unit: \"kg\" },\n  },\n  seatedPalmsUpWristCurl: {\n    id: \"seatedPalmsUpWristCurl\",\n    name: \"Seated Palms Up Wrist Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 15, unit: \"lb\" },\n    startingWeightKg: { value: 5, unit: \"kg\" },\n  },\n  seatedRow: {\n    id: \"seatedRow\",\n    name: \"Seated Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 70, unit: \"lb\" },\n    startingWeightKg: { value: 30, unit: \"kg\" },\n  },\n  seatedWideGripRow: {\n    id: \"seatedWideGripRow\",\n    name: \"Seated Wide Grip Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  shoulderPress: {\n    id: \"shoulderPress\",\n    name: \"Shoulder Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  shoulderPressParallelGrip: {\n    id: \"shoulderPressParallelGrip\",\n    name: \"Shoulder Press Parallel Grip\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  shrug: {\n    id: \"shrug\",\n    name: \"Shrug\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 45, unit: \"lb\" },\n    startingWeightKg: { value: 20, unit: \"kg\" },\n  },\n  sideBend: {\n    id: \"sideBend\",\n    name: \"Side Bend\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"core\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  sideCrunch: {\n    id: \"sideCrunch\",\n    name: \"Side Crunch\",\n    defaultWarmup: 45,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  sideHipAbductor: {\n    id: \"sideHipAbductor\",\n    name: \"Side Hip Abductor\",\n    defaultWarmup: 45,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  sideLyingClam: {\n    id: \"sideLyingClam\",\n    name: \"Side Lying Clam\",\n    defaultWarmup: 45,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  sidePlank: {\n    id: \"sidePlank\",\n    name: \"Side Plank\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  singleLegBridge: {\n    id: \"singleLegBridge\",\n    name: \"Single Leg Bridge\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  singleLegCalfRaise: {\n    id: \"singleLegCalfRaise\",\n    name: \"Single Leg Calf Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 85, unit: \"lb\" },\n    startingWeightKg: { value: 37.5, unit: \"kg\" },\n  },\n  singleLegDeadlift: {\n    id: \"singleLegDeadlift\",\n    name: \"Single Leg Deadlift\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  singleLegGluteBridgeBench: {\n    id: \"singleLegGluteBridgeBench\",\n    name: \"Single Leg Glute Bridge On Bench\",\n    defaultWarmup: 45,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  singleLegGluteBridgeStraight: {\n    id: \"singleLegGluteBridgeStraight\",\n    name: \"Single Leg Glute Bridge Straight Leg\",\n    defaultWarmup: 45,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  singleLegGluteBridgeBentKnee: {\n    id: \"singleLegGluteBridgeBentKnee\",\n    name: \"Single Leg Glute Bridge Bent Knee\",\n    defaultWarmup: 45,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  singleLegHipThrust: {\n    id: \"singleLegHipThrust\",\n    name: \"Single Leg Hip Thrust\",\n    defaultWarmup: 45,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  sissySquat: {\n    id: \"sissySquat\",\n    name: \"Sissy Squat\",\n    defaultWarmup: 45,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  sitUp: {\n    id: \"sitUp\",\n    name: \"Sit Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  skullcrusher: {\n    id: \"skullcrusher\",\n    name: \"Skullcrusher\",\n    defaultWarmup: 10,\n    defaultEquipment: \"ezbar\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 45, unit: \"lb\" },\n    startingWeightKg: { value: 20, unit: \"kg\" },\n  },\n  slingShotBenchPress: {\n    id: \"slingShotBenchPress\",\n    name: \"Sling Shot Bench Press\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 140, unit: \"lb\" },\n    startingWeightKg: { value: 62.5, unit: \"kg\" },\n  },\n  snatch: {\n    id: \"snatch\",\n    name: \"Snatch\",\n    defaultWarmup: 45,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"lower\", \"pull\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  snatchPull: {\n    id: \"snatchPull\",\n    name: \"Snatch Pull\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 85, unit: \"lb\" },\n    startingWeightKg: { value: 37.5, unit: \"kg\" },\n  },\n  splitSquat: {\n    id: \"splitSquat\",\n    name: \"Split Squat\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  splitJerk: {\n    id: \"splitJerk\",\n    name: \"Split Jerk\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"push\"],\n    startingWeightLb: { value: 95, unit: \"lb\" },\n    startingWeightKg: { value: 42.5, unit: \"kg\" },\n  },\n  squat: {\n    id: \"squat\",\n    name: \"Squat\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 135, unit: \"lb\" },\n    startingWeightKg: { value: 60, unit: \"kg\" },\n  },\n  squatRow: {\n    id: \"squatRow\",\n    name: \"Squat Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"band\",\n    types: [\"upper\", \"lower\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  standingCalfRaise: {\n    id: \"standingCalfRaise\",\n    name: \"Standing Calf Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 35, unit: \"lb\" },\n    startingWeightKg: { value: 15, unit: \"kg\" },\n  },\n  standingRow: {\n    id: \"standingRow\",\n    name: \"Standing Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 70, unit: \"lb\" },\n    startingWeightKg: { value: 30, unit: \"kg\" },\n  },\n  standingRowCloseGrip: {\n    id: \"standingRowCloseGrip\",\n    name: \"Standing Row Close Grip\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  standingRowRearDeltWithRope: {\n    id: \"standingRowRearDeltWithRope\",\n    name: \"Standing Row Rear Delt With Rope\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  standingRowRearHorizontalDeltWithRope: {\n    id: \"standingRowRearHorizontalDeltWithRope\",\n    name: \"Standing Row Rear Delt, Horizontal, With Rope\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 30, unit: \"lb\" },\n    startingWeightKg: { value: 12.5, unit: \"kg\" },\n  },\n  standingRowVBar: {\n    id: \"standingRowVBar\",\n    name: \"Standing Row V-Bar\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 70, unit: \"lb\" },\n    startingWeightKg: { value: 30, unit: \"kg\" },\n  },\n  stepUp: {\n    id: \"stepUp\",\n    name: \"Step up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  stiffLegDeadlift: {\n    id: \"stiffLegDeadlift\",\n    name: \"Stiff Leg Deadlift\",\n    defaultWarmup: 95,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 115, unit: \"lb\" },\n    startingWeightKg: { value: 50, unit: \"kg\" },\n  },\n  straightLegDeadlift: {\n    id: \"straightLegDeadlift\",\n    name: \"Straight Leg Deadlift\",\n    defaultWarmup: 10,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 110, unit: \"lb\" },\n    startingWeightKg: { value: 50, unit: \"kg\" },\n  },\n  sumoDeadlift: {\n    id: \"sumoDeadlift\",\n    name: \"Sumo Deadlift\",\n    defaultWarmup: 95,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 175, unit: \"lb\" },\n    startingWeightKg: { value: 77.5, unit: \"kg\" },\n  },\n  sumoDeadliftHighPull: {\n    id: \"sumoDeadliftHighPull\",\n    name: \"Sumo Deadlift High Pull\",\n    defaultWarmup: 95,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"pull\"],\n    startingWeightLb: { value: 85, unit: \"lb\" },\n    startingWeightKg: { value: 37.5, unit: \"kg\" },\n  },\n  superman: {\n    id: \"superman\",\n    name: \"Superman\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  tBarRow: {\n    id: \"tBarRow\",\n    name: \"T Bar Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"leverageMachine\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 90, unit: \"lb\" },\n    startingWeightKg: { value: 40, unit: \"kg\" },\n  },\n  thruster: {\n    id: \"thruster\",\n    name: \"Thruster\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"lower\", \"push\"],\n    startingWeightLb: { value: 65, unit: \"lb\" },\n    startingWeightKg: { value: 27.5, unit: \"kg\" },\n  },\n  toesToBar: {\n    id: \"toesToBar\",\n    name: \"Toes To Bar\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  torsoRotation: {\n    id: \"torsoRotation\",\n    name: \"Torso Rotation\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  trapBarDeadlift: {\n    id: \"trapBarDeadlift\",\n    name: \"Trap Bar Deadlift\",\n    defaultWarmup: 10,\n    defaultEquipment: \"trapbar\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 185, unit: \"lb\" },\n    startingWeightKg: { value: 82.5, unit: \"kg\" },\n  },\n  tricepsDip: {\n    id: \"tricepsDip\",\n    name: \"Triceps Dip\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  tricepsExtension: {\n    id: \"tricepsExtension\",\n    name: \"Triceps Extension\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  tricepsPushdown: {\n    id: \"tricepsPushdown\",\n    name: \"Triceps Pushdown\",\n    defaultWarmup: 10,\n    defaultEquipment: \"cable\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 40, unit: \"lb\" },\n    startingWeightKg: { value: 17.5, unit: \"kg\" },\n  },\n  uprightRow: {\n    id: \"uprightRow\",\n    name: \"Upright Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 7.5, unit: \"kg\" },\n  },\n  vUp: {\n    id: \"vUp\",\n    name: \"V Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  widePullUp: {\n    id: \"widePullUp\",\n    name: \"Wide Pull Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  wristCurl: {\n    id: \"wristCurl\",\n    name: \"Wrist Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"barbell\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 25, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  wristRoller: {\n    id: \"wristRoller\",\n    name: \"Wrist Roller\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  zercherSquat: {\n    id: \"zercherSquat\",\n    name: \"Zercher Squat\",\n    defaultWarmup: 45,\n    defaultEquipment: \"barbell\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 105, unit: \"lb\" },\n    startingWeightKg: { value: 47.5, unit: \"kg\" },\n  },\n  wallPushup: {\n    id: \"wallPushup\",\n    name: \"Wall Push Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  inclinePushup: {\n    id: \"inclinePushup\",\n    name: \"Incline Push Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  kneePushup: {\n    id: \"kneePushup\",\n    name: \"Knee Push Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  diamondPushup: {\n    id: \"diamondPushup\",\n    name: \"Diamond Push Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  pseudoPlanchePushup: {\n    id: \"pseudoPlanchePushup\",\n    name: \"Pseudo Planche Push Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  pikePushup: {\n    id: \"pikePushup\",\n    name: \"Pike Push Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  ringDip: {\n    id: \"ringDip\",\n    name: \"Ring Dip\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  negativeDip: {\n    id: \"negativeDip\",\n    name: \"Negative Dip\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  verticalRow: {\n    id: \"verticalRow\",\n    name: \"Vertical Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  wideRow: {\n    id: \"wideRow\",\n    name: \"Wide Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  ringRow: {\n    id: \"ringRow\",\n    name: \"Ring Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  tuckFrontLeverRow: {\n    id: \"tuckFrontLeverRow\",\n    name: \"Tuck Front Lever Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  frontLeverRow: {\n    id: \"frontLeverRow\",\n    name: \"Front Lever Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  scapularPullUp: {\n    id: \"scapularPullUp\",\n    name: \"Scapular Pull Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  deadHang: {\n    id: \"deadHang\",\n    name: \"Dead Hang\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  negativePullup: {\n    id: \"negativePullup\",\n    name: \"Negative Pull Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  assistedSquat: {\n    id: \"assistedSquat\",\n    name: \"Assisted Squat\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  shrimpSquat: {\n    id: \"shrimpSquat\",\n    name: \"Shrimp Squat\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  nordicCurl: {\n    id: \"nordicCurl\",\n    name: \"Nordic Curl\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"lower\", \"legs\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  handstand: {\n    id: \"handstand\",\n    name: \"Handstand\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  wallHandstand: {\n    id: \"wallHandstand\",\n    name: \"Wall Handstand\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  crowPose: {\n    id: \"crowPose\",\n    name: \"Crow Pose\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  dragonFlag: {\n    id: \"dragonFlag\",\n    name: \"Dragon Flag\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  copenhagenPlank: {\n    id: \"copenhagenPlank\",\n    name: \"Copenhagen Plank\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  hangingKneeRaise: {\n    id: \"hangingKneeRaise\",\n    name: \"Hanging Knee Raise\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  archHang: {\n    id: \"archHang\",\n    name: \"Arch Hang\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  supportHold: {\n    id: \"supportHold\",\n    name: \"Support Hold\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"push\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  pallofPress: {\n    id: \"pallofPress\",\n    name: \"Pallof Press\",\n    defaultWarmup: 10,\n    defaultEquipment: \"band\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  renegadeRow: {\n    id: \"renegadeRow\",\n    name: \"Renegade Row\",\n    defaultWarmup: 10,\n    defaultEquipment: \"dumbbell\",\n    types: [\"upper\", \"pull\", \"core\"],\n    startingWeightLb: { value: 20, unit: \"lb\" },\n    startingWeightKg: { value: 10, unit: \"kg\" },\n  },\n  ringAbRollout: {\n    id: \"ringAbRollout\",\n    name: \"Ring Ab Rollout\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  kneelingRingAbRollout: {\n    id: \"kneelingRingAbRollout\",\n    name: \"Kneeling Ring Ab Rollout\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  archerPullUp: {\n    id: \"archerPullUp\",\n    name: \"Archer Pull Up\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  skinTheCat: {\n    id: \"skinTheCat\",\n    name: \"Skin the Cat\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"upper\", \"pull\", \"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  hollowBodyHold: {\n    id: \"hollowBodyHold\",\n    name: \"Hollow Body Hold\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  deadBug: {\n    id: \"deadBug\",\n    name: \"Dead Bug\",\n    defaultWarmup: 10,\n    defaultEquipment: \"bodyweight\",\n    types: [\"core\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n  shoulderPassThrough: {\n    id: \"shoulderPassThrough\",\n    name: \"Shoulder Pass Through\",\n    defaultWarmup: 10,\n    defaultEquipment: \"band\",\n    types: [\"upper\"],\n    startingWeightLb: { value: 0, unit: \"lb\" },\n    startingWeightKg: { value: 0, unit: \"kg\" },\n  },\n};\n\nconst nameToIdMapping = ObjectUtils_keys(allExercisesList).reduce<Partial<Record<string, IExerciseId>>>(\n  (acc, key) => {\n    acc[allExercisesList[key].name.toLowerCase()] = allExercisesList[key].id;\n    return acc;\n  },\n  // Null-prototype so arbitrary exercise names (e.g. \"constructor\", \"__proto__\") can't resolve to inherited props.\n  Object.create(null) as Partial<Record<string, IExerciseId>>\n);\n\nexport const metadata: Record<IExerciseId, IMetaExercises> = {\n  abWheel: {\n    targetMuscles: [\"Iliopsoas\"],\n    synergistMuscles: [\n      \"Adductor Brevis\",\n      \"Adductor Longus\",\n      \"Deltoid Posterior\",\n      \"Latissimus Dorsi\",\n      \"Pectineous\",\n      \"Pectoralis Major Sternal Head\",\n      \"Sartorius\",\n      \"Serratus Anterior\",\n      \"Tensor Fasciae Latae\",\n      \"Teres Major\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  arnoldPress: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Serratus Anterior\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"dumbbell\", \"kettlebell\"],\n  },\n  aroundTheWorld: {\n    targetMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Lateral\", \"Deltoid Posterior\", \"Latissimus Dorsi\", \"Serratus Anterior\"],\n    bodyParts: [\"Chest\", \"Shoulders\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  backExtension: {\n    targetMuscles: [\"Erector Spinae\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Hamstrings\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"bodyweight\", \"leverageMachine\"],\n  },\n  ballSlams: {\n    targetMuscles: [\n      \"Infraspinatus\",\n      \"Latissimus Dorsi\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Rectus Abdominis\"],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"medicineball\"],\n  },\n  battleRopes: {\n    targetMuscles: [\"Deltoid Posterior\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Lateral\",\n      \"Infraspinatus\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  behindTheNeckPress: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Serratus Anterior\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  benchDip: {\n    targetMuscles: [\"Triceps Brachii\"],\n    synergistMuscles: [\n      \"Deltoid Anterior\",\n      \"Latissimus Dorsi\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Pectoralis Major Sternal Head\",\n      \"Serratus Anterior\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  benchPress: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"smith\", \"band\", \"kettlebell\"],\n  },\n  benchPressCloseGrip: {\n    targetMuscles: [\"Triceps Brachii\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Pectoralis Major Sternal Head\"],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"barbell\", \"ezbar\", \"smith\"],\n  },\n  benchPressWideGrip: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"barbell\", \"smith\"],\n  },\n  bentOverOneArmRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Infraspinatus\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Pectoralis Major Sternal Head\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  bentOverRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Teres Minor\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"band\", \"leverageMachine\", \"smith\"],\n  },\n  bicepCurl: {\n    targetMuscles: [\"Biceps Brachii\"],\n    synergistMuscles: [\"Brachialis\", \"Brachioradialis\"],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"band\", \"leverageMachine\", \"cable\", \"ezbar\"],\n  },\n  bicycleCrunch: {\n    targetMuscles: [\"Obliques\", \"Rectus Abdominis\"],\n    synergistMuscles: [\"Gluteus Maximus\", \"Iliopsoas\", \"Quadriceps\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  boxJump: {\n    targetMuscles: [\"Quadriceps\", \"Gluteus Maximus\", \"Gastrocnemius\", \"Soleus\"],\n    synergistMuscles: [\"Hamstrings\", \"Adductor Magnus\", \"Erector Spinae\", \"Rectus Abdominis\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  boxSquat: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Quadriceps\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\"],\n  },\n  bulgarianSplitSquat: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Hips\", \"Thighs\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  burpee: {\n    targetMuscles: [\n      \"Quadriceps\",\n      \"Gluteus Maximus\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Pectoralis Major Sternal Head\",\n      \"Triceps Brachii\",\n      \"Deltoid Anterior\",\n      \"Deltoid Lateral\",\n      \"Deltoid Posterior\",\n      \"Rectus Abdominis\",\n    ],\n    synergistMuscles: [\n      \"Hamstrings\",\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Latissimus Dorsi\",\n      \"Obliques\",\n      \"Erector Spinae\",\n      \"Obliques\",\n      \"Soleus\",\n      \"Gastrocnemius\",\n      \"Tibialis Anterior\",\n    ],\n    bodyParts: [\"Chest\", \"Shoulders\", \"Upper Arms\", \"Waist\", \"Thighs\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  cableCrossover: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Latissimus Dorsi\", \"Levator Scapulae\", \"Pectoralis Major Clavicular Head\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"cable\"],\n  },\n  cableCrunch: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Obliques\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"cable\"],\n  },\n  cableKickback: {\n    targetMuscles: [\"Triceps Brachii\"],\n    synergistMuscles: [],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"cable\"],\n  },\n  cablePullThrough: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Hamstrings\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"cable\"],\n  },\n  cableTwist: {\n    targetMuscles: [\"Obliques\"],\n    synergistMuscles: [\n      \"Adductor Brevis\",\n      \"Adductor Longus\",\n      \"Adductor Magnus\",\n      \"Erector Spinae\",\n      \"Gluteus Medius\",\n      \"Iliopsoas\",\n      \"Tensor Fasciae Latae\",\n    ],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"barbell\", \"bodyweight\", \"cable\", \"leverageMachine\", \"band\"],\n  },\n  calfPressOnLegPress: {\n    targetMuscles: [\"Gastrocnemius\"],\n    synergistMuscles: [\"Soleus\"],\n    bodyParts: [\"Calves\"],\n    sortedEquipment: [\"leverageMachine\"],\n  },\n  calfPressOnSeatedLegPress: {\n    targetMuscles: [\"Gastrocnemius\"],\n    synergistMuscles: [\"Soleus\"],\n    bodyParts: [\"Calves\"],\n    sortedEquipment: [\"leverageMachine\"],\n  },\n  chestDip: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\n      \"Deltoid Anterior\",\n      \"Latissimus Dorsi\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Teres Major\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  chestFly: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Biceps Brachii\", \"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"leverageMachine\"],\n  },\n  chestPress: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"leverageMachine\", \"band\"],\n  },\n  chestSupportedRow: {\n    targetMuscles: [\"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Latissimus Dorsi\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Teres Minor\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\"],\n  },\n  chinUp: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"leverageMachine\", \"bodyweight\"],\n  },\n  clean: {\n    targetMuscles: [\n      \"Gluteus Maximus\",\n      \"Hamstrings\",\n      \"Quadriceps\",\n      \"Latissimus Dorsi\",\n      \"Trapezius Lower Fibers\",\n      \"Deltoid Anterior\",\n      \"Deltoid Lateral\",\n    ],\n    synergistMuscles: [\n      \"Adductor Magnus\",\n      \"Gastrocnemius\",\n      \"Soleus\",\n      \"Erector Spinae\",\n      \"Biceps Brachii\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Pectoralis Major Sternal Head\",\n      \"Wrist Flexors\",\n    ],\n    bodyParts: [\"Hips\", \"Thighs\", \"Back\", \"Shoulders\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  cleanandJerk: {\n    targetMuscles: [\n      \"Gluteus Maximus\",\n      \"Hamstrings\",\n      \"Quadriceps\",\n      \"Latissimus Dorsi\",\n      \"Trapezius Lower Fibers\",\n      \"Deltoid Anterior\",\n      \"Deltoid Lateral\",\n    ],\n    synergistMuscles: [\n      \"Adductor Magnus\",\n      \"Gastrocnemius\",\n      \"Soleus\",\n      \"Erector Spinae\",\n      \"Biceps Brachii\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Pectoralis Major Sternal Head\",\n      \"Wrist Flexors\",\n    ],\n    bodyParts: [\"Hips\", \"Thighs\", \"Back\", \"Shoulders\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  concentrationCurl: {\n    targetMuscles: [\"Brachialis\"],\n    synergistMuscles: [\"Biceps Brachii\", \"Brachioradialis\"],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"band\", \"cable\"],\n  },\n  crossBodyCrunch: {\n    targetMuscles: [\"Obliques\"],\n    synergistMuscles: [\"Iliopsoas\", \"Rectus Abdominis\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  crunch: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Obliques\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"cable\", \"bodyweight\", \"leverageMachine\"],\n  },\n  cycling: {\n    targetMuscles: [\"Quadriceps\", \"Hamstrings\", \"Gluteus Maximus\", \"Gastrocnemius\", \"Soleus\", \"Tibialis Anterior\"],\n    synergistMuscles: [\n      \"Adductor Magnus\",\n      \"Adductor Longus\",\n      \"Adductor Brevis\",\n      \"Iliopsoas\",\n      \"Erector Spinae\",\n      \"Rectus Abdominis\",\n      \"Obliques\",\n    ],\n    bodyParts: [\"Hips\", \"Thighs\", \"Calves\", \"Shins\", \"Back\", \"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  deadlift: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Hamstrings\", \"Quadriceps\", \"Soleus\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"leverageMachine\", \"smith\", \"band\", \"kettlebell\", \"bodyweight\"],\n  },\n  deadliftHighPull: {\n    targetMuscles: [\"Deltoid Lateral\", \"Gluteus Maximus\", \"Quadriceps\"],\n    synergistMuscles: [\n      \"Adductor Magnus\",\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Anterior\",\n      \"Gastrocnemius\",\n      \"Infraspinatus\",\n      \"Soleus\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  declineBenchPress: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"dumbbell\", \"smith\"],\n  },\n  declineCrunch: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Obliques\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  deficitDeadlift: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Erector Spinae\", \"Hamstrings\", \"Quadriceps\", \"Soleus\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\", \"trapbar\"],\n  },\n  ellipticalMachine: {\n    targetMuscles: [],\n    synergistMuscles: [\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Anterior\",\n      \"Deltoid Lateral\",\n      \"Deltoid Posterior\",\n      \"Gluteus Maximus\",\n      \"Hamstrings\",\n      \"Latissimus Dorsi\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Pectoralis Major Sternal Head\",\n      \"Quadriceps\",\n      \"Serratus Anterior\",\n    ],\n    bodyParts: [\"Hips\", \"Thighs\", \"Back\", \"Shoulders\"],\n    sortedEquipment: [\"leverageMachine\"],\n  },\n  facePull: {\n    targetMuscles: [\"Deltoid Posterior\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Lateral\",\n      \"Infraspinatus\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"band\"],\n  },\n  flatKneeRaise: {\n    targetMuscles: [\"Iliopsoas\"],\n    synergistMuscles: [\"Adductor Brevis\", \"Adductor Longus\", \"Pectineous\", \"Sartorius\", \"Tensor Fasciae Latae\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  flatLegRaise: {\n    targetMuscles: [\"Iliopsoas\"],\n    synergistMuscles: [\n      \"Adductor Brevis\",\n      \"Adductor Longus\",\n      \"Pectineous\",\n      \"Quadriceps\",\n      \"Sartorius\",\n      \"Tensor Fasciae Latae\",\n    ],\n    bodyParts: [\"Hips\", \"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  frontRaise: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"bodyweight\", \"band\"],\n  },\n  gluteBridge: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Quadriceps\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"band\", \"barbell\", \"dumbbell\"],\n  },\n  gluteBridgeMarch: {\n    targetMuscles: [\"Gluteus Maximus\", \"Rectus Abdominis\"],\n    synergistMuscles: [\"Hamstrings\", \"Quadriceps\", \"Sartorius\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  gluteKickback: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\"],\n    bodyParts: [\"Glute\"],\n    sortedEquipment: [\"leverageMachine\", \"bodyweight\", \"cable\", \"band\"],\n  },\n  frontSquat: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\", \"kettlebell\", \"dumbbell\", \"cable\", \"smith\"],\n  },\n  gobletSquat: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Quadriceps\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"kettlebell\", \"dumbbell\"],\n  },\n  goodMorning: {\n    targetMuscles: [\"Hamstrings\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\", \"smith\", \"leverageMachine\"],\n  },\n  hackSquat: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\", \"smith\"],\n  },\n  hammerCurl: {\n    targetMuscles: [\"Brachioradialis\"],\n    synergistMuscles: [\"Biceps Brachii\", \"Brachialis\"],\n    bodyParts: [\"Forearms\"],\n    sortedEquipment: [\"cable\", \"dumbbell\", \"band\"],\n  },\n  handstandPushUp: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  hangClean: {\n    targetMuscles: [\"Biceps Brachii\", \"Brachialis\", \"Brachioradialis\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\"],\n    bodyParts: [\"Forearms\"],\n    sortedEquipment: [\"kettlebell\"],\n  },\n  hangSnatch: {\n    targetMuscles: [\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Trapezius Upper Fibers\",\n      \"Quadriceps\",\n      \"Gluteus Maximus\",\n    ],\n    synergistMuscles: [\n      \"Hamstrings\",\n      \"Erector Spinae\",\n      \"Deltoid Anterior\",\n      \"Deltoid Lateral\",\n      \"Deltoid Posterior\",\n      \"Latissimus Dorsi\",\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Gastrocnemius\",\n      \"Soleus\",\n      \"Obliques\",\n      \"Rectus Abdominis\",\n    ],\n    bodyParts: [\"Thighs\", \"Back\", \"Shoulders\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  hangingLegRaise: {\n    targetMuscles: [\"Iliopsoas\"],\n    synergistMuscles: [\"Adductor Brevis\", \"Adductor Longus\", \"Pectineous\", \"Sartorius\", \"Tensor Fasciae Latae\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\", \"cable\"],\n  },\n  highKneeSkips: {\n    targetMuscles: [\"Quadriceps\", \"Hamstrings\", \"Gluteus Maximus\"],\n    synergistMuscles: [\n      \"Iliopsoas\",\n      \"Gastrocnemius\",\n      \"Soleus\",\n      \"Tibialis Anterior\",\n      \"Rectus Abdominis\",\n      \"Obliques\",\n      \"Adductor Magnus\",\n      \"Adductor Brevis\",\n      \"Adductor Longus\",\n    ],\n    bodyParts: [\"Thighs\", \"Hips\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  highRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Erector Spinae\",\n      \"Infraspinatus\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Teres Minor\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"leverageMachine\"],\n  },\n  hipAbductor: {\n    targetMuscles: [\"Gluteus Maximus\", \"Gluteus Medius\"],\n    synergistMuscles: [\"Tensor Fasciae Latae\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"leverageMachine\", \"bodyweight\", \"cable\", \"band\"],\n  },\n  hipAdductor: {\n    targetMuscles: [\"Adductor Brevis\", \"Adductor Longus\", \"Adductor Magnus\"],\n    synergistMuscles: [\"Pectineous\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"leverageMachine\", \"cable\", \"band\", \"bodyweight\"],\n  },\n  hipThrust: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Quadriceps\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\", \"leverageMachine\", \"band\", \"bodyweight\"],\n  },\n  inclineBenchPress: {\n    targetMuscles: [\"Pectoralis Major Clavicular Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Sternal Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"smith\"],\n  },\n  inclineBenchPressWideGrip: {\n    targetMuscles: [\"Pectoralis Major Clavicular Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Sternal Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  inclineChestFly: {\n    targetMuscles: [\"Pectoralis Major Clavicular Head\"],\n    synergistMuscles: [\"Biceps Brachii\", \"Deltoid Anterior\", \"Pectoralis Major Sternal Head\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"cable\", \"dumbbell\"],\n  },\n  inclineChestPress: {\n    targetMuscles: [\"Pectoralis Major Clavicular Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Sternal Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"leverageMachine\", \"band\", \"dumbbell\"],\n  },\n  inclineCurl: {\n    targetMuscles: [\"Biceps Brachii\"],\n    synergistMuscles: [\"Brachialis\", \"Brachioradialis\"],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  inclineRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Teres Minor\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"barbell\", \"bodyweight\", \"dumbbell\"],\n  },\n  invertedRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Infraspinatus\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Pectoralis Major Sternal Head\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  isoLateralChestPress: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  isoLateralRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Teres Minor\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  jackknifeSitUp: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Iliopsoas\", \"Obliques\", \"Quadriceps\", \"Sartorius\", \"Tensor Fasciae Latae\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  jumpRope: {\n    targetMuscles: [\"Soleus\", \"Gastrocnemius\", \"Quadriceps\", \"Hamstrings\"],\n    synergistMuscles: [\"Gluteus Maximus\", \"Rectus Abdominis\", \"Obliques\", \"Tibialis Anterior\"],\n    bodyParts: [\"Thighs\", \"Calves\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  jumpSquat: {\n    targetMuscles: [\"Gluteus Maximus\", \"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gastrocnemius\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\", \"bodyweight\"],\n  },\n  jumpingJack: {\n    targetMuscles: [\n      \"Gluteus Maximus\",\n      \"Quadriceps\",\n      \"Adductor Brevis\",\n      \"Adductor Longus\",\n      \"Adductor Magnus\",\n      \"Deltoid Anterior\",\n      \"Deltoid Lateral\",\n      \"Deltoid Posterior\",\n    ],\n    synergistMuscles: [\n      \"Gastrocnemius\",\n      \"Soleus\",\n      \"Hamstrings\",\n      \"Rectus Abdominis\",\n      \"Obliques\",\n      \"Trapezius Upper Fibers\",\n      \"Serratus Anterior\",\n    ],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  kettlebellSwing: {\n    targetMuscles: [\"Deltoid Anterior\", \"Gluteus Maximus\"],\n    synergistMuscles: [\n      \"Adductor Magnus\",\n      \"Hamstrings\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Soleus\",\n    ],\n    bodyParts: [\"Hips\", \"Shoulders\"],\n    sortedEquipment: [\"dumbbell\", \"kettlebell\"],\n  },\n  kettlebellTurkishGetUp: {\n    targetMuscles: [\"Deltoid Anterior\", \"Deltoid Lateral\", \"Deltoid Posterior\", \"Quadriceps\", \"Gluteus Maximus\"],\n    synergistMuscles: [\n      \"Obliques\",\n      \"Rectus Abdominis\",\n      \"Latissimus Dorsi\",\n      \"Hamstrings\",\n      \"Adductor Brevis\",\n      \"Adductor Longus\",\n      \"Adductor Magnus\",\n      \"Triceps Brachii\",\n      \"Erector Spinae\",\n      \"Serratus Anterior\",\n    ],\n    bodyParts: [\"Hips\", \"Shoulders\"],\n    sortedEquipment: [\"kettlebell\"],\n  },\n  kippingPullUp: {\n    targetMuscles: [\n      \"Latissimus Dorsi\",\n      \"Brachialis\",\n      \"Biceps Brachii\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    synergistMuscles: [\n      \"Deltoid Posterior\",\n      \"Brachioradialis\",\n      \"Pectoralis Major Sternal Head\",\n      \"Rectus Abdominis\",\n      \"Obliques\",\n      \"Iliopsoas\",\n      \"Tensor Fasciae Latae\",\n      \"Adductor Longus\",\n      \"Adductor Brevis\",\n      \"Erector Spinae\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  kneeRaise: {\n    targetMuscles: [\"Iliopsoas\"],\n    synergistMuscles: [\"Adductor Brevis\", \"Adductor Longus\", \"Pectineous\", \"Sartorius\", \"Tensor Fasciae Latae\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  kneelingPulldown: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Sternal Head\",\n      \"Serratus Anterior\",\n      \"Teres Major\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"band\"],\n  },\n  kneestoElbows: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\n      \"Adductor Brevis\",\n      \"Adductor Longus\",\n      \"Iliopsoas\",\n      \"Obliques\",\n      \"Pectineous\",\n      \"Sartorius\",\n      \"Tensor Fasciae Latae\",\n    ],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  latPulldown: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Levator Scapulae\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"cable\"],\n  },\n  lateralBoxJump: {\n    targetMuscles: [\"Gluteus Maximus\", \"Quadriceps\", \"Hamstrings\"],\n    synergistMuscles: [\n      \"Adductor Brevis\",\n      \"Adductor Longus\",\n      \"Adductor Magnus\",\n      \"Gluteus Medius\",\n      \"Tensor Fasciae Latae\",\n      \"Rectus Abdominis\",\n      \"Obliques\",\n      \"Deltoid Anterior\",\n      \"Deltoid Posterior\",\n      \"Deltoid Lateral\",\n    ],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  lateralRaise: {\n    targetMuscles: [\"Deltoid Lateral\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Serratus Anterior\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"cable\", \"dumbbell\", \"leverageMachine\", \"band\", \"kettlebell\"],\n  },\n  legsUpBenchPress: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  legCurl: {\n    targetMuscles: [\"Hamstrings\"],\n    synergistMuscles: [\"Gastrocnemius\", \"Sartorius\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"leverageMachine\"],\n  },\n  legExtension: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"leverageMachine\", \"band\"],\n  },\n  legPress: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"smith\", \"leverageMachine\"],\n  },\n  lunge: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"bodyweight\", \"cable\"],\n  },\n  lyingBicepCurl: {\n    targetMuscles: [\"Biceps Brachii\"],\n    synergistMuscles: [\"Brachialis\", \"Brachioradialis\"],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"band\", \"leverageMachine\", \"cable\", \"ezbar\"],\n  },\n  lyingLegCurl: {\n    targetMuscles: [\"Hamstrings\"],\n    synergistMuscles: [\"Gastrocnemius\", \"Sartorius\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"leverageMachine\", \"band\"],\n  },\n  mountainClimber: {\n    targetMuscles: [\"Iliopsoas\"],\n    synergistMuscles: [\"Adductor Brevis\", \"Adductor Longus\", \"Pectineous\", \"Sartorius\", \"Tensor Fasciae Latae\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  muscleUp: {\n    targetMuscles: [\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Latissimus Dorsi\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    synergistMuscles: [],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  obliqueCrunch: {\n    targetMuscles: [\"Obliques\"],\n    synergistMuscles: [\"Rectus Abdominis\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  overheadPress: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"ezbar\"],\n  },\n  overheadSquat: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\"],\n  },\n  pecDeck: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Pectoralis Major Clavicular Head\", \"Serratus Anterior\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"leverageMachine\"],\n  },\n  pendlayRow: {\n    targetMuscles: [\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Latissimus Dorsi\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    synergistMuscles: [\"Brachialis\", \"Brachioradialis\", \"Pectoralis Major Sternal Head\"],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  pistolSquat: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Quadriceps\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"kettlebell\", \"leverageMachine\", \"bodyweight\"],\n  },\n  plank: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  powerClean: {\n    targetMuscles: [\"Quadriceps\", \"Gluteus Maximus\", \"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Hamstrings\",\n      \"Gastrocnemius\",\n      \"Soleus\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Trapezius Upper Fibers\",\n      \"Latissimus Dorsi\",\n      \"Erector Spinae\",\n      \"Biceps Brachii\",\n      \"Wrist Flexors\",\n      \"Rectus Abdominis\",\n      \"Obliques\",\n    ],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  powerSnatch: {\n    targetMuscles: [\"Quadriceps\", \"Gluteus Maximus\", \"Deltoid Anterior\", \"Deltoid Lateral\", \"Deltoid Posterior\"],\n    synergistMuscles: [\n      \"Hamstrings\",\n      \"Gastrocnemius\",\n      \"Soleus\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Trapezius Upper Fibers\",\n      \"Latissimus Dorsi\",\n      \"Erector Spinae\",\n      \"Biceps Brachii\",\n      \"Wrist Flexors\",\n      \"Rectus Abdominis\",\n      \"Obliques\",\n    ],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  preacherCurl: {\n    targetMuscles: [\"Brachialis\"],\n    synergistMuscles: [\"Biceps Brachii\", \"Brachioradialis\"],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"ezbar\", \"leverageMachine\"],\n  },\n  pressUnder: {\n    targetMuscles: [\"Quadriceps\", \"Deltoid Anterior\", \"Deltoid Lateral\", \"Deltoid Posterior\"],\n    synergistMuscles: [\n      \"Gluteus Maximus\",\n      \"Hamstrings\",\n      \"Erector Spinae\",\n      \"Rectus Abdominis\",\n      \"Obliques\",\n      \"Triceps Brachii\",\n      \"Biceps Brachii\",\n    ],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  pullUp: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Levator Scapulae\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"leverageMachine\", \"bodyweight\", \"band\"],\n  },\n  pullover: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Deltoid Posterior\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Sternal Head\",\n      \"Serratus Anterior\",\n      \"Teres Major\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\"],\n  },\n  pushPress: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Deltoid Lateral\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"bodyweight\", \"kettlebell\"],\n  },\n  pushUp: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"bodyweight\", \"band\"],\n  },\n  reverseCrunch: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Iliopsoas\", \"Obliques\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\", \"cable\"],\n  },\n  reverseCurl: {\n    targetMuscles: [\"Brachioradialis\"],\n    synergistMuscles: [\"Biceps Brachii\", \"Brachialis\"],\n    bodyParts: [\"Forearms\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"band\"],\n  },\n  reverseFly: {\n    targetMuscles: [\"Deltoid Posterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Infraspinatus\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"dumbbell\", \"leverageMachine\", \"band\"],\n  },\n  reverseGripConcentrationCurl: {\n    targetMuscles: [\"Brachialis\", \"Brachioradialis\"],\n    synergistMuscles: [\"Biceps Brachii\", \"Wrist Flexors\"],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  reverseLatPulldown: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"cable\"],\n  },\n  reverseLunge: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Soleus\", \"Gluteus Maximus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"bodyweight\", \"cable\"],\n  },\n  reverseWristCurl: {\n    targetMuscles: [\"Wrist Extensors\"],\n    synergistMuscles: [],\n    bodyParts: [\"Forearms\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  reversePlank: {\n    targetMuscles: [\"Gluteus Maximus\", \"Rectus Abdominis\", \"Erector Spinae\"],\n    synergistMuscles: [\n      \"Hamstrings\",\n      \"Quadriceps\",\n      \"Deltoid Anterior\",\n      \"Deltoid Lateral\",\n      \"Deltoid Posterior\",\n      \"Triceps Brachii\",\n      \"Latissimus Dorsi\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  romanianDeadlift: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Erector Spinae\", \"Hamstrings\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\"],\n  },\n  reverseHyperextension: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Hamstrings\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"band\", \"bodyweight\", \"leverageMachine\"],\n  },\n  rowing: {\n    targetMuscles: [\"Quadriceps\", \"Latissimus Dorsi\", \"Erector Spinae\"],\n    synergistMuscles: [\n      \"Hamstrings\",\n      \"Gluteus Maximus\",\n      \"Biceps Brachii\",\n      \"Deltoid Anterior\",\n      \"Deltoid Lateral\",\n      \"Deltoid Posterior\",\n      \"Wrist Flexors\",\n      \"Rectus Abdominis\",\n      \"Obliques\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"cable\"],\n  },\n  russianTwist: {\n    targetMuscles: [\"Obliques\"],\n    synergistMuscles: [\"Erector Spinae\", \"Iliopsoas\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\", \"dumbbell\", \"cable\"],\n  },\n  safetySquatBarSquat: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Quadriceps\", \"Soleus\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  seatedCalfRaise: {\n    targetMuscles: [\"Soleus\"],\n    synergistMuscles: [\"Gastrocnemius\"],\n    bodyParts: [\"Calves\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"leverageMachine\"],\n  },\n  seatedFrontRaise: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\"],\n  },\n  seatedLegCurl: {\n    targetMuscles: [\"Hamstrings\"],\n    synergistMuscles: [\"Gastrocnemius\", \"Sartorius\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"leverageMachine\"],\n  },\n  seatedLegPress: {\n    targetMuscles: [\"Gluteus Maximus\", \"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Soleus\"],\n    bodyParts: [\"Hips\", \"Thighs\"],\n    sortedEquipment: [\"leverageMachine\"],\n  },\n  seatedOverheadPress: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  seatedPalmsUpWristCurl: {\n    targetMuscles: [\"Wrist Flexors\"],\n    synergistMuscles: [],\n    bodyParts: [\"Forearms\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  seatedRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Erector Spinae\",\n      \"Infraspinatus\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Teres Minor\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"cable\", \"band\", \"leverageMachine\"],\n  },\n  seatedWideGripRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Erector Spinae\",\n      \"Infraspinatus\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Teres Minor\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"cable\"],\n  },\n  shoulderPress: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"cable\", \"dumbbell\", \"leverageMachine\", \"band\", \"smith\"],\n  },\n  shoulderPressParallelGrip: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  shrug: {\n    targetMuscles: [\"Trapezius Upper Fibers\"],\n    synergistMuscles: [\"Levator Scapulae\", \"Trapezius Middle Fibers\"],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"leverageMachine\", \"band\", \"smith\"],\n  },\n  sideBend: {\n    targetMuscles: [\"Obliques\"],\n    synergistMuscles: [\"Erector Spinae\", \"Iliopsoas\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"cable\", \"dumbbell\", \"band\"],\n  },\n  sideCrunch: {\n    targetMuscles: [\"Obliques\"],\n    synergistMuscles: [\"Rectus Abdominis\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\", \"band\", \"cable\"],\n  },\n  sideHipAbductor: {\n    targetMuscles: [\"Gluteus Medius\", \"Tensor Fasciae Latae\"],\n    synergistMuscles: [],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"bodyweight\", \"barbell\", \"leverageMachine\"],\n  },\n  sideLyingClam: {\n    targetMuscles: [\"Gluteus Medius\"],\n    synergistMuscles: [\"Tensor Fasciae Latae\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  sidePlank: {\n    targetMuscles: [\"Obliques\"],\n    synergistMuscles: [],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  singleLegBridge: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Hamstrings\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  singleLegCalfRaise: {\n    targetMuscles: [\"Gastrocnemius\"],\n    synergistMuscles: [\"Soleus\"],\n    bodyParts: [\"Calves\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"leverageMachine\", \"bodyweight\", \"cable\"],\n  },\n  singleLegDeadlift: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Hamstrings\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"dumbbell\", \"bodyweight\"],\n  },\n  singleLegGluteBridgeBench: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  singleLegGluteBridgeStraight: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  singleLegGluteBridgeBentKnee: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  singleLegHipThrust: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Quadriceps\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\", \"bodyweight\", \"leverageMachine\"],\n  },\n  sissySquat: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  sitUp: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Iliopsoas\", \"Obliques\", \"Quadriceps\", \"Sartorius\", \"Tensor Fasciae Latae\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\", \"kettlebell\"],\n  },\n  slingShotBenchPress: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  skullcrusher: {\n    targetMuscles: [\"Triceps Brachii\"],\n    synergistMuscles: [],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"ezbar\"],\n  },\n  snatch: {\n    targetMuscles: [\"Deltoid Anterior\", \"Erector Spinae\", \"Gluteus Maximus\", \"Quadriceps\"],\n    synergistMuscles: [\n      \"Adductor Magnus\",\n      \"Deltoid Lateral\",\n      \"Gastrocnemius\",\n      \"Serratus Anterior\",\n      \"Soleus\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Hips\", \"Shoulders\", \"Thighs\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  snatchPull: {\n    targetMuscles: [\n      \"Erector Spinae\",\n      \"Gluteus Maximus\",\n      \"Hamstrings\",\n      \"Quadriceps\",\n      \"Latissimus Dorsi\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Trapezius Upper Fibers\",\n    ],\n    synergistMuscles: [\n      \"Adductor Magnus\",\n      \"Deltoid Anterior\",\n      \"Deltoid Posterior\",\n      \"Deltoid Lateral\",\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Triceps Brachii\",\n      \"Wrist Flexors\",\n      \"Wrist Extensors\",\n    ],\n    bodyParts: [\"Back\", \"Hips\", \"Thighs\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  splitSquat: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Hips\", \"Thighs\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  splitJerk: {\n    targetMuscles: [\n      \"Deltoid Anterior\",\n      \"Deltoid Posterior\",\n      \"Deltoid Lateral\",\n      \"Triceps Brachii\",\n      \"Quadriceps\",\n      \"Gluteus Maximus\",\n      \"Erector Spinae\",\n    ],\n    synergistMuscles: [\n      \"Pectoralis Major Sternal Head\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Latissimus Dorsi\",\n      \"Hamstrings\",\n      \"Obliques\",\n      \"Rectus Abdominis\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Trapezius Upper Fibers\",\n      \"Adductor Magnus\",\n      \"Tensor Fasciae Latae\",\n      \"Wrist Extensors\",\n      \"Wrist Flexors\",\n    ],\n    bodyParts: [\"Hips\", \"Shoulders\", \"Thighs\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  squat: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"bodyweight\", \"smith\", \"leverageMachine\"],\n  },\n  squatRow: {\n    targetMuscles: [\"Gluteus Maximus\", \"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Infraspinatus\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Adductor Magnus\",\n      \"Deltoid Posterior\",\n      \"Pectoralis Major Sternal Head\",\n      \"Quadriceps\",\n      \"Soleus\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"band\"],\n  },\n  standingCalfRaise: {\n    targetMuscles: [\"Gastrocnemius\"],\n    synergistMuscles: [\"Soleus\"],\n    bodyParts: [\"Calves\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"leverageMachine\", \"bodyweight\", \"cable\"],\n  },\n  standingRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Teres Minor\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"cable\"],\n  },\n  standingRowCloseGrip: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Upper Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Infraspinatus\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"cable\"],\n  },\n  standingRowRearDeltWithRope: {\n    targetMuscles: [\"Deltoid Posterior\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Lateral\",\n      \"Infraspinatus\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"cable\"],\n  },\n  standingRowRearHorizontalDeltWithRope: {\n    targetMuscles: [\"Deltoid Posterior\"],\n    synergistMuscles: [\"Infraspinatus\", \"Teres Minor\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"cable\"],\n  },\n  standingRowVBar: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Infraspinatus\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Pectoralis Major Sternal Head\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"cable\"],\n  },\n  stepUp: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"bodyweight\", \"band\"],\n  },\n  stiffLegDeadlift: {\n    targetMuscles: [\"Erector Spinae\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Hamstrings\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"band\"],\n  },\n  straightLegDeadlift: {\n    targetMuscles: [\"Hamstrings\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Erector Spinae\", \"Gluteus Maximus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"barbell\", \"dumbbell\", \"band\", \"kettlebell\"],\n  },\n  sumoDeadlift: {\n    targetMuscles: [\"Erector Spinae\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Quadriceps\", \"Soleus\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  sumoDeadliftHighPull: {\n    targetMuscles: [\"Deltoid Lateral\", \"Gluteus Maximus\", \"Quadriceps\"],\n    synergistMuscles: [\n      \"Adductor Magnus\",\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Anterior\",\n      \"Gastrocnemius\",\n      \"Infraspinatus\",\n      \"Soleus\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  superman: {\n    targetMuscles: [\"Erector Spinae\"],\n    synergistMuscles: [\"Gluteus Maximus\", \"Hamstrings\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\", \"dumbbell\"],\n  },\n  tBarRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Pectoralis Major Sternal Head\",\n      \"Teres Major\",\n      \"Teres Minor\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"leverageMachine\"],\n  },\n  thruster: {\n    targetMuscles: [\"Deltoid Anterior\", \"Gluteus Maximus\", \"Quadriceps\"],\n    synergistMuscles: [\n      \"Adductor Magnus\",\n      \"Deltoid Lateral\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Soleus\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Shoulders\", \"Thighs\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  toesToBar: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Iliopsoas\", \"Obliques\", \"Quadriceps\", \"Sartorius\", \"Tensor Fasciae Latae\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  torsoRotation: {\n    targetMuscles: [\"Obliques\"],\n    synergistMuscles: [\"Erector Spinae\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"cable\"],\n  },\n  trapBarDeadlift: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Quadriceps\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"trapbar\"],\n  },\n  tricepsDip: {\n    targetMuscles: [\"Triceps Brachii\"],\n    synergistMuscles: [\n      \"Deltoid Anterior\",\n      \"Latissimus Dorsi\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Pectoralis Major Sternal Head\",\n    ],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"bodyweight\", \"leverageMachine\"],\n  },\n  tricepsExtension: {\n    targetMuscles: [\"Triceps Brachii\"],\n    synergistMuscles: [],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"band\", \"dumbbell\"],\n  },\n  tricepsPushdown: {\n    targetMuscles: [\"Triceps Brachii\"],\n    synergistMuscles: [],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"cable\"],\n  },\n  uprightRow: {\n    targetMuscles: [\"Deltoid Lateral\"],\n    synergistMuscles: [\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Anterior\",\n      \"Infraspinatus\",\n      \"Serratus Anterior\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"barbell\", \"cable\", \"dumbbell\", \"band\"],\n  },\n  vUp: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Iliopsoas\", \"Obliques\", \"Pectineous\", \"Quadriceps\", \"Sartorius\", \"Tensor Fasciae Latae\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\", \"band\", \"dumbbell\"],\n  },\n  widePullUp: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Levator Scapulae\",\n      \"Serratus Anterior\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  wristCurl: {\n    targetMuscles: [\"Wrist Flexors\"],\n    synergistMuscles: [],\n    bodyParts: [\"Forearms\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  wristRoller: {\n    targetMuscles: [\"Wrist Extensors\", \"Wrist Flexors\"],\n    synergistMuscles: [],\n    bodyParts: [\"Forearms\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  zercherSquat: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Hips\"],\n    sortedEquipment: [\"barbell\"],\n  },\n  wallPushup: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  inclinePushup: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  kneePushup: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  diamondPushup: {\n    targetMuscles: [\"Triceps Brachii\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Pectoralis Major Sternal Head\"],\n    bodyParts: [\"Upper Arms\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  pseudoPlanchePushup: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\"Deltoid Anterior\", \"Pectoralis Major Clavicular Head\", \"Serratus Anterior\", \"Triceps Brachii\"],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  pikePushup: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\"Deltoid Lateral\", \"Pectoralis Major Clavicular Head\", \"Serratus Anterior\", \"Triceps Brachii\"],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  ringDip: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\n      \"Deltoid Anterior\",\n      \"Latissimus Dorsi\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Teres Major\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  negativeDip: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\n      \"Deltoid Anterior\",\n      \"Latissimus Dorsi\",\n      \"Levator Scapulae\",\n      \"Pectoralis Major Clavicular Head\",\n      \"Serratus Anterior\",\n      \"Teres Major\",\n      \"Trapezius Middle Fibers\",\n      \"Triceps Brachii\",\n    ],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  verticalRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Infraspinatus\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Pectoralis Major Sternal Head\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  wideRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  ringRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\n      \"Infraspinatus\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Pectoralis Major Sternal Head\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  tuckFrontLeverRow: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Teres Major\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Deltoid Posterior\",\n      \"Rectus Abdominis\",\n      \"Brachialis\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  frontLeverRow: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Teres Major\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Deltoid Posterior\",\n      \"Rectus Abdominis\",\n      \"Brachialis\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  scapularPullUp: {\n    targetMuscles: [\"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    synergistMuscles: [\"Latissimus Dorsi\", \"Levator Scapulae\", \"Serratus Anterior\", \"Teres Major\"],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  deadHang: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Wrist Flexors\"],\n    synergistMuscles: [\"Teres Major\", \"Trapezius Lower Fibers\", \"Trapezius Middle Fibers\"],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  negativePullup: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Infraspinatus\",\n      \"Levator Scapulae\",\n      \"Teres Major\",\n      \"Teres Minor\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  assistedSquat: {\n    targetMuscles: [\"Quadriceps\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Gluteus Maximus\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  shrimpSquat: {\n    targetMuscles: [\"Gluteus Maximus\"],\n    synergistMuscles: [\"Adductor Magnus\", \"Quadriceps\", \"Soleus\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  nordicCurl: {\n    targetMuscles: [\"Hamstrings\"],\n    synergistMuscles: [\"Gastrocnemius\", \"Gluteus Maximus\", \"Erector Spinae\"],\n    bodyParts: [\"Thighs\"],\n    sortedEquipment: [\"bodyweight\", \"band\"],\n  },\n  handstand: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Trapezius Upper Fibers\",\n      \"Triceps Brachii\",\n      \"Serratus Anterior\",\n      \"Rectus Abdominis\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  wallHandstand: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\n      \"Deltoid Lateral\",\n      \"Trapezius Upper Fibers\",\n      \"Triceps Brachii\",\n      \"Serratus Anterior\",\n      \"Rectus Abdominis\",\n    ],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  crowPose: {\n    targetMuscles: [\"Deltoid Anterior\"],\n    synergistMuscles: [\"Triceps Brachii\", \"Serratus Anterior\", \"Rectus Abdominis\", \"Wrist Flexors\"],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  dragonFlag: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Obliques\", \"Iliopsoas\", \"Erector Spinae\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  copenhagenPlank: {\n    targetMuscles: [\"Adductor Magnus\"],\n    synergistMuscles: [\"Adductor Brevis\", \"Adductor Longus\", \"Obliques\", \"Gluteus Medius\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  hangingKneeRaise: {\n    targetMuscles: [\"Iliopsoas\"],\n    synergistMuscles: [\n      \"Adductor Brevis\",\n      \"Adductor Longus\",\n      \"Pectineous\",\n      \"Rectus Abdominis\",\n      \"Sartorius\",\n      \"Tensor Fasciae Latae\",\n    ],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  archHang: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Teres Major\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Deltoid Posterior\",\n      \"Wrist Flexors\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  supportHold: {\n    targetMuscles: [\"Pectoralis Major Sternal Head\"],\n    synergistMuscles: [\n      \"Deltoid Anterior\",\n      \"Latissimus Dorsi\",\n      \"Serratus Anterior\",\n      \"Triceps Brachii\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n    ],\n    bodyParts: [\"Chest\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  pallofPress: {\n    targetMuscles: [\"Obliques\"],\n    synergistMuscles: [\"Rectus Abdominis\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"band\"],\n  },\n  renegadeRow: {\n    targetMuscles: [\"Latissimus Dorsi\", \"Obliques\"],\n    synergistMuscles: [\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Teres Major\",\n      \"Deltoid Posterior\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Rectus Abdominis\",\n    ],\n    bodyParts: [\"Back\", \"Waist\"],\n    sortedEquipment: [\"dumbbell\"],\n  },\n  ringAbRollout: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Obliques\", \"Latissimus Dorsi\", \"Serratus Anterior\", \"Deltoid Anterior\", \"Iliopsoas\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  kneelingRingAbRollout: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Obliques\", \"Latissimus Dorsi\", \"Serratus Anterior\", \"Deltoid Anterior\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  archerPullUp: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\n      \"Biceps Brachii\",\n      \"Brachialis\",\n      \"Brachioradialis\",\n      \"Deltoid Posterior\",\n      \"Teres Major\",\n      \"Trapezius Lower Fibers\",\n      \"Trapezius Middle Fibers\",\n      \"Wrist Flexors\",\n    ],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  skinTheCat: {\n    targetMuscles: [\"Latissimus Dorsi\"],\n    synergistMuscles: [\"Deltoid Posterior\", \"Teres Major\", \"Rectus Abdominis\", \"Iliopsoas\", \"Biceps Brachii\"],\n    bodyParts: [\"Back\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  hollowBodyHold: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Obliques\", \"Iliopsoas\", \"Quadriceps\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  deadBug: {\n    targetMuscles: [\"Rectus Abdominis\"],\n    synergistMuscles: [\"Obliques\", \"Iliopsoas\"],\n    bodyParts: [\"Waist\"],\n    sortedEquipment: [\"bodyweight\"],\n  },\n  shoulderPassThrough: {\n    targetMuscles: [\"Deltoid Anterior\", \"Deltoid Posterior\"],\n    synergistMuscles: [\"Deltoid Lateral\", \"Infraspinatus\", \"Teres Minor\", \"Trapezius Middle Fibers\"],\n    bodyParts: [\"Shoulders\"],\n    sortedEquipment: [\"band\"],\n  },\n};\n\nexport function equipmentToBarKey(equipment?: IEquipment): IBarKey | undefined {\n  switch (equipment) {\n    case \"barbell\":\n      return \"barbell\";\n    case \"dumbbell\":\n      return \"dumbbell\";\n    case \"ezbar\":\n      return \"ezbar\";\n    default:\n      return undefined;\n  }\n}\n\nexport function equipmentName(equipment: IEquipment | undefined, equipmentSettings?: IAllEquipment): string {\n  const equipmentData = equipment && equipmentSettings ? equipmentSettings[equipment] : undefined;\n  if (equipmentData?.name) {\n    return equipmentData.name.trim();\n  }\n  switch (equipment) {\n    case \"barbell\":\n      return \"Barbell\";\n    case \"cable\":\n      return \"Cable\";\n    case \"dumbbell\":\n      return \"Dumbbell\";\n    case \"smith\":\n      return \"Smith Machine\";\n    case \"band\":\n      return \"Band\";\n    case \"kettlebell\":\n      return \"Kettlebell\";\n    case \"bodyweight\":\n      return \"Bodyweight\";\n    case \"leverageMachine\":\n      return \"Leverage Machine\";\n    case \"medicineball\":\n      return \"Medicine Ball\";\n    case \"ezbar\":\n      return \"EZ Bar\";\n    case \"trapbar\":\n      return \"Trap Bar\";\n    default:\n      return \"\";\n  }\n}\n\nexport type IExerciseKind = \"core\" | \"pull\" | \"push\" | \"legs\" | \"upper\" | \"lower\";\n\nexport type IExercise = {\n  id: IExerciseId;\n  name: string;\n  defaultWarmup?: number;\n  equipment?: IEquipment;\n  defaultEquipment?: IEquipment;\n  types: IExerciseKind[];\n  onerm?: number;\n  startingWeightLb: IWeight;\n  startingWeightKg: IWeight;\n};\n\nexport function warmupValues(units: IUnit): Partial<Record<number, IProgramExerciseWarmupSet[]>> {\n  return {\n    10: [\n      {\n        reps: 5,\n        threshold: units === \"lb\" ? Weight_build(60, \"lb\") : Weight_build(30, \"kg\"),\n        value: 0.3,\n      },\n      {\n        reps: 5,\n        threshold: units === \"lb\" ? Weight_build(30, \"lb\") : Weight_build(15, \"kg\"),\n        value: 0.5,\n      },\n      {\n        reps: 5,\n        threshold: units === \"lb\" ? Weight_build(10, \"lb\") : Weight_build(5, \"kg\"),\n        value: 0.8,\n      },\n    ],\n    45: [\n      {\n        reps: 5,\n        threshold: units === \"lb\" ? Weight_build(120, \"lb\") : Weight_build(60, \"kg\"),\n        value: 0.3,\n      },\n      {\n        reps: 5,\n        threshold: units === \"lb\" ? Weight_build(90, \"lb\") : Weight_build(45, \"kg\"),\n        value: 0.5,\n      },\n      {\n        reps: 5,\n        threshold: units === \"lb\" ? Weight_build(45, \"lb\") : Weight_build(20, \"kg\"),\n        value: 0.8,\n      },\n    ],\n    95: [\n      {\n        reps: 5,\n        threshold: units === \"lb\" ? Weight_build(150, \"lb\") : Weight_build(70, \"kg\"),\n        value: 0.3,\n      },\n      {\n        reps: 5,\n        threshold: units === \"lb\" ? Weight_build(125, \"lb\") : Weight_build(60, \"kg\"),\n        value: 0.5,\n      },\n      {\n        reps: 5,\n        threshold: units === \"lb\" ? Weight_build(95, \"lb\") : Weight_build(40, \"kg\"),\n        value: 0.8,\n      },\n    ],\n  };\n}\n\nfunction warmup45(weight: IWeight | undefined, settings: ISettings, exerciseType?: IExerciseType): ISet[] {\n  return warmup(warmupValues(settings.units)[45] || [])(weight, settings, exerciseType);\n}\n\nfunction warmup95(weight: IWeight | undefined, settings: ISettings, exerciseType?: IExerciseType): ISet[] {\n  return warmup(warmupValues(settings.units)[95] || [])(weight, settings, exerciseType);\n}\n\nfunction warmup10(weight: IWeight | undefined, settings: ISettings, exerciseType?: IExerciseType): ISet[] {\n  return warmup(warmupValues(settings.units)[10] || [])(weight, settings, exerciseType);\n}\n\nfunction warmup(\n  programExerciseWarmupSets: IProgramExerciseWarmupSet[],\n  shouldSkipThreshold: boolean = false\n): (weight: IWeight | undefined, settings: ISettings, exerciseType?: IExerciseType) => ISet[] {\n  return (weight: IWeight | undefined, settings: ISettings, exerciseType?: IExerciseType): ISet[] => {\n    let index = 0;\n    return programExerciseWarmupSets.reduce<ISet[]>((memo, programExerciseWarmupSet) => {\n      if (shouldSkipThreshold || (weight != null && Weight_gt(weight, programExerciseWarmupSet.threshold))) {\n        const value = programExerciseWarmupSet.value;\n        const unit = Equipment_getUnitOrDefaultForExerciseType(settings, exerciseType);\n        const isLessAssistance = typeof value === \"number\" && weight != null && weight.value < 0 && value < 1;\n        if ((typeof value !== \"number\" || weight != null) && !isLessAssistance) {\n          const warmupWeight = typeof value === \"number\" ? Weight_multiply(weight!, value) : value;\n          const roundedWeight = Weight_roundWarmup(warmupWeight, settings, unit, exerciseType, weight);\n          memo.push({\n            vtype: \"set\",\n            index,\n            id: UidFactory_generateUid(6),\n            reps: programExerciseWarmupSet.reps,\n            isUnilateral: exerciseType ? Exercise_getIsUnilateral(exerciseType, settings) : false,\n            weight: roundedWeight,\n            originalWeight: warmupWeight,\n            isCompleted: false,\n          });\n          index += 1;\n        }\n      }\n      return memo;\n    }, []);\n  };\n}\n\nfunction warmupEmpty(weight: IWeight | undefined): ISet[] {\n  return [];\n}\n\nfunction maybeGetExercise(id: IExerciseId, customExercises: IAllCustomExercises): IExercise | undefined {\n  const custom = customExercises[id];\n  return custom != null\n    ? {\n        ...custom,\n        defaultWarmup: 45,\n        types: custom.types || [],\n        startingWeightKg: Weight_build(0, \"kg\"),\n        startingWeightLb: Weight_build(0, \"lb\"),\n      }\n    : allExercisesList[id];\n}\n\nfunction getExercise(id: IExerciseId, customExercises: IAllCustomExercises): IExercise {\n  const exercise = maybeGetExercise(id, customExercises);\n  return exercise != null ? exercise : allExercisesList.squat;\n}\n\nexport function Exercise_getMetadata(id: IExerciseId): IMetaExercises {\n  return metadata[id] || {};\n}\n\nexport function Exercise_exists(name: string, customExercises: IAllCustomExercises): boolean {\n  let exercise = ObjectUtils_keys(allExercisesList).filter((k) => allExercisesList[k].name === name)[0];\n  if (exercise == null) {\n    exercise = ObjectUtils_keys(customExercises).filter(\n      (k) => !customExercises[k]!.isDeleted && customExercises[k]!.name === name\n    )[0];\n  }\n  return !!exercise;\n}\n\nexport function Exercise_isCustom(id: string, customExercises: IAllCustomExercises): boolean {\n  return customExercises[id] != null;\n}\n\nexport function Exercise_buildName(name: string, settings: ISettings, label?: string, equipment?: IEquipment): string {\n  let str = name;\n  if (equipment) {\n    const allEquipment = Equipment_currentEquipment(settings);\n    str = `${name}, ${equipmentName(equipment, allEquipment)}`;\n  }\n  if (label) {\n    str = `${label}: ${str}`;\n  }\n  return str;\n}\n\nexport function Exercise_fullName(exercise: IExercise, settings: ISettings, label?: string): string {\n  const equipment =\n    exercise.equipment && exercise.defaultEquipment !== exercise.equipment ? exercise.equipment : undefined;\n  return Exercise_buildName(exercise.name, settings, label, equipment);\n}\n\nexport function Exercise_reverseName(exercise: IExercise, settings?: ISettings): string {\n  if (exercise.equipment) {\n    const allEquipment = settings ? Equipment_currentEquipment(settings) : {};\n    const equipment = equipmentName(exercise.equipment, allEquipment);\n    return `${equipment} ${exercise.name}`;\n  } else {\n    return exercise.name;\n  }\n}\n\nexport function Exercise_nameWithEquipment(exercise: IExercise, settings?: ISettings): string {\n  if (exercise.equipment) {\n    const allEquipment = settings ? Equipment_currentEquipment(settings) : {};\n    const equipment = equipmentName(exercise.equipment, allEquipment);\n    return `${exercise.name}, ${equipment}`;\n  } else {\n    return exercise.name;\n  }\n}\n\nexport function Exercise_searchNames(query: string, customExercises: IAllCustomExercises): string[] {\n  const allExercises = Exercise_allExpanded({});\n  const exerciseNames = allExercises\n    .filter((e) =>\n      StringUtils_fuzzySearch(\n        query.toLowerCase(),\n        `${e.name}${e.equipment ? `, ${equipmentName(e.equipment)}` : \"\"}`.toLowerCase()\n      )\n    )\n    .map((e) => `${e.name}${e.equipment ? `, ${equipmentName(e.equipment)}` : \"\"}`);\n  const customExerciseNames = ObjectUtils_values(customExercises)\n    .filter((ce) => (ce && !ce.isDeleted ? StringUtils_fuzzySearch(query.toLowerCase(), ce.name.toLowerCase()) : false))\n    .map((e) => e!.name);\n  const names = [...exerciseNames, ...customExerciseNames];\n  names.sort();\n  return names;\n}\n\nexport function Exercise_findById(id: IExerciseId, customExercises: IAllCustomExercises): IExercise | undefined {\n  return maybeGetExercise(id, customExercises);\n}\n\nfunction normalizeExerciseName(name: string): string {\n  return name.toLowerCase().replace(/\\s*,\\s*/g, \",\");\n}\n\ninterface ICustomExercisesNameIndex {\n  live: Map<string, IExerciseId>;\n  deleted: Map<string, IExerciseId>;\n}\n\n// Cache a normalized-name -> id index per customExercises object, since Exercise_findIdByName is called\n// once per exercise reference during program evaluation, and accounts can have hundreds of custom exercises.\nconst customExercisesNameIndexCache = new WeakMap<IAllCustomExercises, ICustomExercisesNameIndex>();\nfunction getCustomExercisesNameIndex(customExercises: IAllCustomExercises): ICustomExercisesNameIndex {\n  let index = customExercisesNameIndexCache.get(customExercises);\n  if (index == null) {\n    index = { live: new Map(), deleted: new Map() };\n    for (const ce of ObjectUtils_values(customExercises)) {\n      if (ce?.name && ce.id) {\n        const key = normalizeExerciseName(ce.name);\n        const map = ce.isDeleted ? index.deleted : index.live;\n        if (!map.has(key)) {\n          map.set(key, ce.id);\n        }\n      }\n    }\n    customExercisesNameIndexCache.set(customExercises, index);\n  }\n  return index;\n}\n\n// These characters are Liftoscript syntax — grammar separators (/{}()#[]|!) or the label\n// delimiter (:) — so a name containing them can't round-trip through planner text: replacing\n// an exercise with it would leave the program with a syntax error.\nconst forbiddenExerciseNameChars = /[/{}()#[\\]|!:\\t\\n\\r]/;\nconst forbiddenExerciseNameCharsAll = new RegExp(forbiddenExerciseNameChars.source, \"g\");\n\nexport function Exercise_nameError(name: string): string | undefined {\n  const trimmed = name.trim();\n  if (trimmed.length === 0) {\n    return \"Name cannot be empty\";\n  }\n  if (forbiddenExerciseNameChars.test(trimmed)) {\n    return \"Name cannot contain special characters: / { } ( ) # [ ] | ! :\";\n  }\n  return undefined;\n}\n\nexport function Exercise_sanitizeName(name: string): string {\n  const sanitized = name.replace(forbiddenExerciseNameCharsAll, \" \").replace(/\\s+/g, \" \").trim();\n  return sanitized || \"Exercise\";\n}\n\nexport function Exercise_findIdByName(name: string, customExercises: IAllCustomExercises): IExerciseId | undefined {\n  const index = getCustomExercisesNameIndex(customExercises);\n  const key = normalizeExerciseName(name);\n  // Live customs win over built-ins on name collision, so shipping a built-in with the same\n  // name as a user's existing custom exercise never silently re-points their programs/history.\n  // Deleted customs resolve last: they must not shadow a built-in (deleting the custom is the\n  // user's only way back to it), but a name matching nothing else should still resolve so\n  // history records and planner text referencing it keep displaying.\n  return index.live.get(key) || nameToIdMapping[name.toLowerCase()] || index.deleted.get(key);\n}\n\nexport function Exercise_get(type: IExerciseType, customExercises: IAllCustomExercises): IExercise {\n  const exercise = getExercise(type.id, customExercises);\n  return { ...exercise, equipment: type.equipment };\n}\n\nexport function Exercise_getNotes(type: IExerciseType, settings: ISettings): string | undefined {\n  return settings.exerciseData[Exercise_toKey(type)]?.notes;\n}\n\nexport function Exercise_onerm(type: IExerciseType, settings: ISettings): IWeight {\n  const rm = settings.exerciseData[Exercise_toKey(type)]?.rm1;\n  if (rm) {\n    return Weight_convertTo(rm, settings.units);\n  }\n  const exercise = Exercise_get(type, settings.exercises);\n  return settings.units === \"kg\" ? exercise.startingWeightKg : exercise.startingWeightLb;\n}\n\nexport function Exercise_defaultRounding(type: IExerciseType, settings: ISettings): number {\n  const units = Equipment_getUnitOrDefaultForExerciseType(settings, type);\n  return Math.max(0.1, settings.exerciseData[Exercise_toKey(type)]?.rounding ?? (units === \"kg\" ? 2.5 : 5));\n}\n\nexport function Exercise_find(type: IExerciseType, customExercises: IAllCustomExercises): IExercise | undefined {\n  const exercise = maybeGetExercise(type.id, customExercises);\n  return exercise ? { ...exercise, equipment: type.equipment } : undefined;\n}\n\nexport function Exercise_getById(id: IExerciseId, customExercises: IAllCustomExercises): IExercise {\n  const exercise = getExercise(id, customExercises);\n  return { ...exercise, equipment: exercise.defaultEquipment };\n}\n\nexport function Exercise_findByNameEquipment(\n  customExercises: IAllCustomExercises,\n  name: string,\n  equipment?: string\n): IExercise | undefined {\n  const exerciseId = Exercise_findIdByName(name, customExercises);\n  const exercise = exerciseId ? Exercise_findById(exerciseId, customExercises) : undefined;\n  if (exercise == null) {\n    return undefined;\n  }\n  return { ...exercise, equipment };\n}\n\nexport function Exercise_findByNameAndEquipment(\n  nameAndEquipment: string,\n  customExercises: IAllCustomExercises\n): IExercise | undefined {\n  return Exercise_resolveNameAndEquipment(nameAndEquipment, customExercises)?.exercise;\n}\n\nexport function Exercise_resolveNameAndEquipment(\n  nameAndEquipment: string,\n  customExercises: IAllCustomExercises\n): { exercise: IExercise; hasExplicitEquipment: boolean } | undefined {\n  const parts = nameAndEquipment.split(\",\").map((p) => p.trim());\n  let name: string | undefined;\n  let equipment: IEquipment | undefined | null;\n  if (parts.length > 1) {\n    const foundEquipment = equipments.filter(\n      (e) => equipmentName(e).toLowerCase() === parts[parts.length - 1].toLowerCase()\n    )[0];\n    if (foundEquipment != null) {\n      equipment = foundEquipment;\n      name = parts.slice(0, parts.length - 1).join(\", \");\n    } else {\n      equipment = null;\n    }\n  }\n  if (name == null) {\n    name = nameAndEquipment;\n  }\n  let exerciseId = Exercise_findIdByName(name, customExercises);\n  if (exerciseId != null && equipment !== null) {\n    // Users can have both \"X\" and \"X, <Equipment>\" custom exercises. Before custom exercises\n    // were included in the split-name lookup, \"X, <Equipment>\" resolved to the custom of that\n    // exact name (history is keyed by it), so an exact full-string custom match must beat the\n    // bare-name custom + parsed equipment interpretation. Built-in bare-name matches keep\n    // winning as they always did — flipping those would re-key history too.\n    const bareNameCustom = customExercises[exerciseId];\n    if (bareNameCustom != null) {\n      const index = getCustomExercisesNameIndex(customExercises);\n      const fullNameKey = normalizeExerciseName(nameAndEquipment);\n      // A deleted full-name custom loses only to a live bare-name custom; when the bare match\n      // is itself a tombstone, the exact full-name tombstone still wins so history keyed by it\n      // doesn't re-point.\n      const fullNameExerciseId =\n        index.live.get(fullNameKey) ?? (bareNameCustom.isDeleted ? index.deleted.get(fullNameKey) : undefined);\n      if (fullNameExerciseId != null && fullNameExerciseId !== exerciseId) {\n        const fullNameExercise = Exercise_findById(fullNameExerciseId, customExercises);\n        if (fullNameExercise != null) {\n          return { exercise: { ...fullNameExercise }, hasExplicitEquipment: false };\n        }\n      }\n    }\n    const exercise = Exercise_findById(exerciseId, customExercises);\n    if (exercise != null) {\n      return {\n        exercise: { ...exercise, equipment: equipment || exercise.defaultEquipment },\n        hasExplicitEquipment: equipment != null,\n      };\n    }\n  } else {\n    exerciseId = Exercise_findIdByName(nameAndEquipment, customExercises);\n    if (exerciseId != null) {\n      const exercise = Exercise_findById(exerciseId, customExercises);\n      if (exercise != null) {\n        return { exercise: { ...exercise }, hasExplicitEquipment: false };\n      }\n    }\n  }\n  return undefined;\n}\n\nexport function Exercise_getIsUnilateral(exerciseType: IExerciseType, settings: ISettings): boolean {\n  const key = Exercise_toKey(exerciseType);\n  const exerciseData = settings.exerciseData[key];\n  if (exerciseData?.isUnilateral !== undefined) {\n    return exerciseData.isUnilateral;\n  }\n\n  switch (exerciseType.id) {\n    case \"bulgarianSplitSquat\":\n    case \"concentrationCurl\":\n    case \"reverseGripConcentrationCurl\":\n    case \"bentOverOneArmRow\":\n    case \"cableKickback\":\n    case \"cableTwist\":\n    case \"russianTwist\":\n    case \"lunge\":\n    case \"reverseLunge\":\n    case \"splitSquat\":\n    case \"stepUp\":\n    case \"pistolSquat\":\n    case \"singleLegBridge\":\n    case \"singleLegDeadlift\":\n    case \"sideBend\":\n    case \"sideCrunch\":\n    case \"sideHipAbductor\":\n    case \"sideLyingClam\":\n    case \"sidePlank\":\n    case \"singleLegBridge\":\n    case \"singleLegCalfRaise\":\n    case \"singleLegDeadlift\":\n    case \"singleLegGluteBridgeBench\":\n    case \"singleLegGluteBridgeStraight\":\n    case \"singleLegGluteBridgeBentKnee\":\n    case \"singleLegHipThrust\":\n      return true;\n    case \"bicepCurl\":\n    case \"wristCurl\":\n    case \"reverseWristCurl\":\n    case \"seatedPalmsUpWristCurl\":\n    case \"hammerCurl\":\n    case \"preacherCurl\":\n    case \"reverseCurl\":\n    case \"lyingBicepCurl\":\n    case \"inclineCurl\":\n      return exerciseType.equipment === \"dumbbell\";\n    default:\n      return false;\n  }\n}\n\n// The number of implements loaded per rep — orthogonal to unilaterality. Unilateral rep-summing\n// (left+right) accounts for the *sides*; this accounts for the *implements*. A dumbbell lunge is\n// both: worked one leg at a time (reps summed) AND holding two dumbbells (multiplier 2).\nexport function Exercise_getVolumeMultiplier(exerciseType: IExerciseType, settings: ISettings): number {\n  const key = Exercise_toKey(exerciseType);\n  const override = settings.exerciseData[key]?.volumeMultiplier;\n  if (override !== undefined) {\n    return override;\n  }\n  // Only dumbbells load two implements per rep at a per-implement displayed weight.\n  // Kettlebell is excluded on purpose: the default is a single bell (swing, goblet,\n  // turkish get up) — double-kettlebell users can override.\n  if (exerciseType.equipment !== \"dumbbell\") {\n    return 1;\n  }\n  switch (exerciseType.id) {\n    case \"arnoldPress\":\n    case \"overheadPress\":\n    case \"shoulderPress\":\n    case \"shoulderPressParallelGrip\":\n    case \"lateralRaise\":\n    case \"frontRaise\":\n    case \"seatedFrontRaise\":\n    case \"reverseFly\":\n    case \"uprightRow\":\n    case \"benchPress\":\n    case \"inclineBenchPress\":\n    case \"declineBenchPress\":\n    case \"inclineChestPress\":\n    case \"chestFly\":\n    case \"inclineChestFly\":\n    case \"aroundTheWorld\":\n    case \"bentOverRow\":\n    case \"chestSupportedRow\":\n    case \"inclineRow\":\n    case \"renegadeRow\":\n    case \"deadlift\":\n    case \"romanianDeadlift\":\n    case \"straightLegDeadlift\":\n    case \"stiffLegDeadlift\":\n    case \"shrug\":\n    case \"skullcrusher\":\n    // unilateral, but both dumbbells are loaded through the whole rep (reps are summed left+right on top)\n    case \"lunge\":\n    case \"reverseLunge\":\n    case \"splitSquat\":\n    case \"bulgarianSplitSquat\":\n    case \"stepUp\":\n      return 2;\n    default:\n      return 1;\n  }\n}\n\nexport function Exercise_findByName(name: string, customExercises: IAllCustomExercises): IExercise | undefined {\n  const exerciseId = Exercise_findIdByName(name.trim(), customExercises);\n  if (exerciseId != null) {\n    const exercise = Exercise_findById(exerciseId, customExercises);\n    if (exercise != null) {\n      return { ...exercise, equipment: exercise.defaultEquipment };\n    }\n  }\n  return undefined;\n}\n\nexport function Exercise_getByIds(ids: IExerciseId[], customExercises: IAllCustomExercises): IExercise[] {\n  return ids.map((id) => {\n    const exercise = getExercise(id, customExercises);\n    return { ...exercise, equipment: exercise.defaultEquipment };\n  });\n}\n\nexport function Exercise_all(customExercises: IAllCustomExercises): IExercise[] {\n  return ObjectUtils_keys(customExercises)\n    .filter((id) => !customExercises[id]?.isDeleted)\n    .map((id) => getExercise(id, customExercises))\n    .concat(\n      ObjectUtils_keys(allExercisesList).map((k) => ({\n        ...allExercisesList[k],\n        equipment: allExercisesList[k].defaultEquipment,\n      }))\n    );\n}\n\nexport function Exercise_allExpanded(customExercises: IAllCustomExercises): IExercise[] {\n  return ObjectUtils_keys(customExercises)\n    .filter((id) => !customExercises[id]?.isDeleted)\n    .map((id) => getExercise(id, customExercises))\n    .concat(\n      ObjectUtils_keys(allExercisesList).flatMap((k) => {\n        return CollectionUtils_compact(\n          equipments.map((equipment) => {\n            const exerciseType = { id: k, equipment };\n            return ExerciseImageUtils_exists(exerciseType, \"small\") ? { ...allExercisesList[k], equipment } : undefined;\n          })\n        );\n      })\n    );\n}\n\nexport function Exercise_toExternalUrl(type: IExerciseType): string {\n  return `/exercises/${Exercise_toUrlSlug(type)}`;\n}\n\nexport function Exercise_toUrlSlug(type: IExerciseType): string {\n  const possibleEquipments: Record<string, IEquipment> = {\n    barbell: \"barbell\",\n    cable: \"cable\",\n    dumbbell: \"dumbbell\",\n    smith: \"smith\",\n    band: \"band\",\n    kettlebell: \"kettlebell\",\n    bodyweight: \"bodyweight\",\n    leverageMachine: \"leverage-machine\",\n    medicineball: \"medicine-ball\",\n    ezbar: \"ez-bar\",\n    trapbar: \"trap-bar\",\n  };\n\n  const equipment = type.equipment ? possibleEquipments[type.equipment] : undefined;\n  const equipmentSlug = equipment ? `${equipment}-` : \"\";\n  return `${equipmentSlug}${StringUtils_dashcase(StringUtils_uncamelCase(type.id))}`;\n}\n\nexport function Exercise_fromUrlSlug(slug: string): IExerciseType | undefined {\n  // slug looks like leverage-machine-squat or barbell-bench-press\n  const possibleEquipments: Record<string, IEquipment> = {\n    barbell: \"barbell\",\n    cable: \"cable\",\n    dumbbell: \"dumbbell\",\n    smith: \"smith\",\n    band: \"band\",\n    kettlebell: \"kettlebell\",\n    bodyweight: \"bodyweight\",\n    \"leverage-machine\": \"leverageMachine\",\n    \"medicine-ball\": \"medicineball\",\n    \"ez-bar\": \"ezbar\",\n    \"trap-bar\": \"trapbar\",\n  };\n  let equipment: IEquipment | undefined = undefined;\n  const equipmentKey = ObjectUtils_keys(possibleEquipments).find((e) => slug.startsWith(e));\n  if (equipmentKey != null) {\n    equipment = possibleEquipments[equipmentKey];\n    slug = slug.slice(equipmentKey.length + 1);\n  }\n  const exerciseId = StringUtils_camelCase(StringUtils_undashcase(slug));\n  if (allExercisesList[exerciseId]) {\n    return { id: exerciseId as IExerciseId, equipment };\n  } else {\n    return undefined;\n  }\n}\n\nexport function Exercise_eq(a: IExerciseType, b: IExerciseType): boolean {\n  return a.id === b.id && a.equipment === b.equipment;\n}\n\nexport function Exercise_filterExercisesByNameAndType(\n  settings: ISettings,\n  filter: string,\n  filterTypes: string[],\n  isSubstitute: boolean,\n  exerciseType?: IExerciseType,\n  length?: number\n): IExercise[] {\n  let allExercises = Exercise_allExpanded({});\n  if (filter) {\n    allExercises = Exercise_filterExercises(allExercises, filter);\n  }\n  if (filterTypes && filterTypes.length > 0) {\n    allExercises = Exercise_filterExercisesByType(allExercises, filterTypes, settings);\n  }\n  allExercises = Exercise_sortExercises(allExercises, isSubstitute, settings, filterTypes, exerciseType);\n  if (length != null) {\n    allExercises = allExercises.slice(0, length);\n  }\n  return allExercises;\n}\n\nexport function Exercise_getWarmupSets(\n  exercise: IExerciseType,\n  weight: IWeight | undefined,\n  settings: ISettings,\n  programExerciseWarmupSets?: IProgramExerciseWarmupSet[]\n): ISet[] {\n  const ex = Exercise_get(exercise, settings.exercises);\n  if (programExerciseWarmupSets != null) {\n    return warmup(programExerciseWarmupSets, true)(weight, settings, exercise);\n  } else {\n    let warmupSets = warmupEmpty(weight);\n    if (ex.defaultWarmup === 10) {\n      warmupSets = warmup10(weight, settings, exercise);\n    } else if (ex.defaultWarmup === 45) {\n      warmupSets = warmup45(weight, settings, exercise);\n    } else if (ex.defaultWarmup === 95) {\n      warmupSets = warmup95(weight, settings, exercise);\n    }\n    return warmupSets;\n  }\n}\n\nexport function Exercise_defaultTargetMuscles(type: IExerciseType, settings: ISettings): IMuscle[] {\n  const customExercise = settings.exercises[type.id];\n  if (customExercise) {\n    return customExercise.meta.targetMuscles;\n  } else {\n    const meta = Exercise_getMetadata(type.id);\n    return meta?.targetMuscles != null ? meta.targetMuscles : [];\n  }\n}\n\nexport function Exercise_targetMuscles(type: IExerciseType, settings: ISettings): IMuscle[] {\n  const muscleMultipliers = settings.exerciseData[Exercise_toKey(type)]?.muscleMultipliers;\n  if (muscleMultipliers) {\n    return (ObjectUtils_keys(muscleMultipliers) as IMuscle[]).filter((m) => muscleMultipliers[m] === 1);\n  } else {\n    return Exercise_defaultTargetMuscles(type, settings);\n  }\n}\n\nexport function Exercise_defaultTargetMusclesGroups(type: IExerciseType, settings: ISettings): IScreenMuscle[] {\n  const muscles = Exercise_defaultTargetMuscles(type, settings);\n  const allMuscleGroups = new Set<IScreenMuscle>();\n  for (const muscle of muscles) {\n    const muscleGroups = Muscle_getScreenMusclesFromMuscle(muscle, settings);\n    for (const muscleGroup of muscleGroups) {\n      allMuscleGroups.add(muscleGroup);\n    }\n  }\n  return Array.from(allMuscleGroups);\n}\n\nexport function Exercise_targetMusclesGroups(type: IExerciseType, settings: ISettings): IScreenMuscle[] {\n  const muscles = Exercise_targetMuscles(type, settings);\n  const allMuscleGroups = new Set<IScreenMuscle>();\n  for (const muscle of muscles) {\n    const muscleGroups = Muscle_getScreenMusclesFromMuscle(muscle, settings);\n    for (const muscleGroup of muscleGroups) {\n      allMuscleGroups.add(muscleGroup);\n    }\n  }\n  return Array.from(allMuscleGroups);\n}\n\nexport function Exercise_muscleGroupFilterNames(muscleGroups: IScreenMuscle[], settings: ISettings): string[] {\n  return muscleGroups.map((muscleGroup) => Muscle_getMuscleGroupName(muscleGroup, settings).toLowerCase());\n}\n\nexport function Exercise_defaultSynergistMuscleMultipliers(\n  type: IExerciseType,\n  settings: ISettings\n): IMuscleMultiplier[] {\n  const customExercise = settings.exercises[type.id];\n  if (customExercise) {\n    return customExercise.meta.synergistMuscles.map((m) => ({\n      muscle: m,\n      multiplier: settings.planner.synergistMultiplier,\n    }));\n  } else {\n    const meta = Exercise_getMetadata(type.id);\n    return meta?.synergistMuscles != null\n      ? meta.synergistMuscles.map((m) => {\n          return { muscle: m, multiplier: settings.planner.synergistMultiplier };\n        })\n      : [];\n  }\n}\n\nexport function Exercise_defaultSynergistMuscles(type: IExerciseType, settings: ISettings): IMuscle[] {\n  return Exercise_defaultSynergistMuscleMultipliers(type, settings).map((m) => m.muscle);\n}\n\nexport function Exercise_synergistMuscleMultipliers(type: IExerciseType, settings: ISettings): IMuscleMultiplier[] {\n  const muscleMultipliers = settings.exerciseData[Exercise_toKey(type)]?.muscleMultipliers;\n  if (muscleMultipliers) {\n    return (ObjectUtils_keys(muscleMultipliers) as IMuscle[])\n      .filter((m) => (muscleMultipliers[m] ?? 0) < 1)\n      .map((m) => ({ muscle: m, multiplier: muscleMultipliers[m] ?? 0 }));\n  } else {\n    return Exercise_defaultSynergistMuscleMultipliers(type, settings);\n  }\n}\n\nexport function Exercise_synergistMuscles(type: IExerciseType, settings: ISettings): IMuscle[] {\n  const muscleMultipliers = settings.exerciseData[Exercise_toKey(type)]?.muscleMultipliers;\n  if (muscleMultipliers) {\n    return (ObjectUtils_keys(muscleMultipliers) as IMuscle[]).filter((m) => (muscleMultipliers[m] ?? 0) < 1);\n  } else {\n    return Exercise_defaultSynergistMuscles(type, settings);\n  }\n}\n\nexport function Exercise_defaultSynergistMusclesGroups(type: IExerciseType, settings: ISettings): IScreenMuscle[] {\n  const muscles = Exercise_defaultSynergistMuscles(type, settings);\n  const allMuscleGroups = new Set<IScreenMuscle>();\n  for (const muscle of muscles) {\n    const muscleGroups = Muscle_getScreenMusclesFromMuscle(muscle, settings);\n    for (const muscleGroup of muscleGroups) {\n      allMuscleGroups.add(muscleGroup);\n    }\n  }\n  return Array.from(allMuscleGroups);\n}\n\nexport function Exercise_synergistMusclesGroupMultipliers(\n  type: IExerciseType,\n  settings: ISettings\n): Partial<Record<IScreenMuscle, number>> {\n  return Exercise_synergistMuscleMultipliers(type, settings).reduce<Partial<Record<IScreenMuscle, number>>>(\n    (memo, m) => {\n      for (const muscleGroup of Muscle_getScreenMusclesFromMuscle(m.muscle, settings)) {\n        if (memo[muscleGroup] == null || memo[muscleGroup] < m.multiplier) {\n          memo[muscleGroup] = m.multiplier;\n        }\n      }\n      return memo;\n    },\n    {}\n  );\n}\n\nexport function Exercise_synergistMusclesGroups(type: IExerciseType, settings: ISettings): IScreenMuscle[] {\n  const muscles = Exercise_synergistMuscles(type, settings);\n  const allMuscleGroups = new Set<IScreenMuscle>();\n  for (const muscle of muscles) {\n    const muscleGroups = Muscle_getScreenMusclesFromMuscle(muscle, settings);\n    for (const muscleGroup of muscleGroups) {\n      allMuscleGroups.add(muscleGroup);\n    }\n  }\n  return Array.from(allMuscleGroups);\n}\n\nexport function Exercise_toKey(type: IExerciseType): string {\n  return `${type.id}${type.equipment ? `_${type.equipment}` : \"\"}`;\n}\n\nexport function Exercise_fromKey(type: string): IExerciseType {\n  const [id, equipment] = type.split(\"_\");\n  return { id: id as IExerciseId, equipment: equipment };\n}\n\nexport function Exercise_defaultEquipment(\n  type: IExerciseId,\n  customExercises: IAllCustomExercises\n): IEquipment | undefined {\n  const priorities: Record<IEquipment, IEquipment[]> = {\n    barbell: [\"ezbar\", \"trapbar\", \"dumbbell\", \"kettlebell\"],\n    cable: [\"band\", \"leverageMachine\"],\n    dumbbell: [\"barbell\", \"kettlebell\", \"bodyweight\"],\n    smith: [\"leverageMachine\", \"dumbbell\", \"barbell\", \"kettlebell\", \"cable\"],\n    band: [\"cable\", \"bodyweight\", \"leverageMachine\", \"smith\"],\n    kettlebell: [\"dumbbell\", \"barbell\", \"cable\"],\n    bodyweight: [\"cable\", \"dumbbell\", \"barbell\", \"band\"],\n    leverageMachine: [\"smith\", \"cable\", \"dumbbell\", \"barbell\", \"kettlebell\"],\n    medicineball: [\"bodyweight\", \"cable\"],\n    ezbar: [\"barbell\", \"dumbbell\", \"cable\"],\n    trapbar: [\"barbell\", \"dumbbell\", \"cable\"],\n  };\n\n  const exercise = Exercise_getById(type, customExercises);\n  const bar = exercise.defaultEquipment || \"bodyweight\";\n  const sortedEquipment = Exercise_getMetadata(type).sortedEquipment || [];\n  let equipment: IEquipment | undefined = sortedEquipment.find((b) => b === bar);\n  equipment = equipment || (priorities[bar] || []).find((eqp) => sortedEquipment.indexOf(eqp) !== -1);\n  equipment = equipment || sortedEquipment[0];\n  return equipment;\n}\n\nexport function Exercise_similarRating(current: IExerciseType, e: IExercise, settings: ISettings): number {\n  const tm = Exercise_targetMuscles(current, settings);\n  const sm = Exercise_synergistMuscles(current, settings);\n  const etm = Exercise_targetMuscles(e, settings);\n  const esm = Exercise_synergistMuscles(e, settings);\n  let rating = 0;\n  if (e.id === current.id || (etm.length === 0 && esm.length === 0)) {\n    rating = -Infinity;\n  } else {\n    for (const muscle of etm) {\n      if (tm.indexOf(muscle) !== -1) {\n        rating += 60;\n      } else {\n        rating -= 30;\n      }\n      if (sm.indexOf(muscle) !== -1) {\n        rating += 20;\n      }\n    }\n    for (const muscle of tm) {\n      if (etm.indexOf(muscle) === -1) {\n        rating -= 30;\n      }\n    }\n    for (const muscle of esm) {\n      if (sm.indexOf(muscle) !== -1) {\n        rating += 30;\n      } else {\n        rating -= 15;\n      }\n      if (tm.indexOf(muscle) !== -1) {\n        rating += 10;\n      }\n    }\n    for (const muscle of sm) {\n      if (esm.indexOf(muscle) === -1) {\n        rating -= 15;\n      }\n    }\n    if (e.defaultEquipment === \"cable\" || e.defaultEquipment === \"leverageMachine\") {\n      rating -= 20;\n    }\n  }\n  return rating;\n}\n\nexport function Exercise_similar(type: IExerciseType, settings: ISettings): [IExercise, number][] {\n  const tm = Exercise_targetMuscles(type, settings);\n  const sm = Exercise_synergistMuscles(type, settings);\n  if (tm.length === 0 && sm.length === 0) {\n    return [];\n  }\n  const rated = Exercise_all(settings.exercises).map<[IExercise, number]>((e) => {\n    const rating = Exercise_similarRating(type, e, settings);\n    return [e, rating];\n  });\n  rated.sort((a, b) => b[1] - a[1]);\n  return rated.filter(([, r]) => r > 0);\n}\n\nexport function Exercise_sortedByScreenMuscle(muscle: IScreenMuscle, settings: ISettings): [IExercise, number][] {\n  const muscles = Muscle_getMusclesFromScreenMuscle(muscle, settings);\n\n  const rated = Exercise_all(settings.exercises).map<[IExercise, number]>((e) => {\n    let rating = 0;\n    const tm = Exercise_targetMuscles(e, settings);\n    const sm = Exercise_synergistMuscles(e, settings);\n    for (const m of tm) {\n      if (muscles.indexOf(m) !== -1) {\n        rating += 100;\n      }\n    }\n    for (const m of sm) {\n      if (muscles.indexOf(m) !== -1) {\n        rating += 10;\n      }\n    }\n    return [e, rating];\n  });\n  rated.sort((a, b) => b[1] - a[1]);\n  return rated.filter(([, r]) => r > 0);\n}\n\nexport function Exercise_createCustomExercise(\n  name: string,\n  tMuscles: IMuscle[],\n  sMuscles: IMuscle[],\n  types: IExerciseKind[],\n  smallImageUrl?: string,\n  largeImageUrl?: string\n): ICustomExercise {\n  const id = UidFactory_generateUid(8);\n  const newExercise: ICustomExercise = {\n    vtype: \"custom_exercise\",\n    id,\n    name,\n    isDeleted: false,\n    types,\n    smallImageUrl,\n    largeImageUrl,\n    meta: {\n      targetMuscles: tMuscles,\n      synergistMuscles: sMuscles,\n      bodyParts: [],\n      sortedEquipment: [],\n    },\n  };\n  return newExercise;\n}\n\nexport function Exercise_editCustomExercise(\n  exercise: ICustomExercise,\n  name: string,\n  tMuscles: IMuscle[],\n  sMuscles: IMuscle[],\n  types: IExerciseKind[],\n  smallImageUrl?: string,\n  largeImageUrl?: string\n): ICustomExercise {\n  const newExercise: ICustomExercise = {\n    ...exercise,\n    name,\n    types,\n    smallImageUrl,\n    largeImageUrl,\n    meta: { ...exercise.meta, targetMuscles: tMuscles, synergistMuscles: sMuscles },\n  };\n  return newExercise;\n}\n\nexport function Exercise_deleteCustomExercise(\n  allExercises: IAllCustomExercises,\n  exerciseId: IExerciseId\n): IAllCustomExercises {\n  const existingExercise = allExercises[exerciseId];\n  if (existingExercise) {\n    return { ...allExercises, [exerciseId]: { ...existingExercise, isDeleted: true } };\n  }\n  return allExercises;\n}\n\nexport function Exercise_upsertCustomExercise(\n  allExercises: IAllCustomExercises,\n  exercise: ICustomExercise\n): IAllCustomExercises {\n  exercise = { ...exercise, name: exercise.name.trim() };\n  const existingExercise = allExercises[exercise.id];\n  if (existingExercise) {\n    return { ...allExercises, [exercise.id]: { ...existingExercise, ...exercise, isDeleted: false } };\n  } else {\n    const sameNameDeletedExercise = ObjectUtils_values(allExercises).find(\n      (e) => e?.name === exercise.name && e.isDeleted\n    );\n    if (sameNameDeletedExercise) {\n      return {\n        ...allExercises,\n        [sameNameDeletedExercise.id]: {\n          ...sameNameDeletedExercise,\n          ...exercise,\n          id: sameNameDeletedExercise.id,\n          isDeleted: false,\n        },\n      };\n    } else {\n      return { ...allExercises, [exercise.id]: exercise };\n    }\n  }\n}\n\nexport function Exercise_applyCustomExerciseChange(\n  action: \"upsert\" | \"delete\",\n  exercise: ICustomExercise,\n  notes: string | undefined,\n  settings: ISettings,\n  program?: IProgram\n): { settings: ISettings; program?: IProgram } {\n  const oldExercise = settings.exercises[exercise.id];\n  const exercises =\n    action === \"upsert\"\n      ? Exercise_upsertCustomExercise(settings.exercises, exercise)\n      : Exercise_deleteCustomExercise(settings.exercises, exercise.id);\n  const newSettings = lb<ISettings>()\n    .p(\"exerciseData\")\n    .pi(exercise.id)\n    .p(\"notes\")\n    .set({ ...settings, exercises }, notes);\n  if (program && oldExercise && oldExercise.name !== exercise.name) {\n    return { settings: newSettings, program: Program_changeExerciseName(oldExercise.name, exercise.name, program, newSettings) };\n  }\n  return { settings: newSettings };\n}\n\nexport function Exercise_handleCustomExerciseChange(\n  dispatch: IDispatch,\n  action: \"upsert\" | \"delete\",\n  exercise: ICustomExercise,\n  notes: string | undefined,\n  settings: ISettings,\n  program?: IProgram\n): void {\n  const result = Exercise_applyCustomExerciseChange(action, exercise, notes, settings, program);\n  updateSettings(dispatch, lb<ISettings>().p(\"exercises\").record(result.settings.exercises), \"Create custom exercise\");\n  updateSettings(dispatch, lb<ISettings>().p(\"exerciseData\").pi(exercise.id).p(\"notes\").record(notes), \"Update notes\");\n  if (result.program) {\n    EditProgram_updateProgram(dispatch, result.program);\n  }\n}\n\nexport function Exercise_createOrUpdateCustomExercise(\n  allExercises: IAllCustomExercises,\n  name: string,\n  tMuscles: IMuscle[],\n  sMuscles: IMuscle[],\n  types: IExerciseKind[],\n  smallImageUrl?: string,\n  largeImageUrl?: string,\n  exercise?: ICustomExercise\n): IAllCustomExercises {\n  if (exercise != null) {\n    const newExercise = Exercise_editCustomExercise(\n      exercise,\n      name,\n      tMuscles,\n      sMuscles,\n      types,\n      smallImageUrl,\n      largeImageUrl\n    );\n    return { ...allExercises, [newExercise.id]: newExercise };\n  } else {\n    const deletedExerciseKey = ObjectUtils_keys(allExercises).find(\n      (k) => allExercises[k]?.isDeleted && allExercises[k]?.name === name\n    );\n    const deletedExercise = deletedExerciseKey != null ? allExercises[deletedExerciseKey] : undefined;\n    if (deletedExercise) {\n      return {\n        ...allExercises,\n        [deletedExercise.id]: {\n          ...deletedExercise,\n          name,\n          types,\n          smallImageUrl,\n          largeImageUrl,\n          isDeleted: false,\n          meta: {\n            targetMuscles: tMuscles,\n            bodyParts: [],\n            synergistMuscles: sMuscles,\n          },\n        },\n      };\n    } else {\n      const newExercise = Exercise_createCustomExercise(name, tMuscles, sMuscles, types, smallImageUrl, largeImageUrl);\n      return { ...allExercises, [newExercise.id]: newExercise };\n    }\n  }\n}\n\nexport function Exercise_filterExercises<T extends { name: string }>(allExercises: T[], filter: string): T[] {\n  return allExercises.filter((e) => StringUtils_fuzzySearch(filter.toLowerCase(), e.name.toLowerCase()));\n}\n\nfunction scoreTokenAgainstWords(\n  token: string,\n  words: string[],\n  fullText: string,\n  weights: [number, number, number]\n): number {\n  if (words.indexOf(token) !== -1) {\n    return weights[0];\n  }\n  for (const w of words) {\n    if (w.startsWith(token)) {\n      return weights[1];\n    }\n  }\n  if (fullText.indexOf(token) !== -1) {\n    return weights[2];\n  }\n  return 0;\n}\n\nfunction tokenizeQuery(query: string): { normalized: string; tokens: string[] } | undefined {\n  const tokens = query\n    .toLowerCase()\n    .split(/[^a-z0-9]+/)\n    .filter((t) => t.length > 0);\n  if (tokens.length === 0) {\n    return undefined;\n  }\n  return { normalized: tokens.join(\" \"), tokens };\n}\n\nfunction scoreExerciseAgainstTokens(\n  name: string,\n  equipment: string,\n  isDefaultEquipment: boolean,\n  normalizedQuery: string,\n  tokens: string[]\n): number | undefined {\n  const nameWords = name.split(/[\\s,]+/).filter((w) => w.length > 0);\n  const equipmentWords = equipment.split(/[\\s,]+/).filter((w) => w.length > 0);\n  const normalizedFullName = equipment ? `${nameWords.join(\" \")} ${equipmentWords.join(\" \")}` : nameWords.join(\" \");\n\n  let totalScore = 0;\n  for (const token of tokens) {\n    const nameScore = scoreTokenAgainstWords(token, nameWords, name, [1000, 500, 200]);\n    const equipmentScore = equipment ? scoreTokenAgainstWords(token, equipmentWords, equipment, [800, 400, 150]) : 0;\n    const best = Math.max(nameScore, equipmentScore);\n    if (best === 0) {\n      return undefined;\n    }\n    totalScore += best;\n  }\n\n  if (name === normalizedQuery || normalizedFullName === normalizedQuery) {\n    totalScore += 10000;\n  }\n  if (name.startsWith(normalizedQuery)) {\n    totalScore += 300;\n  }\n  if (tokens.indexOf(name) !== -1) {\n    totalScore += 1000;\n  }\n  if (equipment && isDefaultEquipment) {\n    totalScore += 50;\n  }\n  return totalScore;\n}\n\nexport function Exercise_matchesQuery<T extends { name: string; equipment?: IEquipment }>(\n  exercise: T,\n  query: string\n): boolean {\n  const parsed = tokenizeQuery(query);\n  if (!parsed) {\n    return true;\n  }\n  const name = exercise.name.toLowerCase();\n  const equipment = exercise.equipment ? equipmentName(exercise.equipment).toLowerCase() : \"\";\n  return scoreExerciseAgainstTokens(name, equipment, false, parsed.normalized, parsed.tokens) != null;\n}\n\nexport function Exercise_filterAndRankByQuery<\n  T extends { name: string; equipment?: IEquipment; defaultEquipment?: IEquipment },\n>(allExercises: T[], query: string): T[] {\n  const parsed = tokenizeQuery(query);\n  if (!parsed) {\n    return allExercises;\n  }\n  const { normalized, tokens } = parsed;\n\n  const scored: Array<{ exercise: T; score: number; name: string; fullName: string }> = [];\n  for (const e of allExercises) {\n    const name = e.name.toLowerCase();\n    const equipment = e.equipment ? equipmentName(e.equipment).toLowerCase() : \"\";\n    const isDefaultEquipment = !!e.equipment && !!e.defaultEquipment && e.equipment === e.defaultEquipment;\n    const score = scoreExerciseAgainstTokens(name, equipment, isDefaultEquipment, normalized, tokens);\n    if (score == null) {\n      continue;\n    }\n    const fullName = equipment ? `${name}, ${equipment}` : name;\n    scored.push({ exercise: e, score, name, fullName });\n  }\n\n  scored.sort((a, b) => {\n    if (b.score !== a.score) {\n      return b.score - a.score;\n    }\n    const byName = a.name.localeCompare(b.name);\n    if (byName !== 0) {\n      return byName;\n    }\n    return a.fullName.localeCompare(b.fullName);\n  });\n  return scored.map((s) => s.exercise);\n}\n\nexport function Exercise_filterAndRankCustomByQuery(\n  customExercises: IAllCustomExercises,\n  query: string\n): ICustomExercise[] {\n  const list = CollectionUtils_compact(ObjectUtils_values(customExercises)).filter((e) => !e.isDeleted);\n  const parsed = tokenizeQuery(query);\n  if (!parsed) {\n    return list;\n  }\n  const { normalized, tokens } = parsed;\n\n  const scored: Array<{ exercise: ICustomExercise; score: number; name: string }> = [];\n  for (const e of list) {\n    const name = e.name.toLowerCase();\n    const score = scoreExerciseAgainstTokens(name, \"\", false, normalized, tokens);\n    if (score == null) {\n      continue;\n    }\n    scored.push({ exercise: e, score, name });\n  }\n\n  scored.sort((a, b) => (b.score !== a.score ? b.score - a.score : a.name.localeCompare(b.name)));\n  return scored.map((s) => s.exercise);\n}\n\nexport function Exercise_sortExercises(\n  allExercises: IExercise[],\n  isSubstitute: boolean,\n  settings: ISettings,\n  filterTypes?: string[],\n  currentExerciseType?: IExerciseType\n): IExercise[] {\n  return CollectionUtils_sort(allExercises, (a, b) => {\n    const exerciseType = currentExerciseType;\n    if (isSubstitute && exerciseType) {\n      const aRating = Exercise_similarRating(exerciseType, a, settings);\n      const bRating = Exercise_similarRating(exerciseType, b, settings);\n      return bRating - aRating;\n    } else if (\n      filterTypes &&\n      Exercise_muscleGroupFilterNames(Muscle_getAvailableMuscleGroups(settings), settings).some(\n        (t) => filterTypes.map((ft) => ft.toLowerCase()).indexOf(t) !== -1\n      )\n    ) {\n      const lowercaseFilterTypes = filterTypes.map((t) => t.toLowerCase());\n      const aTargetMuscleGroups = Exercise_muscleGroupFilterNames(Exercise_targetMusclesGroups(a, settings), settings);\n      const bTargetMuscleGroups = Exercise_muscleGroupFilterNames(Exercise_targetMusclesGroups(b, settings), settings);\n      if (\n        aTargetMuscleGroups.some((m) => lowercaseFilterTypes.indexOf(m) !== -1) &&\n        bTargetMuscleGroups.every((m) => lowercaseFilterTypes.indexOf(m) === -1)\n      ) {\n        return -1;\n      } else if (\n        bTargetMuscleGroups.some((m) => lowercaseFilterTypes.indexOf(m) !== -1) &&\n        aTargetMuscleGroups.every((m) => lowercaseFilterTypes.indexOf(m) === -1)\n      ) {\n        return 1;\n      } else {\n        return a.name.localeCompare(b.name);\n      }\n    } else {\n      return a.name.localeCompare(b.name);\n    }\n  });\n}\n\nexport function Exercise_filterExercisesByType<T extends IExerciseType>(\n  allExercises: T[],\n  filterTypes: string[],\n  settings: ISettings\n): T[] {\n  return allExercises.filter((e) => {\n    const exercise = Exercise_get(e, settings.exercises);\n    const targetMuscleGroups = Exercise_muscleGroupFilterNames(Exercise_targetMusclesGroups(e, settings), settings);\n    const synergistMuscleGroups = Exercise_muscleGroupFilterNames(\n      Exercise_synergistMusclesGroups(e, settings),\n      settings\n    );\n    return filterTypes\n      .map((ft) => ft.toLowerCase())\n      .every((ft) => {\n        return (\n          targetMuscleGroups.indexOf(ft) !== -1 ||\n          synergistMuscleGroups.indexOf(ft) !== -1 ||\n          exercise.types.map((t) => t.toLowerCase()).indexOf(ft) !== -1 ||\n          equipmentName(e.equipment).toLowerCase() === ft\n        );\n      });\n  });\n}\n\nexport function Exercise_filterCustomExercises(\n  customExercises: IAllCustomExercises,\n  filter: string\n): IAllCustomExercises {\n  return ObjectUtils_filter(customExercises, (e, v) =>\n    v && !v.isDeleted ? StringUtils_fuzzySearch(filter.toLowerCase(), v.name.toLowerCase()) : false\n  );\n}\n\nexport function Exercise_filterCustomExercisesByType(filterTypes: string[], settings: ISettings): IAllCustomExercises {\n  return ObjectUtils_filter(settings.exercises, (_id, exercise) => {\n    if (!exercise || exercise.isDeleted) {\n      return false;\n    }\n    const targetMuscleGroups = Array.from(\n      new Set(\n        CollectionUtils_flat(exercise.meta.targetMuscles.map((m) => Muscle_getScreenMusclesFromMuscle(m, settings)))\n      )\n    ).map((m) => Muscle_getMuscleGroupName(m, settings));\n    const synergistMuscleGroups = Array.from(\n      new Set(\n        CollectionUtils_flat(exercise.meta.synergistMuscles.map((m) => Muscle_getScreenMusclesFromMuscle(m, settings)))\n      )\n    ).map((m) => Muscle_getMuscleGroupName(m, settings));\n    return filterTypes.every((ft) => {\n      return (\n        targetMuscleGroups.indexOf(ft) !== -1 ||\n        synergistMuscleGroups.indexOf(ft) !== -1 ||\n        (exercise.types || []).map(StringUtils_capitalize).indexOf(ft) !== -1\n      );\n    });\n  });\n}\n","import { IExerciseType, ISettings } from \"../types\";\nimport { Exercise_toUrlSlug } from \"./exercise\";\nconst availableSmallImages = new Set([\n  \"abwheel_bodyweight\",\n  \"arnoldpress_dumbbell\",\n  \"arnoldpress_kettlebell\",\n  \"aroundtheworld_dumbbell\",\n  \"backextension_bodyweight\",\n  \"backextension_leveragemachine\",\n  \"ballslams_medicineball\",\n  \"battleropes_bodyweight\",\n  \"behindtheneckpress_band\",\n  \"behindtheneckpress_barbell\",\n  \"behindtheneckpress_smith\",\n  \"benchdip_bodyweight\",\n  \"benchpress_band\",\n  \"benchpress_barbell\",\n  \"benchpress_cable\",\n  \"benchpress_dumbbell\",\n  \"benchpress_kettlebell\",\n  \"benchpress_smith\",\n  \"benchpressclosegrip_barbell\",\n  \"benchpressclosegrip_ezbar\",\n  \"benchpressclosegrip_smith\",\n  \"benchpresswidegrip_barbell\",\n  \"benchpresswidegrip_smith\",\n  \"bentoveronearmrow_dumbbell\",\n  \"bentoverrow_band\",\n  \"bentoverrow_barbell\",\n  \"bentoverrow_cable\",\n  \"bentoverrow_dumbbell\",\n  \"bentoverrow_leveragemachine\",\n  \"bentoverrow_smith\",\n  \"bicepcurl_band\",\n  \"bicepcurl_barbell\",\n  \"bicepcurl_cable\",\n  \"bicepcurl_dumbbell\",\n  \"bicepcurl_ezbar\",\n  \"bicepcurl_leveragemachine\",\n  \"bicyclecrunch_bodyweight\",\n  \"boxsquat_barbell\",\n  \"boxsquat_dumbbell\",\n  \"bulgariansplitsquat_dumbbell\",\n  \"cablecrossover_cable\",\n  \"cablecrunch_cable\",\n  \"cablekickback_cable\",\n  \"cablepullthrough_cable\",\n  \"cabletwist_band\",\n  \"cabletwist_barbell\",\n  \"cabletwist_bodyweight\",\n  \"cabletwist_cable\",\n  \"cabletwist_leveragemachine\",\n  \"calfpressonlegpress_leveragemachine\",\n  \"calfpressonseatedlegpress_leveragemachine\",\n  \"chestdip_bodyweight\",\n  \"chestfly_barbell\",\n  \"chestfly_cable\",\n  \"chestfly_dumbbell\",\n  \"chestfly_leveragemachine\",\n  \"chestpress_band\",\n  \"chestpress_leveragemachine\",\n  \"chinup_bodyweight\",\n  \"chinup_leveragemachine\",\n  \"clean_barbell\",\n  \"cleanandjerk_barbell\",\n  \"concentrationcurl_band\",\n  \"concentrationcurl_barbell\",\n  \"concentrationcurl_cable\",\n  \"concentrationcurl_dumbbell\",\n  \"crossbodycrunch_bodyweight\",\n  \"crunch_bodyweight\",\n  \"crunch_cable\",\n  \"crunch_leveragemachine\",\n  \"deadlift_band\",\n  \"deadlift_barbell\",\n  \"deadlift_cable\",\n  \"deadlift_dumbbell\",\n  \"deadlift_kettlebell\",\n  \"deadlift_leveragemachine\",\n  \"deadlift_smith\",\n  \"deadlifthighpull_barbell\",\n  \"declinebenchpress_dumbbell\",\n  \"declinebenchpress_smith\",\n  \"deficitdeadlift_barbell\",\n  \"deficitdeadlift_trapbar\",\n  \"ellipticalmachine_leveragemachine\",\n  \"facepull_band\",\n  \"flatkneeraise_bodyweight\",\n  \"flatlegraise_bodyweight\",\n  \"frontraise_band\",\n  \"frontraise_barbell\",\n  \"frontraise_bodyweight\",\n  \"frontraise_cable\",\n  \"frontraise_dumbbell\",\n  \"frontsquat_barbell\",\n  \"frontsquat_cable\",\n  \"frontsquat_dumbbell\",\n  \"frontsquat_kettlebell\",\n  \"frontsquat_smith\",\n  \"glutebridge_band\",\n  \"glutebridge_barbell\",\n  \"glutebridge_dumbbell\",\n  \"glutebridgemarch_bodyweight\",\n  \"glutekickback_band\",\n  \"glutekickback_cable\",\n  \"gobletsquat_dumbbell\",\n  \"gobletsquat_kettlebell\",\n  \"goodmorning_barbell\",\n  \"goodmorning_leveragemachine\",\n  \"goodmorning_smith\",\n  \"hacksquat_barbell\",\n  \"hacksquat_smith\",\n  \"hammercurl_band\",\n  \"hammercurl_cable\",\n  \"hammercurl_dumbbell\",\n  \"handstandpushup_bodyweight\",\n  \"hangclean_kettlebell\",\n  \"hanginglegraise_bodyweight\",\n  \"hanginglegraise_cable\",\n  \"highrow_cable\",\n  \"highrow_leveragemachine\",\n  \"hipabductor_band\",\n  \"hipabductor_bodyweight\",\n  \"hipabductor_cable\",\n  \"hipabductor_leveragemachine\",\n  \"hipadductor_leveragemachine\",\n  \"hipthrust_band\",\n  \"hipthrust_barbell\",\n  \"hipthrust_bodyweight\",\n  \"hipthrust_leveragemachine\",\n  \"inclinebenchpress_barbell\",\n  \"inclinebenchpress_cable\",\n  \"inclinebenchpress_dumbbell\",\n  \"inclinebenchpress_smith\",\n  \"inclinebenchpresswidegrip_barbell\",\n  \"inclinechestfly_cable\",\n  \"inclinechestfly_dumbbell\",\n  \"inclinechestpress_band\",\n  \"inclinechestpress_dumbbell\",\n  \"inclinechestpress_leveragemachine\",\n  \"inclinecurl_dumbbell\",\n  \"inclinerow_barbell\",\n  \"inclinerow_dumbbell\",\n  \"invertedrow_bodyweight\",\n  \"jackknifesitup_bodyweight\",\n  \"jumpsquat_barbell\",\n  \"jumpsquat_bodyweight\",\n  \"kettlebellswing_dumbbell\",\n  \"kettlebellswing_kettlebell\",\n  \"kneelingpulldown_band\",\n  \"kneestoelbows_bodyweight\",\n  \"lateralraise_band\",\n  \"lateralraise_cable\",\n  \"lateralraise_dumbbell\",\n  \"lateralraise_kettlebell\",\n  \"lateralraise_leveragemachine\",\n  \"latpulldown_cable\",\n  \"latpulldown_leveragemachine\",\n  \"legextension_band\",\n  \"legextension_leveragemachine\",\n  \"legpress_leveragemachine\",\n  \"legpress_smith\",\n  \"legsupbenchpress_barbell\",\n  \"lunge_barbell\",\n  \"lunge_bodyweight\",\n  \"lunge_cable\",\n  \"lunge_dumbbell\",\n  \"lyingbicepcurl_cable\",\n  \"lyingbicepcurl_dumbbell\",\n  \"lyinglegcurl_band\",\n  \"lyinglegcurl_leveragemachine\",\n  \"muscleup_bodyweight\",\n  \"obliquecrunch_bodyweight\",\n  \"overheadpress_barbell\",\n  \"overheadpress_dumbbell\",\n  \"overheadpress_ezbar\",\n  \"overheadsquat_barbell\",\n  \"overheadsquat_dumbbell\",\n  \"pecdeck_leveragemachine\",\n  \"pendlayrow_barbell\",\n  \"pistolsquat_bodyweight\",\n  \"pistolsquat_kettlebell\",\n  \"pistolsquat_leveragemachine\",\n  \"plank_bodyweight\",\n  \"preachercurl_barbell\",\n  \"preachercurl_dumbbell\",\n  \"preachercurl_ezbar\",\n  \"preachercurl_leveragemachine\",\n  \"pullover_barbell\",\n  \"pullover_dumbbell\",\n  \"pullup_band\",\n  \"pullup_bodyweight\",\n  \"pullup_leveragemachine\",\n  \"pushpress_barbell\",\n  \"pushpress_bodyweight\",\n  \"pushpress_dumbbell\",\n  \"pushpress_kettlebell\",\n  \"pushup_band\",\n  \"pushup_bodyweight\",\n  \"reversecrunch_bodyweight\",\n  \"reversecrunch_cable\",\n  \"reversecurl_band\",\n  \"reversecurl_barbell\",\n  \"reversecurl_cable\",\n  \"reversecurl_dumbbell\",\n  \"reversefly_band\",\n  \"reversefly_dumbbell\",\n  \"reversefly_leveragemachine\",\n  \"reversehyperextension_band\",\n  \"reversehyperextension_leveragemachine\",\n  \"reverselunge_barbell\",\n  \"reverselunge_bodyweight\",\n  \"reverselunge_dumbbell\",\n  \"reverselunge_kettlebell\",\n  \"reversewristcurl_barbell\",\n  \"reversewristcurl_dumbbell\",\n  \"reversewristcurl_ezbar\",\n  \"romaniandeadlift_barbell\",\n  \"romaniandeadlift_dumbbell\",\n  \"russiantwist_bodyweight\",\n  \"russiantwist_cable\",\n  \"russiantwist_dumbbell\",\n  \"safetysquatbarsquat_barbell\",\n  \"seatedcalfraise_barbell\",\n  \"seatedcalfraise_dumbbell\",\n  \"seatedcalfraise_leveragemachine\",\n  \"seatedfrontraise_barbell\",\n  \"seatedfrontraise_dumbbell\",\n  \"seatedlegcurl_leveragemachine\",\n  \"seatedlegpress_leveragemachine\",\n  \"seatedoverheadpress_barbell\",\n  \"seatedpalmsupwristcurl_dumbbell\",\n  \"seatedrow_band\",\n  \"seatedrow_cable\",\n  \"seatedrow_leveragemachine\",\n  \"seatedwidegriprow_cable\",\n  \"shoulderpress_band\",\n  \"shoulderpress_cable\",\n  \"shoulderpress_dumbbell\",\n  \"shoulderpress_leveragemachine\",\n  \"shoulderpress_smith\",\n  \"shoulderpressparallelgrip_dumbbell\",\n  \"shrug_band\",\n  \"shrug_barbell\",\n  \"shrug_cable\",\n  \"shrug_dumbbell\",\n  \"shrug_leveragemachine\",\n  \"shrug_smith\",\n  \"sidebend_band\",\n  \"sidebend_cable\",\n  \"sidebend_dumbbell\",\n  \"sidecrunch_band\",\n  \"sidecrunch_bodyweight\",\n  \"sidecrunch_cable\",\n  \"sidehipabductor_barbell\",\n  \"sidehipabductor_bodyweight\",\n  \"sidehipabductor_leveragemachine\",\n  \"sidelyingclam_bodyweight\",\n  \"sideplank_bodyweight\",\n  \"singlelegbridge_bodyweight\",\n  \"singlelegdeadlift_bodyweight\",\n  \"singlelegdeadlift_dumbbell\",\n  \"singlelegglutebridgebench_bodyweight\",\n  \"singlelegglutebridgebentknee_bodyweight\",\n  \"singlelegglutebridgestraight_bodyweight\",\n  \"singleleghipthrust_barbell\",\n  \"singleleghipthrust_bodyweight\",\n  \"singleleghipthrust_leveragemachine\",\n  \"sissysquat_bodyweight\",\n  \"situp_bodyweight\",\n  \"situp_kettlebell\",\n  \"skullcrusher_barbell\",\n  \"skullcrusher_cable\",\n  \"skullcrusher_dumbbell\",\n  \"skullcrusher_ezbar\",\n  \"snatch_dumbbell\",\n  \"splitsquat_band\",\n  \"splitsquat_barbell\",\n  \"splitsquat_bodyweight\",\n  \"splitsquat_dumbbell\",\n  \"splitsquat_kettlebell\",\n  \"squat_barbell\",\n  \"squat_bodyweight\",\n  \"squat_dumbbell\",\n  \"squat_leveragemachine\",\n  \"squat_smith\",\n  \"squatrow_band\",\n  \"standingcalfraise_barbell\",\n  \"standingcalfraise_bodyweight\",\n  \"standingcalfraise_cable\",\n  \"standingcalfraise_dumbbell\",\n  \"standingcalfraise_leveragemachine\",\n  \"standingrow_cable\",\n  \"standingrowclosegrip_cable\",\n  \"standingrowreardeltwithrope_cable\",\n  \"standingrowrearhorizontaldeltwithrope_cable\",\n  \"standingrowvbar_cable\",\n  \"stepup_band\",\n  \"stepup_barbell\",\n  \"stepup_bodyweight\",\n  \"stepup_dumbbell\",\n  \"stifflegdeadlift_band\",\n  \"stifflegdeadlift_barbell\",\n  \"stifflegdeadlift_dumbbell\",\n  \"straightlegdeadlift_band\",\n  \"straightlegdeadlift_barbell\",\n  \"straightlegdeadlift_dumbbell\",\n  \"straightlegdeadlift_kettlebell\",\n  \"sumodeadlift_barbell\",\n  \"sumodeadlifthighpull_barbell\",\n  \"superman_bodyweight\",\n  \"superman_dumbbell\",\n  \"tbarrow_leveragemachine\",\n  \"thruster_barbell\",\n  \"toestobar_bodyweight\",\n  \"trapbardeadlift_trapbar\",\n  \"tricepsdip_bodyweight\",\n  \"tricepsdip_leveragemachine\",\n  \"tricepsextension_band\",\n  \"tricepsextension_barbell\",\n  \"tricepsextension_cable\",\n  \"tricepsextension_dumbbell\",\n  \"tricepspushdown_cable\",\n  \"uprightrow_band\",\n  \"uprightrow_barbell\",\n  \"uprightrow_cable\",\n  \"uprightrow_dumbbell\",\n  \"vup_band\",\n  \"vup_bodyweight\",\n  \"vup_dumbbell\",\n  \"widepullup_bodyweight\",\n  \"wristcurl_barbell\",\n  \"wristcurl_dumbbell\",\n  \"wristcurl_ezbar\",\n  \"wristroller_bodyweight\",\n  \"zerchersquat_barbell\",\n  \"wallpushup_bodyweight\",\n  \"inclinepushup_bodyweight\",\n  \"kneepushup_bodyweight\",\n  \"diamondpushup_bodyweight\",\n  \"pseudoplanchepushup_bodyweight\",\n  \"pikepushup_bodyweight\",\n  \"ringdip_bodyweight\",\n  \"negativedip_bodyweight\",\n  \"verticalrow_bodyweight\",\n  \"widerow_bodyweight\",\n  \"ringrow_bodyweight\",\n  \"tuckfrontleverrow_bodyweight\",\n  \"frontleverrow_bodyweight\",\n  \"scapularpullup_bodyweight\",\n  \"deadhang_bodyweight\",\n  \"negativepullup_bodyweight\",\n  \"assistedsquat_bodyweight\",\n  \"shrimpsquat_bodyweight\",\n  \"nordiccurl_bodyweight\",\n  \"handstand_bodyweight\",\n  \"wallhandstand_bodyweight\",\n  \"crowpose_bodyweight\",\n  \"dragonflag_bodyweight\",\n  \"copenhagenplank_bodyweight\",\n  \"hangingkneeraise_bodyweight\",\n  \"archhang_bodyweight\",\n  \"supporthold_bodyweight\",\n  \"pallofpress_band\",\n  \"renegaderow_dumbbell\",\n  \"romaniandeadlift_bodyweight\",\n  \"bulgariansplitsquat_bodyweight\",\n  \"nordiccurl_band\",\n  \"inclinerow_bodyweight\",\n  \"reversehyperextension_bodyweight\",\n  \"ringabrollout_bodyweight\",\n  \"kneelingringabrollout_bodyweight\",\n  \"archerpullup_bodyweight\",\n  \"skinthecat_bodyweight\",\n  \"hollowbodyhold_bodyweight\",\n  \"deadbug_bodyweight\",\n  \"shoulderpassthrough_band\",\n]);\n\nconst availableLargeImages = new Set([\n  \"abwheel_bodyweight\",\n  \"arnoldpress_dumbbell\",\n  \"arnoldpress_kettlebell\",\n  \"aroundtheworld_dumbbell\",\n  \"backextension_bodyweight\",\n  \"backextension_leveragemachine\",\n  \"ballslams_medicineball\",\n  \"battleropes_bodyweight\",\n  \"behindtheneckpress_band\",\n  \"behindtheneckpress_barbell\",\n  \"behindtheneckpress_smith\",\n  \"benchdip_bodyweight\",\n  \"benchpress_band\",\n  \"benchpress_barbell\",\n  \"benchpress_cable\",\n  \"benchpress_dumbbell\",\n  \"benchpress_kettlebell\",\n  \"benchpress_smith\",\n  \"benchpressclosegrip_barbell\",\n  \"benchpressclosegrip_ezbar\",\n  \"benchpressclosegrip_smith\",\n  \"benchpresswidegrip_barbell\",\n  \"benchpresswidegrip_smith\",\n  \"bentoveronearmrow_dumbbell\",\n  \"bentoverrow_band\",\n  \"bentoverrow_barbell\",\n  \"bentoverrow_cable\",\n  \"bentoverrow_dumbbell\",\n  \"bentoverrow_leveragemachine\",\n  \"bentoverrow_smith\",\n  \"bicepcurl_band\",\n  \"bicepcurl_barbell\",\n  \"bicepcurl_cable\",\n  \"bicepcurl_dumbbell\",\n  \"bicepcurl_ezbar\",\n  \"bicepcurl_leveragemachine\",\n  \"bicyclecrunch_bodyweight\",\n  \"boxsquat_barbell\",\n  \"boxsquat_dumbbell\",\n  \"bulgariansplitsquat_dumbbell\",\n  \"cablecrossover_cable\",\n  \"cablecrunch_cable\",\n  \"cablekickback_cable\",\n  \"cablepullthrough_cable\",\n  \"cabletwist_band\",\n  \"cabletwist_barbell\",\n  \"cabletwist_bodyweight\",\n  \"cabletwist_cable\",\n  \"cabletwist_leveragemachine\",\n  \"calfpressonlegpress_leveragemachine\",\n  \"calfpressonseatedlegpress_leveragemachine\",\n  \"chestdip_bodyweight\",\n  \"chestfly_barbell\",\n  \"chestfly_cable\",\n  \"chestfly_dumbbell\",\n  \"chestfly_leveragemachine\",\n  \"chestpress_band\",\n  \"chestpress_leveragemachine\",\n  \"chinup_bodyweight\",\n  \"chinup_leveragemachine\",\n  \"clean_barbell\",\n  \"cleanandjerk_barbell\",\n  \"concentrationcurl_band\",\n  \"concentrationcurl_barbell\",\n  \"concentrationcurl_cable\",\n  \"concentrationcurl_dumbbell\",\n  \"crossbodycrunch_bodyweight\",\n  \"crunch_bodyweight\",\n  \"crunch_cable\",\n  \"crunch_leveragemachine\",\n  \"deadlift_band\",\n  \"deadlift_barbell\",\n  \"deadlift_cable\",\n  \"deadlift_dumbbell\",\n  \"deadlift_kettlebell\",\n  \"deadlift_leveragemachine\",\n  \"deadlift_smith\",\n  \"deadlifthighpull_barbell\",\n  \"declinebenchpress_dumbbell\",\n  \"declinebenchpress_smith\",\n  \"deficitdeadlift_barbell\",\n  \"deficitdeadlift_trapbar\",\n  \"ellipticalmachine_leveragemachine\",\n  \"facepull_band\",\n  \"flatkneeraise_bodyweight\",\n  \"flatlegraise_bodyweight\",\n  \"frontraise_band\",\n  \"frontraise_barbell\",\n  \"frontraise_bodyweight\",\n  \"frontraise_cable\",\n  \"frontraise_dumbbell\",\n  \"frontsquat_barbell\",\n  \"frontsquat_cable\",\n  \"frontsquat_dumbbell\",\n  \"frontsquat_kettlebell\",\n  \"frontsquat_smith\",\n  \"glutebridge_band\",\n  \"glutebridge_barbell\",\n  \"glutebridge_dumbbell\",\n  \"glutebridgemarch_bodyweight\",\n  \"glutekickback_band\",\n  \"glutekickback_cable\",\n  \"gobletsquat_dumbbell\",\n  \"gobletsquat_kettlebell\",\n  \"goodmorning_barbell\",\n  \"goodmorning_leveragemachine\",\n  \"goodmorning_smith\",\n  \"hacksquat_barbell\",\n  \"hacksquat_smith\",\n  \"hammercurl_band\",\n  \"hammercurl_cable\",\n  \"hammercurl_dumbbell\",\n  \"handstandpushup_bodyweight\",\n  \"hangclean_kettlebell\",\n  \"hanginglegraise_bodyweight\",\n  \"hanginglegraise_cable\",\n  \"highrow_cable\",\n  \"highrow_leveragemachine\",\n  \"hipabductor_band\",\n  \"hipabductor_bodyweight\",\n  \"hipabductor_cable\",\n  \"hipabductor_leveragemachine\",\n  \"hipadductor_leveragemachine\",\n  \"hipthrust_band\",\n  \"hipthrust_barbell\",\n  \"hipthrust_bodyweight\",\n  \"hipthrust_leveragemachine\",\n  \"inclinebenchpress_barbell\",\n  \"inclinebenchpress_cable\",\n  \"inclinebenchpress_dumbbell\",\n  \"inclinebenchpress_smith\",\n  \"inclinebenchpresswidegrip_barbell\",\n  \"inclinechestfly_cable\",\n  \"inclinechestfly_dumbbell\",\n  \"inclinechestpress_band\",\n  \"inclinechestpress_dumbbell\",\n  \"inclinechestpress_leveragemachine\",\n  \"inclinecurl_dumbbell\",\n  \"inclinerow_barbell\",\n  \"inclinerow_dumbbell\",\n  \"invertedrow_bodyweight\",\n  \"jackknifesitup_bodyweight\",\n  \"jumpsquat_barbell\",\n  \"jumpsquat_bodyweight\",\n  \"kettlebellswing_dumbbell\",\n  \"kettlebellswing_kettlebell\",\n  \"kneelingpulldown_band\",\n  \"kneestoelbows_bodyweight\",\n  \"lateralraise_band\",\n  \"lateralraise_cable\",\n  \"lateralraise_dumbbell\",\n  \"lateralraise_kettlebell\",\n  \"lateralraise_leveragemachine\",\n  \"latpulldown_cable\",\n  \"latpulldown_leveragemachine\",\n  \"legextension_band\",\n  \"legextension_leveragemachine\",\n  \"legpress_leveragemachine\",\n  \"legpress_smith\",\n  \"legsupbenchpress_barbell\",\n  \"lunge_barbell\",\n  \"lunge_bodyweight\",\n  \"lunge_cable\",\n  \"lunge_dumbbell\",\n  \"lyingbicepcurl_cable\",\n  \"lyingbicepcurl_dumbbell\",\n  \"lyinglegcurl_band\",\n  \"lyinglegcurl_leveragemachine\",\n  \"muscleup_bodyweight\",\n  \"obliquecrunch_bodyweight\",\n  \"overheadpress_barbell\",\n  \"overheadpress_dumbbell\",\n  \"overheadpress_ezbar\",\n  \"overheadsquat_barbell\",\n  \"overheadsquat_dumbbell\",\n  \"pecdeck_leveragemachine\",\n  \"pendlayrow_barbell\",\n  \"pistolsquat_bodyweight\",\n  \"pistolsquat_kettlebell\",\n  \"pistolsquat_leveragemachine\",\n  \"plank_bodyweight\",\n  \"preachercurl_barbell\",\n  \"preachercurl_dumbbell\",\n  \"preachercurl_ezbar\",\n  \"preachercurl_leveragemachine\",\n  \"pullover_barbell\",\n  \"pullover_dumbbell\",\n  \"pullup_band\",\n  \"pullup_bodyweight\",\n  \"pullup_leveragemachine\",\n  \"pushpress_barbell\",\n  \"pushpress_bodyweight\",\n  \"pushpress_dumbbell\",\n  \"pushpress_kettlebell\",\n  \"pushup_band\",\n  \"pushup_bodyweight\",\n  \"reversecrunch_bodyweight\",\n  \"reversecrunch_cable\",\n  \"reversecurl_band\",\n  \"reversecurl_barbell\",\n  \"reversecurl_cable\",\n  \"reversecurl_dumbbell\",\n  \"reversefly_band\",\n  \"reversefly_dumbbell\",\n  \"reversefly_leveragemachine\",\n  \"reversehyperextension_band\",\n  \"reversehyperextension_leveragemachine\",\n  \"reverselunge_barbell\",\n  \"reverselunge_bodyweight\",\n  \"reverselunge_dumbbell\",\n  \"reverselunge_kettlebell\",\n  \"reversewristcurl_barbell\",\n  \"reversewristcurl_dumbbell\",\n  \"reversewristcurl_ezbar\",\n  \"romaniandeadlift_barbell\",\n  \"romaniandeadlift_dumbbell\",\n  \"russiantwist_bodyweight\",\n  \"russiantwist_cable\",\n  \"russiantwist_dumbbell\",\n  \"safetysquatbarsquat_barbell\",\n  \"seatedcalfraise_barbell\",\n  \"seatedcalfraise_dumbbell\",\n  \"seatedcalfraise_leveragemachine\",\n  \"seatedfrontraise_barbell\",\n  \"seatedfrontraise_dumbbell\",\n  \"seatedlegcurl_leveragemachine\",\n  \"seatedlegpress_leveragemachine\",\n  \"seatedoverheadpress_barbell\",\n  \"seatedpalmsupwristcurl_dumbbell\",\n  \"seatedrow_band\",\n  \"seatedrow_cable\",\n  \"seatedrow_leveragemachine\",\n  \"seatedwidegriprow_cable\",\n  \"shoulderpress_band\",\n  \"shoulderpress_cable\",\n  \"shoulderpress_dumbbell\",\n  \"shoulderpress_leveragemachine\",\n  \"shoulderpress_smith\",\n  \"shoulderpressparallelgrip_dumbbell\",\n  \"shrug_band\",\n  \"shrug_barbell\",\n  \"shrug_cable\",\n  \"shrug_dumbbell\",\n  \"shrug_leveragemachine\",\n  \"shrug_smith\",\n  \"sidebend_band\",\n  \"sidebend_cable\",\n  \"sidebend_dumbbell\",\n  \"sidecrunch_band\",\n  \"sidecrunch_bodyweight\",\n  \"sidecrunch_cable\",\n  \"sidehipabductor_barbell\",\n  \"sidehipabductor_bodyweight\",\n  \"sidehipabductor_leveragemachine\",\n  \"sidelyingclam_bodyweight\",\n  \"sideplank_bodyweight\",\n  \"singlelegbridge_bodyweight\",\n  \"singlelegdeadlift_bodyweight\",\n  \"singlelegdeadlift_dumbbell\",\n  \"singlelegglutebridgebench_bodyweight\",\n  \"singlelegglutebridgebentknee_bodyweight\",\n  \"singlelegglutebridgestraight_bodyweight\",\n  \"singleleghipthrust_barbell\",\n  \"singleleghipthrust_bodyweight\",\n  \"singleleghipthrust_leveragemachine\",\n  \"sissysquat_bodyweight\",\n  \"situp_bodyweight\",\n  \"situp_kettlebell\",\n  \"skullcrusher_barbell\",\n  \"skullcrusher_cable\",\n  \"skullcrusher_dumbbell\",\n  \"skullcrusher_ezbar\",\n  \"snatch_dumbbell\",\n  \"splitsquat_band\",\n  \"splitsquat_barbell\",\n  \"splitsquat_bodyweight\",\n  \"splitsquat_dumbbell\",\n  \"splitsquat_kettlebell\",\n  \"squat_barbell\",\n  \"squat_bodyweight\",\n  \"squat_dumbbell\",\n  \"squat_leveragemachine\",\n  \"squat_smith\",\n  \"squatrow_band\",\n  \"standingcalfraise_barbell\",\n  \"standingcalfraise_bodyweight\",\n  \"standingcalfraise_cable\",\n  \"standingcalfraise_dumbbell\",\n  \"standingcalfraise_leveragemachine\",\n  \"standingrow_cable\",\n  \"standingrowclosegrip_cable\",\n  \"standingrowreardeltwithrope_cable\",\n  \"standingrowrearhorizontaldeltwithrope_cable\",\n  \"standingrowvbar_cable\",\n  \"stepup_band\",\n  \"stepup_barbell\",\n  \"stepup_bodyweight\",\n  \"stepup_dumbbell\",\n  \"stifflegdeadlift_band\",\n  \"stifflegdeadlift_barbell\",\n  \"stifflegdeadlift_dumbbell\",\n  \"straightlegdeadlift_band\",\n  \"straightlegdeadlift_barbell\",\n  \"straightlegdeadlift_dumbbell\",\n  \"straightlegdeadlift_kettlebell\",\n  \"sumodeadlift_barbell\",\n  \"sumodeadlifthighpull_barbell\",\n  \"superman_bodyweight\",\n  \"superman_dumbbell\",\n  \"tbarrow_leveragemachine\",\n  \"thruster_barbell\",\n  \"toestobar_bodyweight\",\n  \"trapbardeadlift_trapbar\",\n  \"tricepsdip_bodyweight\",\n  \"tricepsdip_leveragemachine\",\n  \"tricepsextension_band\",\n  \"tricepsextension_barbell\",\n  \"tricepsextension_cable\",\n  \"tricepsextension_dumbbell\",\n  \"tricepspushdown_cable\",\n  \"uprightrow_band\",\n  \"uprightrow_barbell\",\n  \"uprightrow_cable\",\n  \"uprightrow_dumbbell\",\n  \"vup_band\",\n  \"vup_bodyweight\",\n  \"vup_dumbbell\",\n  \"widepullup_bodyweight\",\n  \"wristcurl_barbell\",\n  \"wristcurl_dumbbell\",\n  \"wristcurl_ezbar\",\n  \"wristroller_bodyweight\",\n  \"zerchersquat_barbell\",\n  \"wallpushup_bodyweight\",\n  \"inclinepushup_bodyweight\",\n  \"kneepushup_bodyweight\",\n  \"diamondpushup_bodyweight\",\n  \"pseudoplanchepushup_bodyweight\",\n  \"pikepushup_bodyweight\",\n  \"ringdip_bodyweight\",\n  \"negativedip_bodyweight\",\n  \"verticalrow_bodyweight\",\n  \"widerow_bodyweight\",\n  \"ringrow_bodyweight\",\n  \"tuckfrontleverrow_bodyweight\",\n  \"frontleverrow_bodyweight\",\n  \"scapularpullup_bodyweight\",\n  \"deadhang_bodyweight\",\n  \"negativepullup_bodyweight\",\n  \"assistedsquat_bodyweight\",\n  \"shrimpsquat_bodyweight\",\n  \"nordiccurl_bodyweight\",\n  \"handstand_bodyweight\",\n  \"wallhandstand_bodyweight\",\n  \"crowpose_bodyweight\",\n  \"dragonflag_bodyweight\",\n  \"copenhagenplank_bodyweight\",\n  \"hangingkneeraise_bodyweight\",\n  \"archhang_bodyweight\",\n  \"supporthold_bodyweight\",\n  \"pallofpress_band\",\n  \"renegaderow_dumbbell\",\n  \"romaniandeadlift_bodyweight\",\n  \"bulgariansplitsquat_bodyweight\",\n  \"nordiccurl_band\",\n  \"inclinerow_bodyweight\",\n  \"reversehyperextension_bodyweight\",\n  \"ringabrollout_bodyweight\",\n  \"kneelingringabrollout_bodyweight\",\n  \"archerpullup_bodyweight\",\n  \"skinthecat_bodyweight\",\n  \"hollowbodyhold_bodyweight\",\n  \"deadbug_bodyweight\",\n  \"shoulderpassthrough_band\",\n]);\n\nexport function ExerciseImageUtils_id(type: IExerciseType): string {\n  const equipment = type.equipment || \"bodyweight\";\n  return `${type.id.toLowerCase()}_${(equipment || \"bodyweight\").toLowerCase()}`;\n}\n\nexport function ExerciseImageUtils_exists(type: IExerciseType, size: \"small\" | \"large\"): boolean {\n  return size === \"small\"\n    ? availableSmallImages.has(ExerciseImageUtils_id(type))\n    : availableLargeImages.has(ExerciseImageUtils_id(type));\n}\n\nexport function ExerciseImageUtils_existsCustom(\n  type: IExerciseType,\n  size: \"small\" | \"large\",\n  checkDomain: boolean,\n  settings?: ISettings\n): boolean {\n  const customExercise = settings?.exercises?.[type.id];\n  const imageUrl =\n    size === \"small\" ? customExercise?.smallImageUrl : (customExercise?.largeImageUrl ?? customExercise?.smallImageUrl);\n  return checkDomain ? !!(imageUrl?.startsWith(\"/\") || imageUrl?.includes(\"liftosaur.com\")) : !!imageUrl;\n}\n\nexport function ExerciseImageUtils_ogImageUrl(type: IExerciseType): string {\n  const key = Exercise_toUrlSlug(type);\n  return `/externalimages/exercises/ogimages/${key}.png`;\n}\n\nexport function ExerciseImageUtils_url(\n  type: IExerciseType,\n  size: \"small\" | \"large\",\n  settings?: ISettings\n): string | undefined {\n  if (ExerciseImageUtils_exists(type, size)) {\n    const src =\n      size === \"large\"\n        ? `/externalimages/exercises/full/large/${ExerciseImageUtils_id(type)}_full_large.png`\n        : `/externalimages/exercises/single/small/${ExerciseImageUtils_id(type)}_single_small.png`;\n    return src;\n  } else if (ExerciseImageUtils_existsCustom(type, size, false, settings)) {\n    const customExercise = settings?.exercises?.[type.id];\n    return size === \"large\"\n      ? (customExercise?.largeImageUrl ?? customExercise?.smallImageUrl)\n      : customExercise?.smallImageUrl;\n  } else {\n    return undefined;\n  }\n}\n","import {\n  Exercise_getIsUnilateral,\n  Exercise_getVolumeMultiplier,\n  Exercise_onerm,\n  Exercise_toKey,\n  Exercise_get,\n  Exercise_targetMusclesGroups,\n  Exercise_synergistMusclesGroups,\n  Exercise_synergistMusclesGroupMultipliers,\n  Exercise_eq,\n  Exercise_fullName,\n  Exercise_targetMuscles,\n  Exercise_synergistMuscles,\n} from \"./exercise\";\nimport { Progress_getEntryId, Progress_isCurrent } from \"./progress\";\nimport { CollectionUtils_sort, CollectionUtils_sortByExpr } from \"../utils/collection\";\n\nimport {\n  Weight_compare,\n  Weight_build,\n  Weight_convertTo,\n  Weight_getOneRepMax,\n  Weight_gt,\n  Weight_lt,\n  Weight_gte,\n  Weight_add,\n  Weight_eq,\n  Weight_multiply,\n} from \"./weight\";\nimport {\n  IHistoryEntry,\n  IHistoryEntryProgressSnapshot,\n  IHistoryRecord,\n  ISet,\n  IExerciseType,\n  IUnit,\n  IWeight,\n  ISettings,\n  IScreenMuscle,\n  IIntervals,\n  IStorage,\n  IStats,\n  IProgramState,\n} from \"../types\";\nimport { Collector, ICollectorFn } from \"../utils/collector\";\nimport {\n  Reps_avgUnilateralCompletedReps,\n  Reps_volume,\n  Reps_isStarted,\n  Reps_setVolume,\n  Reps_isFinishedSet,\n} from \"./set\";\nimport { ProgramExercise_isUsingVariable } from \"./programExercise\";\nimport { IState, updateState } from \"./state\";\nimport { lb, lbu } from \"lens-shmens\";\nimport { ObjectUtils_keys, ObjectUtils_clone, ObjectUtils_isNotEmpty } from \"../utils/object\";\nimport { IDispatch } from \"../ducks/types\";\nimport { INativeEffect } from \"./nativeEffects\";\nimport memoize from \"micro-memoize\";\nimport { DateUtils_firstDayOfWeekTimestamp, DateUtils_formatYYYYMMDD } from \"../utils/date\";\nimport {\n  IEvaluatedProgram,\n  Program_getProgramExerciseForKeyAndDay,\n  Program_computeProgressStateChanges,\n} from \"./program\";\nimport {\n  PlannerProgramExercise_getState,\n  PlannerProgramExercise_currentDescription,\n} from \"../pages/planner/models/plannerProgramExercise\";\nimport { IPlannerProgramExercise } from \"../pages/planner/models/types\";\nimport { LiftoscriptPrint_lines } from \"../liftoscriptPrint\";\nimport { Muscle_getAvailableMuscleGroups } from \"./muscle\";\n\nexport interface IHistoricalEntries {\n  last: { entry: IHistoryEntry; time: number };\n  max: { entry: IHistoryEntry; time: number };\n}\n\nexport interface IHistoryRecordAndEntry {\n  record: IHistoryRecord;\n  entry: IHistoryEntry;\n}\n\n// history id -> exercise key -> personal records\nexport type IPersonalRecords = Partial<Record<string, Partial<Record<string, IHistoryEntryPersonalRecords>>>>;\n\nexport interface IHistoryEntryPersonalRecords {\n  maxWeightSet?: ISet;\n  prevMaxWeightSet?: ISet;\n  max1RMSet?: ISet;\n  prevMax1RMSet?: ISet;\n}\n\nexport function History_generateId(timestamp: number): number {\n  return timestamp + Math.floor(Math.random() * 1000);\n}\n\nexport function History_deleteRecords(storage: IStorage, ids: number[]): IStorage {\n  const idSet = new Set(ids);\n  return { ...storage, history: storage.history.filter((h) => !idSet.has(h.id)) };\n}\n\nexport function History_createCustomEntry(exerciseType: IExerciseType, index: number): IHistoryEntry {\n  return {\n    vtype: \"history_entry\",\n    id: Progress_getEntryId(exerciseType),\n    index,\n    exercise: exerciseType,\n    sets: [],\n    warmupSets: [],\n  };\n}\n\nexport function History_finishProgramDay(\n  progress: IHistoryRecord,\n  settings: ISettings,\n  day: number,\n  program?: IEvaluatedProgram,\n  stats?: IStats,\n  forceEndTime: number = Date.now()\n): IHistoryRecord {\n  const { deletedProgramExercises, ui, ...historyRecord } = progress;\n  const updatedAt = forceEndTime;\n  const endTime = Progress_isCurrent(progress) ? forceEndTime : (progress.endTime ?? forceEndTime);\n  return {\n    ...historyRecord,\n    entries: historyRecord.entries.map((entry) => {\n      const originalUpdatePrints = LiftoscriptPrint_lines(entry.updatePrintLines, entry.updatePrints);\n      const programExercise =\n        program && entry.programExerciseId\n          ? Program_getProgramExerciseForKeyAndDay(program, day, entry.programExerciseId)\n          : undefined;\n      if (Progress_isCurrent(progress)) {\n        const isUnilateral = Exercise_getIsUnilateral(entry.exercise, settings);\n        const { updatePrints, updatePrintLines, ...entryWithoutPrints } = entry;\n        entry = {\n          ...entryWithoutPrints,\n          sets: entry.sets.map((set) => {\n            return {\n              ...set,\n              completedReps: set.isCompleted ? set.completedReps : undefined,\n              completedRepsLeft: isUnilateral && set.isCompleted ? set.completedRepsLeft : undefined,\n              completedRpe: set.isCompleted ? set.completedRpe : undefined,\n              completedWeight: set.isCompleted ? set.completedWeight : undefined,\n            };\n          }),\n        };\n        if (programExercise != null) {\n          const state = PlannerProgramExercise_getState(programExercise);\n          const useRm1 = ProgramExercise_isUsingVariable(programExercise, \"rm1\");\n          const descriptionSnapshot = PlannerProgramExercise_currentDescription(programExercise);\n          const progressSnapshot = History_buildProgressSnapshot(\n            entry,\n            settings,\n            programExercise,\n            program,\n            stats,\n            progress.userPromptedStateVars?.[entry.programExerciseId ?? \"\"],\n            originalUpdatePrints\n          );\n          entry = {\n            ...entry,\n            state: { ...state },\n            vars: useRm1 ? { rm1: Exercise_onerm(programExercise.exerciseType, settings) } : {},\n            ...(descriptionSnapshot != null ? { descriptionSnapshot } : {}),\n            ...(progressSnapshot != null ? { progressSnapshot } : {}),\n          };\n        }\n      }\n      return entry;\n    }),\n    vtype: \"history_record\",\n    id: Progress_isCurrent(progress) ? progress.startTime : progress.id,\n    updatedAt: updatedAt,\n    timerSince: undefined,\n    timerMode: undefined,\n    setTimer: undefined,\n    setTimerGetReady: undefined,\n    intervals: History_pauseWorkout(progress.intervals),\n    ...(Progress_isCurrent(progress) ? { endTime } : {}),\n  };\n}\n\nfunction History_buildProgressSnapshot(\n  entry: IHistoryEntry,\n  settings: ISettings,\n  programExercise: IPlannerProgramExercise,\n  program?: IEvaluatedProgram,\n  stats?: IStats,\n  userPromptedStateVars?: IProgramState,\n  updatePrintLines?: string[]\n): IHistoryEntryProgressSnapshot | undefined {\n  const snapshot: IHistoryEntryProgressSnapshot = {};\n  if (program && stats) {\n    const changes = Program_computeProgressStateChanges(\n      entry,\n      programExercise.dayData,\n      settings,\n      programExercise,\n      program,\n      stats,\n      userPromptedStateVars\n    );\n    if (changes) {\n      const diffState = History_compactDiff(changes.diffState);\n      const diffVars = History_compactDiff(changes.diffVars);\n      if (ObjectUtils_isNotEmpty(diffState)) {\n        snapshot.diffState = diffState;\n      }\n      if (ObjectUtils_isNotEmpty(diffVars)) {\n        snapshot.diffVars = diffVars;\n      }\n      if (changes.prints.length > 0) {\n        snapshot.printLines = changes.prints;\n      }\n    }\n  }\n  if (updatePrintLines && updatePrintLines.length > 0) {\n    snapshot.updatePrintLines = updatePrintLines;\n  }\n  return ObjectUtils_isNotEmpty(snapshot) ? snapshot : undefined;\n}\n\nfunction History_compactDiff(diff: Record<string, string | undefined>): Record<string, string> {\n  return ObjectUtils_keys(diff).reduce<Record<string, string>>((memo, key) => {\n    const value = diff[key];\n    if (value != null) {\n      memo[key] = value;\n    }\n    return memo;\n  }, {});\n}\n\nexport function History_getMaxWeightSetFromEntry(entry: IHistoryEntry): ISet | undefined {\n  return History_getMaxWeightSet(entry.sets);\n}\n\nexport function History_getMax1RMSetFromEntry(entry: IHistoryEntry): ISet | undefined {\n  return History_getMax1RMSet(entry.sets);\n}\n\n// A tie goes to more reps, then to the earlier set, as in the stable sort this replaced.\nfunction History_maxSetBy(sets: ISet[], weightOf: (set: ISet) => IWeight): ISet | undefined {\n  let best: ISet | undefined;\n  let bestWeight: IWeight | undefined;\n  for (const set of sets) {\n    if ((set.completedReps || 0) <= 0) {\n      continue;\n    }\n    const weight = weightOf(set);\n    if (best == null || bestWeight == null) {\n      best = set;\n      bestWeight = weight;\n      continue;\n    }\n    const weightDiff = Weight_compare(bestWeight, weight);\n    const beats =\n      weightDiff === 0 && set.completedReps && best.completedReps\n        ? best.completedReps - set.completedReps < 0\n        : weightDiff < 0;\n    if (beats) {\n      best = set;\n      bestWeight = weight;\n    }\n  }\n  return best;\n}\n\nexport function History_getMaxWeightSet(sets: ISet[]): ISet | undefined {\n  return History_maxSetBy(sets, (set) => set.completedWeight ?? set.weight ?? Weight_build(0, \"lb\"));\n}\n\nexport function History_getMax1RMSet(sets: ISet[]): ISet | undefined {\n  return History_maxSetBy(sets, (set) =>\n    Weight_getOneRepMax(\n      set.completedWeight ?? set.weight ?? Weight_build(0, \"lb\"),\n      Reps_avgUnilateralCompletedReps(set) || 0,\n      set.completedRpe ?? set.rpe ?? 10\n    )\n  );\n}\n\nexport function History_findAllPersonalRecords(\n  record: IHistoryRecord,\n  history: IHistoryRecord[]\n): Map<IExerciseType, ISet> {\n  const prs: Map<IExerciseType, ISet> = new Map();\n  for (const entry of record.entries) {\n    const set = History_findPersonalRecord(record.id, entry, history);\n    if (set != null) {\n      prs.set(entry.exercise, set);\n    }\n  }\n  return prs;\n}\n\nexport function History_findAllUsedExerciseTypes(history: IHistoryRecord[]): Partial<Record<string, IExerciseType>> {\n  const set: Partial<Record<string, IExerciseType>> = {};\n  for (const record of history) {\n    for (const entry of record.entries) {\n      set[Exercise_toKey(entry.exercise)] = entry.exercise;\n    }\n  }\n  return set;\n}\n\nexport function History_collectMinAndMaxTime(): ICollectorFn<IHistoryRecord, { minTime: number; maxTime: number }> {\n  return {\n    fn: (acc, hr) => {\n      if (acc.maxTime < hr.startTime) {\n        acc.maxTime = hr.startTime;\n      }\n      if (acc.minTime > hr.startTime) {\n        acc.minTime = hr.startTime;\n      }\n      return acc;\n    },\n    initial: { maxTime: 0, minTime: Infinity },\n  };\n}\n\nexport function History_collectProgramChangeTimes(): ICollectorFn<\n  IHistoryRecord,\n  {\n    currentProgram?: string;\n    changeProgramTimes: [number, string][];\n  }\n> {\n  return {\n    fn: (acc, hr) => {\n      if (!acc.currentProgram || acc.currentProgram !== hr.programName) {\n        acc.currentProgram = hr.programName;\n        acc.changeProgramTimes.push([new Date(Date.parse(hr.date)).getTime() / 1000, acc.currentProgram]);\n      }\n      return acc;\n    },\n    initial: { changeProgramTimes: [] },\n  };\n}\n\nexport function History_collectMuscleGroups(\n  settings: ISettings\n): ICollectorFn<IHistoryRecord, Record<IScreenMuscle | \"total\", [number[], number[], number[]]>> {\n  return {\n    fn: (acc, hr) => {\n      for (const entry of hr.entries) {\n        const exercise = Exercise_get(entry.exercise, settings.exercises);\n        const targetMuscleGroups = Exercise_targetMusclesGroups(exercise, settings);\n        const synergistMuscleGroups = Exercise_synergistMusclesGroups(exercise, settings);\n        const synergistMuscleGroupToMultiplier = Exercise_synergistMusclesGroupMultipliers(exercise, settings);\n        for (const muscleGroup of [...Muscle_getAvailableMuscleGroups(settings), \"total\"] as const) {\n          let multiplier = 0;\n          if (muscleGroup === \"total\") {\n            multiplier = 1;\n          } else if (targetMuscleGroups.indexOf(muscleGroup) !== -1) {\n            multiplier = 1;\n          } else if (synergistMuscleGroups.indexOf(muscleGroup) !== -1) {\n            multiplier = synergistMuscleGroupToMultiplier[muscleGroup] ?? settings.planner.synergistMultiplier;\n          }\n          if (multiplier === 0) {\n            continue;\n          }\n          acc[muscleGroup] = acc[muscleGroup] || [[], [], []];\n          const muscleGroupAcc = acc[muscleGroup];\n          const date = new Date(hr.startTime);\n          const lastTs = muscleGroupAcc[0][muscleGroupAcc[0]?.length - 1];\n          const finishedSets = entry.sets.filter((s) => (s.completedReps || 0) > 0);\n          if (lastTs == null) {\n            muscleGroupAcc[0].push(Math.round(date.getTime() / 1000));\n            muscleGroupAcc[1].push(0);\n            muscleGroupAcc[2].push(0);\n          } else {\n            const lastDate = new Date(lastTs * 1000);\n            const beginningOfWeekForDate = DateUtils_firstDayOfWeekTimestamp(date, settings.startWeekFromMonday);\n            const beginningOfWeekForLastDate = DateUtils_firstDayOfWeekTimestamp(\n              lastDate,\n              settings.startWeekFromMonday\n            );\n            if (beginningOfWeekForDate !== beginningOfWeekForLastDate) {\n              muscleGroupAcc[0].push(Math.round(date.getTime() / 1000));\n              muscleGroupAcc[1].push(0);\n              muscleGroupAcc[2].push(0);\n            }\n          }\n          muscleGroupAcc[1][muscleGroupAcc[1].length - 1] +=\n            Reps_volume(finishedSets, settings.units).value *\n            multiplier *\n            Exercise_getVolumeMultiplier(entry.exercise, settings);\n          muscleGroupAcc[2][muscleGroupAcc[2].length - 1] += finishedSets.length * multiplier;\n        }\n      }\n      return acc;\n    },\n    initial: {},\n  };\n}\n\nexport function History_collectAllUsedExerciseTypes(): ICollectorFn<\n  IHistoryRecord,\n  Partial<Record<string, IExerciseType>>\n> {\n  return {\n    fn: (acc, hr) => {\n      for (const entry of hr.entries) {\n        acc[Exercise_toKey(entry.exercise)] = entry.exercise;\n      }\n      return acc;\n    },\n    initial: {},\n  };\n}\n\nexport function History_collectAllHistoryRecordsOfExerciseType(\n  exerciseType: IExerciseType\n): ICollectorFn<IHistoryRecord, IHistoryRecord[]> {\n  return {\n    fn: (acc, hr) => {\n      const hasExercise = hr.entries.some((e) => Exercise_eq(e.exercise, exerciseType));\n      if (hasExercise) {\n        acc.push(hr);\n      }\n      return acc;\n    },\n    initial: [],\n  };\n}\n\nexport function History_collectLastEntry(\n  startTime: number,\n  exerciseType: IExerciseType\n): ICollectorFn<\n  IHistoryRecord,\n  { lastHistoryEntry?: IHistoryEntry; lastHistoryRecord?: IHistoryRecord; timestamp?: number }\n> {\n  return {\n    fn: (acc, hr) => {\n      const time = hr.endTime ?? hr.startTime;\n      if (time < startTime && (acc.timestamp == null || time > acc.timestamp)) {\n        const entry = hr.entries.find((e) => Exercise_eq(e.exercise, exerciseType) && Reps_isStarted(e.sets));\n        if (entry) {\n          acc = { lastHistoryEntry: entry, lastHistoryRecord: hr, timestamp: time };\n        }\n      }\n      return acc;\n    },\n    initial: {},\n  };\n}\n\nexport function History_collectLastNote(\n  startTime: number,\n  exerciseType: IExerciseType\n): ICollectorFn<IHistoryRecord, { lastNote?: string; timestamp?: number }> {\n  return {\n    fn: (acc, hr) => {\n      const time = hr.endTime ?? hr.startTime;\n      const twoMonthsAgo = startTime - 60 * 24 * 60 * 60 * 1000;\n      if (time < startTime && time > twoMonthsAgo && (acc.timestamp == null || time > acc.timestamp)) {\n        const entry = hr.entries.find((e) => Exercise_eq(e.exercise, exerciseType));\n        if (entry && entry.notes) {\n          acc = { lastNote: entry.notes, timestamp: time };\n        }\n      }\n      return acc;\n    },\n    initial: {},\n  };\n}\n\nexport interface IPrevExerciseData {\n  lastEntry?: IHistoryEntry;\n  lastEntryTimestamp?: number;\n  lastWarmupEntry?: IHistoryEntry;\n  lastWarmupEntryTimestamp?: number;\n  lastNote?: string;\n  lastNoteTimestamp?: number;\n  sameDayEntry?: IHistoryEntry;\n  sameDayTimestamp?: number;\n  bestByReps: Partial<Record<number, IPrevBestSet>>;\n  bestAmrap?: IPrevBestSet;\n  count: number;\n}\n\nexport interface IPrevBestSet {\n  set: ISet;\n  timestamp: number;\n}\n\nfunction History_amrapScore(set: ISet, weight: IWeight, reps: number): number {\n  return Weight_convertTo(Weight_getOneRepMax(weight, reps, set.completedRpe), \"lb\").value;\n}\n\nfunction History_bothSidesReps(set: ISet): number | undefined {\n  if (set.completedReps == null || set.completedRepsLeft == null) {\n    return set.completedReps;\n  }\n  return Math.min(set.completedReps, set.completedRepsLeft);\n}\n\nfunction History_recordBestSets(data: IPrevExerciseData, set: ISet, time: number): void {\n  const weight = set.completedWeight;\n  const reps = History_bothSidesReps(set);\n  if (!set.isCompleted || weight == null || reps == null || reps <= 0) {\n    return;\n  }\n  const byReps = data.bestByReps[reps];\n  const byRepsWeight = byReps?.set.completedWeight;\n  if (\n    byReps == null ||\n    byRepsWeight == null ||\n    Weight_gt(weight, byRepsWeight) ||\n    (Weight_eq(weight, byRepsWeight) && time > byReps.timestamp)\n  ) {\n    data.bestByReps[reps] = { set, timestamp: time };\n  }\n  if (set.isAmrap) {\n    const amrap = data.bestAmrap;\n    const amrapWeight = amrap?.set.completedWeight;\n    const amrapReps = amrap?.set.completedReps;\n    const score = History_amrapScore(set, weight, reps);\n    const amrapScore =\n      amrap != null && amrapWeight != null && amrapReps != null\n        ? History_amrapScore(amrap.set, amrapWeight, amrapReps)\n        : undefined;\n    if (amrapScore == null || score > amrapScore || (score === amrapScore && amrap != null && time > amrap.timestamp)) {\n      data.bestAmrap = { set, timestamp: time };\n    }\n  }\n}\n\nexport type IPrevExerciseSameDay = Pick<IHistoryRecord, \"programId\" | \"day\" | \"week\" | \"dayInWeek\">;\n\n// Records written before `week` and `dayInWeek` existed carry only the absolute `day`.\nfunction History_isSameProgramDay(record: IHistoryRecord, sameDay: IPrevExerciseSameDay): boolean {\n  if (record.programId !== sameDay.programId) {\n    return false;\n  }\n  if (record.week != null && record.dayInWeek != null && sameDay.week != null && sameDay.dayInWeek != null) {\n    return record.week === sameDay.week && record.dayInWeek === sameDay.dayInWeek;\n  }\n  return record.day === sameDay.day;\n}\n\n// One pass over the whole history producing, per exercise key, the data each workout-exercise card\n// needs for its first paint: the previous started entry (for \"last time\" set values), the recent\n// note, and how many past records contain the exercise. The workout screen builds this once and\n// shares it across all exercise tabs — replacing the per-card O(total history) scans (collectLastEntry\n// + collectLastNote + collectAllHistoryRecordsOfExerciseType) that were the dominant source of\n// mount-frame jank for users with large histories. Mirrors the semantics of those three collectors.\nexport function History_buildPrevExerciseData(\n  history: IHistoryRecord[],\n  beforeTime: number,\n  sameDay?: IPrevExerciseSameDay,\n  onlyKeys?: ReadonlySet<string>\n): Record<string, IPrevExerciseData> {\n  const twoMonthsAgo = beforeTime - 60 * 24 * 60 * 60 * 1000;\n  const result: Record<string, IPrevExerciseData> = {};\n  for (const hr of history) {\n    const time = hr.endTime ?? hr.startTime;\n    const isBefore = time < beforeTime;\n    const isSameDay = sameDay != null && History_isSameProgramDay(hr, sameDay);\n    const seenKeys = new Set<string>();\n    for (const entry of hr.entries) {\n      const key = Exercise_toKey(entry.exercise);\n      if (onlyKeys != null && !onlyKeys.has(key)) {\n        continue;\n      }\n      let data = result[key];\n      if (data == null) {\n        data = { count: 0, bestByReps: {} };\n        result[key] = data;\n      }\n      if (!seenKeys.has(key)) {\n        seenKeys.add(key);\n        data.count += 1;\n      }\n      if (\n        isBefore &&\n        Reps_isStarted(entry.sets) &&\n        (data.lastEntryTimestamp == null || time > data.lastEntryTimestamp)\n      ) {\n        data.lastEntry = entry;\n        data.lastEntryTimestamp = time;\n      }\n      if (\n        isBefore &&\n        Reps_isStarted(entry.warmupSets) &&\n        (data.lastWarmupEntryTimestamp == null || time > data.lastWarmupEntryTimestamp)\n      ) {\n        data.lastWarmupEntry = entry;\n        data.lastWarmupEntryTimestamp = time;\n      }\n      if (\n        isBefore &&\n        isSameDay &&\n        Reps_isStarted(entry.sets) &&\n        (data.sameDayTimestamp == null || time > data.sameDayTimestamp)\n      ) {\n        data.sameDayEntry = entry;\n        data.sameDayTimestamp = time;\n      }\n      if (isBefore) {\n        for (const set of entry.sets) {\n          History_recordBestSets(data, set, time);\n        }\n      }\n      if (\n        isBefore &&\n        entry.notes &&\n        time > twoMonthsAgo &&\n        (data.lastNoteTimestamp == null || time > data.lastNoteTimestamp)\n      ) {\n        data.lastNote = entry.notes;\n        data.lastNoteTimestamp = time;\n      }\n    }\n  }\n  return result;\n}\n\n// Same \"last started entry for this exercise\" question History_buildPrevExerciseData answers, but for\n// a single exercise the user just picked, so it doesn't pay for a map over every exercise they've ever\n// done. `excludeRecordId` skips the record being edited — when you edit a past workout, `progress` is\n// itself a history record, and without this it would seed its own weights from itself.\nexport function History_findLastEntryForExerciseType(\n  history: IHistoryRecord[],\n  exerciseType: IExerciseType,\n  excludeRecordId?: number\n): IHistoryEntry | undefined {\n  let result: IHistoryEntry | undefined;\n  let resultTime: number | undefined;\n  for (const hr of history) {\n    if (hr.id === excludeRecordId) {\n      continue;\n    }\n    const time = hr.endTime ?? hr.startTime;\n    if (resultTime != null && time <= resultTime) {\n      continue;\n    }\n    const entry = hr.entries.find((e) => Exercise_eq(e.exercise, exerciseType) && Reps_isStarted(e.sets));\n    if (entry != null) {\n      result = entry;\n      resultTime = time;\n    }\n  }\n  return result;\n}\n\nexport function History_collectWeightPersonalRecord(\n  exerciseType: IExerciseType,\n  unit: IUnit\n): ICollectorFn<IHistoryRecord, { maxWeight: IWeight; maxWeightHistoryRecord?: IHistoryRecord }> {\n  return {\n    fn: (acc, hr) => {\n      const entries = hr.entries.filter((e) => Exercise_eq(e.exercise, exerciseType));\n      const maxSet = History_getMaxWeightSet(entries.flatMap((e) => e.sets));\n      if (maxSet != null) {\n        const weight = maxSet.completedWeight ?? maxSet.weight ?? Weight_build(0, unit);\n        if (Weight_gt(weight, acc.maxWeight)) {\n          acc = { maxWeight: weight, maxWeightHistoryRecord: hr };\n        }\n      }\n      return acc;\n    },\n    initial: { maxWeight: Weight_build(0, unit) },\n  };\n}\n\nexport function History_collect1RMPersonalRecord(\n  exerciseType: IExerciseType,\n  unit: IUnit\n): ICollectorFn<IHistoryRecord, { max1RM: IWeight; max1RMHistoryRecord?: IHistoryRecord; max1RMSet?: ISet }> {\n  return {\n    fn: (acc, hr) => {\n      const entries = hr.entries.filter((e) => Exercise_eq(e.exercise, exerciseType));\n      const allSets = entries.flatMap((e) => e.sets);\n      const all1RMs = allSets.map<[ISet, IWeight]>((s) => [\n        s,\n        Weight_getOneRepMax(s.completedWeight ?? s.weight ?? Weight_build(0, unit), s.completedReps || 0),\n      ]);\n      const max1RM = CollectionUtils_sort(all1RMs, (a, b) => Weight_compare(b[1], a[1]))[0];\n      if (max1RM != null && Weight_gt(max1RM[1], acc.max1RM)) {\n        acc = { max1RM: max1RM[1], max1RMHistoryRecord: hr, max1RMSet: max1RM[0] };\n      }\n      return acc;\n    },\n    initial: { max1RM: Weight_build(0, unit) },\n  };\n}\n\nexport function History_findAllMaxSetsPerId(history: IHistoryRecord[]): Partial<Record<string, ISet>> {\n  const maxSets: Partial<Record<string, ISet>> = {};\n  for (const r of history) {\n    for (const e of r.entries) {\n      const entryMaxSet = History_getMaxWeightSetFromEntry(e);\n      const key = Exercise_toKey(e.exercise);\n      if (entryMaxSet != null && (entryMaxSet.completedReps || 0) > 0) {\n        if (maxSets[key] == null || Weight_lt(maxSets[key].weight || 0, entryMaxSet.weight ?? Weight_build(0, \"lb\"))) {\n          maxSets[key] = entryMaxSet;\n        }\n      }\n    }\n  }\n  return maxSets;\n}\n\nexport function History_getHistoryRecordsForTimerange(\n  history: IHistoryRecord[],\n  date: number,\n  type: \"month\" | \"week\" | \"day\",\n  startWeekFromMonday?: boolean\n): IHistoryRecord[] {\n  // For given date, get the start and end of the timerange, and return history records that fall within that range\n  const start = new Date(date);\n  const end = new Date(date);\n  if (type === \"month\") {\n    start.setDate(1);\n    end.setMonth(end.getMonth() + 1);\n    end.setDate(0);\n  } else if (type === \"week\") {\n    start.setDate(start.getDate() - start.getDay() + (startWeekFromMonday ? 1 : 0));\n    end.setDate(start.getDate() + 6);\n  } else if (type === \"day\") {\n    start.setHours(0, 0, 0, 0);\n  }\n  end.setHours(23, 59, 59, 999);\n  return history.filter((hr) => {\n    if (Progress_isCurrent(hr)) {\n      return false;\n    }\n    const recordDate = Date.parse(hr.date);\n    const startTime = new Date(recordDate);\n    return startTime >= start && startTime < end;\n  });\n}\n\nexport function History_getNumberOfPersonalRecords(history: IHistoryRecord[], prs: IPersonalRecords): number {\n  return history.reduce((memo, r) => {\n    return memo + ObjectUtils_keys(prs[r.id] || {})?.length;\n  }, 0);\n}\n\nexport function History_findMaxSet(exerciseType: IExerciseType, history: IHistoryRecord[]): ISet | undefined {\n  let maxSet: ISet | undefined = undefined;\n  for (const r of history) {\n    for (const e of r.entries) {\n      if (Exercise_eq(e.exercise, exerciseType)) {\n        const entryMaxSet = History_getMaxWeightSetFromEntry(e);\n        if (entryMaxSet != null && (entryMaxSet.completedReps || 0) > 0) {\n          if (\n            maxSet == null ||\n            Weight_gt(entryMaxSet.weight ?? Weight_build(0, \"lb\"), maxSet.weight ?? Weight_build(0, \"lb\"))\n          ) {\n            maxSet = entryMaxSet;\n          }\n        }\n      }\n    }\n  }\n  return maxSet;\n}\n\nexport function History_findPersonalRecord(\n  id: number,\n  entry: IHistoryEntry,\n  history: IHistoryRecord[]\n): ISet | undefined {\n  let isMax: boolean | undefined;\n  const entryMaxSet = History_getMaxWeightSetFromEntry(entry);\n  if (entryMaxSet != null && (entryMaxSet.completedReps || 0) > 0) {\n    for (const r of history) {\n      if (r.id < id) {\n        for (const e of r.entries) {\n          if (e.exercise.id === entry.exercise.id && e.exercise.equipment === entry.exercise.equipment) {\n            if (isMax == null) {\n              isMax = true;\n            }\n            const maxSet = History_getMaxWeightSetFromEntry(e);\n            if (\n              maxSet != null &&\n              Weight_gte(maxSet.weight ?? Weight_build(0, \"lb\"), entryMaxSet.weight ?? Weight_build(0, \"lb\"))\n            ) {\n              isMax = false;\n            }\n          }\n        }\n      }\n    }\n  } else {\n    isMax = false;\n  }\n  if (isMax == null || isMax === true) {\n    return entryMaxSet;\n  } else {\n    return undefined;\n  }\n}\n\nexport function History_totalRecordWeight(record: IHistoryRecord, settings: ISettings): IWeight {\n  return record.entries.reduce(\n    (memo, e) => Weight_add(memo, History_totalEntryWeight(e, settings)),\n    Weight_build(0, settings.units)\n  );\n}\n\nexport function History_totalRecordReps(record: IHistoryRecord): number {\n  return record.entries.reduce((memo, e) => memo + History_totalEntryReps(e), 0);\n}\n\nexport function History_totalRecordSets(record: IHistoryRecord): number {\n  return record.entries.reduce((memo, e) => memo + History_totalEntrySets(e), 0);\n}\n\nexport function History_totalEntryWeight(entry: IHistoryEntry, settings: ISettings): IWeight {\n  const unit = settings.units;\n  const volume = entry.sets\n    .filter((s) => (s.completedReps || 0) > 0)\n    .reduce((memo, set) => Weight_add(memo, Reps_setVolume(set, unit)), Weight_build(0, unit));\n  return Weight_multiply(volume, Exercise_getVolumeMultiplier(entry.exercise, settings));\n}\n\nexport function History_totalEntryReps(entry: IHistoryEntry): number {\n  return entry.sets.reduce((memo, set) => memo + (set.completedReps || 0), 0);\n}\n\nexport function History_totalEntrySets(entry: IHistoryEntry): number {\n  return History_getFinishedSets(entry).length;\n}\n\nexport function History_getStartedEntries(record: IHistoryRecord): IHistoryEntry[] {\n  return record.entries.filter((e) => e.sets.filter((s) => (s.completedReps || 0) > 0).length > 0);\n}\n\nexport function History_getFinishedSets(entry: IHistoryEntry): ISet[] {\n  return entry.sets.filter((s) => Reps_isFinishedSet(s));\n}\n\nexport function History_getHistoricalSameDay(\n  history: IHistoryRecord[],\n  progress: IHistoryRecord,\n  currentEntry: IHistoryEntry\n): IHistoryRecordAndEntry | undefined {\n  for (const record of history) {\n    if (record.day === progress.day) {\n      for (const entry of record.entries) {\n        if (\n          Exercise_eq(currentEntry.exercise, entry.exercise) &&\n          entry.sets.length > 0 &&\n          entry.sets.some((s) => (s.completedReps || 0) > 0)\n        ) {\n          return { record, entry };\n        }\n      }\n    }\n  }\n  return undefined;\n}\n\nexport function History_getHistoricalLastDay(\n  history: IHistoryRecord[],\n  currentEntry: IHistoryEntry\n): IHistoryRecordAndEntry | undefined {\n  for (const record of history) {\n    for (const entry of record.entries) {\n      if (\n        Exercise_eq(currentEntry.exercise, entry.exercise) &&\n        entry.sets.length > 0 &&\n        entry.sets.some((s) => (s.completedReps || 0) > 0)\n      ) {\n        return { record, entry };\n      }\n    }\n  }\n  return undefined;\n}\n\nexport function History_calories(historyRecord: IHistoryRecord): number {\n  const timeMs = History_workoutTime(historyRecord);\n  const minutes = Math.floor(timeMs / 60000);\n  return minutes * 6;\n}\n\nexport function History_getHistoricalAmrapSets(\n  history: IHistoryRecord[],\n  currentEntry: IHistoryEntry,\n  nextSet?: ISet\n): { last: [ISet, number]; max: [ISet, number] } | undefined {\n  if (!nextSet?.isAmrap) {\n    return undefined;\n  }\n  let last: [ISet, number] | undefined;\n  let max: [ISet, number] | undefined;\n  for (const record of history) {\n    for (const entry of record.entries) {\n      if (Exercise_eq(currentEntry.exercise, entry.exercise)) {\n        for (const set of entry.sets) {\n          if (\n            set.isAmrap &&\n            set.reps === nextSet.reps &&\n            Weight_eq(set.weight ?? Weight_build(0, \"lb\"), nextSet.weight ?? Weight_build(0, \"lb\"))\n          ) {\n            if (last == null) {\n              last = [set, record.startTime];\n            }\n            if (max == null || (set.completedReps || 0) > (max[0].completedReps || 0)) {\n              max = [set, record.startTime];\n            }\n          }\n        }\n      }\n    }\n  }\n  return last != null && max != null ? { last, max } : undefined;\n}\n\nexport function History_exportAsCSV(history: IHistoryRecord[], settings: ISettings): (string | number | null)[][] {\n  const lines: (string | number | null)[][] = [\n    [\n      \"Workout DateTime\",\n      \"Program\",\n      \"Day Name\",\n      \"Exercise\",\n      \"Is Warmup Set?\",\n      \"Required Reps\",\n      \"Completed Reps\",\n      \"Is AMRAP?\",\n      \"Required RPE\",\n      \"Completed RPE\",\n      \"Log RPE?\",\n      \"Required Weight Value\",\n      \"Required Weight Unit\",\n      \"Completed Weight Value\",\n      \"Completed Weight Unit\",\n      \"Ask Weight?\",\n      \"Completed Reps Time\",\n      \"Target Muscles\",\n      \"Synergist Muscles\",\n      \"Notes\",\n      \"Completed Reps Left\",\n      \"Required Set Time Seconds\",\n      \"Is Overflow Set Time?\",\n      \"Completed Set Time Seconds\",\n      \"Completed Set Time Left Seconds\",\n    ],\n  ];\n\n  for (const historyRecord of history) {\n    for (const entry of historyRecord.entries) {\n      const exercise = Exercise_get(entry.exercise, settings.exercises);\n      const setsWithWarmupFlag: [ISet, number][] = [\n        ...entry.warmupSets.map((s): [ISet, number] => [s, 1]),\n        ...entry.sets.map((s): [ISet, number] => [s, 0]),\n      ];\n      for (const [set, isWarmup] of setsWithWarmupFlag) {\n        lines.push([\n          historyRecord.date,\n          historyRecord.programName,\n          historyRecord.dayName,\n          Exercise_fullName(exercise, settings),\n          isWarmup,\n          set.reps ?? null,\n          set.completedReps ?? null,\n          set.isAmrap ? 1 : 0,\n          set.rpe ?? null,\n          set.completedRpe ?? null,\n          set.logRpe ? 1 : 0,\n          set.weight?.value ?? null,\n          set.weight?.unit ?? null,\n          set.completedWeight?.value ?? null,\n          set.completedWeight?.unit ?? null,\n          set.askWeight ? 1 : 0,\n          set.timestamp != null ? new Date(set.timestamp || 0).toISOString() : null,\n          Exercise_targetMuscles(exercise, settings).join(\",\"),\n          Exercise_synergistMuscles(exercise, settings).join(\",\"),\n          entry.notes ?? \"\",\n          set.completedRepsLeft ?? null,\n          set.setTimer ?? null,\n          set.isOverflowSetTimer ? 1 : 0,\n          set.completedSetTimer ?? null,\n          set.completedSetTimerLeft ?? null,\n        ]);\n      }\n    }\n  }\n\n  return lines;\n}\n\nexport function History_pauseWorkoutState(dispatch: IDispatch): void {\n  const lensGetters = { progress: lb<IState>().p(\"storage\").pi(\"progress\").get() };\n  updateState(\n    dispatch,\n    [\n      lbu<IState, typeof lensGetters>(lensGetters)\n        .p(\"storage\")\n        .pi(\"progress\")\n        .i(0)\n        .p(\"intervals\")\n        .recordModify((intervals, getters) => History_pauseWorkout(getters.progress?.[0].intervals)),\n    ],\n    \"Pause workout\"\n  );\n}\n\nexport function History_pauseWorkout(intervals?: IIntervals): IIntervals | undefined {\n  if (intervals && !History_isPaused(intervals)) {\n    const newIntervals = intervals ? ObjectUtils_clone(intervals) : [];\n    let lastInterval = newIntervals[newIntervals.length - 1];\n    if (lastInterval == null) {\n      lastInterval = [Date.now(), undefined];\n      newIntervals.push(lastInterval);\n    }\n    lastInterval[1] = Date.now();\n    return newIntervals;\n  } else {\n    return intervals;\n  }\n}\n\nexport function History_isPaused(intervals?: IIntervals): boolean {\n  return intervals ? intervals.length === 0 || intervals[intervals.length - 1][1] != null : false;\n}\n\nexport function History_resumeWorkout(\n  effects: INativeEffect[],\n  historyRecord: IHistoryRecord,\n  isPlayground: boolean,\n  reminder: number | undefined,\n  hasSubscription: boolean\n): IIntervals | undefined {\n  const intervals = historyRecord.intervals;\n  if (History_isPaused(intervals)) {\n    const isStart = !intervals || intervals.length === 0;\n    if (!isPlayground && Progress_isCurrent(historyRecord)) {\n      effects.push({ type: \"resumeWorkout\", reminder: reminder || 0, isStart, hasSubscription });\n    }\n    const newIntervals = intervals ? ObjectUtils_clone(intervals) : [];\n    newIntervals.push([Date.now(), undefined]);\n    return newIntervals;\n  } else {\n    return intervals;\n  }\n}\n\nexport function History_workoutTime(\n  historyRecord: Pick<IHistoryRecord, \"startTime\" | \"endTime\" | \"intervals\">\n): number {\n  const intervals = historyRecord.intervals || [[historyRecord.startTime, historyRecord.endTime || Date.now()]];\n  return intervals.reduce((memo, interval) => {\n    return memo + ((interval[1] || Date.now()) - interval[0]);\n  }, 0);\n}\n\nexport const History_getDateToHistory = memoize(\n  (history: IHistoryRecord[]): Partial<Record<string, IHistoryRecord>> => {\n    return history.reduce<Partial<Record<string, IHistoryRecord>>>((memo, hr) => {\n      memo[DateUtils_formatYYYYMMDD(hr.date)] = hr;\n      return memo;\n    }, {});\n  },\n  { maxSize: 10 }\n);\n\nexport const History_getPersonalRecords = memoize(\n  (history: IHistoryRecord[]): IPersonalRecords => {\n    const result: IPersonalRecords = {};\n    const sortedHistory = CollectionUtils_sortByExpr(history, (hr) => hr.endTime ?? hr.startTime);\n    const max1RMSets: Partial<Record<string, ISet | undefined>> = {};\n    const maxWeightSets: Partial<Record<string, ISet | undefined>> = {};\n    for (const record of sortedHistory) {\n      for (const entry of record.entries) {\n        const key = Exercise_toKey(entry.exercise);\n\n        const thisMaxWeightSet = History_getMaxWeightSetFromEntry(entry);\n        const thisMaxWeight = thisMaxWeightSet\n          ? (thisMaxWeightSet.completedWeight ?? thisMaxWeightSet.weight)\n          : undefined;\n        const lastMaxWeight = maxWeightSets[key]?.completedWeight ?? maxWeightSets[key]?.weight;\n        if (thisMaxWeight != null && (lastMaxWeight == null || Weight_gt(thisMaxWeight, lastMaxWeight))) {\n          const prevMaxWeightSet = maxWeightSets[key];\n          maxWeightSets[key] = thisMaxWeightSet;\n          result[record.id] = result[record.id] || {};\n          result[record.id]![key] = result[record.id]![key] || {};\n          result[record.id]![key]!.prevMaxWeightSet = prevMaxWeightSet;\n          result[record.id]![key]!.maxWeightSet = thisMaxWeightSet;\n        }\n\n        const thisMax1RMSet = History_getMax1RMSetFromEntry(entry);\n        const thisMax1RM = thisMax1RMSet\n          ? Weight_getOneRepMax(\n              thisMax1RMSet.completedWeight ?? thisMax1RMSet.weight ?? Weight_build(0, \"lb\"),\n              Reps_avgUnilateralCompletedReps(thisMax1RMSet) || 0,\n              thisMax1RMSet.completedRpe ?? thisMax1RMSet.rpe\n            )\n          : undefined;\n        const lastMax1RMSet = max1RMSets[key];\n        const lastMax1RM = lastMax1RMSet\n          ? Weight_getOneRepMax(\n              lastMax1RMSet.completedWeight ?? lastMax1RMSet.weight ?? Weight_build(0, \"lb\"),\n              lastMax1RMSet ? Reps_avgUnilateralCompletedReps(lastMax1RMSet) || 0 : 0,\n              lastMax1RMSet.completedRpe ?? lastMax1RMSet.rpe\n            )\n          : undefined;\n        if (thisMax1RM != null && (lastMax1RM == null || Weight_gt(thisMax1RM, lastMax1RM))) {\n          const prevMax1RMSet = max1RMSets[key];\n          max1RMSets[key] = thisMax1RMSet;\n          result[record.id] = result[record.id] || {};\n          result[record.id]![key] = result[record.id]![key] || {};\n          result[record.id]![key]!.prevMax1RMSet = prevMax1RMSet;\n          result[record.id]![key]!.max1RMSet = thisMax1RMSet;\n        }\n      }\n    }\n    return result;\n  },\n  { maxSize: 10 }\n);\n\nexport interface IGraphsAggregates {\n  sortedHistory: IHistoryRecord[];\n  muscleGroupsData: Record<IScreenMuscle | \"total\", [number[], number[], number[]]>;\n  programChangeTimes: { currentProgram?: string; changeProgramTimes: [number, string][] };\n}\n\n// Aggregates used by the Graphs screen. Memoized by history+settings refs (lens-shmens\n// gives us stable refs for unchanged subtrees), so this returns instantly across screen\n// mount/unmount cycles. Also called from App.native.tsx during idle time to warm the\n// cache so the first Graphs visit is fast.\nexport const History_getGraphsAggregates = memoize(\n  (history: IHistoryRecord[], settings: ISettings): IGraphsAggregates => {\n    const sortedHistory = CollectionUtils_sort(history, (a, b) => {\n      return new Date(Date.parse(a.date)).getTime() - new Date(Date.parse(b.date)).getTime();\n    });\n    const [muscleGroupsData, programChangeTimes] = Collector.build(sortedHistory)\n      .addFn(History_collectMuscleGroups(settings))\n      .addFn(History_collectProgramChangeTimes())\n      .run();\n    return { sortedHistory, muscleGroupsData, programChangeTimes };\n  },\n  { maxSize: 5 }\n);\n\nexport interface IHomeWeekData {\n  firstDayOfWeeks: number[];\n  firstDayOfWeekToHistoryRecord: Partial<Record<number, IHistoryRecord>>;\n  historyRecordDateToFirstDayOfWeek: Partial<Record<number, number>>;\n}\n\nfunction buildHomeWeekData(history: IHistoryRecord[], startWeekFromMonday: boolean): IHomeWeekData {\n  const firstDayOfWeeksSet: Set<number> = new Set();\n  const historyRecordDateToFirstDayOfWeek: Partial<Record<number, number>> = {};\n  const firstDayOfWeekToHistoryRecord: Partial<Record<number, IHistoryRecord>> = {};\n  for (const record of history) {\n    if (!Progress_isCurrent(record)) {\n      const firstDayOfWeek = DateUtils_firstDayOfWeekTimestamp(record.endTime ?? record.startTime, startWeekFromMonday);\n      if (firstDayOfWeekToHistoryRecord[firstDayOfWeek] == null) {\n        firstDayOfWeekToHistoryRecord[firstDayOfWeek] = record;\n      }\n      firstDayOfWeeksSet.add(firstDayOfWeek);\n      historyRecordDateToFirstDayOfWeek[record.id] = firstDayOfWeek;\n    }\n  }\n  if (firstDayOfWeeksSet.size === 0) {\n    const today = new Date();\n    const firstDayOfWeek = DateUtils_firstDayOfWeekTimestamp(today.getTime(), startWeekFromMonday);\n    firstDayOfWeeksSet.add(firstDayOfWeek);\n  }\n  return {\n    firstDayOfWeeks: CollectionUtils_sort(Array.from(firstDayOfWeeksSet)),\n    historyRecordDateToFirstDayOfWeek,\n    firstDayOfWeekToHistoryRecord,\n  };\n}\n\nexport interface IHomeAggregates {\n  sortedHistoryDesc: IHistoryRecord[];\n  weeksData: IHomeWeekData;\n  prs: IPersonalRecords;\n}\n\nexport const History_getHomeAggregates = memoize(\n  (history: IHistoryRecord[], startWeekFromMonday: boolean): IHomeAggregates => {\n    const sortedHistoryDesc = CollectionUtils_sort(history, (a, b) => {\n      return new Date(Date.parse(b.date)).getTime() - new Date(Date.parse(a.date)).getTime();\n    });\n    const weeksData = buildHomeWeekData(sortedHistoryDesc, startWeekFromMonday);\n    const prs = History_getPersonalRecords(history);\n    return { sortedHistoryDesc, weeksData, prs };\n  },\n  { maxSize: 3 }\n);\n","import { IAllCustomExercises, ICustomExercise, IHistoryRecord, IImportSession, IStorage } from \"../types\";\nimport { CollectionUtils_sortBy, CollectionUtils_uniqBy } from \"../utils/collection\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { Exercise_deleteCustomExercise } from \"./exercise\";\nimport { History_deleteRecords } from \"./history\";\n\nconst maxImportSessions = 5;\n\nexport interface IAppliedImport {\n  history: IHistoryRecord[];\n  exercises: IAllCustomExercises;\n  importSessions: IImportSession[];\n}\n\nexport function ImportSession_apply(\n  storage: IStorage,\n  historyRecords: IHistoryRecord[],\n  customExercises: Record<string, ICustomExercise>,\n  source: IImportSession[\"source\"]\n): IAppliedImport {\n  const existingIds = new Set(storage.history.map((r) => r.id));\n  const history = CollectionUtils_sortBy(CollectionUtils_uniqBy(storage.history.concat(historyRecords), \"id\"), \"id\");\n  const addedHistoryIds = history.filter((r) => !existingIds.has(r.id)).map((r) => r.id);\n  const addedCustomExerciseIds = Object.keys(customExercises).filter((k) => storage.settings.exercises[k] == null);\n  // Only add custom exercises that don't already exist - an existing one with the same id may have\n  // been renamed/edited locally, and overwriting it would be silent and unrecoverable (undo can't\n  // restore it because it's excluded from the receipt as a pre-existing id).\n  const exercises = { ...storage.settings.exercises };\n  for (const id of addedCustomExerciseIds) {\n    exercises[id] = customExercises[id];\n  }\n  const session: IImportSession = {\n    vtype: \"import_session\",\n    id: UidFactory_generateUid(8),\n    timestamp: Date.now(),\n    source,\n    historyRecordIds: addedHistoryIds,\n    customExerciseIds: addedCustomExerciseIds,\n    workoutCount: addedHistoryIds.length,\n  };\n  return {\n    history,\n    exercises,\n    importSessions: [...(storage.importSessions ?? []), session].slice(-maxImportSessions),\n  };\n}\n\nexport function ImportSession_findEditedRecordIds(storage: IStorage, session: IImportSession): number[] {\n  const importedIds = new Set(session.historyRecordIds);\n  return storage.history\n    .filter((r) => importedIds.has(r.id) && r.updatedAt != null && r.updatedAt > session.timestamp)\n    .map((r) => r.id);\n}\n\nexport function ImportSession_undo(storage: IStorage, sessionId: string): IStorage | undefined {\n  const session = (storage.importSessions ?? []).find((s) => s.id === sessionId);\n  if (session == null) {\n    return undefined;\n  }\n  const undone = History_deleteRecords(storage, session.historyRecordIds);\n  let exercises = undone.settings.exercises;\n  for (const exerciseId of session.customExerciseIds) {\n    if (!isExerciseReferenced(undone, exerciseId)) {\n      exercises = Exercise_deleteCustomExercise(exercises, exerciseId);\n    }\n  }\n  return {\n    ...undone,\n    settings: { ...undone.settings, exercises },\n    importSessions: (undone.importSessions ?? []).filter((s) => s.id !== sessionId),\n  };\n}\n\nfunction isExerciseReferenced(storage: IStorage, exerciseId: string): boolean {\n  const exercise = storage.settings.exercises[exerciseId];\n  if (exercise == null) {\n    return false;\n  }\n  if (storage.history.concat(storage.progress).some((r) => r.entries.some((e) => e.exercise.id === exerciseId))) {\n    return true;\n  }\n  const name = exercise.name.toLowerCase();\n  return storage.programs.some((p) =>\n    (p.planner?.weeks ?? []).some((w) => w.days.some((d) => d.exerciseText.toLowerCase().includes(name)))\n  );\n}\n","import { ILength, ILengthUnit } from \"../types\";\n\nconst prebuiltLengths: Partial<Record<string, ILength>> = {};\n\nexport function Length_print(length: ILength): string {\n  return `${length.value}${Length_printUnit(length.unit)}`;\n}\n\nexport function Length_printUnit(lengthUnit: ILengthUnit): string {\n  return lengthUnit === \"in\" ? '\"' : lengthUnit;\n}\n\nexport function Length_build(value: number, unit: ILengthUnit): ILength {\n  const key = `${value}_${unit}`;\n  const prebuiltLength = prebuiltLengths[key];\n  if (prebuiltLength != null) {\n    return prebuiltLength;\n  } else {\n    const v = { value: typeof value === \"string\" ? parseFloat(value) : value, unit };\n    prebuiltLengths[`${value}_${unit}`] = v;\n    return v;\n  }\n}\n\nexport function Length_is(object: unknown): object is ILength {\n  const objLen = object as ILength;\n  return (\n    objLen &&\n    typeof objLen === \"object\" &&\n    \"unit\" in objLen &&\n    \"value\" in objLen &&\n    (objLen.unit === \"cm\" || objLen.unit === \"in\")\n  );\n}\n\nexport function Length_add(length: ILength, value: ILength): ILength {\n  return Length_operation(length, value, (a, b) => a + b);\n}\n\nexport function Length_subtract(length: ILength, value: ILength): ILength {\n  return Length_operation(length, value, (a, b) => a - b);\n}\n\nexport function Length_multiply(length: ILength, value: ILength): ILength {\n  return Length_operation(length, value, (a, b) => a * b);\n}\n\nexport function Length_divide(length: ILength, value: ILength): ILength {\n  return Length_operation(length, value, (a, b) => a / b);\n}\n\nexport function Length_gt(length: ILength, value: ILength): boolean {\n  return comparison(length, value, (a, b) => a > b);\n}\n\nexport function Length_lt(length: ILength, value: ILength): boolean {\n  return comparison(length, value, (a, b) => a < b);\n}\n\nexport function Length_gte(length: ILength, value: ILength): boolean {\n  return comparison(length, value, (a, b) => a >= b);\n}\n\nexport function Length_lte(length: ILength, value: ILength): boolean {\n  return comparison(length, value, (a, b) => a <= b);\n}\n\nexport function Length_eq(length: ILength, value: ILength): boolean {\n  return comparison(length, value, (a, b) => a === b);\n}\n\nexport function Length_eqeq(length: ILength, value: ILength): boolean {\n  return length.value === value.value && length.unit === value.unit;\n}\n\nexport function Length_convertTo(length: ILength, unit: ILengthUnit): ILength {\n  if (length.unit === unit) {\n    return length;\n  } else if (length.unit === \"in\" && unit === \"cm\") {\n    return Length_build(parseFloat((length.value * 2.54).toFixed(2)), unit);\n  } else {\n    return Length_build(parseFloat((length.value / 2.54).toFixed(2)), unit);\n  }\n}\n\nexport function Length_compare(a: ILength, b: ILength): number {\n  return a.value - Length_convertTo(b, a.unit).value;\n}\n\nexport function Length_compareReverse(a: ILength, b: ILength): number {\n  return Length_convertTo(b, a.unit).value - a.value;\n}\n\nfunction comparison(length: ILength, value: ILength, op: (a: number, b: number) => boolean): boolean {\n  return op(length.value, Length_convertTo(value, length.unit).value);\n}\n\nexport function Length_operation(length: ILength, value: ILength, op: (a: number, b: number) => number): ILength {\n  return Length_build(op(length.value, Length_convertTo(value, length.unit).value), length.unit);\n}\n","import {\n  IEvaluatedProgram,\n  IEvaluatedProgramDay,\n  Program_getProgramDayUsedExercises,\n  Program_nextHistoryEntry,\n} from \"./program\";\nimport {\n  Exercise_toKey,\n  Exercise_targetMuscles,\n  Exercise_synergistMuscles,\n  Exercise_synergistMusclesGroupMultipliers,\n} from \"./exercise\";\nimport {\n  ObjectUtils_keys,\n  ObjectUtils_findMaxValue,\n  ObjectUtils_combinedKeys,\n  ObjectUtils_clone,\n} from \"../utils/object\";\nimport {\n  ISettings,\n  IMuscle,\n  IDayData,\n  IScreenMuscle,\n  IStats,\n  screenMuscles,\n  IMuscleGroupsSettings,\n  IExerciseType,\n} from \"../types\";\nimport { StringUtils_dashcase, StringUtils_capitalize } from \"../utils/string\";\nimport {\n  IMusclePoints,\n  UngroupedMuscles_add,\n  UngroupedMuscles_divide,\n  UngroupedMuscles_pointsPerSet,\n} from \"./ungroupedMuscles\";\nimport { IPlannerProgramExerciseWithType } from \"../pages/planner/models/types\";\nimport { SetUtils_areEqual } from \"../utils/setUtils\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\n\nexport type IScreenMusclePointsColl = Partial<Record<IScreenMuscle, number>>;\n\nexport interface IScreenMusclePoints {\n  strength: IScreenMusclePointsColl;\n  hypertrophy: IScreenMusclePointsColl;\n}\n\nexport type IExercisePointsColl = Partial<Record<string, IScreenMusclePointsColl>>;\n\nexport interface IExercisePoints {\n  strength: IExercisePointsColl;\n  hypertrophy: IExercisePointsColl;\n}\n\nexport interface IUnifiedPoints {\n  screenMusclePoints: IScreenMusclePointsColl;\n  exercisePoints: IExercisePointsColl;\n  ungroupedMusclePoints: IMusclePoints;\n}\n\nexport interface IPoints {\n  screenMusclePoints: IScreenMusclePoints;\n  exercisePoints: IExercisePoints;\n  ungroupedMusclePoints: { strength: IMusclePoints; hypertrophy: IMusclePoints };\n}\n\nconst screenMuscleToMuscleMapping: Record<IScreenMuscle, IMuscle[]> = {\n  chest: [\"Pectoralis Major Clavicular Head\", \"Pectoralis Major Sternal Head\"],\n  lats: [\"Latissimus Dorsi\", \"Teres Major\"],\n  upperBack: [\"Trapezius Middle Fibers\", \"Trapezius Lower Fibers\"],\n  frontDelts: [\"Deltoid Anterior\"],\n  sideDelts: [\"Deltoid Lateral\"],\n  rearDelts: [\"Deltoid Posterior\"],\n  biceps: [\"Biceps Brachii\", \"Brachialis\", \"Brachioradialis\"],\n  triceps: [\"Triceps Brachii\"],\n  quadriceps: [\"Quadriceps\"],\n  hamstrings: [\"Hamstrings\"],\n  glutes: [\"Gluteus Maximus\"],\n  calves: [\"Gastrocnemius\", \"Soleus\"],\n  abs: [\"Rectus Abdominis\"],\n  upperTraps: [\"Trapezius Upper Fibers\", \"Levator Scapulae\"],\n  lowerBack: [\"Erector Spinae\"],\n  neck: [\"Sternocleidomastoid\", \"Splenius\"],\n  rotatorCuff: [\"Infraspinatus\", \"Teres Minor\"],\n  forearmFlexors: [\"Wrist Flexors\"],\n  forearmExtensors: [\"Wrist Extensors\"],\n  obliques: [\"Obliques\"],\n  hipFlexors: [\"Iliopsoas\", \"Sartorius\"],\n  abductors: [\"Gluteus Medius\", \"Tensor Fasciae Latae\"],\n  adductors: [\"Adductor Magnus\", \"Adductor Brevis\", \"Adductor Longus\", \"Pectineous\"],\n};\n\nconst builtinMuscleGroupNames: Record<IScreenMuscle, string> = {\n  chest: \"Chest\",\n  lats: \"Lats\",\n  upperBack: \"Upper Back\",\n  frontDelts: \"Front Delts\",\n  sideDelts: \"Side Delts\",\n  rearDelts: \"Rear Delts\",\n  biceps: \"Biceps\",\n  triceps: \"Triceps\",\n  quadriceps: \"Quads\",\n  hamstrings: \"Hamstrings\",\n  glutes: \"Glutes\",\n  calves: \"Calves\",\n  abs: \"Abs\",\n  upperTraps: \"Upper Traps\",\n  lowerBack: \"Lower Back\",\n  neck: \"Neck\",\n  rotatorCuff: \"Rotator Cuff\",\n  forearmFlexors: \"Forearm Flexors\",\n  forearmExtensors: \"Forearm Extensors\",\n  obliques: \"Obliques\",\n  hipFlexors: \"Hip Flexors\",\n  abductors: \"Abductors\",\n  adductors: \"Adductors\",\n};\n\nexport const Muscle_groupsWithDefaultRange: IScreenMuscle[] = [\n  \"chest\",\n  \"lats\",\n  \"upperBack\",\n  \"frontDelts\",\n  \"sideDelts\",\n  \"rearDelts\",\n  \"biceps\",\n  \"triceps\",\n  \"quadriceps\",\n  \"hamstrings\",\n  \"glutes\",\n  \"calves\",\n  \"abs\",\n];\n\nexport function Muscle_imageUrl(muscle: IMuscle): string {\n  return `/externalimages/muscles/muscle-${StringUtils_dashcase(muscle)}.jpeg`;\n}\n\nfunction normalize(obj: IScreenMusclePointsColl, maxValue: number): IScreenMusclePointsColl {\n  return ObjectUtils_keys(obj).reduce<IScreenMusclePointsColl>((memo, key) => {\n    memo[key] = (obj[key] || 0) / maxValue;\n    return memo;\n  }, {});\n}\n\nexport function Muscle_normalizePoints(points: IPoints): IPoints {\n  const maxValues = {\n    strength: Math.max(\n      ObjectUtils_findMaxValue(points.screenMusclePoints.strength),\n      ObjectUtils_findMaxValue(points.ungroupedMusclePoints.strength)\n    ),\n    hypertrophy: Math.max(\n      ObjectUtils_findMaxValue(points.screenMusclePoints.hypertrophy),\n      ObjectUtils_findMaxValue(points.ungroupedMusclePoints.hypertrophy)\n    ),\n  };\n  return {\n    screenMusclePoints: {\n      strength: normalize(points.screenMusclePoints.strength, maxValues.strength),\n      hypertrophy: normalize(points.screenMusclePoints.hypertrophy, maxValues.hypertrophy),\n    },\n    exercisePoints: {\n      strength: ObjectUtils_keys(points.exercisePoints.strength).reduce<IExercisePointsColl>((memo, key) => {\n        memo[key] = normalize(points.exercisePoints.strength[key]!, maxValues.strength);\n        return memo;\n      }, {}),\n      hypertrophy: ObjectUtils_keys(points.exercisePoints.hypertrophy).reduce<IExercisePointsColl>((memo, key) => {\n        memo[key] = normalize(points.exercisePoints.hypertrophy[key]!, maxValues.hypertrophy);\n        return memo;\n      }, {}),\n    },\n    ungroupedMusclePoints: {\n      strength: UngroupedMuscles_divide(points.ungroupedMusclePoints.strength, maxValues.strength),\n      hypertrophy: UngroupedMuscles_divide(points.ungroupedMusclePoints.hypertrophy, maxValues.hypertrophy),\n    },\n  };\n}\n\nexport function Muscle_normalizeUnifiedPoints(points: IUnifiedPoints): IUnifiedPoints {\n  const maxValues = Math.max(\n    ObjectUtils_findMaxValue(points.screenMusclePoints),\n    ObjectUtils_findMaxValue(points.ungroupedMusclePoints)\n  );\n  return {\n    screenMusclePoints: normalize(points.screenMusclePoints, maxValues),\n    exercisePoints: ObjectUtils_keys(points.exercisePoints).reduce<IExercisePointsColl>((memo, key) => {\n      memo[key] = normalize(points.exercisePoints[key]!, maxValues);\n      return memo;\n    }, {}),\n    ungroupedMusclePoints: UngroupedMuscles_divide(points.ungroupedMusclePoints, maxValues),\n  };\n}\n\nexport function Muscle_combinePoints(points: IPoints): IPoints {\n  return {\n    screenMusclePoints: {\n      strength: ObjectUtils_keys(points.screenMusclePoints.strength).reduce<IScreenMusclePointsColl>((memo, key) => {\n        memo[key] = (memo[key] || 0) + points.screenMusclePoints.strength[key]!;\n        return memo;\n      }, {}),\n      hypertrophy: {},\n    },\n    exercisePoints: {\n      strength: {},\n      hypertrophy: {},\n    },\n    ungroupedMusclePoints: { strength: { ...points.ungroupedMusclePoints.strength }, hypertrophy: {} },\n  };\n}\n\nexport function Muscle_getScreenMusclesFromMuscle(muscle: IMuscle, settings: ISettings): (IScreenMuscle | string)[] {\n  const availableMuscleGroups = Muscle_getAvailableMuscleGroups(settings);\n  const matchingMuscleGroups = availableMuscleGroups.filter((mg) => {\n    const muscles = settings.muscleGroups.data[mg]?.muscles ?? screenMuscleToMuscleMapping[mg as IScreenMuscle] ?? [];\n    return muscles.includes(muscle);\n  });\n  return matchingMuscleGroups;\n}\n\nexport function Muscle_getMuscleGroupName(muscleGroup: IScreenMuscle, settings: ISettings): string {\n  return (\n    settings.muscleGroups.data[muscleGroup]?.name ??\n    builtinMuscleGroupNames[muscleGroup] ??\n    StringUtils_capitalize(muscleGroup)\n  );\n}\n\nexport function Muscle_isDefaultMuscles(muscleGroup: IScreenMuscle, muscles: IMuscle[]): boolean {\n  const defaultMuscles = screenMuscleToMuscleMapping[muscleGroup as IScreenMuscle] ?? [];\n  return SetUtils_areEqual(new Set(defaultMuscles), new Set(muscles));\n}\n\nexport function Muscle_getAvailableMuscleGroups(settings: ISettings): IScreenMuscle[] {\n  return [\n    ...screenMuscles.filter((sm) => !settings.muscleGroups.data[sm]?.isHidden),\n    ...Object.keys(settings.muscleGroups.data).filter((k) => !(screenMuscles as readonly string[]).includes(k)),\n  ];\n}\n\nexport function Muscle_getBuiltinMuscleGroups(): IScreenMuscle[] {\n  return screenMuscles;\n}\n\nexport function Muscle_getHiddenMuscleGroups(settings: ISettings): IScreenMuscle[] {\n  return [...screenMuscles.filter((sm) => settings.muscleGroups.data[sm]?.isHidden)];\n}\n\nexport function Muscle_getMusclesFromScreenMuscle(muscleGroup: IScreenMuscle | string, settings: ISettings): IMuscle[] {\n  const availableMuscleGroups = Muscle_getAvailableMuscleGroups(settings);\n  if (!availableMuscleGroups.includes(muscleGroup)) {\n    return [];\n  }\n  return (\n    settings.muscleGroups.data[muscleGroup]?.muscles ?? screenMuscleToMuscleMapping[muscleGroup as IScreenMuscle] ?? []\n  );\n}\n\nexport function Muscle_isBuiltInMuscleGroup(muscleGroup: IScreenMuscle | string): boolean {\n  return (screenMuscles as readonly string[]).includes(muscleGroup);\n}\n\nexport function Muscle_getPointsForProgram(program: IEvaluatedProgram, stats: IStats, settings: ISettings): IPoints {\n  const screenMusclePoints: IScreenMusclePoints = {\n    strength: {},\n    hypertrophy: {},\n  };\n  const exercisePoints: IExercisePoints = {\n    strength: {},\n    hypertrophy: {},\n  };\n\n  return program.weeks[0].days.reduce(\n    (memo, day) => mergePoints(memo, Muscle_getPointsForDay(program, day, stats, settings)),\n    {\n      screenMusclePoints,\n      exercisePoints,\n      ungroupedMusclePoints: { strength: {}, hypertrophy: {} },\n    }\n  );\n}\n\nexport function Muscle_getPointsForDay(\n  program: IEvaluatedProgram,\n  programDay: IEvaluatedProgramDay,\n  stats: IStats,\n  settings: ISettings\n): IPoints {\n  const screenMusclePoints: IScreenMusclePoints = {\n    strength: {},\n    hypertrophy: {},\n  };\n  const exercisePoints: IExercisePoints = {\n    strength: {},\n    hypertrophy: {},\n  };\n\n  const dayExercises = Program_getProgramDayUsedExercises(programDay);\n  return dayExercises.reduce(\n    (memo, exercise) => {\n      return mergePoints(memo, Muscle_getPointsForExercise(program, exercise, programDay.dayData, settings, stats));\n    },\n    { screenMusclePoints, exercisePoints, ungroupedMusclePoints: { strength: {}, hypertrophy: {} } }\n  );\n}\n\nexport function Muscle_getUnifiedPointsForDay(\n  program: IEvaluatedProgram,\n  programDay: IEvaluatedProgramDay,\n  stats: IStats,\n  settings: ISettings\n): IUnifiedPoints {\n  const screenMusclePoints: IScreenMusclePointsColl = {};\n  const exercisePoints: IExercisePointsColl = {};\n\n  const dayExercises = Program_getProgramDayUsedExercises(programDay);\n  return dayExercises.reduce(\n    (memo, exercise) => {\n      return mergeUnifiedPoints(\n        memo,\n        Muscle_getUnifiedPointsForExercise(program, exercise, programDay.dayData, settings, stats)\n      );\n    },\n    { screenMusclePoints, exercisePoints, ungroupedMusclePoints: {} }\n  );\n}\n\nexport function Muscle_screenMusclesByRole(\n  exerciseType: IExerciseType,\n  settings: ISettings\n): { screenTargetMuscles: IScreenMuscle[]; screenSynergistMuscles: IScreenMuscle[] } {\n  const screenTargetMuscles = Array.from(\n    new Set(\n      Exercise_targetMuscles(exerciseType, settings).flatMap((t) => Muscle_getScreenMusclesFromMuscle(t, settings))\n    )\n  );\n  const screenSynergistMuscles = Array.from(\n    new Set(\n      Exercise_synergistMuscles(exerciseType, settings).flatMap((t) => Muscle_getScreenMusclesFromMuscle(t, settings))\n    )\n  ).filter((muscleGroup) => !screenTargetMuscles.includes(muscleGroup));\n  return { screenTargetMuscles, screenSynergistMuscles };\n}\n\nexport function Muscle_getUnifiedPointsForExercise(\n  program: IEvaluatedProgram,\n  programExercise: IPlannerProgramExerciseWithType,\n  dayData: IDayData,\n  settings: ISettings,\n  stats: IStats\n): IUnifiedPoints {\n  const screenMusclePoints: IScreenMusclePointsColl = {};\n  const exercisePoints: IExercisePointsColl = {};\n\n  const id = Exercise_toKey(programExercise.exerciseType);\n  const historyEntry = Program_nextHistoryEntry(program, dayData, 0, programExercise, stats, settings);\n  const { screenTargetMuscles, screenSynergistMuscles } = Muscle_screenMusclesByRole(\n    programExercise.exerciseType,\n    settings\n  );\n  const synergistMuscleGroupToMultiplier = Exercise_synergistMusclesGroupMultipliers(\n    programExercise.exerciseType,\n    settings\n  );\n  for (const _set of historyEntry.sets) {\n    for (const muscle of screenTargetMuscles) {\n      screenMusclePoints[muscle] = screenMusclePoints[muscle] || 0;\n      screenMusclePoints[muscle]! += 100;\n      exercisePoints[id] = exercisePoints[id] || {};\n      exercisePoints[id]![muscle] = exercisePoints[id]![muscle] || 0;\n      exercisePoints[id]![muscle]! += 100;\n    }\n    for (const muscle of screenSynergistMuscles) {\n      screenMusclePoints[muscle] = screenMusclePoints[muscle] || 0;\n      screenMusclePoints[muscle]! +=\n        (synergistMuscleGroupToMultiplier[muscle] ?? settings.planner.synergistMultiplier) * 100;\n      exercisePoints[id] = exercisePoints[id] || {};\n      exercisePoints[id]![muscle] = exercisePoints[id]![muscle] || 0;\n      exercisePoints[id]![muscle]! +=\n        (synergistMuscleGroupToMultiplier[muscle] ?? settings.planner.synergistMultiplier) * 100;\n    }\n  }\n  const ungroupedMusclePoints = UngroupedMuscles_add(\n    {},\n    UngroupedMuscles_pointsPerSet(programExercise.exerciseType, settings),\n    historyEntry.sets.length * 100\n  );\n  return { screenMusclePoints, exercisePoints, ungroupedMusclePoints };\n}\n\nexport function Muscle_getPointsForExercise(\n  program: IEvaluatedProgram,\n  programExercise: IPlannerProgramExerciseWithType,\n  dayData: IDayData,\n  settings: ISettings,\n  stats: IStats\n): IPoints {\n  const screenMusclePoints: IScreenMusclePoints = {\n    strength: {},\n    hypertrophy: {},\n  };\n  const exercisePoints: IExercisePoints = {\n    strength: {},\n    hypertrophy: {},\n  };\n\n  const id = Exercise_toKey(programExercise.exerciseType);\n  const historyEntry = Program_nextHistoryEntry(program, dayData, 0, programExercise, stats, settings);\n  const synergistMuscleGroupToMultiplier = Exercise_synergistMusclesGroupMultipliers(\n    programExercise.exerciseType,\n    settings\n  );\n  const { screenTargetMuscles, screenSynergistMuscles } = Muscle_screenMusclesByRole(\n    programExercise.exerciseType,\n    settings\n  );\n  for (const set of historyEntry.sets) {\n    if ((set.reps ?? 0) >= 8) {\n      for (const muscle of screenTargetMuscles) {\n        screenMusclePoints.hypertrophy[muscle] = screenMusclePoints.hypertrophy[muscle] || 0;\n        screenMusclePoints.hypertrophy[muscle]! += 100;\n        exercisePoints.hypertrophy[id] = exercisePoints.hypertrophy[id] || {};\n        exercisePoints.hypertrophy[id]![muscle] = exercisePoints.hypertrophy[id]![muscle] || 0;\n        exercisePoints.hypertrophy[id]![muscle]! += 100;\n      }\n      for (const muscle of screenSynergistMuscles) {\n        screenMusclePoints.hypertrophy[muscle] = screenMusclePoints.hypertrophy[muscle] || 0;\n        screenMusclePoints.hypertrophy[muscle]! +=\n          100 * (synergistMuscleGroupToMultiplier[muscle] ?? settings.planner.synergistMultiplier);\n        exercisePoints.hypertrophy[id] = exercisePoints.hypertrophy[id] || {};\n        exercisePoints.hypertrophy[id]![muscle] = exercisePoints.hypertrophy[id]![muscle] || 0;\n        exercisePoints.hypertrophy[id]![muscle]! +=\n          100 * (synergistMuscleGroupToMultiplier[muscle] ?? settings.planner.synergistMultiplier);\n      }\n    } else {\n      for (const muscle of screenTargetMuscles) {\n        screenMusclePoints.strength[muscle] = screenMusclePoints.strength[muscle] || 0;\n        screenMusclePoints.strength[muscle]! += 100;\n        exercisePoints.strength[id] = exercisePoints.strength[id] || {};\n        exercisePoints.strength[id]![muscle] = exercisePoints.strength[id]![muscle] || 0;\n        exercisePoints.strength[id]![muscle]! += 100;\n      }\n      for (const muscle of screenSynergistMuscles) {\n        screenMusclePoints.strength[muscle] = screenMusclePoints.strength[muscle] || 0;\n        screenMusclePoints.strength[muscle]! +=\n          100 * (synergistMuscleGroupToMultiplier[muscle] ?? settings.planner.synergistMultiplier);\n        exercisePoints.strength[id] = exercisePoints.strength[id] || {};\n        exercisePoints.strength[id]![muscle] = exercisePoints.strength[id]![muscle] || 0;\n        exercisePoints.strength[id]![muscle]! +=\n          100 * (synergistMuscleGroupToMultiplier[muscle] ?? settings.planner.synergistMultiplier);\n      }\n    }\n  }\n  const perSet = UngroupedMuscles_pointsPerSet(programExercise.exerciseType, settings);\n  const hypertrophySets = historyEntry.sets.filter((set) => (set.reps ?? 0) >= 8).length;\n  const ungroupedMusclePoints = {\n    strength: UngroupedMuscles_add({}, perSet, (historyEntry.sets.length - hypertrophySets) * 100),\n    hypertrophy: UngroupedMuscles_add({}, perSet, hypertrophySets * 100),\n  };\n  return { screenMusclePoints, exercisePoints, ungroupedMusclePoints };\n}\n\nexport function Muscle_mergeScreenMusclePoints(\n  a: IScreenMusclePointsColl,\n  b: IScreenMusclePointsColl\n): IScreenMusclePointsColl {\n  return ObjectUtils_combinedKeys(a, b).reduce<IScreenMusclePointsColl>((memo, screenMuscle) => {\n    const oldValue = a[screenMuscle] || 0;\n    const newValue = b[screenMuscle] || 0;\n    memo[screenMuscle] = oldValue + newValue;\n    return memo;\n  }, {});\n}\n\nexport function Muscle_createMuscleGroup(\n  muscleGroupSettings: IMuscleGroupsSettings,\n  name: string\n): IMuscleGroupsSettings {\n  const id = UidFactory_generateUid(8);\n  return { ...muscleGroupSettings, data: { ...muscleGroupSettings.data, [id]: { name, muscles: [] } } };\n}\n\nexport function Muscle_updateMuscleGroup(\n  muscleGroupSettings: IMuscleGroupsSettings,\n  muscleGroup: IScreenMuscle,\n  muscles: IMuscle[]\n): IMuscleGroupsSettings {\n  const isDefault = Muscle_isDefaultMuscles(muscleGroup, muscles);\n  const newMuscleGroups = ObjectUtils_clone(muscleGroupSettings);\n  if (isDefault) {\n    delete newMuscleGroups.data[muscleGroup]?.muscles;\n  } else {\n    newMuscleGroups.data = newMuscleGroups.data || {};\n    newMuscleGroups.data[muscleGroup] = newMuscleGroups.data[muscleGroup] || {};\n    newMuscleGroups.data[muscleGroup].muscles = muscles;\n  }\n  return newMuscleGroups;\n}\n\nexport function Muscle_deleteMuscleGroup(\n  muscleGroupSettings: IMuscleGroupsSettings,\n  muscleGroup: IScreenMuscle\n): IMuscleGroupsSettings {\n  const isBuiltin = Muscle_isBuiltInMuscleGroup(muscleGroup);\n  if (isBuiltin) {\n    return {\n      ...muscleGroupSettings,\n      data: {\n        ...muscleGroupSettings.data,\n        [muscleGroup]: { ...muscleGroupSettings.data[muscleGroup], isHidden: true },\n      },\n    };\n  } else {\n    const newMuscleGroups = ObjectUtils_clone(muscleGroupSettings);\n    delete newMuscleGroups.data[muscleGroup];\n    return newMuscleGroups;\n  }\n}\n\nexport function Muscle_restoreMuscleGroup(\n  muscleGroupSettings: IMuscleGroupsSettings,\n  muscleGroup: IScreenMuscle\n): IMuscleGroupsSettings {\n  const newMuscleGroups = ObjectUtils_clone(muscleGroupSettings);\n  newMuscleGroups.data = newMuscleGroups.data || {};\n  newMuscleGroups.data[muscleGroup] = newMuscleGroups.data[muscleGroup] || {};\n  newMuscleGroups.data[muscleGroup].isHidden = false;\n  return newMuscleGroups;\n}\n\nfunction mergeExercisePoints(a: IExercisePointsColl, b: IExercisePointsColl): IExercisePointsColl {\n  return ObjectUtils_combinedKeys(a, b).reduce<IExercisePointsColl>((memo, exerciseId) => {\n    const points1 = a[exerciseId] || {};\n    const points2 = b[exerciseId] || {};\n    memo[exerciseId] = Muscle_mergeScreenMusclePoints(points1, points2);\n    return memo;\n  }, {});\n}\n\nfunction mergePoints(oldPoints: IPoints, newPoints: IPoints): IPoints {\n  return {\n    screenMusclePoints: {\n      strength: Muscle_mergeScreenMusclePoints(\n        oldPoints.screenMusclePoints.strength,\n        newPoints.screenMusclePoints.strength\n      ),\n      hypertrophy: Muscle_mergeScreenMusclePoints(\n        oldPoints.screenMusclePoints.hypertrophy,\n        newPoints.screenMusclePoints.hypertrophy\n      ),\n    },\n    exercisePoints: {\n      strength: mergeExercisePoints(oldPoints.exercisePoints.strength, newPoints.exercisePoints.strength),\n      hypertrophy: mergeExercisePoints(oldPoints.exercisePoints.hypertrophy, newPoints.exercisePoints.hypertrophy),\n    },\n    ungroupedMusclePoints: {\n      strength: UngroupedMuscles_add(\n        oldPoints.ungroupedMusclePoints.strength,\n        newPoints.ungroupedMusclePoints.strength,\n        1\n      ),\n      hypertrophy: UngroupedMuscles_add(\n        oldPoints.ungroupedMusclePoints.hypertrophy,\n        newPoints.ungroupedMusclePoints.hypertrophy,\n        1\n      ),\n    },\n  };\n}\n\nfunction mergeUnifiedPoints(oldPoints: IUnifiedPoints, newPoints: IUnifiedPoints): IUnifiedPoints {\n  return {\n    screenMusclePoints: Muscle_mergeScreenMusclePoints(oldPoints.screenMusclePoints, newPoints.screenMusclePoints),\n    exercisePoints: mergeExercisePoints(oldPoints.exercisePoints, newPoints.exercisePoints),\n    ungroupedMusclePoints: UngroupedMuscles_add(oldPoints.ungroupedMusclePoints, newPoints.ungroupedMusclePoints, 1),\n  };\n}\n","import { IGraph, IPlannerSettings, IScreenMuscle, IStorage } from \"../types\";\nimport { ObjectUtils_clone } from \"../utils/object\";\nimport {\n  IFieldVersion,\n  IVersionsObject,\n  IVersionValue,\n  isCollectionVersions,\n  isFieldVersion,\n} from \"./versionTracker/types\";\nimport { Muscle_groupsWithDefaultRange } from \"./muscle\";\nimport { MuscleRangePresets_frequency, MuscleRangePresets_range } from \"./muscleRangePresets\";\n\nexport const MuscleGroupSplit_legacyKeys = [\"shoulders\", \"back\", \"forearms\"];\n\nconst rangeSources: Record<string, IScreenMuscle[]> = {\n  shoulders: [\"frontDelts\", \"sideDelts\", \"rearDelts\"],\n  back: [\"lats\", \"upperBack\"],\n};\n\nconst graphReplacements: Record<string, IScreenMuscle[]> = {\n  shoulders: [\"frontDelts\", \"sideDelts\", \"rearDelts\"],\n  back: [\"lats\", \"upperBack\", \"lowerBack\"],\n  forearms: [\"forearmFlexors\", \"forearmExtensors\"],\n};\n\n// Every replica writes the same Moderate default, so they share one clock and any real edit is newer.\nconst defaultRangeClock = 1;\n\ntype IPlannerDictionaryField = \"weeklyRangeSets\" | \"weeklyFrequency\";\n\nfunction versionsObject(value: IVersionValue | undefined): IVersionsObject | undefined {\n  if (value == null || isFieldVersion(value) || isCollectionVersions(value)) {\n    return undefined;\n  }\n  return value;\n}\n\nfunction ensureVersionsObject(parent: IVersionsObject | undefined, key: string): IVersionsObject | undefined {\n  if (parent == null) {\n    return undefined;\n  }\n  const existing = parent[key];\n  if (existing == null) {\n    const created: IVersionsObject = {};\n    parent[key] = created;\n    return created;\n  }\n  return versionsObject(existing);\n}\n\nfunction fieldVersions(storage: IStorage, field: IPlannerDictionaryField): IVersionsObject | undefined {\n  const settings = ensureVersionsObject(storage._versions, \"settings\");\n  const planner = ensureVersionsObject(settings, \"planner\");\n  return ensureVersionsObject(planner, field);\n}\n\nfunction fieldVersion(versions: IVersionsObject | undefined, key: string): IFieldVersion | undefined {\n  const value = versions?.[key];\n  return isFieldVersion(value) ? value : undefined;\n}\n\nfunction copyLegacyValues<T>(\n  values: Partial<Record<string, T>>,\n  versions: IVersionsObject | undefined,\n  defaultValue: T\n): void {\n  for (const legacyKey of Object.keys(rangeSources)) {\n    const sourceValue = values[legacyKey];\n    if (sourceValue == null) {\n      continue;\n    }\n    const sourceVersion = fieldVersion(versions, legacyKey);\n    for (const target of rangeSources[legacyKey]) {\n      if (values[target] != null || versions?.[target] != null) {\n        continue;\n      }\n      values[target] = ObjectUtils_clone(sourceValue);\n      if (versions && sourceVersion != null) {\n        versions[target] = ObjectUtils_clone(sourceVersion);\n      }\n    }\n  }\n  for (const muscleGroup of Muscle_groupsWithDefaultRange) {\n    if (values[muscleGroup] != null || versions?.[muscleGroup] != null) {\n      continue;\n    }\n    values[muscleGroup] = ObjectUtils_clone(defaultValue);\n    if (versions) {\n      versions[muscleGroup] = defaultRangeClock;\n    }\n  }\n}\n\nfunction migratePlanner(storage: IStorage, planner: IPlannerSettings): void {\n  const defaultRange = MuscleRangePresets_range(\"moderate\");\n  copyLegacyValues(planner.weeklyRangeSets, fieldVersions(storage, \"weeklyRangeSets\"), defaultRange);\n  copyLegacyValues(\n    planner.weeklyFrequency,\n    fieldVersions(storage, \"weeklyFrequency\"),\n    MuscleRangePresets_frequency(defaultRange[1])\n  );\n}\n\nfunction graphKey(graph: IGraph): string {\n  return `${graph.type}:${graph.id}`;\n}\n\nexport function MuscleGroupSplit_replaceGraphs(graphs: IGraph[]): IGraph[] {\n  const seen = new Set(graphs.map(graphKey));\n  const result: IGraph[] = [];\n  for (const graph of graphs) {\n    const replacements = graph.type === \"muscleGroup\" ? graphReplacements[graph.id] : undefined;\n    if (!replacements) {\n      result.push(graph);\n      continue;\n    }\n    for (const id of replacements) {\n      const replacement: IGraph = { vtype: \"graph\", type: \"muscleGroup\", id };\n      if (!seen.has(graphKey(replacement))) {\n        seen.add(graphKey(replacement));\n        result.push(replacement);\n      }\n    }\n  }\n  return result;\n}\n\nfunction removeUndefinedLegacyGroups(storage: IStorage): void {\n  const data = storage.settings.muscleGroups.data;\n  for (const legacyKey of MuscleGroupSplit_legacyKeys) {\n    if (data[legacyKey] != null && data[legacyKey]?.muscles == null) {\n      delete data[legacyKey];\n    }\n  }\n}\n\nexport function MuscleGroupSplit_migrate(aStorage: IStorage): IStorage {\n  const storage = ObjectUtils_clone(aStorage);\n  migratePlanner(storage, storage.settings.planner);\n  storage.settings.graphs.graphs = MuscleGroupSplit_replaceGraphs(storage.settings.graphs.graphs);\n  removeUndefinedLegacyGroups(storage);\n  return storage;\n}\n","import { IPlannerSettings } from \"../types\";\nimport { Muscle_groupsWithDefaultRange } from \"./muscle\";\n\nexport type IMuscleRangePreset = \"low\" | \"moderate\" | \"high\";\n\nexport const MuscleRangePresets_all: IMuscleRangePreset[] = [\"low\", \"moderate\", \"high\"];\n\n// Fractional weekly-set tiers from Pelland et al. 2024; see lambda/scripts/plans/20261022-muscle-groups-split.md.\nconst presetRanges: Record<IMuscleRangePreset, [number, number]> = {\n  low: [4, 10],\n  moderate: [10, 18],\n  high: [18, 30],\n};\n\n// Remmert et al. 2025: growth stops improving measurably past about 11 fractional sets per session.\nconst maxSetsPerSession = 11;\nconst minFrequency = 2;\n\nexport function MuscleRangePresets_range(preset: IMuscleRangePreset): [number, number] {\n  const [min, max] = presetRanges[preset];\n  return [min, max];\n}\n\nexport function MuscleRangePresets_frequency(maxWeeklySets: number): number {\n  return Math.max(minFrequency, Math.ceil(maxWeeklySets / maxSetsPerSession));\n}\n\nexport function MuscleRangePresets_apply(planner: IPlannerSettings, preset: IMuscleRangePreset): IPlannerSettings {\n  const range = MuscleRangePresets_range(preset);\n  const frequency = MuscleRangePresets_frequency(range[1]);\n  const weeklyRangeSets = { ...planner.weeklyRangeSets };\n  const weeklyFrequency = { ...planner.weeklyFrequency };\n  for (const muscleGroup of Muscle_groupsWithDefaultRange) {\n    weeklyRangeSets[muscleGroup] = [range[0], range[1]];\n    weeklyFrequency[muscleGroup] = frequency;\n  }\n  return { ...planner, weeklyRangeSets, weeklyFrequency };\n}\n\nexport function MuscleRangePresets_current(planner: IPlannerSettings): IMuscleRangePreset | undefined {\n  return MuscleRangePresets_all.find((preset) => {\n    const [min, max] = presetRanges[preset];\n    const frequency = MuscleRangePresets_frequency(max);\n    return Muscle_groupsWithDefaultRange.every((muscleGroup) => {\n      const range = planner.weeklyRangeSets[muscleGroup];\n      return range?.[0] === min && range[1] === max && planner.weeklyFrequency[muscleGroup] === frequency;\n    });\n  });\n}\n","import { ILiveActivityState } from \"../utils/liveActivityState\";\nimport { INativeTimerStartParams, ITimerBridge } from \"../utils/timerBridge\";\nimport { IWatchBridge } from \"../utils/watchBridge\";\nimport { IWorkoutBridge } from \"../utils/workoutBridge\";\nimport { IWorkoutMirroring } from \"../utils/workoutMirroring\";\n\nexport type INativeEffect =\n  | { type: \"startTimer\"; params: INativeTimerStartParams }\n  | { type: \"stopTimer\" }\n  | { type: \"updateLiveActivity\"; state: ILiveActivityState }\n  | { type: \"resumeWorkout\"; reminder: number; isStart: boolean; hasSubscription: boolean }\n  | { type: \"pauseWorkout\" }\n  | { type: \"discardWorkout\" };\n\nexport interface INativeEffectBridges {\n  timer: ITimerBridge;\n  workout: IWorkoutBridge;\n  watch: IWatchBridge;\n  mirroring: IWorkoutMirroring;\n}\n\nexport function NativeEffects_withoutWatchWorkout(effects: readonly INativeEffect[]): INativeEffect[] {\n  return effects.map((effect) =>\n    effect.type === \"resumeWorkout\" && effect.hasSubscription ? { ...effect, hasSubscription: false } : effect\n  );\n}\n\nexport function NativeEffects_apply(bridges: INativeEffectBridges, effects: readonly INativeEffect[]): void {\n  for (const effect of effects) {\n    switch (effect.type) {\n      case \"startTimer\":\n        bridges.timer.startTimer(effect.params);\n        break;\n      case \"stopTimer\":\n        bridges.timer.stopTimer();\n        break;\n      case \"updateLiveActivity\":\n        bridges.workout.updateLiveActivity(effect.state);\n        break;\n      case \"resumeWorkout\":\n        bridges.workout.resumeWorkout({\n          reminder: effect.reminder,\n          isStart: effect.isStart,\n          hasSubscription: effect.hasSubscription,\n        });\n        break;\n      case \"pauseWorkout\":\n        bridges.workout.pauseWorkout();\n        break;\n      case \"discardWorkout\":\n        bridges.workout.discardWorkout();\n        break;\n      default:\n        exhausted(effect);\n    }\n  }\n}\n\nfunction exhausted(effect: never): never {\n  throw new Error(`Unhandled native effect: ${JSON.stringify(effect)}`);\n}\n","import { IState } from \"./state\";\nimport { WhatsNew_doesHaveNewUpdates } from \"./whatsnew\";\n\nexport type IOnloadModal = \"whatsnew\" | \"hearaboutus\";\n\nconst HEAR_ABOUT_US_COOLDOWN_MS = 1000 * 60 * 60 * 24 * 7;\n\nexport function OnloadModal_shouldShowWhatsNew(state: IState): boolean {\n  return state.storage.whatsNew != null && WhatsNew_doesHaveNewUpdates(state.storage.whatsNew);\n}\n\nexport function OnloadModal_shouldShowHearAboutUs(state: IState): boolean {\n  if (state.storage.currentProgramId == null) {\n    return false;\n  }\n  const hearAboutUs = state.storage.hearAboutUs;\n  const requests = hearAboutUs?.requests ?? [];\n  const lastRequest = requests[requests.length - 1];\n  return (\n    hearAboutUs?.result == null &&\n    !hearAboutUs?.done &&\n    requests.length < 3 &&\n    (lastRequest == null || Date.now() - lastRequest > HEAR_ABOUT_US_COOLDOWN_MS)\n  );\n}\n\nexport function OnloadModal_getNext(state: IState): IOnloadModal | undefined {\n  if (OnloadModal_shouldShowWhatsNew(state)) {\n    return \"whatsnew\";\n  }\n  if (OnloadModal_shouldShowHearAboutUs(state)) {\n    return \"hearaboutus\";\n  }\n  return undefined;\n}\n","import { IPlannerProgramExercise } from \"../pages/planner/models/types\";\nimport { IPlannerEvalResult, IPlannerTopLineItem } from \"../pages/planner/plannerExerciseEvaluator\";\nimport { IEvaluatedProgramWeek } from \"./program\";\nexport function PP_iterate2(\n  evaluatedWeeks: IEvaluatedProgramWeek[],\n  cb: (\n    exercise: IPlannerProgramExercise,\n    weekIndex: number,\n    dayInWeekIndex: number,\n    dayIndex: number,\n    exerciseIndex: number\n  ) => boolean | void\n): void {\n  let dayIndex = 0;\n  for (let weekIndex = 0; weekIndex < evaluatedWeeks.length; weekIndex++) {\n    const week = evaluatedWeeks[weekIndex];\n    for (let dayInWeekIndex = 0; dayInWeekIndex < week.days.length; dayInWeekIndex++) {\n      const day = week.days[dayInWeekIndex];\n      for (let exerciseIndex = 0; exerciseIndex < day.exercises.length; exerciseIndex++) {\n        const exercise = day.exercises[exerciseIndex];\n        const shouldReturn = cb(exercise, weekIndex, dayInWeekIndex, dayIndex, exerciseIndex);\n        if (!!shouldReturn) {\n          return;\n        }\n      }\n      dayIndex += 1;\n    }\n  }\n}\n\n// Walks the exercise lines of a program's source text rather than its evaluated exercises. The\n// week/day/dayIndex it yields line up with PP_iterate2, since both the top line map and the\n// evaluated weeks are built one-to-one from planner.weeks.\nexport function PP_iterateTopLineExercises(\n  groupedTopLines: IPlannerTopLineItem[][][][],\n  cb: (line: IPlannerTopLineItem, weekIndex: number, dayInWeekIndex: number, dayIndex: number) => boolean | void\n): void {\n  let dayIndex = 0;\n  for (let weekIndex = 0; weekIndex < groupedTopLines.length; weekIndex++) {\n    const week = groupedTopLines[weekIndex];\n    for (let dayInWeekIndex = 0; dayInWeekIndex < week.length; dayInWeekIndex++) {\n      for (const group of week[dayInWeekIndex]) {\n        for (const line of group) {\n          if (line.type !== \"exercise\") {\n            continue;\n          }\n          const shouldReturn = cb(line, weekIndex, dayInWeekIndex, dayIndex);\n          if (!!shouldReturn) {\n            return;\n          }\n        }\n      }\n      dayIndex += 1;\n    }\n  }\n}\n\nexport function PP_iterate(\n  evaluatedWeeks: IPlannerEvalResult[][],\n  cb: (\n    exercise: IPlannerProgramExercise,\n    weekIndex: number,\n    dayInWeekIndex: number,\n    dayIndex: number,\n    exerciseIndex: number\n  ) => boolean | void\n): void {\n  let dayIndex = 0;\n  for (let weekIndex = 0; weekIndex < evaluatedWeeks.length; weekIndex++) {\n    const week = evaluatedWeeks[weekIndex];\n    for (let dayInWeekIndex = 0; dayInWeekIndex < week.length; dayInWeekIndex++) {\n      const day = week[dayInWeekIndex];\n      if (day.success) {\n        for (let exerciseIndex = 0; exerciseIndex < day.data.length; exerciseIndex++) {\n          const exercise = day.data[exerciseIndex];\n          const shouldReturn = cb(exercise, weekIndex, dayInWeekIndex, dayIndex, exerciseIndex);\n          if (!!shouldReturn) {\n            return;\n          }\n        }\n      }\n      dayIndex += 1;\n    }\n  }\n}\n","import {\n  allExercisesList,\n  warmupValues,\n  Exercise_eq,\n  Exercise_getIsUnilateral,\n  Exercise_getWarmupSets,\n  Exercise_toKey,\n  Exercise_onerm,\n  Exercise_findById,\n  Exercise_get,\n  Exercise_fullName,\n} from \"./exercise\";\nimport { ScriptRunner } from \"../parser\";\nimport { Dialog_alert } from \"../utils/dialog\";\nimport {\n  IScriptBindings,\n  IScriptFnContext,\n  Progress_getEntryId,\n  Progress_runUpdateScriptForEntry,\n  Progress_createScriptBindings,\n  Progress_createScriptFunctions,\n  Progress_getDayData,\n  Progress_scriptExerciseContext,\n} from \"./progress\";\nimport { lb } from \"lens-shmens\";\nimport { IDispatch } from \"../ducks/types\";\nimport { IEither } from \"../utils/types\";\nimport {\n  Weight_is,\n  Weight_build,\n  Weight_isPct,\n  Weight_buildPct,\n  Weight_eq,\n  Weight_roundTo005,\n  Weight_convertTo,\n  Weight_display,\n  Weight_printOrNumber,\n} from \"./weight\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { IState, updateState } from \"./state\";\nimport {\n  IProgram,\n  IStorage,\n  IProgramExercise,\n  ISettings,\n  IHistoryEntry,\n  IExerciseType,\n  IProgramState,\n  ISet,\n  IHistoryRecord,\n  IWeight,\n  IProgramExerciseVariation,\n  IUnit,\n  IDayData,\n  IExerciseData,\n  IStats,\n  IShortDayData,\n} from \"../types\";\nimport {\n  ObjectUtils_omit,\n  ObjectUtils_clone,\n  ObjectUtils_diff,\n  ObjectUtils_keys,\n  ObjectUtils_isEqual,\n  ObjectUtils_pick,\n  ObjectUtils_diffPaths,\n} from \"../utils/object\";\nimport { Exporter_toFile } from \"../utils/exporter\";\nimport { DateUtils_formatYYYYMMDD } from \"../utils/date\";\nimport { ICustomExercise, IProgramContentSettings, IPlannerProgram, IPercentage, IScriptErrorHandler } from \"../types\";\nimport {\n  ProgramExercise_applyVariables,\n  ProgramExercise_doesUse1RM,\n  ProgramExercise_doesUseRPE,\n} from \"./programExercise\";\nimport { Thunk_pushScreen } from \"../ducks/thunks\";\nimport { WorkoutTimeEstimate_dayMs } from \"./workoutTimeEstimate\";\nimport type { INavigateOpts } from \"../navigation/navigationService\";\nimport { getLatestMigrationVersion } from \"../migrations/migrations\";\nimport { Encoder_encodeIntoUrl } from \"../utils/encoder\";\nimport { StringUtils_pluralize, StringUtils_hashString } from \"../utils/string\";\nimport { ILiftoscriptEvaluatorUpdate } from \"../liftoscriptEvaluator\";\nimport { ProgramToPlanner } from \"./programToPlanner\";\nimport {\n  IExportedPlannerProgram,\n  IPlannerProgramExercise,\n  IPlannerProgramExerciseWithType,\n  IReuseCandidate,\n} from \"../pages/planner/models/types\";\nimport memoize from \"micro-memoize\";\nimport { PlannerProgram_switchToUnit } from \"../pages/planner/models/plannerProgram\";\nimport {\n  IByExercise,\n  IByTag,\n  PlannerEvaluator_forceEvaluate,\n  PlannerEvaluator_evaluate,\n  PlannerEvaluator_changeExerciseName,\n} from \"../pages/planner/plannerEvaluator\";\nimport { PlannerKey_fromFullName } from \"../pages/planner/plannerKey\";\nimport { PP_iterate2, PP_iterate } from \"./pp\";\nimport {\n  PlannerProgramExercise_currentEvaluatedSetVariation,\n  PlannerProgramExercise_programWarmups,\n  PlannerProgramExercise_getProgressScript,\n  PlannerProgramExercise_currentEvaluatedSetVariationIndex,\n  PlannerProgramExercise_currentExerciseVariationIndex,\n  PlannerProgramExercise_currentDescriptionIndex,\n  PlannerProgramExercise_getState,\n  PlannerProgramExercise_createExerciseFromEntry,\n} from \"../pages/planner/models/plannerProgramExercise\";\nimport { CollectionUtils_sortBy, CollectionUtils_uniqBy } from \"../utils/collection\";\nimport { IPlannerEvalResult, PlannerSyntaxError } from \"../pages/planner/plannerExerciseEvaluator\";\nimport { UrlUtils_build } from \"../utils/url\";\nimport { Service } from \"../api/service\";\nimport { EditProgram_initPlannerState } from \"./editProgram\";\nimport { ProgramSet_getEvaluatedWeight } from \"./programSet\";\nimport { Stats_getCurrentMovingAverageBodyweight } from \"./stats\";\n\ndeclare let __HOST__: string;\n\nconst encodedProgramHashToShortUrl: Partial<Record<string, string>> = {};\n\nexport interface IProgramIndexEntry {\n  id: string;\n  name: string;\n  author: string;\n  authorUrl: string;\n  url: string;\n  shortDescription: string;\n  description?: string;\n  isMultiweek: boolean;\n  tags: string[];\n  frequency?: number;\n  age?: string;\n  duration?: string;\n  goal?: string;\n  exercises?: IExerciseType[];\n  equipment?: string[];\n  exercisesRange?: [number, number];\n  weeksCount?: number;\n  datePublished?: string;\n  dateModified?: string;\n}\n\nexport interface IExportedProgram {\n  program: IProgram;\n  customExercises: Partial<Record<string, ICustomExercise>>;\n  version: string;\n  settings: IProgramContentSettings;\n}\n\nexport interface IEvaluatedProgramWeek {\n  name: string;\n  description?: string;\n  days: IEvaluatedProgramDay[];\n}\n\nexport interface IEvaluatedProgramDay {\n  name: string;\n  dayData: Required<IDayData>;\n  description?: string;\n  exercises: IPlannerProgramExercise[];\n}\n\nexport interface IEvaluatedProgramError {\n  error: PlannerSyntaxError;\n  dayData: Required<IDayData>;\n}\n\nexport interface IEvaluatedProgram {\n  type: \"evaluatedProgram\";\n  id: string;\n  planner: IPlannerProgram;\n  name: string;\n  nextDay: number;\n  errors: IEvaluatedProgramError[];\n  weeks: IEvaluatedProgramWeek[];\n  states: IByTag<IProgramState>;\n}\nexport type IEProgram = IProgram | IEvaluatedProgram;\n\nexport type IProgramMode = \"planner\" | \"update\";\nexport const emptyProgramId = \"emptyprogram\";\n\nfunction isEvaluatedProgram(program: IEProgram): program is IEvaluatedProgram {\n  return \"type\" in program && program.type === \"evaluatedProgram\";\n}\n\nexport function ev(program: IEProgram, settings: ISettings): IEvaluatedProgram {\n  if (isEvaluatedProgram(program)) {\n    return program;\n  } else {\n    return Program_evaluate(program, settings);\n  }\n}\n\nexport function Program_getProgram(state: IState, id?: string): IProgram | undefined {\n  if (id === emptyProgramId) {\n    return Program_createEmptyProgram();\n  } else {\n    return state.storage.programs.find((p) => p.id === id);\n  }\n}\n\nexport function Program_getFullProgram(state: IState, id?: string): IProgram | undefined {\n  const program = Program_getProgram(state, id);\n  if (program) {\n    return Program_fullProgram(program, state.storage.settings);\n  } else {\n    return undefined;\n  }\n}\n\nexport function Program_cleanPlannerProgram(program: IProgram): IProgram {\n  const planner = program.planner;\n  if (planner != null) {\n    const newPlanner = {\n      ...planner,\n      weeks: planner.weeks.map((w) => ({\n        ...ObjectUtils_omit(w, [\"id\"]),\n        days: w.days.map((d) => ({\n          ...ObjectUtils_omit(d, [\"id\"]),\n        })),\n      })),\n    };\n    return {\n      ...program,\n      planner: newPlanner,\n      exercises: [],\n      days: [],\n      weeks: [],\n    };\n  } else {\n    return program;\n  }\n}\n\nexport function Program_isEmpty(program?: IProgram | IEvaluatedProgram): boolean {\n  return program?.id === emptyProgramId;\n}\n\nexport const Program_uses1RM = memoize(\n  (program: IEvaluatedProgram): boolean => {\n    const allExercises = Program_getAllProgramExercises(program);\n    return allExercises.some((e) => ProgramExercise_doesUse1RM(e));\n  },\n  { maxSize: 10 }\n);\n\nexport const Program_usesRPE = memoize(\n  (program: IEvaluatedProgram): boolean => {\n    const allExercises = Program_getAllProgramExercises(program);\n    return allExercises.some((e) => ProgramExercise_doesUseRPE(e));\n  },\n  { maxSize: 10 }\n);\n\nexport function Program_getProgramExercisesFromExerciseType(\n  program: IEvaluatedProgram,\n  exerciseType: IExerciseType\n): IPlannerProgramExercise[] {\n  return Program_getAllUsedProgramExercises(program).filter((p) => Exercise_eq(p.exerciseType, exerciseType));\n}\n\nexport function Program_getProgramIndex(state: IState, id: string): number {\n  return state.storage.programs.findIndex((p) => p.id === id);\n}\n\nexport function Program_getCurrentProgram(storage: IStorage): IProgram | undefined {\n  return storage.programs.filter((p) => p.id === storage.currentProgramId)[0];\n}\n\nexport function Program_storageToExportedProgram(storage: IStorage, programId: string): IExportedProgram | undefined {\n  const program = storage.programs.find((p) => p.id === programId);\n  if (!program) {\n    return undefined;\n  }\n  const settings = storage.settings;\n  return {\n    program: Program_cleanPlannerProgram(program),\n    customExercises: settings.exercises,\n    version: storage.version,\n    settings: settings,\n  };\n}\n\nexport function Program_nextHistoryEntry(\n  program: IEvaluatedProgram,\n  dayData: IDayData,\n  index: number,\n  programExercise: IPlannerProgramExerciseWithType,\n  stats: IStats,\n  settings: ISettings\n): IHistoryEntry {\n  const exercise = programExercise.exerciseType;\n  const programSets = PlannerProgramExercise_currentEvaluatedSetVariation(programExercise)?.sets;\n  const warmupSets = PlannerProgramExercise_programWarmups(programExercise, settings);\n  const sets: ISet[] = [];\n  for (let i = 0; i < programSets.length; i++) {\n    const programSet = programSets[i];\n    const minReps =\n      programSet.minrep != null && programSet.minrep !== programSet.maxrep ? programSet.minrep : undefined;\n    const weight = ProgramSet_getEvaluatedWeight(programSet, programExercise.exerciseType, settings);\n    sets.push({\n      vtype: \"set\",\n      id: UidFactory_generateUid(6),\n      reps: programSet.maxrep,\n      index: i,\n      minReps,\n      weight,\n      isUnilateral: Exercise_getIsUnilateral(exercise, settings),\n      rpe: programSet.rpe,\n      timer: programSet.timer,\n      setTimer: programSet.setTimer,\n      isOverflowSetTimer: programSet.isOverflowSetTimer,\n      auto: programSet.auto,\n      logRpe: programSet.logRpe,\n      askWeight: programSet.askWeight,\n      originalWeight: programSet.weight,\n      isAmrap: programSet.isAmrap,\n      label: programSet.label,\n      isCompleted: false,\n      programSetIndex: i,\n    });\n  }\n\n  const entry: IHistoryEntry = {\n    vtype: \"history_entry\",\n    id: Progress_getEntryId(exercise, programExercise.label),\n    index,\n    exercise: exercise,\n    programExerciseId: programExercise.key,\n    sets,\n    superset: programExercise.superset?.name,\n    warmupSets: Exercise_getWarmupSets(exercise, sets[0]?.weight, settings, warmupSets),\n  };\n  try {\n    return Progress_runUpdateScriptForEntry(entry, dayData, programExercise, program.states, -1, settings, stats);\n  } catch (error) {\n    console.error(error);\n    return entry;\n  }\n}\n\nexport function Program_stateValue(\n  state: IProgramState,\n  key: string,\n  value?: string\n): number | IWeight | IPercentage | undefined {\n  if (value == null) {\n    return undefined;\n  }\n  const numValue = parseFloat(value);\n  const oldValue = state[key];\n  if (oldValue == null) {\n    return numValue;\n  } else if (Weight_is(oldValue)) {\n    return Weight_build(numValue, oldValue.unit);\n  } else if (Weight_isPct(oldValue)) {\n    return Weight_buildPct(numValue);\n  } else {\n    return numValue;\n  }\n}\n\nexport function Program_nextHistoryRecord(\n  aProgram: IProgram,\n  settings: ISettings,\n  stats: IStats,\n  dayIndex?: number\n): IHistoryRecord {\n  const program = Program_evaluate(aProgram, settings);\n  return Program_nextHistoryRecordFromEvaluated(program, settings, stats, dayIndex);\n}\n\n// The canonical order of a day's exercises. `order` is not a position — it defaults to 0 and only carries a\n// value when the text disambiguates with `Squat[order]`, so this is document order with those markers floated\n// into place. Everything that needs a day's order goes through here rather than sorting for itself: a workout\n// reconciled mid-session has to end up in the same order as one freshly started from the same program.\nexport function Program_getDayExercisesInOrder(\n  program: IEvaluatedProgram,\n  day: number\n): IPlannerProgramExerciseWithType[] {\n  const programDay = Program_getProgramDay(program, day);\n  return CollectionUtils_sortBy(programDay ? Program_getProgramDayUsedExercises(programDay) : [], \"order\");\n}\n\nexport function Program_getDayExerciseKeys(program: IEvaluatedProgram, day: number): string[] {\n  return Program_getDayExercisesInOrder(program, day).map((e) => e.key);\n}\n\nexport function Program_nextHistoryRecordFromEvaluated(\n  program: IEvaluatedProgram,\n  settings: ISettings,\n  stats: IStats,\n  dayIndex?: number\n): IHistoryRecord {\n  const day = Math.max(1, Math.min(Program_numberOfDays(program), Math.max(1, (dayIndex || program.nextDay) ?? 0)));\n  const dayData = Program_getDayData(program, day);\n  const { week, dayInWeek } = dayData;\n\n  const fullDayName = Program_getDayName(program, day);\n  const now = Date.now();\n  const sortedDayExercises = Program_getDayExercisesInOrder(program, day);\n  const entries = sortedDayExercises.map((exercise, i) => {\n    return Program_nextHistoryEntry(program, dayData, i, exercise, stats, settings);\n  });\n  return {\n    vtype: \"progress\",\n    id: 0,\n    date: new Date().toISOString(),\n    programId: program.id,\n    programName: program.name,\n    intervals: [],\n    day,\n    week,\n    dayInWeek,\n    dayName: fullDayName,\n    startTime: now,\n    updatedAt: now,\n    entries,\n    ui: {},\n  };\n}\n\nexport function Program_getSupersetGroups(\n  evaluatedProgram: IEvaluatedProgram,\n  dayData: IShortDayData,\n  excludeExercise?: IPlannerProgramExercise\n): Partial<Record<string, IPlannerProgramExerciseWithType[]>> {\n  const programDay = Program_getProgramDay(\n    evaluatedProgram,\n    Program_getDayNumber(evaluatedProgram, dayData.week, dayData.dayInWeek)\n  );\n  const dayExercises = programDay ? Program_getProgramDayUsedExercises(programDay) : [];\n  const groups: Partial<Record<string, IPlannerProgramExerciseWithType[]>> = {};\n  for (const exercise of dayExercises) {\n    if (exercise.superset != null) {\n      if (!groups[exercise.superset.name]) {\n        groups[exercise.superset.name] = [];\n      }\n      if (exercise.key !== excludeExercise?.key) {\n        groups[exercise.superset.name]!.push(exercise);\n      }\n    }\n  }\n  return groups;\n}\n\nexport function Program_getSupersetExercises(\n  evalutedProgram: IEvaluatedProgram,\n  plannerExercise: IPlannerProgramExercise\n): IPlannerProgramExerciseWithType[] {\n  if (plannerExercise.superset == null) {\n    return [];\n  }\n  const dayData = plannerExercise.dayData;\n  const programDay = Program_getProgramDay(evalutedProgram, dayData.day);\n  const dayExercises = programDay ? Program_getProgramDayUsedExercises(programDay) : [];\n  const result = dayExercises.filter((e) => e.superset?.name === plannerExercise.superset?.name);\n  return result;\n}\n\nexport function Program_runExerciseFinishDayScript(\n  entry: IHistoryEntry,\n  dayData: IDayData,\n  settings: ISettings,\n  state: IProgramState,\n  otherStates: IByExercise<IProgramState>,\n  programExercise: IPlannerProgramExercise,\n  stats: IStats,\n  userPromptedStateVars?: IProgramState\n): IEither<\n  {\n    state: IProgramState;\n    bindings: IScriptBindings;\n    updates: ILiftoscriptEvaluatorUpdate[];\n    prints: string[];\n  },\n  string\n> {\n  const script = PlannerProgramExercise_getProgressScript(programExercise) || \"\";\n  const setVariationIndex = PlannerProgramExercise_currentEvaluatedSetVariationIndex(programExercise);\n  const descriptionIndex = PlannerProgramExercise_currentDescriptionIndex(programExercise);\n  const exerciseVariationIndex = PlannerProgramExercise_currentExerciseVariationIndex(programExercise);\n\n  const bindings = Progress_createScriptBindings(\n    dayData,\n    entry,\n    settings,\n    programExercise.evaluatedSetVariations[setVariationIndex]?.sets.length ?? 0,\n    Stats_getCurrentMovingAverageBodyweight(stats, settings),\n    undefined,\n    setVariationIndex + 1,\n    descriptionIndex + 1,\n    exerciseVariationIndex + 1,\n    programExercise.label\n  );\n  const fns = Progress_createScriptFunctions(settings);\n  let updates: ILiftoscriptEvaluatorUpdate[] = [];\n  const newState: IProgramState = ObjectUtils_clone({ ...state, ...userPromptedStateVars });\n\n  const fnContext: IScriptFnContext = {\n    exerciseType: entry.exercise,\n    ...Progress_scriptExerciseContext(entry, programExercise),\n    unit: settings.units,\n    prints: [],\n  };\n  try {\n    const runner = new ScriptRunner(\n      script,\n      newState,\n      ObjectUtils_clone(otherStates),\n      bindings,\n      fns,\n      settings.units,\n      fnContext,\n      \"planner\"\n    );\n    runner.execute();\n    updates = runner.getUpdates();\n  } catch (e) {\n    if (e instanceof SyntaxError) {\n      return { success: false, error: e.message };\n    } else {\n      throw e;\n    }\n  }\n\n  const stateDiff = { ...entry.state, ...ObjectUtils_diff(state, newState) };\n  return { success: true, data: { state: stateDiff, updates, bindings, prints: fnContext.prints } };\n}\n\nexport function Program_runFinishDayScript(\n  programExercise: IPlannerProgramExercise,\n  program: IEvaluatedProgram,\n  dayData: IDayData,\n  entry: IHistoryEntry,\n  settings: ISettings,\n  stats: IStats,\n  userPromptedStateVars?: IProgramState\n): IEither<\n  {\n    state: IProgramState;\n    otherStates: Record<number, IProgramState>;\n    updates: ILiftoscriptEvaluatorUpdate[];\n    bindings: IScriptBindings;\n  },\n  string\n> {\n  const state = PlannerProgramExercise_getState(programExercise);\n  const setVariationIndex = PlannerProgramExercise_currentEvaluatedSetVariationIndex(programExercise);\n  const descriptionIndex = PlannerProgramExercise_currentDescriptionIndex(programExercise);\n  const exerciseVariationIndex = PlannerProgramExercise_currentExerciseVariationIndex(programExercise);\n  const bindings = Progress_createScriptBindings(\n    dayData,\n    entry,\n    settings,\n    programExercise.evaluatedSetVariations[setVariationIndex]?.sets.length ?? 0,\n    Stats_getCurrentMovingAverageBodyweight(stats, settings),\n    undefined,\n    setVariationIndex + 1,\n    descriptionIndex + 1,\n    exerciseVariationIndex + 1,\n    programExercise.label\n  );\n  const fns = Progress_createScriptFunctions(settings);\n\n  const newState: IProgramState = {\n    ...state,\n    ...userPromptedStateVars,\n  };\n  const otherStates = ObjectUtils_clone(program.states);\n\n  const script = PlannerProgramExercise_getProgressScript(programExercise) || \"\";\n  let updates: ILiftoscriptEvaluatorUpdate[] = [];\n  try {\n    const runner = new ScriptRunner(\n      script,\n      newState,\n      otherStates,\n      bindings,\n      fns,\n      settings.units,\n      {\n        exerciseType: programExercise.exerciseType,\n        ...Progress_scriptExerciseContext(entry, programExercise),\n        unit: settings.units,\n        prints: [],\n      },\n      \"planner\"\n    );\n    runner.execute();\n    updates = runner.getUpdates();\n  } catch (e) {\n    if (e instanceof SyntaxError) {\n      return { success: false, error: e.message };\n    } else {\n      throw e;\n    }\n  }\n\n  const diffOtherStates = ObjectUtils_keys(otherStates).reduce<IByTag<IProgramState>>((memo, key) => {\n    if (!ObjectUtils_isEqual(otherStates[key], program.states[key])) {\n      const diffState = ObjectUtils_keys(otherStates[key]).reduce<IProgramState>((memo2, key2) => {\n        const oldValue = program.states[key]?.[key2];\n        if (oldValue == null || !Weight_eq(otherStates[key][key2], oldValue)) {\n          memo2[key2] = otherStates[key][key2];\n        }\n        return memo2;\n      }, {});\n      memo[key] = diffState;\n    }\n    return memo;\n  }, {});\n\n  const stateDiff = ObjectUtils_diff(state, newState);\n  return { success: true, data: { state: stateDiff, otherStates: diffOtherStates, updates, bindings } };\n}\n\nexport function Program_dayAverageTimeMs(program: IEvaluatedProgram, settings: ISettings): number {\n  const dayApproxTimes: number[] = [];\n  for (const week of program.weeks) {\n    for (const day of week.days) {\n      dayApproxTimes.push(Program_dayApproxTimeMs(day, settings));\n    }\n  }\n  return dayApproxTimes.reduce((acc, t) => acc + t, 0) / dayApproxTimes.length;\n}\n\nexport function Program_dayApproxTimeMs(programDay: IEvaluatedProgramDay, settings: ISettings): number {\n  const exercises = Program_getProgramDayUsedExercises(programDay).map((e) => ({\n    superset: e.superset?.name,\n    isUnilateral: Exercise_getIsUnilateral(e.exerciseType, settings),\n    sets: (PlannerProgramExercise_currentEvaluatedSetVariation(e)?.sets ?? []).map((set) => ({\n      reps: set.maxrep,\n      timer: set.timer,\n      setTimer: set.setTimer,\n      auto: set.auto,\n    })),\n  }));\n  return WorkoutTimeEstimate_dayMs(exercises, {\n    rest: settings.timers.workout || 0,\n    superset: settings.timers.superset ?? undefined,\n  });\n}\n\nexport function Program_getProgramExerciseForKeyAndShortDayData(\n  program: IEvaluatedProgram,\n  dayData: IShortDayData,\n  key: string\n): IPlannerProgramExerciseWithType | undefined {\n  const day = Program_getDayNumber(program, dayData.week, dayData.dayInWeek);\n  return Program_getProgramExerciseForKeyAndDay(program, day, key);\n}\n\nexport function Program_getProgramExerciseForKeyAndDay(\n  program: IEvaluatedProgram,\n  day: number,\n  key: string\n): IPlannerProgramExerciseWithType | undefined {\n  const programDay = program ? Program_getProgramDay(program, day) : undefined;\n  const dayExercises = programDay ? Program_getProgramDayUsedExercises(programDay) : [];\n  let programExercise = dayExercises.find((pe) => pe.key === key);\n  if (programExercise == null) {\n    const allExercises = program ? Program_getAllProgramExercisesWithType(program) : [];\n    programExercise = allExercises.find((pe) => pe.key === key);\n    if (programExercise != null) {\n      programExercise = { ...programExercise, dayData: Program_getDayData(program, day) };\n    }\n  }\n  return programExercise;\n}\n\nexport function Program_runAllFinishDayScripts(\n  program: IProgram,\n  progress: IHistoryRecord,\n  stats: IStats,\n  settings: ISettings,\n  onError?: IScriptErrorHandler\n): { program: IProgram; exerciseData: IExerciseData } {\n  const exerciseData: IExerciseData = {};\n  const newEvaluatedProgram = Program_forceEvaluate(program, settings);\n  const dayData = Progress_getDayData(progress);\n  const programDay = Program_getProgramDay(newEvaluatedProgram, progress.day);\n  if (!programDay) {\n    return { program, exerciseData };\n  }\n  for (const entry of progress.entries) {\n    if (entry != null && !entry.isSuppressed && entry.sets.some((s) => s.isCompleted)) {\n      const programExercise =\n        program && entry.programExerciseId\n          ? Program_getProgramExerciseForKeyAndDay(newEvaluatedProgram, dayData.day, entry.programExerciseId)\n          : undefined;\n      if (programExercise) {\n        const newStateResult = Program_runFinishDayScript(\n          programExercise,\n          newEvaluatedProgram,\n          dayData,\n          entry,\n          settings,\n          stats,\n          progress.userPromptedStateVars?.[programExercise.key]\n        );\n        if (newStateResult.success) {\n          const { state, updates, bindings, otherStates } = newStateResult.data;\n          const exerciseKey = Exercise_toKey(entry.exercise);\n          const onerm = Exercise_onerm(entry.exercise, settings);\n          if (!Weight_eq(bindings.rm1, onerm)) {\n            exerciseData[exerciseKey] = { rm1: Weight_roundTo005(bindings.rm1) };\n          }\n          PP_iterate2(newEvaluatedProgram.weeks, (exercise) => {\n            if (exercise.key === programExercise.key && exercise.progress) {\n              exercise.progress.state = { ...exercise.progress.state, ...entry.state, ...state };\n            }\n          });\n          ProgramExercise_applyVariables(programExercise.key, newEvaluatedProgram, updates, settings);\n          for (const key of ObjectUtils_keys(otherStates || {})) {\n            PP_iterate2(newEvaluatedProgram.weeks, (exercise) => {\n              if (exercise.tags?.includes(Number(key)) && exercise.progress) {\n                exercise.progress.state = { ...exercise.progress.state, ...otherStates[key] };\n              }\n            });\n          }\n        } else {\n          const message = `There was an error executing progress script: ${newStateResult.error}`;\n          if (onError) {\n            onError(message);\n          } else {\n            Dialog_alert(message);\n          }\n        }\n      }\n    }\n  }\n  const theNextDay = Program_nextDay(newEvaluatedProgram, progress.day);\n  const newPlanner = new ProgramToPlanner(newEvaluatedProgram, settings).convertToPlanner();\n  const newProgram = ObjectUtils_clone(program);\n  newProgram.nextDay = theNextDay;\n  newProgram.planner = newPlanner;\n\n  return {\n    program: newProgram,\n    exerciseData,\n  };\n}\n\nexport function Program_createVariation(useStateWeight?: boolean): IProgramExerciseVariation {\n  return {\n    sets: [\n      {\n        repsExpr: \"5\",\n        weightExpr: useStateWeight ? \"state.weight\" : \"0lb\",\n        isAmrap: false,\n      },\n    ],\n  };\n}\n\nexport function Program_createExercise(units: IUnit): IProgramExercise {\n  const defaultWarmup = warmupValues(units)[45];\n  return {\n    name: \"Squat\",\n    id: UidFactory_generateUid(8),\n    variations: [Program_createVariation(true)],\n    exerciseType: {\n      id: \"squat\",\n      equipment: \"barbell\",\n    },\n    state: {\n      weight: units === \"kg\" ? allExercisesList.squat.startingWeightKg : allExercisesList.squat.startingWeightLb,\n    },\n    warmupSets: defaultWarmup,\n    finishDayExpr: \"\",\n    variationExpr: \"1\",\n    descriptions: [\"\"],\n    stateMetadata: {},\n    reuseLogic: { selected: undefined, states: {} },\n  };\n}\n\nexport function Program_previewProgram(dispatch: IDispatch, programId: string, showCustomPrograms: boolean): void {\n  updateState(\n    dispatch,\n    [\n      lb<IState>().p(\"previewProgram\").record({\n        id: programId,\n        showCustomPrograms,\n      }),\n    ],\n    \"Preview program\"\n  );\n  dispatch(Thunk_pushScreen(\"programPreview\"));\n}\n\nexport function Program_createEmptyProgram(): IProgram {\n  return {\n    vtype: \"program\",\n    exercises: [],\n    id: emptyProgramId,\n    name: \"Ad-Hoc Workout\",\n    description: \"\",\n    url: \"\",\n    author: \"\",\n    nextDay: 1,\n    days: [],\n    weeks: [],\n    isMultiweek: false,\n    planner: {\n      vtype: \"planner\",\n      name: \"Ad-Hoc Workout\",\n      weeks: [{ name: \"\", days: [{ name: \"\", exerciseText: \"\" }] }],\n    },\n    tags: [],\n  };\n}\n\nexport function Program_cloneProgram(dispatch: IDispatch, program: IProgram, settings: ISettings): void {\n  const newProgramId = UidFactory_generateUid(8);\n  updateState(\n    dispatch,\n    [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"programs\")\n        .recordModify((programs) => {\n          const newProgram = { ...program, clonedAt: Date.now(), id: newProgramId };\n          if (newProgram.planner) {\n            newProgram.planner = PlannerProgram_switchToUnit(newProgram.planner, settings);\n          }\n          return [...programs, newProgram];\n        }),\n      lb<IState>().p(\"storage\").p(\"currentProgramId\").record(newProgramId),\n    ],\n    \"Clone program\"\n  );\n}\n\nexport function Program_selectProgram(dispatch: IDispatch, programId: string): void {\n  updateState(dispatch, [lb<IState>().p(\"storage\").p(\"currentProgramId\").record(programId)], \"Select program\");\n}\n\nexport function Program_selectProgramAndGoHome(dispatch: IDispatch, programId: string): void {\n  Program_selectProgram(dispatch, programId);\n  dispatch(Thunk_pushScreen(\"main\", undefined, { tab: \"home\" }));\n}\n\nexport function Program_getAllProgramExercises(evaluatedProgram: IEvaluatedProgram): IPlannerProgramExercise[] {\n  return evaluatedProgram.weeks.flatMap((w) => w.days.flatMap((d) => d.exercises));\n}\n\nexport function Program_getAllUsedProgramExercises(\n  evaluatedProgram: IEvaluatedProgram\n): IPlannerProgramExerciseWithType[] {\n  const used = Program_getAllProgramExercises(evaluatedProgram).filter((e) => !e.notused && e.exerciseType != null);\n  return used as IPlannerProgramExerciseWithType[];\n}\n\nexport function Program_getAllProgramExercisesWithType(\n  evaluatedProgram: IEvaluatedProgram\n): IPlannerProgramExerciseWithType[] {\n  const used = Program_getAllProgramExercises(evaluatedProgram).filter((e) => e.exerciseType != null);\n  return used as IPlannerProgramExerciseWithType[];\n}\n\nexport function Program_getProgramExerciseByTypeWeekAndDay(\n  evaluatedProgram: IEvaluatedProgram,\n  exerciseType: IExerciseType,\n  week: number,\n  dayInWeek: number\n): IPlannerProgramExercise | undefined {\n  let exercise: IPlannerProgramExercise | undefined;\n  PP_iterate2(evaluatedProgram.weeks, (e, weekIndex, dayInWeekIndex) => {\n    if (\n      weekIndex + 1 === week &&\n      dayInWeekIndex + 1 === dayInWeek &&\n      e.exerciseType &&\n      Exercise_eq(e.exerciseType, exerciseType)\n    ) {\n      exercise = e;\n      return true;\n    }\n    return false;\n  });\n  return exercise;\n}\n\nfunction Program_emptyEvaluatedProgram(program: IProgram): IEvaluatedProgram {\n  return {\n    type: \"evaluatedProgram\",\n    id: program.id,\n    planner: {\n      vtype: \"planner\",\n      name: program.name,\n      weeks: [{ name: \"Week 1\", days: [{ name: \"Day 1\", exerciseText: \"\" }] }],\n    },\n    name: program.name,\n    errors: [],\n    nextDay: program.nextDay,\n    weeks: [\n      {\n        name: \"Week 1\",\n        days: [\n          {\n            name: \"Day 1\",\n            dayData: { day: 1, week: 1, dayInWeek: 1 },\n            exercises: [],\n          },\n        ],\n      },\n    ],\n    states: {},\n  };\n}\n\n// The half of an evaluation that comes from the planner alone. Split out because it is all some\n// surfaces need: an evaluated program's id, name and nextDay are fields it carries, not inputs to\n// working out what its weeks contain.\nfunction Program_buildWeeks(\n  planner: IPlannerProgram,\n  evaluatedWeeks: IPlannerEvalResult[][]\n): { weeks: IEvaluatedProgramWeek[]; errors: IEvaluatedProgramError[] } {\n  let dayNum = 0;\n  const errors: IEvaluatedProgramError[] = [];\n  const weeks = planner.weeks.map((week, weekIndex) => {\n    const evaluatedWeek = evaluatedWeeks[weekIndex];\n    const days = week.days.map((day, dayInWeekIndex) => {\n      dayNum += 1;\n      const evaluatedDay = evaluatedWeek[dayInWeekIndex];\n      const dayData = {\n        day: dayNum,\n        week: weekIndex + 1,\n        dayInWeek: dayInWeekIndex + 1,\n      };\n      const evaluatedExercises = CollectionUtils_sortBy(evaluatedDay.success ? evaluatedDay.data : [], \"order\");\n      if (!evaluatedDay.success) {\n        errors.push({ error: evaluatedDay.error, dayData });\n      }\n      return {\n        name: day.name,\n        description: day.description,\n        dayData,\n        exercises: evaluatedExercises,\n      };\n    });\n    return { name: week.name, description: week.description, days };\n  });\n  return { weeks, errors };\n}\n\n// Evaluating a planner on its own, for surfaces that only ever have one. Planner in, weeks out —\n// no program required, because none of it is used to work them out.\nexport function Program_evaluatePlannerWeeks(planner: IPlannerProgram, settings: ISettings): IEvaluatedProgramWeek[] {\n  const { evaluatedWeeks } = PlannerEvaluator_evaluate(planner, settings);\n  return Program_buildWeeks(planner, evaluatedWeeks).weeks;\n}\n\n// Which exercise a name refers to *in this planner*, for an action that has just built one and\n// needs the key that is valid in it. Resolved here rather than against whatever evaluation the\n// caller had lying around: that one predates the edit being folded in, so after a rename it\n// answers with a key the new planner no longer has — or with the wrong exercise entirely.\n//\n// Day-by-day, so a syntax error on one day costs only that day. A whole-document parse is\n// all-or-nothing, and using one here would take the action away from every line in the program\n// because of an unfinished one somewhere else.\nexport function Program_findPlannerExercise(\n  planner: IPlannerProgram,\n  settings: ISettings,\n  fullName: string\n): IPlannerProgramExercise | undefined {\n  const key = PlannerKey_fromFullName(fullName, settings.exercises);\n  for (const week of Program_evaluatePlannerWeeks(planner, settings)) {\n    for (const day of week.days) {\n      const exercise = day.exercises.find((e) => e.key === key);\n      if (exercise != null) {\n        return exercise;\n      }\n    }\n  }\n  return undefined;\n}\n\nfunction Program_buildEvaluatedProgram(\n  program: IProgram,\n  planner: IPlannerProgram,\n  evaluatedWeeks: IPlannerEvalResult[][]\n): IEvaluatedProgram {\n  const { weeks, errors } = Program_buildWeeks(planner, evaluatedWeeks);\n  const states: IByTag<IProgramState> = {};\n  PP_iterate(evaluatedWeeks, (exercise) => {\n    for (const tag of exercise.tags) {\n      states[tag] = { ...states[tag], ...PlannerProgramExercise_getState(exercise) };\n    }\n  });\n  return {\n    type: \"evaluatedProgram\",\n    id: program.id,\n    errors,\n    planner,\n    name: program.name,\n    nextDay: program.nextDay,\n    weeks,\n    states,\n  };\n}\n\nexport function Program_forceEvaluate(program: IProgram, settings: ISettings): IEvaluatedProgram {\n  const planner = program.planner;\n  if (!planner) {\n    return Program_emptyEvaluatedProgram(program);\n  }\n  const { evaluatedWeeks } = PlannerEvaluator_forceEvaluate(planner, settings);\n  return Program_buildEvaluatedProgram(program, planner, evaluatedWeeks);\n}\n\n// Reuses the content-memoized planner evaluation that the edit screen already computed for its render,\n// so edit dispatches don't re-parse the whole program. The planner evaluation may be cached/shared, so\n// callers that mutate the returned exercises MUST clone first. Not interchangeable with Program_forceEvaluate,\n// which guarantees a fresh recompute.\nfunction Program_evaluateCachedPlannerImpl(program: IProgram, settings: ISettings): IEvaluatedProgram {\n  const planner = program.planner;\n  if (!planner) {\n    return Program_emptyEvaluatedProgram(program);\n  }\n  const { evaluatedWeeks } = PlannerEvaluator_evaluate(planner, settings);\n  return Program_buildEvaluatedProgram(program, planner, evaluatedWeeks);\n}\n\nexport const Program_evaluateCachedPlanner = memoize(Program_evaluateCachedPlannerImpl, { maxSize: 10 });\n\nexport function Program_getNumberOfExerciseInstances(program: IEvaluatedProgram, exerciseKey: string): number {\n  let count = 0;\n  PP_iterate2(program.weeks, (exercise) => {\n    if (exercise.key === exerciseKey) {\n      count += 1;\n    }\n  });\n  return count;\n}\n\nexport function Program_changeExerciseName(from: string, to: string, program: IProgram, settings: ISettings): IProgram {\n  const planner = program.planner;\n  if (!planner) {\n    return program;\n  }\n  return {\n    ...program,\n    planner: {\n      ...planner,\n      weeks: planner.weeks.map((week) => {\n        return {\n          ...week,\n          days: week.days.map((day) => {\n            return {\n              ...day,\n              exerciseText: PlannerEvaluator_changeExerciseName(day.exerciseText, from, to, settings),\n            };\n          }),\n        };\n      }),\n    },\n  };\n}\n\nexport function Program_numberOfDays(program: IEvaluatedProgram): number {\n  return program.weeks.reduce((memo, week) => memo + week.days.length, 0);\n}\n\nexport function Program_weeksRange(program: IEvaluatedProgram): string | undefined {\n  return program.weeks.length > 1\n    ? `${program.weeks.length} ${StringUtils_pluralize(\"week\", program.weeks.length)}`\n    : \"\";\n}\n\nexport function Program_daysRange(program: IEvaluatedProgram): string {\n  const minDays = Math.min(...program.weeks.map((w) => w.days.length));\n  const maxDays = Math.max(...program.weeks.map((w) => w.days.length));\n  if (minDays === maxDays) {\n    return `${minDays} ${StringUtils_pluralize(\"day\", minDays)} per week`;\n  } else {\n    return `${minDays}-${maxDays} days per week`;\n  }\n}\n\nexport function Program_exerciseRange(program: IEvaluatedProgram): string {\n  const days = program.weeks.flatMap((w) => w.days);\n  const minExs = Math.min(...days.map((d) => Program_getProgramDayUsedExercises(d).length));\n  const maxExs = Math.max(...days.map((d) => Program_getProgramDayUsedExercises(d).length));\n  return Program_exerciseRangeFormat(minExs, maxExs);\n}\n\nexport function Program_exerciseRangeFormat(minExs: number, maxExs: number): string {\n  if (minExs === maxExs) {\n    return `${minExs} ${StringUtils_pluralize(\"exercise\", minExs)} per day`;\n  } else {\n    return `${minExs}-${maxExs} exercises per day`;\n  }\n}\n\nexport function Program_getWeekFromDay(program: IEvaluatedProgram, day: number): number {\n  let daysTotal = 0;\n  for (let i = 0; i < program.weeks.length; i += 1) {\n    const weekDays = program.weeks[i].days.length;\n    daysTotal += weekDays;\n    if (daysTotal >= day) {\n      return i + 1;\n    }\n  }\n  return 1;\n}\n\nexport function Program_getDayNumber(\n  program: IPlannerProgram | IEvaluatedProgram,\n  week: number,\n  dayInWeek: number\n): number {\n  let dayIndex = 1;\n  for (let w = 0; w < program.weeks.length; w += 1) {\n    for (let d = 0; d < program.weeks[w].days.length; d += 1) {\n      if (w === week - 1 && d === dayInWeek - 1) {\n        return dayIndex;\n      }\n      dayIndex += 1;\n    }\n  }\n  return -1;\n}\n\nexport function Program_getExerciseTypesForWeekDay(\n  program: IEvaluatedProgram,\n  week: number,\n  day: number\n): IExerciseType[] {\n  const exerciseTypes: IExerciseType[] = [];\n  PP_iterate2(program.weeks, (exercise, weekIndex, dayInWeekIndex) => {\n    if (weekIndex + 1 === week && dayInWeekIndex + 1 === day) {\n      const exType = exercise.exerciseType;\n      if (exType && !exerciseTypes.some((et) => Exercise_eq(et, exType))) {\n        exerciseTypes.push(exType);\n      }\n    }\n  });\n  return exerciseTypes;\n}\n\nexport function Program_getDayData(program: IEvaluatedProgram, day: number): Required<IDayData> {\n  return {\n    day,\n    week: Program_getWeekFromDay(program, day),\n    dayInWeek: Program_getDayInWeek(program, day),\n  };\n}\n\nexport function Program_getDayInWeek(program: IEvaluatedProgram, day: number): number {\n  let daysTotal = 0;\n  for (const week of program.weeks) {\n    daysTotal += week.days.length;\n    if (daysTotal >= day) {\n      return day - (daysTotal - week.days.length);\n    }\n  }\n  return 1;\n}\n\nexport function Program_getDayName(program: IEvaluatedProgram, day: number): string {\n  const dayData = Program_getDayData(program, day);\n  const programDay = Program_getProgramDay(program, day);\n  const week = program.weeks[(dayData.week || 1) - 1];\n  const isMultiweek = program.weeks.length > 1 && week != null;\n  return `${isMultiweek ? `${week.name} - ` : \"\"}${programDay?.name}`;\n}\n\nexport function Program_getListOfDays(program: IEvaluatedProgram): [string, string][] {\n  const days: [string, string][] = [];\n  const isReallyMultiweek = program.weeks.length > 1;\n  let dayIndex = 0;\n  for (const week of program.weeks) {\n    for (const day of week.days) {\n      dayIndex += 1;\n      days.push([`${dayIndex}`, `${isReallyMultiweek ? `${week.name} - ` : \"\"}${day.name}`]);\n    }\n  }\n  return days;\n}\n\nexport function Program_getProgramWeek(program: IEvaluatedProgram, day?: number): IEvaluatedProgramWeek {\n  return program.weeks[Program_getWeekFromDay(program, day || 1) - 1] || program.weeks[0];\n}\n\nexport function Program_getProgramDay(program: IEvaluatedProgram, day: number): IEvaluatedProgramDay | undefined {\n  let aDay = 0;\n  for (const week of program.weeks || []) {\n    for (const d of week.days) {\n      aDay += 1;\n      if (day === aDay) {\n        return d;\n      }\n    }\n  }\n  return undefined;\n}\n\nexport function Program_getProgramDayExercises(programDay: IEvaluatedProgramDay): IPlannerProgramExerciseWithType[] {\n  const list = programDay.exercises.filter((e) => e.exerciseType != null);\n  return list as IPlannerProgramExerciseWithType[];\n}\n\nexport function Program_getProgramDayUsedExercises(\n  programDay: IEvaluatedProgramDay\n): IPlannerProgramExerciseWithType[] {\n  const list = programDay.exercises.filter((e) => !e.notused && e.exerciseType != null);\n  return list as IPlannerProgramExerciseWithType[];\n}\n\nexport function Program_applyEvaluatedProgram(\n  program: IProgram,\n  evaluatedProgram: IEvaluatedProgram,\n  settings: ISettings\n): IProgram {\n  const newProgram = ObjectUtils_clone(program);\n  newProgram.planner = new ProgramToPlanner(evaluatedProgram, settings).convertToPlanner();\n  newProgram.nextDay = evaluatedProgram.nextDay;\n  return newProgram;\n}\n\nexport function Program_getProgramExercise(\n  day: number,\n  program?: IEvaluatedProgram,\n  key?: string\n): IPlannerProgramExercise | undefined {\n  if (key == null || program == null) {\n    return undefined;\n  }\n  const programDay = Program_getProgramDay(program, day);\n  return programDay?.exercises.find((e) => e.key === key);\n}\n\nexport function Program_getFirstProgramExercise(\n  program?: IEvaluatedProgram,\n  key?: string\n): IPlannerProgramExercise | undefined {\n  if (key == null || program == null) {\n    return undefined;\n  }\n  return Program_getAllProgramExercises(program).find((e) => e.key === key || e.fullName === key);\n}\n\nexport function Program_getProgramExerciseFromDay(\n  programDay?: IEvaluatedProgramDay,\n  key?: string\n): IPlannerProgramExercise | undefined {\n  if (key == null || programDay == null) {\n    return undefined;\n  }\n  return programDay?.exercises.find((e) => e.key === key);\n}\n\nexport function Program_getEvaluatedExercise(\n  program: IProgram,\n  day: number,\n  key: string,\n  settings: ISettings\n): IPlannerProgramExercise | undefined {\n  const { weeks: evaluatedWeeks } = Program_evaluate(program, settings);\n  let plannerProgramExercise: IPlannerProgramExercise | undefined;\n  PP_iterate2(evaluatedWeeks, (exercise, weekIndex, dayInWeekIndex, dayIndex) => {\n    if (dayIndex === day - 1 && exercise.key === key) {\n      plannerProgramExercise = exercise;\n      return true;\n    } else {\n      return undefined;\n    }\n  });\n  return plannerProgramExercise;\n}\n\nexport function Program_nextDay(program: IEvaluatedProgram, day?: number): number {\n  const nd = (day != null ? day % Program_numberOfDays(program) : 0) + 1;\n  return isNaN(nd) ? 1 : nd;\n}\n\nexport function Program_editAction(dispatch: IDispatch, program: IProgram, opts?: INavigateOpts): void {\n  const plannerState = EditProgram_initPlannerState(program.id, program);\n  updateState(\n    dispatch,\n    [lb<IState>().p(\"editProgramStates\").p(program.id).record(plannerState)],\n    \"Set edit program state\"\n  );\n  dispatch(Thunk_pushScreen(\"editProgram\", { programId: program.id }, opts));\n}\n\nexport function Program_exportProgramToFile(program: IProgram, settings: ISettings, version: string): void {\n  const payload = Program_exportProgram(program, settings, version);\n  Exporter_toFile(\n    `liftosaur_${program.name.replace(/\\s+/g, \"-\")}_${DateUtils_formatYYYYMMDD(Date.now())}.json`,\n    JSON.stringify(payload, null, 2)\n  );\n}\n\nexport async function Program_exportProgramToLink(\n  program: IProgram,\n  settings: ISettings,\n  version: string\n): Promise<string> {\n  const payload = Program_exportProgram(program, settings, version);\n  const url = await Encoder_encodeIntoUrl(JSON.stringify(payload), __HOST__);\n  url.pathname = \"/program\";\n  return url.toString();\n}\n\nexport function Program_exportProgram(program: IProgram, settings: ISettings, version?: string): IExportedProgram {\n  const aFullProgram = Program_evaluate(program, settings);\n  const customExerciseIds = Program_getAllProgramExercises(aFullProgram).reduce<string[]>((memo, programExercise) => {\n    const id = programExercise.exerciseType?.id;\n    if (id) {\n      const isBuiltIn = !!Exercise_findById(id, {});\n      if (!isBuiltIn) {\n        memo.push(id);\n      }\n    }\n    return memo;\n  }, []);\n\n  const customExercises = ObjectUtils_pick(settings.exercises, customExerciseIds);\n  return {\n    customExercises,\n    program,\n    version: version || getLatestMigrationVersion(),\n    settings: ObjectUtils_pick(settings, [\"units\", \"timers\", \"planner\"]),\n  };\n}\n\nexport function Program_exportedPlannerProgramToExportedProgram(\n  exportedPlannerProgram: IExportedPlannerProgram,\n  aNextDay?: number\n): IExportedProgram {\n  const program = {\n    ...Program_create(exportedPlannerProgram.program.name, exportedPlannerProgram.id),\n    planner: exportedPlannerProgram.program,\n  };\n  if (aNextDay != null) {\n    program.nextDay = aNextDay;\n  }\n  const exportedProgram: IExportedProgram = {\n    customExercises: exportedPlannerProgram.settings.exercises,\n    program,\n    version: exportedPlannerProgram.version,\n    settings: {\n      timers: {\n        workout: exportedPlannerProgram.settings.timer,\n      },\n      planner: exportedPlannerProgram.plannerSettings,\n    },\n  };\n  return exportedProgram;\n}\n\nexport function Program_create(name: string, id?: string): IProgram {\n  return {\n    vtype: \"program\" as const,\n    id: id || UidFactory_generateUid(8),\n    name: name,\n    url: \"\",\n    author: \"\",\n    shortDescription: \"\",\n    description: \"\",\n    nextDay: 1,\n    weeks: [],\n    isMultiweek: false,\n    days: [{ id: UidFactory_generateUid(8), name: \"Day 1\", exercises: [] }],\n    exercises: [],\n    tags: [],\n    clonedAt: Date.now(),\n  };\n}\n\nexport function Program_isChanged(aProgram: IProgram, bProgram: IProgram): boolean {\n  const { ...cleanedAProgram } = aProgram;\n  const { ...cleanedBProgram } = bProgram;\n  const changed = !ObjectUtils_isEqual(cleanedAProgram, cleanedBProgram);\n  if (changed) {\n    const paths = ObjectUtils_diffPaths(cleanedAProgram, cleanedBProgram);\n    return paths.some((p) => {\n      return !p.match(/exercises.\\d+.state/) && !p.match(/exercises.\\d+.reuseLogic\\.states/) && !p.match(/nextDay/);\n    });\n  }\n  return false;\n}\n\nexport async function Program_toUrl(\n  program: IProgram,\n  settings: ISettings,\n  client: Window[\"fetch\"],\n  userId?: string\n): Promise<string> {\n  const exportedProgram = Program_exportProgram(program, settings);\n  const baseUrl = UrlUtils_build(\n    \"/planner\",\n    typeof window !== \"undefined\" && window.location?.href ? window.location.href : \"https://www.liftosaur.com\"\n  );\n  const json = JSON.stringify(exportedProgram);\n  const hash = StringUtils_hashString(json);\n  const encodedUrl = await Encoder_encodeIntoUrl(json, baseUrl.toString());\n  const encodedProgramUrl = encodedUrl.toString();\n  if (encodedProgramHashToShortUrl[hash]) {\n    return encodedProgramHashToShortUrl[hash];\n  } else {\n    const service = new Service(client);\n    const shortUrl = await service.postShortUrl(encodedProgramUrl, \"p\", settings.affiliateEnabled ? userId : undefined);\n    encodedProgramHashToShortUrl[hash] = shortUrl;\n    return shortUrl;\n  }\n}\n\nexport function Program_createFromHistoryRecord(\n  programName: string,\n  record: IHistoryRecord,\n  settings: ISettings\n): IProgram {\n  const dayData = { week: 1, day: 1, dayInWeek: 1 };\n  const program: IProgram = {\n    ...Program_create(programName),\n    planner: {\n      vtype: \"planner\",\n      name: programName,\n      weeks: [{ name: \"Week 1\", days: [{ name: \"Day 1\", exerciseText: \"\" }] }],\n    },\n  };\n  const evaluatedProgram = Program_evaluate(program, settings);\n  const planner = program.planner!;\n  planner.weeks[0].days[0].exerciseText = record.entries\n    .map((entry) => {\n      const exercise = Exercise_get(entry.exercise, settings.exercises);\n      return Exercise_fullName(exercise, settings);\n    })\n    .join(\"\\n\");\n  const newDay: IEvaluatedProgramDay = {\n    dayData: dayData,\n    name: \"Day 1\",\n    exercises: record.entries.map((e, i) => {\n      return PlannerProgramExercise_createExerciseFromEntry(e, dayData, settings, i);\n    }),\n  };\n  evaluatedProgram.weeks[0].days[0] = newDay;\n  const newPlanner = new ProgramToPlanner(evaluatedProgram, settings).convertToPlanner();\n  const newProgram = {\n    ...ObjectUtils_clone(program),\n    planner: newPlanner,\n  };\n  return newProgram;\n}\n\nexport function Program_addDayFromHistoryRecord(\n  program: IProgram,\n  afterDay: number,\n  record: IHistoryRecord,\n  settings: ISettings\n): { program: IProgram; dayData: Required<IDayData> } {\n  const evaluatedProgram = Program_evaluate(program, settings);\n  const dayData = Program_getDayData(evaluatedProgram, afterDay);\n  const newDayData = { week: dayData.week, day: dayData.day + 1, dayInWeek: dayData.dayInWeek + 1 };\n  const newDay: IEvaluatedProgramDay = {\n    dayData: newDayData,\n    name: `Day ${dayData.day + 1}`,\n    exercises: record.entries.map((e, i) => {\n      return PlannerProgramExercise_createExerciseFromEntry(e, newDayData, settings, i);\n    }),\n  };\n  evaluatedProgram.weeks[dayData.week - 1].days.splice(dayData.dayInWeek, 0, newDay);\n  evaluatedProgram.planner.weeks[dayData.week - 1].days.splice(dayData.dayInWeek, 0, {\n    name: newDay.name,\n    exerciseText: newDay.exercises.map((e) => e.fullName).join(\"\\n\"),\n  });\n  const newPlanner = new ProgramToPlanner(evaluatedProgram, settings).convertToPlanner();\n  const newProgram = {\n    ...ObjectUtils_clone(program),\n    planner: newPlanner,\n  };\n  return { program: newProgram, dayData: newDayData };\n}\n\nexport function Program_getReuseSetsCandidates(\n  key: string,\n  evaluatedProgram: IEvaluatedProgram,\n  dayData: Required<IDayData>\n): Record<string, IReuseCandidate> {\n  const result: Record<string, IReuseCandidate> = {};\n  PP_iterate2(evaluatedProgram.weeks, (exercise, weekIndex, dayInWeekIndex) => {\n    if (\n      exercise.key === key &&\n      ((dayData.week === weekIndex + 1 && dayData.dayInWeek === dayInWeekIndex + 1) || exercise.isRepeat)\n    ) {\n      return;\n    }\n    if (exercise.reuse != null || exercise.progress?.reuse != null || exercise.update?.reuse != null) {\n      return;\n    }\n    let reuseSetCandidate = result[exercise.key];\n    if (!reuseSetCandidate) {\n      reuseSetCandidate = {\n        exercise,\n        weekAndDays: {},\n      };\n      result[exercise.key] = reuseSetCandidate;\n    }\n    reuseSetCandidate.weekAndDays[weekIndex + 1] = reuseSetCandidate.weekAndDays[weekIndex + 1] || new Set<number>();\n    reuseSetCandidate.weekAndDays[weekIndex + 1].add(dayInWeekIndex + 1);\n  });\n  return result;\n}\n\nexport function Program_getScriptReuseCandidates(\n  key: string,\n  notused: boolean,\n  evaluatedProgram: IEvaluatedProgram,\n  type: \"progress\" | \"update\"\n): string[] {\n  const result: Record<string, string> = {};\n  PP_iterate2(evaluatedProgram.weeks, (exercise) => {\n    if (exercise.key === key) {\n      return;\n    }\n    const script = type === \"progress\" ? exercise.progress : exercise.update;\n    if (!script || script.type !== \"custom\" || (!(!notused && exercise.notused) && script.reuse)) {\n      return;\n    }\n    result[exercise.fullName] = exercise.fullName;\n  });\n  return Object.keys(result);\n}\n\nexport function Program_getReusingSetsExercises(\n  evaluatedProgram: IEvaluatedProgram,\n  programExercise: IPlannerProgramExercise\n): IPlannerProgramExercise[] {\n  const exercises: IPlannerProgramExercise[] = [];\n  PP_iterate2(evaluatedProgram.weeks, (e) => {\n    if (\n      e.reuse?.exercise?.key === programExercise.key &&\n      e.reuse?.exercise.dayData.week === programExercise.dayData.week &&\n      e.reuse?.exercise.dayData.dayInWeek === programExercise.dayData.dayInWeek\n    ) {\n      exercises.push(e);\n    }\n  });\n  return exercises;\n}\n\nexport function Program_getReusingDescriptionsExercises(\n  evaluatedProgram: IEvaluatedProgram,\n  programExercise: IPlannerProgramExercise\n): IPlannerProgramExercise[] {\n  const exercises: IPlannerProgramExercise[] = [];\n  PP_iterate2(evaluatedProgram.weeks, (e) => {\n    if (\n      e.descriptions.reuse?.exercise?.key === programExercise.key &&\n      e.descriptions.reuse?.exercise.dayData.week === programExercise.dayData.week &&\n      e.descriptions.reuse?.exercise.dayData.dayInWeek === programExercise.dayData.dayInWeek\n    ) {\n      exercises.push(e);\n    }\n  });\n  return exercises;\n}\n\nexport function Program_getReusingCustomProgressExercises(\n  evaluatedProgram: IEvaluatedProgram,\n  programExercise: IPlannerProgramExercise\n): IPlannerProgramExercise[] {\n  const exercises: IPlannerProgramExercise[] = [];\n  PP_iterate2(evaluatedProgram.weeks, (e) => {\n    if (e.progress?.type === \"custom\" && e.progress?.reuse?.fullName === programExercise.fullName) {\n      exercises.push(e);\n    }\n  });\n  return exercises;\n}\n\nexport function Program_getReusingSetProgressExercises(\n  evaluatedProgram: IEvaluatedProgram,\n  programExercise: IPlannerProgramExercise\n): IPlannerProgramExercise[] {\n  const exercises: IPlannerProgramExercise[] = [];\n  PP_iterate2(evaluatedProgram.weeks, (e) => {\n    if (e.reuse?.fullName === programExercise.fullName && e.progress) {\n      exercises.push(e);\n    }\n  });\n  return exercises;\n}\n\nexport function Program_getReusingProgressExercises(\n  evaluatedProgram: IEvaluatedProgram,\n  programExercise: IPlannerProgramExercise\n): IPlannerProgramExercise[] {\n  const reusingCustomProgressExercises = Program_getReusingCustomProgressExercises(evaluatedProgram, programExercise);\n  const reusingSetProgressExercises = Program_getReusingSetProgressExercises(evaluatedProgram, programExercise);\n  const exercises = CollectionUtils_uniqBy(\n    [...reusingCustomProgressExercises, ...reusingSetProgressExercises],\n    \"fullName\"\n  );\n  return exercises;\n}\n\nexport function Program_getReusingUpdateExercises(\n  evaluatedProgram: IEvaluatedProgram,\n  programExercise: IPlannerProgramExercise\n): IPlannerProgramExercise[] {\n  const exercises: IPlannerProgramExercise[] = [];\n  PP_iterate2(evaluatedProgram.weeks, (e) => {\n    if (e.reuse?.fullName === programExercise.fullName) {\n      exercises.push(e);\n    }\n  });\n  return exercises;\n}\n\nexport const Program_fullProgram = memoize(\n  (program: IProgram, settings: ISettings): IProgram => {\n    return program;\n  },\n  { maxSize: 10 }\n);\n\nexport const Program_evaluate = memoize(Program_forceEvaluate, { maxSize: 10 });\n\nexport function Program_getDiffState(\n  state: IProgramState,\n  newState: IProgramState,\n  units: IUnit\n): Record<string, string | undefined> {\n  return ObjectUtils_keys(state).reduce<Record<string, string | undefined>>((memo, key) => {\n    const oldValue = state[key];\n    const newValue = newState[key];\n    if (newValue != null && !Weight_eq(oldValue, newValue)) {\n      const oldValueStr = Weight_display(Weight_convertTo(oldValue as number, units));\n      const newValueStr = Weight_display(Weight_convertTo(newValue as number, units));\n      memo[key] = `${oldValueStr} -> ${newValueStr}`;\n    }\n    return memo;\n  }, {});\n}\n\nexport function Program_getDiffVars(\n  entry: IHistoryEntry,\n  updates: ILiftoscriptEvaluatorUpdate[],\n  bindings: IScriptBindings,\n  settings: ISettings\n): Record<string, string | undefined> {\n  const diffVars: Record<string, string | undefined> = {};\n  if (bindings.rm1 != null) {\n    const oldOnerm = Exercise_onerm(entry.exercise, settings);\n    if (!Weight_eq(oldOnerm, bindings.rm1)) {\n      diffVars[\"1 RM\"] = `${Weight_display(Weight_convertTo(oldOnerm, settings.units))} -> ${Weight_display(\n        Weight_convertTo(bindings.rm1, settings.units)\n      )}`;\n    }\n  }\n  for (const update of updates) {\n    const key = update.type;\n    const value = update.value;\n    const target = value.target;\n    while (target[0] === \"*\") {\n      target.shift();\n    }\n    const keyStr = `${key}${target.length > 0 ? `[${target.join(\":\")}]` : \"\"}`;\n    diffVars[keyStr] = `${value.op !== \"=\" ? `${value.op} ` : \"\"}${Weight_printOrNumber(value.value)}`;\n  }\n  return diffVars;\n}\n\nexport interface IProgressStateChanges {\n  diffState: Record<string, string | undefined>;\n  diffVars: Record<string, string | undefined>;\n  prints: string[];\n}\n\nexport function Program_computeProgressStateChanges(\n  entry: IHistoryEntry,\n  dayData: IDayData,\n  settings: ISettings,\n  programExercise: IPlannerProgramExercise,\n  program: IEvaluatedProgram,\n  stats: IStats,\n  userPromptedStateVars?: IProgramState\n): IProgressStateChanges | undefined {\n  const state = PlannerProgramExercise_getState(programExercise);\n  const result = Program_runExerciseFinishDayScript(\n    entry,\n    dayData,\n    settings,\n    state,\n    program.states,\n    programExercise,\n    stats,\n    userPromptedStateVars\n  );\n  if (!result.success) {\n    return undefined;\n  }\n  const { state: newState, updates, bindings } = result.data;\n  return {\n    diffState: Program_getDiffState(state, newState, settings.units),\n    diffVars: Program_getDiffVars(entry, updates, bindings, settings),\n    prints: result.data.prints,\n  };\n}\n\nexport function Program_getEvaluatedProgramFromState(state: IState): IEvaluatedProgram | undefined {\n  const program = Program_getCurrentProgram(state.storage);\n  return program ? Program_evaluate(program, state.storage.settings) : undefined;\n}\n","import { IProgramState, IProgramExerciseWarmupSet, ISettings, IProgramSet, IPercentage } from \"../types\";\nimport { IEvaluatedProgram, Program_getProgramDayExercises } from \"./program\";\nimport { ProgramSet_isEligibleForInferredWeight, ProgramSet_getEvaluatedWeight } from \"./programSet\";\nimport { IWeight } from \"../types\";\nimport { ObjectUtils_keys, ObjectUtils_values, ObjectUtils_clone } from \"../utils/object\";\nimport { Weight_print, Weight_printOrNumber, Weight_isPct, Weight_build, Weight_applyOp, Weight_is } from \"./weight\";\nimport { Exercise_onerm } from \"./exercise\";\nimport { CollectionUtils_compact, CollectionUtils_sortBy } from \"../utils/collection\";\nimport { ScriptRunner } from \"../parser\";\nimport { IAssignmentOp, ILiftoscriptEvaluatorUpdate } from \"../liftoscriptEvaluator\";\nimport { MathUtils_applyOp } from \"../utils/math\";\nimport {\n  IPlannerProgramExercise,\n  IPlannerProgramExerciseEvaluatedSet,\n  IPlannerProgramExerciseWithType,\n} from \"../pages/planner/models/types\";\nimport {\n  PlannerProgramExercise_getStateMetadata,\n  PlannerProgramExercise_sets,\n  PlannerProgramExercise_getProgressScript,\n  PlannerProgramExercise_getUpdateScript,\n  PlannerProgramExercise_currentEvaluatedSetVariationIndex,\n  PlannerProgramExercise_currentExerciseVariationIndex,\n  PlannerProgramExercise_currentDescriptionIndex,\n} from \"../pages/planner/models/plannerProgramExercise\";\nimport { PP_iterate2 } from \"./pp\";\n\nexport interface IWeightChange {\n  originalWeight: IWeight | IPercentage;\n  weight: IWeight | IPercentage;\n  current: boolean;\n}\n\nexport interface IProgramExerciseExample {\n  title: string;\n  description: string;\n  sets: IProgramSet[];\n  state: IProgramState;\n  finishDayExpr: string;\n  rules: {\n    sets: \"keep\" | \"replace\";\n    reps: \"keep\" | \"keep_if_has_vars\" | \"replace\";\n    weight: \"keep\" | \"keep_if_has_vars\" | \"replace\";\n  };\n}\n\nexport function ProgramExercise_hasUserPromptedVars(programExercise: IPlannerProgramExercise): boolean {\n  const stateMetadata = PlannerProgramExercise_getStateMetadata(programExercise) || {};\n  return ObjectUtils_keys(stateMetadata).some((key) => stateMetadata[key]?.userPrompted);\n}\n\nexport function ProgramExercise_getQuickAddSets(programExercise: IPlannerProgramExercise): boolean {\n  return PlannerProgramExercise_sets(programExercise).some((set) => !!set.repRange?.isQuickAddSet);\n}\n\nexport function ProgramExercise_getEnableRpe(programExercise: IPlannerProgramExercise): boolean {\n  return PlannerProgramExercise_sets(programExercise).some((set) => set.rpe != null);\n}\n\nfunction warmupSetToKey(set: IProgramExerciseWarmupSet): string {\n  return `${set.reps}-${Weight_print(set.threshold)}-${Weight_printOrNumber(set.value)}`;\n}\n\nexport function ProgramExercise_groupWarmupsSets(\n  sets: IProgramExerciseWarmupSet[]\n): [IProgramExerciseWarmupSet, number][] {\n  let lastKey: string | undefined;\n  const groups: [IProgramExerciseWarmupSet, number][] = [];\n  for (const set of sets) {\n    const key = warmupSetToKey(set);\n    if (lastKey == null || lastKey !== key) {\n      groups.push([set, 0]);\n    }\n    groups[groups.length - 1][1] += 1;\n    lastKey = key;\n  }\n  return groups;\n}\n\nexport function ProgramExercise_doesUse1RM(programExercise: IPlannerProgramExercise): boolean {\n  const usesPercentageWeights = programExercise.evaluatedSetVariations.some((v) => {\n    return v.sets.some((set) => {\n      return Weight_isPct(set.weight) || ProgramSet_isEligibleForInferredWeight(set);\n    });\n  });\n  const usesRM1Var = ProgramExercise_isUsingVariable(programExercise, \"rm1\");\n  return usesPercentageWeights || usesRM1Var;\n}\n\nexport function ProgramExercise_doesUseRPE(programExercise: IPlannerProgramExercise): boolean {\n  if (programExercise.globals.logRpe || programExercise.globals.rpe != null) {\n    return true;\n  }\n  return programExercise.evaluatedSetVariations.some((v) => {\n    return v.sets.some((set) => set.logRpe || set.rpe != null);\n  });\n}\n\nexport function ProgramExercise_isUsingVariable(programExercise: IPlannerProgramExercise, name: string): boolean {\n  const expressions = CollectionUtils_compact([\n    PlannerProgramExercise_getProgressScript(programExercise),\n    PlannerProgramExercise_getUpdateScript(programExercise),\n  ]);\n  return expressions.some((e) => ScriptRunner.hasKeyword(e, name));\n}\n\nexport function ProgramExercise_weightChanges(program: IEvaluatedProgram, programExerciseKey: string): IWeightChange[] {\n  const results: Record<string, IWeightChange> = {};\n  PP_iterate2(program.weeks, (exercise) => {\n    if (exercise.key === programExerciseKey) {\n      const currentVariationIndex = PlannerProgramExercise_currentEvaluatedSetVariationIndex(exercise);\n      for (let variationIndex = 0; variationIndex < exercise.evaluatedSetVariations.length; variationIndex += 1) {\n        const variation = exercise.evaluatedSetVariations[variationIndex];\n        for (let setIndex = 0; setIndex < variation.sets.length; setIndex += 1) {\n          const set = variation.sets[setIndex];\n          if (set.weight) {\n            const key = Weight_print(set.weight);\n            results[key] = {\n              originalWeight: set.weight,\n              weight: set.weight,\n              current: results[key]?.current || variationIndex + 1 === currentVariationIndex,\n            };\n          }\n        }\n      }\n    }\n  });\n  return CollectionUtils_sortBy(ObjectUtils_values(results), \"current\", true);\n}\n\nexport function ProgramExercise_applyVariables(\n  programExerciseKey: string,\n  program: IEvaluatedProgram,\n  updates: ILiftoscriptEvaluatorUpdate[],\n  settings: ISettings\n): void {\n  for (const update of updates) {\n    const key = update.type;\n    const value = update.value;\n    const target = value.target;\n    const [week, day, variation, set] = target;\n    let dayIndex = 0;\n    for (let weekIndex = 0; weekIndex < program.weeks.length; weekIndex += 1) {\n      const programWeek = program.weeks[weekIndex];\n      for (let dayInWeekIndex = 0; dayInWeekIndex < programWeek.days.length; dayInWeekIndex += 1) {\n        const programDay = programWeek.days[dayInWeekIndex];\n        const dayExercises = Program_getProgramDayExercises(programDay);\n        for (const exercise of dayExercises) {\n          if (exercise.key !== programExerciseKey) {\n            continue;\n          }\n          for (let variationIndex = 0; variationIndex < exercise.evaluatedSetVariations.length; variationIndex += 1) {\n            const setVariation = exercise.evaluatedSetVariations[variationIndex];\n            const sets = setVariation.sets;\n            if (\n              (week === \"*\" || week === weekIndex + 1) &&\n              (day === \"*\" || day === dayInWeekIndex + 1) &&\n              (variation === \"*\" || variation === variationIndex + 1)\n            ) {\n              if (key === \"numberOfSets\" && typeof value.value === \"number\") {\n                const newValue = MathUtils_applyOp(sets.length, value.value, value.op);\n                const defaultSet: IPlannerProgramExerciseEvaluatedSet = {\n                  maxrep: 1,\n                  weight: Weight_build(100, \"lb\"),\n                  logRpe: false,\n                  isAmrap: false,\n                  isQuickAddSet: false,\n                  askWeight: false,\n                };\n                const lastSet = sets[sets.length - 1] || defaultSet;\n                sets.splice(newValue);\n                for (let i = sets.length; i < newValue; i += 1) {\n                  sets.push(ObjectUtils_clone(lastSet));\n                }\n              }\n            }\n            for (let setIndex = 0; setIndex < sets.length; setIndex += 1) {\n              if (\n                (week === \"*\" || week === weekIndex + 1) &&\n                (day === \"*\" || day === dayInWeekIndex + 1) &&\n                (variation === \"*\" || variation === variationIndex + 1) &&\n                (set === \"*\" || set === setIndex + 1)\n              ) {\n                if (key === \"RPE\") {\n                  operation(exercise, sets[setIndex], settings, \"rpe\", value.value, value.op);\n                } else if (key === \"reps\") {\n                  operation(exercise, sets[setIndex], settings, \"maxrep\", value.value, value.op);\n                } else if (key === \"minReps\") {\n                  operation(exercise, sets[setIndex], settings, \"minrep\", value.value, value.op);\n                } else if (key === \"timers\") {\n                  operation(exercise, sets[setIndex], settings, \"timer\", value.value, value.op);\n                } else if (key === \"setTime\") {\n                  operation(exercise, sets[setIndex], settings, \"setTimer\", value.value, value.op);\n                } else if (key === \"weights\") {\n                  operation(exercise, sets[setIndex], settings, \"weight\", value.value, value.op);\n                } else if (key === \"amraps\") {\n                  operation(exercise, sets[setIndex], settings, \"isAmrap\", value.value, value.op);\n                } else if (key === \"logrpes\") {\n                  operation(exercise, sets[setIndex], settings, \"logRpe\", value.value, value.op);\n                } else if (key === \"askweights\") {\n                  operation(exercise, sets[setIndex], settings, \"askWeight\", value.value, value.op);\n                }\n              }\n            }\n          }\n          if ((week === \"*\" || week === weekIndex + 1) && (day === \"*\" || day === dayInWeekIndex + 1)) {\n            if (key === \"setVariationIndex\" && typeof update.value.value === \"number\") {\n              let indexValue: number;\n              if (update.value.op === \"=\") {\n                indexValue = update.value.value - 1;\n              } else {\n                const currentSetVariationIndex = PlannerProgramExercise_currentEvaluatedSetVariationIndex(exercise);\n                indexValue = Weight_applyOp(\n                  undefined,\n                  currentSetVariationIndex,\n                  update.value.value,\n                  update.value.op\n                ) as number;\n              }\n              indexValue = indexValue % exercise.evaluatedSetVariations.length;\n              exercise.evaluatedSetVariations.forEach((s) => (s.isCurrent = false));\n              const sv = exercise.evaluatedSetVariations[indexValue];\n              if (sv != null) {\n                sv.isCurrent = true;\n              }\n            } else if (key === \"exerciseVariationIndex\" && typeof update.value.value === \"number\") {\n              const variations = exercise.exerciseVariations ?? [];\n              if (variations.length > 0) {\n                let indexValue: number;\n                if (update.value.op === \"=\") {\n                  indexValue = update.value.value - 1;\n                } else {\n                  const currentExerciseVariationIndex = PlannerProgramExercise_currentExerciseVariationIndex(exercise);\n                  indexValue = Weight_applyOp(\n                    undefined,\n                    currentExerciseVariationIndex,\n                    update.value.value,\n                    update.value.op\n                  ) as number;\n                }\n                indexValue = ((indexValue % variations.length) + variations.length) % variations.length;\n                variations.forEach((v) => (v.isCurrent = false));\n                const nextVariation = variations[indexValue];\n                if (nextVariation != null) {\n                  nextVariation.isCurrent = true;\n                  if (nextVariation.exerciseType != null) {\n                    exercise.exerciseType = nextVariation.exerciseType;\n                  }\n                }\n              }\n            } else if (key === \"descriptionIndex\" && typeof update.value.value === \"number\") {\n              let indexValue: number;\n              if (update.value.op === \"=\") {\n                indexValue = update.value.value - 1;\n              } else {\n                const currentDescriptionIndex = PlannerProgramExercise_currentDescriptionIndex(exercise);\n                indexValue = Weight_applyOp(\n                  undefined,\n                  currentDescriptionIndex,\n                  update.value.value,\n                  update.value.op\n                ) as number;\n              }\n              indexValue = indexValue % exercise.descriptions.values.length;\n              exercise.descriptions.values.forEach((s) => (s.isCurrent = false));\n              const d = exercise.descriptions.values[indexValue];\n              if (d != null) {\n                d.isCurrent = true;\n              }\n            }\n          }\n        }\n        dayIndex += 1;\n      }\n    }\n  }\n}\n\nfunction operation(\n  programExercise: IPlannerProgramExerciseWithType,\n  set: IPlannerProgramExerciseEvaluatedSet,\n  settings: ISettings,\n  key: \"maxrep\" | \"minrep\" | \"weight\" | \"rpe\" | \"timer\" | \"setTimer\" | \"logRpe\" | \"isAmrap\" | \"askWeight\",\n  value: IWeight | IPercentage | number,\n  op: IAssignmentOp\n): void {\n  if (op === \"=\") {\n    if (key === \"weight\" && (Weight_is(value) || Weight_isPct(value))) {\n      set[key] = value;\n    } else if (\n      typeof value === \"number\" &&\n      (key === \"maxrep\" || key === \"minrep\" || key === \"timer\" || key === \"setTimer\" || key === \"rpe\")\n    ) {\n      set[key] = value;\n    } else if (typeof value === \"number\" && (key === \"askWeight\" || key === \"isAmrap\" || key === \"logRpe\")) {\n      set[key] = value !== 0;\n    }\n  } else {\n    const onerm = Exercise_onerm(programExercise.exerciseType, settings);\n    let oldValue = typeof set[key] === \"boolean\" ? (set[key] ? 1 : 0) : set[key];\n    if (oldValue == null && ProgramSet_isEligibleForInferredWeight(set)) {\n      const inferredWeight = ProgramSet_getEvaluatedWeight(set, programExercise.exerciseType, settings);\n      oldValue = inferredWeight;\n    }\n    const newValue = Weight_applyOp(onerm, oldValue ?? 0, value, op);\n    if (key === \"weight\" && (Weight_is(newValue) || Weight_isPct(newValue))) {\n      set[key] = newValue;\n    } else if (\n      typeof newValue === \"number\" &&\n      (key === \"maxrep\" || key === \"minrep\" || key === \"timer\" || key === \"setTimer\" || key === \"rpe\")\n    ) {\n      set[key] = newValue;\n    } else if (typeof newValue === \"number\" && (key === \"askWeight\" || key === \"isAmrap\" || key === \"logRpe\")) {\n      set[key] = newValue !== 0;\n    }\n  }\n}\n","import { IPlannerProgramExerciseEvaluatedSet } from \"../pages/planner/models/types\";\nimport { IExerciseType, IProgramSet, ISettings, IWeight } from \"../types\";\nimport { Equipment_getUnitOrDefaultForExerciseType } from \"./equipment\";\nimport { Weight_evaluateWeight, Weight_rpePct, Weight_roundConvertTo } from \"./weight\";\n\nexport function ProgramSet_group(sets: IProgramSet[]): IProgramSet[][] {\n  return sets.reduce<IProgramSet[][]>(\n    (memo, set) => {\n      let lastGroup = memo[memo.length - 1];\n      const last = lastGroup[lastGroup.length - 1];\n      if (\n        last != null &&\n        (last.weightExpr !== set.weightExpr ||\n          last.repsExpr !== set.repsExpr ||\n          last.isAmrap !== set.isAmrap ||\n          last.rpeExpr !== set.rpeExpr ||\n          last.logRpe !== set.logRpe)\n      ) {\n        memo.push([]);\n        lastGroup = memo[memo.length - 1];\n      }\n      lastGroup.push(set);\n      return memo;\n    },\n    [[]]\n  );\n}\n\nexport function ProgramSet_isEligibleForInferredWeight(set: IPlannerProgramExerciseEvaluatedSet): boolean {\n  return set.weight == null && set.maxrep != null && set.rpe != null;\n}\n\nexport function ProgramSet_getEvaluatedWeight(\n  programSet: IPlannerProgramExerciseEvaluatedSet,\n  exerciseType: IExerciseType,\n  settings: ISettings\n): IWeight | undefined {\n  const originalWeight = programSet.weight;\n  const unit = Equipment_getUnitOrDefaultForExerciseType(settings, exerciseType);\n  const evaluatedWeight = originalWeight\n    ? Weight_evaluateWeight(originalWeight, exerciseType, settings)\n    : ProgramSet_isEligibleForInferredWeight(programSet) && programSet.maxrep != null && programSet.rpe != null\n      ? Weight_evaluateWeight(Weight_rpePct(programSet.maxrep, programSet.rpe), exerciseType, settings)\n      : undefined;\n  return evaluatedWeight ? Weight_roundConvertTo(evaluatedWeight, settings, unit, exerciseType) : undefined;\n}\n","import {\n  PlannerProgram_generateFullText,\n  PlannerProgram_topLineItems,\n  PlannerProgram_groupedTopLines,\n  PlannerProgram_compact,\n} from \"../pages/planner/models/plannerProgram\";\nimport {\n  IDayData,\n  IPercentage,\n  IPlannerProgram,\n  IPlannerProgramDay,\n  IPlannerProgramWeek,\n  ISettings,\n  IWeight,\n} from \"../types\";\nimport { n } from \"../utils/math\";\nimport { Dialog_alert } from \"../utils/dialog\";\nimport { ObjectUtils_isEqual, ObjectUtils_entries, ObjectUtils_keys } from \"../utils/object\";\nimport {\n  Weight_eqNull,\n  Weight_eq,\n  Weight_zero,\n  Weight_print,\n  Weight_buildPct,\n  Weight_build,\n  Weight_printNull,\n} from \"./weight\";\nimport {\n  PlannerProgramExercise_currentEvaluatedSetVariationIndex,\n  PlannerProgramExercise_getOnlyChangedState,\n  PlannerProgramExercise_getProgressScript,\n  PlannerProgramExercise_getState,\n  PlannerProgramExercise_getStateMetadata,\n  PlannerProgramExercise_getUpdateScript,\n  PlannerProgramExercise_sets,\n  PlannerProgramExercise_warmups,\n} from \"../pages/planner/models/plannerProgramExercise\";\nimport {\n  IPlannerProgramExercise,\n  IPlannerProgramExerciseEvaluatedSet,\n  IPlannerProgramExerciseEvaluatedSetVariation,\n  IPlannerProgramExerciseWarmupSet,\n} from \"../pages/planner/models/types\";\nimport { IEvaluatedProgram, Program_getProgramExercise } from \"./program\";\nimport { Exercise_get, Exercise_fullName, Exercise_buildName } from \"./exercise\";\nimport { CollectionUtils_compact } from \"../utils/collection\";\nimport { PP_iterate2, PP_iterateTopLineExercises } from \"./pp\";\nimport { PlannerKey_fromFullName, PlannerKey_fromPlannerExercise } from \"../pages/planner/plannerKey\";\nimport { IPlannerTopLineItem } from \"../pages/planner/plannerExerciseEvaluator\";\n\ninterface IPlannerToProgram2Globals {\n  weight?: IWeight | IPercentage;\n  rpe?: number;\n  timer?: number;\n  setTimer?: number;\n  isOverflowSetTimer?: boolean;\n  logRpe?: boolean;\n  askWeight?: boolean;\n}\n\ntype IDereuseDecision = \"sets\" | \"weight\" | \"rpe\" | \"timer\" | \"setTimer\" | \"progress\" | \"update\";\n\ntype IShareablePropertyName = \"progress\" | \"update\" | \"warmup\" | \"id\";\ninterface IPropertyCandidate {\n  location: string;\n  exercise: IPlannerProgramExercise;\n  isOrigin: boolean;\n}\n// Where a shared property gets printed, and which instance it's read from. Those differ because\n// the removed editProgramExercise UI edited shared properties on the first instance only.\n// TODO: nothing edits that way now, so drop 'exercise' and read the property off the origin instance.\ntype IPropertyTarget = { location: string; exercise: IPlannerProgramExercise };\ntype IPropertyTargets = Record<IShareablePropertyName, Record<string, IPropertyTarget>>;\ntype IPropertyCandidates = Record<IShareablePropertyName, Record<string, IPropertyCandidate[]>>;\n\nexport interface IPlannerToProgramConvertOpts {\n  renameMapping?: Record<string, { to: string; dayData?: Required<IDayData> }>;\n  reorder?: { dayData: Required<IDayData>; fromIndex: number; toIndex: number }[];\n  add?: { dayData: Required<IDayData>; index: number; fullName: string }[];\n}\n\nexport class ProgramToPlanner {\n  constructor(\n    private readonly program: IEvaluatedProgram,\n    private readonly settings: ISettings\n  ) {}\n\n  private getCurrentDescriptionExercise(\n    key: string,\n    weekIndex: number,\n    dayInWeekIndex: number\n  ): IPlannerProgramExercise | undefined {\n    return this.program.weeks[weekIndex]?.days[dayInWeekIndex]?.exercises?.find((e) => e.key === key);\n  }\n\n  private isInheritedDescription(exercise: IPlannerProgramExercise, weekIndex: number, dayInWeekIndex: number): boolean {\n    for (let i = weekIndex - 1; i >= 0; i -= 1) {\n      const day = this.program.weeks[i]?.days[dayInWeekIndex];\n      if (day == null) {\n        return false;\n      }\n      const lastWeekExercise = day.exercises.find((e) => e.key === exercise.key);\n      if (lastWeekExercise != null) {\n        return (\n          exercise.descriptions.reuse?.fullName === lastWeekExercise.descriptions.reuse?.fullName &&\n          ObjectUtils_isEqual(exercise.descriptions.values, lastWeekExercise.descriptions.values)\n        );\n      }\n    }\n    return false;\n  }\n\n  private getCurrentDescriptionIndex(key: string, weekIndex: number, dayInWeekIndex: number): number {\n    const exercise = this.getCurrentDescriptionExercise(key, weekIndex, dayInWeekIndex);\n    const descriptions = exercise?.descriptions.values || [];\n    const index = descriptions.findIndex((s) => s.isCurrent);\n    return index === -1 ? 0 : index;\n  }\n\n  private shouldReuseSets(programExercise: IPlannerProgramExercise): boolean {\n    return !!programExercise.reuse;\n  }\n\n  private getDereuseDecisions(programExercise: IPlannerProgramExercise): IDereuseDecision[] {\n    const dereuseDecisions: Set<IDereuseDecision> = new Set();\n    const reuseExercise = programExercise.reuse?.exercise;\n    if (!reuseExercise) {\n      return Array.from(dereuseDecisions);\n    }\n    const globals = this.getGlobals(programExercise);\n    const reusedGlobals = this.getGlobals(reuseExercise);\n    if (programExercise.evaluatedSetVariations.length !== reuseExercise.evaluatedSetVariations.length) {\n      dereuseDecisions.add(\"sets\");\n    }\n    if (\n      PlannerProgramExercise_currentEvaluatedSetVariationIndex(programExercise) !==\n      PlannerProgramExercise_currentEvaluatedSetVariationIndex(reuseExercise)\n    ) {\n      dereuseDecisions.add(\"sets\");\n    }\n    if (reuseExercise.progress != null || programExercise.progress != null) {\n      if (\n        programExercise.progress == null ||\n        programExercise.progress.type !== reuseExercise.progress?.type ||\n        (programExercise.progress.reuse\n          ? programExercise.progress.reuse?.fullName !== reuseExercise.fullName\n          : programExercise.progress.script !== reuseExercise.progress.script) ||\n        Object.keys(PlannerProgramExercise_getOnlyChangedState(programExercise)).length > 0\n      ) {\n        dereuseDecisions.add(\"progress\");\n      }\n    }\n    if (reuseExercise.update != null || programExercise.update != null) {\n      if (\n        programExercise.update == null ||\n        (programExercise.update.reuse\n          ? programExercise.update.reuse?.fullName !== reuseExercise.fullName\n          : programExercise.update.script !== reuseExercise.update?.script)\n      ) {\n        dereuseDecisions.add(\"update\");\n      }\n    }\n    if (programExercise.evaluatedSetVariations.length === reuseExercise.evaluatedSetVariations.length) {\n      for (let i = 0; i < programExercise.evaluatedSetVariations.length; i += 1) {\n        const programVariation = programExercise.evaluatedSetVariations[i];\n        const reuseVariation = reuseExercise.evaluatedSetVariations[i];\n        if (programVariation.sets.length !== reuseVariation.sets.length) {\n          dereuseDecisions.add(\"sets\");\n        }\n        for (let j = 0; j < programVariation.sets.length; j += 1) {\n          const programSet = programVariation.sets[j];\n          const reuseSet = reuseVariation.sets[j];\n          if (programSet.maxrep !== reuseSet?.maxrep || programSet.minrep !== reuseSet?.minrep) {\n            dereuseDecisions.add(\"sets\");\n          }\n          if (\n            reuseSet\n              ? !Weight_eqNull(programSet.weight, reuseSet.weight) || programSet.askWeight !== reuseSet.askWeight\n              : !Weight_eq(globals.weight || Weight_zero, reusedGlobals.weight || Weight_zero) ||\n                globals.askWeight !== reusedGlobals.askWeight\n          ) {\n            if (globals.weight != null) {\n              dereuseDecisions.add(\"weight\");\n            } else {\n              dereuseDecisions.add(\"sets\");\n            }\n          }\n          if (\n            reuseSet\n              ? programSet.rpe !== reuseSet.rpe || programSet.logRpe !== reuseSet.logRpe\n              : globals.rpe !== reusedGlobals.rpe || globals.logRpe !== reusedGlobals.logRpe\n          ) {\n            if (globals.rpe != null) {\n              dereuseDecisions.add(\"rpe\");\n            } else {\n              dereuseDecisions.add(\"sets\");\n            }\n          }\n          if (reuseSet ? programSet.timer !== reuseSet.timer : globals.timer !== reusedGlobals.timer) {\n            if (globals.timer != null) {\n              dereuseDecisions.add(\"timer\");\n            } else {\n              dereuseDecisions.add(\"sets\");\n            }\n          }\n          if (\n            programSet.setTimer !== reuseSet?.setTimer ||\n            !!programSet.isOverflowSetTimer !== !!reuseSet?.isOverflowSetTimer\n          ) {\n            if (globals.setTimer != null) {\n              dereuseDecisions.add(\"setTimer\");\n            } else {\n              dereuseDecisions.add(\"sets\");\n            }\n          }\n        }\n      }\n    }\n    return Array.from(dereuseDecisions);\n  }\n\n  private reorderGroupedTopLine(\n    groupedTopLine: IPlannerTopLineItem[][][][],\n    reorders: IPlannerToProgramConvertOpts[\"reorder\"]\n  ): IPlannerTopLineItem[][][][] {\n    if (!reorders) {\n      return groupedTopLine;\n    }\n    for (const reorder of reorders) {\n      const groupedDay = groupedTopLine[reorder.dayData.week - 1]?.[reorder.dayData.dayInWeek - 1];\n      if (groupedDay) {\n        const indexMap = groupedDay.reduce<{ result: Record<number, number>; i: number }>(\n          ({ result, i }, group, index) => {\n            const exercise = group.find((item) => item.type === \"exercise\");\n            if (exercise && !exercise.notused) {\n              result[i] = index;\n              i += 1;\n            }\n            return { result, i };\n          },\n          { result: {}, i: 0 }\n        ).result;\n        const from = groupedDay[indexMap[reorder.fromIndex]];\n        if (from) {\n          groupedDay.splice(indexMap[reorder.fromIndex], 1);\n          groupedDay.splice(indexMap[reorder.toIndex], 0, from);\n        }\n      }\n    }\n    return groupedTopLine;\n  }\n\n  private addGroupedTopLine(\n    groupedTopLine: IPlannerTopLineItem[][][][],\n    adds: IPlannerToProgramConvertOpts[\"add\"]\n  ): IPlannerTopLineItem[][][][] {\n    if (!adds) {\n      return groupedTopLine;\n    }\n    for (const add of adds) {\n      const groupedDay = groupedTopLine[add.dayData.week - 1]?.[add.dayData.dayInWeek - 1];\n      if (groupedDay) {\n        groupedDay.splice(add.index, 0, [\n          { type: \"exercise\", value: PlannerKey_fromFullName(add.fullName, this.settings.exercises) },\n        ]);\n      }\n    }\n    return groupedTopLine;\n  }\n\n  private getRenamedValue(\n    opts: IPlannerToProgramConvertOpts,\n    line: IPlannerTopLineItem,\n    weekIndex: number,\n    dayInWeekIndex: number\n  ): string {\n    const renamedValue = opts.renameMapping?.[line.value];\n    if (\n      renamedValue &&\n      (!renamedValue.dayData ||\n        (renamedValue.dayData.week === weekIndex + 1 && renamedValue.dayData.dayInWeek === dayInWeekIndex + 1))\n    ) {\n      return renamedValue.to;\n    } else {\n      return line.value;\n    }\n  }\n\n  private addExerciseDescriptions(\n    exercise: IPlannerProgramExercise | undefined,\n    weekIndex: number,\n    dayInWeekIndex: number,\n    addedCurrentDescription: boolean\n  ): { lines: string[]; addedCurrentDescription: boolean } | undefined {\n    if (!exercise) {\n      return undefined;\n    }\n    if (\n      exercise?.descriptions.reuse == null ||\n      !ObjectUtils_isEqual(\n        exercise.descriptions.values || [],\n        exercise.descriptions.reuse.exercise?.descriptions.values || []\n      )\n    ) {\n      const lines: string[] = [];\n      const currentIndex = this.getCurrentDescriptionIndex(exercise.key, weekIndex, dayInWeekIndex);\n      for (let i = 0; i < exercise.descriptions.values.length; i += 1) {\n        if (i > 0) {\n          lines.push(\"\");\n        }\n        const description = exercise.descriptions.values[i];\n        const parts = description.value.split(\"\\n\");\n        for (const part of parts) {\n          if (currentIndex !== 0 && currentIndex === i && !addedCurrentDescription) {\n            lines.push(`// ! ${part}`);\n            addedCurrentDescription = true;\n          } else {\n            lines.push(`// ${part}`);\n          }\n        }\n      }\n      return { lines, addedCurrentDescription };\n    } else if (exercise?.descriptions.reuse?.exercise) {\n      const reusedExercise = exercise.descriptions.reuse.exercise;\n      const reusedDayData = reusedExercise.dayData;\n      const currentWeekReusedExercisesCount = this.program.weeks[weekIndex]?.days.filter((day) => {\n        return day.exercises.some((e) => e.key === reusedExercise.key);\n      }).length;\n      if (currentWeekReusedExercisesCount === 1 && reusedDayData.week === weekIndex + 1) {\n        return { lines: [`// ...${reusedExercise.fullName}`], addedCurrentDescription };\n      } else {\n        return {\n          lines: [`// ...${reusedExercise.fullName}[${reusedDayData.week}:${reusedDayData.dayInWeek}]`],\n          addedCurrentDescription,\n        };\n      }\n    } else {\n      return undefined;\n    }\n  }\n\n  private addPropertyCandidate(\n    candidates: Record<string, IPropertyCandidate[]>,\n    key: string,\n    candidate: IPropertyCandidate\n  ): void {\n    candidates[key] = candidates[key] || [];\n    candidates[key].push(candidate);\n  }\n\n  // 'progress'/'update'/'warmup' are shared across every instance of an exercise, so they're printed\n  // only once. Authors deliberately place bulky blocks away from the top of the program (e.g. on the\n  // last week), so print them back where they were written instead of on the first instance.\n  // A repeat-materialized copy carries the original's syntax points, so it's excluded from being the\n  // origin - otherwise every week a `[1-3]` line spans would claim to be where it was written.\n  private getPropertyTargets(\n    groupedTopLineMap: IPlannerTopLineItem[][][][],\n    opts: IPlannerToProgramConvertOpts\n  ): IPropertyTargets {\n    const candidates: IPropertyCandidates = { progress: {}, update: {}, warmup: {}, id: {} };\n    PP_iterateTopLineExercises(groupedTopLineMap, (line, weekIndex, dayInWeekIndex, dayIndex) => {\n      const value = this.getRenamedValue(opts, line, weekIndex, dayInWeekIndex);\n      const exercise = Program_getProgramExercise(dayIndex + 1, this.program, value);\n      if (exercise == null) {\n        return;\n      }\n      const location = `${weekIndex}_${dayInWeekIndex}`;\n      const dereuseDecisions = this.shouldReuseSets(exercise) ? this.getDereuseDecisions(exercise) : [];\n      const progress = exercise.progress;\n      if (\n        progress != null &&\n        progress.type !== \"none\" &&\n        (progress.reuse || progress.script) &&\n        (!exercise.reuse || dereuseDecisions.includes(\"progress\"))\n      ) {\n        this.addPropertyCandidate(candidates.progress, exercise.key, {\n          location,\n          exercise,\n          isOrigin: exercise.points.progressPoint != null && !exercise.isRepeat,\n        });\n      }\n      const update = exercise.update;\n      if (\n        update != null &&\n        (update.reuse || update.script) &&\n        (!exercise.reuse || dereuseDecisions.includes(\"update\"))\n      ) {\n        this.addPropertyCandidate(candidates.update, exercise.key, {\n          location,\n          exercise,\n          isOrigin: exercise.points.updatePoint != null && !exercise.isRepeat,\n        });\n      }\n      if (exercise.warmupSets != null) {\n        this.addPropertyCandidate(candidates.warmup, exercise.key, {\n          location,\n          exercise,\n          isOrigin: exercise.points.warmupPoint != null && !exercise.isRepeat,\n        });\n      }\n      if ((exercise.tags || []).length > 0) {\n        this.addPropertyCandidate(candidates.id, exercise.key, {\n          location,\n          exercise,\n          isOrigin: exercise.points.idPoint != null && !exercise.isRepeat,\n        });\n      }\n    });\n    const targets: IPropertyTargets = { progress: {}, update: {}, warmup: {}, id: {} };\n    for (const property of ObjectUtils_keys(candidates)) {\n      for (const key of ObjectUtils_keys(candidates[property])) {\n        const list = candidates[property][key];\n        const origin = list.find((c) => c.isOrigin) || list[0];\n        if (origin != null) {\n          targets[property][key] = { location: origin.location, exercise: list[0].exercise };\n        }\n      }\n    }\n    return targets;\n  }\n\n  private getPropertySource(\n    targets: IPropertyTargets,\n    property: IShareablePropertyName,\n    key: string,\n    weekIndex: number,\n    dayInWeekIndex: number,\n    fallback: IPlannerProgramExercise\n  ): IPlannerProgramExercise | undefined {\n    const target = targets[property][key];\n    if (target == null) {\n      return fallback;\n    }\n    return target.location === `${weekIndex}_${dayInWeekIndex}` ? target.exercise : undefined;\n  }\n\n  public convertToPlanner(opts: IPlannerToProgramConvertOpts = {}): IPlannerProgram {\n    const plannerWeeks: IPlannerProgramWeek[] = [];\n    const plannerProgram = this.program.planner;\n    if (this.program.errors.length > 0) {\n      const error = this.program.errors[0];\n      const msg = `There's an error during evaluating a program, week ${error.dayData.week}, day: ${error.dayData.dayInWeek}. Please fix it to proceed.\\n\\n${error.error.toString()}`;\n      console.log(PlannerProgram_generateFullText(plannerProgram.weeks));\n      Dialog_alert(msg);\n      throw error.error;\n    }\n    const topLineMap = PlannerProgram_topLineItems(plannerProgram, this.settings);\n    let groupedTopLineMap = PlannerProgram_groupedTopLines(topLineMap);\n    groupedTopLineMap = opts.reorder ? this.reorderGroupedTopLine(groupedTopLineMap, opts.reorder) : groupedTopLineMap;\n    groupedTopLineMap = opts.add ? this.addGroupedTopLine(groupedTopLineMap, opts.add) : groupedTopLineMap;\n    const propertyTargets = this.getPropertyTargets(groupedTopLineMap, opts);\n    let dayIndex = 0;\n    const addedProgressMap: Record<string, boolean> = {};\n    const addedUpdateMap: Record<string, boolean> = {};\n    const addedWarmupsMap: Record<string, boolean> = {};\n    const addedIdMap: Record<string, boolean> = {};\n\n    for (let weekIndex = 0; weekIndex < this.program.weeks.length; weekIndex += 1) {\n      const week = this.program.weeks[weekIndex];\n      const plannerWeek: IPlannerProgramWeek = { name: week.name, days: [], description: week.description };\n      for (let dayInWeekIndex = 0; dayInWeekIndex < week.days.length; dayInWeekIndex += 1) {\n        const programDay = week.days[dayInWeekIndex];\n        const plannerDay: IPlannerProgramDay = { name: programDay.name, exerciseText: \"\" };\n        let descriptionIndex: number | undefined = undefined;\n        let addedCurrentDescription = false;\n        let finishedToAddDescription = false;\n        const groupedTopLines = groupedTopLineMap[weekIndex][dayInWeekIndex];\n        let groupTextArr: string[] = [];\n        groupLoop: for (let groupIndex = 0; groupIndex < groupedTopLines.length; groupIndex += 1) {\n          const exerciseTextArr: string[] = [];\n          const group = groupedTopLines[groupIndex];\n          for (let lineIndex = 0; lineIndex < group.length; lineIndex += 1) {\n            const line = group[lineIndex];\n            switch (line.type) {\n              case \"comment\": {\n                exerciseTextArr.push(line.value);\n                break;\n              }\n              case \"description\": {\n                let key: string | undefined;\n                for (let i = lineIndex; i < group.length; i += 1) {\n                  if (group[i].type === \"exercise\") {\n                    key = this.getRenamedValue(opts, group[i], weekIndex, dayInWeekIndex);\n                    break;\n                  }\n                }\n                if (descriptionIndex == null) {\n                  descriptionIndex = 0;\n                }\n                if (finishedToAddDescription) {\n                  break;\n                }\n                if (key != null) {\n                  const exercise = this.getCurrentDescriptionExercise(key, weekIndex, dayInWeekIndex);\n                  const result = this.addExerciseDescriptions(\n                    exercise,\n                    weekIndex,\n                    dayInWeekIndex,\n                    addedCurrentDescription\n                  );\n                  if (result) {\n                    exerciseTextArr.push(...result.lines);\n                    addedCurrentDescription = result.addedCurrentDescription;\n                    finishedToAddDescription = true;\n                  } else {\n                    const currentIndex = this.getCurrentDescriptionIndex(key, weekIndex, dayInWeekIndex);\n                    if (currentIndex !== 0 && currentIndex === descriptionIndex && !addedCurrentDescription) {\n                      exerciseTextArr.push(line.value.replace(/^\\/\\/\\s*!?\\s*/, \"// ! \"));\n                      addedCurrentDescription = true;\n                    } else {\n                      exerciseTextArr.push(line.value.replace(/^(\\/\\/\\s*)!\\s*/, \"$1\"));\n                    }\n                  }\n                } else {\n                  exerciseTextArr.push(line.value.replace(/^(\\/\\/\\s*)!\\s*/, \"$1\"));\n                }\n                break;\n              }\n              case \"empty\": {\n                if (!finishedToAddDescription) {\n                  exerciseTextArr.push(\"\");\n                  if (descriptionIndex != null) {\n                    descriptionIndex += 1;\n                  }\n                }\n                break;\n              }\n              case \"exercise\": {\n                descriptionIndex = undefined;\n                const value = this.getRenamedValue(opts, line, weekIndex, dayInWeekIndex);\n                const evalExercise = Program_getProgramExercise(dayIndex + 1, this.program, value)!;\n\n                if (evalExercise == null) {\n                  continue groupLoop;\n                }\n\n                const key = evalExercise.key;\n\n                if (\n                  !finishedToAddDescription &&\n                  (evalExercise.descriptions.reuse || evalExercise.descriptions.values.length > 0) &&\n                  !this.isInheritedDescription(evalExercise, weekIndex, dayInWeekIndex)\n                ) {\n                  const result = this.addExerciseDescriptions(\n                    evalExercise,\n                    weekIndex,\n                    dayInWeekIndex,\n                    addedCurrentDescription\n                  );\n                  if (result) {\n                    exerciseTextArr.push(...result.lines);\n                  }\n                }\n\n                finishedToAddDescription = false;\n                addedCurrentDescription = false;\n\n                let plannerExercise = \"\";\n                plannerExercise += this.getExerciseName(evalExercise);\n                plannerExercise += \" / \";\n                if (evalExercise.notused) {\n                  plannerExercise += \"used: none / \";\n                }\n                const variations = evalExercise.evaluatedSetVariations;\n                const globals = this.getGlobals(evalExercise);\n\n                const shouldReuseSets = this.shouldReuseSets(evalExercise);\n                const dereuseDecisions = shouldReuseSets ? this.getDereuseDecisions(evalExercise) : [];\n                if (shouldReuseSets) {\n                  plannerExercise += this.reuseToStr(evalExercise);\n\n                  if (dereuseDecisions.includes(\"sets\")) {\n                    plannerExercise +=\n                      ` / ` +\n                      variations\n                        .map((v, i) => {\n                          return this.variationToString(v, globals, i, evalExercise);\n                        })\n                        .join(\" / \");\n                  }\n\n                  const overriddenGlobals: string[] = [];\n                  if (dereuseDecisions.includes(\"weight\") && globals.weight != null) {\n                    overriddenGlobals.push(`${this.weightExprToStr(globals.weight)}${globals.askWeight ? \"+\" : \"\"}`);\n                  } else if (dereuseDecisions.includes(\"weight\") && globals.askWeight) {\n                    overriddenGlobals.push(\"?+\");\n                  }\n                  if (dereuseDecisions.includes(\"rpe\") && globals.rpe != null) {\n                    overriddenGlobals.push(`@${n(globals.rpe)}${globals.logRpe ? \"+\" : \"\"}`);\n                  }\n                  if (\n                    globals.setTimer != null &&\n                    (dereuseDecisions.includes(\"setTimer\") ||\n                      dereuseDecisions.includes(\"timer\") ||\n                      dereuseDecisions.includes(\"sets\"))\n                  ) {\n                    // The rest timer is embedded in the setTimer|rest token, so any timer-ish change\n                    // (and materialized sets, which skip per-set timer tokens) restates the whole token.\n                    overriddenGlobals.push(this.setTimerGlobalToStr(globals));\n                  } else if (dereuseDecisions.includes(\"timer\") && globals.timer != null) {\n                    overriddenGlobals.push(`${n(globals.timer)}s`);\n                  }\n                  if (overriddenGlobals.length > 0) {\n                    plannerExercise += ` / ${overriddenGlobals.join(\" \")}`;\n                  }\n                } else {\n                  if (evalExercise.setVariations.length > 0) {\n                    plannerExercise += variations\n                      .map((v, i) => this.variationToString(v, globals, i, evalExercise))\n                      .join(\" / \");\n                  }\n\n                  const globalsStr: string[] = [];\n                  if (globals.weight != null) {\n                    globalsStr.push(`${this.weightExprToStr(globals.weight)}${globals.askWeight ? \"+\" : \"\"}`);\n                  } else if (globals.askWeight) {\n                    globalsStr.push(\"?+\");\n                  }\n                  if (globals.rpe != null) {\n                    globalsStr.push(`@${globals.rpe}${globals.logRpe ? \"+\" : \"\"}`);\n                  }\n                  if (globals.setTimer != null) {\n                    globalsStr.push(this.setTimerGlobalToStr(globals));\n                  } else if (globals.timer != null) {\n                    globalsStr.push(`${globals.timer}s`);\n                  }\n                  if (globalsStr.length > 0) {\n                    plannerExercise += ` / ${globalsStr.join(\" \")}`;\n                  }\n                }\n\n                const warmupSource =\n                  !addedWarmupsMap[key] && evalExercise?.warmupSets\n                    ? this.getPropertySource(propertyTargets, \"warmup\", key, weekIndex, dayInWeekIndex, evalExercise)\n                    : undefined;\n                if (warmupSource != null) {\n                  const warmupSets = this.getWarmupSets(warmupSource);\n                  if (warmupSets != null) {\n                    plannerExercise += ` / warmup: ${warmupSets}`;\n                    addedWarmupsMap[key] = true;\n                  }\n                }\n\n                // Printed at the instance the author wrote it on, like the other shared properties.\n                // Every instance of a key carries identical tags (PlannerEvaluator_fillInMetadata\n                // rejects anything else), so which one prints them doesn't change the value - but\n                // printing them on the first instance put them on a line compaction may delete.\n                const idSource =\n                  !addedIdMap[key] && (evalExercise.tags || []).length > 0\n                    ? this.getPropertySource(propertyTargets, \"id\", key, weekIndex, dayInWeekIndex, evalExercise)\n                    : undefined;\n                if (idSource != null) {\n                  plannerExercise += ` / ${this.idToStr(idSource)}`;\n                  addedIdMap[key] = true;\n                }\n\n                const superset = evalExercise.superset?.name;\n                if (superset) {\n                  plannerExercise += ` / superset: ${superset}`;\n                }\n\n                const update = evalExercise.update;\n                if (!addedUpdateMap[key] && update && (update.reuse || update.script)) {\n                  if (!evalExercise.reuse || dereuseDecisions.includes(\"update\")) {\n                    const source = this.getPropertySource(\n                      propertyTargets,\n                      \"update\",\n                      key,\n                      weekIndex,\n                      dayInWeekIndex,\n                      evalExercise\n                    );\n                    if (source != null) {\n                      const updateStr = ProgramToPlanner.getUpdate(source, this.settings);\n                      if (updateStr) {\n                        plannerExercise += ` / ${updateStr}`;\n                      }\n                      addedUpdateMap[key] = true;\n                    }\n                  } else if (update.reuse?.fullName === evalExercise.reuse.fullName) {\n                    addedUpdateMap[key] = true;\n                  }\n                }\n\n                const progress = evalExercise.progress;\n                if (progress && progress.type === \"none\") {\n                  plannerExercise += ` / progress: none`;\n                } else if (!addedProgressMap[key] && progress && (progress.reuse || progress.script)) {\n                  if (!evalExercise.reuse || dereuseDecisions.includes(\"progress\")) {\n                    const source = this.getPropertySource(\n                      propertyTargets,\n                      \"progress\",\n                      key,\n                      weekIndex,\n                      dayInWeekIndex,\n                      evalExercise\n                    );\n                    if (source != null) {\n                      const progressStr = ProgramToPlanner.getProgress(source, this.settings, false);\n                      if (progressStr) {\n                        plannerExercise += ` / ${progressStr}`;\n                      }\n                      addedProgressMap[key] = true;\n                    }\n                  } else if (progress.reuse?.fullName === evalExercise.reuse.fullName) {\n                    addedProgressMap[key] = true;\n                  }\n                }\n                exerciseTextArr.push(plannerExercise);\n                break;\n              }\n            }\n          }\n          if (exerciseTextArr.length > 0) {\n            groupTextArr = groupTextArr.concat(exerciseTextArr);\n          }\n        }\n        plannerDay.exerciseText = groupTextArr.join(\"\\n\");\n        plannerDay.description = programDay.description;\n        plannerWeek.days.push(plannerDay);\n        dayIndex += 1;\n      }\n      plannerWeeks.push(plannerWeek);\n    }\n    const result: IPlannerProgram = { vtype: \"planner\", name: this.program.name, weeks: plannerWeeks };\n    const repeatingExercises = new Set<string>();\n    PP_iterate2(this.program.weeks, (exercise) => {\n      if (exercise.repeat != null && exercise.repeat.length > 0) {\n        const key = PlannerKey_fromPlannerExercise(exercise, this.settings);\n        repeatingExercises.add(key);\n      }\n    });\n    const newPlanner = PlannerProgram_compact(\n      this.program.planner,\n      result,\n      this.settings,\n      repeatingExercises,\n      opts.renameMapping\n    );\n    // console.log(PlannerProgram.generateFullText(newPlanner.weeks));\n    return newPlanner;\n  }\n\n  // The exercise as the evaluator sees it, printed back as Liftoscript: every `...reuse`\n  // resolved into the values it stands for, and every property that governs the exercise on the\n  // line even when it's declared on another week. Read-only — it is what the sheet shows when\n  // asked what a line means, never what gets saved, which is why it can ignore both the reuse\n  // the author wrote and the once-per-exercise placement rules convertToPlanner keeps to.\n  public materializeExercise(exercise: IPlannerProgramExercise): string {\n    const parts: string[] = [this.getExerciseName(exercise)];\n    if (exercise.notused) {\n      parts.push(\"used: none\");\n    }\n    // From evaluatedSetVariations rather than setVariations: an exercise that only reuses sets\n    // has none of its own, and those resolved sets are the whole point of the view.\n    //\n    // An empty variation is skipped rather than printed: a template that carries only properties\n    // (`tmpl / used: none / progress: ...`) has one, and the set printer's empty-list fallback\n    // would invent a `0x1 0lb` for it.\n    const variations = exercise.evaluatedSetVariations;\n    const globals = this.getGlobals(exercise);\n    for (let i = 0; i < variations.length; i += 1) {\n      if (variations[i].sets.length > 0) {\n        parts.push(this.variationToString(variations[i], globals, i, exercise));\n      }\n    }\n    const globalsStr: string[] = [];\n    if (globals.weight != null) {\n      globalsStr.push(`${this.weightExprToStr(globals.weight)}${globals.askWeight ? \"+\" : \"\"}`);\n    } else if (globals.askWeight) {\n      globalsStr.push(\"?+\");\n    }\n    if (globals.rpe != null) {\n      globalsStr.push(`@${n(globals.rpe)}${globals.logRpe ? \"+\" : \"\"}`);\n    }\n    if (globals.setTimer != null) {\n      globalsStr.push(this.setTimerGlobalToStr(globals));\n    } else if (globals.timer != null) {\n      globalsStr.push(`${n(globals.timer)}s`);\n    }\n    if (globalsStr.length > 0) {\n      parts.push(globalsStr.join(\" \"));\n    }\n    const warmupSets = this.warmupSetsToStr(PlannerProgramExercise_warmups(exercise));\n    if (warmupSets != null) {\n      parts.push(`warmup: ${warmupSets}`);\n    }\n    if ((exercise.tags || []).length > 0) {\n      parts.push(this.idToStr(exercise));\n    }\n    if (exercise.superset?.name) {\n      parts.push(`superset: ${exercise.superset.name}`);\n    }\n    const update = ProgramToPlanner.getUpdate(exercise, this.settings, false, true);\n    if (update) {\n      parts.push(update);\n    }\n    const progress = ProgramToPlanner.getProgress(exercise, this.settings, false, true);\n    if (progress) {\n      parts.push(progress);\n    }\n    return parts.join(\" / \");\n  }\n\n  private getExerciseName(programExercise: IPlannerProgramExercise): string {\n    const variations = programExercise.exerciseVariations;\n    if (variations != null && variations.length > 1) {\n      const currentIndex = variations.findIndex((v) => v.isCurrent);\n      const activeIndex = currentIndex === -1 ? 0 : currentIndex;\n      const parts = variations.map((variation, i) => {\n        const label = i === 0 ? programExercise.label : undefined;\n        const segment = variation.exerciseType\n          ? Exercise_fullName(Exercise_get(variation.exerciseType, this.settings.exercises), this.settings, label)\n          : Exercise_buildName(variation.name, this.settings, label);\n        return `${i === activeIndex && i > 0 ? \"! \" : \"\"}${segment}`;\n      });\n      let name = parts.join(\" | \");\n      if (programExercise.order > 0) {\n        name = `${name}[${programExercise.order}]`;\n      }\n      return name;\n    } else if (programExercise.exerciseType) {\n      const exercise = Exercise_get(programExercise.exerciseType, this.settings.exercises);\n      let name = Exercise_fullName(exercise, this.settings, programExercise.label);\n      if (programExercise.order > 0) {\n        name = `${name}[${programExercise.order}]`;\n      }\n      return name;\n    } else {\n      return programExercise.fullName;\n    }\n  }\n\n  private reuseToStr(programExercise: IPlannerProgramExercise): string {\n    const reuseExercise = programExercise.reuse?.exercise;\n    if (!reuseExercise) {\n      throw new Error(\"reuse.exercise is required\");\n    }\n    const reuse = programExercise.reuse;\n    if (!reuse) {\n      throw new Error(\"reuse is required\");\n    }\n    let str = \"...\";\n    if (reuseExercise.exerciseType) {\n      const exercise = Exercise_get(reuseExercise.exerciseType, this.settings.exercises);\n      const reuseStr = Exercise_fullName(exercise, this.settings, reuseExercise.label);\n      str += reuseStr;\n    } else {\n      str += reuseExercise.fullName;\n    }\n    if (reuse.week || reuse.day) {\n      const weekAndDay = CollectionUtils_compact([reuse.week, reuse.day]).join(\":\");\n      str += `[${weekAndDay}]`;\n    }\n    return str;\n  }\n\n  public static getUpdate(\n    programExercise: IPlannerProgramExercise,\n    settings: ISettings,\n    hideScript?: boolean,\n    resolveReuse?: boolean\n  ): string {\n    const update = programExercise.update ?? (resolveReuse ? programExercise.reuse?.exercise?.update : undefined);\n    if (!update) {\n      return \"\";\n    }\n    // Only as far as the app itself resolves: past a couple of hops the runtime can't find the\n    // script either (progress.ts's update runner reads the same getter and does nothing without\n    // one), so printing the chain out here would promise behaviour that never runs. Falls through\n    // to naming the reuse instead — which is what the exercise really has.\n    if (resolveReuse) {\n      const script = PlannerProgramExercise_getUpdateScript(programExercise);\n      if (script != null) {\n        return `update: custom() ${hideScript ? \"{~ ... ~}\" : script}`;\n      }\n    }\n    if (update.reuse) {\n      if (update.reuse.exercise?.exerciseType) {\n        const exercise = Exercise_get(update.reuse.exercise.exerciseType, settings.exercises);\n        const fullName = Exercise_fullName(exercise, settings, update.reuse.exercise.label);\n        return `update: custom() { ...${fullName} }`;\n      } else {\n        return `update: custom() { ...${update.reuse.exercise?.fullName || update.reuse.fullName} }`;\n      }\n    } else {\n      return `update: custom() ${hideScript ? \"{~ ... ~}\" : update.script}`;\n    }\n  }\n\n  private idToStr(programExercise: IPlannerProgramExercise): string {\n    return `id: tags(${(programExercise.tags || []).join(\", \")})`;\n  }\n\n  public static getProgress(\n    programExercise: IPlannerProgramExercise,\n    settings: ISettings,\n    hideScript?: boolean,\n    resolveReuse?: boolean\n  ): string {\n    const progress = programExercise.progress ?? (resolveReuse ? programExercise.reuse?.exercise?.progress : undefined);\n    if (!progress) {\n      return \"\";\n    }\n    let progressStr = `progress: ${progress.type}`;\n    const state = PlannerProgramExercise_getState(programExercise);\n    const stateMetadata = PlannerProgramExercise_getStateMetadata(programExercise);\n    if (progress.type === \"custom\") {\n      // Resolved, every variable is spelled out: the ones inherited from the reuse target are\n      // exactly the ones the reader can't see from here.\n      // Only a `{ ...Name }` script merges the target's state back in at evaluation. An own script\n      // on a reuse line evaluates with its own state alone, so it has to declare all of it.\n      const argsState =\n        resolveReuse || progress.reuse == null ? state : PlannerProgramExercise_getOnlyChangedState(programExercise);\n      progressStr += `(${ObjectUtils_entries(argsState)\n        .map(([k, v]) => {\n          return `${k}${stateMetadata[k]?.userPrompted ? \"+\" : \"\"}: ${Weight_print(v)}`;\n        })\n        .join(\", \")})`;\n    } else if (progress.type === \"lp\") {\n      const increment = state.increment as IWeight | IPercentage;\n      const successes = state.successes as number;\n      const successCounter = state.successCounter as number;\n      const decrement = state.decrement as IWeight | IPercentage;\n      const failures = state.failures as number;\n      const failureCounter = state.failureCounter as number;\n      const args: string[] = [];\n      args.push(Weight_print(increment));\n      if (successes > 1 || decrement.value > 0) {\n        args.push(`${successes}`);\n      }\n      if (successes > 1 || decrement.value > 0) {\n        args.push(`${successCounter}`);\n      }\n      if (decrement.value > 0) {\n        args.push(Weight_print(decrement));\n      }\n      if (failures > 1) {\n        args.push(`${failures}`);\n      }\n      if (failures > 1) {\n        args.push(`${failureCounter}`);\n      }\n      progressStr += `(${args.join(\", \")})`;\n    } else if (progress.type === \"dp\") {\n      const increment = state.increment as IWeight | IPercentage;\n      const minReps = state.minReps as number;\n      const maxReps = state.maxReps as number;\n      const args = [Weight_print(increment), `${minReps}`, `${maxReps}`];\n      progressStr += `(${args.join(\", \")})`;\n    } else if (progress.type === \"sum\") {\n      const reps = state.reps as number;\n      const increment = state.increment as IWeight | IPercentage;\n      const args = [`${reps}`, Weight_print(increment)];\n      progressStr += `(${args.join(\", \")})`;\n    }\n    if (progress.type === \"custom\") {\n      const resolvedScript = resolveReuse ? PlannerProgramExercise_getProgressScript(programExercise) : undefined;\n      if (resolvedScript != null) {\n        progressStr += hideScript ? ` {~ ... ~}` : ` ${resolvedScript}`;\n      } else if (progress.reuse) {\n        if (progress.reuse.exercise?.exerciseType) {\n          const exercise = Exercise_get(progress.reuse.exercise.exerciseType, settings.exercises);\n          const fullName = Exercise_fullName(exercise, settings, progress.reuse.exercise.label);\n          progressStr += ` { ...${fullName} }`;\n        } else {\n          progressStr += ` { ...${progress.reuse.exercise?.fullName || progress.reuse.fullName} }`;\n        }\n      } else {\n        progressStr += hideScript ? ` {~ ... ~}` : ` ${progress.script}`;\n      }\n    }\n    return progressStr;\n  }\n\n  private getGlobals(exercise: IPlannerProgramExercise): IPlannerToProgram2Globals {\n    const variations = exercise.evaluatedSetVariations;\n    if (variations.length === 0 || variations[0].sets.length === 0) {\n      const globals = exercise.globals;\n      const reusedGlobals = exercise.reuse?.exercise?.globals || {};\n      return {\n        weight: globals?.weight ?? reusedGlobals.weight,\n        rpe: globals?.rpe ?? reusedGlobals.rpe,\n        timer: globals?.timer ?? reusedGlobals.timer,\n        setTimer: globals?.setTimer ?? reusedGlobals.setTimer,\n        isOverflowSetTimer: globals?.isOverflowSetTimer ?? reusedGlobals.isOverflowSetTimer,\n        logRpe: globals?.logRpe ?? reusedGlobals.logRpe,\n        askWeight: globals?.askWeight ?? reusedGlobals.askWeight,\n      };\n    }\n    const firstWeight = variations[0]?.sets[0]?.weight;\n    const firstRpe = variations[0]?.sets[0]?.rpe;\n    const firstLogRpe = !!variations[0]?.sets[0]?.logRpe;\n    const firstAskWeight = !!variations[0]?.sets[0]?.askWeight;\n    const firstTimer = variations[0]?.sets[0]?.timer;\n    // When any set carries a set timer, its rest is embedded in the setTimer|rest token, so the rest\n    // timer must not also be lifted to a global (a global would override the embedded rest on re-parse).\n    const hasAnySetTimer = variations.some((v) => v.sets.some((s) => s.setTimer != null));\n    const firstSetTimer = variations[0]?.sets[0]?.setTimer;\n    const firstIsOverflowSetTimer = !!variations[0]?.sets[0]?.isOverflowSetTimer;\n    // A set timer is only liftable to a global together with its embedded rest, so the whole\n    // setTimer/overflow/rest tuple must be uniform across every set. Even then, keep the source's\n    // style: lift only if it was written as a global, or the sets are reused (where a global\n    // override is the only way to express a timer change without materializing the set list).\n    const setTimerIsGlobal =\n      firstSetTimer != null &&\n      (exercise.globals.setTimer != null || exercise.reuse != null) &&\n      variations.every((v) =>\n        v.sets.every(\n          (s) =>\n            s.setTimer === firstSetTimer && !!s.isOverflowSetTimer === firstIsOverflowSetTimer && s.timer === firstTimer\n        )\n      );\n    return {\n      setTimer: setTimerIsGlobal ? firstSetTimer : undefined,\n      isOverflowSetTimer: setTimerIsGlobal ? firstIsOverflowSetTimer : undefined,\n      weight:\n        firstWeight != null &&\n        variations.every((v) =>\n          v.sets.every((s) => Weight_eqNull(s.weight, firstWeight) && !!s.askWeight === firstAskWeight)\n        )\n          ? firstWeight\n          : undefined,\n      askWeight: variations.every((v) => v.sets.every((s) => Weight_eqNull(s.weight, firstWeight) && !!s.askWeight)),\n      rpe:\n        firstRpe != null &&\n        variations.every((v) => v.sets.every((s) => s.rpe === firstRpe && !!s.logRpe === firstLogRpe))\n          ? firstRpe\n          : undefined,\n      logRpe: variations.every((v) => v.sets.every((s) => s.rpe === firstRpe && !!s.logRpe)),\n      timer:\n        (setTimerIsGlobal || !hasAnySetTimer) &&\n        firstTimer != null &&\n        variations.every((v) => v.sets.every((s) => s.timer === firstTimer))\n          ? firstTimer\n          : undefined,\n    };\n  }\n\n  private groupVariationSets(\n    sets: IPlannerProgramExerciseEvaluatedSet[],\n    exercise: IPlannerProgramExercise,\n    index: number\n  ): [IPlannerProgramExerciseEvaluatedSet, number][] {\n    if (sets.length === 0) {\n      const originalSets = PlannerProgramExercise_sets(exercise, index)[0];\n      return [\n        [\n          {\n            maxrep: originalSets?.repRange?.maxrep || 1,\n            minrep: originalSets?.repRange?.minrep,\n            weight: originalSets?.weight || Weight_zero,\n            logRpe: originalSets?.logRpe || false,\n            isAmrap: originalSets?.repRange?.isAmrap || false,\n            isQuickAddSet: originalSets?.repRange?.isQuickAddSet || false,\n            askWeight: originalSets?.askWeight || false,\n            rpe: originalSets?.rpe,\n            timer: originalSets?.timer,\n            label: originalSets?.label,\n          },\n          0,\n        ],\n      ];\n    }\n    let lastKey: string | undefined;\n    const groups: [IPlannerProgramExerciseEvaluatedSet, number][] = [];\n    for (const set of sets) {\n      const key = this.setToKey(set);\n      if (lastKey == null || lastKey !== key) {\n        groups.push([set, 0]);\n      }\n      groups[groups.length - 1][1] += 1;\n      lastKey = key;\n    }\n    return groups;\n  }\n\n  private groupWarmupsSets(sets: IPlannerProgramExerciseWarmupSet[]): [IPlannerProgramExerciseWarmupSet, number][] {\n    let lastKey: string | undefined;\n    const groups: [IPlannerProgramExerciseWarmupSet, number][] = [];\n    for (const set of sets) {\n      const key = this.warmupSetToKey(set);\n      if (lastKey == null || lastKey !== key) {\n        groups.push([set, 0]);\n      }\n      groups[groups.length - 1][1] += set.numberOfSets;\n      lastKey = key;\n    }\n    return groups;\n  }\n\n  private getWarmupSets(programExercise: IPlannerProgramExercise): string | undefined {\n    return this.warmupSetsToStr(programExercise.warmupSets);\n  }\n\n  private warmupSetsToStr(warmupSets: IPlannerProgramExerciseWarmupSet[] | undefined): string | undefined {\n    if (warmupSets) {\n      const groups = this.groupWarmupsSets(warmupSets);\n      const strs: string[] = [];\n      for (const group of groups) {\n        const first = group[0];\n        const length = group[1];\n        const weight =\n          first.weight ?? (first.percentage != null ? Weight_buildPct(first.percentage) : Weight_build(0, \"lb\"));\n        strs.push(`${length}x${first.reps} ${Weight_print(weight)}`);\n      }\n      return strs.length === 0 ? \"none\" : strs.join(\", \");\n    }\n    return undefined;\n  }\n\n  private weightExprToStr(weightExpr?: IWeight | IPercentage): string {\n    if (weightExpr != null) {\n      return Weight_print(weightExpr);\n    }\n    return \"\";\n  }\n\n  private setTimerGlobalToStr(globals: IPlannerToProgram2Globals): string {\n    const overflow = globals.isOverflowSetTimer ? \"+\" : \"\";\n    const restPart = globals.timer != null ? `${n(Math.max(0, globals.timer))}s` : \"?\";\n    return `${n(Math.max(0, globals.setTimer ?? 0))}s${overflow}|${restPart}`;\n  }\n\n  private variationToString(\n    variation: IPlannerProgramExerciseEvaluatedSetVariation,\n    globals: IPlannerToProgram2Globals,\n    index: number,\n    exercise: IPlannerProgramExercise\n  ): string {\n    const groupedVariationSets = this.groupVariationSets(variation.sets, exercise, index);\n    const result: string[] = [];\n    for (const group of groupedVariationSets) {\n      const set = group[0];\n      let setStr = \"\";\n      setStr += `${group[1]}${set.isQuickAddSet ? \"+\" : \"\"}x`;\n      setStr += set.minrep != null ? `${n(Math.max(0, set.minrep))}-` : \"\";\n      setStr += `${n(Math.max(0, set.maxrep ?? 0))}`;\n      setStr += set.isAmrap ? \"+\" : \"\";\n      if (globals.weight == null && !globals.askWeight) {\n        const weightValue = this.weightExprToStr(set.weight);\n        if (weightValue) {\n          setStr += ` ${weightValue}${set.askWeight ? \"+\" : \"\"}`;\n        } else if (set.askWeight) {\n          setStr += \" ?+\";\n        }\n      }\n      if (globals.rpe == null) {\n        setStr += set.rpe != null ? ` @${n(Math.max(0, set.rpe))}` : \"\";\n        setStr += set.rpe != null && set.logRpe ? \"+\" : \"\";\n      }\n      if (set.setTimer != null && globals.setTimer == null) {\n        const overflow = set.isOverflowSetTimer ? \"+\" : \"\";\n        const restPart = set.timer != null ? `${n(Math.max(0, set.timer))}s` : \"?\";\n        setStr += ` ${n(Math.max(0, set.setTimer))}s${overflow}|${restPart}`;\n      } else if (set.setTimer == null && globals.timer == null) {\n        setStr += set.timer ? ` ${n(Math.max(0, set.timer))}s` : \"\";\n      }\n      if (set.auto) {\n        setStr += \" auto\";\n      }\n      if (set.label) {\n        setStr += ` (${set.label})`;\n      }\n      result.push(setStr);\n    }\n    let resultStr = \"\";\n    if (index > 0 && variation.isCurrent) {\n      resultStr += \"! \";\n    }\n    return resultStr + result.map((r) => r.trim()).join(\", \");\n  }\n\n  private warmupSetToKey(set: IPlannerProgramExerciseWarmupSet): string {\n    return `${set.reps}-${Weight_print(set.weight || set.percentage || 0)}`;\n  }\n\n  private setToKey(set: IPlannerProgramExerciseEvaluatedSet): string {\n    return `${set.maxrep}-${set.minrep}-${Weight_printNull(set.weight)}-${set.isAmrap}-${set.rpe}-${set.logRpe}-${\n      set.timer\n    }-${set.label}-${set.askWeight}-${set.setTimer}-${set.isOverflowSetTimer}-${set.auto}`;\n  }\n}\n","import {\n  Exercise_onerm,\n  Exercise_get,\n  Exercise_getIsUnilateral,\n  Exercise_getWarmupSets,\n  Exercise_toKey,\n  Exercise_eq,\n  Exercise_fullName,\n} from \"./exercise\";\nimport { Reps_findNextEntryAndSet, Reps_isEmptyOrFinished, Reps_isCompleted, Reps_isEmpty } from \"./set\";\nimport {\n  Weight_build,\n  Weight_buildAny,\n  Weight_eq,\n  Weight_lt,\n  Weight_gt,\n  Weight_multiply,\n  Weight_increment,\n  Weight_isPct,\n  Weight_buildPct,\n  Weight_decrement,\n  Weight_is,\n  Weight_round,\n  Weight_roundConvertTo,\n  Weight_getTrainingMax,\n  Weight_getOneRepMax,\n  Weight_rpeMultiplier,\n  Weight_convertToWeight,\n  Weight_display,\n  Weight_realizeLoad,\n  Weight_rpePct,\n  Weight_evaluateWeight,\n  Weight_op,\n} from \"./weight\";\nimport { EquipmentLoadText_line } from \"./equipmentLoadText\";\nimport { DateUtils_fromYYYYMMDD, DateUtils_fromYYYYMMDDStr } from \"../utils/date\";\nimport { lf, lb, LensBuilder } from \"lens-shmens\";\nimport { ObjectUtils_isEqual, ObjectUtils_entriesNonnull, ObjectUtils_keys, ObjectUtils_clone } from \"../utils/object\";\nimport { IDispatch } from \"../ducks/types\";\nimport { ScriptRunner } from \"../parser\";\n\nimport {\n  emptyProgramId,\n  IEvaluatedProgram,\n  Program_getProgramDay,\n  Program_getProgramDayUsedExercises,\n  Program_getProgramExerciseForKeyAndDay,\n  Program_getAllProgramExercisesWithType,\n  Program_createEmptyProgram,\n  Program_evaluate,\n  Program_runAllFinishDayScripts,\n  Program_getDayExercisesInOrder,\n  Program_getDayData,\n  Program_nextHistoryEntry,\n} from \"./program\";\nimport { IState, updateProgress, updateState } from \"./state\";\nimport {\n  IWeight,\n  IHistoryEntry,\n  ISettings,\n  IHistoryRecord,\n  IProgressMode,\n  IExerciseType,\n  IProgramState,\n  IEquipment,\n  ISubscription,\n  ISet,\n  IDayData,\n  IExerciseDataValue,\n  IUnit,\n  IStats,\n  IProgram,\n  IStorage,\n  IProgramExerciseWarmupSet,\n} from \"../types\";\nimport { INativeEffect } from \"./nativeEffects\";\nimport { Subscriptions_hasSubscription } from \"../utils/subscriptions\";\nimport { IPercentage, IScriptErrorHandler, ITimedSetSide } from \"../types\";\nimport { TimedSet_open, TimedSet_recordedFor } from \"./timedSet\";\nimport {\n  History_workoutTime,\n  History_createCustomEntry,\n  History_resumeWorkout,\n  History_finishProgramDay,\n  History_findLastEntryForExerciseType,\n} from \"./history\";\nimport { WorkoutOutcome_add } from \"./workoutOutcome\";\nimport { CollectionUtils_compact, CollectionUtils_findIndexReverse } from \"../utils/collection\";\nimport { ILiftoscriptEvaluatorUpdate } from \"../liftoscriptEvaluator\";\nimport { Equipment_getUnitForExerciseType } from \"./equipment\";\nimport { IByTag, IByExercise } from \"../pages/planner/plannerEvaluator\";\nimport { IPlannerProgramExercise, IPlannerProgramExerciseWithType } from \"../pages/planner/models/types\";\nimport {\n  PlannerProgramExercise_getUpdateScript,\n  PlannerProgramExercise_getState,\n  PlannerProgramExercise_currentEvaluatedSetVariationIndex,\n  PlannerProgramExercise_currentExerciseVariationIndex,\n  PlannerProgramExercise_currentDescriptionIndex,\n  PlannerProgramExercise_currentSetVariationIndex,\n  PlannerProgramExercise_programWarmups,\n} from \"../pages/planner/models/plannerProgramExercise\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { ProgramSet_getEvaluatedWeight } from \"./programSet\";\nimport { Stats_getCurrentMovingAverageBodyweight, Stats_getEmpty } from \"./stats\";\nimport { IChangeAMRAPAction, ICompleteSetAction } from \"../ducks/reducer\";\nimport {\n  LiveActivityManager_updateProgressLiveActivity,\n  LiveActivityManager_updateLiveActivityForNextEntry,\n} from \"../utils/liveActivityManager\";\nimport { ProgramExercise_hasUserPromptedVars } from \"./programExercise\";\nimport type { IScriptFunctions, IScriptBindings } from \"../liftoscriptFns\";\nimport type { ILiftoscriptScalar } from \"../liftoscriptEvaluator\";\nimport { LiftoscriptPrint_formatLine } from \"../liftoscriptPrint\";\nimport {\n  LiftoscriptExerciseName_isExercise,\n  LiftoscriptExerciseName_isProgramExercise,\n} from \"../liftoscriptExerciseName\";\nimport deepmerge from \"deepmerge\";\nimport { Dialog_alert } from \"../utils/dialog\";\n\nexport type { IScriptBindings } from \"../liftoscriptFns\";\n\nexport interface IScriptFnContext {\n  prints: string[];\n  unit: IUnit;\n  exerciseType?: IExerciseType;\n  entryExercise?: IExerciseType;\n  programExerciseKey?: string;\n}\n\nexport function Progress_scriptExerciseContext(\n  entry: IHistoryEntry,\n  programExercise: IPlannerProgramExercise\n): Required<Pick<IScriptFnContext, \"entryExercise\" | \"programExerciseKey\">> {\n  return { entryExercise: entry.exercise, programExerciseKey: programExercise.key };\n}\n\nexport interface IScriptFinishContext {\n  type: \"finish\";\n  updates: ILiftoscriptEvaluatorUpdate[];\n  exerciseData: IExerciseDataValue;\n  setVariationIndex: number;\n  descriptionIndex: number;\n}\n\nexport interface IScriptUpdateContext {\n  equipment?: IEquipment;\n}\n\ntype IScriptArg = number | IWeight | IPercentage;\n\nfunction applyRounding(num: IScriptArg | undefined, rounder: (n: number) => number): IScriptArg {\n  if (num == null) {\n    return 0;\n  }\n  return typeof num === \"number\" ? rounder(num) : Weight_buildAny(rounder(num.value), num.unit);\n}\n\nfunction isScriptValue(v: unknown): v is IScriptArg {\n  return typeof v === \"number\" || Weight_is(v) || Weight_isPct(v);\n}\n\nfunction flattenScriptArgs(args: unknown[]): IScriptArg[] {\n  const result: IScriptArg[] = [];\n  for (const arg of args) {\n    if (Array.isArray(arg)) {\n      for (const item of arg) {\n        if (isScriptValue(item)) {\n          result.push(item);\n        }\n      }\n    } else if (isScriptValue(arg)) {\n      result.push(arg);\n    }\n  }\n  return result;\n}\n\nfunction sum(args: unknown[]): IWeight | IPercentage | number {\n  const flat = flattenScriptArgs(args);\n  if (flat.length === 0) {\n    return 0;\n  }\n  return flat.reduce<IScriptArg>((acc, a) => Weight_op(undefined, acc, a, (x, y) => x + y), 0);\n}\n\nfunction min(args: unknown[]): IWeight | IPercentage | number {\n  const flat = flattenScriptArgs(args);\n  if (flat.length === 0) {\n    return 0;\n  }\n  return flat.reduce<IScriptArg>((acc, a) => (Weight_lt(a, acc) ? a : acc), flat[0]);\n}\n\nfunction max(args: unknown[]): IWeight | IPercentage | number {\n  const flat = flattenScriptArgs(args);\n  if (flat.length === 0) {\n    return 0;\n  }\n  return flat.reduce<IScriptArg>((acc, a) => (Weight_lt(acc, a) ? a : acc), flat[0]);\n}\n\nfunction zeroOrGte(a: (IWeight | number | undefined | null)[], b: (IWeight | number | undefined | null)[]): boolean {\n  for (let i = 0; i < Math.max(a.length, b.length); i++) {\n    const aVal = a[i];\n    const bVal = b[i];\n    if (aVal != null && bVal != null && !Weight_eq(aVal, 0) && Weight_lt(aVal, bVal)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function Progress_createEmptyScriptBindings(\n  dayData: IDayData,\n  settings: ISettings,\n  exercise?: IExerciseType,\n  label?: string\n): IScriptBindings {\n  const rm1 = exercise ? Exercise_onerm(exercise, settings) : Weight_build(0, \"lb\");\n  return {\n    exercise: exercise ? Exercise_fullName(Exercise_get(exercise, settings.exercises), settings, label) : \"\",\n    day: dayData.day,\n    week: dayData.week ?? 1,\n    dayInWeek: dayData.dayInWeek ?? dayData.day,\n    completedWeights: [],\n    originalWeights: [],\n    weights: [],\n    reps: [],\n    minReps: [],\n    RPE: [],\n    amraps: [],\n    logrpes: [],\n    askweights: [],\n    completedReps: [],\n    completedRepsLeft: [],\n    completedRPE: [],\n    isCompleted: [],\n    timers: [],\n    setTime: [],\n    completedSetTime: [],\n    completedSetTimeLeft: [],\n    w: [],\n    r: [],\n    cr: [],\n    cw: [],\n    mr: [],\n    programNumberOfSets: 0,\n    numberOfSets: 0,\n    completedNumberOfSets: 0,\n    ns: 0,\n    setVariationIndex: 1,\n    exerciseVariationIndex: 1,\n    descriptionIndex: 1,\n    bodyweight: Weight_build(0, settings.units),\n    setIndex: 1,\n    rm1,\n  };\n}\n\nexport function Progress_createScriptBindings(\n  dayData: IDayData,\n  entry: IHistoryEntry,\n  settings: ISettings,\n  programNumberOfSets: number,\n  bodyweight: IWeight | undefined,\n  setIndex?: number,\n  setVariationIndex?: number,\n  descriptionIndex?: number,\n  exerciseVariationIndex?: number,\n  label?: string\n): IScriptBindings {\n  const bindings = Progress_createEmptyScriptBindings(dayData, settings, entry.exercise, label);\n  for (const set of entry.sets) {\n    bindings.weights.push(set.weight);\n    bindings.originalWeights.push(set.originalWeight ?? Weight_build(0, settings.units));\n    bindings.reps.push(set.reps);\n    bindings.minReps.push(set.minReps);\n    bindings.completedReps.push(set.completedReps);\n    bindings.completedRepsLeft.push(set.completedRepsLeft);\n    bindings.completedRPE.push(set.completedRpe);\n    bindings.completedWeights.push(set.completedWeight);\n    bindings.RPE.push(set.rpe);\n    bindings.amraps.push(set.isAmrap ? 1 : undefined);\n    bindings.logrpes.push(set.logRpe ? 1 : undefined);\n    bindings.askweights.push(set.askWeight ? 1 : undefined);\n    bindings.timers.push(set.timer);\n    bindings.setTime.push(set.setTimer);\n    bindings.completedSetTime.push(set.completedSetTimer);\n    bindings.completedSetTimeLeft.push(set.completedSetTimerLeft);\n    bindings.isCompleted.push(set.isCompleted ? 1 : 0);\n  }\n  bindings.w = bindings.weights;\n  bindings.r = bindings.reps;\n  bindings.cr = bindings.completedReps;\n  bindings.cw = bindings.completedWeights;\n  bindings.mr = bindings.minReps;\n  bindings.ns = entry.sets.length;\n  bindings.programNumberOfSets = programNumberOfSets;\n  bindings.numberOfSets = entry.sets.length;\n  bindings.completedNumberOfSets = entry.sets.filter((s) => s.isCompleted).length;\n  bindings.setIndex = setIndex ?? 1;\n  bindings.setVariationIndex = setVariationIndex ?? 1;\n  bindings.exerciseVariationIndex = exerciseVariationIndex ?? 1;\n  bindings.descriptionIndex = descriptionIndex ?? 1;\n  bindings.bodyweight = bodyweight ?? Weight_build(0, settings.units);\n  return bindings;\n}\n\nexport function Progress_createScriptFunctions(settings: ISettings): IScriptFunctions {\n  function toWeight(value: IWeight | number): IWeight {\n    return Weight_is(value) ? value : Weight_build(value, settings.units);\n  }\n\n  function increment(vals: IWeight | IPercentage | number, context: IScriptFnContext): IWeight | IPercentage | number {\n    if (typeof vals === \"number\") {\n      const weight = Weight_build(vals, context.unit);\n      return Weight_increment(weight, settings, context.exerciseType);\n    } else if (Weight_isPct(vals)) {\n      return Weight_buildPct(vals.value + 1);\n    } else {\n      return Weight_increment(vals, settings, context.exerciseType);\n    }\n  }\n\n  function decrement(vals: IWeight | IPercentage | number, context: IScriptFnContext): IWeight | IPercentage | number {\n    if (typeof vals === \"number\") {\n      const weight = Weight_build(vals, context.unit);\n      return Weight_decrement(weight, settings, context.exerciseType);\n    } else if (Weight_isPct(vals)) {\n      return Weight_buildPct(vals.value - 1);\n    } else {\n      return Weight_decrement(vals, settings, context.exerciseType);\n    }\n  }\n\n  const fns: IScriptFunctions = {\n    roundWeight: ([num], context) => {\n      const unit = Equipment_getUnitForExerciseType(settings, context?.exerciseType);\n      return Weight_round(toWeight(num), settings, unit ?? settings.units, context?.exerciseType);\n    },\n    roundConvertWeight: ([num], context) => {\n      const unit = Equipment_getUnitForExerciseType(settings, context?.exerciseType);\n      return Weight_roundConvertTo(toWeight(num), settings, unit ?? settings.units, context?.exerciseType);\n    },\n    calculateTrainingMax: ([weight, reps]) => {\n      return Weight_getTrainingMax(toWeight(weight), reps || 0, settings);\n    },\n    calculate1RM: ([weight, reps]) => {\n      return Weight_getOneRepMax(toWeight(weight), reps);\n    },\n    rpeMultiplier: ([repsRaw, rpeRaw]) => {\n      const reps = Weight_is(repsRaw) ? repsRaw.value : repsRaw;\n      const rpe = rpeRaw == null ? 10 : Weight_is(rpeRaw) ? rpeRaw.value : rpeRaw;\n      return Weight_rpeMultiplier(reps, rpe);\n    },\n    floor: ([num]) => applyRounding(num, Math.floor),\n    ceil: ([num]) => applyRounding(num, Math.ceil),\n    round: ([num]) => applyRounding(num, Math.round),\n    sum: (args) => sum(args),\n    min: (args) => min(args),\n    max: (args) => max(args),\n    increment: ([vals], context) => increment(vals, context),\n    decrement: ([vals], context) => decrement(vals, context),\n    zeroOrGte: ([a, b]) => zeroOrGte(a, b),\n    print: (args, context) => {\n      // flat() without filtering: booleans must survive so `if (print(cond))` keeps working.\n      const flatArgs: ILiftoscriptScalar[] = [...args.flat()].map((arg) => arg ?? 0);\n      context.prints = context.prints || [];\n      context.prints.push(LiftoscriptPrint_formatLine(flatArgs));\n      return flatArgs[0] ?? 0;\n    },\n    isProgramExercise: ([pattern], context) => {\n      if (context.programExerciseKey == null) {\n        return false;\n      }\n      return LiftoscriptExerciseName_isProgramExercise(pattern, context.programExerciseKey, settings.exercises);\n    },\n    isExercise: ([pattern], context) => {\n      if (context.entryExercise == null) {\n        return false;\n      }\n      return LiftoscriptExerciseName_isExercise(pattern, context.entryExercise, settings.exercises);\n    },\n    sets: ([from, to, minReps, reps, isAmrap, weight, timer, rpe, logRpe], context, bindings) => {\n      for (let i = 0; i < bindings.numberOfSets; i++) {\n        if (i >= from - 1 && i < to) {\n          const weightValue = Weight_convertToWeight(bindings.rm1, weight, context.unit);\n          bindings.minReps[i] = reps !== minReps ? minReps : undefined;\n          bindings.reps[i] = reps;\n          bindings.originalWeights[i] = weightValue;\n          bindings.weights[i] = Weight_round(weightValue, settings, context.unit, context.exerciseType);\n          bindings.RPE[i] = rpe !== 0 ? rpe : undefined;\n          bindings.amraps[i] = isAmrap !== 0 ? 1 : 0;\n          bindings.logrpes[i] = logRpe !== 0 ? 1 : 0;\n          bindings.timers[i] = timer !== 0 ? timer : undefined;\n        }\n      }\n      return to - from;\n    },\n  };\n  return fns;\n}\n\nexport function Progress_isCurrent(progress: Pick<IHistoryRecord, \"id\"> | undefined): boolean {\n  return progress?.id === 0;\n}\n\nexport function Progress_scheduleTimerNotification(\n  effects: INativeEffect[],\n  progress: IHistoryRecord,\n  entryIndex: number,\n  mode: IProgressMode,\n  settings: ISettings,\n  duration: number,\n  timerSinceMs: number,\n  timerSeconds: number\n): void {\n  const title = \"It's time for the next set!\";\n  let subtitle = \"\";\n  let body = \"Time to lift!\";\n  let subtitleHeader = \"\";\n  let bodyHeader = \"The rest is over\";\n  const nextEntryAndSet = Reps_findNextEntryAndSet(progress, entryIndex, mode);\n  if (nextEntryAndSet != null) {\n    const { entry: nextEntry, set: aSet } = nextEntryAndSet;\n    const exercise = Exercise_get(nextEntry.exercise, settings.exercises);\n    if (exercise) {\n      subtitleHeader = \"Next Set\";\n      subtitle = CollectionUtils_compact([\n        exercise.name,\n        aSet.reps != null ? `${aSet.reps}${aSet.isAmrap ? \"+\" : \"\"} reps` : undefined,\n        aSet.weight != null ? Weight_display(aSet.weight) : undefined,\n      ]).join(\", \");\n      if (aSet.weight != null) {\n        const isWarmup = nextEntry.warmupSets.indexOf(aSet) !== -1;\n        const load = Weight_realizeLoad(aSet.weight, settings, nextEntry.exercise, isWarmup);\n        const loadText = EquipmentLoadText_line(load);\n        bodyHeader = \"Plates per side\";\n        body = loadText !== \"\" ? loadText : \"None\";\n      }\n    }\n  }\n  effects.push({\n    type: \"startTimer\",\n    params: {\n      duration,\n      title,\n      subtitleHeader,\n      subtitle,\n      bodyHeader,\n      body,\n      ignoreDoNotDisturb: !!settings.ignoreDoNotDisturb,\n      vibration: !!settings.vibration,\n      volume: settings.volume,\n      timerSinceMs,\n      timerSeconds,\n    },\n  });\n}\n\nexport function Progress_startTimer(\n  effects: INativeEffect[],\n  progress: IHistoryRecord,\n  timestamp: number,\n  mode: IProgressMode,\n  entryIndex: number,\n  setIndex: number,\n  settings: ISettings,\n  subscription?: ISubscription,\n  timer?: number,\n  isAdjusting?: boolean\n): IHistoryRecord {\n  const entry = progress.entries[entryIndex];\n  const set = mode === \"warmup\" ? entry?.warmupSets[setIndex] : entry?.sets[setIndex];\n  if (!isAdjusting && (!set || !set.isCompleted)) {\n    return progress;\n  }\n  if (timer == null && Progress_isCurrent(progress) && mode === \"workout\") {\n    timer = entry?.sets[setIndex]?.timer;\n  }\n  if (timer == null) {\n    timer =\n      mode === \"workout\" && entry.superset != null && settings.timers.superset != null\n        ? settings.timers.superset\n        : settings.timers[mode] || undefined;\n  }\n  if (!timer) {\n    return {\n      ...progress,\n      timerSince: undefined,\n      timer: undefined,\n      timerMode: undefined,\n      timerEntryIndex: undefined,\n      timerSetIndex: undefined,\n    };\n  }\n  if (subscription && Subscriptions_hasSubscription(subscription)) {\n    // A backdated start (rest resumed after the screen was locked past the target) can already be overrun,\n    // so only schedule the \"rest is over\" notification when there's still time left — UNTimeIntervalNotificationTrigger\n    // aborts on a non-positive interval.\n    const timerForPush = timer - Math.round((Date.now() - timestamp) / 1000);\n    if (timerForPush > 0) {\n      Progress_scheduleTimerNotification(effects, progress, entryIndex, mode, settings, timerForPush, timestamp, timer);\n    } else {\n      // Backdated start that's already overrun: schedule nothing, but clear any earlier pending\n      // notification so a stale one doesn't fire.\n      effects.push({ type: \"stopTimer\" });\n    }\n  }\n  const newProgress: IHistoryRecord = {\n    ...progress,\n    timerSince: timestamp,\n    timer,\n    timerMode: mode,\n    timerEntryIndex: entryIndex,\n    timerSetIndex: setIndex,\n    ui: { ...progress.ui, nativeNotificationScheduled: undefined },\n  };\n  return newProgress;\n}\n\nexport function Progress_getNextSupersetEntry(\n  entries: IHistoryEntry[],\n  entry: IHistoryEntry\n): IHistoryEntry | undefined {\n  const superset: string | undefined = entry.superset;\n  if (superset == null) {\n    return undefined;\n  }\n  const supersetGroups = Progress_getSupersetGroups(entries);\n  const supersetGroup: IHistoryEntry[] = supersetGroups?.[superset] ?? [];\n  if (supersetGroup.length <= 1) {\n    return undefined;\n  }\n  const supersetIndex = supersetGroup?.findIndex((e) => e.id === entry!.id);\n  if (supersetIndex == null || supersetIndex < 0) {\n    return undefined;\n  }\n  return supersetGroup[(supersetIndex + 1) % supersetGroup.length];\n}\n\nexport function Progress_getNextEntry(\n  progress: IHistoryRecord,\n  entry: IHistoryEntry,\n  mode: \"workout\" | \"warmup\",\n  shouldGoToNextEntry: boolean\n): IHistoryEntry | undefined {\n  if (Progress_isFullyEmptyOrFinishedSet(progress)) {\n    return undefined;\n  }\n  const visitedAndFinished = new Set<IHistoryEntry>();\n  let currentEntry: IHistoryEntry | undefined = entry;\n  let isInitial = true;\n  const supersetGroups = Progress_getSupersetGroups(progress.entries);\n  while (currentEntry != null) {\n    let index = progress.entries.findIndex((e) => e.id != null && e.id === currentEntry?.id);\n    if (index === -1) {\n      index = progress.entries.findIndex((e) => e === currentEntry);\n    }\n    const superset: string | undefined = currentEntry.superset;\n    if (mode === \"workout\" && superset != null && !visitedAndFinished.has(currentEntry)) {\n      const supersetGroup: IHistoryEntry[] = supersetGroups?.[superset] ?? [];\n      if (supersetGroup.length > 1) {\n        const supersetIndex = supersetGroup?.findIndex((e) => e.id === currentEntry?.id);\n        currentEntry = supersetGroup[(supersetIndex + 1) % supersetGroup.length];\n      } else {\n        if (shouldGoToNextEntry) {\n          currentEntry = progress.entries[(index + 1) % progress.entries.length];\n        } else {\n          return currentEntry;\n        }\n      }\n    } else if (Reps_isEmptyOrFinished(currentEntry.sets)) {\n      if (shouldGoToNextEntry) {\n        const prevEntry: IHistoryEntry = currentEntry;\n        currentEntry = progress.entries[(index + 1) % progress.entries.length];\n        if (currentEntry === prevEntry) {\n          return undefined;\n        }\n      } else {\n        return undefined;\n      }\n    }\n    if (currentEntry == null) {\n      return undefined;\n    }\n    if (!Reps_isEmptyOrFinished(currentEntry.sets)) {\n      return currentEntry;\n    } else if (!isInitial) {\n      visitedAndFinished.add(currentEntry);\n    }\n    isInitial = false;\n  }\n  return undefined;\n}\n\nexport function Progress_getNextEntryIndex(\n  progress: IHistoryRecord,\n  entry: IHistoryEntry,\n  mode: \"workout\" | \"warmup\"\n): number | undefined {\n  const nextEntry = Progress_getNextEntry(progress, entry, mode, false);\n  if (nextEntry != null) {\n    let index = progress.entries.findIndex((e) => e.id != null && e.id === nextEntry.id);\n    if (index === -1) {\n      index = progress.entries.findIndex((e) => e === nextEntry);\n    }\n    return index === -1 ? undefined : index;\n  }\n  return undefined;\n}\n\nexport function Progress_updateTimer(\n  effects: INativeEffect[],\n  progress: IHistoryRecord,\n  program: IProgram | undefined,\n  newTimer: number,\n  timerSince: number,\n  liveActivityEntryIndex: number | undefined,\n  liveActivitySetIndex: number | undefined,\n  skipLiveActivityUpdate: boolean,\n  settings: ISettings,\n  subscription: ISubscription | undefined\n): IHistoryRecord {\n  const timerForPush = newTimer - Math.round((Date.now() - timerSince) / 1000);\n  if (timerForPush > 0) {\n    const newProgress = Progress_startTimer(\n      effects,\n      progress,\n      progress.timerSince || Date.now(),\n      progress.timerMode || \"workout\",\n      progress.timerEntryIndex || 0,\n      progress.timerSetIndex || 0,\n      settings,\n      subscription,\n      newTimer,\n      true\n    );\n    if (!skipLiveActivityUpdate) {\n      LiveActivityManager_updateProgressLiveActivity(\n        effects,\n        program,\n        progress,\n        settings,\n        subscription,\n        liveActivityEntryIndex,\n        liveActivitySetIndex,\n        newTimer,\n        progress.timerSince || Date.now()\n      );\n    }\n    return newProgress;\n  } else {\n    effects.push({ type: \"stopTimer\" });\n    const newProgress = {\n      ...progress,\n      timer: Math.max(0, newTimer),\n      ui: {\n        ...progress.ui,\n        nativeNotificationScheduled: undefined,\n      },\n    };\n    if (!skipLiveActivityUpdate) {\n      LiveActivityManager_updateProgressLiveActivity(\n        effects,\n        program,\n        progress,\n        settings,\n        subscription,\n        liveActivityEntryIndex,\n        liveActivitySetIndex,\n        Math.max(0, newTimer),\n        progress.timerSince || Date.now()\n      );\n    }\n    return newProgress;\n  }\n}\n\nexport function Progress_maybeApplySuperset(\n  progress: IHistoryRecord,\n  entryIndex: number,\n  mode: \"workout\" | \"warmup\"\n): IHistoryRecord {\n  if (!Progress_isCurrent(progress)) {\n    return progress;\n  }\n  const entry = progress.entries[entryIndex];\n  const nextEntryIndex = Progress_getNextEntryIndex(progress, entry, mode);\n  if (nextEntryIndex != null) {\n    return { ...progress, currentEntryIndex: nextEntryIndex };\n  }\n  return progress;\n}\n\nexport function Progress_stopTimer(effects: INativeEffect[], progress: IHistoryRecord): IHistoryRecord {\n  effects.push({ type: \"stopTimer\" });\n  return Progress_stopTimerPure(progress);\n}\n\nexport function Progress_stopTimerPure(progress: IHistoryRecord): IHistoryRecord {\n  return {\n    ...progress,\n    timerSince: undefined,\n    timerMode: undefined,\n    timer: undefined,\n    timerSetIndex: undefined,\n    timerEntryIndex: undefined,\n  };\n}\n\nexport function Progress_setTimerValue(progress: IHistoryRecord, newTimer: number): IHistoryRecord {\n  if (progress.timerSince == null) {\n    return progress;\n  }\n  return {\n    ...progress,\n    timer: Math.max(0, newTimer),\n  };\n}\n\nexport function Progress_findEntryByExercise(\n  progress: IHistoryRecord,\n  exerciseType: IExerciseType\n): IHistoryEntry | undefined {\n  return progress.entries.find((entry) => entry.exercise === exerciseType);\n}\n\nexport function Progress_isFullyCompletedSet(progress: IHistoryRecord): boolean {\n  return progress.entries.every((entry) => Progress_isCompletedSet(entry));\n}\n\nexport function Progress_isCompletedSet(entry: IHistoryEntry): boolean {\n  return Reps_isCompleted(entry.sets);\n}\n\nexport function Progress_isFullyEmptySet(progress: IHistoryRecord): boolean {\n  return progress.entries.every((entry) => Reps_isEmpty(entry.sets));\n}\n\nexport function Progress_isFullyEmptyOrFinishedSet(progress: IHistoryRecord): boolean {\n  return progress.entries.every((entry) => Progress_isEmptyOrFinishedSet(entry));\n}\n\nexport function Progress_isEmptyOrFinishedSet(entry: IHistoryEntry): boolean {\n  return Reps_isEmptyOrFinished(entry.sets);\n}\n\nexport function Progress_hasLastUnfinishedSet(entry: IHistoryEntry): boolean {\n  return entry.sets.filter((s) => !s.isCompleted).length === 1;\n}\n\nexport function Progress_isChanged(aProgress?: IHistoryRecord, bProgress?: IHistoryRecord): boolean {\n  if (aProgress != null && bProgress == null) {\n    return true;\n  } else if (aProgress == null && bProgress != null) {\n    return true;\n  } else if (aProgress == null && bProgress == null) {\n    return false;\n  } else {\n    const changed = !ObjectUtils_isEqual(aProgress!, bProgress!);\n    return changed;\n  }\n}\n\nexport function Progress_showUpdateDate(progress: IHistoryRecord, date: string, time: number): IHistoryRecord {\n  return {\n    ...progress,\n    ui: {\n      ...progress.ui,\n      dateModal: { date, time },\n    },\n  };\n}\n\n// Shared with the program grid: a superset is the same grouping whether you are reading a program or\n// performing it, so it gets the same color in both.\nexport const Progress_supersetColors = [\"red\", \"blue\", \"green\", \"purple\"];\n\nexport function Progress_getColorToSupersetGroup(\n  progress: Pick<IHistoryRecord, \"entries\">\n): Partial<Record<string, IHistoryEntry[]>> {\n  const groups = Progress_getSupersetGroups(progress.entries);\n  let index = 0;\n  return ObjectUtils_entriesNonnull(groups).reduce<Partial<Record<string, IHistoryEntry[]>>>((memo, [, group]) => {\n    const color = Progress_supersetColors[index % Progress_supersetColors.length];\n    memo[color] = group;\n    index += 1;\n    return memo;\n  }, {});\n}\n\nexport function Progress_getSupersetToColor(entries: IHistoryEntry[]): Partial<Record<string, string>> {\n  const groups = Progress_getSupersetGroups(entries);\n  let index = 0;\n  return ObjectUtils_entriesNonnull(groups).reduce<Partial<Record<string, string>>>((memo, [superset, group]) => {\n    const color = Progress_supersetColors[index % Progress_supersetColors.length];\n    // Keep color assignment in lockstep with Progress_getColorToSupersetGroup (which advances the\n    // index for every group), but a lone leftover entry shouldn't get a pairing line.\n    if (group.length > 1) {\n      memo[superset] = color;\n    }\n    index += 1;\n    return memo;\n  }, {});\n}\n\nexport function Progress_getSupersetGroups(entries: IHistoryEntry[]): Partial<Record<string, IHistoryEntry[]>> {\n  const groups: Partial<Record<string, IHistoryEntry[]>> = {};\n  for (const entry of entries) {\n    if (entry.superset != null) {\n      if (!groups[entry.superset]) {\n        groups[entry.superset] = [];\n      }\n      groups[entry.superset]!.push(entry);\n    }\n  }\n  return groups;\n}\n\nexport function Progress_stop(\n  progresses: Record<number, IHistoryRecord | undefined>,\n  id: number\n): Record<number, IHistoryRecord | undefined> {\n  return ObjectUtils_keys(progresses).reduce<Record<number, IHistoryRecord | undefined>>((memo, k) => {\n    const p = progresses[k];\n    if (p != null && p.id !== id) {\n      memo[k] = p;\n    }\n    return memo;\n  }, {});\n}\n\nexport function Progress_changeDate(progress: IHistoryRecord, dateStr?: string, time?: number): IHistoryRecord {\n  let startTime = progress.startTime;\n  const startTimeDate = new Date(startTime);\n  const date = dateStr != null ? DateUtils_fromYYYYMMDD(dateStr) : undefined;\n  if (date != null) {\n    startTime = new Date(\n      date.getFullYear(),\n      date.getMonth(),\n      date.getDate(),\n      startTimeDate.getHours(),\n      startTimeDate.getMinutes(),\n      startTimeDate.getSeconds()\n    ).getTime();\n  }\n  const endTime = time != null ? startTime + time : startTime + History_workoutTime(progress);\n  return {\n    ...progress,\n    ...(dateStr != null ? { date: DateUtils_fromYYYYMMDDStr(dateStr) } : {}),\n    startTime,\n    intervals: [[startTime, endTime]],\n    endTime,\n    ui: {\n      ...progress.ui,\n      dateModal: undefined,\n    },\n  };\n}\n\nexport function Progress_getProgressId(state: Pick<IState, \"progress\">): number {\n  const editIds = Object.keys((state as IState).progress)\n    .map(Number)\n    .filter(Boolean);\n  return editIds.length > 0 ? editIds[0] : 0;\n}\n\nexport function Progress_lbProgress(progressId?: number): LensBuilder<IState, IHistoryRecord, {}, undefined> {\n  if (progressId == null || progressId === 0) {\n    return lb<IState>().p(\"storage\").pi(\"progress\").i(0);\n  } else {\n    return lb<IState>().pi(\"progress\").pi(progressId);\n  }\n}\n\nexport function Progress_getCurrentProgress(state: Pick<IState, \"storage\">): IHistoryRecord | undefined {\n  return state.storage.progress?.[0];\n}\n\nexport function Progress_getProgress(state: Pick<IState, \"progress\" | \"storage\">): IHistoryRecord | undefined {\n  const progressId = Progress_getProgressId(state);\n  return Progress_getProgressById(state, progressId);\n}\n\nexport function Progress_getProgressById(\n  state: Pick<IState, \"progress\" | \"storage\">,\n  id: number\n): IHistoryRecord | undefined {\n  if (id === 0) {\n    return state.storage.progress?.[0];\n  } else {\n    return (state as IState).progress[id];\n  }\n}\n\nexport function Progress_setProgress(state: IState, progress: IHistoryRecord): IState {\n  if (progress.id === 0) {\n    return lf(state).p(\"storage\").p(\"progress\").set([progress]);\n  } else {\n    return lf(state).pi(\"progress\").p(progress.id).set(progress);\n  }\n}\n\nexport function Progress_runUpdateScriptForEntry(\n  entry: IHistoryEntry,\n  dayData: IDayData,\n  programExercise: IPlannerProgramExercise,\n  otherStates: IByTag<IProgramState>,\n  setIndex: number,\n  settings: ISettings,\n  stats: IStats\n): IHistoryEntry {\n  if (setIndex !== -1 && !entry?.sets[setIndex]?.isCompleted) {\n    return entry;\n  }\n  const script = PlannerProgramExercise_getUpdateScript(programExercise);\n  if (!script) {\n    return entry;\n  }\n  const exercise = programExercise.exerciseType;\n  const state = ObjectUtils_clone(PlannerProgramExercise_getState(programExercise));\n  const setVariationIndex = PlannerProgramExercise_currentEvaluatedSetVariationIndex(programExercise);\n  const descriptionIndex = PlannerProgramExercise_currentDescriptionIndex(programExercise);\n  const exerciseVariationIndex = PlannerProgramExercise_currentExerciseVariationIndex(programExercise);\n  const bindings = Progress_createScriptBindings(\n    dayData,\n    entry,\n    settings,\n    programExercise.evaluatedSetVariations[setVariationIndex]?.sets.length ?? 0,\n    Stats_getCurrentMovingAverageBodyweight(stats, settings),\n    setIndex + 1,\n    setVariationIndex,\n    descriptionIndex,\n    exerciseVariationIndex,\n    programExercise.label\n  );\n  const fnContext: IScriptFnContext = {\n    exerciseType: exercise,\n    ...Progress_scriptExerciseContext(entry, programExercise),\n    unit: settings.units,\n    prints: [],\n  };\n  const runner = new ScriptRunner(\n    script,\n    state,\n    ObjectUtils_clone(otherStates),\n    bindings,\n    Progress_createScriptFunctions(settings),\n    settings.units,\n    fnContext,\n    \"update\"\n  );\n  runner.execute();\n  const { updatePrints, ...newEntry } = Progress_applyBindings(entry, bindings, settings);\n  return { ...newEntry, state: { ...newEntry.state, ...state }, updatePrintLines: fnContext.prints };\n}\n\nexport function Progress_runInitialUpdateScripts(\n  aProgress: IHistoryRecord,\n  programExerciseIds: string[] | undefined,\n  day: number,\n  program: IEvaluatedProgram,\n  settings: ISettings,\n  stats: IStats\n): IHistoryRecord {\n  const programDay = Program_getProgramDay(program, day);\n  if (!programDay) {\n    return aProgress;\n  }\n  const dayExercises = Program_getProgramDayUsedExercises(programDay);\n  const programExercises = programExerciseIds\n    ? CollectionUtils_compact(programExerciseIds.map((id) => dayExercises.find((e) => e.key === id)))\n    : dayExercises;\n\n  return {\n    ...aProgress,\n    entries: aProgress.entries.map((entry) => {\n      const programExercise =\n        entry.programExerciseId != null ? programExercises.find((e) => e.key === entry.programExerciseId) : undefined;\n      if (!programExercise) {\n        return entry;\n      }\n      try {\n        return Progress_runUpdateScriptForEntry(\n          entry,\n          Progress_getDayData(aProgress),\n          programExercise,\n          program.states,\n          -1,\n          settings,\n          stats\n        );\n      } catch (error) {\n        const e = error as Error;\n        console.error(e);\n        Dialog_alert(`Error during executing 'update: custom()' script for ${programExercise.fullName}: ${e.message}`);\n        return entry;\n      }\n    }),\n  };\n}\n\nexport function Progress_runUpdateScript(\n  aProgress: IHistoryRecord,\n  programExercise: IPlannerProgramExercise,\n  otherStates: IByTag<IProgramState>,\n  entryIndex: number,\n  setIndex: number,\n  mode: IProgressMode,\n  settings: ISettings,\n  stats: IStats,\n  onError?: IScriptErrorHandler\n): IHistoryRecord {\n  if (mode === \"warmup\") {\n    return aProgress;\n  }\n  const entry = aProgress.entries[entryIndex];\n  let newEntry: IHistoryEntry;\n  try {\n    newEntry = Progress_runUpdateScriptForEntry(\n      entry,\n      Progress_getDayData(aProgress),\n      programExercise,\n      otherStates,\n      setIndex,\n      settings,\n      stats\n    );\n  } catch (error) {\n    const e = error as Error;\n    console.error(e);\n    const message = `Error during executing 'update: custom()' script for ${programExercise.fullName}: ${e.message}`;\n    if (onError) {\n      onError(message);\n    } else {\n      Dialog_alert(message);\n    }\n    newEntry = entry;\n  }\n  const progress = lf(aProgress).p(\"entries\").i(entryIndex).set(newEntry);\n  return progress;\n}\n\nexport function Progress_applyBindings(\n  oldEntry: IHistoryEntry,\n  bindings: IScriptBindings,\n  settings: ISettings\n): IHistoryEntry {\n  const keys = [\n    \"RPE\",\n    \"minReps\",\n    \"reps\",\n    \"weights\",\n    \"amraps\",\n    \"logrpes\",\n    \"timers\",\n    \"setTime\",\n    \"originalWeights\",\n    \"askweights\",\n  ] as const;\n  // Deep-clone ONLY `sets` (the part the loop below mutates) and shallow-spread the rest of the entry,\n  // so `exercise`/`warmupSets` keep their reference. The previous whole-entry ObjectUtils_clone gave\n  // entry.exercise a value-identical NEW reference on every set completion, which defeated the\n  // O(per-exercise-history) memos in the graph/history workout cards downstream.\n  const lastCompletedIndex = CollectionUtils_findIndexReverse(bindings.completedReps, (r) => r != null) + 1;\n  const entry: IHistoryEntry = {\n    ...oldEntry,\n    sets: ObjectUtils_clone(oldEntry.sets.slice(0, Math.max(lastCompletedIndex, bindings.numberOfSets, 0))),\n  };\n  for (const key of keys) {\n    for (let i = 0; i < bindings[key].length; i += 1) {\n      if (entry.sets[i] == null) {\n        entry.sets[i] = {\n          vtype: \"set\",\n          id: UidFactory_generateUid(6),\n          index: i,\n          isUnilateral: Exercise_getIsUnilateral(entry.exercise, settings),\n          reps: 0,\n          weight: Weight_build(0, \"lb\"),\n          originalWeight: Weight_build(0, \"lb\"),\n          askWeight: false,\n          isCompleted: false,\n        };\n      }\n      if (!entry.sets[i].isCompleted) {\n        if (key === \"RPE\") {\n          const value = bindings.RPE[i];\n          entry.sets[i].rpe = value !== 0 ? value : undefined;\n        } else if (key === \"reps\") {\n          const value = bindings.reps[i];\n          entry.sets[i].reps = value;\n        } else if (key === \"minReps\") {\n          const value = bindings.minReps[i];\n          entry.sets[i].minReps = value !== 0 ? value : undefined;\n        } else if (key === \"weights\") {\n          const value = bindings.weights[i];\n          entry.sets[i].weight = value;\n        } else if (key === \"originalWeights\") {\n          const value = bindings.originalWeights[i];\n          entry.sets[i].originalWeight = value;\n        } else if (key === \"amraps\") {\n          const value = bindings.amraps[i];\n          entry.sets[i].isAmrap = !!value;\n        } else if (key === \"logrpes\") {\n          const value = bindings.logrpes[i];\n          entry.sets[i].logRpe = !!value;\n        } else if (key === \"askweights\") {\n          const value = bindings.askweights[i];\n          entry.sets[i].askWeight = !!value;\n        } else if (key === \"timers\") {\n          const value = bindings.timers[i];\n          entry.sets[i].timer = value != null && value >= 0 ? value : undefined;\n        } else if (key === \"setTime\") {\n          const value = bindings.setTime[i];\n          entry.sets[i].setTimer = value != null && value >= 0 ? value : undefined;\n        }\n      }\n    }\n  }\n  return entry;\n}\n\nexport function Progress_completeAmrapSet(\n  progress: IHistoryRecord,\n  entryIndex: number,\n  setIndex: number,\n  settings: ISettings\n): IHistoryRecord {\n  const entry = progress.entries[entryIndex];\n  const isUnilateral = Exercise_getIsUnilateral(entry.exercise, settings);\n  return lf(progress)\n    .p(\"entries\")\n    .i(entryIndex)\n    .p(\"sets\")\n    .i(setIndex)\n    .modify((progressSet) => {\n      return {\n        ...progressSet,\n        timestamp: !progressSet.isCompleted ? Date.now() : progressSet.timestamp,\n        completedRepsLeft: isUnilateral ? (progressSet.completedRepsLeft ?? progressSet.reps) : undefined,\n        completedReps: progressSet.completedReps ?? progressSet.reps,\n        completedWeight: progressSet.completedWeight ?? progressSet.weight,\n        isCompleted: !progressSet.isCompleted,\n      };\n    });\n}\n\nexport function Progress_shouldShowAmrapModal(\n  entry: IHistoryEntry,\n  setIndex: number,\n  mode: IProgressMode,\n  hasUserPromptedVars: boolean,\n  settings: ISettings\n): boolean {\n  const set = mode === \"warmup\" ? entry.warmupSets[setIndex] : entry.sets[setIndex];\n  const shouldLogRpe = !!set?.logRpe;\n  const shouldPromptUserVars = hasUserPromptedVars && Progress_hasLastUnfinishedSet(entry);\n  const isUnilateral = Exercise_getIsUnilateral(entry.exercise, settings);\n  const isAmrap =\n    (set?.completedReps == null || (isUnilateral && set?.completedRepsLeft == null)) &&\n    (!!set?.isAmrap || set.reps == null);\n  const shouldAskWeight = set?.completedWeight == null && (!!set?.askWeight || set.weight == null);\n  return !set.isCompleted && (shouldLogRpe || shouldPromptUserVars || isAmrap || shouldAskWeight);\n}\n\nexport function Progress_completeSet(\n  progress: IHistoryRecord,\n  entryIndex: number,\n  setIndex: number,\n  mode: IProgressMode,\n  hasUserPromptedVars: boolean,\n  settings: ISettings,\n  isPlayground?: boolean\n): IHistoryRecord {\n  const entry = progress.entries[entryIndex];\n  const set = mode === \"warmup\" ? entry.warmupSets[setIndex] : entry.sets[setIndex];\n  const setTimerModal = Progress_getActiveSetTimer(progress);\n  const hasOpenSetTimer =\n    setTimerModal != null && setTimerModal.entryIndex === entryIndex && setTimerModal.setIndex === setIndex;\n  // The first \"complete\" on a timed set starts its clock (opens the set-timer modal) instead of\n  // completing it — the actual completion happens on the second signal (Stop & record), mirroring\n  // how the AMRAP modal defers completion. See Progress_completeSetAction for the recording step.\n  if (mode === \"workout\" && set?.setTimer != null && !set.isCompleted && !hasOpenSetTimer) {\n    const now = Date.now();\n    const opened = TimedSet_open(progress, entryIndex, setIndex, settings, {\n      getReadySeconds: isPlayground ? 0 : (settings.timers.getReady ?? 0),\n      startedAt: now,\n      nonce: now,\n    });\n    if (opened != null) {\n      return { ...progress, setTimer: undefined, setTimerGetReady: undefined, ...opened };\n    }\n  }\n  const shouldLogRpe = !!set?.logRpe;\n  const shouldPromptUserVars = hasUserPromptedVars && Progress_hasLastUnfinishedSet(entry);\n  const isUnilateral = Exercise_getIsUnilateral(entry.exercise, settings);\n  const isAmrap =\n    (set?.completedReps == null || (isUnilateral && set?.completedRepsLeft == null)) &&\n    (!!set?.isAmrap || set.reps == null);\n  const shouldAskWeight = set?.completedWeight == null && (!!set?.askWeight || set.weight == null);\n  if (mode === \"warmup\") {\n    return lf(progress)\n      .p(\"entries\")\n      .i(entryIndex)\n      .p(\"warmupSets\")\n      .i(setIndex)\n      .modify((progressSet) => {\n        return {\n          ...progressSet,\n          timestamp: !progressSet.isCompleted ? Date.now() : progressSet.timestamp,\n          completedRepsLeft: isUnilateral ? (progressSet.completedRepsLeft ?? progressSet.reps) : undefined,\n          completedReps: progressSet.completedReps ?? progressSet.reps,\n          completedWeight: progressSet.completedWeight ?? progressSet.weight,\n          isCompleted: !progressSet.isCompleted,\n        };\n      });\n  } else if (Progress_shouldShowAmrapModal(entry, setIndex, mode, hasUserPromptedVars, settings)) {\n    return {\n      ...progress,\n      amrapModal: {\n        entryIndex,\n        setIndex,\n        nonce: Date.now(),\n        logRpe: shouldLogRpe,\n        userVars: shouldPromptUserVars,\n        isAmrap: isAmrap,\n        askWeight: shouldAskWeight,\n      },\n    };\n  } else {\n    return Progress_completeAmrapSet(progress, entryIndex, setIndex, settings);\n  }\n}\n\nexport function Progress_getFirstIncompleteWorkoutSet(\n  progress: IHistoryRecord,\n  after?: { entryIndex: number; setIndex: number }\n): { entryIndex: number; setIndex: number } | undefined {\n  const startEntry = after?.entryIndex ?? 0;\n  for (let entryIndex = startEntry; entryIndex < progress.entries.length; entryIndex += 1) {\n    const sets = progress.entries[entryIndex].sets;\n    const startSet = after != null && entryIndex === after.entryIndex ? after.setIndex + 1 : 0;\n    for (let setIndex = startSet; setIndex < sets.length; setIndex += 1) {\n      if (!sets[setIndex].isCompleted) {\n        return { entryIndex, setIndex };\n      }\n    }\n  }\n  return undefined;\n}\n\nexport type IActiveSetTimer =\n  | {\n      phase: \"getReady\";\n      entryIndex: number;\n      setIndex: number;\n      setId: string;\n      id: string;\n      side: ITimedSetSide;\n      startedAt: number;\n      getReady: number;\n      nonce?: number;\n    }\n  | {\n      phase: \"work\";\n      entryIndex: number;\n      setIndex: number;\n      setId: string;\n      id: string;\n      side: ITimedSetSide;\n      startedAt: number;\n      nonce?: number;\n      keepTiming?: boolean;\n    };\n\n// A watch on a cached bundle writes a phase with no setId, at the same storage version, so the migration\n// never reaches it — such a phase falls back to indices rather than being rejected as unresolvable.\nexport function Progress_resolveTimedSetPhase(\n  progress: IHistoryRecord,\n  phase: { entryIndex: number; setIndex: number; setId?: string } | undefined\n): ISet | undefined {\n  if (phase == null) {\n    return undefined;\n  }\n  const set = progress.entries[phase.entryIndex]?.sets[phase.setIndex];\n  if (set == null) {\n    return undefined;\n  }\n  return phase.setId == null || set.id === phase.setId ? set : undefined;\n}\n\n// `setTimer` wins when both fields are set: version merging is field-by-field, so a merge can legally\n// produce both, and preferring the later phase is the correct recovery.\nexport function Progress_getActiveSetTimer(progress: IHistoryRecord): IActiveSetTimer | undefined {\n  const stm = progress.setTimer;\n  if (stm != null && Progress_resolveTimedSetPhase(progress, stm) != null) {\n    return { phase: \"work\", ...stm, side: stm.side ?? \"bilateral\" };\n  }\n  const getReady = progress.setTimerGetReady;\n  if (getReady != null && Progress_resolveTimedSetPhase(progress, getReady) != null) {\n    return { phase: \"getReady\", ...getReady, side: getReady.side ?? \"bilateral\" };\n  }\n  return undefined;\n}\n\nexport function Progress_startSetTimerWork(progress: IHistoryRecord, startedAt: number): IHistoryRecord {\n  const getReady = progress.setTimerGetReady;\n  // The setTimer != null half is not redundant: a merge can leave both fields set, and a stale \"Start now\"\n  // must not restart a running clock or retarget it at the countdown's set.\n  if (getReady == null || progress.setTimer != null) {\n    return progress;\n  }\n  return {\n    ...progress,\n    setTimerGetReady: undefined,\n    setTimer: {\n      entryIndex: getReady.entryIndex,\n      setIndex: getReady.setIndex,\n      setId: getReady.setId,\n      id: getReady.id,\n      side: getReady.side,\n      startedAt,\n      // Reusing the nonce is what stops the presenter re-navigating on the flip.\n      nonce: getReady.nonce,\n    },\n  };\n}\n\n// Conditions must mirror the auto-advance branch of Progress_isSetTimerCheckDue, or the cue fires for a\n// rest that never rolls into a work window.\nexport function Progress_getNextTimedSet(\n  progress: IHistoryRecord\n): { entryIndex: number; setIndex: number } | undefined {\n  // The \"next\" set for an auto/EMOM advance is the set right after the one the timer belongs to — NOT the\n  // globally-first incomplete set. Users don't work exercises strictly top-to-bottom, so an earlier untimed\n  // exercise left incomplete would otherwise be picked as \"next\", have no setTimer, and silently stop the chain.\n  const current =\n    progress.setTimer != null\n      ? { entryIndex: progress.setTimer.entryIndex, setIndex: progress.setTimer.setIndex }\n      : progress.timerEntryIndex != null && progress.timerSetIndex != null\n        ? { entryIndex: progress.timerEntryIndex, setIndex: progress.timerSetIndex }\n        : undefined;\n  // In a superset the next timed set is the next group member's incomplete set (Crunch → Hollow → Crunch …),\n  // not the current exercise's own next set — otherwise the auto-advance opens a set for the exercise the\n  // clock just left instead of the one now shown. Fall back to raw order once the group is exhausted.\n  const next =\n    (current != null ? Progress_getNextTimedSetInSuperset(progress, current) : undefined) ??\n    Progress_getFirstIncompleteWorkoutSet(progress, current);\n  if (next == null) {\n    return undefined;\n  }\n  const set = progress.entries[next.entryIndex]?.sets[next.setIndex];\n  return set?.setTimer != null ? next : undefined;\n}\n\nfunction Progress_getNextTimedSetInSuperset(\n  progress: IHistoryRecord,\n  current: { entryIndex: number; setIndex: number }\n): { entryIndex: number; setIndex: number } | undefined {\n  const entry = progress.entries[current.entryIndex];\n  if (entry?.superset == null) {\n    return undefined;\n  }\n  // Reuse the same superset resolver the pager uses (Progress_maybeApplySuperset), so the auto-advance\n  // opens a set for the very exercise now shown. It skips finished group members and returns undefined\n  // once the group is exhausted, letting the caller fall back to raw order for any later timed exercise.\n  const nextEntry = Progress_getNextEntry(progress, entry, \"workout\", false);\n  if (nextEntry == null || nextEntry.id === entry.id) {\n    return undefined;\n  }\n  const entryIndex = progress.entries.findIndex((e) => e.id === nextEntry.id);\n  const setIndex = nextEntry.sets.findIndex((s) => !s.isCompleted);\n  if (entryIndex < 0 || setIndex < 0) {\n    return undefined;\n  }\n  return { entryIndex, setIndex };\n}\n\n// Moves the set-timer banner to the next timed set (or closes it if there's none) and clears any rest\n// timer. `freshNonce` controls whether the workout screen re-opens the banner: keep the nonce for an\n// in-place advance (EMOM, banner already open), use a fresh one after rest (banner was closed).\n// An `auto` set's countdown comes OUT of its rest rather than being added in front of it, so the circuit's\n// cadence is unchanged: `45s|15s auto` with a 5s countdown rests 10s, then counts down 5. Clamping to the\n// rest is what makes a zero-rest EMOM produce no countdown at all.\nexport function Progress_getAutoGetReadySeconds(set: ISet | undefined, settings: ISettings): number {\n  if (!set?.auto) {\n    return 0;\n  }\n  return Math.min(settings.timers.getReady ?? 0, set.timer ?? 0);\n}\n\n// `startedAt` is when the previous phase actually ended, not when we noticed. Reading the clock here\n// instead would hand a late reconcile a full fresh countdown and stretch the circuit past its cadence.\nexport function Progress_advanceTimedSet(\n  effects: INativeEffect[],\n  progress: IHistoryRecord,\n  settings: ISettings,\n  freshNonce: boolean,\n  getReadySeconds: number = 0,\n  startedAt?: number\n): IHistoryRecord {\n  const phaseStartedAt = startedAt ?? Date.now();\n  const next = Progress_getNextTimedSet(progress);\n  const prevNonce = progress.setTimer?.nonce;\n  // Advancing ends the current (auto) rest — cancel its pending \"rest is over\" notification so it doesn't\n  // fire during the next set's clock.\n  if (progress.timerSince != null) {\n    effects.push({ type: \"stopTimer\" });\n  }\n  // Follow the clock to the next set's exercise so the shown exercise tracks the active set (EMOM/Tabata can\n  // roll into a different exercise). currentEntryIndex syncs, so every client's view moves with it.\n  const nextEntryIndex = next != null ? next.entryIndex : progress.currentEntryIndex;\n  const entryChanged = nextEntryIndex !== (progress.currentEntryIndex ?? 0);\n  const opened =\n    next != null\n      ? TimedSet_open(progress, next.entryIndex, next.setIndex, settings, {\n          getReadySeconds,\n          startedAt: phaseStartedAt,\n          nonce: freshNonce ? Date.now() : prevNonce,\n        })\n      : undefined;\n  return {\n    ...progress,\n    timerSince: undefined,\n    timer: undefined,\n    timerMode: undefined,\n    timerEntryIndex: undefined,\n    timerSetIndex: undefined,\n    setTimer: undefined,\n    setTimerGetReady: undefined,\n    ...opened,\n    currentEntryIndex: nextEntryIndex,\n    // The pager scrolls on a forceUpdateEntryIndex flip, not on currentEntryIndex alone (so swipes aren't\n    // fought). Flip it when an auto-advance crosses into another exercise so the pager scrolls to follow.\n    ui: entryChanged ? { ...progress.ui, forceUpdateEntryIndex: !progress.ui?.forceUpdateEntryIndex } : progress.ui,\n  };\n}\n\nexport function Progress_handOffToOtherSide(\n  progress: IHistoryRecord,\n  entryIndex: number,\n  setIndex: number,\n  settings: ISettings,\n  endedAt: number,\n  nonce?: number,\n  isPlayground?: boolean\n): IHistoryRecord {\n  const set = progress.entries[entryIndex]?.sets[setIndex];\n  if (set == null) {\n    return progress;\n  }\n  const opened = TimedSet_open(progress, entryIndex, setIndex, settings, {\n    getReadySeconds: isPlayground ? 0 : (settings.timers.getReady ?? 0),\n    startedAt: set.auto ? endedAt : Date.now(),\n    nonce,\n  });\n  if (opened == null) {\n    return progress;\n  }\n  return { ...progress, setTimer: undefined, setTimerGetReady: undefined, ...opened };\n}\n\n// The single place that decides what happens after a timed set is recorded+completed from its clock.\nexport function Progress_proceedAfterTimedSet(\n  effects: INativeEffect[],\n  progress: IHistoryRecord,\n  entryIndex: number,\n  setIndex: number,\n  settings: ISettings,\n  subscription: ISubscription | undefined,\n  isPlayground?: boolean\n): IHistoryRecord {\n  // AMRAP took over (set isn't completed yet). Keep the set-timer modal open so the amrap modal stacks\n  // cleanly on top of it — clearing it here would race the amrap push and pop the wrong screen. The\n  // set-timer modal is closed (and rest started) when amrap resolves; see Progress_changeAmrapAction.\n  if (progress.amrapModal != null) {\n    return progress;\n  }\n  // The playground has no rest timers (like normal-set completion, see below) and doesn't run circuits in real\n  // time — just close the banner. No rest, no EMOM/auto advance; the user taps the next set to continue.\n  if (isPlayground) {\n    return { ...progress, setTimer: undefined };\n  }\n  const set = progress.entries[entryIndex]?.sets[setIndex];\n  // \"Log & keep timing\" records a set early but leaves its clock running to the target, so the recorded\n  // duration and the clock's end are different moments. Rest, the next EMOM window and any countdown all\n  // start from the clock's end, so a late reconcile resumes the cadence instead of restarting it.\n  const clockStartedAt = progress.setTimer?.startedAt;\n  const reachedTarget =\n    clockStartedAt != null &&\n    set?.setTimer != null &&\n    !set.isOverflowSetTimer &&\n    Date.now() - clockStartedAt >= set.setTimer * 1000;\n  const endedOffsetSeconds = reachedTarget ? set?.setTimer : set?.completedSetTimer;\n  const timedSetEndedAt =\n    clockStartedAt != null && endedOffsetSeconds != null ? clockStartedAt + endedOffsetSeconds * 1000 : Date.now();\n  // EMOM-style: auto with no rest rolls straight into the next timed set in the same banner.\n  if (set?.auto && (set.timer ?? 0) === 0) {\n    return Progress_advanceTimedSet(effects, progress, settings, false, 0, timedSetEndedAt);\n  }\n  const autoGetReady = Progress_getAutoGetReadySeconds(set, settings);\n  // The countdown eats the whole rest (rest <= getReady), so there is no rest left to run - go straight into\n  // it, otherwise Progress_startTimer would clear the timer for a 0s rest and nothing would reopen the clock.\n  if (autoGetReady > 0 && (set?.timer ?? 0) - autoGetReady <= 0) {\n    return Progress_advanceTimedSet(effects, progress, settings, true, autoGetReady, timedSetEndedAt);\n  }\n  let newProgress: IHistoryRecord = { ...progress, setTimer: undefined, setTimerGetReady: undefined };\n  if (set?.isCompleted && set.setTimer != null) {\n    // Shortened by the countdown, so the existing \"rest is over\" push lands at the moment the countdown\n    // opens rather than at the moment work starts.\n    const restTimer = autoGetReady > 0 ? (set.timer ?? 0) - autoGetReady : undefined;\n    newProgress = Progress_startTimer(\n      effects,\n      newProgress,\n      timedSetEndedAt,\n      \"workout\",\n      entryIndex,\n      setIndex,\n      settings,\n      subscription,\n      restTimer\n    );\n  }\n  return newProgress;\n}\n\n// Discard the set timer banner without recording. If the set was already logged (via \"Log & keep\"),\n// start its deferred rest.\nexport function Progress_closeTimedSet(\n  effects: INativeEffect[],\n  progress: IHistoryRecord,\n  settings: ISettings,\n  subscription: ISubscription | undefined,\n  isPlayground?: boolean\n): IHistoryRecord {\n  const stm = progress.setTimer;\n  // Without the countdown branch a dismissal during it strands the field, and the banner reopens.\n  if (stm == null) {\n    return progress.setTimerGetReady != null ? { ...progress, setTimerGetReady: undefined } : progress;\n  }\n  let newProgress: IHistoryRecord = { ...progress, setTimer: undefined, setTimerGetReady: undefined };\n  const set = newProgress.entries[stm.entryIndex]?.sets[stm.setIndex];\n  // The playground has no rest timers, so discarding a \"Log & keep timing\" set just closes the banner.\n  if (!isPlayground && set?.isCompleted && set.setTimer != null && newProgress.amrapModal == null) {\n    newProgress = Progress_startTimer(\n      effects,\n      newProgress,\n      Date.now(),\n      \"workout\",\n      stm.entryIndex,\n      stm.setIndex,\n      settings,\n      subscription\n    );\n  }\n  return newProgress;\n}\n\nexport function Progress_reconcileTimedSet(progress: IHistoryRecord, now: number): IHistoryRecord {\n  const getReady = progress.setTimerGetReady;\n  if (progress.setTimer != null || getReady == null || now - getReady.startedAt < getReady.getReady * 1000) {\n    return progress;\n  }\n  return Progress_startSetTimerWork(progress, getReady.startedAt + getReady.getReady * 1000);\n}\n\n// Cheap pure predicate (no program evaluation) telling whether Progress_checkSetTimer would do anything.\n// Lets per-second pollers skip resolving program context + dispatching when nothing is due.\nexport function Progress_isSetTimerCheckDue(progress: IHistoryRecord, now: number): boolean {\n  if (progress.amrapModal != null) {\n    return false;\n  }\n  const getReady = progress.setTimerGetReady;\n  if (progress.setTimer == null && getReady != null) {\n    return now - getReady.startedAt >= getReady.getReady * 1000;\n  }\n  const stm = progress.setTimer;\n  if (stm != null) {\n    const set = progress.entries[stm.entryIndex]?.sets[stm.setIndex];\n    // No !isCompleted guard: a set logged via \"Log & keep timing\" keeps the clock running with the modal\n    // open, and must still auto-close + start rest when the clock reaches the (non-overflow) target.\n    return !!(set?.setTimer != null && !set.isOverflowSetTimer && now - stm.startedAt >= set.setTimer * 1000);\n  }\n  if (\n    progress.timer != null &&\n    progress.timerSince != null &&\n    progress.timerEntryIndex != null &&\n    progress.timerSetIndex != null\n  ) {\n    const restSet = progress.entries[progress.timerEntryIndex]?.sets[progress.timerSetIndex];\n    return !!(\n      restSet?.auto &&\n      now - progress.timerSince >= progress.timer * 1000 &&\n      Progress_getNextTimedSet(progress) != null\n    );\n  }\n  return false;\n}\n\n// Time-driven set timer transitions, safe to poll. Returns the same `progress` reference when nothing\n// is due, so callers can skip dispatching. Two cases: (A) a non-overflow timed set's work timer reached\n// its target → record+complete+proceed (overflow `+` sets count up past target and are stopped manually);\n// (B) an `auto` set's rest expired → advance to the next timed set.\nexport function Progress_checkSetTimer(\n  effects: INativeEffect[],\n  settings: ISettings,\n  stats: IStats,\n  progress: IHistoryRecord,\n  subscription: ISubscription | undefined,\n  programExercise: IPlannerProgramExercise | undefined,\n  otherStates: IByExercise<IProgramState> | undefined,\n  nowArg?: number,\n  isPlayground?: boolean\n): IHistoryRecord {\n  const now = nowArg ?? Date.now();\n  if (progress.amrapModal != null) {\n    return progress;\n  }\n  const current = Progress_reconcileTimedSet(progress, now);\n  const stm = current.setTimer;\n  if (stm != null) {\n    const set = current.entries[stm.entryIndex]?.sets[stm.setIndex];\n    // No !isCompleted guard: a \"Log & keep timing\" set is already completed but keeps the clock running, and\n    // must still auto-close + rest at the target. completeSetAction's already-logged branch handles it.\n    if (set?.setTimer != null && !set.isOverflowSetTimer && now - stm.startedAt >= set.setTimer * 1000) {\n      const recordedSeconds = TimedSet_recordedFor(set, stm.side) ?? set.setTimer;\n      return Progress_completeSetAction(\n        effects,\n        settings,\n        stats,\n        current,\n        {\n          type: \"CompleteSetAction\",\n          entryIndex: stm.entryIndex,\n          setIndex: stm.setIndex,\n          mode: \"workout\",\n          programExercise,\n          otherStates,\n          forceUpdateEntryIndex: false,\n          isExternal: true,\n          isPlayground: isPlayground ?? false,\n          recordedSeconds,\n        },\n        subscription\n      );\n    }\n    // `current`, not `progress`, or a promotion made above is silently discarded.\n    return current;\n  }\n  if (\n    current.timer != null &&\n    current.timerSince != null &&\n    current.timerEntryIndex != null &&\n    current.timerSetIndex != null\n  ) {\n    const restSet = current.entries[current.timerEntryIndex]?.sets[current.timerSetIndex];\n    if (\n      restSet?.auto &&\n      now - current.timerSince >= current.timer * 1000 &&\n      Progress_getNextTimedSet(current) != null\n    ) {\n      // The rest that just ended was already shortened by the countdown, so what follows it is the countdown\n      // itself, not the work clock. It starts at the rest's deadline, not now: a tick that lands late (a\n      // throttled timer, a wake) must not hand out a full fresh countdown and stretch the round.\n      return Progress_advanceTimedSet(\n        effects,\n        current,\n        settings,\n        true,\n        Progress_getAutoGetReadySeconds(restSet, settings),\n        current.timerSince + current.timer * 1000\n      );\n    }\n  }\n  return current;\n}\n\nexport function Progress_getIsRpeEnabled(sets: ISet[]): boolean {\n  return sets.some((set) => set.rpe != null);\n}\n\nexport function Progress_getIsMinRepsEnabled(sets: ISet[]): boolean {\n  return sets.some((set) => set.minReps != null);\n}\n\nexport function Progress_updateAmrapRepsInExercise(progress: IHistoryRecord, value?: number): IHistoryRecord {\n  if (progress.amrapModal != null) {\n    const { entryIndex, setIndex } = progress.amrapModal;\n    return lf(progress).p(\"entries\").i(entryIndex).p(\"sets\").i(setIndex).p(\"completedReps\").set(value);\n  } else {\n    return progress;\n  }\n}\n\nexport function Progress_updateAmrapRepsLeftInExercise(progress: IHistoryRecord, value?: number): IHistoryRecord {\n  if (progress.amrapModal != null) {\n    const { entryIndex, setIndex } = progress.amrapModal;\n    return lf(progress).p(\"entries\").i(entryIndex).p(\"sets\").i(setIndex).p(\"completedRepsLeft\").set(value);\n  } else {\n    return progress;\n  }\n}\n\nexport function Progress_updateRpeInExercise(progress: IHistoryRecord, value?: number): IHistoryRecord {\n  if (progress.amrapModal != null) {\n    const { entryIndex, setIndex } = progress.amrapModal;\n    const newValue = value != null ? Math.round(Math.min(10, Math.max(0, value)) / 0.5) * 0.5 : undefined;\n    return lf(progress).p(\"entries\").i(entryIndex).p(\"sets\").i(setIndex).p(\"completedRpe\").set(newValue);\n  } else {\n    return progress;\n  }\n}\n\nexport function Progress_updateWeightInExercise(progress: IHistoryRecord, value?: IWeight): IHistoryRecord {\n  if (progress.amrapModal != null) {\n    const { entryIndex, setIndex } = progress.amrapModal;\n    return lf(progress).p(\"entries\").i(entryIndex).p(\"sets\").i(setIndex).p(\"completedWeight\").set(value);\n  } else {\n    return progress;\n  }\n}\n\nexport function Progress_updateUserPromptedStateVars(\n  progress: IHistoryRecord,\n  programExerciseId: string,\n  userPromptedStateVars: IProgramState\n): IHistoryRecord {\n  return {\n    ...progress,\n    userPromptedStateVars: {\n      ...(progress.userPromptedStateVars || {}),\n      [programExerciseId]: userPromptedStateVars,\n    },\n  };\n}\n\nexport function Progress_editExerciseNotes(dispatch: IDispatch, entryIndex: number, notes: string): void {\n  updateProgress(dispatch, [lb<IHistoryRecord>().p(\"entries\").i(entryIndex).p(\"notes\").record(notes)], \"edit-notes\");\n}\n\nexport function Progress_addExercise(dispatch: IDispatch, exerciseType: IExerciseType, numberOfEntries: number): void {\n  updateProgress(\n    dispatch,\n    [\n      lb<IHistoryRecord>()\n        .p(\"entries\")\n        .recordModify((entries) => {\n          return [...entries, History_createCustomEntry(exerciseType, numberOfEntries)].map((e, i) => ({\n            ...e,\n            index: i,\n          }));\n        }),\n      lb<IHistoryRecord>().p(\"currentEntryIndex\").record(numberOfEntries),\n    ],\n    \"add-exercise\"\n  );\n}\n\nexport function Progress_isEligibleForInferredWeight(set: ISet): boolean {\n  return set.originalWeight == null && set.reps != null && set.rpe != null;\n}\n\n// Which past set to read the new exercise off. Closest reps rather than the heaviest set: the e1RM\n// round trip below only cancels its own error near the rep range it was estimated from, and an e1RM\n// extrapolated from a 15-rep accessory is meaningless far away from 15. Warmups are not considered —\n// they would drag the estimate down.\nfunction findSwapSourceSet(prevEntry: IHistoryEntry | undefined, targetReps: number): ISet | undefined {\n  let best: ISet | undefined;\n  let bestDistance = Infinity;\n  let bestOnerm: IWeight | undefined;\n  for (const set of prevEntry?.sets ?? []) {\n    const reps = set.completedReps ?? set.reps;\n    const weight = set.completedWeight ?? set.weight;\n    if (!set.isCompleted || reps == null || reps <= 0 || weight == null || weight.value <= 0) {\n      continue;\n    }\n    const distance = Math.abs(reps - targetReps);\n    const onerm = Weight_getOneRepMax(weight, reps, set.completedRpe ?? set.rpe);\n    if (distance < bestDistance || (distance === bestDistance && (bestOnerm == null || Weight_gt(onerm, bestOnerm)))) {\n      best = set;\n      bestDistance = distance;\n      bestOnerm = onerm;\n    }\n  }\n  return best;\n}\n\n// What the new exercise should weigh for this set's target, when the program's own number is an\n// absolute weight and so means nothing on a different lift — 500lb of leg press is not 500lb of\n// lateral raise. Answered through an e1RM, which is unreliable as an absolute number for high-rep\n// accessories but fine as an intermediate, because the error cancels on the way back out: a source\n// set at the same reps and RPE returns exactly its own weight, with no special case for it.\nfunction swapDerivedWeight(\n  set: ISet,\n  exerciseType: IExerciseType,\n  settings: ISettings,\n  prevEntry: IHistoryEntry | undefined\n): IWeight {\n  const targetReps = set.reps ?? 1;\n  const targetRpe = set.rpe ?? 10;\n  const source = findSwapSourceSet(prevEntry, targetReps);\n  const sourceWeight = source?.completedWeight ?? source?.weight;\n  const sourceReps = source?.completedReps ?? source?.reps;\n  if (sourceWeight == null || sourceReps == null) {\n    // No history for this exercise, so fall back to its 1RM — explicit if the user set one, the\n    // exercise DB's starting weight otherwise. That is already what a percentage-based set does on\n    // a swap, so the no-history case behaves the same for both kinds of program.\n    return Weight_evaluateWeight(Weight_rpePct(targetReps, targetRpe), exerciseType, settings);\n  }\n  // Defaulting the source RPE to the *target's* rather than to 10 is what makes the two multipliers\n  // cancel for the many programs that carry no RPE at all, so equal reps hand back the same weight.\n  const sourceRpe = source?.completedRpe ?? source?.rpe ?? targetRpe;\n  const ratio = Weight_rpeMultiplier(targetReps, targetRpe) / Weight_rpeMultiplier(sourceReps, sourceRpe);\n  return Weight_multiply(sourceWeight, ratio);\n}\n\n// A swapped-in exercise the program already knows about brings its own authored ramp with it, even\n// when the definition lives on a day the user isn't doing today. The first authored definition wins:\n// the same exercise carrying different warmups on different days is rare, and `warmup: none` is\n// authored too, so it is honored as an answer rather than skipped over as a missing one.\nexport function Progress_programWarmupsForExerciseType(\n  evaluatedProgram: IEvaluatedProgram | undefined,\n  exerciseType: IExerciseType,\n  settings: ISettings\n): IProgramExerciseWarmupSet[] | undefined {\n  for (const programExercise of evaluatedProgram ? Program_getAllProgramExercisesWithType(evaluatedProgram) : []) {\n    if (Exercise_eq(programExercise.exerciseType, exerciseType)) {\n      const warmups = PlannerProgramExercise_programWarmups(programExercise, settings);\n      if (warmups != null) {\n        return warmups;\n      }\n    }\n  }\n  return undefined;\n}\n\nexport function Progress_updateSetWeights(\n  entry: IHistoryEntry,\n  exerciseType: IExerciseType,\n  settings: ISettings,\n  prevEntry?: IHistoryEntry,\n  programWarmups?: IProgramExerciseWarmupSet[]\n): IHistoryEntry {\n  const unit = Equipment_getUnitForExerciseType(settings, exerciseType) ?? settings.units;\n  const newSets = entry.sets.map((set) => {\n    if (set.isCompleted) {\n      return set;\n    }\n    if (Progress_isEligibleForInferredWeight(set) || Weight_isPct(set.originalWeight)) {\n      const originalWeight = set.originalWeight ?? Weight_rpePct(set.reps ?? 1, set.rpe ?? 10);\n      const evaluatedWeight = Weight_evaluateWeight(originalWeight, exerciseType, settings);\n      const weight = Weight_roundConvertTo(evaluatedWeight, settings, unit, exerciseType);\n      return { ...set, weight };\n    }\n    if (set.originalWeight != null) {\n      const weight = Weight_roundConvertTo(\n        swapDerivedWeight(set, exerciseType, settings, prevEntry),\n        settings,\n        unit,\n        exerciseType\n      );\n      // Both fields take the loadable number. The target here is one the app invented, not a program\n      // value being approximated, so leaving them different would light up the rounding strikethrough\n      // — and its \"adjusted to match what you can load\" explanation — for a weight nothing rounded.\n      return { ...set, weight, originalWeight: weight };\n    }\n    return set;\n  });\n  // The old exercise's ramp is meaningless on the new one, so it is rebuilt: from whatever the\n  // program authors for the new exercise if it defines it anywhere, and from that exercise's own\n  // default scheme otherwise — which correctly leaves an accessory with no warmups at all.\n  const hasCompletedWarmup = entry.warmupSets.some((set) => set.isCompleted);\n  const warmupSets = hasCompletedWarmup\n    ? entry.warmupSets\n    : Exercise_getWarmupSets(exerciseType, newSets[0]?.weight, settings, programWarmups);\n  return { ...entry, sets: newSets, warmupSets };\n}\n\nexport function Progress_doesUse1RM(entry: IHistoryEntry): boolean {\n  return entry.sets.some((set) => (set.originalWeight == null ? set.rpe != null : Weight_isPct(set.originalWeight)));\n}\n\nexport function Progress_changeExercise(\n  dispatch: IDispatch,\n  settings: ISettings,\n  history: IHistoryRecord[],\n  evaluatedProgram: IEvaluatedProgram | undefined,\n  progressId: number,\n  exerciseType: IExerciseType,\n  entryIndex: number,\n  shouldKeepProgramExerciseId: boolean\n): void {\n  // `progressId` is the record's own id — 0 for the ongoing workout (Program_nextHistoryRecord),\n  // the real id when a past workout is being edited — which is exactly what has to be excluded from\n  // the history lookup, so no caller has to remember to pass it.\n  const prevEntry = History_findLastEntryForExerciseType(history, exerciseType, progressId);\n  const programWarmups = Progress_programWarmupsForExerciseType(evaluatedProgram, exerciseType, settings);\n  updateState(\n    dispatch,\n    [\n      Progress_lbProgress(progressId)\n        .p(\"entries\")\n        .i(entryIndex)\n        .recordModify((entry) => {\n          entry = Progress_updateSetWeights(entry, exerciseType, settings, prevEntry, programWarmups);\n          return {\n            ...entry,\n            exercise: exerciseType,\n            ...(shouldKeepProgramExerciseId ? {} : { programExerciseId: undefined }),\n            changed: true,\n          };\n        }),\n    ],\n    \"Change exercise\"\n  );\n}\n\n// Swapping a program exercise re-keys it, and entries point at the program by key — without\n// this the ongoing workout silently stops following the exercise it came from. Entries the\n// user already swapped by hand (`changed`) keep their own exercise either way, so they're\n// left alone. Once the ids line up the usual ApplyProgramChangesToProgress pass swaps the\n// exercise and regenerates its sets.\nexport function Progress_remapProgramExerciseId(\n  progress: IHistoryRecord,\n  oldKey: string,\n  newKey: string\n): IHistoryRecord {\n  const entries = progress.entries.map((entry) =>\n    entry.programExerciseId === oldKey && !entry.changed ? { ...entry, programExerciseId: newKey } : entry\n  );\n  return { ...progress, entries };\n}\n\n// Every entry index stored on the record is a position in `entries`, so inserting, dropping or re-sorting\n// invalidates all of them at once — a rest timer or an open AMRAP prompt would silently retarget a different\n// exercise. Anything whose entry is gone is cleared rather than left pointing at whoever moved into that slot.\n//\n// Matched by object identity, not by `entry.id`: ids are derived from the exercise\n// (`Progress_getEntryId`), so a program Squat and an ad-hoc Squat carry the same one, and a lookup would\n// hand a timer to the wrong entry. Callers therefore have to pass through the *same* entry objects for\n// everything that survived — which is what reconciling by filter/splice/sort already does.\nexport function Progress_reindexEntries(progress: IHistoryRecord, newEntries: IHistoryEntry[]): IHistoryRecord {\n  const newIndexOf = new Map<IHistoryEntry, number>(newEntries.map((e, i) => [e, i]));\n  const remap = (index: number | undefined): number | undefined => {\n    const entry = index != null ? progress.entries[index] : undefined;\n    return entry != null ? newIndexOf.get(entry) : undefined;\n  };\n  // Only ever a position to render at, never a subject that can go missing, so it lands on a neighbor instead of\n  // being cleared — a workout with entries always has one selected.\n  const clamp = (index: number | undefined): number | undefined => {\n    if (index == null || newEntries.length === 0) {\n      return undefined;\n    }\n    return remap(index) ?? Math.max(0, Math.min(index, newEntries.length - 1));\n  };\n  const keepAt = <T extends { entryIndex: number }>(value: T | undefined): T | undefined => {\n    const entryIndex = value != null ? remap(value.entryIndex) : undefined;\n    return value != null && entryIndex != null ? { ...value, entryIndex } : undefined;\n  };\n  const ui = progress.ui;\n  const currentEntryIndex = clamp(progress.currentEntryIndex);\n  const pickerState = ui?.exercisePicker?.state;\n  return {\n    ...progress,\n    entries: newEntries.map((e, i) => (e.index === i ? e : { ...e, index: i })),\n    currentEntryIndex,\n    timerEntryIndex: remap(progress.timerEntryIndex),\n    setTimer: keepAt(progress.setTimer),\n    setTimerGetReady: keepAt(progress.setTimerGetReady),\n    amrapModal: keepAt(progress.amrapModal),\n    ui:\n      ui == null\n        ? ui\n        : {\n            ...ui,\n            editModal: keepAt(ui.editModal),\n            editSetModal: keepAt(ui.editSetModal),\n            setTimerEditModal: keepAt(ui.setTimerEditModal),\n            roundingModal: keepAt(ui.roundingModal),\n            exerciseBottomSheet: keepAt(ui.exerciseBottomSheet),\n            entryIndexEditMode: remap(ui.entryIndexEditMode),\n            // The open swap picker writes straight into `entries[entryIndex]`, so a stale one retargets whoever\n            // moved into that slot. Nested a level deeper than the rest, hence not a `keepAt`.\n            exercisePicker:\n              pickerState?.entryIndex == null\n                ? ui.exercisePicker\n                : { ...ui.exercisePicker, state: { ...pickerState, entryIndex: remap(pickerState.entryIndex) } },\n            // The pager only scrolls when this flips — `currentEntryIndex` alone moves the highlight and leaves\n            // the shown exercise behind. Flipped only when the selected entry actually moved, so the user keeps\n            // looking at the exercise they were on.\n            forceUpdateEntryIndex:\n              currentEntryIndex !== progress.currentEntryIndex ? !ui.forceUpdateEntryIndex : ui.forceUpdateEntryIndex,\n          },\n  };\n}\n\n// Warmups count: they're work the user did and would have to redo. One definition, so the swap confirmation and\n// the reconciliation below can't disagree about whether an entry is worth protecting.\nexport function Progress_hasCompletedWork(entry: IHistoryEntry): boolean {\n  return entry.sets.some((set) => set.isCompleted) || entry.warmupSets.some((set) => set.isCompleted);\n}\n\nexport function Progress_hasCompletedSetsForProgramExerciseId(progress: IHistoryRecord, key: string): boolean {\n  return progress.entries.some(\n    (entry) => entry.programExerciseId === key && !entry.changed && Progress_hasCompletedWork(entry)\n  );\n}\n\nexport function Progress_changeEquipment(\n  dispatch: IDispatch,\n  progressId: number,\n  entryIndex: number,\n  equipment: IEquipment\n): void {\n  updateState(\n    dispatch,\n    [Progress_lbProgress(progressId).p(\"entries\").i(entryIndex).p(\"exercise\").p(\"equipment\").record(equipment)],\n    \"Change equipment\"\n  );\n}\n\nexport function Progress_editNotes(dispatch: IDispatch, progressId: number, notes: string): void {\n  updateState(dispatch, [Progress_lbProgress(progressId).p(\"notes\").record(notes)], \"Edit workout notes\");\n}\n\nexport function Progress_getDayData(progress: IHistoryRecord): IDayData {\n  return {\n    day: progress.day,\n    week: progress.week,\n    dayInWeek: progress.dayInWeek,\n  };\n}\n\nexport function Progress_applyProgramExercise(\n  progressEntry: IHistoryEntry | undefined,\n  index: number,\n  programExercise: IPlannerProgramExerciseWithType,\n  settings: ISettings,\n  forceWarmupSets?: boolean\n): IHistoryEntry {\n  const variationIndex = PlannerProgramExercise_currentSetVariationIndex(programExercise);\n  const sets = programExercise.evaluatedSetVariations[variationIndex].sets;\n  const programExerciseWarmupSets = PlannerProgramExercise_programWarmups(programExercise, settings);\n\n  if (progressEntry != null) {\n    const newSetsNum = Math.max(progressEntry.sets.length, sets.length);\n    const newSets: ISet[] = [];\n    for (let i = 0; i < newSetsNum; i++) {\n      const progressSet: ISet | undefined = progressEntry.sets[i] as ISet | undefined;\n      const programSet = sets[i];\n      if (!!progressSet?.isCompleted) {\n        newSets.push(progressSet);\n      } else if (programSet != null) {\n        const originalWeight = programSet.weight;\n        const weight = ProgramSet_getEvaluatedWeight(programSet, programExercise.exerciseType, settings);\n        newSets.push({\n          ...progressSet,\n          id: progressSet?.id ?? UidFactory_generateUid(6),\n          vtype: \"set\",\n          index: newSets.length,\n          reps: programSet.maxrep,\n          minReps: programSet.minrep,\n          rpe: programSet.rpe,\n          isUnilateral: Exercise_getIsUnilateral(programExercise.exerciseType, settings),\n          originalWeight,\n          weight,\n          isAmrap: programSet.isAmrap,\n          logRpe: programSet.logRpe,\n          label: programSet.label,\n          timer: programSet.timer,\n          setTimer: programSet.setTimer,\n          isOverflowSetTimer: programSet.isOverflowSetTimer,\n          auto: programSet.auto,\n          askWeight: programSet.askWeight,\n        });\n      }\n    }\n    let newWarmupSets = progressEntry.warmupSets;\n    if (progressEntry.warmupSets.every((w) => !w.isCompleted)) {\n      const firstWeight = newSets[0]?.weight;\n      forceWarmupSets = forceWarmupSets || Reps_isEmpty(newSets);\n      if (forceWarmupSets) {\n        const generated =\n          firstWeight != null\n            ? Exercise_getWarmupSets(programExercise.exerciseType, firstWeight, settings, programExerciseWarmupSets)\n            : [];\n        newWarmupSets = generated.map((ws, i) => ({\n          ...ws,\n          id: progressEntry.warmupSets[i]?.id ?? ws.id,\n        }));\n      } else {\n        newWarmupSets = progressEntry.warmupSets;\n      }\n    }\n\n    return {\n      ...progressEntry,\n      exercise: progressEntry.changed ? progressEntry.exercise : programExercise.exerciseType,\n      warmupSets: newWarmupSets,\n      sets: newSets,\n    };\n  } else {\n    const newSets = sets.map((set, i) => {\n      const weight = ProgramSet_getEvaluatedWeight(set, programExercise.exerciseType, settings);\n      return {\n        vtype: \"set\" as const,\n        id: UidFactory_generateUid(6),\n        index: i,\n        reps: set.maxrep,\n        minReps: set.minrep,\n        originalWeight: set.weight,\n        isUnilateral: Exercise_getIsUnilateral(programExercise.exerciseType, settings),\n        weight,\n        rpe: set.rpe,\n        logRpe: set.logRpe,\n        isAmrap: set.isAmrap,\n        label: set.label,\n        timer: set.timer,\n        setTimer: set.setTimer,\n        isOverflowSetTimer: set.isOverflowSetTimer,\n        auto: set.auto,\n        askWeight: set.askWeight,\n      };\n    });\n    const firstWeight = newSets[0]?.weight;\n\n    return {\n      vtype: \"history_entry\",\n      index,\n      id: Progress_getEntryId(programExercise.exerciseType, programExercise.label),\n      exercise: programExercise.exerciseType,\n      programExerciseId: programExercise.key,\n      sets: newSets,\n      warmupSets:\n        firstWeight != null\n          ? Exercise_getWarmupSets(programExercise.exerciseType, firstWeight, settings, programExerciseWarmupSets)\n          : [],\n    };\n  }\n}\n\nexport function Progress_getEntryId(exerciseType: IExerciseType, label?: string): string {\n  return CollectionUtils_compact([label, Exercise_toKey(exerciseType)]).join(\"_\");\n}\n\nexport interface IApplyProgramDayOptions {\n  // Restricts the pass to these exercises. Callers that pass it mean \"just re-apply these\" (equipment, exercise\n  // data), so they never get structural work.\n  programExerciseIds?: string[];\n  // The day's keys in canonical order *before* the program changed, from `Program_getDayExerciseKeys`. Structure\n  // is reconciled against this rather than against the entries alone: whether an exercise the day contains but\n  // the workout lacks was never added or was removed by the user is only answerable by diffing the two programs.\n  // Absent (fresh boot, restore, non-program change) means no structural work.\n  oldDayKeys?: string[];\n  // Only read when inserting — a newly added exercise runs its update script the same way a freshly started\n  // workout would, and that reads bodyweight.\n  stats?: IStats;\n}\n\n// The entry list is the program day minus the user's overrides, recomputed from scratch each time. Every step is\n// a function of (entries, oldDayKeys, newDayKeys), so applying the same program change twice is a no-op — the\n// listener can fire more than once for one logical edit, and a second pass must not insert a second copy.\nfunction reconcileStructure(\n  progress: IHistoryRecord,\n  program: IEvaluatedProgram,\n  day: number,\n  settings: ISettings,\n  oldDayKeys: string[],\n  stats: IStats\n): IHistoryEntry[] {\n  const dayExercises = Program_getDayExercisesInOrder(program, day);\n  const newDayKeys = dayExercises.map((e) => e.key);\n\n  // An exercise the day has but the workout doesn't is either one the user removed or one that was just added,\n  // and only the diff can tell them apart. Removals therefore need nothing recorded on the record.\n  const kept = progress.entries.filter(\n    (entry) =>\n      entry.programExerciseId == null ||\n      entry.changed ||\n      newDayKeys.indexOf(entry.programExerciseId) !== -1 ||\n      Progress_hasCompletedWork(entry)\n  );\n\n  const entries = [...kept];\n  const dayData = Program_getDayData(program, day);\n  for (const exercise of dayExercises) {\n    if (oldDayKeys.indexOf(exercise.key) !== -1) {\n      continue;\n    }\n    if (entries.some((e) => e.programExerciseId === exercise.key)) {\n      continue;\n    }\n    // Placed after whatever its program predecessor turned into, walking back past exercises the workout doesn't\n    // have: an added line asserts a position relative to its neighbors, not a re-sort of the whole day.\n    let at = 0;\n    for (let i = newDayKeys.indexOf(exercise.key) - 1; i >= 0; i -= 1) {\n      const predecessor = entries.findIndex((e) => e.programExerciseId === newDayKeys[i]);\n      if (predecessor !== -1) {\n        at = predecessor + 1;\n        break;\n      }\n    }\n    entries.splice(at, 0, Program_nextHistoryEntry(program, dayData, at, exercise, stats, settings));\n  }\n\n  const commonBefore = oldDayKeys.filter((key) => newDayKeys.indexOf(key) !== -1);\n  const commonAfter = newDayKeys.filter((key) => oldDayKeys.indexOf(key) !== -1);\n  const isReordered =\n    commonBefore.length !== commonAfter.length || commonBefore.some((key, i) => key !== commonAfter[i]);\n  if (!isReordered) {\n    return entries;\n  }\n  // Adhoc entries and orphans kept for their logged sets have no position of their own, so they take their\n  // predecessor's and ride along with it — someone who added an accessory right after Squat meant it to be there.\n  // Entries ahead of the first program exercise stay at the front.\n  let inherited = -1;\n  const sortKeys = entries.map((entry) => {\n    const own = entry.programExerciseId != null ? newDayKeys.indexOf(entry.programExerciseId) : -1;\n    if (own !== -1) {\n      inherited = own;\n    }\n    return own !== -1 ? own : inherited;\n  });\n  return entries\n    .map((entry, index) => ({ entry, index, sortKey: sortKeys[index] }))\n    .sort((a, b) => (a.sortKey !== b.sortKey ? a.sortKey - b.sortKey : a.index - b.index))\n    .map((e) => e.entry);\n}\n\nexport function Progress_applyProgramDay(\n  progress: IHistoryRecord,\n  program: IEvaluatedProgram,\n  day: number,\n  settings: ISettings,\n  options?: IApplyProgramDayOptions\n): IHistoryRecord {\n  const programExerciseIds = options?.programExerciseIds;\n  const programDay = Program_getProgramDay(program, day);\n  if (!programDay) {\n    return progress;\n  }\n  // A caller that named exercises means \"just re-apply these\" and never gets structural work.\n  const structural =\n    programExerciseIds == null && options?.oldDayKeys != null\n      ? reconcileStructure(progress, program, day, settings, options.oldDayKeys, options.stats ?? Stats_getEmpty())\n      : undefined;\n  const reindexed = structural != null ? Progress_reindexEntries(progress, structural) : progress;\n  const newEntries = reindexed.entries.map((entry, index) => {\n    if (entry.programExerciseId == null) {\n      return entry;\n    }\n    if (programExerciseIds != null && !programExerciseIds.includes(entry.programExerciseId)) {\n      return entry;\n    }\n    const programExercise = Program_getProgramExerciseForKeyAndDay(program, day, entry.programExerciseId);\n    if (!programExercise) {\n      return entry;\n    }\n    return Progress_applyProgramExercise(entry, index, programExercise, settings, false);\n  });\n\n  return { ...reindexed, entries: newEntries };\n}\n\nexport function Progress_changeAmrapAction(\n  effects: INativeEffect[],\n  settings: ISettings,\n  stats: IStats,\n  progress: IHistoryRecord,\n  action: IChangeAMRAPAction,\n  subscription: ISubscription | undefined,\n  onError?: IScriptErrorHandler\n): IHistoryRecord {\n  let newProgress = { ...progress };\n  if (\n    action.amrapValue == null &&\n    action.amrapLeftValue == null &&\n    action.rpeValue == null &&\n    action.weightValue == null &&\n    ObjectUtils_keys(action.userVars || {}).length === 0\n  ) {\n    return { ...newProgress, amrapModal: undefined };\n  }\n  if (action.amrapValue != null) {\n    newProgress = Progress_updateAmrapRepsInExercise(newProgress, action.amrapValue);\n  }\n  if (action.amrapLeftValue != null) {\n    newProgress = Progress_updateAmrapRepsLeftInExercise(newProgress, action.amrapLeftValue);\n  }\n  if (action.logRpe) {\n    newProgress = Progress_updateRpeInExercise(newProgress, action.rpeValue);\n  }\n  if (action.weightValue != null) {\n    newProgress = Progress_updateWeightInExercise(newProgress, action.weightValue);\n  }\n  const programExerciseId = action.programExercise?.key;\n  if (ObjectUtils_keys(action.userVars || {}).length > 0 && programExerciseId != null) {\n    newProgress = Progress_updateUserPromptedStateVars(newProgress, programExerciseId, action.userVars || {});\n  }\n  newProgress = Progress_completeAmrapSet(newProgress, action.entryIndex, action.setIndex, settings);\n  if (action.programExercise) {\n    newProgress = Progress_runUpdateScript(\n      newProgress,\n      action.programExercise,\n      action.otherStates || {},\n      action.entryIndex,\n      action.setIndex,\n      \"workout\",\n      settings,\n      stats,\n      onError\n    );\n  }\n  if (Progress_isFullyEmptyOrFinishedSet(newProgress)) {\n    newProgress = Progress_stopTimer(effects, newProgress);\n  }\n  newProgress = Progress_maybeApplySuperset(newProgress, action.entryIndex, \"workout\");\n  // A timed set keeps its set-timer modal open behind the amrap modal (see Progress_proceedAfterTimedSet).\n  // If it was recorded via \"Log & keep timing\" (keepTiming), leave the clock running and don't start rest;\n  // otherwise close the banner and start the deferred rest. For non-timed sets setTimerModal is already\n  // undefined, so this is just the normal rest start.\n  const amrapSetTimerModal = newProgress.setTimer;\n  // Clearing the countdown too is not redundant. A field-by-field merge can legally leave both phase fields\n  // set, and Progress_getActiveSetTimer only *prefers* the work clock — it never repairs the record. Drop\n  // the work clock alone and the stale countdown becomes active again, reopening for a set just resolved.\n  if (amrapSetTimerModal?.keepTiming) {\n    newProgress = {\n      ...newProgress,\n      setTimer: { ...amrapSetTimerModal, keepTiming: undefined },\n      setTimerGetReady: undefined,\n    };\n  } else {\n    newProgress = { ...newProgress, setTimer: undefined, setTimerGetReady: undefined };\n    // Intentionally \"now\", NOT backdated to the clock end like Progress_proceedAfterTimedSet does (see\n    // time-based-exercises.md §5.2). The time spent in the AMRAP modal is data entry, not rest — backdating\n    // would count it as elapsed rest and a short rest could be over the instant the user submits.\n    // The playground has no rest timers (matches Progress_proceedAfterTimedSet + normal-set completion).\n    if (!action.isPlayground) {\n      newProgress = Progress_startTimer(\n        effects,\n        newProgress,\n        new Date().getTime(),\n        \"workout\",\n        action.entryIndex,\n        action.setIndex,\n        settings,\n        subscription\n      );\n    }\n  }\n  newProgress.intervals = History_resumeWorkout(\n    effects,\n    newProgress,\n    action.isPlayground,\n    settings.timers.reminder,\n    subscription != null && Subscriptions_hasSubscription(subscription)\n  );\n  LiveActivityManager_updateLiveActivityForNextEntry(\n    effects,\n    newProgress,\n    action.entryIndex,\n    \"workout\",\n    action.programExercise,\n    settings,\n    subscription\n  );\n  return { ...newProgress, amrapModal: undefined };\n}\n\nexport interface ITimedSetDurations {\n  left?: number;\n  right?: number;\n}\n\n// Takes explicit durations rather than deriving them from the clock: a completed `auto` set backdates the\n// next set's clock into the future, so Date.now() against it went negative and recorded [25, -25, 0].\nexport function Progress_settleTimedSet(\n  effects: INativeEffect[],\n  settings: ISettings,\n  stats: IStats,\n  progress: IHistoryRecord,\n  entryIndex: number,\n  setIndex: number,\n  mode: IProgressMode,\n  durations: ITimedSetDurations,\n  ctx: {\n    programExercise?: IPlannerProgramExercise;\n    otherStates?: IByExercise<IProgramState>;\n    subscription?: ISubscription;\n    isPlayground?: boolean;\n  },\n  onError?: IScriptErrorHandler\n): IHistoryRecord {\n  let current = progress;\n  for (let pass = 0; pass < 4; pass += 1) {\n    const phase = Progress_getActiveSetTimer(current);\n    if (phase == null || phase.entryIndex !== entryIndex || phase.setIndex !== setIndex) {\n      return current;\n    }\n    if (phase.phase === \"getReady\") {\n      current = Progress_startSetTimerWork(current, phase.startedAt);\n      continue;\n    }\n    const setsKey = mode === \"warmup\" ? \"warmupSets\" : \"sets\";\n    const set = current.entries[entryIndex]?.[setsKey][setIndex];\n    if (set == null) {\n      return current;\n    }\n    const reported = phase.side === \"left\" ? durations.left : durations.right;\n    current = Progress_completeSetAction(\n      effects,\n      settings,\n      stats,\n      current,\n      {\n        type: \"CompleteSetAction\",\n        entryIndex,\n        setIndex,\n        mode,\n        programExercise: ctx.programExercise,\n        otherStates: ctx.otherStates,\n        forceUpdateEntryIndex: false,\n        isExternal: true,\n        isPlayground: ctx.isPlayground ?? false,\n        recordedSeconds: reported ?? TimedSet_recordedFor(set, phase.side) ?? set.setTimer,\n      },\n      ctx.subscription,\n      onError\n    );\n    const after = current.entries[entryIndex]?.[setsKey][setIndex];\n    if (after == null || TimedSet_recordedFor(after, phase.side) == null) {\n      return current;\n    }\n  }\n  return current;\n}\n\nexport function Progress_completeSetAction(\n  effects: INativeEffect[],\n  settings: ISettings,\n  stats: IStats,\n  progress: IHistoryRecord,\n  action: ICompleteSetAction,\n  subscription: ISubscription | undefined,\n  onError?: IScriptErrorHandler\n): IHistoryRecord {\n  const setTimerModal = progress.setTimer;\n  const wasSetTimerOpen =\n    action.mode === \"workout\" &&\n    setTimerModal != null &&\n    setTimerModal.entryIndex === action.entryIndex &&\n    setTimerModal.setIndex === action.setIndex;\n  const countdown = progress.setTimerGetReady;\n  if (\n    action.mode === \"workout\" &&\n    !wasSetTimerOpen &&\n    countdown != null &&\n    countdown.entryIndex === action.entryIndex &&\n    countdown.setIndex === action.setIndex\n  ) {\n    return progress;\n  }\n  // A Stop/Log tap from the set-timer banner (keepSetTimerRunning is set only by those) is a deferred user\n  // action — if the clock already auto-completed, advanced, or closed just before the event landed, the banner\n  // is stale and completing here would fall through to normal toggling and flip an already-completed set back\n  // off. Thunk_recordSetTimer guards this before dispatching; the playground dispatches directly, so guard here\n  // too (safe for every path: the thunk/watch already pre-check, and auto-fires don't set keepSetTimerRunning).\n  if (action.keepSetTimerRunning != null && !wasSetTimerOpen) {\n    return progress;\n  }\n  const oldSet = progress.entries[action.entryIndex][action.mode === \"warmup\" ? \"warmupSets\" : \"sets\"][action.setIndex];\n  const timedSide = setTimerModal?.side ?? \"bilateral\";\n  const recordedThisSide = TimedSet_recordedFor(oldSet, timedSide);\n\n  if (wasSetTimerOpen && setTimerModal != null && timedSide === \"left\") {\n    const recorded =\n      recordedThisSide ?? action.recordedSeconds ?? Math.round((Date.now() - setTimerModal.startedAt) / 1000);\n    let banked = lf(progress)\n      .p(\"entries\")\n      .i(action.entryIndex)\n      .p(\"sets\")\n      .i(action.setIndex)\n      .p(\"completedSetTimerLeft\")\n      .set(recorded);\n    if (!action.keepSetTimerRunning) {\n      const target = oldSet.setTimer;\n      const reachedTarget =\n        target != null && !oldSet.isOverflowSetTimer && Date.now() - setTimerModal.startedAt >= target * 1000;\n      const endedAt = reachedTarget ? setTimerModal.startedAt + target * 1000 : Date.now();\n      const handedOff = Progress_handOffToOtherSide(\n        banked,\n        action.entryIndex,\n        action.setIndex,\n        settings,\n        endedAt,\n        setTimerModal.nonce,\n        action.isPlayground\n      );\n      if (handedOff === banked) {\n        return Progress_completeSetAction(\n          effects,\n          settings,\n          stats,\n          { ...banked, setTimer: undefined, setTimerGetReady: undefined },\n          { ...action, keepSetTimerRunning: undefined, recordedSeconds: undefined },\n          subscription,\n          onError\n        );\n      }\n      banked = handedOff;\n    }\n    LiveActivityManager_updateLiveActivityForNextEntry(\n      effects,\n      banked,\n      action.entryIndex,\n      action.mode,\n      action.programExercise,\n      settings,\n      subscription\n    );\n    return banked;\n  }\n\n  // Stopping the clock on a set that's already logged (e.g. after \"Log & keep timing\"): just update the\n  // recorded time and close/keep the banner — don't run completion, which would toggle the set off.\n  if (wasSetTimerOpen && setTimerModal != null && oldSet.isCompleted) {\n    const recorded =\n      recordedThisSide ?? action.recordedSeconds ?? Math.round((Date.now() - setTimerModal.startedAt) / 1000);\n    let stopped = lf(progress)\n      .p(\"entries\")\n      .i(action.entryIndex)\n      .p(\"sets\")\n      .i(action.setIndex)\n      .p(\"completedSetTimer\")\n      .set(recorded);\n    if (!action.keepSetTimerRunning) {\n      stopped = Progress_proceedAfterTimedSet(\n        effects,\n        stopped,\n        action.entryIndex,\n        action.setIndex,\n        settings,\n        subscription,\n        action.isPlayground\n      );\n    }\n    stopped.intervals = History_resumeWorkout(\n      effects,\n      stopped,\n      action.isPlayground,\n      settings.timers.reminder,\n      subscription != null && Subscriptions_hasSubscription(subscription)\n    );\n    LiveActivityManager_updateLiveActivityForNextEntry(\n      effects,\n      stopped,\n      action.entryIndex,\n      action.mode,\n      action.programExercise,\n      settings,\n      subscription\n    );\n    return stopped;\n  }\n\n  // Completing a timed set from its running clock: record the elapsed time first (derived from when the\n  // clock started, unless the surface passed an explicit recordedSeconds).\n  if (wasSetTimerOpen && setTimerModal != null && !oldSet.isCompleted && recordedThisSide == null) {\n    const recorded = action.recordedSeconds ?? Math.round((Date.now() - setTimerModal.startedAt) / 1000);\n    progress = lf(progress)\n      .p(\"entries\")\n      .i(action.entryIndex)\n      .p(\"sets\")\n      .i(action.setIndex)\n      .p(\"completedSetTimer\")\n      .set(recorded);\n  }\n\n  const hasUserPromptedVars = action.programExercise && ProgramExercise_hasUserPromptedVars(action.programExercise);\n  let newProgress = Progress_completeSet(\n    progress,\n    action.entryIndex,\n    action.setIndex,\n    action.mode,\n    !!hasUserPromptedVars,\n    settings,\n    action.isPlayground\n  );\n  const newSet =\n    newProgress.entries[action.entryIndex][action.mode === \"warmup\" ? \"warmupSets\" : \"sets\"][action.setIndex];\n  const didFinish = !oldSet.isCompleted && newSet.isCompleted;\n  // First tap on a timed set just opened its clock (see Progress_completeSet) — nothing is completed\n  // yet, so skip the completion side-effects and only refresh the live activity to show the timer.\n  const startedTimer = Progress_getActiveSetTimer(newProgress);\n  const justStartedSetTimer =\n    !wasSetTimerOpen &&\n    !newSet.isCompleted &&\n    startedTimer?.entryIndex === action.entryIndex &&\n    startedTimer?.setIndex === action.setIndex;\n  if (justStartedSetTimer) {\n    // Starting this set's clock means the previous set's rest is over — stop it (and cancel its pending\n    // \"rest is over\" notification) so it doesn't fire in the middle of this set's clock.\n    if (newProgress.timerSince != null) {\n      newProgress = Progress_stopTimer(effects, newProgress);\n    }\n    LiveActivityManager_updateLiveActivityForNextEntry(\n      effects,\n      newProgress,\n      action.entryIndex,\n      action.mode,\n      action.programExercise,\n      settings,\n      subscription\n    );\n    return newProgress;\n  }\n  if (action.programExercise && !newProgress.amrapModal) {\n    newProgress = Progress_runUpdateScript(\n      newProgress,\n      action.programExercise,\n      action.otherStates || {},\n      action.entryIndex,\n      action.setIndex,\n      action.mode,\n      settings,\n      stats,\n      onError\n    );\n  }\n\n  if (Progress_isFullyEmptyOrFinishedSet(newProgress)) {\n    newProgress = Progress_stopTimer(effects, newProgress);\n  }\n  if (didFinish) {\n    newProgress = Progress_maybeApplySuperset(newProgress, action.entryIndex, action.mode);\n  }\n  // Non-timed sets start their rest timer here. Timed sets defer it to Progress_proceedAfterTimedSet\n  // (below) so a set logged via \"Log & keep timing\" doesn't start resting while its clock still runs.\n  if (!action.isPlayground && newSet.setTimer == null) {\n    newProgress = Progress_startTimer(\n      effects,\n      newProgress,\n      new Date().getTime(),\n      action.mode,\n      action.entryIndex,\n      action.setIndex,\n      settings,\n      subscription\n    );\n  }\n  // After a timed set is recorded+completed from its clock, advance to the next timed set or close the\n  // banner and start rest — the one place that decision lives. \"Log & keep timing\" skips it.\n  if (wasSetTimerOpen && !action.keepSetTimerRunning) {\n    newProgress = Progress_proceedAfterTimedSet(\n      effects,\n      newProgress,\n      action.entryIndex,\n      action.setIndex,\n      settings,\n      subscription,\n      action.isPlayground\n    );\n  } else if (\n    wasSetTimerOpen &&\n    action.keepSetTimerRunning &&\n    newProgress.amrapModal != null &&\n    newProgress.setTimer != null\n  ) {\n    // Recorded via \"Log & keep timing\" and the AMRAP modal opened on top: mark the clock so it survives\n    // the AMRAP resolution (Progress_changeAmrapAction would otherwise close it).\n    newProgress = {\n      ...newProgress,\n      setTimer: { ...newProgress.setTimer, keepTiming: true },\n    };\n  }\n  newProgress.intervals = History_resumeWorkout(\n    effects,\n    newProgress,\n    action.isPlayground,\n    settings.timers.reminder,\n    subscription != null && Subscriptions_hasSubscription(subscription)\n  );\n  LiveActivityManager_updateLiveActivityForNextEntry(\n    effects,\n    newProgress,\n    action.entryIndex,\n    action.mode,\n    action.programExercise,\n    settings,\n    subscription\n  );\n  // The pager scrolls only on a flip of this flag; the superset advance above moves currentEntryIndex\n  // without one, and timed-set completions dispatch with the flag off, so the thumbnail moved while the\n  // card stayed. An EMOM advance already flipped it — flip exactly once.\n  const entryChanged = (newProgress.currentEntryIndex ?? 0) !== (progress.currentEntryIndex ?? 0);\n  const alreadyFlipped = !!newProgress.ui?.forceUpdateEntryIndex !== !!progress.ui?.forceUpdateEntryIndex;\n  if ((action.forceUpdateEntryIndex || entryChanged) && !alreadyFlipped) {\n    newProgress = {\n      ...newProgress,\n      ui: { ...newProgress.ui, forceUpdateEntryIndex: !newProgress.ui?.forceUpdateEntryIndex },\n    };\n  }\n  if (action.isExternal) {\n    newProgress = {\n      ...newProgress,\n      ui: { ...newProgress.ui, isExternal: true },\n    };\n  }\n  return newProgress;\n}\n\nexport function Progress_forceUpdateEntryIndex(dispatch: IDispatch): void {\n  updateProgress(\n    dispatch,\n    [\n      lb<IHistoryRecord>()\n        .pi(\"ui\", {})\n        .p(\"forceUpdateEntryIndex\")\n        .recordModify((v) => !v),\n    ],\n    \"Force update entry index\"\n  );\n}\n\nexport function Progress_finishWorkout(\n  effects: INativeEffect[],\n  storage: IStorage,\n  progress: IHistoryRecord,\n  healthSync: boolean\n): IStorage {\n  const settings = storage.settings;\n  const programIndex = storage.programs.findIndex((p) => p.id === progress.programId)!;\n  const program = progress.programId === emptyProgramId ? Program_createEmptyProgram() : storage.programs[programIndex];\n  const evaluatedProgram = program ? Program_evaluate(program, settings) : undefined;\n  Progress_stopTimer(effects, progress);\n  const historyRecord = History_finishProgramDay(\n    progress,\n    storage.settings,\n    progress.day,\n    evaluatedProgram,\n    storage.stats\n  );\n  let newHistory;\n  if (!Progress_isCurrent(progress)) {\n    newHistory = storage.history.map((h) => (h.id === progress.id ? historyRecord : h));\n  } else {\n    newHistory = [historyRecord, ...storage.history];\n  }\n  const exerciseData = storage.settings.exerciseData;\n  const { program: newProgram, exerciseData: newExerciseData } =\n    Progress_isCurrent(progress) && program != null\n      ? Program_runAllFinishDayScripts(program, progress, storage.stats, settings)\n      : { program, exerciseData };\n  const newPrograms = newProgram != null ? lf(storage.programs).i(programIndex).set(newProgram) : storage.programs;\n  const newSettingsExerciseData = deepmerge(storage.settings.exerciseData, newExerciseData);\n  return {\n    ...storage,\n    progress: Progress_isCurrent(progress) ? [] : storage.progress,\n    history: newHistory,\n    workoutOutcomes: Progress_isCurrent(progress)\n      ? WorkoutOutcome_add(storage.workoutOutcomes, {\n          id: historyRecord.id,\n          outcome: \"finish\",\n          healthSync,\n          endTime: historyRecord.endTime ?? Date.now(),\n        })\n      : storage.workoutOutcomes,\n    programs: newPrograms,\n    settings: {\n      ...storage.settings,\n      exerciseData: newSettingsExerciseData,\n    },\n  };\n}\n","import { IState } from \"./state\";\nimport { dequal } from \"dequal\";\nimport { Progress_isCurrent } from \"./progress\";\nimport { IStatsKey } from \"../types\";\nimport { Program_getProgram, Program_cleanPlannerProgram } from \"./program\";\nimport { ObjectUtils_isEqual } from \"../utils/object\";\n\nexport type ITab = \"home\" | \"program\" | \"workout\" | \"graphs\" | \"me\";\n\nexport type IScreenData =\n  | { name: \"first\"; params?: Record<string, never> }\n  | { name: \"main\"; params?: { historyRecordId?: number } }\n  | { name: \"settings\"; params?: Record<string, never> }\n  | { name: \"account\"; params?: Record<string, never> }\n  | { name: \"timers\"; params?: Record<string, never> }\n  | { name: \"plates\"; params?: Record<string, never> }\n  | { name: \"equipmentDetail\"; params: { gymId: string; equipmentId: string } }\n  | { name: \"gyms\"; params?: Record<string, never> }\n  | { name: \"programs\"; params?: Record<string, never> }\n  | { name: \"progress\"; params?: { id?: number } }\n  | { name: \"graphsList\"; params?: Record<string, never> }\n  | { name: \"finishDay\"; params?: { id?: number } }\n  | { name: \"muscles\"; params?: Record<string, never> }\n  | { name: \"muscleGroups\"; params?: Record<string, never> }\n  | { name: \"stats\"; params?: Record<string, never> }\n  | { name: \"units\"; params?: Record<string, never> }\n  | { name: \"appleHealth\"; params?: Record<string, never> }\n  | { name: \"googleHealth\"; params?: Record<string, never> }\n  | { name: \"editProgram\"; params: { programId: string } }\n  | { name: \"measurements\"; params?: { key: IStatsKey } }\n  | { name: \"sleepNutrition\"; params?: Record<string, never> }\n  | { name: \"subscription\"; params?: Record<string, never> }\n  | { name: \"exerciseStats\"; params?: Record<string, never> }\n  | { name: \"exercises\"; params?: Record<string, never> }\n  | { name: \"onerms\"; params?: Record<string, never> }\n  | { name: \"setupequipment\"; params?: Record<string, never> }\n  | { name: \"setupplates\"; params?: Record<string, never> }\n  | { name: \"hearaboutus\"; params?: Record<string, never> }\n  | { name: \"programselect\"; params?: Record<string, never> }\n  | { name: \"programPreview\"; params?: Record<string, never> }\n  | { name: \"apiKeys\"; params?: Record<string, never> }\n  | { name: \"recentImports\"; params?: Record<string, never> }\n  | { name: \"importPreview\"; params?: Record<string, never> };\n\nexport type IScreen = IScreenData[\"name\"];\nexport type IScreenParams<T extends IScreen> = Extract<IScreenData, { name: T }>[\"params\"];\n\nexport function Screen_shouldConfirmNavigation(state: IState, currentScreen: IScreenData): string | undefined {\n  const progressId = currentScreen.name === \"progress\" ? (currentScreen.params?.id ?? 0) : 0;\n  const progress = progressId === 0 ? state.storage.progress?.[0] : state.progress[progressId];\n  if (progress && !Progress_isCurrent(progress)) {\n    const oldHistoryRecord = state.storage.history.find((hr) => hr.id === progress.id);\n    const { ui: _ui, ...progressWithoutUi } = progress;\n    if (oldHistoryRecord != null && !dequal(oldHistoryRecord, progressWithoutUi)) {\n      return \"Are you sure? Changes won't be saved.\";\n    }\n  }\n\n  if (currentScreen.name === \"editProgram\") {\n    const programId = currentScreen.params?.programId;\n    const editProgramState = programId ? state.editProgramStates[programId] : undefined;\n    if (editProgramState) {\n      const currentProgram = Program_getProgram(state, editProgramState.current.program.id);\n      if (currentProgram != null && currentProgram.planner && editProgramState.current.program.planner) {\n        const oldCleanedProgram = Program_cleanPlannerProgram(currentProgram);\n        const newCleanedProgram = Program_cleanPlannerProgram(editProgramState.current.program);\n        if (!ObjectUtils_isEqual(oldCleanedProgram.planner!, newCleanedProgram.planner!)) {\n          return \"Are you sure? Your program changes won't be saved.\";\n        }\n      }\n    }\n  }\n\n  return undefined;\n}\n\nexport function Screen_isSameTab(prev: IScreen, next: IScreen): boolean {\n  return Screen_tab(prev) === Screen_tab(next);\n}\n\nexport function Screen_tab(screen: IScreen): ITab {\n  switch (screen) {\n    case \"main\": {\n      return \"home\";\n    }\n    case \"settings\": {\n      return \"me\";\n    }\n    case \"account\": {\n      return \"me\";\n    }\n    case \"timers\": {\n      return \"me\";\n    }\n    case \"plates\": {\n      return \"me\";\n    }\n    case \"equipmentDetail\": {\n      return \"me\";\n    }\n    case \"appleHealth\": {\n      return \"me\";\n    }\n    case \"googleHealth\": {\n      return \"me\";\n    }\n    case \"gyms\": {\n      return \"me\";\n    }\n    case \"exercises\": {\n      return \"me\";\n    }\n    case \"programs\": {\n      return \"program\";\n    }\n    case \"progress\": {\n      return \"workout\";\n    }\n    case \"graphsList\": {\n      return \"graphs\";\n    }\n    case \"finishDay\": {\n      return \"workout\";\n    }\n    case \"muscles\": {\n      return \"workout\";\n    }\n    case \"muscleGroups\": {\n      return \"me\";\n    }\n    case \"stats\": {\n      return \"me\";\n    }\n    case \"editProgram\": {\n      return \"program\";\n    }\n    case \"measurements\": {\n      return \"me\";\n    }\n    case \"sleepNutrition\": {\n      return \"me\";\n    }\n    case \"subscription\": {\n      return \"workout\";\n    }\n    case \"exerciseStats\": {\n      return \"me\";\n    }\n    case \"programPreview\": {\n      return \"program\";\n    }\n    case \"first\": {\n      return \"program\";\n    }\n    case \"onerms\": {\n      return \"program\";\n    }\n    case \"setupequipment\": {\n      return \"program\";\n    }\n    case \"setupplates\": {\n      return \"program\";\n    }\n    case \"hearaboutus\": {\n      return \"program\";\n    }\n    case \"programselect\": {\n      return \"program\";\n    }\n    case \"units\": {\n      return \"program\";\n    }\n    case \"apiKeys\": {\n      return \"me\";\n    }\n    case \"recentImports\": {\n      return \"me\";\n    }\n    case \"importPreview\": {\n      return \"me\";\n    }\n  }\n}\n","import { CollectionUtils_groupBy, CollectionUtils_inGroupsOf } from \"../utils/collection\";\nimport {\n  Weight_display,\n  Weight_eqNull,\n  Weight_gte,\n  Weight_print,\n  Weight_printNull,\n  Weight_multiply,\n  Weight_build,\n  Weight_convertTo,\n  Weight_add,\n  Weight_is,\n} from \"./weight\";\nimport { ISet, IHistoryRecord, IHistoryEntry, IWeight, IUnit } from \"../types\";\nimport { ObjectUtils_clone } from \"../utils/object\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { Progress_getNextEntry } from \"./progress\";\n\nexport type IProgramReps = number;\n\nexport type ISetsStatus = \"success\" | \"in-range\" | \"failed\" | \"not-finished\";\n\nexport interface IDisplaySet {\n  dimReps?: boolean;\n  dimRpe?: boolean;\n  dimWeight?: boolean;\n  dimTimer?: boolean;\n  reps: string;\n  weight?: string;\n  rpe?: string;\n  askWeight?: boolean;\n  unit?: string;\n  isCompleted?: boolean;\n  isRpeFailed?: boolean;\n  isInRange?: boolean;\n  timer?: number;\n  setTimer?: number;\n  setTimerLeft?: number;\n  isOverflowSetTimer?: boolean;\n  auto?: boolean;\n}\n\nexport function Reps_display(sets: ISet[], isNext: boolean = false): string {\n  if (Reps_areSameReps(sets, isNext)) {\n    return `${sets.length}x${sets[0].completedReps || sets[0].reps}`;\n  } else {\n    const arr = sets.map((s) => (isNext ? Reps_displayReps(s) : Reps_displayCompletedReps(s)));\n    const groups = CollectionUtils_inGroupsOf(5, arr);\n    return groups.map((g) => g.join(\"/\")).join(\"/ \");\n  }\n}\n\nfunction isSameDisplaySet(a: IDisplaySet, b: IDisplaySet): boolean {\n  return (\n    a.reps === b.reps &&\n    a.weight === b.weight &&\n    a.rpe === b.rpe &&\n    a.askWeight === b.askWeight &&\n    a.timer === b.timer &&\n    a.setTimer === b.setTimer &&\n    a.setTimerLeft === b.setTimerLeft &&\n    a.isOverflowSetTimer === b.isOverflowSetTimer &&\n    a.auto === b.auto\n  );\n}\n\nexport function Reps_groupDisplaySets(displaySets: IDisplaySet[]): IDisplaySet[][] {\n  return CollectionUtils_groupBy(displaySets, (last, set) => {\n    return !isSameDisplaySet(last, set);\n  });\n}\n\nexport function Reps_setToDisplaySet(set: ISet, isNext: boolean, units: IUnit): IDisplaySet {\n  const completedOrRequiredWeight = set.completedWeight ?? set.weight;\n  return {\n    reps: isNext ? Reps_displayReps(set) : Reps_displayCompletedReps(set),\n    rpe: set.completedRpe?.toString() ?? set.rpe?.toString(),\n    weight: isNext\n      ? set.weight && set.originalWeight\n        ? Weight_display(set.weight, false)\n        : undefined\n      : completedOrRequiredWeight\n        ? Weight_display(completedOrRequiredWeight, false)\n        : undefined,\n    unit: completedOrRequiredWeight?.unit ?? units,\n    askWeight: set.askWeight,\n    isCompleted: Reps_isCompletedSet(set),\n    isRpeFailed: set.completedRpe != null && set.completedRpe > (set.rpe ?? 0),\n    isInRange: set.minReps != null ? set.completedReps != null && set.completedReps >= set.minReps : undefined,\n    setTimer: isNext ? set.setTimer : set.completedSetTimer,\n    setTimerLeft: isNext ? undefined : set.completedSetTimerLeft,\n    isOverflowSetTimer: isNext ? set.isOverflowSetTimer : undefined,\n    timer: isNext ? set.timer : undefined,\n    auto: set.auto,\n  };\n}\n\nfunction convertSetWeightsTo(set: ISet, unit: IUnit): ISet {\n  return {\n    ...set,\n    weight: set.weight ? Weight_convertTo(set.weight, unit) : undefined,\n    originalWeight: Weight_is(set.originalWeight) ? Weight_convertTo(set.originalWeight, unit) : set.originalWeight,\n    completedWeight: set.completedWeight ? Weight_convertTo(set.completedWeight, unit) : undefined,\n  };\n}\n\nexport function Reps_addSet(\n  sets: ISet[],\n  isUnilateral: boolean,\n  previousWorkoutSet?: ISet,\n  isWarmup?: boolean,\n  unit?: IUnit\n): ISet[] {\n  let lastSet =\n    sets[sets.length - 1] ??\n    (previousWorkoutSet && unit ? convertSetWeightsTo(previousWorkoutSet, unit) : previousWorkoutSet);\n  if (lastSet == null) {\n    lastSet = Reps_newSet(isUnilateral, 0);\n  } else {\n    if (isWarmup) {\n      lastSet = {\n        ...ObjectUtils_clone(lastSet),\n        reps: lastSet.completedReps ?? lastSet.reps,\n        weight: lastSet.completedWeight ?? lastSet.weight,\n      };\n    } else {\n      lastSet = {\n        ...ObjectUtils_clone(lastSet),\n        reps: lastSet.reps ?? lastSet.completedReps,\n        weight: lastSet.weight ?? lastSet.completedWeight,\n        originalWeight: lastSet.originalWeight ?? lastSet.weight ?? lastSet.completedWeight,\n        completedReps: undefined,\n        completedRepsLeft: undefined,\n        completedWeight: undefined,\n        completedRpe: undefined,\n        completedSetTimer: undefined,\n        completedSetTimerLeft: undefined,\n      };\n    }\n  }\n  const maxIndex = Math.max(-1, ...sets.map((s) => s.index || 0));\n\n  return [\n    ...sets,\n    { ...ObjectUtils_clone(lastSet), id: UidFactory_generateUid(6), isCompleted: false, index: maxIndex + 1 },\n  ];\n}\n\nexport function Reps_isSameSet(set1: ISet, set2: ISet): boolean {\n  return Weight_eqNull(set1.weight, set2.weight) && set1.completedReps === set2.completedReps && set1.rpe === set2.rpe;\n}\n\nexport function Reps_displayReps(set: ISet): string {\n  const reps = set.minReps != null ? `${set.minReps}-${set.reps ?? 0}` : `${set.reps ?? 0}`;\n  return set.isAmrap ? `${reps}+` : `${reps}`;\n}\n\nexport function Reps_displayCompletedReps(set: ISet): string {\n  return set.completedReps != null\n    ? `${set.completedRepsLeft != null ? `${set.completedRepsLeft}/` : \"\"}${set.completedReps}`\n    : \"-\";\n}\n\nexport function Reps_areSameReps(sets: ISet[], isNext: boolean): boolean {\n  const firstRep = sets[0]?.reps;\n  if (sets.length > 0) {\n    return sets.every(\n      (s) => (isNext ? s.reps : s.completedReps) != null && (isNext ? s.reps : s.completedReps) === firstRep\n    );\n  } else {\n    return false;\n  }\n}\n\nexport function Reps_isEmpty(sets: ISet[]): boolean {\n  return sets.every((s) => !s.isCompleted);\n}\n\nexport function Reps_newSet(isUnilateral: boolean, index: number): ISet {\n  return {\n    vtype: \"set\",\n    index,\n    id: UidFactory_generateUid(6),\n    originalWeight: undefined,\n    weight: undefined,\n    isUnilateral,\n    reps: undefined,\n    isAmrap: false,\n    askWeight: false,\n    isCompleted: false,\n  };\n}\n\nexport function Reps_isCompleted(sets: ISet[]): boolean {\n  return sets.length > 0 && sets.every((set) => Reps_isCompletedSet(set));\n}\n\nexport function Reps_setWarmupStatus(sets: ISet[]): ISetsStatus {\n  if (sets.length === 0) {\n    return \"not-finished\";\n  }\n  if (Reps_isFinished(sets)) {\n    return \"success\";\n  } else {\n    return \"not-finished\";\n  }\n}\n\nexport function Reps_setsStatus(sets: ISet[]): ISetsStatus {\n  if (Reps_isCompleted(sets)) {\n    return \"success\";\n  } else if (Reps_isInRangeCompleted(sets)) {\n    return \"in-range\";\n  } else if (!Reps_isFinished(sets)) {\n    return \"not-finished\";\n  } else {\n    return \"failed\";\n  }\n}\n\nexport function Reps_isCompletedSet(set: ISet): boolean {\n  if (set.completedReps != null && set.completedWeight != null) {\n    return (\n      !!set.isCompleted &&\n      (set.reps == null || set.completedReps >= set.reps) &&\n      (set.weight == null || Weight_gte(set.completedWeight, set.weight))\n    );\n  } else {\n    return false;\n  }\n}\n\nexport function Reps_isInRangeCompletedSet(set: ISet): boolean {\n  if (set.completedReps != null && set.completedWeight != null) {\n    return (\n      (set.weight == null || Weight_gte(set.completedWeight, set.weight)) &&\n      (set.minReps != null ? set.completedReps >= set.minReps : set.reps == null || set.completedReps >= set.reps)\n    );\n  } else {\n    return false;\n  }\n}\n\nexport function Reps_isStarted(sets: ISet[]): boolean {\n  return sets.length > 0 && sets.some((s) => Reps_isFinishedSet(s));\n}\n\nexport function Reps_isFinished(sets: ISet[]): boolean {\n  return sets.length > 0 && sets.every((s) => Reps_isFinishedSet(s));\n}\n\nexport function Reps_isEmptyOrFinished(sets: ISet[]): boolean {\n  return sets.length === 0 || Reps_isFinished(sets);\n}\n\nexport function Reps_isFinishedSet(s: ISet): boolean {\n  return !!s.isCompleted;\n}\n\nexport function Reps_toKey(set: ISet): string {\n  return `${Weight_printNull(set.weight)}-${Weight_printNull(set.completedWeight)}-${set.reps}-${set.minReps}-${set.isAmrap}-${set.rpe}-${set.askWeight}-${set.completedReps}-${set.completedRepsLeft}-${set.completedRpe}-${set.isCompleted}-${set.completedSetTimer}-${set.completedSetTimerLeft}`;\n}\n\nexport function Reps_isInRangeCompleted(sets: ISet[]): boolean {\n  return sets.some((s) => s.minReps != null) && sets.every((s) => Reps_isInRangeCompletedSet(s));\n}\n\nexport function Reps_enforceCompletedSet(set: ISet): ISet {\n  return {\n    ...set,\n    isCompleted: set.completedReps == null || set.completedWeight == null ? false : !!set.isCompleted,\n  };\n}\n\nexport function Reps_maxUnilateralCompletedReps(set: ISet): number | undefined {\n  if (set.isUnilateral) {\n    return Math.max(set.completedReps ?? 0, set.completedRepsLeft ?? 0);\n  } else {\n    return set.completedReps;\n  }\n}\n\nexport function Reps_avgUnilateralCompletedReps(set: ISet): number | undefined {\n  if (set.isUnilateral) {\n    return Math.round(((set.completedReps ?? 0) + (set.completedRepsLeft ?? 0)) / 2);\n  } else {\n    return set.completedReps;\n  }\n}\n\nexport function Reps_setVolume(set: ISet, unit: IUnit): IWeight {\n  const totalReps =\n    set.isUnilateral || set.completedRepsLeft != null\n      ? (set.completedReps ?? 0) + (set.completedRepsLeft ?? 0)\n      : (set.completedReps ?? 0);\n  return Weight_multiply(set.completedWeight ?? set.weight ?? Weight_build(0, unit), totalReps);\n}\n\nexport function Reps_group(sets: ISet[], isNext?: boolean): ISet[][] {\n  return sets.reduce<ISet[][]>(\n    (memo, set) => {\n      let lastGroup = memo[memo.length - 1];\n      const last = lastGroup[lastGroup.length - 1];\n      if (\n        last != null &&\n        (!Weight_eqNull(last.weight, set.weight) ||\n          last.reps !== set.reps ||\n          last.minReps !== set.minReps ||\n          last.completedReps !== set.completedReps ||\n          last.completedRepsLeft !== set.completedRepsLeft ||\n          !Weight_eqNull(last.completedWeight, set.completedWeight) ||\n          last.askWeight !== set.askWeight ||\n          (isNext && last.isAmrap !== set.isAmrap) ||\n          last.rpe !== set.rpe ||\n          last.completedRpe !== set.completedRpe ||\n          last.setTimer !== set.setTimer ||\n          (isNext && last.timer !== set.timer) ||\n          (isNext && last.isOverflowSetTimer !== set.isOverflowSetTimer) ||\n          last.auto !== set.auto ||\n          (!isNext && last.completedSetTimer !== set.completedSetTimer) ||\n          (!isNext && last.completedSetTimerLeft !== set.completedSetTimerLeft))\n      ) {\n        memo.push([]);\n        lastGroup = memo[memo.length - 1];\n      }\n      lastGroup.push(set);\n      return memo;\n    },\n    [[]]\n  );\n}\n\nexport function Reps_findNextSet(entry: IHistoryEntry): ISet | undefined {\n  return [...entry.warmupSets, ...entry.sets].filter((s) => !s.isCompleted)[0];\n}\n\nexport function Reps_findNextSetIndex(entry: IHistoryEntry): number {\n  return [...entry.warmupSets, ...entry.sets].findIndex((s) => !s.isCompleted);\n}\n\nexport function Reps_findNextEntryAndSet(\n  historyRecord: IHistoryRecord,\n  entryIndex: number,\n  mode: \"workout\" | \"warmup\"\n):\n  | {\n      entry: IHistoryEntry;\n      set: ISet;\n    }\n  | undefined {\n  const entry = historyRecord.entries[entryIndex];\n  if (entry == null) {\n    return undefined;\n  }\n  const nextEntry = Progress_getNextEntry(historyRecord, entry, mode, true);\n  if (nextEntry == null) {\n    return undefined;\n  }\n\n  const nextSet = Reps_findNextSet(nextEntry);\n  if (nextSet != null) {\n    return { entry: nextEntry, set: nextSet };\n  }\n\n  return undefined;\n}\n\nexport function Reps_findNextEntryAndSetIndex(\n  historyRecord: IHistoryRecord,\n  entryIndex: number,\n  mode: \"workout\" | \"warmup\"\n):\n  | {\n      entryIndex: number;\n      setIndex: number;\n    }\n  | undefined {\n  const entry = historyRecord.entries[entryIndex];\n  if (entry == null) {\n    return undefined;\n  }\n  const nextEntry = Progress_getNextEntry(historyRecord, entry, mode, true);\n  if (nextEntry == null) {\n    return undefined;\n  }\n\n  const nextSet = Reps_findNextSetIndex(nextEntry);\n\n  return { entryIndex: historyRecord.entries.indexOf(nextEntry), setIndex: nextSet };\n}\n\nexport function Reps_groupConsecutive<T>(items: T[], keyFn: (item: T) => string): [T, number][] {\n  const groups: [T, number][] = [];\n  let lastKey: string | undefined;\n  for (const item of items) {\n    const key = keyFn(item);\n    if (lastKey == null || lastKey !== key) {\n      groups.push([item, 0]);\n    }\n    groups[groups.length - 1][1] += 1;\n    lastKey = key;\n  }\n  return groups;\n}\n\nexport function Reps_completedSetKey(set: ISet): string {\n  const reps = set.completedReps ?? 0;\n  const repsLeft = set.isUnilateral ? (set.completedRepsLeft ?? 0) : -1;\n  const w = set.completedWeight ? Weight_print(set.completedWeight) : \"none\";\n  const rpe = set.completedRpe ?? -1;\n  const setTimer = set.completedSetTimer != null ? Math.round(set.completedSetTimer) : -1;\n  const setTimerLeft =\n    set.isUnilateral && set.completedSetTimerLeft != null ? Math.round(set.completedSetTimerLeft) : -1;\n  const label = set.label ?? \"\";\n  return `${reps}-${repsLeft}-${w}-${rpe}-${setTimer}-${setTimerLeft}-${label}`;\n}\n\nexport function Reps_targetSetKey(set: ISet): string {\n  const reps = set.reps ?? 0;\n  const minReps = set.minReps ?? -1;\n  const w = set.weight ? Weight_print(set.weight) : \"none\";\n  const rpe = set.rpe ?? -1;\n  const logRpe = set.logRpe ? 1 : 0;\n  const timer = set.timer ?? -1;\n  const setTimer = set.setTimer ?? -1;\n  const overflow = set.isOverflowSetTimer ? 1 : 0;\n  const amrap = set.isAmrap ? 1 : 0;\n  const label = set.label ?? \"\";\n  const askWeight = set.askWeight ? 1 : 0;\n  return `${reps}-${minReps}-${w}-${askWeight}-${rpe}-${logRpe}-${timer}-${setTimer}-${overflow}-${amrap}-${label}`;\n}\n\nexport function Reps_volume(sets: ISet[], unit: IUnit): IWeight {\n  return Weight_convertTo(\n    sets.reduce((memo, set) => Weight_add(memo, Reps_setVolume(set, unit)), Weight_build(0, unit)),\n    unit\n  );\n}\n","import {\n  ISettings,\n  IPlannerSettings,\n  IAllCustomExercises,\n  ITargetType,\n  targetTypes,\n  IProgram,\n  IExerciseType,\n  IWeight,\n  IWebEditorSettings,\n  IUnit,\n  IMuscleGroupsSettings,\n} from \"../types\";\nimport { EquipmentDefaults_build } from \"./equipmentDefaults\";\nimport { EquipmentUnits_follow } from \"./equipmentUnits\";\nimport { Weight_print } from \"./weight\";\nimport { IExportedProgram, Program_evaluate, Program_getAllUsedProgramExercises } from \"./program\";\nimport { ObjectUtils_filter, ObjectUtils_pick } from \"../utils/object\";\nimport { lb } from \"lens-shmens\";\nimport { updateSettings } from \"./state\";\nimport { IDispatch } from \"../ducks/types\";\nimport { IExercise, Exercise_toKey, Exercise_get, Exercise_nameWithEquipment } from \"./exercise\";\nimport { CollectionUtils_uniqByExpr, CollectionUtils_sort } from \"../utils/collection\";\nimport { ProgramExercise_doesUse1RM } from \"./programExercise\";\nimport { MuscleRangePresets_apply } from \"./muscleRangePresets\";\nimport { IExercisePickerSettings } from \"../components/exercisePicker/exercisePickerSettings\";\n\nexport function Settings_programContentBuild(): Pick<ISettings, \"timers\" | \"units\" | \"planner\"> {\n  return {\n    timers: {\n      warmup: 90,\n      workout: 180,\n      reminder: 900,\n      getReady: 5,\n    },\n    units: \"lb\",\n    planner: Settings_buildPlannerSettings(),\n  };\n}\n\nexport function Settings_build(units: IUnit = \"lb\"): ISettings {\n  return {\n    ...Settings_programContentBuild(),\n    units,\n    graphsSettings: {\n      isSameXAxis: false,\n      isWithBodyweight: false,\n      isWithOneRm: true,\n    },\n    exerciseData: {},\n    graphOptions: {},\n    exerciseStatsSettings: {\n      ascendingSort: false,\n    },\n    gyms: [\n      {\n        vtype: \"gym\",\n        id: \"default\",\n        name: \"Main\",\n        equipment: EquipmentDefaults_build(units),\n      },\n    ],\n    // Builds before 2026-09-26 require deletedGyms in VSettings. Drop with its removal migration.\n    deletedGyms: [],\n    volume: 1.0,\n    vibration: false,\n    startWeekFromMonday: false,\n    lengthUnits: \"in\",\n    workoutSettings: {\n      targetType: \"target\",\n    },\n    statsEnabled: { weight: { weight: true }, length: {}, percentage: {} },\n    exercises: {},\n    graphs: { graphs: [], vtype: \"graphs\" },\n    planner: Settings_buildPlannerSettings(),\n    muscleGroups: {\n      vtype: \"muscle_groups_settings\",\n      data: {},\n    },\n  };\n}\n\nexport function Settings_buildPlannerSettings(): IPlannerSettings {\n  const planner = MuscleRangePresets_apply(\n    {\n      strengthSetsPct: 30,\n      hypertrophySetsPct: 70,\n      weeklyRangeSets: {},\n      weeklyFrequency: {},\n      synergistMultiplier: 0.5,\n    },\n    \"moderate\"\n  );\n  // Builds before the muscle group split list shoulders, back and forearms, and show empty ranges without these.\n  return {\n    ...planner,\n    weeklyRangeSets: { ...planner.weeklyRangeSets, shoulders: [10, 12], back: [10, 12], forearms: [10, 12] },\n    weeklyFrequency: { ...planner.weeklyFrequency, shoulders: 2, back: 2, forearms: 2 },\n  };\n}\n\nexport function Settings_applyExportedProgram(settings: ISettings, exportedProgram: IExportedProgram): ISettings {\n  const result = {\n    ...settings,\n    exercises: {\n      ...settings.exercises,\n      ...exportedProgram.customExercises,\n    },\n    timers: {\n      ...settings.timers,\n      workout: settings.timers.workout ?? exportedProgram.settings.timers?.workout,\n      warmup: settings.timers.warmup ?? exportedProgram.settings.timers?.warmup,\n    },\n    exerciseData: { ...settings.exerciseData, ...exportedProgram.settings.exerciseData },\n    workoutSettings: { ...settings.workoutSettings, ...exportedProgram.settings.workoutSettings },\n  };\n  return result;\n}\n\nfunction mergeWithDeletions<T>(\n  stored: Record<string, T>,\n  update: Record<string, T> | undefined,\n  deletedKeys: string[] | undefined\n): Record<string, T> {\n  const result = { ...stored, ...update };\n  for (const key of deletedKeys || []) {\n    delete result[key];\n  }\n  return result;\n}\n\nfunction applyPlannerUpdate(planner: IPlannerSettings, update: IWebEditorSettings): IPlannerSettings {\n  const changes = update.plannerUpdate ?? update.planner;\n  if (changes == null) {\n    return planner;\n  }\n  return {\n    ...planner,\n    ...changes,\n    weeklyRangeSets: { ...planner.weeklyRangeSets, ...changes.weeklyRangeSets },\n    weeklyFrequency: { ...planner.weeklyFrequency, ...changes.weeklyFrequency },\n  };\n}\n\nfunction applyMuscleGroupsUpdate(\n  muscleGroups: IMuscleGroupsSettings,\n  update: IWebEditorSettings,\n  deletedKeys: string[] | undefined\n): IMuscleGroupsSettings {\n  if (update.muscleGroupsUpdate != null || deletedKeys?.length) {\n    return { ...muscleGroups, data: mergeWithDeletions(muscleGroups.data, update.muscleGroupsUpdate, deletedKeys) };\n  }\n  return update.muscleGroups ?? muscleGroups;\n}\n\nexport function Settings_applyWebEditorSettings(\n  settings: ISettings,\n  update: IWebEditorSettings,\n  deleted?: { exerciseDataKeys?: string[]; starredExerciseKeys?: string[]; muscleGroupKeys?: string[] }\n): ISettings {\n  // A dictionary merge cannot express a removal, so clearing an exercise override or unstarring\n  // needs its keys named explicitly - otherwise the stored entry is merged straight back in\n  const exerciseData = mergeWithDeletions(settings.exerciseData, update.exerciseData, deleted?.exerciseDataKeys);\n  const starredExercises =\n    update.starredExercises != null || deleted?.starredExerciseKeys?.length\n      ? mergeWithDeletions(settings.starredExercises || {}, update.starredExercises, deleted?.starredExerciseKeys)\n      : settings.starredExercises;\n\n  const units = update.units ?? settings.units;\n  return {\n    ...settings,\n    units,\n    gyms: units !== settings.units ? EquipmentUnits_follow(settings.gyms, units) : settings.gyms,\n    // `workout: null` means the user turned the rest timer off, so presence of the key decides, not truthiness\n    timers: update.timers != null ? { ...settings.timers, ...update.timers } : settings.timers,\n    planner: applyPlannerUpdate(settings.planner, update),\n    muscleGroups: applyMuscleGroupsUpdate(settings.muscleGroups, update, deleted?.muscleGroupKeys),\n    exerciseData,\n    workoutSettings:\n      update.workoutSettings != null\n        ? { ...settings.workoutSettings, ...update.workoutSettings }\n        : settings.workoutSettings,\n    exercises: update.exercises != null ? { ...settings.exercises, ...update.exercises } : settings.exercises,\n    starredExercises,\n  };\n}\n\nexport function Settings_webEditorInitial(\n  stored: ISettings | undefined,\n  programCustomExercises: IAllCustomExercises | undefined\n): ISettings {\n  const settings = Settings_build(stored?.units);\n  return {\n    ...settings,\n    exercises: { ...settings.exercises, ...stored?.exercises, ...programCustomExercises },\n    timers: { ...settings.timers, workout: stored?.timers.workout ?? settings.timers.workout },\n    planner: stored?.planner || settings.planner,\n    muscleGroups: stored?.muscleGroups || settings.muscleGroups,\n    exerciseData: { ...settings.exerciseData, ...stored?.exerciseData },\n    workoutSettings: { ...settings.workoutSettings, ...stored?.workoutSettings },\n    starredExercises: stored?.starredExercises,\n  };\n}\n\nexport interface IWebEditorSettingsRequest {\n  settings: IWebEditorSettings;\n  deletedExerciseDataKeys: string[];\n  deletedStarredExerciseKeys: string[];\n  deletedMuscleGroupKeys: string[];\n}\n\nconst pickerSettingsKeys: (keyof IExercisePickerSettings)[] = [\n  \"shouldKeepProgramExerciseId\",\n  \"pickerSort\",\n  \"shouldShowInvisibleEquipment\",\n];\n\nfunction isSameValue(a: unknown, b: unknown): boolean {\n  if (a === b) {\n    return true;\n  }\n  if (a == null || b == null || typeof a !== \"object\" || typeof b !== \"object\") {\n    return false;\n  }\n  return JSON.stringify(a) === JSON.stringify(b);\n}\n\nfunction changedEntries<T>(\n  initial: Partial<Record<string, T>>,\n  current: Partial<Record<string, T>>\n): { changed: Record<string, T>; deletedKeys: string[] } {\n  const changed: Record<string, T> = {};\n  for (const key of Object.keys(current)) {\n    const value = current[key];\n    if (value != null && !isSameValue(value, initial[key])) {\n      changed[key] = value;\n    }\n  }\n  const deletedKeys = Object.keys(initial).filter((key) => initial[key] != null && current[key] == null);\n  return { changed, deletedKeys };\n}\n\nconst plannerScalarKeys: (\"synergistMultiplier\" | \"strengthSetsPct\" | \"hypertrophySetsPct\")[] = [\n  \"synergistMultiplier\",\n  \"strengthSetsPct\",\n  \"hypertrophySetsPct\",\n];\n\nfunction plannerUpdate(initial: IPlannerSettings, current: IPlannerSettings): Partial<IPlannerSettings> {\n  const result: Partial<IPlannerSettings> = ObjectUtils_pick(\n    current,\n    plannerScalarKeys.filter((key) => current[key] !== initial[key])\n  );\n  const weeklyRangeSets = changedEntries(initial.weeklyRangeSets, current.weeklyRangeSets).changed;\n  if (Object.keys(weeklyRangeSets).length > 0) {\n    result.weeklyRangeSets = weeklyRangeSets;\n  }\n  const weeklyFrequency = changedEntries(initial.weeklyFrequency, current.weeklyFrequency).changed;\n  if (Object.keys(weeklyFrequency).length > 0) {\n    result.weeklyFrequency = weeklyFrequency;\n  }\n  return result;\n}\n\n// Stars, picker settings, custom exercises, planner ranges and muscle groups are sent as a diff against page\n// load, so a stale tab cannot overwrite what the app changed since.\nexport function Settings_webEditorSettingsRequest(initial: ISettings, current: ISettings): IWebEditorSettingsRequest {\n  const exercises = changedEntries(initial.exercises, current.exercises).changed;\n  const starred = changedEntries(initial.starredExercises || {}, current.starredExercises || {});\n  const muscleGroups = changedEntries(initial.muscleGroups.data, current.muscleGroups.data);\n  const planner = plannerUpdate(initial.planner, current.planner);\n  const pickerSettings = ObjectUtils_pick(\n    current.workoutSettings,\n    pickerSettingsKeys.filter((key) => current.workoutSettings[key] !== initial.workoutSettings[key])\n  );\n  return {\n    settings: {\n      units: current.units,\n      timers: { workout: current.timers.workout },\n      exerciseData: current.exerciseData,\n      ...(Object.keys(planner).length > 0 ? { plannerUpdate: planner } : {}),\n      ...(Object.keys(muscleGroups.changed).length > 0 ? { muscleGroupsUpdate: muscleGroups.changed } : {}),\n      ...(Object.keys(exercises).length > 0 ? { exercises } : {}),\n      ...(Object.keys(starred.changed).length > 0 ? { starredExercises: starred.changed } : {}),\n      ...(Object.keys(pickerSettings).length > 0 ? { workoutSettings: pickerSettings } : {}),\n    },\n    deletedExerciseDataKeys: changedEntries(initial.exerciseData, current.exerciseData).deletedKeys,\n    deletedStarredExerciseKeys: starred.deletedKeys,\n    deletedMuscleGroupKeys: muscleGroups.deletedKeys,\n  };\n}\n\nexport function Settings_webEditorHasChanges(saved: ISettings, current: ISettings): boolean {\n  const request = Settings_webEditorSettingsRequest(saved, current);\n  const { units, timers, exerciseData, ...diffs } = request.settings;\n  return (\n    Object.keys(diffs).length > 0 ||\n    request.deletedExerciseDataKeys.length > 0 ||\n    request.deletedStarredExerciseKeys.length > 0 ||\n    request.deletedMuscleGroupKeys.length > 0 ||\n    units !== saved.units ||\n    timers?.workout !== saved.timers.workout ||\n    !isSameValue(exerciseData, saved.exerciseData)\n  );\n}\n\nexport function Settings_activeCustomExercises(settings: ISettings): IAllCustomExercises {\n  return ObjectUtils_filter(settings.exercises, (k, v) => !v?.isDeleted);\n}\n\nexport function Settings_getNextTargetType(type: ITargetType, skipPlatesCalculator: boolean): ITargetType {\n  const index = targetTypes.indexOf(type);\n  let nextTargetType: ITargetType;\n  if (index === -1) {\n    nextTargetType = targetTypes[0];\n  } else if (index === targetTypes.length - 1) {\n    nextTargetType = targetTypes[0];\n  } else {\n    nextTargetType = targetTypes[index + 1];\n  }\n  if (nextTargetType === \"platescalculator\" && skipPlatesCalculator) {\n    nextTargetType = Settings_getNextTargetType(\"platescalculator\", skipPlatesCalculator);\n  }\n  return nextTargetType;\n}\n\nexport function Settings_toggleStarred(\n  starred: ISettings[\"starredExercises\"],\n  key: string\n): ISettings[\"starredExercises\"] {\n  if (starred?.[key]) {\n    const next = { ...starred };\n    delete next[key];\n    return next;\n  }\n  return { ...starred, [key]: true };\n}\n\nexport function Settings_toggleStarredExercise(dispatch: IDispatch, key: string): void {\n  updateSettings(\n    dispatch,\n    lb<ISettings>()\n      .p(\"starredExercises\")\n      .recordModify((starred) => Settings_toggleStarred(starred, key)),\n    `Toggle starred exercise ${key}`\n  );\n}\n\nexport const settingsRecentExercisesLimit = 5;\n\n// Keys are never deleted from this map, only overwritten. VersionTracker's nested-object path bumps\n// versions per key present in the new object (versionTrackerUpdateVersions.ts:427), so a removed key\n// never gets its version bumped and the next merge resurrects it. Writing `[]` would sync; deleting\n// would not.\nexport function Settings_withRecentSwap(\n  recentExercises: ISettings[\"recentExercises\"],\n  from: IExerciseType,\n  to: IExerciseType\n): Partial<Record<string, string[]>> {\n  const fromKey = Exercise_toKey(from);\n  const toKey = Exercise_toKey(to);\n  const previous = recentExercises?.[fromKey] ?? [];\n  return {\n    ...recentExercises,\n    [fromKey]: [toKey, ...previous.filter((key) => key !== toKey)].slice(0, settingsRecentExercisesLimit),\n  };\n}\n\nexport function Settings_addRecentSwap(dispatch: IDispatch, from: IExerciseType, to: IExerciseType): void {\n  updateSettings(\n    dispatch,\n    lb<ISettings>()\n      .p(\"recentExercises\")\n      .recordModify((recentExercises) => Settings_withRecentSwap(recentExercises, from, to)),\n    `Record recent swap from ${Exercise_toKey(from)} to ${Exercise_toKey(to)}`\n  );\n}\n\nexport function Settings_changePickerSettings(dispatch: IDispatch, settings: IExercisePickerSettings): void {\n  updateSettings(\n    dispatch,\n    lb<ISettings>()\n      .p(\"workoutSettings\")\n      .recordModify((workoutSettings) => {\n        return { ...workoutSettings, ...settings };\n      }),\n    `Change picker settings`\n  );\n}\n\nexport function Settings_doesProgramHaveUnset1RMs(program: IProgram, settings: ISettings): boolean {\n  return Settings_getExercisesWithUnset1RMs(program, settings).length > 0;\n}\n\nexport function Settings_getExercisesWithUnset1RMs(program: IProgram, settings: ISettings): IExercise[] {\n  const evalutedProgram = Program_evaluate(program, settings);\n  const plannerExercises = Program_getAllUsedProgramExercises(evalutedProgram).filter((exercise) => {\n    return ProgramExercise_doesUse1RM(exercise);\n  });\n  const exerciseTypes = CollectionUtils_uniqByExpr(\n    plannerExercises\n      .filter((exercise) => {\n        return settings.exerciseData[Exercise_toKey(exercise.exerciseType)]?.rm1 == null;\n      })\n      .map((exercise) => exercise.exerciseType),\n    (e) => Exercise_toKey(e)\n  );\n  const exercises = exerciseTypes.map((e) => Exercise_get(e, settings.exercises));\n  return CollectionUtils_sort(exercises, (a, b) => {\n    return Exercise_nameWithEquipment(a, settings).localeCompare(Exercise_nameWithEquipment(b, settings));\n  });\n}\n\nexport function Settings_setOneRM(\n  dispatch: IDispatch,\n  exerciseType: IExerciseType,\n  value: IWeight,\n  settings: ISettings\n): void {\n  updateSettings(\n    dispatch,\n    lb<ISettings>()\n      .p(\"exerciseData\")\n      .recordModify((data) => {\n        const key = Exercise_toKey(exerciseType);\n        return { ...data, [key]: { ...data[key], rm1: value } };\n      }),\n    `Set 1RM for ${Exercise_nameWithEquipment(Exercise_get(exerciseType, settings.exercises), settings)} to ${Weight_print(value)}`\n  );\n}\n\nexport const TEXT_SIZE_MIN = 12;\nexport const TEXT_SIZE_MAX = 24;\nexport const TEXT_SIZE_STEP = 2;\nconst TEXT_SIZE_BASE = 16;\n\n// An unset textSize follows the OS font scale, the same way an unset theme follows dark mode.\n// The OS scale is deliberately not applied on top of an explicit value - it is folded into the\n// rem here so that spacing and icons move with the type instead of the text alone growing.\nexport function Settings_getTextSize(settings: ISettings, osFontScale: number): number {\n  if (settings.textSize != null) {\n    return clampTextSize(settings.textSize);\n  }\n  const scaled = TEXT_SIZE_BASE * osFontScale;\n  return clampTextSize(Math.round(scaled / TEXT_SIZE_STEP) * TEXT_SIZE_STEP);\n}\n\nfunction clampTextSize(size: number): number {\n  return Math.max(TEXT_SIZE_MIN, Math.min(TEXT_SIZE_MAX, size));\n}\n","import { Service } from \"../api/service\";\nimport { IAudioInterface } from \"../lib/audioInterface\";\nimport { IPlannerState } from \"../pages/planner/models/types\";\nimport { IDispatch } from \"../ducks/types\";\nimport { Storage_getDefault } from \"../models/storage\";\nimport { ILensRecordingPayload } from \"lens-shmens\";\nimport { IUser } from \"./user\";\nimport { IProgramIndexEntry } from \"./program\";\nimport {\n  IStorage,\n  IProgram,\n  IHistoryRecord,\n  IProgramDay,\n  ISettings,\n  IExerciseType,\n  IEquipment,\n  IStats,\n  IImportSession,\n} from \"../types\";\nimport { IImportResult } from \"../utils/importTypes\";\nimport { AsyncQueue } from \"../utils/asyncQueue\";\nimport { basicBeginnerProgram } from \"../programs/basicBeginnerProgram\";\nimport type { NavigationContainerRef } from \"@react-navigation/native\";\nimport type { IRootStackParamList } from \"../navigation/types\";\nimport type { IScreenData } from \"./screen\";\nimport type { IProgramPreviewPlaygroundState } from \"../components/preview/programPreviewPlaygroundSetup\";\nimport type { IIapActiveSubscription, IIapAdapter } from \"../utils/iapAdapter\";\nimport type { IHealthAdapter } from \"../utils/healthAdapter\";\nimport type { IPushSync } from \"../utils/pushSyncAdapter\";\nimport type { Persistence } from \"../utils/persistence\";\nimport type { ITimerBridge } from \"../utils/timerBridge\";\nimport type { IWorkoutBridge } from \"../utils/workoutBridge\";\nimport type { IWatchBridge } from \"../utils/watchBridge\";\nimport type { IKeychain } from \"../utils/keychain\";\nimport type { IWorkoutMirroring } from \"../utils/workoutMirroring\";\nimport type { IHeartRateStore } from \"../utils/heartRateStore\";\n\nexport type IEnv = {\n  service: Service;\n  audio: IAudioInterface;\n  queue: AsyncQueue;\n  persistence: Persistence;\n  navigationRef?: NavigationContainerRef<IRootStackParamList>;\n  getCurrentScreenData?: () => IScreenData | undefined;\n  iap?: IIapAdapter;\n  health?: IHealthAdapter;\n  push?: IPushSync;\n  timer: ITimerBridge;\n  workout: IWorkoutBridge;\n  watch: IWatchBridge;\n  keychain: IKeychain;\n  mirroring: IWorkoutMirroring;\n  heartRate: IHeartRateStore;\n};\n\nexport interface INotification {\n  type: \"error\" | \"success\";\n  content: string;\n}\n\nexport interface INavCommon {\n  loading: ILoading;\n  userId?: string;\n  currentProgram?: IProgram;\n  isOngoingProgress: boolean;\n  stats: IStats;\n  settings: ISettings;\n}\n\nexport interface ILoadingItem {\n  startTime: number;\n  type: string;\n  attempt?: number;\n  endTime?: number;\n  error?: string;\n}\n\nexport type ILoading = {\n  items: Partial<Record<string, ILoadingItem>>;\n};\n\nexport interface ISubscriptionLoading {\n  monthly?: boolean;\n  yearly?: boolean;\n  lifetime?: boolean;\n}\n\nexport interface IStateErrors {\n  corruptedstorage?: {\n    userid: string;\n    backup: boolean;\n    confirmed: boolean;\n    local: boolean;\n  };\n}\n\nexport interface IAppleOffer {\n  yearly: IApplePromotionalOffer;\n  monthly: IApplePromotionalOffer;\n}\n\nexport interface IApplePromotionalOffer {\n  offerId: string;\n  signature: string;\n  nonce: string;\n  timestamp: number;\n}\n\nexport interface IGoogleOffer {\n  yearly: IGooglePromotionalOffer;\n  monthly: IGooglePromotionalOffer;\n}\n\nexport interface IGooglePromotionalOffer {\n  offerId: string;\n  productId: string;\n}\n\nexport interface IOfferData {\n  offerId: string;\n  formattedPrice: string;\n}\n\nexport interface IAttributionData {\n  isOrganic: boolean;\n  mediaSource: string;\n  campaign: string;\n  adSet: string;\n  ad: string;\n}\n\nexport type ITourId = \"workout\" | \"program\";\n\nexport interface IStateTour {\n  id: ITourId;\n  enforced: boolean;\n  // Screen the tour was started on. Step `condition`s resolve the active screen\n  // via getCurrentScreenData(), which returns the tour modal once it's open — so\n  // they're evaluated against this snapshot instead, keeping the steps shown in\n  // the modal consistent with the ones that triggered the tour.\n  screenData?: IScreenData;\n}\n\nexport interface ILastSynced {\n  versions: IStorage[\"_versions\"];\n  tempUserId: string;\n  serverVersionsFetchedAt: number;\n}\n\nexport interface IState {\n  user?: IUser;\n  storage: IStorage;\n  lastSynced?: ILastSynced;\n  programs: IProgram[];\n  programsIndex: IProgramIndexEntry[];\n  notification?: INotification;\n  revisions: Partial<Record<string, string[]>>;\n  prices?: Partial<Record<string, string>>;\n  offers?: Partial<Record<string, IOfferData[]>>;\n  loading: ILoading;\n  defaultEquipmentExpanded?: IEquipment;\n  subscriptionLoading?: ISubscriptionLoading;\n  subscriptionStatus?: IIapActiveSubscription[];\n  subscriptionStatusLoading?: boolean;\n  // Ephemeral, NON-synced optimistic hint for a just-queued Android plan switch, bridging the gap until\n  // Google's deferred RTDN lands and the server reports `pendingProduct` authoritatively. Session-only\n  // (not persisted/synced) and time-boxed via `until` so it can't drift like the old synced flag did.\n  subscriptionPendingHint?: { productId: string; until: number };\n  ownedLifetime?: boolean;\n  progress: Partial<Record<number, IHistoryRecord>>;\n  previewProgram?: {\n    id: string;\n    showCustomPrograms?: boolean;\n  };\n  muscleView?: {\n    type: \"program\" | \"day\";\n    programId?: string;\n    day?: number;\n  };\n  viewExerciseType?: IExerciseType;\n  adminKey?: string;\n  showWhatsNew?: boolean;\n  showSignupRequest?: boolean;\n  showHearAboutUs?: boolean;\n  toast?: string;\n  tour?: IStateTour;\n  scrollToHistoryRecordId?: number;\n  freshMigrations: boolean;\n  errors: IStateErrors;\n  reportedCorruptedStorage?: boolean;\n  nosync: boolean;\n  selectedGymId?: string;\n  appleOffer?: IAppleOffer;\n  googleOffer?: IGoogleOffer;\n  deviceId: string;\n  editProgramStates: Record<string, IPlannerState>;\n  playgroundState?: IProgramPreviewPlaygroundState;\n  importPreview?: IImportPreview;\n}\n\nexport interface IImportPreview {\n  source: IImportSession[\"source\"];\n  result: IImportResult;\n}\n\nexport interface ILocalStorage {\n  storage?: IStorage;\n  lastSynced?: ILastSynced;\n  editDay?: IProgramDay;\n}\n\nexport function buildState(args: {\n  storage?: IStorage;\n  notification?: INotification;\n  userId?: string;\n  nosync?: boolean;\n  deviceId: string;\n}): IState {\n  return {\n    progress: {},\n    programs: [basicBeginnerProgram],\n    programsIndex: [],\n    loading: { items: {} },\n    notification: args.notification,\n    storage: args.storage || Storage_getDefault(),\n    user: args.userId ? { email: args.userId, id: args.userId } : undefined,\n    errors: {},\n    revisions: {},\n    freshMigrations: false,\n    nosync: !!args.nosync,\n    deviceId: args.deviceId,\n    editProgramStates: {},\n  };\n}\n\nexport function updateState(dispatch: IDispatch, lensRecording: ILensRecordingPayload<IState>[], desc: string): void {\n  dispatch({ type: \"UpdateState\", lensRecording, desc });\n}\n\nexport function updateSettings(\n  dispatch: IDispatch,\n  lensRecording: ILensRecordingPayload<ISettings>,\n  desc: string\n): void {\n  dispatch({ type: \"UpdateSettings\", lensRecording, desc });\n}\n\nexport function updateProgress(\n  dispatch: IDispatch,\n  lensRecordings: ILensRecordingPayload<IHistoryRecord>[] | ILensRecordingPayload<IHistoryRecord>,\n  desc: string\n): void {\n  const recordings = Array.isArray(lensRecordings) ? lensRecordings : [lensRecordings];\n  dispatch({ type: \"UpdateProgress\", lensRecordings: recordings, desc });\n}\n","import { IPercentage, ISettings, IStats, IStatsHealthKey, IStatsKey, IWeight } from \"../types\";\nimport { CollectionUtils_sort, CollectionUtils_sortBy } from \"../utils/collection\";\nimport { ObjectUtils_keys } from \"../utils/object\";\nimport { Weight_add, Weight_build, Weight_divide } from \"./weight\";\n\nexport function Stats_name(key: IStatsKey | IStatsHealthKey): string {\n  switch (key) {\n    case \"bicepLeft\":\n      return \"Left Bicep\";\n    case \"bicepRight\":\n      return \"Right Bicep\";\n    case \"calfLeft\":\n      return \"Left Calf\";\n    case \"calfRight\":\n      return \"Right Calf\";\n    case \"chest\":\n      return \"Chest\";\n    case \"forearmLeft\":\n      return \"Left Forearm\";\n    case \"forearmRight\":\n      return \"Right Forearm\";\n    case \"hips\":\n      return \"Hips\";\n    case \"neck\":\n      return \"Neck\";\n    case \"shoulders\":\n      return \"Shoulders\";\n    case \"thighLeft\":\n      return \"Left Thigh\";\n    case \"thighRight\":\n      return \"Right Thigh\";\n    case \"waist\":\n      return \"Waist\";\n    case \"weight\":\n      return \"Bodyweight\";\n    case \"bodyfat\":\n      return \"Bodyfat\";\n    case \"sleep\":\n      return \"Sleep\";\n    case \"calories\":\n      return \"Calories\";\n    case \"protein\":\n      return \"Protein\";\n  }\n}\n\nexport function Stats_getCurrentBodyweight(stats: IStats): IWeight | undefined {\n  const weights = CollectionUtils_sortBy(stats.weight.weight || [], \"timestamp\", true);\n  return weights[0]?.value;\n}\n\nexport function Stats_getCurrentMovingAverageBodyweight(stats: IStats, settings: ISettings): IWeight | undefined {\n  const movingAverageWindowSize = settings.graphOptions.weight?.movingAverageWindowSize;\n  if (!movingAverageWindowSize) {\n    return Stats_getCurrentBodyweight(stats);\n  }\n  const weights = CollectionUtils_sortBy(stats.weight.weight || [], \"timestamp\", true);\n  if (weights.length < movingAverageWindowSize) {\n    return Stats_getCurrentBodyweight(stats);\n  }\n  const recentWeights = weights.slice(0, movingAverageWindowSize);\n  const totalWeight = recentWeights.reduce((sum, item) => Weight_add(sum, item.value), Weight_build(0, settings.units));\n  return Weight_divide(totalWeight, recentWeights.length);\n}\n\nexport function Stats_getCurrentBodyfat(stats: IStats): IPercentage | undefined {\n  const weights = CollectionUtils_sortBy(stats.percentage.bodyfat || [], \"timestamp\", true);\n  return weights[0]?.value;\n}\n\nexport function Stats_insertByTimestamp<T extends { timestamp: number }>(values: T[] | undefined, value: T): T[] {\n  return CollectionUtils_sort([value, ...(values || [])], (a, b) => b.timestamp - a.timestamp);\n}\n\nexport function Stats_getEmpty(): IStats {\n  return {\n    weight: {},\n    percentage: {},\n    length: {},\n  };\n}\n\nexport function Stats_isEmpty(stats: IStats): boolean {\n  const statsKeys: IStatsKey[] = [\n    ...ObjectUtils_keys(stats.weight).filter((k) => (stats.weight[k] || []).length > 0),\n    ...ObjectUtils_keys(stats.percentage).filter((k) => (stats.percentage[k] || []).length > 0),\n    ...ObjectUtils_keys(stats.length).filter((k) => (stats.length[k] || []).length > 0),\n  ];\n  return statsKeys.length === 0;\n}\n","import { runMigrations } from \"../migrations/runner\";\nimport * as v from \"valibot\";\nimport { getLatestMigrationVersion } from \"../migrations/migrations\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { Settings_build } from \"../models/settings\";\nimport { IEither } from \"../utils/types\";\nimport RB from \"rollbar\";\nimport { IState, updateState } from \"./state\";\nimport { lb } from \"lens-shmens\";\nimport { IDispatch } from \"../ducks/types\";\nimport { ObjectUtils_isEqual } from \"../utils/object\";\nimport { DateUtils_formatYYYYMMDD } from \"../utils/date\";\nimport { IHistoryRecord, IStorage, IPartialStorage, STORAGE_VERSION_TYPES, VStorage, VHistoryRecord } from \"../types\";\nimport { CollectionUtils_immutableSort } from \"../utils/collection\";\nimport { IVersions, VersionTracker } from \"./versionTracker\";\nimport { lg } from \"../utils/posthog\";\nimport { Diagnostics_getLastActions, Diagnostics_setLastValidationErrors } from \"../utils/diagnostics\";\n\ndeclare let Rollbar: RB;\n\nfunction formatIssuePath(issue: v.GenericIssue): string {\n  if (!issue.path || issue.path.length === 0) {\n    return \"\";\n  }\n  return issue.path\n    .map((segment) => {\n      const key = (segment as { key: unknown }).key;\n      if (typeof key === \"number\") {\n        return `[${key}]`;\n      }\n      return String(key);\n    })\n    .reduce((acc, part) => {\n      if (part.startsWith(\"[\")) {\n        return `${acc}${part}`;\n      }\n      return acc ? `${acc}.${part}` : part;\n    }, \"\");\n}\n\nexport function Storage_validate<T>(data: unknown, schema: v.GenericSchema<T>, name: string): IEither<T, string[]> {\n  const result = v.safeParse(schema, data, { abortEarly: false });\n  if (result.success) {\n    // Return the input as T (not result.output) so unknown fields are preserved at every\n    // nesting level — valibot's v.object strips unknown keys; io-ts did not, and storage may\n    // carry forward-compatible fields we do not want to silently drop. Trade-off: any\n    // v.transform / coercion added to schemas in the future will run but be discarded here.\n    return { success: true, data: data as T };\n  }\n  const errors = result.issues.map((issue) => {\n    const path = formatIssuePath(issue);\n    const head = path ? `${name}.${path}` : name;\n    return `${head}: ${issue.message}`;\n  });\n  return { success: false, error: errors };\n}\n\nexport function Storage_validateStorage(data: Record<string, unknown>): IEither<IStorage, string[]> {\n  const result = Storage_validate(data, VStorage, \"storage\");\n  if (result.success) {\n    return { success: true, data: result.data as unknown as IStorage };\n  }\n  return result;\n}\n\nexport function Storage_validateAndReportStorage(data: Record<string, unknown>): IEither<IStorage, string[]> {\n  const result = Storage_validateAndReport(data, VStorage, \"storage\");\n  if (result.success) {\n    return { success: true, data: result.data as unknown as IStorage };\n  }\n  return result;\n}\n\nexport function Storage_fillVersions<T extends IPartialStorage | IStorage>(storage: T, deviceId: string): T {\n  const versionTracker = new VersionTracker(STORAGE_VERSION_TYPES, { deviceId });\n  const timestamp = Date.now();\n  const filledVersions = versionTracker.fillVersions(storage, storage._versions || {}, timestamp);\n  return {\n    ...storage,\n    _versions: filledVersions,\n  };\n}\n\nexport function Storage_validateAndReport<T>(\n  data: unknown,\n  schema: v.GenericSchema<T>,\n  name: string\n): IEither<T, string[]> {\n  const result = Storage_validate(data, schema, name);\n  if (!result.success) {\n    const error = result.error;\n    lg(\"ls-corrupted-storage\", { lastActions: JSON.stringify(Diagnostics_getLastActions()) });\n    Diagnostics_setLastValidationErrors(error);\n    if (typeof Rollbar !== \"undefined\" && Rollbar != null) {\n      Rollbar.error(error.join(\"\\n\"), { state: JSON.stringify(data), type: name });\n    }\n    console.error(`Error decoding ${name}`);\n    console.log(data);\n    error.forEach((e) => console.error(e));\n  }\n  return result;\n}\n\nexport function Storage_get(\n  maybeStorage?: Record<string, unknown>,\n  shouldReportError?: boolean\n): IEither<IStorage, string[]> {\n  if (maybeStorage) {\n    let finalStorage = runMigrations(maybeStorage as IStorage);\n    const firstValidateResult = Storage_validate(finalStorage, VStorage, \"storage\");\n    if (!firstValidateResult.success) {\n      maybeStorage.version = \"20250322014249\";\n      finalStorage = runMigrations(maybeStorage as IStorage);\n    }\n    const result = shouldReportError\n      ? Storage_validateAndReport(finalStorage, VStorage, \"storage\")\n      : Storage_validate(finalStorage, VStorage, \"storage\");\n    if (result.success) {\n      return { success: true, data: result.data as unknown as IStorage };\n    }\n    return result;\n  } else {\n    return { success: false, error: [\"Provided data is empty\"] };\n  }\n}\n\nexport function Storage_getHistoryRecord(\n  record: Record<string, unknown>,\n  shouldReportError?: boolean\n): IEither<IHistoryRecord, string[]> {\n  const storage = Storage_getDefault();\n  storage.version = \"20251230101232\";\n  storage.history = [record as unknown as IHistoryRecord];\n  const migrated = runMigrations(storage);\n  const migratedRecord = migrated.history[0];\n  if (!migratedRecord) {\n    return { success: false, error: [\"Failed to migrate history record\"] };\n  }\n  const result = shouldReportError\n    ? Storage_validateAndReport(migratedRecord as unknown as Record<string, unknown>, VHistoryRecord, \"progress\")\n    : Storage_validate(migratedRecord as unknown as Record<string, unknown>, VHistoryRecord, \"progress\");\n  if (result.success) {\n    return { success: true, data: migratedRecord };\n  }\n  return { success: false, error: result.error };\n}\n\nexport function Storage_getDefault(): IStorage {\n  const dateNow = Date.now();\n  return {\n    id: dateNow,\n    originalId: dateNow,\n    currentProgramId: undefined,\n    reviewRequests: [],\n    signupRequests: [],\n    // Builds before 2026-09-26 require the deleted* arrays in VStorage. Drop with their removal migration.\n    deletedHistory: [],\n    deletedPrograms: [],\n    deletedStats: [],\n    tempUserId: UidFactory_generateUid(10),\n    affiliates: {},\n    progress: [],\n    stats: {\n      weight: { weight: [] },\n      length: {\n        neck: [],\n        shoulders: [],\n        bicepLeft: [],\n        bicepRight: [],\n        forearmLeft: [],\n        forearmRight: [],\n        chest: [],\n        waist: [],\n        hips: [],\n        thighLeft: [],\n        thighRight: [],\n        calfLeft: [],\n        calfRight: [],\n      },\n      percentage: { bodyfat: [] },\n    },\n    settings: Settings_build(),\n    history: [],\n    version: getLatestMigrationVersion(),\n    subscription: { apple: [], google: [] },\n    programs: [],\n    helps: [],\n    email: undefined,\n    whatsNew: DateUtils_formatYYYYMMDD(Date.now(), \"\"),\n  };\n}\n\nexport function Storage_setAffiliate(dispatch: IDispatch, source: string, type: \"coupon\" | \"program\"): void {\n  updateState(\n    dispatch,\n    [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"affiliates\")\n        .recordModify((affiliates) => {\n          if (affiliates[source] != null) {\n            return affiliates;\n          }\n          return { ...affiliates, [source]: { id: source, timestamp: Date.now(), type, vtype: \"affiliate\" } };\n        }),\n    ],\n    \"Set affiliate\"\n  );\n}\n\nexport function Storage_isChanged(aStorage?: IStorage, bStorage?: IStorage): boolean {\n  if ((!aStorage && bStorage) || (!bStorage && aStorage)) {\n    return true;\n  }\n  if (!aStorage && !bStorage) {\n    return false;\n  }\n  const { originalId: _aOriginalId, id: _aId, _versions: _aVersions, ...cleanedAStorage } = aStorage!;\n  const { originalId: _bOriginalId, id: _bId, _versions: _bVersions, ...cleanedBStorage } = bStorage!;\n  const changed = !ObjectUtils_isEqual(cleanedAStorage, cleanedBStorage, [\"version\"]);\n  return changed;\n}\n\nexport function Storage_isFullStorage(storage: IStorage | IPartialStorage): storage is IStorage {\n  return storage.programs != null && storage.history != null && storage.stats != null;\n}\n\nexport function Storage_partialStorageToStorage(partialStorage: IPartialStorage): IStorage {\n  if (partialStorage.history != null && partialStorage.programs != null && partialStorage.stats != null) {\n    return partialStorage as IStorage;\n  } else {\n    return {\n      ...partialStorage,\n      history: partialStorage.history || [],\n      programs: partialStorage.programs || [],\n      stats: partialStorage.stats || {\n        length: {},\n        percentage: {},\n        weight: {},\n      },\n    };\n  }\n}\n\nexport function Storage_updateVersions(\n  oldStorage: IPartialStorage,\n  newStorage: IPartialStorage,\n  deviceId: string\n): IVersions<IStorage> {\n  const { id: oldId, originalId: oldOriginalId, _versions: oldVersions, ...oldCleanedStorage } = oldStorage;\n  const { id: newId, originalId: newOriginalId, _versions: newVersions, ...newCleanedStorage } = newStorage;\n  const versionTracker = new VersionTracker(STORAGE_VERSION_TYPES, { deviceId });\n  const timestamp = Date.now();\n  if (\n    oldCleanedStorage.tempUserId === newCleanedStorage.tempUserId &&\n    oldCleanedStorage.version === newCleanedStorage.version\n  ) {\n    return versionTracker.updateVersions(\n      oldCleanedStorage,\n      newCleanedStorage,\n      oldStorage._versions || {},\n      newStorage._versions || {},\n      timestamp\n    );\n  } else {\n    return newVersions || {};\n  }\n}\n\nexport function Storage_mergeStorage(oldStorage: IStorage, newStorage: IStorage, deviceId: string): IStorage {\n  const migratedOldStorage = runMigrations(oldStorage);\n  const migratedNewStorage = runMigrations(newStorage);\n  const { id: oldId, originalId: oldOriginalId, _versions: oldVersions, ...oldCleanedStorage } = migratedOldStorage;\n  const { id: newId, originalId: newOriginalId, _versions: newVersions, ...newCleanedStorage } = migratedNewStorage;\n  const versionTracker = new VersionTracker(STORAGE_VERSION_TYPES, { deviceId });\n  const updatedVersions = versionTracker.mergeVersions(oldVersions || {}, newVersions || {});\n  const updatedCleanedStorage = versionTracker.mergeByVersions(\n    oldCleanedStorage,\n    oldVersions || {},\n    newVersions || {},\n    newCleanedStorage\n  );\n  const updatedStorage: IStorage = {\n    ...updatedCleanedStorage,\n    id: Math.max(newId || Date.now(), oldId || Date.now()),\n    originalId: Math.max(newOriginalId ?? 0, oldOriginalId ?? 0),\n    _versions: updatedVersions,\n  };\n  const sortedProgress = sortProgressByIndex(updatedStorage.progress);\n  return sortedProgress === updatedStorage.progress ? updatedStorage : { ...updatedStorage, progress: sortedProgress };\n}\n\nfunction sortProgressByIndex(progress: undefined): undefined;\nfunction sortProgressByIndex(progress: IHistoryRecord[]): IHistoryRecord[];\nfunction sortProgressByIndex(progress: IHistoryRecord[] | undefined): IHistoryRecord[] | undefined;\nfunction sortProgressByIndex(progress: IHistoryRecord[] | undefined): IHistoryRecord[] | undefined {\n  if (!progress || progress.length === 0) {\n    return progress;\n  }\n  const head = progress[0];\n  if (!head.entries || head.entries.length === 0) {\n    return progress;\n  }\n\n  const byIndex = (a: { index: number }, b: { index: number }): number => a.index - b.index;\n\n  let entriesWithSortedSets = head.entries;\n  for (let i = 0; i < head.entries.length; i++) {\n    const entry = head.entries[i];\n    const sortedSets = CollectionUtils_immutableSort(entry.sets, byIndex);\n    if (sortedSets !== entry.sets) {\n      if (entriesWithSortedSets === head.entries) {\n        entriesWithSortedSets = head.entries.slice();\n      }\n      entriesWithSortedSets[i] = { ...entry, sets: sortedSets };\n    }\n  }\n\n  const sortedEntries = CollectionUtils_immutableSort(entriesWithSortedSets, byIndex);\n  if (sortedEntries === head.entries) {\n    return progress;\n  }\n  return [{ ...head, entries: sortedEntries }, ...progress.slice(1)];\n}\n","import { Exercise_get, Exercise_fullName, Exercise_getIsUnilateral } from \"./exercise\";\nimport { UidFactory_generateUid } from \"../utils/generator\";\nimport { ExerciseImageUtils_url } from \"./exerciseImage\";\nimport type { IActiveSetTimer } from \"./progress\";\nimport { IHistoryRecord, ISet, ISettings, ITimedSetSide } from \"../types\";\n\nexport interface ITimedSetView {\n  phaseId: string;\n  entryIndex: number;\n  setIndex: number;\n  setId: string;\n  stage: \"getReady\" | \"work\";\n  side: ITimedSetSide;\n  startedAt: number;\n  getReadySeconds: number;\n  targetSeconds: number;\n  restSeconds: number;\n  isOverflow: boolean;\n  isCompleted: boolean;\n  recordedThisSide: boolean;\n  exerciseName: string;\n  exerciseShortName: string;\n  imageUrl?: string;\n  currentSet: number;\n  totalSets: number;\n}\n\nexport function TimedSet_recordedFor(set: ISet, side: ITimedSetSide): number | undefined {\n  return side === \"left\" ? set.completedSetTimerLeft : set.completedSetTimer;\n}\n\nexport function TimedSet_withRecorded(set: ISet, side: ITimedSetSide, seconds: number): ISet {\n  return side === \"left\" ? { ...set, completedSetTimerLeft: seconds } : { ...set, completedSetTimer: seconds };\n}\n\nexport function TimedSet_sideToTime(set: ISet, isUnilateral: boolean): ITimedSetSide | undefined {\n  if (!isUnilateral) {\n    return set.completedSetTimer == null ? \"bilateral\" : undefined;\n  }\n  if (set.completedSetTimerLeft == null) {\n    return \"left\";\n  }\n  return set.completedSetTimer == null ? \"right\" : undefined;\n}\n\nexport interface ITimedSetPhaseFields {\n  setTimer?: NonNullable<IHistoryRecord[\"setTimer\"]>;\n  setTimerGetReady?: NonNullable<IHistoryRecord[\"setTimerGetReady\"]>;\n}\n\nexport function TimedSet_open(\n  progress: IHistoryRecord,\n  entryIndex: number,\n  setIndex: number,\n  settings: ISettings,\n  opts: { getReadySeconds: number; startedAt: number; nonce?: number }\n): ITimedSetPhaseFields | undefined {\n  const entry = progress.entries[entryIndex];\n  const set = entry?.sets[setIndex];\n  if (entry == null || set == null) {\n    return undefined;\n  }\n  const side = TimedSet_sideToTime(set, Exercise_getIsUnilateral(entry.exercise, settings));\n  if (side == null) {\n    return undefined;\n  }\n  const identity = { entryIndex, setIndex, setId: set.id, id: UidFactory_generateUid(8), side };\n  return opts.getReadySeconds > 0\n    ? {\n        setTimerGetReady: {\n          ...identity,\n          startedAt: opts.startedAt,\n          getReady: opts.getReadySeconds,\n          nonce: opts.nonce,\n        },\n      }\n    : { setTimer: { ...identity, startedAt: opts.startedAt, nonce: opts.nonce } };\n}\n\nexport function TimedSet_toView(\n  progress: IHistoryRecord,\n  phase: IActiveSetTimer | undefined,\n  settings: ISettings\n): ITimedSetView | undefined {\n  if (phase == null || progress.amrapModal != null) {\n    return undefined;\n  }\n  const entry = progress.entries[phase.entryIndex];\n  const set = entry?.sets[phase.setIndex];\n  if (entry == null || set == null) {\n    return undefined;\n  }\n  const exercise = Exercise_get(entry.exercise, settings.exercises);\n  return {\n    phaseId: phase.id,\n    entryIndex: phase.entryIndex,\n    setIndex: phase.setIndex,\n    setId: phase.setId,\n    stage: phase.phase,\n    side: phase.side,\n    startedAt: phase.startedAt,\n    getReadySeconds: phase.phase === \"getReady\" ? phase.getReady : 0,\n    targetSeconds: set.setTimer ?? 0,\n    restSeconds: set.timer ?? 0,\n    isOverflow: !!set.isOverflowSetTimer,\n    isCompleted: !!set.isCompleted,\n    recordedThisSide: TimedSet_recordedFor(set, phase.side) != null,\n    exerciseName: Exercise_fullName(exercise, settings),\n    exerciseShortName: exercise.name,\n    imageUrl: ExerciseImageUtils_url(exercise, \"small\", settings),\n    currentSet: entry.warmupSets.length + phase.setIndex + 1,\n    totalSets: entry.warmupSets.length + entry.sets.length,\n  };\n}\n","import { IExerciseType, IMuscle, ISettings, availableMuscles } from \"../types\";\nimport { Muscle_getAvailableMuscleGroups, Muscle_getMusclesFromScreenMuscle } from \"./muscle\";\nimport { Exercise_synergistMuscleMultipliers, Exercise_targetMuscles } from \"./exercise\";\n\nexport type IMusclePoints = Partial<Record<IMuscle, number>>;\n\nexport function UngroupedMuscles_list(settings: ISettings): IMuscle[] {\n  const grouped = new Set(\n    Muscle_getAvailableMuscleGroups(settings).flatMap((muscleGroup) =>\n      Muscle_getMusclesFromScreenMuscle(muscleGroup, settings)\n    )\n  );\n  return availableMuscles.filter((muscle) => !grouped.has(muscle));\n}\n\nexport function UngroupedMuscles_pointsPerSet(exerciseType: IExerciseType, settings: ISettings): IMusclePoints {\n  const ungrouped = new Set(UngroupedMuscles_list(settings));\n  const points: IMusclePoints = {};\n  for (const muscle of Exercise_targetMuscles(exerciseType, settings)) {\n    if (ungrouped.has(muscle)) {\n      points[muscle] = 1;\n    }\n  }\n  for (const { muscle, multiplier } of Exercise_synergistMuscleMultipliers(exerciseType, settings)) {\n    if (ungrouped.has(muscle) && points[muscle] == null) {\n      points[muscle] = multiplier;\n    }\n  }\n  return points;\n}\n\nexport function UngroupedMuscles_divide(points: IMusclePoints, divisor: number): IMusclePoints {\n  const result: IMusclePoints = {};\n  for (const muscle of Object.keys(points) as IMuscle[]) {\n    result[muscle] = divisor > 0 ? (points[muscle] ?? 0) / divisor : 0;\n  }\n  return result;\n}\n\nexport function UngroupedMuscles_add(points: IMusclePoints, perSet: IMusclePoints, times: number): IMusclePoints {\n  const result = { ...points };\n  for (const muscle of Object.keys(perSet) as IMuscle[]) {\n    result[muscle] = (result[muscle] ?? 0) + (perSet[muscle] ?? 0) * times;\n  }\n  return result;\n}\n","/**\n * VersionTracker - A field-level version tracking system for JavaScript objects\n *\n * This module provides a generic, configurable version tracking system that records\n * timestamps for individual field changes within complex object hierarchies. It's\n * designed to support conflict resolution in distributed systems where multiple\n * clients may modify the same data offline.\n *\n * ## Core Concepts:\n *\n * ### 1. Atomic Objects\n * Objects that are versioned as a single unit. When any property of an atomic\n * object changes, the entire object gets a single version timestamp. This is\n * useful for objects that should be treated as indivisible units.\n *\n * Example: A \"history_record\" might be atomic because all its fields (date,\n * exercises, sets) should be synced together as one cohesive workout session.\n *\n * ### 2. Controlled Objects\n * Objects where only specific fields are versioned. This allows fine-grained\n * control over which properties trigger version updates. Useful for objects\n * where some fields are critical for sync while others are local-only or\n * computed.\n *\n * Example: A \"program\" might have controlled fields like \"name\" and \"nextDay\"\n * that need versioning, while fields like \"description\" might not need tracking.\n *\n * ### 3. Regular Objects\n * Objects that aren't atomic or controlled have each field versioned\n * independently. This provides maximum granularity for conflict resolution.\n *\n * ### 4. Collections (Arrays and Dictionaries)\n * Arrays and dictionary objects containing items with IDs are treated specially.\n * The tracker maintains an \"items\" map (ID -> version) and a \"deleted\" map\n * (ID -> deletion timestamp) to handle additions, updates, and deletions.\n *\n * ## How It Works:\n *\n * 1. **Initialization**: Create a VersionTracker with configuration specifying\n *    atomic types, controlled types, their ID fields, and dictionary paths.\n *\n * 2. **Version Tracking**: Call updateVersions() with old and new objects to\n *    generate a version tree that mirrors the object structure but contains\n *    timestamps instead of values.\n *\n * 3. **Conflict Resolution**: Use the version tree to merge changes from\n *    multiple sources by comparing timestamps - newer timestamps win.\n *\n * ## Usage Example:\n *\n * ```typescript\n * // Define your configuration\n * const config: IVersionTypes<MyAtomicType, MyControlledType> = {\n *   atomicTypes: [\"history_record\", \"user_preference\"],\n *   controlledTypes: [\"program\", \"exercise\"],\n *   typeIdMapping: {\n *     \"history_record\": \"id\",\n *     \"program\": \"id\",\n *     \"exercise\": \"name\"\n *   },\n *   controlledFields: {\n *     \"program\": [\"name\", \"nextDay\"],\n *     \"exercise\": [\"sets\", \"reps\"]\n *   },\n *   dictionaryFields: [\"settings.exercises\", \"users.preferences\"]\n * };\n *\n * // Create tracker instance\n * const tracker = new VersionTracker(config);\n *\n * // Track changes\n * const oldState = { name: \"John\", age: 30, settings: { theme: \"dark\" } };\n * const newState = { name: \"John\", age: 31, settings: { theme: \"light\" } };\n * const versions = tracker.updateVersions(oldState, newState, {}, Date.now());\n * // Result: { age: 1234567890, settings: { theme: 1234567890 } }\n * ```\n */\nimport { IVersionTypes, IVersions } from \"./versionTracker/types\";\nimport { VersionTrackerDiffVersions } from \"./versionTracker/versionTrackerDiffVersions\";\nimport { VersionTrackerExtractByVersions } from \"./versionTracker/versionTrackerExtractByVersions\";\nimport { VersionTrackerFillVersions } from \"./versionTracker/versionTrackerFillVersions\";\nimport { VersionTrackerMergeByVersions } from \"./versionTracker/versionTrackerMergeByVersions\";\nimport { VersionTrackerMergeVersions } from \"./versionTracker/versionTrackerMergeVersions\";\nimport { VersionTrackerUpdateVersions } from \"./versionTracker/versionTrackerUpdateVersions\";\n\nexport * from \"./versionTracker/types\";\n\nexport class VersionTracker<TAtomicType extends string, TControlledType extends string> {\n  private readonly versionTypes: IVersionTypes<TAtomicType, TControlledType>;\n  private readonly deviceId: string;\n\n  // A tracker acts on behalf of exactly one writer, and it has to be told which. When this was\n  // optional, any construction that left it out minted bare timestamps instead of vector clocks -\n  // which zeroed every device's counter and silently rolled a user's program back seven weeks.\n  constructor(versionTypes: IVersionTypes<TAtomicType, TControlledType>, options: { deviceId: string }) {\n    this.versionTypes = versionTypes;\n    this.deviceId = options.deviceId;\n  }\n\n  public updateVersions<T extends Record<string, unknown>>(\n    oldObj: T,\n    newObj: T,\n    currentVersions: IVersions<T>,\n    newVersions: IVersions<T>,\n    timestamp: number\n  ): IVersions<T> {\n    return new VersionTrackerUpdateVersions(this.versionTypes, this.deviceId).run(\n      oldObj,\n      newObj,\n      currentVersions,\n      newVersions,\n      timestamp\n    );\n  }\n\n  public fillVersions<T extends Record<string, unknown>>(\n    fullObj: T,\n    versions: IVersions<T>,\n    timestamp: number\n  ): IVersions<T> {\n    return new VersionTrackerFillVersions(this.versionTypes, this.deviceId).run(fullObj, versions, timestamp);\n  }\n\n  public diffVersions<T>(oldVersions: IVersions<T> | undefined, newVersions: IVersions<T>): IVersions<T> | undefined {\n    return new VersionTrackerDiffVersions().run(oldVersions, newVersions);\n  }\n\n  public extractByVersions<T extends Record<string, unknown>>(obj: T, versionsDiff: IVersions<T>): Partial<T> {\n    return new VersionTrackerExtractByVersions(this.versionTypes).run(obj, versionsDiff);\n  }\n\n  public mergeByVersions<T extends Record<string, unknown>>(\n    fullObj: T,\n    fullVersions: IVersions<T>,\n    versionDiff: IVersions<T>,\n    extractedObj: Partial<T>\n  ): T {\n    return new VersionTrackerMergeByVersions(this.versionTypes).run(fullObj, fullVersions, versionDiff, extractedObj);\n  }\n\n  public mergeVersions<T>(fullVersions: IVersions<T>, versionDiff: IVersions<T>): IVersions<T> {\n    return new VersionTrackerMergeVersions(this.versionTypes).run(fullVersions, versionDiff);\n  }\n}\n","export interface IVectorClock {\n  vc: { [deviceId: string]: number };\n  t: number;\n}\n\nexport interface IIdVersion extends IVectorClock {\n  value: string;\n}\n\nexport type IFieldVersion = number | IVectorClock | IIdVersion;\n\nexport interface IVersionsObject {\n  [key: string]: IVersionValue | undefined;\n}\n\nexport type IVersionValue = IFieldVersion | IVersionsObject | ICollectionVersions;\n\nexport type IVersions<T> = {\n  [K in keyof T & string]?: IVersionValue;\n};\n\nexport interface ICollectionVersions {\n  items?: Record<string, IVersionsObject | IFieldVersion>;\n  deleted?: Record<string, number>;\n  nukedeleted?: number;\n}\n\nexport type ITypedObject<T extends string = string> = { vtype: T } & Record<string, unknown>;\n\nexport interface IVersionTypes<TAtomicType extends string, TControlledType extends string> {\n  atomicTypes: readonly TAtomicType[];\n  controlledTypes: readonly TControlledType[];\n  typeIdMapping: Record<TAtomicType | TControlledType, string>;\n  controlledFields: Record<TControlledType, readonly string[]>;\n  excludedFields?: Partial<Record<TControlledType, readonly string[]>>;\n  dictionaryFields: readonly string[];\n  compactionThresholds?: Record<string, number>;\n  typeValidators?: Partial<Record<TControlledType, { is: (u: unknown) => boolean }>>;\n}\n\nexport function isVectorClock(v: unknown): v is IVectorClock {\n  return typeof v === \"object\" && v !== null && \"vc\" in v && \"t\" in v;\n}\n\nexport function isIdVersion(v: unknown): v is IIdVersion {\n  return isVectorClock(v) && \"value\" in v && typeof (v as IIdVersion).value === \"string\";\n}\n\nexport function isFieldVersion(v: unknown): v is IFieldVersion {\n  return typeof v === \"number\" || isVectorClock(v);\n}\n\nexport function isCollectionVersions(v: unknown): v is ICollectionVersions {\n  return v !== null && typeof v === \"object\" && (\"items\" in v || \"deleted\" in v);\n}\n\nexport function isVersionsObject(v: unknown): v is IVersionsObject {\n  return v !== null && typeof v === \"object\" && !isCollectionVersions(v) && !isFieldVersion(v);\n}\n","import { ObjectUtils_isEqual } from \"../../utils/object\";\nimport {\n  IVersionTypes,\n  ITypedObject,\n  IFieldVersion,\n  IVectorClock,\n  IIdVersion,\n  IVersionsObject,\n  IVersionValue,\n  IVersions,\n  ICollectionVersions,\n  isVectorClock,\n  isIdVersion,\n  isCollectionVersions,\n  isVersionsObject,\n} from \"./types\";\n\nexport function VersionTrackerUtils_isAtomicType<TAtomicType extends string, TControlledType extends string>(\n  value: unknown,\n  versionTypes: IVersionTypes<TAtomicType, TControlledType>\n): value is ITypedObject<TAtomicType> {\n  return VersionTrackerUtils_isTypedObject(value) && versionTypes.atomicTypes.includes(value.vtype as TAtomicType);\n}\n\nexport function VersionTrackerUtils_isControlledType<TAtomicType extends string, TControlledType extends string>(\n  value: unknown,\n  versionTypes: IVersionTypes<TAtomicType, TControlledType>\n): value is ITypedObject<TControlledType> {\n  return (\n    VersionTrackerUtils_isTypedObject(value) && versionTypes.controlledTypes.includes(value.vtype as TControlledType)\n  );\n}\n\nexport function VersionTrackerUtils_isTypedObject(value: unknown): value is ITypedObject {\n  return typeof value === \"object\" && value !== null && \"vtype\" in value && typeof value.vtype === \"string\";\n}\n\nexport function VersionTrackerUtils_isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null;\n}\n\nexport function VersionTrackerUtils_areEqual(a: unknown, b: unknown): boolean {\n  return ObjectUtils_isEqual(a as Record<string, unknown>, b as Record<string, unknown>);\n}\n\nexport function VersionTrackerUtils_getId<TAtomicType extends string, TControlledType extends string>(\n  obj: unknown,\n  versionTypes: IVersionTypes<TAtomicType, TControlledType>\n): string | undefined {\n  if (!VersionTrackerUtils_isTypedObject(obj)) {\n    return undefined;\n  }\n  const idField = versionTypes.typeIdMapping[obj.vtype as TAtomicType | TControlledType];\n  if (!idField || !(idField in obj)) {\n    return undefined;\n  }\n  const id = obj[idField];\n  return id != null ? String(id) : undefined;\n}\n\nexport function VersionTrackerUtils_asVersionsObject<T>(versions: IVersions<T>): IVersionsObject {\n  return versions as IVersionsObject;\n}\n\nexport function VersionTrackerUtils_ensureVersionsObject(version: IVersionValue | undefined): IVersionsObject {\n  if (isVersionsObject(version)) {\n    return version;\n  }\n  return {};\n}\n\nexport function VersionTrackerUtils_ensureCollectionVersions(version: IVersionValue | undefined): ICollectionVersions {\n  if (isCollectionVersions(version)) {\n    return version;\n  }\n  return { items: {}, deleted: {} };\n}\n\nexport function VersionTrackerUtils_createVersion(\n  timestamp: number,\n  currentVersion: IFieldVersion | undefined,\n  deviceId: string\n): IFieldVersion {\n  // This helper can no longer emit a bare timestamp, and that is the point: minting one zeroed every\n  // device's counter, so the next write restarted that device at 1 while a replica dormant since\n  // before the reset still held a higher count for the same node - and then won every later merge\n  // outright. Only an empty string reaches the fallback, and a node named \"\" would collide across\n  // writers.\n  const node = deviceId || VersionTrackerUtils_SERVER_DEVICE_ID;\n  const current = VersionTrackerUtils_normalizeVersion(currentVersion);\n  const newClock = { ...current.vc };\n  newClock[node] = (newClock[node] || 0) + 1;\n\n  return {\n    vc: newClock,\n    t: timestamp,\n  };\n}\n\nexport function VersionTrackerUtils_normalizeVersion(version?: IFieldVersion): IVectorClock {\n  if (!version) {\n    return { vc: {}, t: 0 };\n  }\n  if (isVectorClock(version)) {\n    return version;\n  }\n  return { vc: {}, t: version };\n}\n\nexport function VersionTrackerUtils_compareVersions(\n  a: IFieldVersion,\n  b: IFieldVersion\n): \"a_newer\" | \"b_newer\" | \"concurrent\" | \"equal\" {\n  const aNorm = VersionTrackerUtils_normalizeVersion(a);\n  const bNorm = VersionTrackerUtils_normalizeVersion(b);\n\n  const aDevices = Object.keys(aNorm.vc);\n  const bDevices = Object.keys(bNorm.vc);\n  const aHasVc = aDevices.length > 0;\n  const bHasVc = bDevices.length > 0;\n\n  if (aHasVc !== bHasVc) {\n    if (aNorm.t === bNorm.t) {\n      return \"equal\";\n    }\n    return aNorm.t > bNorm.t ? \"a_newer\" : \"b_newer\";\n  }\n\n  if (!aHasVc && !bHasVc) {\n    if (aNorm.t === bNorm.t) {\n      return \"equal\";\n    }\n    return aNorm.t > bNorm.t ? \"a_newer\" : \"b_newer\";\n  }\n\n  const allDevices = new Set([...aDevices, ...bDevices]);\n  let aHasHigher = false;\n  let bHasHigher = false;\n\n  for (const deviceId of allDevices) {\n    const aCount = aNorm.vc[deviceId] || 0;\n    const bCount = bNorm.vc[deviceId] || 0;\n\n    if (aCount > bCount) {\n      aHasHigher = true;\n    }\n    if (bCount > aCount) {\n      bHasHigher = true;\n    }\n  }\n\n  if (!aHasHigher && !bHasHigher) {\n    return \"equal\";\n  }\n  if (aHasHigher && !bHasHigher) {\n    return \"a_newer\";\n  }\n  if (bHasHigher && !aHasHigher) {\n    return \"b_newer\";\n  }\n  return \"concurrent\";\n}\n\nexport function VersionTrackerUtils_mergeFieldVersions(a: IFieldVersion, b: IFieldVersion): IFieldVersion {\n  const comparison = VersionTrackerUtils_compareVersions(a, b);\n  if (comparison === \"a_newer\") {\n    return a;\n  }\n  if (comparison === \"b_newer\") {\n    return b;\n  }\n  if (comparison === \"equal\") {\n    return a;\n  }\n\n  const aNorm = VersionTrackerUtils_normalizeVersion(a);\n  const bNorm = VersionTrackerUtils_normalizeVersion(b);\n\n  const allDevices = new Set([...Object.keys(aNorm.vc), ...Object.keys(bNorm.vc)]);\n  const mergedVc: { [deviceId: string]: number } = {};\n\n  for (const deviceId of allDevices) {\n    mergedVc[deviceId] = Math.max(aNorm.vc[deviceId] || 0, bNorm.vc[deviceId] || 0);\n  }\n\n  return {\n    vc: mergedVc,\n    t: Math.max(aNorm.t, bNorm.t),\n  };\n}\n\nexport function VersionTrackerUtils_incrementNukedeleted(collection: ICollectionVersions): ICollectionVersions {\n  if (collection.nukedeleted == null) {\n    return collection;\n  }\n  const next = collection.nukedeleted + 1;\n  if (next > VersionTrackerUtils_NUKEDELETED_THRESHOLD) {\n    const { nukedeleted, ...rest } = collection;\n    return rest;\n  }\n  return { ...collection, nukedeleted: next };\n}\n\nexport function VersionTrackerUtils_applyCompaction<TAtomicType extends string, TControlledType extends string>(\n  collection: ICollectionVersions,\n  path: string,\n  currentTimestamp: number,\n  versionTypes: IVersionTypes<TAtomicType, TControlledType>\n): ICollectionVersions {\n  const threshold = path && versionTypes.compactionThresholds ? versionTypes.compactionThresholds[path] : undefined;\n\n  if (!threshold || !collection.deleted || Object.keys(collection.deleted).length === 0) {\n    return collection;\n  }\n\n  const result: ICollectionVersions = {\n    items: collection.items,\n    deleted: {},\n  };\n\n  for (const [key, deletionTimestamp] of Object.entries(collection.deleted)) {\n    if (currentTimestamp - deletionTimestamp < threshold) {\n      result.deleted![key] = deletionTimestamp;\n    }\n  }\n\n  return result;\n}\n\nexport function VersionTrackerUtils_getIdFieldName<TAtomicType extends string, TControlledType extends string>(\n  vtype: TControlledType,\n  versionTypes: IVersionTypes<TAtomicType, TControlledType>\n): string | undefined {\n  return versionTypes.typeIdMapping[vtype];\n}\n\nexport function VersionTrackerUtils_createIdVersion(\n  timestamp: number,\n  value: string,\n  currentVersion: IIdVersion | undefined,\n  deviceId: string\n): IIdVersion {\n  // Reusing the current clock unchanged made this write compare \"equal\" to the one it replaces, so a\n  // merge kept the other side and the change was silently dropped. Always claim a node instead.\n  const node = deviceId || VersionTrackerUtils_SERVER_DEVICE_ID;\n  const current = currentVersion ? { vc: currentVersion.vc, t: currentVersion.t } : { vc: {}, t: 0 };\n  const newClock = { ...current.vc };\n  newClock[node] = (newClock[node] || 0) + 1;\n\n  return {\n    vc: newClock,\n    t: timestamp,\n    value,\n  };\n}\n\nexport function VersionTrackerUtils_pickWinningIdVersion(a: IIdVersion, b: IIdVersion): IIdVersion {\n  const comparison = VersionTrackerUtils_compareVersions(a, b);\n  if (comparison === \"a_newer\") {\n    return a;\n  }\n  if (comparison === \"b_newer\") {\n    return b;\n  }\n  // For concurrent or equal, use timestamp as tiebreaker\n  return a.t >= b.t ? a : b;\n}\n\nexport function VersionTrackerUtils_getIdValue<TAtomicType extends string, TControlledType extends string>(\n  obj: unknown,\n  versionTypes: IVersionTypes<TAtomicType, TControlledType>\n): string | undefined {\n  if (!VersionTrackerUtils_isControlledType(obj, versionTypes)) {\n    return undefined;\n  }\n  const idField = versionTypes.typeIdMapping[obj.vtype];\n  if (!idField || !(idField in obj)) {\n    return undefined;\n  }\n  const id = obj[idField];\n  return id != null ? String(id) : undefined;\n}\n\nexport function VersionTrackerUtils_getIdVersionFromVersions<\n  TAtomicType extends string,\n  TControlledType extends string,\n>(\n  vtype: TControlledType,\n  versions: IVersionsObject | undefined,\n  versionTypes: IVersionTypes<TAtomicType, TControlledType>\n): IIdVersion | undefined {\n  if (!versions) {\n    return undefined;\n  }\n  const idField = versionTypes.typeIdMapping[vtype];\n  if (!idField) {\n    return undefined;\n  }\n  const idVersion = versions[idField];\n  return isIdVersion(idVersion) ? idVersion : undefined;\n}\n\nexport const VersionTrackerUtils_NUKEDELETED_THRESHOLD = 3;\n\n// Server-side writes have no client device to attribute to, but they still have to claim a node in the\n// vector clock rather than erase it. One shared id is correct here: every server write serializes through\n// a read-modify-write of the user's stored storage, so the server behaves as a single replica.\nexport const VersionTrackerUtils_SERVER_DEVICE_ID = \"srv_api\";\n\n// A sync from a client that sent no device id. Rejecting it would break installs that predate the\n// client-side fix, so they share one node - no worse than the bare timestamps they write today, and it\n// at least preserves the clock. The server logs every use, so this can become a hard 400 once it drains.\nexport const VersionTrackerUtils_UNIDENTIFIED_DEVICE_ID = \"unk_client\";\n","import { ObjectUtils_keys } from \"../../utils/object\";\nimport { SetUtils_areEqual } from \"../../utils/setUtils\";\nimport {\n  IVersions,\n  IVersionsObject,\n  IVersionValue,\n  ICollectionVersions,\n  isFieldVersion,\n  isCollectionVersions,\n  isVersionsObject,\n} from \"./types\";\nimport { VersionTrackerUtils_compareVersions } from \"./utils\";\n\nexport class VersionTrackerDiffVersions {\n  public run<T>(oldVersions: IVersions<T> | undefined, newVersions: IVersions<T>): IVersions<T> | undefined {\n    const diff: IVersions<T> = {};\n    let hasChanges = false;\n\n    for (const key of ObjectUtils_keys(newVersions)) {\n      const oldVersion = oldVersions?.[key];\n      const newVersion = newVersions[key];\n\n      const fieldDiff = this.diffFieldVersion(oldVersion, newVersion);\n      if (fieldDiff != null) {\n        diff[key] = fieldDiff;\n        hasChanges = true;\n      }\n    }\n\n    return hasChanges ? diff : undefined;\n  }\n\n  private diffFieldVersion(\n    oldVersion: IVersionValue | undefined,\n    newVersion: IVersionValue | undefined\n  ): IVersionValue | undefined {\n    if (isFieldVersion(oldVersion) && isFieldVersion(newVersion)) {\n      const comparison = VersionTrackerUtils_compareVersions(oldVersion, newVersion);\n      return comparison === \"equal\" ? undefined : newVersion;\n    }\n\n    if (isFieldVersion(newVersion) && !isFieldVersion(oldVersion)) {\n      return newVersion;\n    }\n\n    if (isCollectionVersions(newVersion)) {\n      const oldCollection = isCollectionVersions(oldVersion) ? oldVersion : undefined;\n      const diffCollection: ICollectionVersions = { items: {} };\n      let hasChanges = false;\n\n      const oldDeletedKeys = new Set(Object.keys(oldCollection?.deleted || {}));\n      const newDeletedKeys = new Set(Object.keys(newVersion.deleted || {}));\n      if (!SetUtils_areEqual(oldDeletedKeys, newDeletedKeys)) {\n        hasChanges = true;\n      }\n      diffCollection.deleted = { ...(oldCollection?.deleted || {}), ...(newVersion.deleted || {}) };\n      for (const id in newVersion.items) {\n        if (diffCollection.deleted && id in diffCollection.deleted) {\n          continue;\n        }\n        const oldItemVersion = oldCollection?.items?.[id];\n        const newItemVersion = newVersion.items[id];\n\n        const itemDiff = this.diffFieldVersion(oldItemVersion, newItemVersion);\n        if (itemDiff != null && !isCollectionVersions(itemDiff)) {\n          diffCollection.items = diffCollection.items || {};\n          diffCollection.items[id] = itemDiff;\n          hasChanges = true;\n        }\n      }\n\n      return hasChanges ? diffCollection : undefined;\n    }\n\n    if (isVersionsObject(newVersion)) {\n      const oldObj = isVersionsObject(oldVersion) ? oldVersion : undefined;\n      const diffObj: IVersionsObject = {};\n      let hasChanges = false;\n\n      for (const key of Object.keys(newVersion)) {\n        const fieldDiff = this.diffFieldVersion(oldObj?.[key], newVersion[key]);\n        if (fieldDiff != null) {\n          diffObj[key] = fieldDiff;\n          hasChanges = true;\n        }\n      }\n\n      return hasChanges ? diffObj : undefined;\n    }\n\n    return undefined;\n  }\n}\n","import { ObjectUtils_keys } from \"../../utils/object\";\nimport {\n  IVersionTypes,\n  IVersions,\n  IVersionValue,\n  IVersionsObject,\n  ICollectionVersions,\n  isFieldVersion,\n  isCollectionVersions,\n  isVersionsObject,\n} from \"./types\";\nimport { VersionTrackerUtils_isRecord, VersionTrackerUtils_isControlledType, VersionTrackerUtils_getId } from \"./utils\";\n\nexport class VersionTrackerExtractByVersions<TAtomicType extends string, TControlledType extends string> {\n  private readonly versionTypes: IVersionTypes<TAtomicType, TControlledType>;\n\n  constructor(versionTypes: IVersionTypes<TAtomicType, TControlledType>) {\n    this.versionTypes = versionTypes;\n  }\n\n  public run<T extends Record<string, unknown>>(obj: T, versionsDiff: IVersions<T>): Partial<T> {\n    const result: Partial<T> = {};\n\n    for (const key of ObjectUtils_keys(versionsDiff)) {\n      const version = versionsDiff[key];\n      const value = obj[key];\n\n      if (value != null) {\n        const extractedValue = this.extractFieldByVersion(value, version);\n        if (extractedValue != null) {\n          result[key] = extractedValue as T[typeof key];\n        }\n      }\n    }\n\n    return result;\n  }\n\n  private extractFieldByVersion(value: unknown, version: IVersionValue | undefined): unknown {\n    if (isFieldVersion(version)) {\n      return value;\n    }\n\n    if (isCollectionVersions(version)) {\n      return this.extractCollectionByVersion(value, version);\n    }\n\n    if (isVersionsObject(version) && VersionTrackerUtils_isRecord(value)) {\n      if (VersionTrackerUtils_isControlledType(value, this.versionTypes)) {\n        return this.extractControlledTypeByVersion(value, version);\n      }\n\n      return this.run(value, version);\n    }\n\n    return value;\n  }\n\n  private extractControlledTypeByVersion(value: Record<string, unknown>, version: IVersionsObject): unknown {\n    const vtype = value.vtype as TControlledType;\n    const controlledFields = this.versionTypes.controlledFields[vtype] || [];\n    const excludedFields = this.versionTypes.excludedFields?.[vtype] || [];\n    const excludedFieldsSet = new Set(excludedFields);\n\n    const hasControlledFieldChange = controlledFields.some((field) => version[field] != null);\n\n    if (!hasControlledFieldChange) {\n      return undefined;\n    }\n\n    const result: Record<string, unknown> = {};\n    for (const key of Object.keys(value)) {\n      if (!excludedFieldsSet.has(key)) {\n        result[key] = value[key];\n      }\n    }\n    return result;\n  }\n\n  private extractCollectionByVersion(value: unknown, collectionVersion: ICollectionVersions): unknown {\n    const hasItemChanges = Object.keys(collectionVersion.items || {}).length > 0;\n    const hasDeletions = Object.keys(collectionVersion.deleted || {}).length > 0;\n    const hasChanges = hasItemChanges || hasDeletions;\n\n    if (!hasChanges) {\n      return undefined;\n    }\n\n    if (Array.isArray(value)) {\n      const result: unknown[] = [];\n\n      for (const item of value) {\n        const itemId = VersionTrackerUtils_getId(item, this.versionTypes);\n        if (itemId && itemId in (collectionVersion.items || {})) {\n          const itemVersion = collectionVersion.items![itemId];\n          if (typeof itemVersion === \"object\" && VersionTrackerUtils_isRecord(item)) {\n            const extracted = this.extractFieldByVersion(item, itemVersion);\n            if (extracted != null) {\n              result.push(extracted);\n            }\n          } else {\n            result.push(item);\n          }\n        }\n      }\n\n      // Return the array even if empty - deletions are still changes\n      return result;\n    } else if (VersionTrackerUtils_isRecord(value)) {\n      const result: Record<string, unknown> = {};\n\n      for (const key in collectionVersion.items) {\n        if (key in value) {\n          const itemVersion = collectionVersion.items[key];\n          const itemValue = value[key];\n\n          if (typeof itemVersion === \"object\" && VersionTrackerUtils_isRecord(itemValue)) {\n            const extracted = this.extractFieldByVersion(itemValue, itemVersion);\n            if (extracted != null) {\n              result[key] = extracted;\n            }\n          } else {\n            result[key] = itemValue;\n          }\n        }\n      }\n\n      // Return the object even if empty - deletions are still changes\n      return result;\n    }\n\n    return undefined;\n  }\n}\n","import { ObjectUtils_keys } from \"../../utils/object\";\nimport {\n  IVersionTypes,\n  ITypedObject,\n  IFieldVersion,\n  IVersionsObject,\n  IVersionValue,\n  IVersions,\n  isFieldVersion,\n  isCollectionVersions,\n  isIdVersion,\n} from \"./types\";\nimport {\n  VersionTrackerUtils_asVersionsObject,\n  VersionTrackerUtils_getId,\n  VersionTrackerUtils_ensureCollectionVersions,\n  VersionTrackerUtils_isControlledType,\n  VersionTrackerUtils_createVersion,\n  VersionTrackerUtils_isRecord,\n  VersionTrackerUtils_isAtomicType,\n  VersionTrackerUtils_ensureVersionsObject,\n  VersionTrackerUtils_getIdFieldName,\n  VersionTrackerUtils_getIdValue,\n  VersionTrackerUtils_createIdVersion,\n} from \"./utils\";\n\nexport class VersionTrackerFillVersions<TAtomicType extends string, TControlledType extends string> {\n  private readonly versionTypes: IVersionTypes<TAtomicType, TControlledType>;\n  private readonly deviceId: string;\n\n  constructor(versionTypes: IVersionTypes<TAtomicType, TControlledType>, deviceId: string) {\n    this.versionTypes = versionTypes;\n    this.deviceId = deviceId;\n  }\n\n  public run<T extends Record<string, unknown>>(fullObj: T, versions: IVersions<T>, timestamp: number): IVersions<T> {\n    const result = { ...versions };\n    const resultObj = VersionTrackerUtils_asVersionsObject(result);\n    const keys = ObjectUtils_keys(fullObj).filter((key) => key !== \"_versions\");\n\n    for (const field of keys) {\n      const value = fullObj[field];\n\n      if (value == null) {\n        continue;\n      }\n\n      const fieldStr = field as string;\n      const currentVersion = resultObj[fieldStr];\n      const filledVersion = this.fillFieldVersion(value, currentVersion, timestamp, fieldStr);\n\n      if (filledVersion !== undefined) {\n        resultObj[fieldStr] = filledVersion;\n      }\n    }\n\n    return result;\n  }\n\n  private fillFieldVersion(\n    value: unknown,\n    currentVersion: IVersionValue | undefined,\n    timestamp: number,\n    path: string\n  ): IVersionValue | undefined {\n    if (isFieldVersion(currentVersion)) {\n      return currentVersion;\n    }\n\n    if (Array.isArray(value)) {\n      const hasTrackableItems = value.some((item) => VersionTrackerUtils_getId(item, this.versionTypes) !== undefined);\n\n      if (hasTrackableItems) {\n        const collectionVersions = VersionTrackerUtils_ensureCollectionVersions(currentVersion);\n        const items = { ...(collectionVersions.items || {}) };\n\n        for (const item of value) {\n          const itemId = VersionTrackerUtils_getId(item, this.versionTypes);\n          if (itemId && !(itemId in items)) {\n            const itemPath = `${path}.items.${itemId}`;\n            const itemVersion = this.getInitialItemVersion(item, timestamp, itemPath);\n            if (itemVersion !== undefined) {\n              items[itemId] = itemVersion;\n            }\n          } else if (itemId && items[itemId] && !isFieldVersion(items[itemId])) {\n            const itemPath = `${path}.items.${itemId}`;\n            if (VersionTrackerUtils_isControlledType(item, this.versionTypes)) {\n              const filledItemVersion = this.fillControlledObjectVersion(item, items[itemId], timestamp, itemPath);\n              if (filledItemVersion !== undefined) {\n                items[itemId] = filledItemVersion;\n              }\n            } else {\n              const filledItemVersion = this.fillFieldVersion(item, items[itemId], timestamp, itemPath);\n              if (filledItemVersion !== undefined && !isCollectionVersions(filledItemVersion)) {\n                items[itemId] = filledItemVersion;\n              }\n            }\n          }\n        }\n\n        return { ...collectionVersions, items };\n      } else {\n        return currentVersion !== undefined\n          ? currentVersion\n          : VersionTrackerUtils_createVersion(timestamp, undefined, this.deviceId);\n      }\n    } else if (VersionTrackerUtils_isRecord(value)) {\n      if (this.versionTypes.dictionaryFields.includes(path)) {\n        const collectionVersions = VersionTrackerUtils_ensureCollectionVersions(currentVersion);\n        const items = { ...(collectionVersions.items || {}) };\n        const dictValue = value;\n\n        for (const [key, item] of Object.entries(dictValue)) {\n          if (!(key in items)) {\n            const itemPath = `${path}.items.${key}`;\n            const itemVersion = this.getInitialItemVersion(item, timestamp, itemPath);\n            if (itemVersion !== undefined) {\n              items[key] = itemVersion;\n            }\n          } else if (items[key] && !isFieldVersion(items[key])) {\n            const itemPath = `${path}.items.${key}`;\n            if (VersionTrackerUtils_isControlledType(item, this.versionTypes)) {\n              const filledItemVersion = this.fillControlledObjectVersion(item, items[key], timestamp, itemPath);\n              if (filledItemVersion !== undefined) {\n                items[key] = filledItemVersion;\n              }\n            } else {\n              const filledItemVersion = this.fillFieldVersion(item, items[key], timestamp, itemPath);\n              if (filledItemVersion !== undefined && !isCollectionVersions(filledItemVersion)) {\n                items[key] = filledItemVersion;\n              }\n            }\n          }\n        }\n\n        return { ...collectionVersions, items };\n      } else if (VersionTrackerUtils_isControlledType(value, this.versionTypes)) {\n        return this.fillControlledObjectVersion(value, currentVersion, timestamp, path);\n      } else if (VersionTrackerUtils_isAtomicType(value, this.versionTypes)) {\n        return currentVersion !== undefined\n          ? currentVersion\n          : VersionTrackerUtils_createVersion(timestamp, undefined, this.deviceId);\n      } else {\n        const nestedVersions = this.fillNestedVersions(\n          value,\n          VersionTrackerUtils_ensureVersionsObject(currentVersion),\n          timestamp,\n          path\n        );\n        return nestedVersions;\n      }\n    } else {\n      return currentVersion !== undefined\n        ? currentVersion\n        : VersionTrackerUtils_createVersion(timestamp, undefined, this.deviceId);\n    }\n  }\n\n  private getInitialItemVersion(\n    item: unknown,\n    timestamp: number,\n    path: string = \"\"\n  ): IVersionsObject | IFieldVersion | undefined {\n    if (VersionTrackerUtils_isAtomicType(item, this.versionTypes)) {\n      return VersionTrackerUtils_createVersion(timestamp, undefined, this.deviceId);\n    } else if (VersionTrackerUtils_isControlledType(item, this.versionTypes)) {\n      return this.fillControlledObjectVersion(item, undefined, timestamp, path);\n    } else if (VersionTrackerUtils_isRecord(item)) {\n      return this.fillNestedVersions(item, {}, timestamp, path);\n    } else {\n      return VersionTrackerUtils_createVersion(timestamp, undefined, this.deviceId);\n    }\n  }\n\n  private fillControlledObjectVersion(\n    value: ITypedObject<TControlledType>,\n    currentVersion: IVersionValue | undefined,\n    timestamp: number,\n    path: string\n  ): IVersionsObject | undefined {\n    const controlledFields = this.versionTypes.controlledFields[value.vtype] || [];\n    const fieldVersions = VersionTrackerUtils_ensureVersionsObject(currentVersion);\n\n    const result: IVersionsObject = { ...fieldVersions };\n\n    // Fill ID version if not present\n    const idField = VersionTrackerUtils_getIdFieldName(value.vtype, this.versionTypes);\n    if (idField && !isIdVersion(result[idField])) {\n      const idValue = VersionTrackerUtils_getIdValue(value, this.versionTypes);\n      if (idValue != null) {\n        result[idField] = VersionTrackerUtils_createIdVersion(timestamp, idValue, undefined, this.deviceId);\n      }\n    }\n\n    // If we already have controlled field versions (besides ID), return existing\n    const existingFields = Object.keys(result).filter((k) => k !== idField);\n    if (existingFields.length > 0) {\n      return result;\n    }\n\n    for (const controlledField of controlledFields) {\n      const fieldValue = value[controlledField];\n      if (fieldValue != null && !(controlledField in result)) {\n        const fieldPath = path ? `${path}.${controlledField}` : controlledField;\n        const filledVersion = this.fillControlledFieldVersion(fieldValue, timestamp, fieldPath);\n        if (filledVersion != null) {\n          result[controlledField] = filledVersion;\n        }\n      }\n    }\n\n    return Object.keys(result).length > 0 ? result : undefined;\n  }\n\n  private fillControlledFieldVersion(value: unknown, timestamp: number, path: string): IVersionValue | undefined {\n    if (Array.isArray(value)) {\n      const hasTrackableItems = value.some((item) => VersionTrackerUtils_getId(item, this.versionTypes) !== undefined);\n      if (hasTrackableItems) {\n        const items: Record<string, IVersionsObject | IFieldVersion> = {};\n        for (const item of value) {\n          const itemId = VersionTrackerUtils_getId(item, this.versionTypes);\n          if (itemId) {\n            const itemPath = `${path}.items.${itemId}`;\n            const itemVersion = this.getInitialItemVersion(item, timestamp, itemPath);\n            if (itemVersion != null) {\n              items[itemId] = itemVersion;\n            }\n          }\n        }\n        return { items };\n      }\n    }\n\n    if (VersionTrackerUtils_isRecord(value)) {\n      if (this.versionTypes.dictionaryFields.includes(path)) {\n        const items: Record<string, IVersionsObject | IFieldVersion> = {};\n        for (const [key, item] of Object.entries(value)) {\n          const itemPath = `${path}.items.${key}`;\n          const itemVersion = this.getInitialItemVersion(item, timestamp, itemPath);\n          if (itemVersion != null) {\n            items[key] = itemVersion;\n          }\n        }\n        return { items };\n      }\n      if (VersionTrackerUtils_isControlledType(value, this.versionTypes)) {\n        return this.fillControlledObjectVersion(value, undefined, timestamp, path);\n      }\n      if (VersionTrackerUtils_isAtomicType(value, this.versionTypes)) {\n        return VersionTrackerUtils_createVersion(timestamp, undefined, this.deviceId);\n      }\n    }\n\n    return VersionTrackerUtils_createVersion(timestamp, undefined, this.deviceId);\n  }\n\n  private fillNestedVersions(\n    obj: Record<string, unknown>,\n    currentVersions: IVersionsObject,\n    timestamp: number,\n    parentPath: string\n  ): IVersionsObject | undefined {\n    const versions: IVersionsObject = { ...currentVersions };\n    const keys = ObjectUtils_keys(obj);\n    let hasAnyVersion = false;\n\n    for (const key of keys) {\n      const value = obj[key];\n      const currentPath = parentPath ? `${parentPath}.${key}` : key;\n\n      if (value != null) {\n        const filledVersion = this.fillFieldVersion(value, versions[key], timestamp, currentPath);\n        if (filledVersion !== undefined) {\n          versions[key] = filledVersion;\n          hasAnyVersion = true;\n        }\n      }\n    }\n\n    return hasAnyVersion ? versions : undefined;\n  }\n}\n","import { CollectionUtils_uniqByExpr } from \"../../utils/collection\";\nimport {\n  IVersionTypes,\n  IFieldVersion,\n  IVersionsObject,\n  IVersionValue,\n  IVersions,\n  ICollectionVersions,\n  isFieldVersion,\n  isCollectionVersions,\n  isVersionsObject,\n} from \"./types\";\nimport {\n  VersionTrackerUtils_compareVersions,\n  VersionTrackerUtils_normalizeVersion,\n  VersionTrackerUtils_isRecord,\n  VersionTrackerUtils_isControlledType,\n  VersionTrackerUtils_getIdVersionFromVersions,\n  VersionTrackerUtils_pickWinningIdVersion,\n  VersionTrackerUtils_ensureVersionsObject,\n  VersionTrackerUtils_getId,\n} from \"./utils\";\n\nexport class VersionTrackerMergeByVersions<TAtomicType extends string, TControlledType extends string> {\n  private readonly versionTypes: IVersionTypes<TAtomicType, TControlledType>;\n\n  constructor(versionTypes: IVersionTypes<TAtomicType, TControlledType>) {\n    this.versionTypes = versionTypes;\n  }\n\n  public run<T extends Record<string, unknown>>(\n    fullObj: T,\n    fullVersions: IVersions<T>,\n    versionDiff: IVersions<T>,\n    extractedObj: Partial<T>\n  ): T {\n    let result: Record<string, unknown> | null = null;\n    const writeKey = (key: string, value: unknown): void => {\n      if (fullObj[key] === value) {\n        return;\n      }\n      if (result == null) {\n        result = { ...fullObj };\n      }\n      result[key] = value;\n    };\n    const deleteKey = (key: string): void => {\n      if (!(key in fullObj)) {\n        return;\n      }\n      if (result == null) {\n        result = { ...fullObj };\n      }\n      delete result[key];\n    };\n\n    for (const key of Object.keys(versionDiff)) {\n      const diffVersion = versionDiff[key];\n      const fullVersion = fullVersions[key];\n      const extractedValue = extractedObj[key as keyof T];\n\n      if (extractedValue !== undefined) {\n        const mergedValue = this.mergeFieldByVersion(fullObj[key], fullVersion, diffVersion, extractedValue, key);\n        if (mergedValue !== undefined) {\n          writeKey(key, mergedValue);\n        }\n      } else if (isFieldVersion(diffVersion)) {\n        if (fullVersion === undefined || !isFieldVersion(fullVersion)) {\n          deleteKey(key);\n        } else {\n          const comparison = VersionTrackerUtils_compareVersions(diffVersion, fullVersion);\n          if (comparison === \"a_newer\") {\n            deleteKey(key);\n          } else if (comparison === \"concurrent\") {\n            const diffNorm = VersionTrackerUtils_normalizeVersion(diffVersion);\n            const fullNorm = VersionTrackerUtils_normalizeVersion(fullVersion);\n            if (diffNorm.t > fullNorm.t) {\n              deleteKey(key);\n            }\n          }\n        }\n      }\n    }\n\n    return (result ?? fullObj) as T;\n  }\n\n  private mergeFieldByVersion(\n    fullValue: unknown,\n    fullVersion: IVersionValue | undefined,\n    diffVersion: IVersionValue | undefined,\n    extractedValue: unknown,\n    path: string\n  ): unknown {\n    if (isFieldVersion(diffVersion) && isFieldVersion(fullVersion)) {\n      const comparison = VersionTrackerUtils_compareVersions(diffVersion, fullVersion);\n      if (comparison === \"a_newer\") {\n        return extractedValue;\n      }\n      if (comparison === \"concurrent\") {\n        const diffNorm = VersionTrackerUtils_normalizeVersion(diffVersion);\n        const fullNorm = VersionTrackerUtils_normalizeVersion(fullVersion);\n        if (diffNorm.t > fullNorm.t) {\n          return extractedValue;\n        }\n      }\n      return fullValue;\n    }\n\n    if (diffVersion !== undefined && fullVersion === undefined) {\n      if (isCollectionVersions(diffVersion)) {\n        return this.mergeCollectionByVersion(fullValue, undefined, diffVersion, extractedValue);\n      }\n\n      if (\n        VersionTrackerUtils_isRecord(fullValue) &&\n        VersionTrackerUtils_isRecord(extractedValue) &&\n        isVersionsObject(diffVersion)\n      ) {\n        return this.run(fullValue, {}, diffVersion, extractedValue);\n      }\n      return extractedValue ?? fullValue;\n    }\n\n    if (isCollectionVersions(diffVersion)) {\n      const fullCollection = isCollectionVersions(fullVersion) ? fullVersion : undefined;\n      return this.mergeCollectionByVersion(fullValue, fullCollection, diffVersion, extractedValue);\n    }\n\n    if (isVersionsObject(diffVersion) && VersionTrackerUtils_isRecord(extractedValue)) {\n      if (VersionTrackerUtils_isControlledType(extractedValue, this.versionTypes)) {\n        const fullVersionObj = isVersionsObject(fullVersion) ? fullVersion : undefined;\n        const diffVersionObj = diffVersion;\n\n        // Get ID versions from both full and diff to determine the winner\n        const fullIdVersion = VersionTrackerUtils_getIdVersionFromVersions(\n          extractedValue.vtype,\n          fullVersionObj,\n          this.versionTypes\n        );\n        const diffIdVersion = VersionTrackerUtils_getIdVersionFromVersions(\n          extractedValue.vtype,\n          diffVersionObj,\n          this.versionTypes\n        );\n\n        // If both have ID versions with different values, determine which one wins\n        if (fullIdVersion && diffIdVersion && fullIdVersion.value !== diffIdVersion.value) {\n          const winner = VersionTrackerUtils_pickWinningIdVersion(fullIdVersion, diffIdVersion);\n          if (winner === fullIdVersion) {\n            // Full wins - keep full value, ignore extracted\n            return fullValue;\n          }\n          // Diff wins - use extracted value entirely (it's a different object)\n          return extractedValue;\n        }\n\n        const controlledFields = this.versionTypes.controlledFields[extractedValue.vtype] || [];\n        const controlledFieldSet = new Set(controlledFields);\n\n        const fullIsRecord = VersionTrackerUtils_isRecord(fullValue);\n        const fullRecord = fullIsRecord ? (fullValue as Record<string, unknown>) : undefined;\n        let mergedItem: Record<string, unknown> | null = fullIsRecord ? null : {};\n        const writeField = (field: string, value: unknown): void => {\n          if (fullRecord && fullRecord[field] === value) {\n            return;\n          }\n          if (mergedItem == null) {\n            mergedItem = { ...fullRecord };\n          }\n          mergedItem[field] = value;\n        };\n\n        for (const field in extractedValue) {\n          if (!controlledFieldSet.has(field) && (!fullRecord || !(field in fullRecord))) {\n            writeField(field, extractedValue[field]);\n          }\n        }\n\n        for (const field of controlledFields) {\n          if (field in diffVersion) {\n            const diffFieldVersion = diffVersion[field];\n            const fullFieldVersion = fullVersionObj?.[field];\n            const fullFieldValue = fullRecord ? fullRecord[field] : undefined;\n            const extractedFieldValue = extractedValue[field];\n\n            if (isFieldVersion(diffFieldVersion)) {\n              if (fullFieldVersion === undefined || !isFieldVersion(fullFieldVersion)) {\n                writeField(field, extractedFieldValue);\n              } else {\n                const comparison = VersionTrackerUtils_compareVersions(diffFieldVersion, fullFieldVersion);\n                if (comparison === \"a_newer\") {\n                  writeField(field, extractedFieldValue);\n                } else if (comparison === \"concurrent\") {\n                  const diffNorm = VersionTrackerUtils_normalizeVersion(diffFieldVersion);\n                  const fullNorm = VersionTrackerUtils_normalizeVersion(fullFieldVersion);\n                  if (diffNorm.t > fullNorm.t) {\n                    writeField(field, extractedFieldValue);\n                  }\n                }\n              }\n            } else if (isCollectionVersions(diffFieldVersion)) {\n              const fullCollection = isCollectionVersions(fullFieldVersion) ? fullFieldVersion : undefined;\n              const merged = this.mergeCollectionByVersion(\n                fullFieldValue,\n                fullCollection,\n                diffFieldVersion,\n                extractedFieldValue\n              );\n              writeField(field, merged);\n            } else if (isVersionsObject(diffFieldVersion) && VersionTrackerUtils_isRecord(extractedFieldValue)) {\n              const merged = this.mergeFieldByVersion(\n                fullFieldValue,\n                fullFieldVersion,\n                diffFieldVersion,\n                extractedFieldValue,\n                `${path}.${field}`\n              );\n              writeField(field, merged);\n            }\n          }\n        }\n\n        if (mergedItem == null) {\n          return fullValue;\n        }\n\n        const validator = this.versionTypes.typeValidators?.[extractedValue.vtype];\n        if (validator && !validator.is(mergedItem)) {\n          console.log(`[MERGE_DEBUG] Validator REJECTED merged ${extractedValue.vtype}, reverting to fullValue`);\n          return fullValue;\n        }\n\n        return mergedItem;\n      }\n\n      if (VersionTrackerUtils_isRecord(fullValue)) {\n        const fullVersionObj = VersionTrackerUtils_ensureVersionsObject(fullVersion);\n        return this.run(fullValue, fullVersionObj, diffVersion, extractedValue);\n      } else {\n        return extractedValue ?? fullValue;\n      }\n    }\n\n    return fullValue;\n  }\n\n  private mergeCollectionByVersion(\n    fullValue: unknown,\n    fullVersion: ICollectionVersions | undefined,\n    diffVersion: ICollectionVersions,\n    extractedValue: unknown\n  ): unknown {\n    const isNukeDeleted = diffVersion.nukedeleted != null || fullVersion?.nukedeleted != null;\n    const deletedKeys = isNukeDeleted\n      ? new Set()\n      : new Set<string>([\n          ...(fullVersion?.deleted ? Object.keys(fullVersion.deleted) : []),\n          ...(diffVersion.deleted ? Object.keys(diffVersion.deleted) : []),\n        ]);\n    if (Array.isArray(fullValue) && Array.isArray(extractedValue)) {\n      const dedupedFull = CollectionUtils_uniqByExpr(fullValue, (item) =>\n        VersionTrackerUtils_getId(item, this.versionTypes)\n      );\n      const dedupedExtracted = CollectionUtils_uniqByExpr(extractedValue, (item) =>\n        VersionTrackerUtils_getId(item, this.versionTypes)\n      );\n      if (dedupedExtracted.length === 0 && deletedKeys.size === 0 && dedupedFull.length === fullValue.length) {\n        return fullValue;\n      }\n      const dedupedFullById = new Map<string, unknown>();\n      for (const item of dedupedFull) {\n        const itemId = VersionTrackerUtils_getId(item, this.versionTypes);\n        if (itemId) {\n          dedupedFullById.set(itemId, item);\n        }\n      }\n      const result: unknown[] = [];\n      const processedIds = new Set<string>();\n      let allSame = true;\n      const pushItem = (item: unknown): void => {\n        const idx = result.length;\n        result.push(item);\n        if (allSame && (idx >= fullValue.length || fullValue[idx] !== item)) {\n          allSame = false;\n        }\n      };\n\n      for (const extractedItem of dedupedExtracted) {\n        const itemId = VersionTrackerUtils_getId(extractedItem, this.versionTypes);\n        if (itemId && !deletedKeys.has(itemId)) {\n          processedIds.add(itemId);\n          const diffItemVersion = diffVersion?.items?.[itemId];\n          const fullItemVersion = fullVersion?.items?.[itemId];\n          const fullItem = dedupedFullById.get(itemId);\n\n          if (\n            isVersionsObject(diffItemVersion) &&\n            isVersionsObject(fullItemVersion) &&\n            fullItem &&\n            typeof fullItem === \"object\" &&\n            typeof extractedItem === \"object\"\n          ) {\n            const mergedItem = this.mergeFieldByVersion(\n              fullItem,\n              fullItemVersion,\n              diffItemVersion,\n              extractedItem,\n              `item:${itemId}`\n            );\n            pushItem(mergedItem);\n          } else if (this.shouldTakeExtractedItem(diffItemVersion, fullItemVersion)) {\n            pushItem(extractedItem);\n          } else {\n            pushItem(fullItem ?? extractedItem);\n          }\n        }\n      }\n\n      for (const fullItem of dedupedFull) {\n        const itemId = VersionTrackerUtils_getId(fullItem, this.versionTypes);\n        if (itemId && !processedIds.has(itemId) && !deletedKeys.has(itemId)) {\n          pushItem(fullItem);\n        }\n      }\n\n      if (allSame && result.length === fullValue.length) {\n        return fullValue;\n      }\n      return result;\n    } else if (VersionTrackerUtils_isRecord(fullValue) && VersionTrackerUtils_isRecord(extractedValue)) {\n      if (Object.keys(extractedValue).length === 0 && deletedKeys.size === 0) {\n        return fullValue;\n      }\n      const fullRecord = fullValue;\n      let result: Record<string, unknown> | null = null;\n      const ensureResult = (): Record<string, unknown> => {\n        if (result == null) {\n          result = { ...fullRecord };\n          for (const dk of deletedKeys) {\n            delete result[dk as string];\n          }\n        }\n        return result;\n      };\n      for (const dk of deletedKeys) {\n        if ((dk as string) in fullRecord) {\n          ensureResult();\n          break;\n        }\n      }\n      const writeKey = (key: string, value: unknown): void => {\n        const current = result ?? fullRecord;\n        if (key in current && current[key] === value) {\n          return;\n        }\n        ensureResult()[key] = value;\n      };\n\n      for (const [key, value] of Object.entries(extractedValue)) {\n        const diffItemVersion = diffVersion?.items?.[key];\n        const fullItemVersion = fullVersion?.items?.[key];\n        const fullItem = fullRecord[key];\n\n        if (\n          isVersionsObject(diffItemVersion) &&\n          isVersionsObject(fullItemVersion) &&\n          VersionTrackerUtils_isRecord(fullItem) &&\n          VersionTrackerUtils_isRecord(value)\n        ) {\n          const mergedItem = this.mergeFieldByVersion(fullItem, fullItemVersion, diffItemVersion, value, `item:${key}`);\n          writeKey(key, mergedItem);\n        } else if (!deletedKeys.has(key) && this.shouldTakeExtractedItem(diffItemVersion, fullItemVersion)) {\n          writeKey(key, value);\n        }\n      }\n\n      return result ?? fullRecord;\n    }\n\n    return extractedValue;\n  }\n\n  private shouldTakeExtractedItem(\n    diffVersion: IVersionsObject | IFieldVersion | undefined,\n    fullVersion: IVersionsObject | IFieldVersion | undefined\n  ): boolean {\n    if (isFieldVersion(diffVersion) && isFieldVersion(fullVersion)) {\n      const comparison = VersionTrackerUtils_compareVersions(diffVersion, fullVersion);\n      if (comparison === \"a_newer\") {\n        return true;\n      }\n      if (comparison === \"concurrent\") {\n        const diffNorm = VersionTrackerUtils_normalizeVersion(diffVersion);\n        const fullNorm = VersionTrackerUtils_normalizeVersion(fullVersion);\n        return diffNorm.t > fullNorm.t;\n      }\n      return false;\n    }\n\n    if (diffVersion !== undefined && fullVersion === undefined) {\n      return true;\n    }\n\n    if (isVersionsObject(diffVersion) && isVersionsObject(fullVersion)) {\n      return true;\n    }\n\n    if (diffVersion === undefined && fullVersion === undefined) {\n      return true;\n    }\n\n    return false;\n  }\n}\n","import { ObjectUtils_keys } from \"../../utils/object\";\nimport {\n  IVersionTypes,\n  IVersionsObject,\n  IVersionValue,\n  IVersions,\n  ICollectionVersions,\n  isFieldVersion,\n  isCollectionVersions,\n  isVersionsObject,\n  isIdVersion,\n  IIdVersion,\n} from \"./types\";\nimport {\n  VersionTrackerUtils_asVersionsObject,\n  VersionTrackerUtils_mergeFieldVersions,\n  VersionTrackerUtils_ensureVersionsObject,\n  VersionTrackerUtils_pickWinningIdVersion,\n  VersionTrackerUtils_NUKEDELETED_THRESHOLD,\n} from \"./utils\";\n\nexport class VersionTrackerMergeVersions<TAtomicType extends string, TControlledType extends string> {\n  private readonly versionTypes: IVersionTypes<TAtomicType, TControlledType>;\n\n  constructor(versionTypes: IVersionTypes<TAtomicType, TControlledType>) {\n    this.versionTypes = versionTypes;\n  }\n\n  public run<T>(fullVersions: IVersions<T>, versionDiff: IVersions<T>): IVersions<T> {\n    const result = { ...fullVersions };\n    const resultObj = VersionTrackerUtils_asVersionsObject(result);\n    const diffObj = VersionTrackerUtils_asVersionsObject(versionDiff);\n\n    for (const key of Object.keys(diffObj)) {\n      const fullVersion = resultObj[key];\n      const diffVersion = diffObj[key];\n\n      const mergedVersion = this.mergeVersionField(fullVersion, diffVersion, key);\n      if (mergedVersion !== undefined) {\n        resultObj[key] = mergedVersion;\n      }\n    }\n\n    return result;\n  }\n\n  public mergeVersionField(\n    fullVersion: IVersionValue | undefined,\n    diffVersion: IVersionValue | undefined,\n    path: string = \"\"\n  ): IVersionValue | undefined {\n    if (diffVersion === undefined) {\n      return fullVersion;\n    }\n\n    if (isFieldVersion(fullVersion) && isFieldVersion(diffVersion)) {\n      const newVersion = VersionTrackerUtils_mergeFieldVersions(fullVersion, diffVersion);\n      return newVersion;\n    }\n\n    if (isFieldVersion(diffVersion)) {\n      // A plain field version for an array only ever describes its itemless era (updateVersions\n      // emits numbers only when neither side has trackable items), so per-item tracking always\n      // supersedes it. Returning the number here would erase the items' versions while\n      // mergeByVersions keeps their data, leaving them permanently invisible to sync diffs.\n      if (isCollectionVersions(fullVersion)) {\n        return fullVersion;\n      }\n      return diffVersion;\n    }\n\n    if (isCollectionVersions(diffVersion)) {\n      const fullCollection = isCollectionVersions(fullVersion) ? fullVersion : undefined;\n      return this.mergeCollectionVersions(fullCollection, diffVersion, path);\n    }\n\n    if (isVersionsObject(diffVersion)) {\n      const fullObj = VersionTrackerUtils_ensureVersionsObject(fullVersion);\n\n      // Check if both have ID versions (controlled types with different identities)\n      const fullIdVersion = this.findIdVersion(fullObj);\n      const diffIdVersion = this.findIdVersion(diffVersion);\n\n      if (fullIdVersion && diffIdVersion && fullIdVersion.value !== diffIdVersion.value) {\n        // Different controlled objects - pick winner by timestamp\n        const winner = VersionTrackerUtils_pickWinningIdVersion(fullIdVersion, diffIdVersion);\n        if (winner === diffIdVersion) {\n          // diff wins - use diff versions entirely\n          return diffVersion;\n        } else {\n          // full wins - keep full versions\n          return fullObj;\n        }\n      }\n\n      const result: IVersionsObject = { ...fullObj };\n\n      for (const key of Object.keys(diffVersion)) {\n        const mergedField = this.mergeVersionField(fullObj[key], diffVersion[key], path ? `${path}.${key}` : key);\n        if (mergedField !== undefined) {\n          result[key] = mergedField;\n        }\n      }\n\n      return result;\n    }\n\n    return diffVersion;\n  }\n\n  private findIdVersion(versions: IVersionsObject): IIdVersion | undefined {\n    for (const key of Object.keys(versions)) {\n      const value = versions[key];\n      if (isIdVersion(value)) {\n        return value;\n      }\n    }\n    return undefined;\n  }\n\n  private mergeCollectionVersions(\n    fullCollection: ICollectionVersions | undefined,\n    diffCollection: ICollectionVersions,\n    path?: string\n  ): ICollectionVersions {\n    const nukedeleted =\n      diffCollection.nukedeleted != null || fullCollection?.nukedeleted != null\n        ? Math.max(diffCollection.nukedeleted || 0, fullCollection?.nukedeleted || 0)\n        : undefined;\n    const result: ICollectionVersions = {\n      items: { ...(fullCollection?.items || {}) },\n      deleted: nukedeleted != null ? {} : { ...(fullCollection?.deleted || {}), ...(diffCollection?.deleted || {}) },\n      ...(nukedeleted != null && nukedeleted < VersionTrackerUtils_NUKEDELETED_THRESHOLD\n        ? { nukedeleted: nukedeleted + 1 }\n        : {}),\n    };\n\n    for (const id of Object.keys(diffCollection.items ?? {})) {\n      const fullItemVersion = result.items?.[id];\n      const diffItemVersion = diffCollection.items?.[id];\n\n      const mergedItemVersion = this.mergeVersionField(fullItemVersion, diffItemVersion);\n      if (mergedItemVersion !== undefined && !isCollectionVersions(mergedItemVersion)) {\n        result.items = result.items || {};\n        result.items[id] = mergedItemVersion;\n      }\n    }\n\n    const threshold =\n      path && this.versionTypes.compactionThresholds ? this.versionTypes.compactionThresholds[path] : undefined;\n    const currentTimestamp = Date.now();\n\n    for (const key of ObjectUtils_keys(result.deleted || {})) {\n      if (result.items) {\n        delete result.items[key];\n      }\n      const fullDeletedTime = fullCollection?.deleted?.[key];\n      const diffDeletedTime = diffCollection?.deleted?.[key];\n      const max = (diffDeletedTime ?? 0) > (fullDeletedTime ?? 0) ? diffDeletedTime : fullDeletedTime;\n\n      if (max != null) {\n        if (!threshold || currentTimestamp - max < threshold) {\n          result.deleted![key] = max;\n        } else {\n          delete result.deleted![key];\n        }\n      }\n    }\n\n    return result;\n  }\n}\n","import { ObjectUtils_clone, ObjectUtils_keys } from \"../../utils/object\";\nimport { lg } from \"../../utils/posthog\";\nimport {\n  IVersionTypes,\n  ITypedObject,\n  IFieldVersion,\n  IVersionsObject,\n  IVersionValue,\n  IVersions,\n  ICollectionVersions,\n  isFieldVersion,\n  isCollectionVersions,\n  isIdVersion,\n} from \"./types\";\nimport {\n  VersionTrackerUtils_asVersionsObject,\n  VersionTrackerUtils_areEqual,\n  VersionTrackerUtils_getId,\n  VersionTrackerUtils_createVersion,\n  VersionTrackerUtils_isControlledType,\n  VersionTrackerUtils_isAtomicType,\n  VersionTrackerUtils_isRecord,\n  VersionTrackerUtils_ensureVersionsObject,\n  VersionTrackerUtils_incrementNukedeleted,\n  VersionTrackerUtils_ensureCollectionVersions,\n  VersionTrackerUtils_applyCompaction,\n  VersionTrackerUtils_getIdFieldName,\n  VersionTrackerUtils_getIdValue,\n  VersionTrackerUtils_createIdVersion,\n} from \"./utils\";\nimport { VersionTrackerMergeVersions } from \"./versionTrackerMergeVersions\";\n\nexport class VersionTrackerUpdateVersions<TAtomicType extends string, TControlledType extends string> {\n  private readonly versionTypes: IVersionTypes<TAtomicType, TControlledType>;\n  private readonly deviceId: string;\n  private readonly mergeVersions: VersionTrackerMergeVersions<TAtomicType, TControlledType>;\n\n  constructor(versionTypes: IVersionTypes<TAtomicType, TControlledType>, deviceId: string) {\n    this.versionTypes = versionTypes;\n    this.deviceId = deviceId;\n    this.mergeVersions = new VersionTrackerMergeVersions(versionTypes);\n  }\n\n  public run<T extends Record<string, unknown>>(\n    oldObj: T,\n    newObj: T,\n    currentVersions: IVersions<T>,\n    newVersions: IVersions<T>,\n    timestamp: number\n  ): IVersions<T> {\n    const versions = ObjectUtils_clone(currentVersions);\n    const versionsObj = VersionTrackerUtils_asVersionsObject(versions);\n    const newVersionsObj = VersionTrackerUtils_asVersionsObject(newVersions);\n\n    const keys = ObjectUtils_keys(newObj).filter((key) => key !== \"_versions\");\n\n    for (const field of keys) {\n      const oldValue = oldObj[field];\n      const newValue = newObj[field];\n\n      if (VersionTrackerUtils_areEqual(oldValue, newValue)) {\n        continue;\n      }\n\n      const fieldStr = field as string;\n      const updatedVersion = this.updateFieldVersion(\n        oldObj,\n        newObj,\n        currentVersions,\n        newVersions,\n        oldValue,\n        newValue,\n        versionsObj[fieldStr],\n        newVersionsObj[fieldStr],\n        timestamp,\n        fieldStr\n      );\n      if (updatedVersion !== undefined) {\n        versionsObj[fieldStr] = updatedVersion;\n      }\n    }\n\n    return versions;\n  }\n\n  private updateFieldVersion(\n    oldFull: unknown,\n    newFull: unknown,\n    oldFullVersion: unknown,\n    newFullVersion: unknown,\n    oldValue: unknown,\n    newValue: unknown,\n    currentVersion: IVersionValue | undefined,\n    newVersion: IVersionValue | undefined,\n    timestamp: number,\n    path: string\n  ): IVersionValue | undefined {\n    if (Array.isArray(newValue)) {\n      const hasTrackableItems = newValue.some(\n        (item) => VersionTrackerUtils_getId(item, this.versionTypes) !== undefined\n      );\n      const oldHasTrackableItems =\n        Array.isArray(oldValue) &&\n        oldValue.some((item: unknown) => VersionTrackerUtils_getId(item, this.versionTypes) !== undefined);\n\n      if (hasTrackableItems || oldHasTrackableItems) {\n        return this.updateArrayCollectionVersion(oldValue, newValue, currentVersion, newVersion, timestamp, path);\n      } else {\n        const mergedVersion = this.mergeVersions.mergeVersionField(currentVersion, newVersion, path);\n        const fieldVersion = isFieldVersion(mergedVersion) ? mergedVersion : undefined;\n        return VersionTrackerUtils_createVersion(timestamp, fieldVersion, this.deviceId);\n      }\n    } else if (typeof newValue === \"object\" && newValue !== null) {\n      if (this.versionTypes.dictionaryFields.includes(path)) {\n        return this.updateDictionaryCollectionVersion(\n          oldValue,\n          newValue as Record<string, unknown>,\n          currentVersion,\n          newVersion,\n          timestamp,\n          path\n        );\n      } else if (VersionTrackerUtils_isControlledType(newValue, this.versionTypes)) {\n        const mergedVersion = this.mergeVersions.mergeVersionField(currentVersion, newVersion, path);\n        return this.updateControlledObjectVersion(oldValue, newValue, mergedVersion, timestamp, path);\n      } else if (VersionTrackerUtils_isAtomicType(newValue, this.versionTypes)) {\n        const mergedVersion = this.mergeVersions.mergeVersionField(currentVersion, newVersion, path);\n        const fieldVersion = isFieldVersion(mergedVersion) ? mergedVersion : undefined;\n        return VersionTrackerUtils_createVersion(timestamp, fieldVersion, this.deviceId);\n      } else {\n        const oldObjValue = VersionTrackerUtils_isRecord(oldValue) ? oldValue : undefined;\n        const nestedVersions = this.updateNestedVersions(\n          oldFull,\n          newFull,\n          oldFullVersion,\n          newFullVersion,\n          oldObjValue,\n          newValue as Record<string, unknown>,\n          VersionTrackerUtils_ensureVersionsObject(currentVersion),\n          VersionTrackerUtils_ensureVersionsObject(newVersion),\n          timestamp,\n          path\n        );\n        return nestedVersions;\n      }\n    } else {\n      const mergedVersion = this.mergeVersions.mergeVersionField(currentVersion, newVersion, path);\n      const fieldVersion = isFieldVersion(mergedVersion) ? mergedVersion : undefined;\n      return VersionTrackerUtils_createVersion(timestamp, fieldVersion, this.deviceId);\n    }\n  }\n\n  private updateArrayCollectionVersion(\n    oldValue: unknown,\n    newValue: unknown[],\n    currentVersion: IVersionValue | undefined,\n    newVersion: IVersionValue | undefined,\n    timestamp: number,\n    path: string\n  ): ICollectionVersions | undefined {\n    const collectionVersions = VersionTrackerUtils_incrementNukedeleted(\n      VersionTrackerUtils_ensureCollectionVersions(currentVersion)\n    );\n    const items = collectionVersions.items || {};\n\n    const newIds = new Set<string>();\n    for (const item of newValue) {\n      const itemId = VersionTrackerUtils_getId(item, this.versionTypes);\n      if (itemId) {\n        newIds.add(itemId);\n      }\n    }\n\n    const deletedInThisUpdate: string[] = [];\n    const oldItemsById = new Map<string, unknown>();\n    if (Array.isArray(oldValue)) {\n      for (const oldItem of oldValue) {\n        const oldItemId = VersionTrackerUtils_getId(oldItem, this.versionTypes);\n        if (!oldItemId) {\n          continue;\n        }\n        if (!oldItemsById.has(oldItemId)) {\n          oldItemsById.set(oldItemId, oldItem);\n        }\n        if (!newIds.has(oldItemId)) {\n          collectionVersions.deleted = collectionVersions.deleted || {};\n          collectionVersions.deleted[oldItemId] = timestamp;\n          delete items[oldItemId];\n          deletedInThisUpdate.push(oldItemId);\n        }\n      }\n    }\n\n    if (deletedInThisUpdate.length > 5) {\n      lg(\"ls-history-deletion-version-tracker\", {\n        path,\n        deletedCount: deletedInThisUpdate.length,\n        oldLen: Array.isArray(oldValue) ? oldValue.length : 0,\n        newLen: newValue.length,\n        timestamp,\n      });\n    }\n\n    for (const item of newValue) {\n      const itemId = VersionTrackerUtils_getId(item, this.versionTypes);\n      if (itemId) {\n        const oldItem = oldItemsById.get(itemId);\n\n        if (!VersionTrackerUtils_areEqual(oldItem, item)) {\n          const newCollectionVersion = isCollectionVersions(newVersion) ? newVersion : undefined;\n          const newItemVersion = newCollectionVersion?.items?.[itemId];\n          const itemPath = `${path}.items.${itemId}`;\n          const mergedItemVersion = this.mergeVersions.mergeVersionField(items[itemId], newItemVersion, itemPath);\n\n          const itemVersion = this.getItemVersion(oldItem, item, mergedItemVersion, timestamp, itemPath);\n          if (itemVersion !== undefined) {\n            items[itemId] = itemVersion;\n          }\n        }\n\n        if (collectionVersions.deleted && itemId in collectionVersions.deleted) {\n          delete collectionVersions.deleted[itemId];\n        }\n      }\n    }\n\n    const hasChanges =\n      Object.keys(items).length > 0 ||\n      (collectionVersions.deleted && Object.keys(collectionVersions.deleted).length > 0);\n\n    const compactedCollection = VersionTrackerUtils_applyCompaction(\n      collectionVersions,\n      path,\n      timestamp,\n      this.versionTypes\n    );\n    return hasChanges || currentVersion ? compactedCollection : undefined;\n  }\n\n  private updateDictionaryCollectionVersion(\n    oldValue: unknown,\n    newValue: Record<string, unknown>,\n    currentVersion: IVersionValue | undefined,\n    newVersion: IVersionValue | undefined,\n    timestamp: number,\n    path: string\n  ): ICollectionVersions | undefined {\n    const collectionVersions = VersionTrackerUtils_incrementNukedeleted(\n      VersionTrackerUtils_ensureCollectionVersions(currentVersion)\n    );\n    const items = collectionVersions.items || {};\n\n    const oldDict = VersionTrackerUtils_isRecord(oldValue) ? oldValue : undefined;\n\n    if (oldDict) {\n      for (const key of ObjectUtils_keys(oldDict)) {\n        if (!(key in newValue)) {\n          collectionVersions.deleted = collectionVersions.deleted || {};\n          collectionVersions.deleted[key] = timestamp;\n          delete items[key];\n        }\n      }\n    }\n\n    for (const [key, item] of Object.entries(newValue)) {\n      const oldItem = oldDict?.[key];\n      if (oldItem !== item) {\n        const newCollectionVersion = isCollectionVersions(newVersion) ? newVersion : undefined;\n        const newItemVersion = newCollectionVersion?.items?.[key];\n        const itemPath = `${path}.items.${key}`;\n        const mergedItemVersion = this.mergeVersions.mergeVersionField(items[key], newItemVersion, itemPath);\n\n        const itemVersion = this.getItemVersion(oldItem, item, mergedItemVersion, timestamp, itemPath);\n        if (itemVersion !== undefined) {\n          items[key] = itemVersion;\n        }\n      }\n\n      if (collectionVersions.deleted && key in collectionVersions.deleted) {\n        delete collectionVersions.deleted[key];\n      }\n    }\n\n    const hasChanges =\n      Object.keys(items).length > 0 ||\n      (collectionVersions.deleted && Object.keys(collectionVersions.deleted).length > 0);\n\n    const compactedCollection = VersionTrackerUtils_applyCompaction(\n      collectionVersions,\n      path,\n      timestamp,\n      this.versionTypes\n    );\n    return hasChanges || currentVersion ? compactedCollection : undefined;\n  }\n\n  private getItemVersion(\n    oldItem: unknown,\n    newItem: unknown,\n    currentItemVersion: IVersionValue | undefined,\n    timestamp: number,\n    path: string\n  ): IVersionsObject | IFieldVersion | undefined {\n    if (VersionTrackerUtils_isAtomicType(newItem, this.versionTypes)) {\n      const fieldVersion = isFieldVersion(currentItemVersion) ? currentItemVersion : undefined;\n      return VersionTrackerUtils_createVersion(timestamp, fieldVersion, this.deviceId);\n    } else if (VersionTrackerUtils_isControlledType(newItem, this.versionTypes)) {\n      return this.updateControlledObjectVersion(oldItem, newItem, currentItemVersion, timestamp, path);\n    } else {\n      const fieldVersion = isFieldVersion(currentItemVersion) ? currentItemVersion : undefined;\n      return VersionTrackerUtils_createVersion(timestamp, fieldVersion, this.deviceId);\n    }\n  }\n\n  private updateControlledObjectVersion(\n    oldValue: unknown,\n    newValue: ITypedObject<TControlledType>,\n    currentVersion: IVersionValue | undefined,\n    timestamp: number,\n    path: string\n  ): IVersionsObject | undefined {\n    const controlledFields = this.versionTypes.controlledFields[newValue.vtype] || [];\n    const fieldVersions: IVersionsObject = VersionTrackerUtils_ensureVersionsObject(currentVersion);\n    let hasChanges = false;\n\n    // Always include ID field version for controlled types\n    const idField = VersionTrackerUtils_getIdFieldName(newValue.vtype, this.versionTypes);\n    if (idField) {\n      const idValue = VersionTrackerUtils_getIdValue(newValue, this.versionTypes);\n      if (idValue != null) {\n        const currentIdVersion = isIdVersion(fieldVersions[idField]) ? fieldVersions[idField] : undefined;\n        // Only update if ID changed or no version exists\n        if (!currentIdVersion || currentIdVersion.value !== idValue) {\n          fieldVersions[idField] = VersionTrackerUtils_createIdVersion(\n            timestamp,\n            idValue,\n            currentIdVersion,\n            this.deviceId\n          );\n          hasChanges = true;\n        }\n      }\n    }\n\n    for (const controlledField of controlledFields) {\n      const oldFieldValue =\n        VersionTrackerUtils_isRecord(oldValue) && controlledField in oldValue ? oldValue[controlledField] : undefined;\n      const newFieldValue = newValue[controlledField];\n\n      // A controlled field going present -> absent (e.g. clearing progress.setTimer) must still bump a version so\n      // the deletion propagates to other devices, mirroring how top-level field deletions are tracked. Without this\n      // the field lingers on the receiving device (a stale set-timer modal kept showing after a Stop on the watch).\n      if (!VersionTrackerUtils_areEqual(oldFieldValue, newFieldValue)) {\n        const currentFieldVersion = fieldVersions[controlledField];\n        const fieldPath = path ? `${path}.${controlledField}` : controlledField;\n        const updatedVersion = this.updateControlledFieldVersion(\n          oldFieldValue,\n          newFieldValue,\n          currentFieldVersion,\n          timestamp,\n          fieldPath\n        );\n        if (updatedVersion != null) {\n          fieldVersions[controlledField] = updatedVersion;\n          hasChanges = true;\n        }\n      }\n    }\n\n    return hasChanges || Object.keys(fieldVersions).length > 0 ? fieldVersions : undefined;\n  }\n\n  private updateControlledFieldVersion(\n    oldValue: unknown,\n    newValue: unknown,\n    currentVersion: IVersionValue | undefined,\n    timestamp: number,\n    path: string\n  ): IVersionValue | undefined {\n    if (Array.isArray(newValue)) {\n      const hasTrackableItems = newValue.some(\n        (item) => VersionTrackerUtils_getId(item, this.versionTypes) !== undefined\n      );\n      const oldHasTrackableItems =\n        Array.isArray(oldValue) &&\n        oldValue.some((item: unknown) => VersionTrackerUtils_getId(item, this.versionTypes) !== undefined);\n      if (hasTrackableItems || oldHasTrackableItems) {\n        return this.updateArrayCollectionVersion(oldValue, newValue, currentVersion, undefined, timestamp, path);\n      } else if (newValue.length > 0 || (Array.isArray(oldValue) && oldValue.length > 0)) {\n        const fieldVersion = isFieldVersion(currentVersion) ? currentVersion : undefined;\n        return VersionTrackerUtils_createVersion(timestamp, fieldVersion, this.deviceId);\n      } else {\n        return this.updateArrayCollectionVersion(oldValue, newValue, currentVersion, undefined, timestamp, path);\n      }\n    }\n\n    if (VersionTrackerUtils_isRecord(newValue)) {\n      if (this.versionTypes.dictionaryFields.includes(path)) {\n        return this.updateDictionaryCollectionVersion(oldValue, newValue, currentVersion, undefined, timestamp, path);\n      }\n      if (VersionTrackerUtils_isControlledType(newValue, this.versionTypes)) {\n        return this.updateControlledObjectVersion(oldValue, newValue, currentVersion, timestamp, path);\n      }\n      if (VersionTrackerUtils_isAtomicType(newValue, this.versionTypes)) {\n        const fieldVersion = isFieldVersion(currentVersion) ? currentVersion : undefined;\n        return VersionTrackerUtils_createVersion(timestamp, fieldVersion, this.deviceId);\n      }\n    }\n\n    const fieldVersion = isFieldVersion(currentVersion) ? currentVersion : undefined;\n    return VersionTrackerUtils_createVersion(timestamp, fieldVersion, this.deviceId);\n  }\n\n  private updateNestedVersions(\n    oldFull: unknown,\n    newFull: unknown,\n    oldFullVersion: unknown,\n    newFullVersion: unknown,\n    oldObj: Record<string, unknown> | undefined,\n    newObj: Record<string, unknown>,\n    currentVersions: IVersionsObject,\n    newVersions: IVersionsObject,\n    timestamp: number,\n    parentPath: string\n  ): IVersionsObject | undefined {\n    const versions: IVersionsObject = { ...currentVersions };\n    const keys = ObjectUtils_keys(newObj);\n    let hasChanges = false;\n\n    for (const key of keys) {\n      const oldValue = oldObj?.[key];\n      const newValue = newObj[key];\n      const currentPath = parentPath ? `${parentPath}.${key}` : key;\n\n      if (VersionTrackerUtils_areEqual(oldValue, newValue)) {\n        continue;\n      }\n\n      if (oldValue == null && newValue != null) {\n        const updatedVersion = this.updateFieldVersion(\n          oldFull,\n          newFull,\n          oldFullVersion,\n          newFullVersion,\n          undefined,\n          newValue,\n          versions[key],\n          newVersions[key],\n          timestamp,\n          currentPath\n        );\n        if (updatedVersion !== undefined) {\n          versions[key] = updatedVersion;\n          hasChanges = true;\n        }\n      } else if (oldValue != null) {\n        const updatedVersion = this.updateFieldVersion(\n          oldFull,\n          newFull,\n          oldFullVersion,\n          newFullVersion,\n          oldValue,\n          newValue,\n          versions[key],\n          newVersions[key],\n          timestamp,\n          currentPath\n        );\n        if (updatedVersion !== undefined) {\n          versions[key] = updatedVersion;\n          hasChanges = true;\n        }\n      }\n    }\n\n    return hasChanges || Object.keys(currentVersions).length > 0 ? versions : undefined;\n  }\n}\n","export function WatchStorageAccount_isOtherAccount(\n  current: { tempUserId?: string },\n  incoming: { tempUserId?: string }\n): boolean {\n  return current.tempUserId != null && incoming.tempUserId != null && current.tempUserId !== incoming.tempUserId;\n}\n","import { CollectionUtils_sort } from \"../utils/collection\";\n\nimport { IWeight, IUnit, ISettings, IPlate, IPercentage, IExerciseType, IEquipmentSetup } from \"../types\";\nimport { n, MathUtils_roundTo005, MathUtils_round, MathUtils_roundFloat, MathUtils_roundTo000005 } from \"../utils/math\";\nimport {\n  Equipment_getUnitOrDefaultForExerciseType,\n  Equipment_getEquipmentDataForExerciseType,\n  Equipment_setupIn,\n} from \"./equipment\";\nimport {\n  EquipmentLoadSolver_next,\n  EquipmentLoadSolver_previous,\n  EquipmentLoadSolver_realize,\n  EquipmentLoadSolver_select,\n  IEquipmentLoad,\n  IEquipmentLoadQuery,\n} from \"./equipmentLoadSolver\";\nimport { Exercise_get, Exercise_onerm, Exercise_defaultRounding } from \"./exercise\";\n\nconst prebuiltWeights: Partial<Record<string, IWeight>> = {};\n\nexport function Weight_display(weight: IWeight | IPercentage | number, withUnit: boolean = true): string {\n  if (typeof weight === \"number\") {\n    return `${weight}`;\n  } else if (Weight_isPct(weight)) {\n    return `${weight.value}${withUnit ? \"%\" : \"\"}`;\n  } else {\n    return `${parseFloat(weight.value.toFixed(2)).toString()}${withUnit ? ` ${weight.unit}` : \"\"}`;\n  }\n}\n\nexport function Weight_rpePct(reps: number, rpe: number): IPercentage {\n  return Weight_buildPct(MathUtils_roundTo005(Weight_rpeMultiplier(reps, rpe) * 100));\n}\n\nexport function Weight_evaluateWeight(\n  weight: IWeight | IPercentage,\n  exerciseType: IExerciseType,\n  settings: ISettings\n): IWeight {\n  if (Weight_is(weight)) {\n    return weight;\n  } else if (Weight_isPct(weight)) {\n    const exercise = Exercise_get(exerciseType, settings.exercises);\n    const onerm = Exercise_onerm(exercise, settings);\n    return Weight_multiply(onerm, weight.value / 100);\n  } else {\n    const unit = Equipment_getUnitOrDefaultForExerciseType(settings, exerciseType);\n    return Weight_build(0, unit);\n  }\n}\n\nexport function Weight_smartConvert(weight: IWeight, toUnit: IUnit): IWeight {\n  if (weight.unit === toUnit) {\n    return weight;\n  }\n  const value = weight.value;\n  if (weight.unit === \"kg\") {\n    if (value < 15) {\n      return Weight_build(value * 2, toUnit);\n    } else {\n      return Weight_build(MathUtils_round(value * 2.25, 5), toUnit);\n    }\n  } else {\n    if (value < 15) {\n      return Weight_build(MathUtils_round(value / 2, 0.25), toUnit);\n    } else {\n      return Weight_build(MathUtils_round(value / 2.25, 2.5), toUnit);\n    }\n  }\n}\n\nexport function Weight_oppositeUnit(unit: IUnit): IUnit {\n  return unit === \"kg\" ? \"lb\" : \"kg\";\n}\n\nexport function Weight_print(weight: IWeight | IPercentage | number): string {\n  if (typeof weight === \"number\") {\n    return `${n(weight)}`;\n  } else {\n    return `${n(weight.value)}${weight.unit}`;\n  }\n}\n\nexport function Weight_printNull(weight: IWeight | IPercentage | number | undefined): string {\n  if (weight == null) {\n    return \"\";\n  } else if (typeof weight === \"number\") {\n    return `${n(weight)}`;\n  } else {\n    return `${n(weight.value)}${weight.unit}`;\n  }\n}\n\nexport function Weight_parsePct(str?: string): IPercentage | IWeight | undefined {\n  if (str == null) {\n    return undefined;\n  }\n  const match = str.match(/^([\\-+]?[0-9.]+)%$/);\n  if (match) {\n    return Weight_buildPct(MathUtils_roundFloat(parseFloat(match[1]), 2));\n  } else {\n    return Weight_parse(str);\n  }\n}\n\nexport function Weight_parse(str: string): IWeight | undefined {\n  const match = str.match(/^([\\-+]?[0-9.]+)\\s*(kg|lb)$/);\n  if (match) {\n    return Weight_build(MathUtils_roundFloat(parseFloat(match[1]), 2), match[2] as IUnit);\n  } else {\n    return undefined;\n  }\n}\n\n// Unlike Weight_parse, the number must be a well-formed decimal — strings like \"...lb\", \"+.kg\",\n// or \"1.2.3lb\" are rejected instead of silently coercing to 0 or a truncated value.\nexport function Weight_strictParse(str: string): IWeight | undefined {\n  const match = str.match(/^([\\-+]?(?:[0-9]+(?:\\.[0-9]+)?|\\.[0-9]+))\\s*(kg|lb)$/);\n  if (!match) {\n    return undefined;\n  }\n  const value = parseFloat(match[1]);\n  if (!isFinite(value)) {\n    return undefined;\n  }\n  return Weight_build(MathUtils_roundFloat(value, 2), match[2] as IUnit);\n}\n\nexport function Weight_printOrNumber(weight: IWeight | IPercentage | number): string {\n  return typeof weight === \"number\" ? `${weight}` : Weight_print(weight);\n}\n\nexport function Weight_buildPct(value: number): IPercentage {\n  return { value, unit: \"%\" };\n}\n\nexport function Weight_buildAny(value: number, unit: IUnit | \"%\"): IWeight | IPercentage {\n  if (unit === \"%\") {\n    return Weight_buildPct(value);\n  } else {\n    return Weight_build(value, unit);\n  }\n}\n\nexport function Weight_build(value: number, unit: IUnit): IWeight {\n  const key = `${value}_${unit}`;\n  const prebuiltWeight = prebuiltWeights[key];\n  if (prebuiltWeight != null) {\n    return prebuiltWeight;\n  } else {\n    const v = { value: typeof value === \"string\" ? parseFloat(value) : value, unit };\n    prebuiltWeights[`${value}_${unit}`] = v;\n    return v;\n  }\n}\n\nexport function Weight_clone(value: IWeight): IWeight {\n  return Weight_build(value.value, value.unit);\n}\n\nexport function Weight_isOrPct(object: unknown): object is IWeight | IPercentage {\n  const objWeight = object as IWeight | IPercentage;\n  return (\n    objWeight &&\n    typeof objWeight === \"object\" &&\n    \"unit\" in objWeight &&\n    \"value\" in objWeight &&\n    (objWeight.unit === \"kg\" || objWeight.unit === \"lb\" || objWeight.unit === \"%\")\n  );\n}\n\nexport function Weight_is(object: unknown): object is IWeight {\n  const objWeight = object as IWeight;\n  return (\n    objWeight &&\n    typeof objWeight === \"object\" &&\n    \"unit\" in objWeight &&\n    \"value\" in objWeight &&\n    (objWeight.unit === \"kg\" || objWeight.unit === \"lb\")\n  );\n}\n\nexport function Weight_isPct(object: unknown): object is IPercentage {\n  const objWeight = object as IPercentage;\n  return (\n    objWeight && typeof objWeight === \"object\" && \"unit\" in objWeight && \"value\" in objWeight && objWeight.unit === \"%\"\n  );\n}\n\nexport function Weight_round(weight: IWeight, settings: ISettings, unit: IUnit, exerciseType?: IExerciseType): IWeight {\n  if (exerciseType == null) {\n    return Weight_roundTo005(weight);\n  }\n  return Weight_calculatePlates(weight, settings, unit, exerciseType).totalWeight;\n}\n\nfunction stepWeight(\n  weight: IWeight,\n  settings: ISettings,\n  exerciseType: IExerciseType | undefined,\n  direction: 1 | -1\n): IWeight {\n  const equipmentData = exerciseType ? Equipment_getEquipmentDataForExerciseType(settings, exerciseType) : undefined;\n  if (equipmentData != null) {\n    const setup = Equipment_setupIn(equipmentData, equipmentData.unit ?? weight.unit);\n    const query = { bodyweight: settings.currentBodyweight };\n    const rounded = EquipmentLoadSolver_select(setup, weight, query).total;\n    return direction === 1\n      ? EquipmentLoadSolver_next(setup, rounded, query)\n      : EquipmentLoadSolver_previous(setup, rounded, query);\n  }\n  const roundWeight = Weight_round(weight, settings, weight.unit, exerciseType);\n  const rounding = exerciseType ? Exercise_defaultRounding(exerciseType, settings) : 1;\n  return Weight_build(roundWeight.value + direction * rounding, roundWeight.unit);\n}\n\nexport function Weight_increment(weight: IWeight, settings: ISettings, exerciseType?: IExerciseType): IWeight {\n  return stepWeight(weight, settings, exerciseType, 1);\n}\n\nexport function Weight_decrement(weight: IWeight, settings: ISettings, exerciseType?: IExerciseType): IWeight {\n  return stepWeight(weight, settings, exerciseType, -1);\n}\n\nexport function Weight_getOneRepMax(weight: IWeight, reps: number, rpe?: number): IWeight {\n  if (reps === 0) {\n    return Weight_build(0, weight.unit);\n  } else if (reps === 1) {\n    return weight;\n  } else {\n    return Weight_roundTo005(Weight_divide(weight, Weight_rpeMultiplier(reps, rpe ?? 10)));\n  }\n}\n\nexport function Weight_getNRepMax(oneRepMax: IWeight, reps: number): IWeight {\n  if (reps === 0) {\n    return Weight_build(0, oneRepMax.unit);\n  } else if (reps === 1) {\n    return oneRepMax;\n  } else {\n    return Weight_roundTo005(Weight_multiply(oneRepMax, Weight_rpeMultiplier(reps, 10)));\n  }\n}\n\nexport function Weight_getTrainingMax(weight: IWeight, reps: number, settings: ISettings): IWeight {\n  return Weight_round(Weight_multiply(Weight_getOneRepMax(weight, reps), 0.9), settings, weight.unit);\n}\n\nexport function Weight_platesWeight(plates: IPlate[]): IWeight {\n  const unit = plates[0]?.weight.unit || \"lb\";\n  return plates.reduce(\n    (memo, plate) => Weight_add(memo, Weight_multiply(plate.weight, plate.num)),\n    Weight_build(0, unit)\n  );\n}\n\nexport function Weight_roundTo005(weight: IWeight): IWeight {\n  return Weight_build(MathUtils_roundTo005(weight.value), weight.unit);\n}\n\nexport function Weight_roundTo000005(weight: IWeight): IWeight {\n  return Weight_build(MathUtils_roundTo000005(weight.value), weight.unit);\n}\n\ninterface IPlatesCalculation {\n  plates: IPlate[];\n  totalWeight: IWeight;\n  load?: IEquipmentLoad;\n}\n\nexport function Weight_loadPlates(load: IEquipmentLoad): IPlate[] {\n  const instruction = load.instruction;\n  if (instruction?.type !== \"plates\" || instruction.horns.length !== 1) {\n    return [];\n  }\n  return instruction.horns[0].plates.map((p) => ({\n    weight: Weight_build(p.weight, load.unit),\n    num: p.num * instruction.sides,\n  }));\n}\n\nfunction calculateLoad(\n  allWeight: IWeight,\n  settings: ISettings,\n  units: IUnit,\n  exerciseType: IExerciseType,\n  warmup?: IEquipmentLoadQuery[\"warmup\"]\n): IPlatesCalculation {\n  const equipmentData = Equipment_getEquipmentDataForExerciseType(settings, exerciseType);\n  if (equipmentData == null) {\n    const rounding = Exercise_defaultRounding(exerciseType, settings);\n    const rounded = Weight_build(MathUtils_round(allWeight.value, rounding), allWeight.unit);\n    return { plates: [], totalWeight: rounded };\n  }\n  const setup = Equipment_setupIn(equipmentData, units);\n  const load = EquipmentLoadSolver_select(setup, allWeight, { bodyweight: settings.currentBodyweight, warmup });\n  return { plates: Weight_loadPlates(load), totalWeight: load.total, load };\n}\n\nexport function Weight_calculatePlates(\n  allWeight: IWeight,\n  settings: ISettings,\n  units: IUnit,\n  exerciseType: IExerciseType\n): IPlatesCalculation {\n  return calculateLoad(allWeight, settings, units, exerciseType);\n}\n\nexport function Weight_roundWarmup(\n  weight: IWeight,\n  settings: ISettings,\n  unit: IUnit,\n  exerciseType: IExerciseType | undefined,\n  firstWorkingWeight: IWeight | undefined\n): IWeight {\n  const converted = Weight_convertTo(weight, unit);\n  if (exerciseType == null) {\n    return Weight_roundTo005(converted);\n  }\n  return calculateLoad(converted, settings, unit, exerciseType, { firstWorkingWeight }).totalWeight;\n}\n\nexport function Weight_setupForExercise(\n  weight: IWeight,\n  settings: ISettings,\n  exerciseType: IExerciseType\n): IEquipmentSetup | undefined {\n  const equipmentData = Equipment_getEquipmentDataForExerciseType(settings, exerciseType);\n  return equipmentData != null\n    ? Equipment_setupIn(equipmentData, equipmentData.unit ?? weight.unit)\n    : undefined;\n}\n\nexport function Weight_realizeLoad(\n  weight: IWeight,\n  settings: ISettings,\n  exerciseType: IExerciseType,\n  isWarmup: boolean\n): IEquipmentLoad | undefined {\n  const setup = Weight_setupForExercise(weight, settings, exerciseType);\n  if (setup == null) {\n    return undefined;\n  }\n  return EquipmentLoadSolver_realize(setup, weight, {\n    bodyweight: settings.currentBodyweight,\n    ...(isWarmup ? { warmup: {} } : {}),\n  });\n}\n\nexport function Weight_abs(weight: IWeight): IWeight {\n  return Weight_build(Math.abs(weight.value), weight.unit);\n}\n\nexport function Weight_invert(weight: IWeight): IWeight {\n  return Weight_build(-weight.value, weight.unit);\n}\n\nexport function Weight_add(weight: IWeight, value: IWeight | number): IWeight {\n  return Weight_operation(weight, value, (a, b) => a + b);\n}\n\nexport function Weight_subtract(weight: IWeight, value: IWeight | number): IWeight {\n  return Weight_operation(weight, value, (a, b) => a - b);\n}\n\nexport function Weight_multiply(weight: IWeight, value: IWeight | number): IWeight {\n  return Weight_operation(weight, value, (a, b) => a * b);\n}\n\nexport function Weight_divide(weight: IWeight, value: IWeight | number): IWeight {\n  return Weight_operation(weight, value, (a, b) => a / b);\n}\n\nexport function Weight_gt(weight: IWeight | number | IPercentage, value: IWeight | number | IPercentage): boolean {\n  return comparison(weight, value, (a, b) => a > b);\n}\n\nexport function Weight_lt(weight: IWeight | number | IPercentage, value: IWeight | number | IPercentage): boolean {\n  return comparison(weight, value, (a, b) => a < b);\n}\n\nexport function Weight_gte(weight: IWeight | number | IPercentage, value: IWeight | number | IPercentage): boolean {\n  return comparison(weight, value, (a, b) => a >= b);\n}\n\nexport function Weight_lte(weight: IWeight | number | IPercentage, value: IWeight | number | IPercentage): boolean {\n  return comparison(weight, value, (a, b) => a <= b);\n}\n\nexport function Weight_eqNull(\n  weight: IWeight | number | IPercentage | undefined,\n  value: IWeight | number | IPercentage | undefined\n): boolean {\n  if (weight == null && value == null) {\n    return true;\n  } else if (weight == null && value != null) {\n    return false;\n  } else if (weight != null && value == null) {\n    return false;\n  } else {\n    return comparison(weight!, value!, (a, b) => a === b);\n  }\n}\n\nexport function Weight_eq(weight: IWeight | number | IPercentage, value: IWeight | number | IPercentage): boolean {\n  return comparison(weight, value, (a, b) => a === b);\n}\n\nexport function Weight_eqeq(weight: IWeight, value: IWeight): boolean {\n  return weight.value === value.value && weight.unit === value.unit;\n}\n\nexport function Weight_max(weights: IWeight[]): IWeight | undefined {\n  return CollectionUtils_sort(weights, Weight_compareReverse)[0];\n}\n\nexport function Weight_roundConvertTo(\n  weight: IWeight,\n  settings: ISettings,\n  unit: IUnit,\n  exerciseType?: IExerciseType\n): IWeight {\n  return Weight_round(Weight_convertTo(weight, unit), settings, unit, exerciseType);\n}\n\nexport function Weight_type(value: number | IWeight | IPercentage): \"weight\" | \"percentage\" | \"number\" {\n  if (typeof value === \"number\") {\n    return \"number\";\n  } else if (Weight_isPct(value)) {\n    return \"percentage\";\n  } else {\n    return \"weight\";\n  }\n}\n\nexport function Weight_convertTo(weight: IWeight, unit: IUnit): IWeight;\nexport function Weight_convertTo(weight: IPercentage, unit: \"%\" | IUnit): IPercentage;\nexport function Weight_convertTo(weight: number, unit: IUnit): number;\nexport function Weight_convertTo(\n  weight: IWeight | number | IPercentage,\n  unit: IUnit | \"%\"\n): IWeight | number | IPercentage {\n  if (typeof weight === \"number\") {\n    return weight;\n  } else if (weight.unit === \"%\" || unit === \"%\") {\n    return weight;\n  } else {\n    if (weight.unit === unit) {\n      return weight;\n    } else if (weight.unit === \"kg\" && unit === \"lb\") {\n      return Weight_build(Math.round((weight.value * 2.205) / 0.5) * 0.5, unit);\n    } else {\n      return Weight_build(Math.round(weight.value / 2.205 / 0.5) * 0.5, unit);\n    }\n  }\n}\n\nexport function Weight_compare(a: IWeight, b: IWeight): number {\n  return a.value - Weight_convertTo(b, a.unit).value;\n}\n\nexport function Weight_compareReverse(a: IWeight, b: IWeight): number {\n  return Weight_convertTo(b, a.unit).value - a.value;\n}\n\nfunction comparison(\n  weight: IWeight | number | IPercentage,\n  value: IWeight | number | IPercentage,\n  o: (a: number, b: number) => boolean\n): boolean {\n  if (typeof weight === \"number\" && typeof value === \"number\") {\n    return o(weight, value);\n  } else if (typeof weight === \"number\" && typeof value !== \"number\") {\n    return o(weight, value.value);\n  } else if (typeof weight !== \"number\" && typeof value === \"number\") {\n    return o(weight.value, value);\n  } else if (typeof weight !== \"number\" && typeof value !== \"number\") {\n    if (weight.unit === \"%\" && value.unit === \"%\") {\n      return o(weight.value, value.value);\n    } else if (Weight_is(weight) && Weight_is(value)) {\n      return o(weight.value, Weight_convertTo(value, weight.unit).value);\n    } else {\n      return false;\n    }\n  } else {\n    return false;\n  }\n}\n\nexport function Weight_applyOp(\n  onerm: IWeight | undefined,\n  oldValue: IWeight | number | IPercentage,\n  value: IWeight | number | IPercentage,\n  opr: \"+=\" | \"-=\" | \"*=\" | \"/=\" | \"=\"\n): IWeight | number | IPercentage {\n  if (opr === \"=\") {\n    return value;\n  } else if (opr === \"+=\") {\n    return Weight_op(onerm, oldValue, value, (a, b) => a + b);\n  } else if (opr === \"-=\") {\n    return Weight_op(onerm, oldValue, value, (a, b) => a - b);\n  } else if (opr === \"*=\") {\n    return Weight_op(onerm, oldValue, value, (a, b) => MathUtils_roundTo005(a * b));\n  } else {\n    return Weight_op(onerm, oldValue, value, (a, b) => MathUtils_roundTo005(a / b));\n  }\n}\n\nexport function Weight_op(\n  onerm: IWeight | undefined,\n  a: IWeight | number | IPercentage,\n  b: IWeight | number | IPercentage,\n  o: (x: number, y: number) => number\n): IWeight | number | IPercentage {\n  if (typeof a === \"number\" && typeof b === \"number\") {\n    return o(a, b);\n  }\n  if (typeof a === \"number\" && Weight_isPct(b)) {\n    return Weight_buildPct(o(a, b.value));\n  }\n  if (typeof a === \"number\" && Weight_is(b)) {\n    return Weight_operation(a, b, o);\n  }\n\n  if (Weight_isPct(a) && typeof b === \"number\") {\n    return Weight_buildPct(o(a.value, b));\n  }\n  if (Weight_isPct(a) && Weight_isPct(b)) {\n    return Weight_buildPct(o(a.value, b.value));\n  }\n  if (Weight_isPct(a) && Weight_is(b)) {\n    const aWeight = onerm ? Weight_multiply(onerm, a.value / 100) : MathUtils_roundFloat(a.value / 100, 4);\n    return Weight_operation(aWeight, b, o);\n  }\n\n  if (Weight_is(a) && typeof b === \"number\") {\n    return Weight_operation(a, b, o);\n  }\n  if (Weight_is(a) && Weight_isPct(b)) {\n    const bWeight = onerm ? Weight_multiply(onerm, b.value / 100) : MathUtils_roundFloat(b.value / 100, 4);\n    return Weight_operation(a, bWeight, o);\n  }\n  if (Weight_is(a) && Weight_is(b)) {\n    return Weight_operation(a, b, o);\n  }\n\n  throw new Error(`Can't apply operation to ${a} and ${b}`);\n}\n\nexport function Weight_operation(\n  weight: IWeight,\n  value: IWeight | number,\n  o: (a: number, b: number) => number\n): IWeight;\nexport function Weight_operation(\n  weight: IWeight | number,\n  value: IWeight,\n  o: (a: number, b: number) => number\n): IWeight;\nexport function Weight_operation(\n  weight: IWeight | number,\n  value: IWeight | number,\n  o: (a: number, b: number) => number\n): IWeight {\n  if (typeof weight === \"number\" && typeof value !== \"number\") {\n    return Weight_build(o(weight, value.value), value.unit);\n  } else if (typeof weight !== \"number\" && typeof value === \"number\") {\n    return Weight_build(o(weight.value, value), weight.unit);\n  } else if (typeof weight !== \"number\" && typeof value !== \"number\") {\n    return Weight_build(o(weight.value, Weight_convertTo(value, weight.unit).value), weight.unit);\n  } else {\n    throw new Error(\"Weight.operation should never work with numbers only\");\n  }\n}\n\nexport function Weight_convertToWeight(onerm: IWeight, value: IWeight | number | IPercentage, unit: IUnit): IWeight {\n  if (typeof value === \"number\") {\n    return Weight_build(value, unit);\n  } else if (Weight_isPct(value)) {\n    return Weight_convertTo(Weight_multiply(onerm, MathUtils_roundFloat(value.value / 100, 4)), unit);\n  } else {\n    return value;\n  }\n}\n\nexport function Weight_calculateRepMax(\n  knownReps: number,\n  knownRpe: number,\n  knownWeight: number,\n  targetReps: number,\n  targetRpe: number\n): number {\n  const knownRpeMultiplier = Weight_rpeMultiplier(knownReps, knownRpe);\n  const onerm = knownWeight / knownRpeMultiplier;\n  const targetRpeMultiplier = Weight_rpeMultiplier(targetReps, targetRpe);\n  return Math.round(onerm * targetRpeMultiplier);\n}\n\nexport function Weight_rpeMultiplier(reps: number, rpe: number): number {\n  if (reps === 1 && rpe === 10) {\n    return 1;\n  }\n  reps = Math.max(Math.min(reps, 24), 1);\n  rpe = Math.max(Math.min(rpe, 10), 1);\n\n  const x = 10.0 - rpe + (reps - 1);\n  if (x >= 16) {\n    return 0.5;\n  }\n  // The formula is taken from\n  // https://gitlab.com/openpowerlifting/plsource/-/blob/ba5194be6daa08d082bb1b7959d6f47b82e7802c/static/rpe-calc/index.html#L224\n  const intersection = 2.92;\n  if (x <= intersection) {\n    const a = 0.347619;\n    const b = -4.60714;\n    const c = 99.9667;\n    return (a * x * x + b * x + c) / 100;\n  } else {\n    const m = -2.64249;\n    const b = 97.0955;\n    return (m * x + b) / 100;\n  }\n}\n\nexport const Weight_zero: IWeight = { value: 0, unit: \"lb\" } as const;\n","import { ObjectUtils_keys } from \"../utils/object\";\nimport { UrlUtils_build } from \"../utils/url\";\nimport { WhatsNewParser_parseAll } from \"./whatsnewParser\";\n\nexport interface IWhatsNew {\n  title: string;\n  body: string;\n}\n\nlet cached: Record<string, IWhatsNew> | undefined;\n\nexport function WhatsNew_all(): Record<string, IWhatsNew> {\n  if (!cached) {\n    const result: Record<string, IWhatsNew> = {};\n    for (const entry of WhatsNewParser_parseAll()) {\n      result[entry.dateStr] = { title: entry.title, body: entry.body };\n    }\n    cached = result;\n  }\n  return cached;\n}\n\nexport function WhatsNew_doesHaveNewUpdates(lastDateStr?: string): boolean {\n  if (lastDateStr == null) {\n    return false;\n  } else {\n    return Object.keys(WhatsNew_newUpdates(lastDateStr)).length > 0;\n  }\n}\n\nexport function WhatsNew_newUpdates(lastDateStr: string): Record<string, IWhatsNew> {\n  if (typeof window !== \"undefined\" && window.location?.href) {\n    const url = UrlUtils_build(window.location.href);\n    const forcedUserEmail = url.searchParams.get(\"forceuseremail\");\n    if (forcedUserEmail != null) {\n      return {};\n    }\n  }\n  const whatsNew = WhatsNew_all();\n  const lastDate = parseInt(lastDateStr, 10);\n  return ObjectUtils_keys(whatsNew).reduce<Record<string, IWhatsNew>>((memo, dateStr) => {\n    const date = parseInt(dateStr, 10);\n    if (date > lastDate) {\n      memo[dateStr] = whatsNew[dateStr];\n    }\n    return memo;\n  }, {});\n}\n","import { content as changelogMarkdown } from \"../generated/whatsnew\";\n\nexport interface IWhatsNewEntry {\n  dateStr: string;\n  title: string;\n  body: string;\n}\n\nlet cached: IWhatsNewEntry[] | undefined;\n\nexport function WhatsNewParser_parseAll(): IWhatsNewEntry[] {\n  if (cached) {\n    return cached;\n  }\n  cached = parse(changelogMarkdown);\n  return cached;\n}\n\nfunction parse(source: string): IWhatsNewEntry[] {\n  const lines = source.split(/\\r?\\n/);\n  const entries: IWhatsNewEntry[] = [];\n\n  let i = 0;\n  while (i < lines.length) {\n    if (lines[i].trim() !== \"---\") {\n      i += 1;\n      continue;\n    }\n    i += 1;\n\n    const meta: Record<string, string> = {};\n    while (i < lines.length && lines[i].trim() !== \"---\") {\n      const line = lines[i];\n      const match = /^([A-Za-z][A-Za-z0-9_-]*)\\s*:\\s*(.*)$/.exec(line);\n      if (match) {\n        meta[match[1].toLowerCase()] = match[2].trim();\n      }\n      i += 1;\n    }\n    if (i >= lines.length) {\n      break;\n    }\n    i += 1;\n\n    const bodyLines: string[] = [];\n    while (i < lines.length) {\n      if (lines[i].trim() === \"---\" && isFrontmatterStart(lines, i)) {\n        break;\n      }\n      bodyLines.push(lines[i]);\n      i += 1;\n    }\n\n    const dateRaw = meta.date || \"\";\n    const dateStr = dateRaw.replace(/-/g, \"\");\n    const title = meta.title || \"\";\n    if (!/^\\d{8}$/.test(dateStr)) {\n      continue;\n    }\n    entries.push({\n      dateStr,\n      title,\n      body: bodyLines.join(\"\\n\").trim(),\n    });\n  }\n\n  return entries;\n}\n\nfunction isFrontmatterStart(lines: string[], idx: number): boolean {\n  for (let j = idx + 1; j < lines.length; j += 1) {\n    const trimmed = lines[j].trim();\n    if (trimmed === \"---\") {\n      return true;\n    }\n    if (trimmed === \"\") {\n      return false;\n    }\n    if (!/^[A-Za-z][A-Za-z0-9_-]*\\s*:/.test(trimmed)) {\n      return false;\n    }\n  }\n  return false;\n}\n","import { IDispatch } from \"../ducks/types\";\nimport { IState, updateState } from \"./state\";\nimport { lb } from \"lens-shmens\";\nimport { WhatsNew_all } from \"./whatsnew\";\n\nexport function WhatsNew_updateStorage(dispatch: IDispatch): void {\n  const latestDateStr = Object.keys(WhatsNew_all()).sort().reverse()[0];\n  updateState(\n    dispatch,\n    [lb<IState>().p(\"storage\").p(\"whatsNew\").record(latestDateStr), lb<IState>().p(\"showWhatsNew\").record(false)],\n    \"Mark what's new as read\"\n  );\n}\n\nexport function WhatsNew_showWhatsNew(dispatch: IDispatch): void {\n  updateState(dispatch, [lb<IState>().p(\"showWhatsNew\").record(true)], \"Show what's new\");\n}\n","import { IHistoryRecord, IWorkoutOutcome } from \"../types\";\nimport { IHealthWorkoutPayload } from \"../utils/healthAdapter\";\nimport { History_calories } from \"./history\";\n\nconst maxWorkoutOutcomes = 20;\nconst healthSaveMaxAgeMs = 24 * 60 * 60 * 1000;\n\nexport function WorkoutOutcome_add(\n  outcomes: IWorkoutOutcome[] | undefined,\n  outcome: Omit<IWorkoutOutcome, \"vtype\">\n): IWorkoutOutcome[] {\n  const others = (outcomes ?? []).filter((o) => o.id !== outcome.id);\n  return [...others, { vtype: \"workout_outcome\" as const, ...outcome }]\n    .sort((a, b) => a.endTime - b.endTime || a.id - b.id)\n    .slice(-maxWorkoutOutcomes);\n}\n\nexport function WorkoutOutcome_syncId(id: number): string {\n  return `liftosaur-workout-${id}`;\n}\n\nexport function WorkoutOutcome_healthSaves(\n  oldOutcomes: IWorkoutOutcome[] | undefined,\n  newOutcomes: IWorkoutOutcome[] | undefined,\n  history: IHistoryRecord[],\n  nowMs: number\n): IHealthWorkoutPayload[] {\n  const oldIds = new Set((oldOutcomes ?? []).map((o) => o.id));\n  const payloads: IHealthWorkoutPayload[] = [];\n  for (const outcome of newOutcomes ?? []) {\n    if (\n      oldIds.has(outcome.id) ||\n      outcome.outcome !== \"finish\" ||\n      !outcome.healthSync ||\n      nowMs - outcome.endTime > healthSaveMaxAgeMs\n    ) {\n      continue;\n    }\n    const record = history.find((r) => r.id === outcome.id);\n    if (record != null) {\n      payloads.push(WorkoutOutcome_healthPayload(record));\n    }\n  }\n  return payloads;\n}\n\nexport function WorkoutOutcome_healthPayload(record: IHistoryRecord): IHealthWorkoutPayload {\n  const intervals: [number, number | null][] = (record.intervals ?? []).map(([s, e]) => [s, e ?? null]);\n  const closed = intervals.filter((i): i is [number, number] => i[1] != null);\n  const startMs = closed[0]?.[0] ?? record.startTime;\n  return {\n    startMs,\n    endMs: closed[closed.length - 1]?.[1] ?? record.endTime ?? startMs,\n    calories: History_calories(record),\n    intervals,\n    syncId: WorkoutOutcome_syncId(record.id),\n  };\n}\n","export interface IWorkoutTimeEstimateSet {\n  reps?: number;\n  timer?: number;\n  setTimer?: number;\n  auto?: boolean;\n}\n\nexport interface IWorkoutTimeEstimateExercise {\n  superset?: string;\n  isUnilateral?: boolean;\n  sets: IWorkoutTimeEstimateSet[];\n}\n\nexport interface IWorkoutTimeEstimateTimers {\n  rest: number;\n  superset?: number;\n}\n\nconst secondsPerRep = 7;\nconst prepareSeconds = 20;\n\nfunction setWorkMs(set: IWorkoutTimeEstimateSet, isUnilateral: boolean | undefined): number {\n  const prepare = set.auto ? 0 : prepareSeconds;\n  const sideWork = set.setTimer != null ? set.setTimer : (set.reps ?? 0) * secondsPerRep;\n  const sides = isUnilateral ? 2 : 1;\n  return (prepare + sideWork * sides) * 1000;\n}\n\nexport function WorkoutTimeEstimate_dayMs(\n  exercises: IWorkoutTimeEstimateExercise[],\n  timers: IWorkoutTimeEstimateTimers\n): number {\n  let totalMs = 0;\n  const visitedSupersets = new Set<string>();\n  for (const exercise of exercises) {\n    if (exercise.superset == null) {\n      totalMs += straightSetsMs(exercise, timers.rest);\n    } else if (!visitedSupersets.has(exercise.superset)) {\n      visitedSupersets.add(exercise.superset);\n      const group = exercises.filter((e) => e.superset === exercise.superset);\n      totalMs +=\n        group.length > 1 ? supersetMs(group, timers) : straightSetsMs(exercise, timers.superset ?? timers.rest);\n    }\n  }\n  return totalMs;\n}\n\nfunction straightSetsMs(exercise: IWorkoutTimeEstimateExercise, restTimer: number): number {\n  return exercise.sets.reduce(\n    (acc, set) => acc + setWorkMs(set, exercise.isUnilateral) + (set.timer ?? restTimer) * 1000,\n    0\n  );\n}\n\nfunction supersetMs(group: IWorkoutTimeEstimateExercise[], timers: IWorkoutTimeEstimateTimers): number {\n  const rounds = Math.max(...group.map((e) => e.sets.length));\n  let totalMs = 0;\n  for (let round = 0; round < rounds; round += 1) {\n    const roundMembers = group.filter((e) => e.sets[round] != null);\n    roundMembers.forEach((exercise, index) => {\n      const set = exercise.sets[round];\n      const isLastInRound = index === roundMembers.length - 1;\n      const rest = isLastInRound ? (set.timer ?? timers.superset ?? timers.rest) : (timers.superset ?? 0);\n      totalMs += setWorkMs(set, exercise.isUnilateral) + rest * 1000;\n    });\n  }\n  return totalMs;\n}\n","export function getNavigationService(): Promise<typeof import(\"./navigationService\")> {\n  return import(\"./navigationService\");\n}\n\nexport function getNavigationRef(): Promise<typeof import(\"./navigationRef\")> {\n  return import(\"./navigationRef\");\n}\n\nexport function getNavigationContext(): Promise<(typeof import(\"@react-navigation/native\"))[\"NavigationContext\"]> {\n  return import(\"@react-navigation/native\").then((mod) => mod.NavigationContext);\n}\n","import type { JSX } from \"react\";\n\nexport function AiPromptContent(): JSX.Element {\n  return (\n    <section className=\"flex flex-col max-w-2xl px-4 py-6 mx-auto\">\n      <h1 className=\"text-2xl font-bold\">The Liftoscript Prompt Generator is retired</h1>\n      <p className=\"mt-4 text-text-secondary\">\n        This page used to generate a big prompt you'd copy into ChatGPT, Claude or Gemini to convert a workout program\n        into Liftoscript, then copy the result back into the web editor. There's a much better way to do that now.\n      </p>\n\n      <h2 className=\"mt-8 text-xl font-bold\">Use the MCP server instead</h2>\n      <p className=\"mt-4 text-text-secondary\">\n        The{\" \"}\n        <a className=\"font-bold underline text-text-link\" href=\"/doc/mcp\">\n          Liftosaur MCP server\n        </a>{\" \"}\n        connects Claude, ChatGPT or Gemini directly to Liftosaur, so there's no copy-pasting - you just ask, and the\n        assistant does the work.\n      </p>\n      <p className=\"mt-4 text-text-secondary\">\n        <strong>Free, no account needed.</strong> The reference tools are open to everyone: the Liftoscript language\n        reference, complete program examples, the program design guide, the built-in program sources, and the exercise\n        list. That's enough for an assistant to write valid Liftoscript for you, which you can then paste into the{\" \"}\n        <a className=\"font-bold underline text-text-link\" href=\"/planner\">\n          Web Editor\n        </a>{\" \"}\n        yourself - the same thing this page used to help with, only better.\n      </p>\n      <p className=\"mt-4 text-text-secondary\">\n        <strong>Premium.</strong> Anything that touches your account needs an active subscription: creating and editing\n        your programs, logging workouts, reading your history, testing progressions in the playground, and managing\n        exercises, gyms and measurements.\n      </p>\n\n      <h2 className=\"mt-8 text-xl font-bold\">Some history</h2>\n      <p className=\"mt-4 text-text-secondary\">\n        This generator shipped in June 2025, back when LLMs had no way to reach into an app. Handing you a\n        carefully-built prompt to paste elsewhere was the best available option, and it worked well enough for a while.\n      </p>\n      <p className=\"mt-4 text-text-secondary\">\n        The Liftosaur MCP server arrived in March 2026 and made the whole round trip unnecessary. On top of that, the\n        generator could fetch arbitrary URLs on Liftosaur's behalf to read your program from a spreadsheet or a webpage\n        - convenient, but not something worth keeping around for a feature that has a better replacement.\n      </p>\n\n      <p className=\"mt-8 text-text-secondary\">\n        See the{\" \"}\n        <a className=\"font-bold underline text-text-link\" href=\"/doc/mcp\">\n          MCP server docs\n        </a>{\" \"}\n        for setup instructions, or the{\" \"}\n        <a className=\"font-bold underline text-text-link\" href=\"/doc\">\n          Liftoscript docs\n        </a>{\" \"}\n        if you'd rather write programs by hand.\n      </p>\n    </section>\n  );\n}\n","import { IPlannerProgramExerciseWarmupSet, IPlannerProgramProperty, IExportedPlannerProgram } from \"./types\";\nimport { parser as plannerExerciseParser } from \"../plannerExerciseParser\";\nimport {\n  IPlannerEvalFullResult,\n  IPlannerEvalResult,\n  PlannerExerciseEvaluator,\n  PlannerSyntaxError,\n} from \"../plannerExerciseEvaluator\";\nimport {\n  IAllCustomExercises,\n  IAllEquipment,\n  IDayData,\n  IExerciseType,\n  IPlannerProgram,\n  IPlannerProgramWeek,\n  IProgram,\n  ISettings,\n} from \"../../../types\";\nimport {\n  ObjectUtils_isEqual,\n  ObjectUtils_clone,\n  ObjectUtils_filter,\n  ObjectUtils_findKeyByExpression,\n} from \"../../../utils/object\";\nimport { IPlannerExerciseEvaluatorTextWeek, PlannerExerciseEvaluatorText } from \"../plannerExerciseEvaluatorText\";\nimport { IPlannerTopLineItem } from \"../plannerExerciseEvaluator\";\nimport {\n  IEvaluatedProgram,\n  IExportedProgram,\n  Program_evaluate,\n  Program_create,\n  Program_getAllProgramExercises,\n  Program_exportedPlannerProgramToExportedProgram,\n} from \"../../../models/program\";\nimport {\n  PlannerEvaluator_compareExerciseOrder,\n  PlannerEvaluator_evaluate,\n  PlannerEvaluator_evaluateFull,\n} from \"../plannerEvaluator\";\nimport { IWeightChange } from \"../../../models/programExercise\";\nimport { Storage_getDefault, Storage_get } from \"../../../models/storage\";\nimport { Weight_eqNull } from \"../../../models/weight\";\nimport { PP_iterate2, PP_iterate } from \"../../../models/pp\";\nimport { IEither } from \"../../../utils/types\";\nimport { getLatestMigrationVersion } from \"../../../migrations/migrations\";\nimport { ProgramToPlanner } from \"../../../models/programToPlanner\";\nimport { PlannerKey_fromLabelNameAndEquipment, PlannerKey_fromExerciseType } from \"../plannerKey\";\nimport { Exercise_get } from \"../../../models/exercise\";\nimport { UidFactory_generateUid } from \"../../../utils/generator\";\nimport { CollectionUtils_compact } from \"../../../utils/collection\";\n\nexport type IExerciseTypeToProperties = Record<string, (IPlannerProgramProperty & { dayData: Required<IDayData> })[]>;\nexport type IExerciseTypeToWarmupSets = Record<string, IPlannerProgramExerciseWarmupSet[] | undefined>;\n\nexport class PlannerDayDataError extends Error {\n  constructor(\n    message: string,\n    public readonly dayData: Required<IDayData>\n  ) {\n    super(message);\n  }\n}\n\nexport type IDereuseDecision = \"all\" | \"weight\" | \"rpe\" | \"timer\";\n\nexport function PlannerProgram_isValid(program: IPlannerProgram | undefined, settings: ISettings): boolean {\n  if (!program) {\n    return false;\n  }\n  const { evaluatedWeeks } = PlannerProgram_evaluate(program, settings);\n  return evaluatedWeeks.every((week) => week.every((day) => day.success));\n}\n\nexport function PlannerProgram_replaceWeight(\n  program: IEvaluatedProgram,\n  programExerciseId: string,\n  weightChanges: IWeightChange[]\n): IEvaluatedProgram {\n  if (weightChanges.every((wc) => ObjectUtils_isEqual(wc.originalWeight, wc.weight))) {\n    return program;\n  }\n  const newEvalutedProgram = ObjectUtils_clone(program);\n  PP_iterate2(newEvalutedProgram.weeks, (ex) => {\n    if (ex.key === programExerciseId) {\n      for (const setVariation of ex.evaluatedSetVariations) {\n        for (const set of setVariation.sets) {\n          const weightChange = weightChanges.find((wc) => Weight_eqNull(wc.originalWeight, set.weight));\n          if (weightChange != null) {\n            set.weight = weightChange.weight;\n          }\n        }\n      }\n    }\n  });\n  return newEvalutedProgram;\n}\n\n// Evaluation throws PlannerSyntaxError rather than returning it, and its prototype chain\n// doesn't survive the ES5 downlevel — `instanceof Error` is false for it, so a caught planner\n// error has to be read structurally or it stringifies to \"[object Object]\".\nexport function PlannerProgram_thrownErrorMessage(error: unknown): string {\n  if (typeof error === \"object\" && error != null && typeof (error as { message?: unknown }).message === \"string\") {\n    return (error as { message: string }).message;\n  }\n  return String(error);\n}\n\nexport function PlannerProgram_replaceExercise(\n  planner: IPlannerProgram,\n  key: string,\n  newLabel: string | undefined,\n  toExerciseType: IExerciseType | string,\n  settings: ISettings,\n  dayData?: Required<IDayData>\n): IPlannerProgram {\n  const evaluatedProgram = ObjectUtils_clone(Program_evaluate({ ...Program_create(\"Temp\"), planner }, settings));\n  const allExercises = Program_getAllProgramExercises(evaluatedProgram);\n  let labelSuffix: string | undefined = undefined;\n  let noConflicts = false;\n\n  function getLabel(label?: string): string | undefined {\n    return (newLabel ?? label) || labelSuffix\n      ? CollectionUtils_compact([newLabel ?? label, labelSuffix]).join(\"-\")\n      : undefined;\n  }\n\n  if (dayData) {\n    noConflicts = true;\n  }\n\n  while (!noConflicts) {\n    const conflictingExercises = allExercises.filter((e) => {\n      const newKey =\n        typeof toExerciseType === \"string\"\n          ? PlannerKey_fromLabelNameAndEquipment(getLabel(e.label), toExerciseType, undefined, settings.exercises)\n          : PlannerKey_fromExerciseType(toExerciseType, getLabel(e.label));\n      return (\n        e.key === newKey && (!dayData || (dayData.week !== e.dayData.week && dayData.dayInWeek !== e.dayData.dayInWeek))\n      );\n    });\n    if (conflictingExercises.length > 0) {\n      noConflicts = false;\n      labelSuffix = UidFactory_generateUid(3);\n    } else {\n      noConflicts = true;\n    }\n  }\n\n  const renameMapping: Record<string, { to: string; dayData?: Required<IDayData> }> = {};\n  PP_iterate2(evaluatedProgram.weeks, (exercise, weekIndex, dayInWeekIndex) => {\n    if (exercise.key === key) {\n      if (!dayData || (dayData.week === weekIndex + 1 && dayData.dayInWeek === dayInWeekIndex + 1)) {\n        exercise.exerciseType = typeof toExerciseType === \"string\" ? undefined : toExerciseType;\n        const newLabel2 = getLabel(exercise.label);\n        exercise.label = newLabel2;\n        // Replacing collapses any multi-variation ladder into a single current variation for the new\n        // target, so serialization/identity come from the new exercise instead of the stale ladder.\n        const newName =\n          typeof toExerciseType === \"string\" ? toExerciseType : Exercise_get(toExerciseType, settings.exercises).name;\n        exercise.exerciseVariations = [{ exerciseType: exercise.exerciseType, name: newName, isCurrent: true }];\n        if (typeof toExerciseType === \"string\") {\n          exercise.notused = true;\n          exercise.fullName = `${newLabel2 ? `${newLabel2}: ` : \"\"}${toExerciseType}`;\n        }\n        const newKey =\n          typeof toExerciseType === \"string\"\n            ? PlannerKey_fromLabelNameAndEquipment(newLabel2, toExerciseType, undefined, settings.exercises)\n            : PlannerKey_fromExerciseType(toExerciseType, newLabel2);\n        renameMapping[exercise.key] = { to: newKey, dayData };\n        exercise.key = newKey;\n      }\n    }\n  });\n  return new ProgramToPlanner(evaluatedProgram, settings).convertToPlanner({ renameMapping });\n}\n\nexport function PlannerProgram_replaceAndValidateExercise(\n  program: IProgram,\n  key: string,\n  toExerciseType: IExerciseType,\n  settings: ISettings,\n  dayData?: Required<IDayData>\n): IEither<IProgram, string> {\n  const newPlanner = PlannerProgram_replaceExercise(\n    program.planner!,\n    key,\n    undefined,\n    toExerciseType,\n    settings,\n    dayData\n  );\n  const { evaluatedWeeks } = PlannerEvaluator_evaluate(newPlanner, settings);\n  let error: PlannerSyntaxError | undefined;\n  for (const week of evaluatedWeeks) {\n    for (const day of week) {\n      if (!day.success) {\n        error = day.error;\n        break;\n      }\n    }\n  }\n  if (error) {\n    return { success: false, error: error.message };\n  } else {\n    return { success: true, data: { ...program, planner: newPlanner } };\n  }\n}\n\nexport function PlannerProgram_modifyTopLineItems(\n  aPlannerProgram: IPlannerProgram,\n  settings: ISettings,\n  firstPass: (\n    line: IPlannerTopLineItem,\n    weekIndex: number,\n    dayInWeekIndex: number,\n    dayIndex: number,\n    lineIndex: number\n  ) => IPlannerTopLineItem\n): IPlannerProgram {\n  let dayIndex = 0;\n  const plannerProgram = ObjectUtils_clone(aPlannerProgram);\n  const mapping = plannerProgram.weeks.map((week, weekIndex) => {\n    return week.days.map((day, dayInWeekIndex) => {\n      const tree = plannerExerciseParser.parse(day.exerciseText);\n      const evaluator = new PlannerExerciseEvaluator(day.exerciseText, settings, \"perday\", {\n        day: dayIndex + 1,\n        dayInWeek: dayInWeekIndex + 1,\n        week: weekIndex + 1,\n      });\n      dayIndex += 1;\n      const map = evaluator.topLineMap(tree.topNode);\n      return map;\n    });\n  });\n\n  dayIndex = 0;\n  for (let weekIndex = 0; weekIndex < mapping.length; weekIndex += 1) {\n    const week = mapping[weekIndex];\n    for (let dayInWeekIndex = 0; dayInWeekIndex < week.length; dayInWeekIndex += 1) {\n      const day = week[dayInWeekIndex];\n      for (let lineIndex = 0; lineIndex < day.length; lineIndex += 1) {\n        const line = day[lineIndex];\n        const newLine = firstPass(line, weekIndex, dayInWeekIndex, dayIndex, lineIndex);\n        day[lineIndex] = newLine;\n      }\n      dayIndex += 1;\n    }\n  }\n\n  for (let weekIndex = 0; weekIndex < mapping.length; weekIndex += 1) {\n    const programWeek = plannerProgram.weeks[weekIndex];\n    const week = mapping[weekIndex];\n    for (let dayInWeekIndex = 0; dayInWeekIndex < week.length; dayInWeekIndex += 1) {\n      const day = week[dayInWeekIndex];\n      const programDay = programWeek.days[dayInWeekIndex];\n      let str = \"\";\n      for (const line of day) {\n        str += PlannerProgram_topLineItemToText(line);\n      }\n      programDay.exerciseText = str.trim();\n    }\n  }\n\n  return plannerProgram;\n}\n\nexport function PlannerProgram_topLineItemToText(line: IPlannerTopLineItem): string {\n  let str = \"\";\n  if (line.type === \"description\") {\n    //\n  } else if (line.type === \"exercise\") {\n    if (!line.used) {\n      if (line.descriptions && line.descriptions.length > 0) {\n        str += `${line.descriptions.join(\"\\n\\n\")}\\n`;\n      }\n      let repeatStr = \"\";\n      if ((line.order != null && line.order !== 0) || (line.repeatRanges && line.repeatRanges.length > 0)) {\n        const repeatParts = [];\n        if (line.order != null && line.order !== 0) {\n          repeatParts.push(line.order);\n        }\n        if (line.repeatRanges && line.repeatRanges.length > 0) {\n          repeatParts.push(line.repeatRanges.join(\",\"));\n        }\n        repeatStr = `[${repeatParts.join(\",\")}]`;\n      }\n      str += `${line.fullName}${repeatStr} / ${line.sections}\\n`;\n    }\n  } else {\n    str += line.value + \"\\n\";\n  }\n  return str;\n}\n\nexport function PlannerProgram_switchToUnit(plannerProgram: IPlannerProgram, settings: ISettings): IPlannerProgram {\n  const newPlannerProgram = ObjectUtils_clone(plannerProgram);\n  for (const week of newPlannerProgram.weeks) {\n    for (const day of week.days) {\n      const evaluator = new PlannerExerciseEvaluator(day.exerciseText, settings, \"perday\");\n      const tree = plannerExerciseParser.parse(day.exerciseText);\n      day.exerciseText = evaluator.switchWeightsToUnit(tree.topNode, settings);\n    }\n  }\n  return newPlannerProgram;\n}\n\nexport function PlannerProgram_hasNonSelectedWeightUnit(plannerProgram: IPlannerProgram, settings: ISettings): boolean {\n  for (const week of plannerProgram.weeks) {\n    for (const day of week.days) {\n      const tree = plannerExerciseParser.parse(day.exerciseText);\n      const evaluator = new PlannerExerciseEvaluator(day.exerciseText, settings, \"perday\");\n      if (evaluator.hasWeightInUnit(tree.topNode, settings.units === \"kg\" ? \"lb\" : \"kg\")) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\nexport function PlannerProgram_compact(\n  oldPlannerProgram: IPlannerProgram,\n  plannerProgram: IPlannerProgram,\n  settings: ISettings,\n  additionalRepeatingExercises?: Set<string>,\n  renameMapping?: Record<string, { to: string; dayData?: Required<IDayData> }>\n): IPlannerProgram {\n  let dayIndex = 0;\n  const repeatingExercises = new Set<string>();\n  const { evaluatedWeeks } = PlannerProgram_evaluate(ObjectUtils_clone(oldPlannerProgram), settings);\n  const { evaluatedWeeks: newEvaluatedWeeks } = PlannerProgram_evaluate(ObjectUtils_clone(plannerProgram), settings);\n  for (const ev of [evaluatedWeeks, newEvaluatedWeeks]) {\n    PP_iterate(ev, (exercise) => {\n      if (exercise.repeat != null && exercise.repeat.length > 0) {\n        repeatingExercises.add(exercise.key);\n      }\n    });\n  }\n  for (const ex of additionalRepeatingExercises || []) {\n    repeatingExercises.add(ex);\n  }\n\n  // The weeks that actually spell a repeating exercise out. A range may reach backwards\n  // (`tmpl[1-3]` written in week 3), so it can't just be scanned forward from the first week the\n  // exercise shows up in - that week may be a materialized copy with nothing to declare. There can\n  // be more than one declaration per key/day (`tmp[1-3]` in week 3 and `tmp[4-5]` in week 4), and\n  // each one owns its own range, so this is a set rather than a single week.\n  const declaringWeekIndexes: Record<string, Set<number>> = {};\n  PP_iterate(evaluatedWeeks, (exercise, weekIndex, dayInWeekIndex) => {\n    if (!exercise.isRepeat && exercise.repeat != null && exercise.repeat.length > 0) {\n      const declaringKey = `${exercise.key}_${dayInWeekIndex}`;\n      declaringWeekIndexes[declaringKey] = declaringWeekIndexes[declaringKey] || new Set();\n      declaringWeekIndexes[declaringKey].add(weekIndex);\n    }\n  });\n\n  // declaringWeekIndexes is keyed by the old program's exercise keys, while the lines being\n  // compacted come from the newly printed text - PlannerProgram_replaceExercise renames keys in\n  // between. Both the declaring lookup and claimWeek's `repeating` check have to go back through\n  // the rename to find the exercise they're talking about.\n  function oldKeyFor(value: string, weekIndex: number, dayInWeekIndex: number): string {\n    if (!renameMapping) {\n      return value;\n    }\n    const beforeRenaming = ObjectUtils_findKeyByExpression(\n      renameMapping,\n      (_, v) =>\n        v.to === value &&\n        (v.dayData == null || (v.dayData.week === weekIndex + 1 && v.dayData.dayInWeek === dayInWeekIndex + 1))\n    );\n    return beforeRenaming ?? value;\n  }\n\n  const lastDescriptions: Partial<Record<number, string | undefined>> = {};\n  plannerProgram.weeks.forEach((week) => {\n    week.days.forEach((day, dayInWeekIndex) => {\n      if (lastDescriptions[dayInWeekIndex] == null) {\n        lastDescriptions[dayInWeekIndex] = day.description;\n      } else if (lastDescriptions[dayInWeekIndex] === day.description) {\n        day.description = undefined;\n      } else {\n        lastDescriptions[dayInWeekIndex] = day.description;\n      }\n    });\n  });\n\n  const mapping = plannerProgram.weeks.map((week, weekIndex) => {\n    return week.days.map((day, dayInWeekIndex) => {\n      const tree = plannerExerciseParser.parse(day.exerciseText);\n      const evaluator = new PlannerExerciseEvaluator(day.exerciseText, settings, \"perday\", {\n        day: dayIndex + 1,\n        dayInWeek: dayInWeekIndex + 1,\n        week: weekIndex + 1,\n      });\n      dayIndex += 1;\n      const map = evaluator.topLineMap(tree.topNode);\n      return map;\n    });\n  });\n\n  // Declaring weeks go first, so a range written backwards (`tmpl[1-3]` in week 3) keeps the\n  // spelled-out line in the week that spells it out. Everything left over then compacts forward,\n  // which is what a repeat broken up by a mid-program change (`Squat[1-5]` splitting into `[1-2]`,\n  // week 3, `[4-5]`) needs.\n  for (const declaringPass of [true, false]) {\n    for (let weekIndex = 0; weekIndex < mapping.length; weekIndex += 1) {\n      const week = mapping[weekIndex];\n      for (dayIndex = 0; dayIndex < week.length; dayIndex += 1) {\n        const day = week[dayIndex];\n        for (const line of day) {\n          if (line.type !== \"exercise\" || line.used || !repeatingExercises.has(line.value)) {\n            continue;\n          }\n          const declaringWeeks = declaringWeekIndexes[`${oldKeyFor(line.value, weekIndex, dayIndex)}_${dayIndex}`];\n          if (!!declaringWeeks?.has(weekIndex) !== declaringPass) {\n            continue;\n          }\n          const claimWeek = (repeatWeekIndex: number): boolean => {\n            const repeatDay = mapping[repeatWeekIndex]?.[dayIndex];\n            const repeatedExercises = (repeatDay || []).filter((e) => {\n              if (\n                e.type !== \"exercise\" ||\n                e.used ||\n                e.value !== line.value ||\n                e.sectionsToReuse !== line.sectionsToReuse ||\n                e.exerciseIndex !== line.exerciseIndex ||\n                !ObjectUtils_isEqual(e.descriptions || [], line.descriptions || [])\n              ) {\n                return false;\n              }\n              const oldKey = oldKeyFor(line.value, repeatWeekIndex, dayIndex);\n              // A week that spells the exercise out owns its own range - only materialized copies\n              // are collapsible. Without this, `tmp[1-3]` in week 3 and `tmp[4-5]` in week 4 let\n              // week 1's copy swallow week 3's line, taking the progress block written on it.\n              if (declaringWeekIndexes[`${oldKey}_${dayIndex}`]?.has(repeatWeekIndex)) {\n                return false;\n              }\n              const oldDay = evaluatedWeeks[repeatWeekIndex][dayIndex];\n              const oldExercise = oldDay.success ? oldDay.data.find((ex) => ex.key === oldKey) : undefined;\n              return oldExercise?.repeating?.includes(weekIndex + 1);\n            });\n            for (const e of repeatedExercises) {\n              e.used = true;\n            }\n            return repeatedExercises.length > 0;\n          };\n          let firstWeek = weekIndex + 1;\n          let lastWeek = weekIndex + 1;\n          for (let repeatWeekIndex = weekIndex + 1; repeatWeekIndex < mapping.length; repeatWeekIndex += 1) {\n            if (!claimWeek(repeatWeekIndex)) {\n              break;\n            }\n            lastWeek = repeatWeekIndex + 1;\n          }\n          if (declaringPass) {\n            for (let repeatWeekIndex = weekIndex - 1; repeatWeekIndex >= 0; repeatWeekIndex -= 1) {\n              if (!claimWeek(repeatWeekIndex)) {\n                break;\n              }\n              firstWeek = repeatWeekIndex + 1;\n            }\n          }\n          line.repeatRanges = firstWeek === lastWeek ? [] : [`${firstWeek}-${lastWeek}`];\n        }\n      }\n    }\n  }\n\n  for (let weekIndex = 0; weekIndex < mapping.length; weekIndex += 1) {\n    const programWeek = plannerProgram.weeks[weekIndex];\n    const week = mapping[weekIndex];\n    for (dayIndex = 0; dayIndex < week.length; dayIndex += 1) {\n      const day = week[dayIndex];\n      const programDay = programWeek.days[dayIndex];\n      let str = \"\";\n      let ongoingDescriptions = false;\n      for (const line of day) {\n        if (line.type === \"description\") {\n          ongoingDescriptions = true;\n          //\n        } else if (line.type === \"exercise\") {\n          ongoingDescriptions = false;\n          if (!line.used) {\n            if (line.descriptions && line.descriptions.length > 0) {\n              str += `${line.descriptions.filter((d) => d.trim()).join(\"\\n\\n\")}\\n`;\n            }\n            let repeatStr = \"\";\n            if ((line.order != null && line.order !== 0) || (line.repeatRanges && line.repeatRanges.length > 0)) {\n              const repeatParts = [];\n              if (line.order != null && line.order !== 0) {\n                repeatParts.push(line.order);\n              }\n              if (line.repeatRanges && line.repeatRanges.length > 0) {\n                repeatParts.push(line.repeatRanges.join(\",\"));\n              }\n              repeatStr = `[${repeatParts.join(\",\")}]`;\n            }\n            str += [`${line.fullName}${repeatStr}`, line.sections].filter((r) => r).join(\" / \") + `\\n`;\n          }\n        } else if (line.type === \"empty\") {\n          if (!ongoingDescriptions) {\n            str += line.value + \"\\n\";\n          }\n        } else {\n          str += line.value + \"\\n\";\n        }\n      }\n      programDay.exerciseText = str.trim();\n    }\n  }\n\n  return plannerProgram;\n}\n\nexport function PlannerProgram_groupedTopLines(topLine: IPlannerTopLineItem[][][]): IPlannerTopLineItem[][][][] {\n  const groupedTopLine: IPlannerTopLineItem[][][][] = [];\n  for (let weekIndex = 0; weekIndex < topLine.length; weekIndex += 1) {\n    const topLineWeek = topLine[weekIndex];\n    groupedTopLine.push([]);\n    for (let dayInWeekIndex = 0; dayInWeekIndex < topLineWeek.length; dayInWeekIndex += 1) {\n      const topLineDay = topLineWeek[dayInWeekIndex];\n      const group: IPlannerTopLineItem[][] = [];\n      groupedTopLine[weekIndex].push(group);\n      let reset = true;\n      for (let lineIndex = 0; lineIndex < topLineDay.length; lineIndex += 1) {\n        if (reset) {\n          group.push([]);\n          reset = false;\n        }\n        const line = topLineDay[lineIndex];\n        group[group.length - 1] = group[group.length - 1] || [];\n        group[group.length - 1].push(line);\n        if (line.type === \"exercise\") {\n          reset = true;\n        }\n      }\n    }\n  }\n  for (const week of groupedTopLine) {\n    for (const day of week) {\n      day.sort((group1, group2) => {\n        const ex1 = group1.find((l) => l.type === \"exercise\");\n        const ex2 = group2.find((l) => l.type === \"exercise\");\n        if (ex1 == null || ex2 == null) {\n          return 0;\n        }\n        return PlannerEvaluator_compareExerciseOrder(ex1, ex2);\n      });\n    }\n  }\n  return groupedTopLine;\n}\n\nexport function PlannerProgram_topLineItems(\n  plannerProgram: IPlannerProgram,\n  settings: ISettings\n): IPlannerTopLineItem[][][] {\n  let dayIndex = 0;\n\n  const mapping = plannerProgram.weeks.map((week, weekIndex) => {\n    return week.days.map((day, dayInWeekIndex) => {\n      const tree = plannerExerciseParser.parse(day.exerciseText);\n      const evaluator = new PlannerExerciseEvaluator(day.exerciseText, settings, \"perday\", {\n        day: dayIndex + 1,\n        dayInWeek: dayInWeekIndex + 1,\n        week: weekIndex + 1,\n      });\n      dayIndex += 1;\n      const map = evaluator.topLineMap(tree.topNode);\n      return map;\n    });\n  });\n  for (let weekIndex = 0; weekIndex < mapping.length; weekIndex += 1) {\n    const week = mapping[weekIndex];\n    for (dayIndex = 0; dayIndex < week.length; dayIndex += 1) {\n      const day = week[dayIndex];\n      for (const exercise of day) {\n        for (const r of exercise.repeat || []) {\n          const reuseDay = mapping[r - 1]?.[dayIndex];\n          if (reuseDay && !reuseDay.some((e) => e.type === \"exercise\" && e.value === exercise.value)) {\n            if (exercise.descriptions) {\n              for (let di = 0; di < exercise.descriptions.length; di += 1) {\n                if (di !== 0) {\n                  reuseDay.push({ type: \"empty\", value: \"\" });\n                }\n                reuseDay.push({ type: \"description\", value: exercise.descriptions[di] });\n              }\n            }\n            reuseDay.push({ ...exercise, repeat: undefined, isRepeat: true });\n          }\n        }\n      }\n    }\n  }\n  return mapping;\n}\n\nexport function PlannerProgram_evaluate(\n  plannerProgram: IPlannerProgram,\n  settings: ISettings\n): { evaluatedWeeks: IPlannerEvalResult[][]; exerciseFullNames: string[] } {\n  return PlannerEvaluator_evaluate(plannerProgram, settings);\n}\n\nexport function PlannerProgram_evaluateFull(\n  fullProgramText: string,\n  settings: ISettings\n): { evaluatedWeeks: IPlannerEvalFullResult; exerciseFullNames: string[] } {\n  return PlannerEvaluator_evaluateFull(fullProgramText, settings);\n}\n\nexport function PlannerProgram_evaluateText(fullProgramText: string): IPlannerProgramWeek[] {\n  const tree = plannerExerciseParser.parse(fullProgramText);\n  return textWeeksToPlanner(new PlannerExerciseEvaluatorText(fullProgramText).evaluate(tree.topNode));\n}\n\nexport function PlannerProgram_parseText(fullProgramText: string): IEither<IPlannerProgramWeek[], PlannerSyntaxError> {\n  const evaluator = new PlannerExerciseEvaluatorText(fullProgramText, { isStrict: true });\n  try {\n    const data = evaluator.evaluate(plannerExerciseParser.parse(fullProgramText).topNode);\n    return { success: true, data: textWeeksToPlanner(data) };\n  } catch (e) {\n    if (e instanceof PlannerSyntaxError) {\n      return { success: false, error: e };\n    }\n    throw e;\n  }\n}\n\nfunction textWeeksToPlanner(data: IPlannerExerciseEvaluatorTextWeek[]): IPlannerProgramWeek[] {\n  const weeks: IPlannerProgramWeek[] = data.map((week) => {\n    return {\n      name: week.name,\n      description: week.description,\n      days: week.days.map((day) => {\n        return {\n          name: day.name,\n          description: day.description,\n          exerciseText: day.exercises.join(\"\").trim(),\n        };\n      }),\n    };\n  });\n  if (weeks.length === 0) {\n    weeks.push({ name: \"Week 1\", days: [{ name: \"Day 1\", exerciseText: \"\" }] });\n  }\n  return weeks;\n}\n\nexport function PlannerProgram_fullToWeekEvalResult(fullResult: IPlannerEvalFullResult): IPlannerEvalResult[][] {\n  return fullResult.success\n    ? fullResult.data.map((week) => week.days.map((d) => ({ success: true, data: d.exercises })))\n    : [[fullResult]];\n}\n\nexport function PlannerProgram_generateFullText(weeks: IPlannerProgramWeek[]): string {\n  let fullText = \"\";\n  for (const week of weeks) {\n    if (week.description != null) {\n      fullText +=\n        week.description\n          .split(\"\\n\")\n          .map((l) => (l ? `// ${l}` : \"//\"))\n          .join(\"\\n\") + \"\\n\";\n    }\n    fullText += `# ${week.name}\\n`;\n    for (const day of week.days) {\n      if (day.description != null) {\n        fullText +=\n          day.description\n            .split(\"\\n\")\n            .map((l) => `// ${l}`)\n            .join(\"\\n\") + \"\\n\";\n      }\n      fullText += `## ${day.name}\\n`;\n      fullText += `${day.exerciseText}\\n\\n`;\n    }\n    fullText += \"\\n\";\n  }\n  return fullText;\n}\n\nexport function PlannerProgram_usedExercises(\n  exercises: IAllCustomExercises,\n  evaluatedWeeks: IPlannerEvalResult[][]\n): IAllCustomExercises {\n  return ObjectUtils_filter(exercises, (_id, ex) => {\n    if (!ex) {\n      return false;\n    }\n\n    return evaluatedWeeks.some((week) => {\n      return week.some((day) => {\n        return day.success && day.data.some((d) => d.name.toLowerCase() === ex.name.toLowerCase());\n      });\n    });\n  });\n}\n\nexport function PlannerProgram_usedEquipment(\n  equipment: IAllEquipment,\n  evaluatedWeeks: IPlannerEvalResult[][]\n): IAllEquipment {\n  return ObjectUtils_filter(equipment, (key, value) => {\n    return evaluatedWeeks.some((week) => {\n      return week.some((day) => {\n        return day.success && day.data.some((d) => d.equipment?.toLowerCase() === key);\n      });\n    });\n  });\n}\n\nexport function PlannerProgram_convertExportedPlannerToProgram(\n  planner: IExportedPlannerProgram,\n  settings: ISettings\n): IExportedProgram {\n  const newProgram = Program_create(planner.program.name, planner.id);\n  const newSettings: ISettings = {\n    ...settings,\n    exercises: { ...settings.exercises, ...planner.settings.exercises },\n  };\n  const program = { ...newProgram, planner: planner.program };\n  return {\n    program: program,\n    settings: {\n      timers: newSettings.timers,\n      planner: newSettings.planner,\n      units: newSettings.units,\n    },\n    customExercises: planner.settings.exercises,\n    version: planner.version,\n  };\n}\n\nexport function PlannerProgram_buildExportedProgram(\n  id: string,\n  program: IPlannerProgram,\n  settings: ISettings,\n  nextDay?: number\n): IExportedProgram {\n  const { evaluatedWeeks } = PlannerProgram_evaluate(program, settings);\n\n  const exportedPlannerProgram: IExportedPlannerProgram = {\n    id,\n    type: \"v2\",\n    version: getLatestMigrationVersion(),\n    program: program,\n    plannerSettings: settings.planner,\n    settings: {\n      exercises: PlannerProgram_usedExercises(settings.exercises, evaluatedWeeks),\n      timer: settings.timers.workout ?? 0,\n    },\n  };\n  return Program_exportedPlannerProgramToExportedProgram(exportedPlannerProgram, nextDay);\n}\n\nexport async function PlannerProgram_getExportedPlannerProgram(\n  program: IExportedPlannerProgram,\n  settings: ISettings\n): Promise<IEither<IExportedPlannerProgram, string[]>> {\n  const storage = Storage_getDefault();\n  storage.version = program.version;\n  storage.programs = [{ ...Program_create(program.program.name), planner: program.program }];\n  storage.settings = { ...storage.settings, planner: program.plannerSettings || storage.settings.planner };\n  storage.settings.exercises = { ...storage.settings.exercises, ...settings.exercises };\n\n  const result = Storage_get(storage);\n  if (result.success) {\n    const newStorage = result.data;\n    return {\n      success: true,\n      data: {\n        id: program.id,\n        type: \"v2\",\n        version: newStorage.version,\n        program: newStorage.programs[0].planner!,\n        plannerSettings: storage.settings.planner,\n        settings: {\n          exercises: storage.settings.exercises || {},\n          timer: storage.settings.timers?.workout || 180,\n        },\n      },\n    };\n  } else {\n    return { success: false, error: result.error };\n  }\n}\n","import {\n  IPlannerProgramExercise,\n  IPlannerProgramExerciseEvaluatedSet,\n  IPlannerProgramExerciseEvaluatedSetVariation,\n  IPlannerProgramExerciseGlobals,\n  IPlannerProgramExerciseSet,\n  IPlannerProgramExerciseSetVariation,\n  IPlannerProgramExerciseVariation,\n  IPlannerProgramExerciseWithType,\n  IPlannerProgramExerciseWarmupSet,\n  IProgramExerciseProgress,\n  IProgramExerciseProgressType,\n} from \"./types\";\nimport { IPlannerEvalResult, PlannerExerciseEvaluator } from \"../plannerExerciseEvaluator\";\nimport type { IPlannerErrorDetails } from \"../../../syntaxErrorTypes\";\nimport { ObjectUtils_clone, ObjectUtils_filter, ObjectUtils_values } from \"../../../utils/object\";\nimport {\n  Weight_rpeMultiplier,\n  Weight_build,\n  Weight_buildPct,\n  Weight_display,\n  Weight_zero,\n  Weight_eq,\n  Weight_parsePct,\n  Weight_isPct,\n} from \"../../../models/weight\";\nimport {\n  IDayData,\n  IHistoryEntry,\n  IPercentage,\n  IProgramExerciseWarmupSet,\n  IProgramState,\n  IProgramStateMetadata,\n  ISettings,\n  IWeight,\n} from \"../../../types\";\nimport {\n  equipmentName,\n  IExercise,\n  warmupValues,\n  Exercise_findByName,\n  Exercise_get,\n  Exercise_fullName,\n} from \"../../../models/exercise\";\nimport { ProgramExercise_groupWarmupsSets } from \"../../../models/programExercise\";\nimport { MathUtils_roundTo0005 } from \"../../../utils/math\";\nimport { UidFactory_generateUid } from \"../../../utils/generator\";\nimport { PlannerKey_fromExerciseType } from \"../plannerKey\";\nimport { CollectionUtils_compact, CollectionUtils_groupByExpr } from \"../../../utils/collection\";\nimport { IEither } from \"../../../utils/types\";\nimport { IDisplaySet, Reps_groupDisplaySets } from \"../../../models/set\";\n\nexport type ILinearProgressionType = {\n  type: \"linear\";\n  increase: IWeight | IPercentage;\n  successesRequired?: number;\n  successesCounter?: number;\n  decrease?: IWeight | IPercentage;\n  failuresRequired?: number;\n  failuresCounter?: number;\n};\nexport type IDoubleProgressionType = {\n  type: \"double\";\n  increase: IWeight | IPercentage;\n  minReps: number;\n  maxReps: number;\n};\nexport type ISumRepsProgressionType = {\n  type: \"sumreps\";\n  increase: IWeight | IPercentage;\n  reps: number;\n};\nexport type ICustomProgressionType = {\n  type: \"custom\";\n};\nexport type IProgressionType =\n  | ILinearProgressionType\n  | IDoubleProgressionType\n  | ISumRepsProgressionType\n  | ICustomProgressionType;\n\nexport function PlannerProgramExercise_numberOfSets(exercise: IPlannerProgramExercise): number {\n  return PlannerProgramExercise_sets(exercise).reduce((acc, set) => acc + (set.repRange?.numberOfSets || 0), 0);\n}\n\nexport function PlannerProgramExercise_getExercise(\n  plannerExercise: IPlannerProgramExercise,\n  settings: ISettings\n): IExercise | undefined {\n  const exercise = Exercise_findByName(plannerExercise.name, settings.exercises);\n  if (exercise == null) {\n    return undefined;\n  }\n  exercise.equipment = plannerExercise.equipment || exercise?.equipment || exercise?.defaultEquipment;\n  return exercise;\n}\n\nexport function PlannerProgramExercise_setVariations(\n  exercise: IPlannerProgramExercise\n): IPlannerProgramExerciseSetVariation[] {\n  const originalSetVariations = exercise.setVariations;\n  const reuseSetVariations = exercise.reuse?.exercise?.setVariations;\n  const setVariations = (originalSetVariations?.length > 0 ? originalSetVariations : reuseSetVariations) || [];\n  return setVariations.length === 0\n    ? [{ sets: PlannerProgramExercise_sets(exercise), isCurrent: true }]\n    : setVariations;\n}\n\nexport function PlannerProgramExercise_warmups(\n  exercise: IPlannerProgramExercise\n): IPlannerProgramExerciseWarmupSet[] | undefined {\n  return exercise.warmupSets || exercise.reuse?.exercise?.warmupSets;\n}\n\nexport function PlannerProgramExercise_programWarmups(\n  exercise: IPlannerProgramExercise,\n  settings: ISettings\n): IProgramExerciseWarmupSet[] | undefined {\n  const exerciseWarmups = PlannerProgramExercise_warmups(exercise);\n  if (exerciseWarmups == null) {\n    return undefined;\n  }\n  const sets: IProgramExerciseWarmupSet[] = [];\n  for (const ws of exerciseWarmups) {\n    for (let i = 0; i < ws.numberOfSets; i += 1) {\n      let value: IWeight | number | undefined = ws.percentage ? ws.percentage / 100 : undefined;\n      if (value == null) {\n        value = ws.weight;\n      }\n      if (value == null) {\n        value = MathUtils_roundTo0005(Weight_rpeMultiplier(ws.reps, 4));\n      }\n      sets.push({\n        reps: ws.reps,\n        value,\n        threshold: Weight_build(0, settings.units),\n      });\n    }\n  }\n  return sets;\n}\n\nexport function PlannerProgramExercise_toUsed(\n  exercise?: IPlannerProgramExercise\n): IPlannerProgramExerciseWithType | undefined {\n  if (exercise?.exerciseType != null) {\n    return exercise as IPlannerProgramExerciseWithType;\n  } else {\n    return undefined;\n  }\n}\n\nexport function PlannerProgramExercise_evaluateSetVariations(\n  exercise: IPlannerProgramExercise,\n  setVariations: IPlannerProgramExerciseSetVariation[]\n): IPlannerProgramExerciseEvaluatedSetVariation[] {\n  const evaluatedSetVariations: IPlannerProgramExerciseEvaluatedSetVariation[] = [];\n  for (let i = 0; i < setVariations.length; i++) {\n    const sets = PlannerProgramExercise_sets(exercise, i);\n    const evaluatedSets: IPlannerProgramExerciseEvaluatedSet[] = [];\n    for (const aSet of sets) {\n      if (aSet.repRange == null) {\n        continue;\n      }\n      for (let j = 0; j < aSet.repRange.numberOfSets; j++) {\n        evaluatedSets.push({\n          maxrep: aSet.repRange.maxrep,\n          minrep: aSet.repRange.minrep,\n          weight: aSet.weight ? aSet.weight : aSet.percentage ? Weight_buildPct(aSet.percentage) : undefined,\n          timer: aSet.timer,\n          setTimer: aSet.setTimer,\n          isOverflowSetTimer: aSet.isOverflowSetTimer,\n          auto: aSet.auto,\n          rpe: aSet.rpe,\n          logRpe: !!aSet.logRpe,\n          label: aSet.label,\n          isAmrap: !!aSet.repRange.isAmrap,\n          isQuickAddSet: !!aSet.repRange.isQuickAddSet,\n          askWeight: !!aSet.askWeight,\n        });\n      }\n    }\n    evaluatedSetVariations.push({ sets: evaluatedSets, isCurrent: setVariations[i].isCurrent });\n  }\n  return evaluatedSetVariations;\n}\n\nexport function PlannerProgramExercise_sets(\n  exercise: IPlannerProgramExercise,\n  variationIndex?: number\n): IPlannerProgramExerciseSet[] {\n  const reusedSets = exercise.reuse?.exercise\n    ? exercise.reuse?.exercise?.setVariations[\n        variationIndex ?? PlannerProgramExercise_currentSetVariationIndex(exercise.reuse?.exercise)\n      ]?.sets\n    : undefined;\n  const reusedGlobals = exercise.reuse?.exercise?.globals || {};\n  variationIndex = variationIndex ?? PlannerProgramExercise_currentSetVariationIndex(exercise);\n  const currentSets = exercise.setVariations[variationIndex]?.sets;\n  const currentGlobals = exercise.globals;\n  const sets = currentSets || reusedSets || [];\n  return sets.map((aSet) => {\n    const set: IPlannerProgramExerciseSet = ObjectUtils_clone(aSet);\n    set.rpe = currentGlobals.rpe != null ? currentGlobals.rpe : (set.rpe ?? reusedGlobals.rpe);\n    set.timer = currentGlobals.timer != null ? currentGlobals.timer : (set.timer ?? reusedGlobals.timer);\n    set.setTimer = currentGlobals.setTimer != null ? currentGlobals.setTimer : (set.setTimer ?? reusedGlobals.setTimer);\n    // The overflow `+` modifier is part of the set timer, so a global/override that sets the set timer\n    // also dictates the overflow flag (absent `+` means off) - it must not leak from the reused exercise.\n    set.isOverflowSetTimer =\n      currentGlobals.setTimer != null\n        ? !!currentGlobals.isOverflowSetTimer\n        : (set.isOverflowSetTimer ?? reusedGlobals.isOverflowSetTimer);\n    set.auto = currentGlobals.auto != null ? currentGlobals.auto : (set.auto ?? reusedGlobals.auto);\n    if (currentGlobals.weight != null || currentGlobals.percentage != null) {\n      if (currentGlobals.weight != null) {\n        set.weight = currentGlobals.weight;\n        set.percentage = undefined;\n      } else {\n        set.percentage = currentGlobals.percentage;\n        set.weight = undefined;\n      }\n    } else {\n      set.weight = set.weight ?? reusedGlobals.weight;\n      set.percentage = set.percentage ?? reusedGlobals.percentage;\n    }\n\n    set.logRpe = !!(currentGlobals.rpe != null && currentGlobals.logRpe != null\n      ? currentGlobals.logRpe\n      : (set.logRpe ?? reusedGlobals.logRpe));\n    set.askWeight = !!((currentGlobals.weight != null || currentGlobals.percentage != null) &&\n    currentGlobals.askWeight != null\n      ? currentGlobals.askWeight\n      : (set.askWeight ?? reusedGlobals.askWeight));\n    return set;\n  });\n}\n\nexport function PlannerProgramExercise_defaultWarmups(\n  exercise: IExercise,\n  settings: ISettings\n): IPlannerProgramExerciseWarmupSet[] {\n  const warmupSets = (exercise?.defaultWarmup && warmupValues(settings.units)[exercise.defaultWarmup]) || [];\n  const result: IPlannerProgramExerciseWarmupSet[] = [];\n  if (warmupSets) {\n    const groups = ProgramExercise_groupWarmupsSets(warmupSets);\n    for (const group of groups) {\n      const first = group[0];\n      const length = group[1];\n      result.push({\n        type: \"warmup\",\n        numberOfSets: length,\n        reps: first.reps,\n        percentage: typeof first.value === \"number\" ? first.value * 100 : first.value.value,\n      });\n    }\n  }\n  return result;\n}\n\nexport function PlannerProgramExercise_repeatToRangeStr(plannerExercise: IPlannerProgramExercise): string {\n  const repeat = plannerExercise.repeating;\n  const ranges: [number, number][] = [];\n  for (const rep of repeat) {\n    if (ranges.length === 0) {\n      ranges.push([rep, rep]);\n    }\n    const lastRep = ranges[ranges.length - 1][1];\n    if (rep <= lastRep + 1) {\n      ranges[ranges.length - 1][1] = rep;\n    } else {\n      ranges.push([rep, rep]);\n    }\n  }\n  return ranges.map((r) => `${r[0]}-${r[1]}`).join(\", \");\n}\n\nexport function PlannerProgramExercise_warmupSetsToDisplaySets(\n  sets: IPlannerProgramExerciseWarmupSet[]\n): IDisplaySet[][] {\n  const displaySets: IDisplaySet[] = [];\n  for (const set of sets) {\n    for (let setIndex = 0; setIndex < (set.numberOfSets || 0); setIndex++) {\n      const weight =\n        set.percentage != null\n          ? `${set.percentage}%`\n          : set.weight?.value != null\n            ? set.weight.value.toString()\n            : `${Math.round(Weight_rpeMultiplier(set.reps, 10) * 100)}%`;\n      displaySets.push({\n        reps: `${set.reps}`,\n        weight: weight,\n      });\n    }\n  }\n\n  return Reps_groupDisplaySets(displaySets);\n}\n\nexport function PlannerProgramExercise_uniqueKey(exercise: IPlannerProgramExercise): string {\n  return `${exercise.key}-${exercise.dayData.week}-${exercise.dayData.dayInWeek}`;\n}\n\nexport function PlannerProgramExercise_uniqueSetKey(set: IPlannerProgramExerciseEvaluatedSet): string {\n  return `${set.minrep}-${set.maxrep}-${set.isAmrap}-${set.weight?.value}${set.weight?.unit}${set.askWeight}-${set.rpe}${set.logRpe}-${set.timer}-${set.setTimer}${set.isOverflowSetTimer}${set.auto}`;\n}\n\nexport function PlannerProgramExercise_evaluatedSetsToDisplaySets(\n  sets: IPlannerProgramExerciseEvaluatedSet[],\n  settings: ISettings\n): IDisplaySet[][] {\n  const displaySets: IDisplaySet[] = [];\n  for (const set of sets) {\n    const weight = set.weight ? Weight_display(set.weight, false) : undefined;\n    const unit = set.weight?.unit || settings.units;\n    displaySets.push({\n      dimReps: false,\n      dimRpe: !set.logRpe,\n      dimWeight: !set.weight,\n      dimTimer: set.timer == null,\n      reps: `${set.minrep != null ? `${set.minrep}-${set.maxrep}` : `${set.maxrep}`}${set.isAmrap ? \"+\" : \"\"}`,\n      rpe: set.rpe?.toString(),\n      weight,\n      unit,\n      askWeight: set.askWeight,\n      timer: set.timer,\n      setTimer: set.setTimer,\n      isOverflowSetTimer: set.isOverflowSetTimer,\n      auto: set.auto,\n    });\n  }\n  return Reps_groupDisplaySets(displaySets);\n}\n\nexport function PlannerProgramExercise_setsToDisplaySets(\n  sets: IPlannerProgramExerciseSet[],\n  hasCurrentSets: boolean,\n  globals: IPlannerProgramExerciseGlobals,\n  settings: ISettings\n): IDisplaySet[][] {\n  const displaySets: IDisplaySet[] = [];\n  for (const set of sets) {\n    for (let setIndex = 0; setIndex < (set.repRange?.numberOfSets || 0); setIndex++) {\n      const minReps = set.repRange?.minrep;\n      const maxReps = set.repRange?.maxrep || 0;\n      const weight =\n        set.percentage != null\n          ? `${set.percentage}%`\n          : set.weight?.value != null\n            ? set.weight.value.toString()\n            : undefined;\n      const unit = set.percentage == null ? set.weight?.unit || settings.units : undefined;\n      displaySets.push({\n        dimReps: !hasCurrentSets,\n        dimRpe: !hasCurrentSets && globals.rpe == null,\n        dimWeight: !hasCurrentSets && globals.weight == null && globals.percentage == null,\n        dimTimer: !hasCurrentSets && globals.timer == null,\n        reps: `${minReps != null ? `${minReps}-` : \"\"}${maxReps}${set.repRange?.isAmrap ? \"+\" : \"\"}`,\n        rpe: set.rpe?.toString(),\n        weight: weight,\n        unit,\n        askWeight: set.askWeight,\n        timer: set.timer,\n        setTimer: set.setTimer,\n        isOverflowSetTimer: set.isOverflowSetTimer,\n        auto: set.auto,\n      });\n    }\n  }\n\n  return Reps_groupDisplaySets(displaySets);\n}\n\nexport function PlannerProgramExercise_degroupWarmupSets(\n  warmupSets: IPlannerProgramExerciseWarmupSet[]\n): IPlannerProgramExerciseWarmupSet[] {\n  return warmupSets.reduce<IPlannerProgramExerciseWarmupSet[]>((acc, set) => {\n    for (let i = 0; i < set.numberOfSets; i++) {\n      acc.push({ ...set, numberOfSets: 1 });\n    }\n    return acc;\n  }, []);\n}\n\nexport function PlannerProgramExercise_currentSetVariationIndex(exercise: IPlannerProgramExercise): number {\n  const index = exercise.setVariations.findIndex((sv) => sv.isCurrent);\n  return index === -1 ? 0 : index;\n}\n\nexport function PlannerProgramExercise_currentEvaluatedSetVariationIndex(exercise: IPlannerProgramExercise): number {\n  const index = exercise.evaluatedSetVariations.findIndex((sv) => sv.isCurrent);\n  return index === -1 ? 0 : index;\n}\n\nexport function PlannerProgramExercise_currentEvaluatedSetVariation(\n  exercise: IPlannerProgramExercise\n): IPlannerProgramExerciseEvaluatedSetVariation {\n  const index = PlannerProgramExercise_currentEvaluatedSetVariationIndex(exercise);\n  return exercise.evaluatedSetVariations[index];\n}\n\nexport function PlannerProgramExercise_currentExerciseVariationIndex(exercise: IPlannerProgramExercise): number {\n  const index = (exercise.exerciseVariations ?? []).findIndex((v) => v.isCurrent);\n  return index === -1 ? 0 : index;\n}\n\nexport function PlannerProgramExercise_currentExerciseVariation(\n  exercise: IPlannerProgramExercise\n): IPlannerProgramExerciseVariation | undefined {\n  const index = PlannerProgramExercise_currentExerciseVariationIndex(exercise);\n  return exercise.exerciseVariations?.[index];\n}\n\nexport function PlannerProgramExercise_currentDescription(exercise: IPlannerProgramExercise): string | undefined {\n  const index = PlannerProgramExercise_currentDescriptionIndex(exercise);\n  return exercise.descriptions.values[index]?.value;\n}\n\nexport function PlannerProgramExercise_addSet(\n  ex: IPlannerProgramExercise,\n  setVariationIndex: number,\n  settings: ISettings\n): IPlannerProgramExercise {\n  const evaluatedSetVariation = ex.evaluatedSetVariations[setVariationIndex];\n  let lastEvaluatedSet = evaluatedSetVariation.sets[evaluatedSetVariation.sets.length - 1];\n  if (lastEvaluatedSet) {\n    evaluatedSetVariation.sets = [...evaluatedSetVariation.sets, ObjectUtils_clone(lastEvaluatedSet)];\n  } else {\n    const originalSets = PlannerProgramExercise_sets(ex, setVariationIndex);\n    const lastSet = originalSets[originalSets.length - 1];\n    if (lastSet) {\n      lastEvaluatedSet = {\n        maxrep: lastSet.repRange?.maxrep || 1,\n        minrep: lastSet.repRange?.minrep,\n        weight: lastSet.weight || Weight_zero,\n        logRpe: lastSet.logRpe || false,\n        isAmrap: lastSet.repRange?.isAmrap || false,\n        isQuickAddSet: lastSet.repRange?.isQuickAddSet || false,\n        askWeight: lastSet.askWeight || false,\n        rpe: lastSet.rpe,\n        timer: lastSet.timer,\n        setTimer: lastSet.setTimer,\n        isOverflowSetTimer: lastSet.isOverflowSetTimer,\n        auto: lastSet.auto,\n        label: lastSet.label,\n      };\n      evaluatedSetVariation.sets = [...evaluatedSetVariation.sets, ObjectUtils_clone(lastEvaluatedSet)];\n    } else {\n      evaluatedSetVariation.sets = [\n        ...evaluatedSetVariation.sets,\n        {\n          maxrep: 5,\n          weight: Weight_build(100, settings.units),\n          isAmrap: false,\n          logRpe: false,\n          askWeight: false,\n          isQuickAddSet: false,\n        },\n      ];\n    }\n  }\n  return ex;\n}\n\nexport function PlannerProgramExercise_currentDescriptionIndex(exercise: IPlannerProgramExercise): number {\n  const index = exercise.descriptions.values.findIndex((d) => d.isCurrent);\n  return index === -1 ? 0 : index;\n}\n\nexport function PlannerProgramExercise_numberOfSetsThisWeek(exerciseName: string, week: IPlannerEvalResult[]): number {\n  return week.reduce((acc, days) => {\n    if (days.success) {\n      const numberOfSetsThisDay = days.data\n        .filter((e) => e.name === exerciseName)\n        .reduce((acc2, e) => acc2 + PlannerProgramExercise_numberOfSets(e), 0);\n      return acc + numberOfSetsThisDay;\n    } else {\n      return acc;\n    }\n  }, 0);\n}\n\nexport function PlannerProgramExercise_getProgressScript(exercise: IPlannerProgramExercise): string | undefined {\n  return (\n    exercise.progress?.script ??\n    exercise.progress?.reuse?.exercise?.progress?.script ??\n    exercise.progress?.reuse?.exercise?.progress?.reuse?.exercise?.progress?.script ??\n    exercise.reuse?.exercise?.progress?.script ??\n    exercise.reuse?.exercise?.progress?.reuse?.exercise?.progress?.script\n  );\n}\n\nexport function PlannerProgramExercise_isReusingSetsProgress(exercise: IPlannerProgramExercise): boolean {\n  const reuseExercise = exercise.reuse?.exercise;\n  return (\n    reuseExercise?.progress != null &&\n    exercise.progress != null &&\n    exercise.progress.type === reuseExercise.progress?.type &&\n    (exercise.progress.reuse?.fullName === reuseExercise.fullName ||\n      exercise.progress.script === reuseExercise.progress.script) &&\n    Object.keys(PlannerProgramExercise_getOnlyChangedState(exercise)).length === 0\n  );\n}\n\n// `visited` only matters while a program is being evaluated: PlannerEvaluator_checkReuseLoops\n// rejects reuse loops, but it can't run until every reuse is wired, and the evaluator calls this\n// before then. Without the guard a loop is an unbounded recursion that kills the whole process\n// instead of failing that one program.\nexport function PlannerProgramExercise_getState(\n  exercise: IPlannerProgramExercise,\n  visited?: Set<IPlannerProgramExercise>\n): IProgramState {\n  if (exercise.progress?.state && !exercise.progress.reuse) {\n    return exercise.progress.state;\n  } else {\n    const seen = visited ?? new Set<IPlannerProgramExercise>();\n    if (seen.has(exercise)) {\n      return {};\n    }\n    seen.add(exercise);\n    const originalState = exercise.progress?.reuse?.exercise\n      ? PlannerProgramExercise_getState(exercise.progress.reuse.exercise, seen)\n      : exercise.reuse?.exercise\n        ? PlannerProgramExercise_getState(exercise.reuse.exercise, seen)\n        : {};\n\n    return { ...originalState, ...exercise.progress?.state };\n  }\n}\n\nexport function PlannerProgramExercise_getOnlyChangedState(exercise: IPlannerProgramExercise): IProgramState {\n  const originalState = exercise.progress?.reuse?.exercise\n    ? exercise.progress.reuse.exercise.progress?.state || {}\n    : exercise.reuse?.exercise\n      ? exercise.reuse.exercise.progress?.state || {}\n      : {};\n  const originalStateMetadata = exercise.progress?.reuse?.exercise\n    ? exercise.progress.reuse.exercise.progress?.stateMetadata || {}\n    : exercise.reuse?.exercise\n      ? exercise.reuse.exercise.progress?.stateMetadata || {}\n      : {};\n  const state = exercise.progress?.state || {};\n  const stateMetadata = exercise.progress?.stateMetadata || {};\n  return ObjectUtils_filter(\n    state,\n    (key, value) =>\n      originalState[key] == null ||\n      !Weight_eq(originalState[key], value) ||\n      originalStateMetadata[key]?.userPrompted !== stateMetadata[key]?.userPrompted\n  ) as IProgramState;\n}\n\nexport function PlannerProgramExercise_getStateMetadata(\n  exercise: IPlannerProgramExercise,\n  visited?: Set<IPlannerProgramExercise>\n): IProgramStateMetadata {\n  if (exercise.progress?.stateMetadata && !exercise.progress.reuse) {\n    return exercise.progress.stateMetadata;\n  } else {\n    const seen = visited ?? new Set<IPlannerProgramExercise>();\n    if (seen.has(exercise)) {\n      return {};\n    }\n    seen.add(exercise);\n    const originalState = exercise.progress?.reuse?.exercise\n      ? PlannerProgramExercise_getStateMetadata(exercise.progress.reuse.exercise, seen)\n      : exercise.reuse?.exercise\n        ? PlannerProgramExercise_getStateMetadata(exercise.reuse.exercise, seen)\n        : {};\n\n    return { ...originalState, ...exercise.progress?.stateMetadata };\n  }\n}\n\nexport function PlannerProgramExercise_getUpdateScript(exercise: IPlannerProgramExercise): string | undefined {\n  return (\n    exercise.update?.script ??\n    exercise.update?.reuse?.exercise?.update?.script ??\n    exercise.update?.reuse?.exercise?.update?.reuse?.exercise?.update?.script ??\n    exercise.reuse?.exercise?.update?.script ??\n    exercise.reuse?.exercise?.update?.reuse?.exercise?.update?.script\n  );\n}\n\nexport function PlannerProgramExercise_getEnableRpe(exercise: IPlannerProgramExercise): boolean {\n  return exercise.setVariations.some((sv, i) => PlannerProgramExercise_sets(exercise, i).some((s) => s.rpe != null));\n}\n\nexport function PlannerProgramExercise_getEnableRepRanges(exercise: IPlannerProgramExercise): boolean {\n  return exercise.setVariations.some((sv, i) =>\n    PlannerProgramExercise_sets(exercise, i).some((s) => s.repRange != null && s.repRange.minrep === s.repRange.maxrep)\n  );\n}\n\nexport function PlannerProgramExercise_getProgressDefaultArgs(type: IProgramExerciseProgressType): string[] {\n  switch (type) {\n    case \"none\":\n      return [];\n    case \"lp\":\n      return [\"5lb\"];\n    case \"dp\":\n      return [\"5lb\", \"8\", \"12\"];\n    case \"sum\":\n      return [\"30\", \"5lb\"];\n    case \"custom\":\n      return [];\n  }\n}\n\nfunction buildDpScript(): string {\n  return `for (var.i in completedReps) {\n  if (weights[var.i] == 0 && completedWeights[var.i] != 0) {\n    weights[var.i] = completedWeights[var.i]\n  }\n}\nif (completedReps >= reps && completedRPE <= RPE) {\n  if (completedReps >= state.maxReps) {\n    reps = state.minReps\n    for (var.i in completedReps) {\n      var.isInitial = weights[var.i] == 0 && completedWeights[var.i] != 0\n      if (var.isInitial) {\n        weights[var.i] = completedWeights[var.i] + state.increment\n      } else {\n        weights[var.i] += (completedWeights[var.i] - weights[var.i]) + state.increment\n      }\n    }\n  } else {\n    for (var.i in completedReps) {\n      reps[var.i] = completedReps[var.i] + 1 > state.maxReps ?\n        state.maxReps :\n        completedReps[var.i] + 1\n    }\n  }\n}`;\n}\n\nexport function PlannerProgramExercise_buildDpRangeScript(): string {\n  return `for (var.i in completedReps) {\n  if (weights[var.i] == 0 && completedWeights[var.i] != 0) {\n    weights[var.i] = completedWeights[var.i]\n  }\n}\nif (completedReps >= reps && completedRPE <= RPE) {\n  minReps = state.minReps\n  for (var.i in completedReps) {\n    var.isInitial = weights[var.i] == 0 && completedWeights[var.i] != 0\n    if (var.isInitial) {\n      weights[var.i] = completedWeights[var.i] + state.increment\n    } else {\n      weights[var.i] += (completedWeights[var.i] - weights[var.i]) + state.increment\n    }\n  }\n} else {\n  for (var.i in completedReps) {\n    minReps[var.i] = completedReps[var.i] + 1 > reps[var.i] ?\n      reps[var.i] :\n      completedReps[var.i] + 1\n  }\n}`;\n}\n\nexport function PlannerProgramExercise_buildProgress(\n  type: IProgramExerciseProgressType,\n  args: string[],\n  opts: {\n    reuseFullname?: string;\n    script?: string;\n  } = {}\n): IEither<IProgramExerciseProgress, { message: string; details: IPlannerErrorDetails }> {\n  switch (type) {\n    case \"none\": {\n      return {\n        success: true,\n        data: {\n          type: \"none\",\n          state: {},\n          stateMetadata: {},\n        },\n      };\n    }\n    case \"lp\": {\n      const increment = args[0] ? Weight_parsePct(args[0]) : Weight_build(0, \"lb\");\n      const decrement = args[3] ? Weight_parsePct(args[3]) : Weight_build(0, \"lb\");\n      const state: IProgramState = {\n        increment: increment ?? Weight_build(0, \"lb\"),\n        successes: args[1] ? parseInt(args[1], 10) : 1,\n        successCounter: args[2] ? parseInt(args[2], 10) : 0,\n        decrement: decrement ?? Weight_build(0, \"lb\"),\n        failures: args[4] ? parseInt(args[4], 10) : (decrement?.value ?? 0) > 0 ? 1 : 0,\n        failureCounter: args[5] ? parseInt(args[5], 10) : 0,\n      };\n      const script = `for (var.i in completedReps) {\n  if (weights[var.i] == 0 && completedWeights[var.i] != 0) {\n    weights[var.i] = completedWeights[var.i]\n  }\n}\nif (completedReps >= reps && completedRPE <= RPE) {\n  state.successCounter += 1\n  if (state.successCounter >= state.successes) {\n    for (var.i in completedReps) {\n      var.isInitial = weights[var.i] == 0 && completedWeights[var.i] != 0\n      if (var.isInitial) {\n        weights[var.i] = completedWeights[var.i] + state.increment\n      } else {\n        weights[var.i] += (completedWeights[var.i] - weights[var.i]) + state.increment\n      }\n    }\n    state.successCounter = 0\n    state.failureCounter = 0\n  }\n}\nif (state.decrement > 0 && state.failures > 0) {\n  if (!(completedReps >= minReps && completedRPE <= RPE)) {\n    state.failureCounter += 1\n    if (state.failureCounter >= state.failures) {\n      weights -= state.decrement\n      state.failureCounter = 0\n      state.successCounter = 0\n    }\n  }\n}`;\n      return {\n        success: true,\n        data: {\n          type: \"lp\",\n          state,\n          stateMetadata: {},\n          script,\n        },\n      };\n    }\n    case \"dp\": {\n      const increment = args[0] ? Weight_parsePct(args[0]) : Weight_build(0, \"lb\");\n      const state: IProgramState = {\n        increment: increment ?? Weight_build(0, \"lb\"),\n        minReps: args[1] ? parseInt(args[1], 10) : 0,\n        maxReps: args[2] ? parseInt(args[2], 10) : 0,\n      };\n      const script = buildDpScript();\n      return {\n        success: true,\n        data: {\n          type: \"dp\",\n          state,\n          stateMetadata: {},\n          script,\n        },\n      };\n    }\n    case \"sum\": {\n      const increment = args[1] ? Weight_parsePct(args[1]) : Weight_build(0, \"lb\");\n      const state: IProgramState = {\n        reps: args[0] ? parseInt(args[0], 10) : 0,\n        increment: increment ?? Weight_build(0, \"lb\"),\n      };\n      const script = `for (var.i in completedReps) {\nif (weights[var.i] == 0 && completedWeights[var.i] != 0) {\n  weights[var.i] = completedWeights[var.i]\n}\n}\nif (sum(completedReps) >= state.reps) {\nfor (var.i in completedReps) {\n  weights[var.i] = completedWeights[var.i] + state.increment\n}\n}`;\n      return {\n        success: true,\n        data: {\n          type: \"sum\",\n          state,\n          stateMetadata: {},\n          script,\n        },\n      };\n    }\n    case \"custom\": {\n      const script = opts.script;\n      let error: { message: string; details: IPlannerErrorDetails } | undefined;\n      const { state, stateMetadata } = PlannerExerciseEvaluator.fnArgsToStateVars(args, (message, value) => {\n        error = { message, details: { type: \"invalidStateVariable\", data: { value } } };\n      });\n      if (error) {\n        return {\n          success: false,\n          error,\n        };\n      }\n      return {\n        success: true,\n        data: {\n          type: \"custom\",\n          state,\n          stateMetadata,\n          script,\n          reuse: opts.reuseFullname ? { fullName: opts.reuseFullname, source: \"specific\" } : undefined,\n        },\n      };\n    }\n  }\n}\n\nexport function PlannerProgramExercise_progressionType(\n  exercise: IPlannerProgramExercise\n): IProgressionType | undefined {\n  const progress = exercise.progress;\n  if (!progress) {\n    return undefined;\n  }\n  const name = progress.type;\n  const state = PlannerProgramExercise_getState(exercise);\n  if (name === \"lp\") {\n    return {\n      type: \"linear\",\n      increase: state.increment as IWeight,\n      successesRequired: state.successes as number,\n      successesCounter: state.successCounter as number,\n      decrease: state.decrement as IWeight,\n      failuresRequired: state.failures as number,\n      failuresCounter: state.failureCounter as number,\n    };\n  } else if (name === \"dp\") {\n    return {\n      type: \"double\",\n      increase: state.increment as IWeight,\n      minReps: state.minReps as number,\n      maxReps: state.maxReps as number,\n    };\n  } else if (name === \"sum\") {\n    return {\n      type: \"sumreps\",\n      increase: state.increment as IWeight,\n      reps: state.reps as number,\n    };\n  } else if (name === \"custom\") {\n    return { type: \"custom\" };\n  }\n  return undefined;\n}\n\nexport function PlannerProgramExercise_shortNameFromFullName(fullName: string, settings: ISettings): string {\n  const { name, equipment } = PlannerExerciseEvaluator.extractNameParts(fullName, settings.exercises);\n  const shortName = `${name}${equipment ? `, ${equipmentName(equipment)}` : \"\"}`;\n  return shortName;\n}\n\nexport function PlannerProgramExercise_createExerciseFromEntry(\n  entry: IHistoryEntry,\n  dayData: Required<IDayData>,\n  settings: ISettings,\n  index: number\n): IPlannerProgramExercise {\n  const exerciseType = entry.exercise;\n  const exercise = Exercise_get(exerciseType, settings.exercises);\n  const fullName = Exercise_fullName(exercise, settings);\n  const shortName = PlannerProgramExercise_shortNameFromFullName(fullName, settings);\n  const { name, equipment } = PlannerExerciseEvaluator.extractNameParts(fullName, settings.exercises);\n  const setVariations: IPlannerProgramExerciseSetVariation[] = [\n    {\n      isCurrent: false,\n      sets: entry.sets.map((set) => ({\n        repRange: {\n          numberOfSets: 1,\n          maxrep: set.completedReps ?? set.reps,\n          minrep: set.minReps,\n          isAmrap: !!set.isAmrap,\n          isQuickAddSet: false,\n        },\n        timer: set.timer,\n        setTimer: set.setTimer,\n        isOverflowSetTimer: set.isOverflowSetTimer,\n        auto: set.auto,\n        rpe: set.rpe,\n        logRpe: set.logRpe,\n        percentage: Weight_isPct(set.originalWeight) ? set.originalWeight.value : undefined,\n        weight: !Weight_isPct(set.originalWeight) ? (set.completedWeight ?? set.weight) : undefined,\n        askWeight: set.askWeight,\n      })),\n    },\n  ];\n  const groupedWarmupSets = CollectionUtils_compact(\n    ObjectUtils_values(\n      CollectionUtils_groupByExpr(entry.warmupSets, (set) => {\n        return `${set.completedReps ?? set.reps}-${(set.completedWeight ?? set.weight ?? { value: \"\" }).value}`;\n      })\n    )\n  );\n  const plannerExercise: IPlannerProgramExercise = {\n    id: UidFactory_generateUid(8),\n    key: PlannerKey_fromExerciseType(exercise),\n    fullName,\n    shortName,\n    dayData,\n    exerciseType,\n    repeat: [],\n    repeating: [],\n    exerciseIndex: index,\n    order: 0,\n    text: \"\",\n    tags: [],\n    superset: entry.superset != null ? { name: entry.superset } : undefined,\n    equipment,\n    name,\n    line: 1,\n    evaluatedSetVariations: [],\n    setVariations: setVariations,\n    exerciseVariations: [{ exerciseType, name, isCurrent: true }],\n    warmupSets: groupedWarmupSets.map((group) => ({\n      type: \"warmup\",\n      numberOfSets: group.length,\n      reps: group[0]?.completedReps ?? group[0]?.reps ?? 1,\n      weight: group[0]?.completedWeight ?? group[0]?.weight,\n    })),\n    descriptions: { values: [] },\n    globals: {},\n    points: {\n      fullName: { line: 1, offset: 0, from: 0, to: 0 },\n    },\n  };\n  const evaluatedSetVariations = PlannerProgramExercise_evaluateSetVariations(plannerExercise, setVariations);\n  plannerExercise.evaluatedSetVariations = evaluatedSetVariations;\n  return plannerExercise;\n}\n","import type { IProgramState, IProgramStateMetadata } from \"../../../types\";\nimport { Weight_parse, Weight_buildPct } from \"../../../models/weight\";\nimport { MathUtils_roundFloat } from \"../../../utils/math\";\n\nexport function PlannerStateVars_fromArgs(\n  fnArgs: string[],\n  onError?: (message: string, value: string) => void\n): { state: IProgramState; stateMetadata: IProgramStateMetadata } {\n  const state: IProgramState = {};\n  const stateMetadata: IProgramStateMetadata = {};\n  for (const value of fnArgs) {\n    // eslint-disable-next-line prefer-const\n    let [fnArgKey, fnArgValStr] = value.split(\":\").map((v) => v.trim());\n    if (onError && (!fnArgKey || !fnArgValStr)) {\n      onError(`Invalid argument ${value}`, value);\n    }\n    if (fnArgKey.endsWith(\"+\")) {\n      fnArgKey = fnArgKey.replace(\"+\", \"\");\n      stateMetadata[fnArgKey] = { userPrompted: true };\n    } else {\n      stateMetadata[fnArgKey] = { userPrompted: false };\n    }\n    try {\n      const fnArgVal = fnArgValStr.match(/(lb|kg)/)\n        ? Weight_parse(fnArgValStr)\n        : fnArgValStr.match(/%/)\n          ? Weight_buildPct(parseFloat(fnArgValStr))\n          : MathUtils_roundFloat(parseFloat(fnArgValStr), 2);\n      state[fnArgKey] = fnArgVal ?? 0;\n    } catch (e) {\n      if (onError) {\n        onError(`Invalid argument ${value}`, value);\n      } else {\n        throw e;\n      }\n    }\n  }\n  return { state, stateMetadata };\n}\n","import { IPlannerProgram, ISettings, IDayData, IPlannerProgramDay } from \"../../types\";\nimport { parser as plannerExerciseParser } from \"./plannerExerciseParser\";\nimport memoize from \"micro-memoize\";\nimport {\n  IPlannerEvalFullResult,\n  IPlannerEvalResult,\n  IPlannerSyntaxPointer,\n  PlannerExerciseEvaluator,\n  PlannerSyntaxError,\n} from \"./plannerExerciseEvaluator\";\nimport {\n  IPlannerProgramExercise,\n  IPlannerProgramExerciseWarmupSet,\n  IPlannerProgramReuse,\n  IProgramExerciseProgress,\n  IProgramExerciseUpdate,\n  IProgramExerciseDescriptions,\n} from \"./models/types\";\nimport { PlannerKey_fromFullName, PlannerKey_fromPlannerExercise } from \"./plannerKey\";\nimport { ObjectUtils_isEqual, ObjectUtils_clone, ObjectUtils_keys, ObjectUtils_values } from \"../../utils/object\";\nimport { Weight_type } from \"../../models/weight\";\nimport { PlannerProgram_fullToWeekEvalResult, PlannerProgram_generateFullText } from \"./models/plannerProgram\";\nimport { ScriptRunner } from \"../../parser\";\nimport { Progress_createEmptyScriptBindings, Progress_createScriptFunctions } from \"../../models/progress\";\nimport { LiftoscriptSyntaxError } from \"../../liftoscriptEvaluator\";\nimport type { IPlannerReuseSection } from \"../../syntaxErrorTypes\";\nimport {\n  PlannerProgramExercise_setVariations,\n  PlannerProgramExercise_evaluateSetVariations,\n  PlannerProgramExercise_getExercise,\n  PlannerProgramExercise_getState,\n  PlannerProgramExercise_getProgressScript,\n  PlannerProgramExercise_getUpdateScript,\n  PlannerProgramExercise_buildDpRangeScript,\n} from \"./models/plannerProgramExercise\";\n\nexport type IByTag<T> = Record<number, T>;\nexport type IByExercise<T> = Record<string, T>;\nexport type IByExerciseWeekDay<T> = Record<string, Record<number, Record<number, T>>>;\nexport type IByWeekDayExercise<T> = Record<number, Record<number, Record<string, T>>>;\n\ninterface IPlannerEvalMetadata {\n  byExerciseWeekDay: IByExerciseWeekDay<IPlannerProgramExercise>;\n  byWeekDayExercise: IByWeekDayExercise<IPlannerProgramExercise>;\n  fullNames: Set<string>;\n  notused: Set<string>;\n  properties: {\n    id: IByExercise<{ property: number[]; dayData: Required<IDayData> }>;\n    progress: IByExercise<{ property: IProgramExerciseProgress; dayData: Required<IDayData> }>;\n    update: IByExercise<{ property: IProgramExerciseUpdate; dayData: Required<IDayData> }>;\n    warmup: IByExercise<{ warmupSets: IPlannerProgramExerciseWarmupSet[]; dayData: Required<IDayData> }>;\n  };\n}\n\nexport function PlannerEvaluator_getFirstError(evaluatedWeeks: IPlannerEvalResult[][]): PlannerSyntaxError | undefined {\n  let error: PlannerSyntaxError | undefined;\n  for (const week of evaluatedWeeks) {\n    for (const day of week) {\n      if (!day.success) {\n        error = day.error;\n      }\n    }\n  }\n  return error;\n}\n\nexport function PlannerEvaluator_fillInMetadata(\n  exercise: IPlannerProgramExercise,\n  metadata: IPlannerEvalMetadata,\n  dayData: Required<IDayData>\n): void {\n  if (exercise.progress?.type === \"dp\") {\n    const hasRange = exercise.setVariations.some((sv) => sv.sets.some((s) => s.repRange?.minrep != null));\n    if (hasRange) {\n      exercise.progress = { ...exercise.progress, script: PlannerProgramExercise_buildDpRangeScript() };\n    }\n  }\n  if (metadata.byWeekDayExercise[dayData.week - 1]?.[dayData.dayInWeek - 1]?.[exercise.key] != null) {\n    throw PlannerSyntaxError.fromPoint(\n      exercise.fullName,\n      `Another exercise with the same name is already used in this day. Combine them together, or add a label to separate out.`,\n      exercise.points.fullName,\n      { type: \"duplicateExerciseInDay\", data: { key: exercise.key } }\n    );\n  }\n  const tagsProp = exercise.tags;\n  if (tagsProp != null && tagsProp.length > 0) {\n    const existingTags = metadata.properties.id[exercise.key];\n    if (existingTags != null && !ObjectUtils_isEqual(existingTags.property, tagsProp)) {\n      const point = exercise.points.idPoint || exercise.points.fullName;\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `Same property 'id' is specified with different arguments in multiple weeks/days for exercise '${exercise.name}': both in ` +\n          `week ${existingTags.dayData.week + 1}, day ${existingTags.dayData.dayInWeek + 1} ` +\n          `and week ${dayData.week}, day ${dayData.dayInWeek}`,\n        point,\n        {\n          type: \"conflictingProperty\",\n          data: { property: \"id\", exercise: exercise.name, a: existingTags.dayData, b: dayData },\n        }\n      );\n    }\n    metadata.properties.id[exercise.key] = {\n      property: tagsProp,\n      dayData,\n    };\n  }\n\n  const progressProp = exercise.progress;\n  if (progressProp != null && progressProp.type !== \"none\") {\n    const existingProgress = metadata.properties.progress[exercise.key];\n    if (\n      existingProgress != null &&\n      !PlannerExerciseEvaluator.isEqualProgress(progressProp, existingProgress.property)\n    ) {\n      const point = exercise.points.progressPoint || exercise.points.fullName;\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `Same property 'progress' is specified with different arguments in multiple weeks/days for exercise '${exercise.name}': both in ` +\n          `week ${existingProgress.dayData.week + 1}, day ${existingProgress.dayData.dayInWeek + 1} ` +\n          `and week ${dayData.week}, day ${dayData.dayInWeek}`,\n        point,\n        {\n          type: \"conflictingProperty\",\n          data: { property: \"progress\", exercise: exercise.name, a: existingProgress.dayData, b: dayData },\n        }\n      );\n    }\n    metadata.properties.progress[exercise.key] = {\n      property: progressProp,\n      dayData,\n    };\n  }\n\n  const updateProp = exercise.update;\n  if (updateProp != null) {\n    const existingUpdate = metadata.properties.update[exercise.key];\n    if (existingUpdate != null && !PlannerExerciseEvaluator.isEqualUpdate(updateProp, existingUpdate.property)) {\n      const point = exercise.points.updatePoint || exercise.points.fullName;\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `Same property 'update' is specified with different arguments in multiple weeks/days for exercise '${exercise.name}': both in ` +\n          `week ${existingUpdate.dayData.week + 1}, day ${existingUpdate.dayData.dayInWeek + 1} ` +\n          `and week ${dayData.week}, day ${dayData.dayInWeek}`,\n        point,\n        {\n          type: \"conflictingProperty\",\n          data: { property: \"update\", exercise: exercise.name, a: existingUpdate.dayData, b: dayData },\n        }\n      );\n    }\n    metadata.properties.update[exercise.key] = {\n      property: updateProp,\n      dayData,\n    };\n  }\n  if (exercise.notused) {\n    metadata.notused.add(exercise.key);\n  }\n  if (exercise.warmupSets != null) {\n    const scheme = JSON.stringify(exercise.warmupSets);\n    const ws = metadata.properties.warmup[exercise.key];\n    if (ws != null && JSON.stringify(ws.warmupSets) !== scheme) {\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `Different warmup sets are specified in multiple weeks/days for exercise '${exercise.name}': both in ` +\n          `week ${ws.dayData.week + 1}, day ${ws.dayData.dayInWeek + 1} ` +\n          `and week ${dayData.week}, day ${dayData.dayInWeek}`,\n        exercise.points.warmupPoint || exercise.points.fullName,\n        {\n          type: \"conflictingProperty\",\n          data: { property: \"warmup\", exercise: exercise.name, a: ws.dayData, b: dayData },\n        }\n      );\n    }\n    metadata.properties.warmup[exercise.key] = {\n      warmupSets: exercise.warmupSets,\n      dayData,\n    };\n  }\n  PlannerEvaluator_setByWeekDayExercise(\n    metadata.byWeekDayExercise,\n    exercise.key,\n    dayData.week - 1,\n    dayData.dayInWeek - 1,\n    exercise\n  );\n  PlannerEvaluator_setByExerciseWeekDay(\n    metadata.byExerciseWeekDay,\n    exercise.key,\n    dayData.week - 1,\n    dayData.dayInWeek - 1,\n    exercise\n  );\n  metadata.fullNames.add(exercise.fullName);\n}\n\nexport function PlannerEvaluator_evaluateDay(\n  day: IPlannerProgramDay,\n  dayData: Required<IDayData>,\n  settings: ISettings\n): IPlannerEvalResult {\n  const tree = plannerExerciseParser.parse(day.exerciseText);\n  const evaluator = new PlannerExerciseEvaluator(day.exerciseText, settings, \"perday\", dayData);\n  const result = evaluator.evaluate(tree.topNode);\n  if (result.success) {\n    const exercises = result.data[0]?.days[0]?.exercises || [];\n    return { success: true, data: exercises };\n  } else {\n    return result;\n  }\n}\n\nexport function PlannerEvaluator_getPerDayEvaluatedWeeks(\n  plannerProgram: IPlannerProgram,\n  settings: ISettings\n): {\n  evaluatedWeeks: IPlannerEvalResult[][];\n  metadata: IPlannerEvalMetadata;\n} {\n  let dayIndex = 0;\n  const metadata: IPlannerEvalMetadata = {\n    byExerciseWeekDay: {},\n    byWeekDayExercise: {},\n    fullNames: new Set(),\n    notused: new Set(),\n    properties: { progress: {}, update: {}, warmup: {}, id: {} },\n  };\n  const evaluatedWeeks: IPlannerEvalResult[][] = plannerProgram.weeks.map((week, weekIndex) => {\n    return week.days.map((day, dayInWeekIndex) => {\n      const dayData = {\n        week: weekIndex + 1,\n        dayInWeek: dayInWeekIndex + 1,\n        day: dayIndex + 1,\n      };\n      const result = PlannerEvaluator_evaluateDay(\n        day,\n        { week: weekIndex + 1, dayInWeek: dayInWeekIndex + 1, day: dayIndex + 1 },\n        settings\n      );\n      dayIndex += 1;\n      if (result.success) {\n        const exercises = result.data;\n        for (const exercise of exercises) {\n          try {\n            PlannerEvaluator_fillInMetadata(exercise, metadata, dayData);\n          } catch (e) {\n            if (e instanceof PlannerSyntaxError) {\n              return { success: false, error: e };\n            } else {\n              throw e;\n            }\n          }\n        }\n        return { success: true, data: exercises };\n      } else {\n        return result;\n      }\n    });\n  });\n  return { evaluatedWeeks, metadata };\n}\n\nexport function PlannerEvaluator_changeExerciseName(\n  text: string,\n  from: string,\n  to: string,\n  settings: ISettings\n): string {\n  const evaluator = new PlannerExerciseEvaluator(text, settings, \"perday\");\n  const tree = plannerExerciseParser.parse(text);\n  const result = evaluator.changeExerciseName(tree.topNode, from, to);\n  return result;\n}\n\nexport function PlannerEvaluator_getFullEvaluatedWeeks(\n  fullProgramText: string,\n  settings: ISettings\n): {\n  evaluatedWeeks: IPlannerEvalFullResult;\n  metadata: IPlannerEvalMetadata;\n} {\n  let dayIndex = 0;\n  const metadata: IPlannerEvalMetadata = {\n    byExerciseWeekDay: {},\n    byWeekDayExercise: {},\n    fullNames: new Set(),\n    notused: new Set(),\n    properties: { progress: {}, update: {}, warmup: {}, id: {} },\n  };\n  const evaluator = new PlannerExerciseEvaluator(fullProgramText, settings, \"full\");\n  const tree = plannerExerciseParser.parse(fullProgramText);\n  const result = evaluator.evaluate(tree.topNode);\n  if (result.success) {\n    try {\n      for (let weekIndex = 0; weekIndex < result.data.length; weekIndex += 1) {\n        const week = result.data[weekIndex];\n        for (let dayInWeekIndex = 0; dayInWeekIndex < week.days.length; dayInWeekIndex += 1) {\n          const day = week.days[dayInWeekIndex];\n          const exercises = day.exercises;\n          for (const exercise of exercises) {\n            const dayData = { week: weekIndex + 1, dayInWeek: dayInWeekIndex + 1, day: dayIndex + 1 };\n            PlannerEvaluator_fillInMetadata(exercise, metadata, dayData);\n          }\n          dayIndex += 1;\n        }\n      }\n    } catch (e) {\n      if (e instanceof PlannerSyntaxError) {\n        return { evaluatedWeeks: { success: false, error: e }, metadata };\n      } else {\n        throw e;\n      }\n    }\n    return { evaluatedWeeks: result, metadata };\n  } else {\n    return { evaluatedWeeks: result, metadata };\n  }\n}\n\nexport function PlannerEvaluator_getDayIndexFromWeekAndDayInWeekIndex(\n  evaluatedWeeks: IPlannerEvalResult[][],\n  weekIndex: number,\n  dayInWeekIndex: number\n): number | undefined {\n  let dayIndex = 0;\n  for (let i = 0; i < evaluatedWeeks.length; i += 1) {\n    const week = evaluatedWeeks[i];\n    for (let j = 0; j < week.length; j += 1) {\n      if (i === weekIndex && j === dayInWeekIndex) {\n        return dayIndex;\n      }\n      dayIndex += 1;\n    }\n  }\n  return undefined;\n}\n\nexport function PlannerEvaluator_fillRepeats(\n  exercise: IPlannerProgramExercise,\n  evaluatedWeeks: IPlannerEvalResult[][],\n  dayInWeekIndex: number,\n  byExerciseWeekDay: IByExerciseWeekDay<IPlannerProgramExercise>\n): void {\n  for (const repeatWeek of exercise.repeat ?? []) {\n    const repeatWeekIndex = repeatWeek - 1;\n    if (byExerciseWeekDay[exercise.key]?.[repeatWeekIndex]?.[dayInWeekIndex] == null) {\n      const dayData = {\n        week: repeatWeek,\n        dayInWeek: dayInWeekIndex + 1,\n        day:\n          (PlannerEvaluator_getDayIndexFromWeekAndDayInWeekIndex(evaluatedWeeks, repeatWeekIndex, dayInWeekIndex) ??\n            0) + 1,\n      };\n      const repeatedExercise: IPlannerProgramExercise = {\n        ...exercise,\n        reuse: exercise.reuse ? { ...exercise.reuse } : undefined,\n        progress: exercise.progress\n          ? { ...exercise.progress, reuse: exercise.progress.reuse ? { ...exercise.progress.reuse } : undefined }\n          : undefined,\n        update: exercise.update\n          ? { ...exercise.update, reuse: exercise.update.reuse ? { ...exercise.update.reuse } : undefined }\n          : undefined,\n        repeat: [],\n        dayData,\n        isRepeat: true,\n      };\n      PlannerEvaluator_setByExerciseWeekDay(\n        byExerciseWeekDay,\n        exercise.key,\n        repeatWeekIndex,\n        dayInWeekIndex,\n        repeatedExercise\n      );\n      const day = evaluatedWeeks[repeatWeekIndex]?.[dayInWeekIndex];\n      if (day?.success) {\n        day.data.push(repeatedExercise);\n      }\n    }\n  }\n}\n\n// The order a day's exercises must be in, whether they're evaluated exercises or the parsed top\n// lines PlannerProgram_groupedTopLines sorts. Both paths have to agree exactly: compaction matches\n// lines across weeks by exerciseIndex, so a template that lands in a different slot in one week\n// stops being recognized as the same line and its week range falls apart.\n//\n// fillRepeats appends materialized copies at the end of the day, so neither tie-break can be left\n// to document order. A `used: none` template takes the exerciseIndex of the used exercise it\n// precedes, so it sorts before it; a repeat copy sorts before the local exercise it shares an\n// index with, matching its position in the week it was written.\nexport function PlannerEvaluator_compareExerciseOrder(\n  ex1: { exerciseIndex?: number; notused?: boolean; isRepeat?: boolean },\n  ex2: { exerciseIndex?: number; notused?: boolean; isRepeat?: boolean }\n): number {\n  if ((ex1.exerciseIndex ?? 0) !== (ex2.exerciseIndex ?? 0)) {\n    return (ex1.exerciseIndex ?? 0) - (ex2.exerciseIndex ?? 0);\n  }\n  if (!!ex1.notused !== !!ex2.notused) {\n    return ex1.notused ? -1 : 1;\n  }\n  return (ex1.isRepeat ? 0 : 1) - (ex2.isRepeat ? 0 : 1);\n}\n\n// A reuse resolving back to the very instance that declares it makes exercise.reuse.exercise (or\n// progress/update/descriptions .reuse.exercise) a self-loop, and PlannerProgramExercise_getState\n// walks those pointers with no visited set - so every later read of the program died with\n// \"Maximum call stack size exceeded\" instead of showing an error. Checked before the pointer is\n// wired, so the loop never forms. Compared by identity, not by key: reusing the same exercise from\n// an earlier week (`Squat / ...Squat[1:1]`) resolves to a different instance and is legitimate.\nfunction PlannerEvaluator_checkSelfReuse(\n  exercise: IPlannerProgramExercise,\n  originalExercise: IPlannerProgramExercise | undefined,\n  message: string,\n  point: IPlannerSyntaxPointer,\n  section: IPlannerReuseSection\n): void {\n  if (originalExercise === exercise) {\n    throw PlannerSyntaxError.fromPoint(exercise.fullName, message, point, { type: \"reuseSelf\", data: { section } });\n  }\n}\n\nexport function PlannerEvaluator_fillSetReuses(\n  exercise: IPlannerProgramExercise,\n  evaluatedWeeks: IPlannerEvalResult[][],\n  weekIndex: number,\n  settings: ISettings,\n  metadata: IPlannerEvalMetadata\n): void {\n  if (exercise.reuse && exercise.points.reuseSetPoint) {\n    const reuse = exercise.reuse;\n    const originalExercises = PlannerEvaluator_findOriginalExercisesAtWeekDay(\n      settings,\n      reuse.fullName,\n      evaluatedWeeks,\n      reuse.week ?? weekIndex + 1 ?? 1,\n      reuse.day\n    );\n    if (originalExercises.length > 1) {\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `There're several exercises matching, please be more specific with [week:day] syntax`,\n        exercise.points.reuseSetPoint,\n        { type: \"reuseAmbiguous\" }\n      );\n    }\n    const originalExercise = originalExercises[0];\n    if (!originalExercise) {\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `No such exercise ${reuse.fullName} at week: ${reuse.week ?? weekIndex + 1}${\n          reuse.day != null ? `, day: ${reuse.day}` : \"\"\n        }`,\n        exercise.points.reuseSetPoint,\n        {\n          type: \"reuseTargetNotFound\",\n          data: { fullName: reuse.fullName, week: reuse.week ?? weekIndex + 1, day: reuse.day },\n        }\n      );\n    }\n    PlannerEvaluator_checkSelfReuse(\n      exercise,\n      originalExercise.exercise,\n      `Exercise cannot reuse itself`,\n      exercise.points.reuseSetPoint,\n      \"sets\"\n    );\n    if (originalExercise.exercise.reuse?.fullName != null) {\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `Original exercise cannot reuse another exercise's sets x reps`,\n        exercise.points.reuseSetPoint,\n        { type: \"reuseChained\", data: { section: \"sets\" } }\n      );\n    }\n    if ((originalExercise.exercise.exerciseVariations?.length ?? 0) > 1) {\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `Cannot reuse '${reuse.fullName}' - it has multiple exercise variations. Move the shared sets/progress into a 'used: none' template and reuse that instead`,\n        exercise.points.reuseSetPoint,\n        { type: \"reuseTargetMultipleVariations\", data: { fullName: reuse.fullName } }\n      );\n    }\n    if (\n      originalExercise.exercise.progress?.reuse != null &&\n      exercise.progress == null &&\n      !originalExercise.exercise.notused\n    ) {\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `This exercise doesn't specify progress - so the original USED exercise's progress cannot reuse another exercise's progress`,\n        exercise.points.reuseSetPoint,\n        { type: \"reuseWithoutOwnSection\", data: { section: \"progress\" } }\n      );\n    }\n    if (\n      originalExercise.exercise.update?.reuse != null &&\n      exercise.update == null &&\n      !originalExercise.exercise.notused\n    ) {\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `This exercise doesn't specify 'update' - so the original exercise's 'update' cannot reuse another exercise's 'update'`,\n        exercise.points.reuseSetPoint,\n        { type: \"reuseWithoutOwnSection\", data: { section: \"update\" } }\n      );\n    }\n    if (originalExercise.exercise.progress != null && exercise.progress == null) {\n      const sharedProgressReuse: IPlannerProgramReuse = {\n        fullName: originalExercise.exercise.fullName,\n        source: \"overall\",\n      };\n      const originalProgress = originalExercise.exercise.progress;\n      PlannerEvaluator_forEachSiblingInstance(exercise, metadata, (other) => {\n        if (other.progress == null) {\n          other.progress = {\n            type: originalProgress.type,\n            state: ObjectUtils_clone(originalProgress.state),\n            stateMetadata: ObjectUtils_clone(originalProgress.stateMetadata),\n            reuse: sharedProgressReuse,\n          };\n        }\n      });\n    }\n    if (originalExercise.exercise.update != null && exercise.update == null) {\n      const sharedUpdateReuse: IPlannerProgramReuse = {\n        fullName: originalExercise.exercise.fullName,\n        source: \"overall\",\n      };\n      const originalUpdate = originalExercise.exercise.update;\n      PlannerEvaluator_forEachSiblingInstance(exercise, metadata, (other) => {\n        if (other.update == null) {\n          other.update = {\n            type: originalUpdate.type,\n            reuse: sharedUpdateReuse,\n          };\n        }\n      });\n    }\n\n    exercise.reuse.exercise = originalExercise.exercise;\n  }\n}\n\nfunction PlannerEvaluator_forEachSiblingInstance(\n  exercise: IPlannerProgramExercise,\n  metadata: IPlannerEvalMetadata,\n  cb: (other: IPlannerProgramExercise) => void\n): void {\n  const byKey = metadata.byExerciseWeekDay[exercise.key];\n  if (byKey == null) {\n    return;\n  }\n  for (const weekKey of ObjectUtils_keys(byKey)) {\n    const weekEntry = byKey[weekKey as unknown as number];\n    for (const dayKey of ObjectUtils_keys(weekEntry)) {\n      cb(weekEntry[dayKey as unknown as number]);\n    }\n  }\n}\n\nexport function PlannerEvaluator_fillEvaluatedSetVariations(exercise: IPlannerProgramExercise): void {\n  const setVariations = PlannerProgramExercise_setVariations(exercise);\n  const evaluatedSetVariations = PlannerProgramExercise_evaluateSetVariations(exercise, setVariations);\n  exercise.evaluatedSetVariations = evaluatedSetVariations;\n}\n\nexport function PlannerEvaluator_fillDescriptions(\n  exercise: IPlannerProgramExercise,\n  evaluatedWeeks: IPlannerEvalResult[][],\n  weekIndex: number,\n  dayIndex: number\n): void {\n  if (exercise.descriptions == null || exercise.descriptions.values.length === 0) {\n    const lastWeekExercise = PlannerEvaluator_findLastWeekExercise(\n      evaluatedWeeks,\n      weekIndex,\n      dayIndex,\n      exercise,\n      (ex) => ex.descriptions != null\n    );\n    if (lastWeekExercise && lastWeekExercise.descriptions) {\n      exercise.descriptions = ObjectUtils_clone(lastWeekExercise.descriptions);\n    }\n  }\n}\n\n// Whether a description is itself borrowed, asked in a way that doesn't depend on whether the\n// exercise holding it has been wired yet: before wiring it is still the literal `...name`\n// directive, after wiring it carries the reuse it came from. Reading both is what makes the check\n// below independent of the order days happen to be evaluated in.\nfunction PlannerEvaluator_isDescriptionReuse(descriptions: IProgramExerciseDescriptions): boolean {\n  return (\n    descriptions.reuse != null ||\n    (descriptions.values.length === 1 && !!descriptions.values[0].value?.startsWith(\"...\"))\n  );\n}\n\nexport function PlannerEvaluator_fillDescriptionReuses(\n  exercise: IPlannerProgramExercise,\n  weekIndex: number,\n  byExerciseWeekDay: IByExerciseWeekDay<IPlannerProgramExercise>,\n  settings: ISettings\n): void {\n  if (\n    exercise.descriptions != null &&\n    exercise.descriptions.values.length === 1 &&\n    exercise.descriptions.values[0].value?.startsWith(\"...\")\n  ) {\n    const reusingName = exercise.descriptions.values[0].value.slice(3).trim();\n    const result = PlannerEvaluator_findReusedDescriptions(reusingName, weekIndex, byExerciseWeekDay, settings);\n    if (result != null) {\n      const { descriptions, exercise: originalExercise } = result;\n      PlannerEvaluator_checkSelfReuse(\n        exercise,\n        originalExercise,\n        `Exercise cannot reuse its own description`,\n        exercise.points.fullName,\n        \"description\"\n      );\n      // Unlike sets or progress, this copies whatever the target holds at the moment it is wired\n      // rather than following a pointer, so a target that is itself borrowing hands over either\n      // the raw `...name` directive - which then reads as the description, shown to the user as\n      // literal text - or whatever it had been handed in turn, depending on the order the days\n      // were evaluated in. Requiring the target to write its own description settles both, and\n      // takes description loops with it: every exercise around such a loop is borrowing.\n      if (PlannerEvaluator_isDescriptionReuse(descriptions)) {\n        throw PlannerSyntaxError.fromPoint(\n          exercise.fullName,\n          `Original exercise cannot reuse another description - reuse the one that writes it instead`,\n          exercise.points.fullName,\n          { type: \"reuseChained\", data: { section: \"description\" } }\n        );\n      }\n      exercise.descriptions = {\n        values: [...ObjectUtils_clone(descriptions.values)],\n        reuse: { fullName: originalExercise.fullName, exercise: originalExercise, source: \"specific\" },\n      };\n    }\n  }\n}\n\n// The properties fillSingleProperties copies onto every instance below — i.e. the ones a single\n// day's declaration governs the whole exercise with. Anything reasoning about \"this property is\n// program-wide\" must read this list rather than restate it; a hand-kept copy elsewhere drifted\n// the moment this function changed.\n//\n// `id` is deliberately absent. It is checked for consistency across days (see the conflict check\n// on metadata.properties.id above) but its value is never propagated, so a declaration without\n// `id:` really does evaluate with no tags.\nexport const PlannerEvaluator_hoistedProperties = [\"warmup\", \"progress\", \"update\", \"used\"] as const;\n\nexport function PlannerEvaluator_fillSingleProperties(\n  exercise: IPlannerProgramExercise,\n  metadata: IPlannerEvalMetadata\n): void {\n  if (metadata.notused.has(exercise.key)) {\n    exercise.notused = true;\n  }\n\n  if (metadata.properties.progress[exercise.key] != null) {\n    const existingProgress = exercise.progress;\n    if (!existingProgress) {\n      exercise.progress = metadata.properties.progress[exercise.key].property;\n    }\n  }\n\n  if (metadata.properties.update[exercise.key] != null && !exercise.update) {\n    exercise.update = metadata.properties.update[exercise.key].property;\n  }\n\n  if (metadata.properties.warmup[exercise.key] != null) {\n    exercise.warmupSets = metadata.properties.warmup[exercise.key].warmupSets;\n  }\n}\n\nexport function PlannerEvaluator_fillProgressReuses(\n  evaluatedWeeks: IPlannerEvalResult[][],\n  exercise: IPlannerProgramExercise,\n  settings: ISettings,\n  metadata: IPlannerEvalMetadata\n): void {\n  const progress = exercise.progress;\n  if (progress?.type === \"custom\") {\n    const fullName = progress.reuse?.fullName;\n    if (progress.reuse && fullName) {\n      const key = PlannerKey_fromFullName(fullName, settings.exercises);\n      const point = exercise.points.progressPoint || exercise.points.fullName;\n      if (metadata.byExerciseWeekDay[key] == null) {\n        throw PlannerSyntaxError.fromPoint(exercise.fullName, `No such exercise ${fullName}`, point, {\n          type: \"reuseTargetNotFound\",\n          data: { fullName },\n        });\n      }\n      const originalProperty = metadata.properties.progress[key];\n      const dayData = originalProperty?.dayData;\n      const originalProgress = originalProperty?.property;\n      if (!originalProgress || !dayData) {\n        throw PlannerSyntaxError.fromPoint(exercise.fullName, \"Original exercise should specify progress\", point, {\n          type: \"reuseTargetMissingSection\",\n          data: { section: \"progress\" },\n        });\n      }\n      // fillSingleProperties hands every instance the same progress object, so identity here means\n      // the exercise reuses its own progress - see PlannerEvaluator_checkSelfReuse.\n      if (originalProgress === progress) {\n        throw PlannerSyntaxError.fromPoint(exercise.fullName, `Exercise cannot reuse its own progress`, point, {\n          type: \"reuseSelf\",\n          data: { section: \"progress\" },\n        });\n      }\n      if (originalProgress.reuse?.fullName != null) {\n        // originalProgress.reuse.exercise may not be resolved yet (resolution goes in document\n        // order), so check notused via metadata, which is complete before this pass.\n        const originalReuseKey = PlannerKey_fromFullName(originalProgress.reuse.fullName, settings.exercises);\n        if (!metadata.notused.has(originalReuseKey)) {\n          throw PlannerSyntaxError.fromPoint(\n            exercise.fullName,\n            `Original exercise cannot reuse another progress`,\n            point,\n            { type: \"reuseChained\", data: { section: \"progress\" } }\n          );\n        }\n      }\n      if (originalProgress.type !== \"custom\") {\n        throw PlannerSyntaxError.fromPoint(\n          exercise.fullName,\n          \"Original exercise should specify custom progress\",\n          point,\n          { type: \"reuseTargetNotCustom\", data: { section: \"progress\" } }\n        );\n      }\n      const originalState = originalProgress.state;\n      const state = progress.state;\n      for (const stateKey of ObjectUtils_keys(originalState)) {\n        const value = originalState[stateKey];\n        if (state[key] != null && Weight_type(value) !== Weight_type(state[stateKey])) {\n          throw PlannerSyntaxError.fromPoint(exercise.fullName, `Wrong type of state variable ${stateKey}`, point, {\n            type: \"reuseStateTypeMismatch\",\n            data: { stateKey },\n          });\n        }\n      }\n      const originalExercises = PlannerEvaluator_findOriginalExercisesAtWeekDay(\n        settings,\n        fullName,\n        evaluatedWeeks,\n        dayData.week,\n        dayData.dayInWeek\n      );\n      const originalExercise = originalExercises[0]?.exercise;\n      if (\n        originalExercise?.reuse != null &&\n        (originalExercise.progress == null || originalExercise.progress.reuse != null)\n      ) {\n        throw PlannerSyntaxError.fromPoint(\n          exercise.fullName,\n          `Original exercise '${originalExercise.fullName}' should not reuse other exercise`,\n          point,\n          { type: \"reuseChained\", data: { section: \"progress\" } }\n        );\n      }\n      progress.reuse.exercise = originalExercise;\n    }\n  }\n}\n\nexport function PlannerEvaluator_checkUpdateScript(\n  exercise: IPlannerProgramExercise,\n  settings: ISettings,\n  dayData: IDayData\n): void {\n  const update = exercise.update;\n  if (update?.type === \"custom\") {\n    const { script, liftoscriptNode } = update;\n    if (script && liftoscriptNode) {\n      const exerciseType = PlannerProgramExercise_getExercise(exercise, settings);\n      const state = PlannerProgramExercise_getState(exercise);\n      const liftoscriptEvaluator = new ScriptRunner(\n        script,\n        state,\n        {},\n        Progress_createEmptyScriptBindings(dayData, settings),\n        Progress_createScriptFunctions(settings),\n        settings.units,\n        { exerciseType, unit: settings.units, prints: [] },\n        \"update\"\n      );\n      try {\n        liftoscriptEvaluator.parse();\n      } catch (e) {\n        if (e instanceof LiftoscriptSyntaxError && liftoscriptNode) {\n          const [line] = PlannerExerciseEvaluator.getLineAndOffset(script, liftoscriptNode);\n          throw new PlannerSyntaxError(\n            e.message,\n            line + e.line,\n            e.offset,\n            liftoscriptNode.from + e.from,\n            liftoscriptNode.from + e.to,\n            e.details\n          );\n        } else {\n          throw e;\n        }\n      }\n    }\n  }\n}\n\nexport function PlannerEvaluator_fillUpdateReuses(\n  evaluatedWeeks: IPlannerEvalResult[][],\n  exercise: IPlannerProgramExercise,\n  settings: ISettings,\n  metadata: IPlannerEvalMetadata\n): void {\n  const update = exercise.update;\n  if (update?.type === \"custom\") {\n    const fullName = update.reuse?.fullName;\n    if (update.reuse && fullName) {\n      const key = PlannerKey_fromFullName(fullName, settings.exercises);\n      const point = exercise.points.updatePoint || exercise.points.fullName;\n\n      if (metadata.byExerciseWeekDay[key] == null) {\n        throw PlannerSyntaxError.fromPoint(exercise.fullName, `No such exercise ${fullName}`, point, {\n          type: \"reuseTargetNotFound\",\n          data: { fullName },\n        });\n      }\n      const originalProperty = metadata.properties.update[key];\n      const originalUpdate = originalProperty?.property;\n      const dayData = originalProperty?.dayData;\n      if (!originalUpdate || !dayData) {\n        throw PlannerSyntaxError.fromPoint(exercise.fullName, \"Original exercise should specify update\", point, {\n          type: \"reuseTargetMissingSection\",\n          data: { section: \"update\" },\n        });\n      }\n      // Same shared-object reasoning as the progress check above.\n      if (originalUpdate === update) {\n        throw PlannerSyntaxError.fromPoint(exercise.fullName, `Exercise cannot reuse its own update`, point, {\n          type: \"reuseSelf\",\n          data: { section: \"update\" },\n        });\n      }\n      if (originalUpdate.reuse?.fullName != null) {\n        // Same as the progress check above: reuse.exercise may not be resolved yet.\n        const originalReuseKey = PlannerKey_fromFullName(originalUpdate.reuse.fullName, settings.exercises);\n        if (!metadata.notused.has(originalReuseKey)) {\n          throw PlannerSyntaxError.fromPoint(\n            exercise.fullName,\n            `Original exercise cannot reuse another update`,\n            point,\n            {\n              type: \"reuseChained\",\n              data: { section: \"update\" },\n            }\n          );\n        }\n      }\n      if (originalUpdate.type !== \"custom\") {\n        throw PlannerSyntaxError.fromPoint(exercise.fullName, \"Original exercise should specify custom update\", point, {\n          type: \"reuseTargetNotCustom\",\n          data: { section: \"update\" },\n        });\n      }\n      const stateKeys = originalUpdate.meta?.stateKeys || new Set();\n      if (stateKeys.size !== 0) {\n        const progress = exercise.progress;\n        if (progress == null) {\n          throw PlannerSyntaxError.fromPoint(\n            exercise.fullName,\n            \"If 'update' block uses state variables, exercise should define them in 'progress' block\",\n            point,\n            { type: \"updateStateWithoutProgress\" }\n          );\n        }\n        const state = PlannerProgramExercise_getState(exercise);\n        for (const stateKey of stateKeys) {\n          if (state[stateKey] == null) {\n            throw PlannerSyntaxError.fromPoint(\n              exercise.fullName,\n              `Missing state variable ${stateKey} that's used in the original update block`,\n              point,\n              { type: \"reuseMissingStateVariable\", data: { stateKey } }\n            );\n          }\n        }\n      }\n      const originalExercises = PlannerEvaluator_findOriginalExercisesAtWeekDay(\n        settings,\n        fullName,\n        evaluatedWeeks,\n        dayData.week,\n        dayData.dayInWeek\n      );\n      const originalExercise = originalExercises[0]?.exercise;\n      if (\n        originalExercise?.reuse != null &&\n        (originalExercise.update == null || originalExercise.update.reuse != null)\n      ) {\n        throw PlannerSyntaxError.fromPoint(\n          exercise.fullName,\n          `Original exercise '${originalExercise.fullName}' should not reuse other exercise`,\n          point,\n          { type: \"reuseChained\", data: { section: \"update\" } }\n        );\n      }\n      update.reuse.exercise = originalExercise;\n    }\n  }\n}\n\n// Only the progress edge needs a graph walk, and it is worth saying why the other three don't,\n// since the answer isn't \"the reuse graph is acyclic\" — it isn't, and deliberately so (see below).\n// What has to hold is that the resolvers terminate and every reuse resolves to something concrete,\n// which each edge secures its own way:\n//\n//   sets         can't chain at all (\"Original exercise cannot reuse another exercise's sets\")\n//   descriptions can't chain either, so no loop can form - PlannerEvaluator_fillDescriptionReuses\n//   update       chains, and a loop resolves no script, which checkReusesResolve rejects\n//   progress     chains, and a loop still resolves a script - hence the walk below\n//\n// A self reuse is caught where it is wired, but two exercises reusing each other's progress close\n// the same loop only once both are wired - and PlannerProgramExercise_getState walks exactly these\n// pointers, so the loop is an infinite recursion on every later read of the program.\n//\n// The walk mirrors those getters, stop condition included: an exercise declaring its own progress\n// ends the chain, which is why A's progress reusing B while B reuses A's sets is fine. That shape\n// does leave a cycle in the object graph; evaluated programs are allowed to be cyclic, and\n// ObjectUtils_clone carries a visited set for exactly that reason.\n//\n// Runs after every reuse is wired, since a loop isn't visible until the last pointer is in place.\nexport function PlannerEvaluator_checkReuseLoops(exercise: IPlannerProgramExercise): void {\n  const seen = new Set<IPlannerProgramExercise>();\n  let current: IPlannerProgramExercise | undefined = exercise;\n  while (current != null && !(current.progress != null && current.progress.reuse == null)) {\n    if (seen.has(current)) {\n      throw PlannerSyntaxError.fromPoint(\n        exercise.fullName,\n        `This exercise ends up reusing itself through other exercises`,\n        exercise.points.progressPoint || exercise.points.reuseSetPoint || exercise.points.fullName,\n        { type: \"reuseCycle\" }\n      );\n    }\n    seen.add(current);\n    current = current.progress?.reuse?.exercise ?? current.reuse?.exercise;\n  }\n}\n\n// How far a reused script can be passed along, asked of the thing that does the passing rather\n// than restated as a shape here. The progression and update runners resolve through these same\n// getters, so a chain they can't follow is a program that saves cleanly, shows a progression, and\n// then silently never runs it. Stated once: deepening the getters relaxes this along with them.\n//\n// Runs after every reuse is wired, since resolution reads other exercises.\nexport function PlannerEvaluator_checkReusesResolve(exercise: IPlannerProgramExercise): void {\n  if (exercise.progress?.type === \"custom\" && PlannerProgramExercise_getProgressScript(exercise) == null) {\n    throw PlannerSyntaxError.fromPoint(\n      exercise.fullName,\n      `Couldn't find the progress script this reuses - reuse the exercise that defines it instead`,\n      exercise.points.progressPoint || exercise.points.fullName,\n      { type: \"reuseScriptNotFound\", data: { section: \"progress\" } }\n    );\n  }\n  if (exercise.update != null && PlannerProgramExercise_getUpdateScript(exercise) == null) {\n    throw PlannerSyntaxError.fromPoint(\n      exercise.fullName,\n      `Couldn't find the update script this reuses - reuse the exercise that defines it instead`,\n      exercise.points.updatePoint || exercise.points.fullName,\n      { type: \"reuseScriptNotFound\", data: { section: \"update\" } }\n    );\n  }\n}\n\nexport function PlannerEvaluator_postProcess(\n  evaluatedWeeks: IPlannerEvalResult[][],\n  settings: ISettings,\n  metadata: IPlannerEvalMetadata\n): void {\n  PlannerEvaluator_iterateOverExercises(\n    evaluatedWeeks,\n    (weekIndex, dayInWeekIndex, dayIndex, exerciseIndex, exercise) => {\n      PlannerEvaluator_fillDescriptions(exercise, evaluatedWeeks, weekIndex, dayInWeekIndex);\n      PlannerEvaluator_fillRepeats(exercise, evaluatedWeeks, dayInWeekIndex, metadata.byExerciseWeekDay);\n      PlannerEvaluator_fillSingleProperties(exercise, metadata);\n      PlannerEvaluator_checkUnknownExercises(exercise, metadata);\n    }\n  );\n\n  PlannerEvaluator_iterateOverExercises(\n    evaluatedWeeks,\n    (weekIndex, dayInWeekIndex, dayIndex, exerciseIndex, exercise) => {\n      PlannerEvaluator_fillSetReuses(exercise, evaluatedWeeks, weekIndex, settings, metadata);\n      PlannerEvaluator_fillDescriptionReuses(exercise, weekIndex, metadata.byExerciseWeekDay, settings);\n      PlannerEvaluator_fillProgressReuses(evaluatedWeeks, exercise, settings, metadata);\n      PlannerEvaluator_fillUpdateReuses(evaluatedWeeks, exercise, settings, metadata);\n      PlannerEvaluator_checkUpdateScript(exercise, settings, {\n        week: weekIndex + 1,\n        dayInWeek: dayInWeekIndex + 1,\n        day: dayInWeekIndex + 1,\n      });\n    }\n  );\n\n  // Its own pass: reuses are wired in document order, so an exercise's chain is only complete\n  // once every exercise has been through the pass above.\n  PlannerEvaluator_iterateOverExercises(evaluatedWeeks, (_weekIndex, _dayInWeekIndex, _dayIndex, _index, exercise) => {\n    PlannerEvaluator_checkReuseLoops(exercise);\n    PlannerEvaluator_checkReusesResolve(exercise);\n  });\n  for (const week of evaluatedWeeks) {\n    for (const day of week) {\n      if (day.success) {\n        day.data.sort(PlannerEvaluator_compareExerciseOrder);\n      }\n    }\n  }\n\n  PlannerEvaluator_iterateOverExercises(\n    evaluatedWeeks,\n    (weekIndex, dayInWeekIndex, dayIndex, exerciseIndex, exercise) => {\n      PlannerEvaluator_fillEvaluatedSetVariations(exercise);\n    }\n  );\n}\n\nexport function PlannerEvaluator_checkUnknownExercises(\n  exercise: IPlannerProgramExercise,\n  metadata: IPlannerEvalMetadata\n): void {\n  if (metadata.notused.has(exercise.key)) {\n    return;\n  }\n  const variations = exercise.exerciseVariations;\n  if (variations != null && variations.length > 1) {\n    for (const variation of variations) {\n      if (variation.exerciseType == null) {\n        throw PlannerSyntaxError.fromPoint(\n          exercise.fullName,\n          `Unknown exercise ${variation.name}`,\n          exercise.points.fullName,\n          { type: \"unknownExercise\", data: { name: variation.name } }\n        );\n      }\n    }\n  } else if (exercise.exerciseType == null) {\n    throw PlannerSyntaxError.fromPoint(\n      exercise.fullName,\n      `Unknown exercise ${exercise.name}`,\n      exercise.points.fullName,\n      { type: \"unknownExercise\", data: { name: exercise.name } }\n    );\n  }\n}\n\nexport function PlannerEvaluator_findReusedDescriptions(\n  reusingName: string,\n  currentWeekIndex: number,\n  byExerciseWeekDay: IByExerciseWeekDay<IPlannerProgramExercise>,\n  settings: ISettings\n): { descriptions: IProgramExerciseDescriptions; exercise: IPlannerProgramExercise } | undefined {\n  const weekDayMatch = reusingName.match(/\\[([^]+)\\]/);\n  let weekIndex: number | undefined;\n  let dayIndex: number | undefined;\n  if (weekDayMatch != null) {\n    const [dayOrWeekStr, dayStr] = weekDayMatch[1].split(\":\");\n    if (dayStr != null) {\n      weekIndex = parseInt(dayOrWeekStr, 10);\n      weekIndex = isNaN(weekIndex) ? undefined : weekIndex - 1;\n      dayIndex = parseInt(dayStr, 10);\n      dayIndex = isNaN(dayIndex) ? undefined : dayIndex - 1;\n    } else {\n      dayIndex = parseInt(dayOrWeekStr, 10);\n      dayIndex = isNaN(dayIndex) ? undefined : dayIndex - 1;\n    }\n  }\n  reusingName = reusingName.replace(/\\[([^]+)\\]/, \"\").trim();\n  const key = PlannerKey_fromFullName(reusingName, settings.exercises);\n  const weekExercises = ObjectUtils_values(byExerciseWeekDay[key]?.[weekIndex ?? currentWeekIndex] || []);\n  const weekDescriptions = weekExercises.map((d) => d.descriptions);\n  const index = dayIndex ?? 0;\n  if (weekDescriptions[index]) {\n    return { descriptions: weekDescriptions[index], exercise: weekExercises[index] };\n  } else {\n    return undefined;\n  }\n}\n\nexport function PlannerEvaluator_findOriginalExercisesAtWeekDay(\n  settings: ISettings,\n  fullName: string,\n  program: IPlannerEvalResult[][],\n  atWeek: number,\n  atDay?: number\n): { exercise: IPlannerProgramExercise; dayData: Required<IDayData> }[] {\n  const originalExercises: { exercise: IPlannerProgramExercise; dayData: Required<IDayData> }[] = [];\n  const week = program[atWeek - 1];\n  if (week == null) {\n    return originalExercises;\n  }\n  const candidateDays = atDay != null ? [week[atDay - 1]] : week;\n  const originalKey = PlannerKey_fromFullName(fullName, settings.exercises);\n  for (let dayInWeekIndex = 0; dayInWeekIndex < candidateDays.length; dayInWeekIndex += 1) {\n    const day = candidateDays[dayInWeekIndex];\n    if (day == null || !day.success) {\n      continue;\n    }\n    for (const exercise of day.data) {\n      const reusingKey = PlannerKey_fromPlannerExercise(exercise, settings);\n      if (reusingKey === originalKey) {\n        originalExercises.push({\n          exercise,\n          dayData: {\n            week: atWeek,\n            dayInWeek: dayInWeekIndex + 1,\n            day: 1,\n          },\n        });\n      }\n    }\n  }\n  return originalExercises;\n}\n\nexport function PlannerEvaluator_evaluateFull(\n  fullProgramText: string,\n  settings: ISettings\n): { evaluatedWeeks: IPlannerEvalFullResult; exerciseFullNames: string[] } {\n  const { evaluatedWeeks, metadata } = PlannerEvaluator_getFullEvaluatedWeeks(fullProgramText, settings);\n  if (evaluatedWeeks.success) {\n    const perDayEvaluatedWeeks = PlannerProgram_fullToWeekEvalResult(evaluatedWeeks);\n    PlannerEvaluator_postProcess(perDayEvaluatedWeeks, settings, metadata);\n    for (const week of perDayEvaluatedWeeks) {\n      for (const day of week) {\n        if (!day.success) {\n          return {\n            evaluatedWeeks: { success: false, error: day.error },\n            exerciseFullNames: Array.from(metadata.fullNames),\n          };\n        }\n      }\n    }\n  }\n  return { evaluatedWeeks, exerciseFullNames: Array.from(metadata.fullNames) };\n}\n\nexport function PlannerEvaluator_findLastWeekExercise(\n  program: IPlannerEvalResult[][],\n  weekIndex: number,\n  dayIndex: number,\n  exercise: IPlannerProgramExercise,\n  cond?: (ex: IPlannerProgramExercise) => boolean\n): IPlannerProgramExercise | undefined {\n  for (\n    let i = weekIndex - 1, lastWeekDay = program[i]?.[dayIndex];\n    i >= 0 && lastWeekDay != null;\n    i -= 1, lastWeekDay = program[i]?.[dayIndex]\n  ) {\n    if (lastWeekDay.success) {\n      const lastWeekExercise = lastWeekDay.data.find((ex) => ex.key === exercise.key);\n      if (lastWeekExercise != null && (cond == null || cond(lastWeekExercise))) {\n        return lastWeekExercise;\n      }\n    }\n  }\n  return undefined;\n}\n\nexport function PlannerEvaluator_setByExerciseWeekDay<T, U extends Record<string, Record<number, Record<number, T>>>>(\n  coll: U,\n  exercise: string,\n  weekIndex: number,\n  dayIndex: number,\n  val: T\n): void {\n  coll[exercise as keyof U] = coll[exercise as keyof U] || {};\n  coll[exercise as keyof U][weekIndex] = coll[exercise as keyof U][weekIndex] || {};\n  coll[exercise as keyof U][weekIndex][dayIndex] = val;\n}\n\nexport function PlannerEvaluator_setByWeekDayExercise<T, U extends Record<number, Record<number, Record<string, T>>>>(\n  coll: U,\n  exercise: string,\n  weekIndex: number,\n  dayIndex: number,\n  val: T\n): void {\n  coll[weekIndex] = coll[weekIndex] || {};\n  coll[weekIndex][dayIndex] = coll[weekIndex][dayIndex] || {};\n  coll[weekIndex][dayIndex][exercise] = val;\n}\n\nexport function PlannerEvaluator_iterateOverExercises(\n  program: IPlannerEvalResult[][],\n  cb: (\n    weekIndex: number,\n    dayInWeekIndex: number,\n    dayIndex: number,\n    exerciseIndex: number,\n    exercise: IPlannerProgramExercise\n  ) => void\n): void {\n  let dayIndex = 0;\n  for (let weekIndex = 0; weekIndex < program.length; weekIndex += 1) {\n    const week = program[weekIndex];\n    for (let dayInWeekIndex = 0; dayInWeekIndex < week.length; dayInWeekIndex += 1) {\n      const day = week[dayInWeekIndex];\n      try {\n        if (day?.success) {\n          const exercises = day.data;\n          for (let exerciseIndex = 0; exerciseIndex < exercises.length; exerciseIndex += 1) {\n            cb(weekIndex, dayInWeekIndex, dayIndex, exerciseIndex, exercises[exerciseIndex]);\n          }\n        }\n      } catch (e) {\n        if (e instanceof PlannerSyntaxError) {\n          week[dayInWeekIndex] = { success: false, error: e };\n        } else {\n          throw e;\n        }\n      }\n      dayIndex += 1;\n    }\n  }\n}\n\nexport const PlannerEvaluator_forceEvaluate = (\n  plannerProgram: IPlannerProgram,\n  settings: ISettings\n): {\n  evaluatedWeeks: IPlannerEvalResult[][];\n  exerciseFullNames: string[];\n} => {\n  const { evaluatedWeeks, metadata } = PlannerEvaluator_getPerDayEvaluatedWeeks(plannerProgram, settings);\n  PlannerEvaluator_postProcess(evaluatedWeeks, settings, metadata);\n  return { evaluatedWeeks, exerciseFullNames: Array.from(metadata.fullNames) };\n};\n\nexport const PlannerEvaluator_evaluate = memoize(PlannerEvaluator_forceEvaluate, {\n  maxSize: 10,\n  isEqual: (a: IPlannerProgram | ISettings, b: IPlannerProgram | ISettings) => {\n    if (a == null || b == null) {\n      return a === b;\n    }\n    if (\"weeks\" in a && \"weeks\" in b) {\n      const aText = PlannerProgram_generateFullText(a.weeks);\n      const bText = PlannerProgram_generateFullText(b.weeks);\n      return aText === bText;\n    } else {\n      return a === b;\n    }\n  },\n});\n","// import util from \"util\";\nimport { SyntaxNode } from \"@lezer/common\";\nimport { Exercise_findByNameAndEquipment, Exercise_buildName } from \"../../models/exercise\";\nimport { CollectionUtils_compact } from \"../../utils/collection\";\nimport { parser as plannerExerciseParser } from \"./plannerExerciseParser\";\nimport { IEither } from \"../../utils/types\";\nimport {\n  IPlannerProgramExercise,\n  IPlannerProgramExerciseRepRange,\n  IPlannerProgramExerciseSet,\n  IPlannerProgramExerciseSetVariation,\n  IPlannerProgramExerciseVariation,\n  IPlannerProgramProperty,\n  IPlannerProgramReuse,\n  IPlannerProgramExerciseWarmupSet,\n  IProgramExerciseProgress,\n  IProgramExerciseUpdate,\n  IProgramExerciseProgressType,\n  IPlannerProgramExerciseSuperset,\n} from \"./models/types\";\nimport {\n  IWeight,\n  IProgramState,\n  IDayData,\n  ISettings,\n  IExerciseType,\n  IUnit,\n  IProgramStateMetadata,\n  IAllCustomExercises,\n} from \"../../types\";\nimport * as W from \"../../models/weight\";\nimport { PlannerNodeName } from \"./plannerExerciseStyles\";\nimport { ScriptRunner } from \"../../parser\";\nimport { Progress_createEmptyScriptBindings, Progress_createScriptFunctions } from \"../../models/progress\";\nimport { LiftoscriptSyntaxError, LiftoscriptEvaluator } from \"../../liftoscriptEvaluator\";\nimport { IPlannerErrorDetails } from \"../../syntaxErrorTypes\";\nimport { Weight_print, Weight_smartConvert } from \"../../models/weight\";\nimport { PlannerStateVars_fromArgs } from \"./models/plannerStateVars\";\nimport { PlannerKey_fromFullName, PlannerKey_fromExerciseVariations } from \"./plannerKey\";\nimport { UidFactory_generateUid } from \"../../utils/generator\";\nimport { ObjectUtils_pick, ObjectUtils_isEqual } from \"../../utils/object\";\nimport {\n  PlannerProgramExercise_buildProgress,\n  PlannerProgramExercise_shortNameFromFullName,\n} from \"./models/plannerProgramExercise\";\nimport memoize from \"micro-memoize\";\nimport { StringUtils_unindent } from \"../../utils/string\";\n\nexport interface IPlannerTopLineItem {\n  type: \"exercise\" | \"comment\" | \"description\" | \"empty\";\n  value: string;\n  exerciseIndex?: number;\n  notused?: boolean;\n  order?: number;\n  fullName?: string;\n  repeat?: number[];\n  repeatRanges?: string[];\n  isRepeat?: boolean;\n  descriptions?: string[];\n  sections?: string;\n  sectionsToReuse?: string;\n  used?: boolean;\n}\n\nexport type IPlannerSyntaxPointer = { line: number; offset: number; from: number; to: number };\n\nexport class PlannerSyntaxError extends SyntaxError {\n  public readonly line: number;\n  public readonly offset: number;\n  public readonly from: number;\n  public readonly to: number;\n  public readonly details: IPlannerErrorDetails;\n\n  public static fromPoint(\n    fullName: string | undefined,\n    message: string,\n    point: IPlannerSyntaxPointer,\n    details: IPlannerErrorDetails\n  ): PlannerSyntaxError {\n    // The subject goes into `details` as well as into the message. Every caller that knows which\n    // exercise threw passes it here, so this one line puts it on all of them - and a consumer that\n    // needs it can read a field instead of parsing it back out of the sentence.\n    return new PlannerSyntaxError(\n      `${fullName ? `${fullName}: ` : \"\"}${message} (${point.line}:${point.offset})`,\n      point.line,\n      point.offset,\n      point.from,\n      point.to,\n      fullName != null ? { ...details, subject: fullName } : details\n    );\n  }\n\n  constructor(message: string, line: number, offset: number, from: number, to: number, details: IPlannerErrorDetails) {\n    super(message);\n    this.line = line;\n    this.offset = offset;\n    this.from = from;\n    this.to = to;\n    this.details = details;\n  }\n\n  public toString(): string {\n    return this.message;\n  }\n}\n\nexport type IPlannerEvalResult = IEither<IPlannerProgramExercise[], PlannerSyntaxError>;\nexport type IPlannerEvalFullResult = IEither<IPlannerExerciseEvaluatorWeek[], PlannerSyntaxError>;\n\nfunction getChildren(node: SyntaxNode): SyntaxNode[] {\n  const cur = node.cursor();\n  const result: SyntaxNode[] = [];\n  if (!cur.firstChild()) {\n    return result;\n  }\n  do {\n    result.push(cur.node);\n  } while (cur.nextSibling());\n  return result;\n}\n\nfunction assert(name: string): never {\n  throw new PlannerSyntaxError(`Missing required nodes for ${name}, this should never happen`, 0, 0, 0, 1, {\n    type: \"internal\",\n    data: { node: name },\n  });\n}\n\nexport interface IPlannerExerciseEvaluatorWeek {\n  name: string;\n  line: number;\n  days: { name: string; line: number; exercises: IPlannerProgramExercise[] }[];\n}\n\ntype IPlannerExerciseEvaluatorMode = \"perday\" | \"full\" | \"onset\";\n\nexport class PlannerExerciseEvaluator {\n  private readonly script: string;\n  private readonly mode: IPlannerExerciseEvaluatorMode;\n  private dayData: Required<IDayData>;\n  private readonly settings: ISettings;\n  private weeks: IPlannerExerciseEvaluatorWeek[] = [];\n  private exerciseIndex: number = 0;\n\n  private latestDescriptions: string[][] = [];\n\n  constructor(script: string, settings: ISettings, mode: IPlannerExerciseEvaluatorMode, dayData?: Required<IDayData>) {\n    this.script = script;\n    this.settings = settings;\n    this.dayData = dayData || { day: 1, week: 1, dayInWeek: 1 };\n    this.mode = mode;\n  }\n\n  private getValue(node: SyntaxNode): string {\n    return this.getValueTrim(node).replace(/\\n/g, \"\\\\n\").replace(/\\t/g, \"\\\\t\");\n  }\n\n  private getValueTrim(node: SyntaxNode): string {\n    return this.script.slice(node.from, node.to);\n  }\n\n  public static applyChangesToScript(script: string, ranges: [number, number, string][]): string {\n    let offset = 0;\n    while (ranges.length > 0) {\n      const [from, to, replacement] = ranges.shift()!;\n      script = script.slice(0, from + offset) + replacement + script.slice(to + offset);\n      offset += replacement.length - (to - from);\n    }\n    return script;\n  }\n\n  public static isEqualProperty(a: IPlannerProgramProperty, b: IPlannerProgramProperty): boolean {\n    return a.fnName === b.fnName && a.fnArgs.join() === b.fnArgs.join() && a.script === b.script && a.body === b.body;\n  }\n\n  public static isEqualProgress(a: IProgramExerciseProgress, b: IProgramExerciseProgress): boolean {\n    const pickA = {\n      ...ObjectUtils_pick(a, [\"type\", \"state\", \"stateMetadata\", \"script\"]),\n      reuse: a.reuse?.fullName,\n    };\n    const pickB = {\n      ...ObjectUtils_pick(b, [\"type\", \"state\", \"stateMetadata\", \"script\"]),\n      reuse: b.reuse?.fullName,\n    };\n    return ObjectUtils_isEqual(pickA, pickB);\n  }\n\n  public static isEqualUpdate(a: IProgramExerciseUpdate, b: IProgramExerciseUpdate): boolean {\n    const pickA = { ...ObjectUtils_pick(a, [\"type\", \"script\"]), reuse: a.reuse?.fullName };\n    const pickB = { ...ObjectUtils_pick(b, [\"type\", \"script\"]), reuse: b.reuse?.fullName };\n    return ObjectUtils_isEqual(pickA, pickB);\n  }\n\n  private getPoint(node: SyntaxNode): IPlannerSyntaxPointer {\n    const [line, offset] = this.getLineAndOffset(node);\n    return { line, offset, from: node.from, to: node.to };\n  }\n\n  private error(message: string, node: SyntaxNode, details: IPlannerErrorDetails): never {\n    const point = this.getPoint(node);\n    throw PlannerSyntaxError.fromPoint(undefined, message, point, details);\n  }\n\n  public static getLineAndOffset(script: string, node: SyntaxNode): [number, number] {\n    const linesLengths = script.split(\"\\n\").map((l) => l.length + 1);\n    let offset = 0;\n    for (let i = 0; i < linesLengths.length; i++) {\n      const lineLength = linesLengths[i];\n      if (node.from >= offset && node.from < offset + lineLength) {\n        return [i + 1, node.from - offset];\n      }\n      offset += lineLength;\n    }\n    return [linesLengths.length, linesLengths[linesLengths.length - 1]];\n  }\n\n  private getLineAndOffset(node: SyntaxNode): [number, number] {\n    return PlannerExerciseEvaluator.getLineAndOffset(this.script, node);\n  }\n\n  public parse(expr: SyntaxNode): void {\n    const cursor = expr.cursor();\n    do {\n      if (cursor.node.type.isError) {\n        this.error(\"Syntax error\", cursor.node, { type: \"parse\" });\n      }\n    } while (cursor.next());\n  }\n\n  private getWarmupReps(setParts: string): { numberOfSets: number; reps: number } {\n    let [numberOfSetsStr, repsStr] = setParts.split(\"x\", 2);\n    if (!numberOfSetsStr) {\n      return { numberOfSets: 1, reps: 1 };\n    }\n    if (!repsStr) {\n      repsStr = numberOfSetsStr;\n      numberOfSetsStr = \"1\";\n    }\n    return {\n      reps: parseInt(repsStr, 10),\n      numberOfSets: parseInt(numberOfSetsStr, 10),\n    };\n  }\n\n  private getRepRange(setParts: string): IPlannerProgramExerciseRepRange | undefined {\n    if (!setParts) {\n      return undefined;\n    }\n    const [numberOfSetsStr, repRangeStr] = setParts.split(\"x\", 2);\n\n    const reprange = repRangeStr.split(\"-\", 2);\n    let minrepStr: string | undefined = reprange[0];\n    let maxrepStr: string | undefined = reprange[1];\n    if (!maxrepStr) {\n      maxrepStr = minrepStr;\n      minrepStr = undefined;\n    }\n    let isAmrap = false;\n    if (maxrepStr.endsWith(\"+\")) {\n      isAmrap = true;\n      maxrepStr.replace(/\\+/g, \"\");\n    }\n    return {\n      numberOfSets: parseInt(numberOfSetsStr, 10),\n      minrep: minrepStr != null ? parseInt(minrepStr, 10) : undefined,\n      maxrep: parseInt(maxrepStr, 10),\n      isAmrap: isAmrap,\n      isQuickAddSet: numberOfSetsStr.endsWith(\"+\"),\n    };\n  }\n\n  private getWeight(expr?: SyntaxNode | null): IWeight | undefined {\n    if (expr?.type.name === PlannerNodeName.WeightWithPlus || expr?.type.name === PlannerNodeName.Weight) {\n      const value = this.getValue(expr).replace(\"+\", \"\");\n      const unit = value.indexOf(\"kg\") !== -1 ? \"kg\" : \"lb\";\n      return W.Weight_build(parseFloat(value), unit);\n    } else {\n      return undefined;\n    }\n  }\n\n  private evaluateWarmupSet(expr: SyntaxNode): IPlannerProgramExerciseWarmupSet {\n    if (expr.type.name === PlannerNodeName.WarmupExerciseSet) {\n      const setPartNodes = expr.getChildren(PlannerNodeName.WarmupSetPart);\n      const setParts = setPartNodes.map((setPartNode) => this.getValue(setPartNode)).join(\"\");\n      const { numberOfSets, reps } = this.getWarmupReps(setParts);\n      const percentageNode = expr.getChild(PlannerNodeName.Percentage);\n      const weightNode = expr.getChild(PlannerNodeName.Weight);\n      const percentage =\n        percentageNode == null ? undefined : parseFloat(this.getValue(percentageNode).replace(\"%\", \"\"));\n      const weight = this.getWeight(weightNode);\n      if (percentage) {\n        return {\n          type: \"warmup\",\n          reps,\n          numberOfSets,\n          percentage,\n        };\n      } else {\n        return {\n          type: \"warmup\",\n          reps,\n          numberOfSets,\n          weight: weight!,\n        };\n      }\n    } else {\n      assert(PlannerNodeName.ExerciseSection);\n    }\n  }\n\n  public static fnArgsToStateVars(\n    fnArgs: string[],\n    onError?: (message: string, value: string) => void\n  ): {\n    state: IProgramState;\n    stateMetadata: IProgramStateMetadata;\n  } {\n    return PlannerStateVars_fromArgs(fnArgs, onError);\n  }\n\n  private evaluateSet(expr: SyntaxNode): IPlannerProgramExerciseSet {\n    if (expr.type.name === PlannerNodeName.ExerciseSet) {\n      const setPartNodes = expr.getChildren(PlannerNodeName.SetPart);\n      const setParts = setPartNodes.map((setPartNode) => this.getValue(setPartNode)).join(\"\");\n      const repRange = this.getRepRange(setParts);\n      const rpeNode = expr.getChild(PlannerNodeName.Rpe);\n      const timerNode = expr.getChild(PlannerNodeName.Timer);\n      const setTimerNode = expr.getChild(PlannerNodeName.SetTimer);\n      const autoNode = expr.getChild(PlannerNodeName.Auto);\n      const percentageNode = expr.getChild(PlannerNodeName.PercentageWithPlus);\n      const weightNode = expr.getChild(PlannerNodeName.WeightWithPlus);\n      const labelNode = expr.getChild(PlannerNodeName.SetLabel);\n      const askWeightNode = expr.getChild(PlannerNodeName.AskWeight);\n      const askWeight =\n        askWeightNode != null ||\n        (weightNode != null && this.getValue(weightNode).indexOf(\"+\") !== -1) ||\n        (percentageNode != null && this.getValue(percentageNode).indexOf(\"+\") !== -1);\n      const logRpe = rpeNode == null ? undefined : this.getValue(rpeNode).indexOf(\"+\") !== -1;\n      let rpe = rpeNode == null ? undefined : parseFloat(this.getValue(rpeNode).replace(\"@\", \"\").replace(\"+\", \"\"));\n      if (rpe != null && isNaN(rpe)) {\n        rpe = undefined;\n      }\n      let timer = timerNode == null ? undefined : parseInt(this.getValue(timerNode).replace(\"s\", \"\"), 10);\n      let setTimer: number | undefined;\n      let isOverflowSetTimer: boolean | undefined;\n      if (setTimerNode != null) {\n        // SetTimer encodes both the active timer and the rest timer, e.g. \"60s+|30s\" or \"60s|?\"\n        const [leftRaw, rightRaw] = this.getValue(setTimerNode).split(\"|\");\n        isOverflowSetTimer = leftRaw.indexOf(\"+\") !== -1 ? true : undefined;\n        setTimer = parseInt(leftRaw.replace(\"s\", \"\").replace(\"+\", \"\"), 10);\n        // \"?\" on the rest side means \"fall back to the global default rest timer\"\n        timer = rightRaw === \"?\" ? undefined : parseInt(rightRaw.replace(\"s\", \"\"), 10);\n      }\n      const auto = autoNode != null ? true : undefined;\n      const percentage =\n        percentageNode == null ? undefined : parseFloat(this.getValue(percentageNode).replace(/[%\\+]/, \"\"));\n      const weight = this.getWeight(weightNode);\n      const label = labelNode\n        ? getChildren(labelNode)\n            .map((n) => this.getValue(n))\n            .join(\" \")\n        : undefined;\n      if (labelNode && label && label.length > 8) {\n        this.error(\"Label length should be 8 chars max\", labelNode, { type: \"labelTooLong\", data: { max: 8 } });\n      }\n      return {\n        repRange,\n        timer,\n        setTimer,\n        isOverflowSetTimer,\n        auto,\n        logRpe,\n        rpe,\n        weight,\n        percentage,\n        label,\n        askWeight,\n      };\n    } else {\n      assert(PlannerNodeName.ExerciseSection);\n    }\n  }\n\n  private evaluateId(expr: SyntaxNode): number[] {\n    if (expr.type.name === PlannerNodeName.ExerciseProperty) {\n      const valueNode = expr.getChild(PlannerNodeName.FunctionExpression);\n      if (valueNode == null) {\n        throw this.error(`Missing value for the property 'id'`, expr, {\n          type: \"missingPropertyValue\",\n          data: { property: \"id\" },\n        });\n      }\n      const fnNameNode = valueNode.getChild(PlannerNodeName.FunctionName);\n      if (fnNameNode == null) {\n        assert(PlannerNodeName.FunctionName);\n      }\n      const fnName = this.getValue(fnNameNode);\n      if ([\"tags\"].indexOf(fnName) === -1) {\n        this.error(`There's no such id type - '${fnName}'`, fnNameNode, {\n          type: \"unknownIdType\",\n          data: { name: fnName },\n        });\n      }\n      const fnArgs = valueNode.getChildren(PlannerNodeName.FunctionArgument).map((argNode) => this.getValue(argNode));\n      if (fnName === \"tags\") {\n        if (fnArgs.length === 0) {\n          this.error(`You should provide the list of numbers in \"tags\"`, fnNameNode, { type: \"invalidTags\" });\n        }\n      }\n      return fnArgs.map((t) => parseInt(t, 10)).filter((t) => !isNaN(t));\n    } else {\n      assert(PlannerNodeName.ExerciseProperty);\n    }\n  }\n\n  private evaluateUpdate(expr: SyntaxNode, exerciseType?: IExerciseType): IProgramExerciseUpdate {\n    if (expr.type.name === PlannerNodeName.ExerciseProperty) {\n      const valueNode = expr.getChild(PlannerNodeName.FunctionExpression);\n      if (valueNode == null) {\n        throw this.error(`Missing value for the property 'update'`, expr, {\n          type: \"missingPropertyValue\",\n          data: { property: \"update\" },\n        });\n      }\n      const fnNameNode = valueNode.getChild(PlannerNodeName.FunctionName);\n      if (fnNameNode == null) {\n        assert(PlannerNodeName.FunctionName);\n      }\n      const fnName = this.getValue(fnNameNode);\n      const fnArgs = valueNode.getChildren(PlannerNodeName.FunctionArgument).map((argNode) => this.getValue(argNode));\n      let script: string | undefined;\n      let body: string | undefined;\n      let meta: { stateKeys: Set<string> } | undefined;\n      let liftoscriptNode: SyntaxNode | undefined;\n      if (fnName === \"custom\") {\n        liftoscriptNode = valueNode.getChild(PlannerNodeName.Liftoscript) || undefined;\n        script = liftoscriptNode ? this.getValueTrim(liftoscriptNode) : undefined;\n        if (fnArgs.length > 0) {\n          this.error(`State variables for the update script are taken from \"progress\" block`, fnNameNode, {\n            type: \"updateStateFromProgress\",\n          });\n        }\n        const reuseLiftoscriptNode = valueNode\n          .getChild(PlannerNodeName.ReuseLiftoscript)\n          ?.getChild(PlannerNodeName.ReuseSection)\n          ?.getChild(PlannerNodeName.ExerciseName);\n        body = reuseLiftoscriptNode ? this.getValue(reuseLiftoscriptNode) : undefined;\n        if (script) {\n          const liftoscriptEvaluator = new ScriptRunner(\n            script,\n            {},\n            {},\n            Progress_createEmptyScriptBindings(this.dayData, this.settings),\n            Progress_createScriptFunctions(this.settings),\n            this.settings.units,\n            { exerciseType, unit: this.settings.units, prints: [] },\n            \"update\"\n          );\n          const stateKeys = liftoscriptEvaluator.getStateVariableKeys();\n          meta = { stateKeys };\n        }\n        if (!script && !body) {\n          this.error(\n            `'custom' update requires either to specify Liftoscript block or specify which one to reuse`,\n            valueNode,\n            { type: \"customWithoutScript\", data: { section: \"update\" } }\n          );\n        }\n        return {\n          type: \"custom\",\n          script,\n          liftoscriptNode,\n          meta,\n          reuse: body ? { fullName: body, source: \"specific\" } : undefined,\n        };\n      } else {\n        this.error(`There's no such update progression exists - '${fnName}'`, fnNameNode, {\n          type: \"unknownUpdate\",\n          data: { name: fnName },\n        });\n      }\n    } else {\n      assert(PlannerNodeName.ExerciseProperty);\n    }\n  }\n\n  private validateProgress(fnName: string, fnArgs: string[], fnNameNode: SyntaxNode, valueNode: SyntaxNode): void {\n    if ([\"lp\", \"sum\", \"dp\", \"custom\", \"none\"].indexOf(fnName) === -1) {\n      this.error(`There's no such progression exists - '${fnName}'`, fnNameNode, {\n        type: \"unknownProgression\",\n        data: { name: fnName },\n      });\n    }\n    if (fnName === \"lp\") {\n      if (fnArgs.length > 6) {\n        this.error(`Linear Progression 'lp' only has 6 arguments max`, valueNode, {\n          type: \"progressionArity\",\n          data: { fn: \"lp\", max: 6 },\n        });\n      } else if (fnArgs[0] && !fnArgs[0].endsWith(\"lb\") && !fnArgs[0].endsWith(\"kg\") && !fnArgs[0].endsWith(\"%\")) {\n        this.error(\n          `1st argument of 'lp' should be weight (ending with 'lb' or 'kg') or percentage (ending with '%'). For example '10lb' or '30%'.`,\n          valueNode,\n          { type: \"progressionArgument\", data: { fn: \"lp\", index: 0, expected: \"weightOrPercentage\" } }\n        );\n      } else if (fnArgs[1] != null && isNaN(parseInt(fnArgs[1], 10))) {\n        this.error(`2nd argument of 'lp' should be a number of attempts - i.e. a number`, valueNode, {\n          type: \"progressionArgument\",\n          data: { fn: \"lp\", index: 1, expected: \"number\" },\n        });\n      } else if (fnArgs[2] != null && isNaN(parseInt(fnArgs[2], 10))) {\n        this.error(\n          `3rd argument of 'lp' should be a current number of successful attempts up to date - i.e. a number`,\n          valueNode,\n          { type: \"progressionArgument\", data: { fn: \"lp\", index: 2, expected: \"number\" } }\n        );\n      } else if (\n        fnArgs[3] != null &&\n        !fnArgs[3].endsWith(\"lb\") &&\n        !fnArgs[3].endsWith(\"kg\") &&\n        !fnArgs[3].endsWith(\"%\")\n      ) {\n        this.error(\n          `4th argument of 'lp' should be weight (ending with 'lb' or 'kg') or percentage (ending with '%'). For example '10lb' or '30%'.`,\n          valueNode,\n          { type: \"progressionArgument\", data: { fn: \"lp\", index: 3, expected: \"weightOrPercentage\" } }\n        );\n      } else if (fnArgs[4] != null && isNaN(parseInt(fnArgs[4], 10))) {\n        this.error(`5th argument of 'lp' should be a number of failed attempts - i.e. a number`, valueNode, {\n          type: \"progressionArgument\",\n          data: { fn: \"lp\", index: 4, expected: \"number\" },\n        });\n      } else if (fnArgs[5] != null && isNaN(parseInt(fnArgs[5], 10))) {\n        this.error(\n          `6th argument of 'lp' should be a current number of failed attempts up to date - i.e. a number`,\n          valueNode,\n          { type: \"progressionArgument\", data: { fn: \"lp\", index: 5, expected: \"number\" } }\n        );\n      }\n    } else if (fnName === \"sum\") {\n      if (fnArgs.length > 2) {\n        this.error(`Reps Sum Progression 'sum' only has 2 arguments max`, valueNode, {\n          type: \"progressionArity\",\n          data: { fn: \"sum\", max: 2 },\n        });\n      } else if (fnArgs[0] == null || isNaN(parseInt(fnArgs[0], 10))) {\n        this.error(`1st argument of 'sum' should be a number of reps - i.e. a number`, valueNode, {\n          type: \"progressionArgument\",\n          data: { fn: \"sum\", index: 0, expected: \"number\" },\n        });\n      } else if (\n        fnArgs[1] == null ||\n        (!fnArgs[1].endsWith(\"lb\") && !fnArgs[1].endsWith(\"kg\") && !fnArgs[1].endsWith(\"%\"))\n      ) {\n        this.error(\n          `2nd argument of 'sum' should be weight (ending with 'lb' or 'kg') or percentage (ending with '%'). For example '10lb' or '30%'.`,\n          valueNode,\n          { type: \"progressionArgument\", data: { fn: \"sum\", index: 1, expected: \"weightOrPercentage\" } }\n        );\n      }\n    } else if (fnName === \"dp\") {\n      if (fnArgs.length !== 3) {\n        this.error(`Double Progression 'dp' should have 3 arguments`, valueNode, {\n          type: \"progressionArity\",\n          data: { fn: \"dp\", max: 3 },\n        });\n      } else if (\n        fnArgs[0] == null ||\n        (!fnArgs[0].endsWith(\"lb\") && !fnArgs[0].endsWith(\"kg\") && !fnArgs[0].endsWith(\"%\"))\n      ) {\n        this.error(\n          `1st argument of 'dp' should be weight (ending with 'lb' or 'kg') or percentage (ending with '%'). For example '10lb' or '30%'.`,\n          valueNode,\n          { type: \"progressionArgument\", data: { fn: \"dp\", index: 0, expected: \"weightOrPercentage\" } }\n        );\n      } else if (fnArgs[1] == null || isNaN(parseInt(fnArgs[1], 10))) {\n        this.error(`2nd argument of 'dp' should be min reps in the range - i.e. a number, like 8`, valueNode, {\n          type: \"progressionArgument\",\n          data: { fn: \"dp\", index: 1, expected: \"number\" },\n        });\n      } else if (fnArgs[2] == null || isNaN(parseInt(fnArgs[2], 10))) {\n        this.error(`3rd argument of 'dp' should be max reps in the range - i.e. a number, like 12`, valueNode, {\n          type: \"progressionArgument\",\n          data: { fn: \"dp\", index: 2, expected: \"number\" },\n        });\n      }\n    } else if (fnName === \"custom\") {\n      const liftoscriptNode = valueNode.getChild(PlannerNodeName.Liftoscript);\n      const script = liftoscriptNode ? this.getValueTrim(liftoscriptNode) : undefined;\n      const reuseLiftoscriptNode = valueNode\n        .getChild(PlannerNodeName.ReuseLiftoscript)\n        ?.getChild(PlannerNodeName.ReuseSection)\n        ?.getChild(PlannerNodeName.ExerciseName);\n      const body = reuseLiftoscriptNode ? this.getValue(reuseLiftoscriptNode) : undefined;\n      if (!script && !body) {\n        this.error(\n          `'custom' progression requires either to specify Liftoscript block or specify which one to reuse`,\n          valueNode,\n          { type: \"customWithoutScript\", data: { section: \"progress\" } }\n        );\n      }\n    }\n  }\n\n  private evaluateProgress(expr: SyntaxNode, exerciseType?: IExerciseType): IProgramExerciseProgress {\n    const result = this.evaluateProgressImpl(expr, exerciseType);\n    if (result.success) {\n      return result.data;\n    } else {\n      throw this.error(result.error.message, expr, result.error.details);\n    }\n  }\n\n  private evaluateProgressImpl(\n    expr: SyntaxNode,\n    exerciseType?: IExerciseType\n  ): IEither<IProgramExerciseProgress, { message: string; details: IPlannerErrorDetails }> {\n    if (expr.type.name === PlannerNodeName.ExerciseProperty) {\n      const valueNode = expr.getChild(PlannerNodeName.FunctionExpression);\n      if (valueNode == null) {\n        const none = expr.getChild(PlannerNodeName.None);\n        if (none != null) {\n          return PlannerProgramExercise_buildProgress(\"none\", []);\n        } else {\n          throw this.error(`Missing value for the property 'progress'`, expr, {\n            type: \"missingPropertyValue\",\n            data: { property: \"progress\" },\n          });\n        }\n      }\n      const fnNameNode = valueNode.getChild(PlannerNodeName.FunctionName);\n      if (fnNameNode == null) {\n        assert(PlannerNodeName.FunctionName);\n      }\n      const fnName = this.getValue(fnNameNode);\n      const fnArgs = valueNode.getChildren(PlannerNodeName.FunctionArgument).map((argNode) => this.getValue(argNode));\n      this.validateProgress(fnName, fnArgs, fnNameNode, valueNode);\n\n      const type = fnName as IProgramExerciseProgressType;\n      if (type === \"custom\") {\n        const liftoscriptNode = valueNode.getChild(PlannerNodeName.Liftoscript);\n        const script = liftoscriptNode ? this.getValueTrim(liftoscriptNode) : undefined;\n        const { state } = PlannerExerciseEvaluator.fnArgsToStateVars(fnArgs, (message, value) =>\n          this.error(message, fnNameNode, { type: \"invalidStateVariable\", data: { value } })\n        );\n        if (script) {\n          const liftoscriptEvaluator = new ScriptRunner(\n            script,\n            state,\n            {},\n            Progress_createEmptyScriptBindings(this.dayData, this.settings),\n            Progress_createScriptFunctions(this.settings),\n            this.settings.units,\n            { exerciseType, unit: this.settings.units, prints: [] },\n            \"planner\"\n          );\n          try {\n            liftoscriptEvaluator.parse();\n          } catch (e) {\n            if (e instanceof LiftoscriptSyntaxError && liftoscriptNode) {\n              const [line] = this.getLineAndOffset(liftoscriptNode);\n              throw new PlannerSyntaxError(\n                e.message,\n                line + e.line,\n                e.offset,\n                liftoscriptNode.from + e.from,\n                liftoscriptNode.from + e.to,\n                e.details\n              );\n            } else {\n              throw e;\n            }\n          }\n        }\n        const reuseLiftoscriptNode = valueNode\n          .getChild(PlannerNodeName.ReuseLiftoscript)\n          ?.getChild(PlannerNodeName.ReuseSection)\n          ?.getChild(PlannerNodeName.ExerciseName);\n        const body = reuseLiftoscriptNode ? this.getValue(reuseLiftoscriptNode) : undefined;\n        return PlannerProgramExercise_buildProgress(type, fnArgs, {\n          script,\n          reuseFullname: body,\n        });\n      } else {\n        return PlannerProgramExercise_buildProgress(type, fnArgs);\n      }\n    } else {\n      assert(PlannerNodeName.ExerciseProperty);\n    }\n  }\n\n  private evaluateWarmup(expr: SyntaxNode): IPlannerProgramExerciseWarmupSet[] {\n    if (expr.type.name === PlannerNodeName.ExerciseProperty) {\n      const none = expr.getChild(PlannerNodeName.None);\n      if (none != null) {\n        return [];\n      }\n      const setsNode = expr.getChild(PlannerNodeName.WarmupExerciseSets);\n      if (setsNode != null) {\n        const sets = setsNode.getChildren(PlannerNodeName.WarmupExerciseSet);\n        if (sets.length > 0) {\n          return sets.map((set) => this.evaluateWarmupSet(set));\n        }\n      }\n      return [];\n    } else {\n      assert(PlannerNodeName.ExerciseProperty);\n    }\n  }\n\n  private evaluateSuperset(expr: SyntaxNode): { type: \"superset\"; data: IPlannerProgramExerciseSuperset } {\n    if (expr.type.name === PlannerNodeName.Superset) {\n      const exerciseNameNode = expr.getChild(PlannerNodeName.ExerciseName);\n      if (exerciseNameNode != null) {\n        const name = this.getValue(exerciseNameNode);\n        return {\n          type: \"superset\",\n          data: { name },\n        };\n      } else {\n        assert(PlannerNodeName.ExerciseName);\n      }\n    } else {\n      assert(PlannerNodeName.Superset);\n    }\n  }\n\n  private evaluateProperty(\n    expr: SyntaxNode,\n    exerciseType?: IExerciseType\n  ):\n    | { type: \"progress\"; data: IProgramExerciseProgress }\n    | { type: \"update\"; data: IProgramExerciseUpdate }\n    | { type: \"warmup\"; data: IPlannerProgramExerciseWarmupSet[] }\n    | { type: \"id\"; data: number[] }\n    | { type: \"used\"; data: \"\" } {\n    if (expr.type.name === PlannerNodeName.ExerciseProperty) {\n      const nameNode = expr.getChild(PlannerNodeName.ExercisePropertyName);\n      if (nameNode == null) {\n        assert(PlannerNodeName.ExercisePropertyName);\n      }\n      const name = this.getValue(nameNode);\n      if (name === \"progress\") {\n        return { type: \"progress\", data: this.evaluateProgress(expr, exerciseType) };\n      } else if (name === \"update\") {\n        return { type: \"update\", data: this.evaluateUpdate(expr, exerciseType) };\n      } else if (name === \"warmup\") {\n        return { type: \"warmup\", data: this.evaluateWarmup(expr) };\n      } else if (name === \"id\") {\n        return { type: \"id\", data: this.evaluateId(expr) };\n      } else if (name === \"used\") {\n        return { type: \"used\", data: \"\" };\n      } else {\n        this.error(`There's no such property exists - '${name}'`, nameNode, {\n          type: \"unknownProperty\",\n          data: { name },\n        });\n      }\n    } else {\n      assert(PlannerNodeName.ExerciseProperty);\n    }\n  }\n\n  private getReuseWeekDay(weekDayNode: SyntaxNode | null): { week?: number; day?: number } {\n    let week: number | undefined;\n    let day: number | undefined;\n    if (weekDayNode != null) {\n      const result = weekDayNode.getChildren(PlannerNodeName.WeekOrDay).map((n) => {\n        const child = getChildren(n)[0];\n        if (child.type.name === PlannerNodeName.Int) {\n          return parseInt(this.getValue(child), 10);\n        } else {\n          return undefined;\n        }\n      });\n      if (result.length === 1) {\n        day = result[0];\n      } else {\n        week = result[0];\n        day = result[1];\n      }\n    }\n    return { week, day };\n  }\n\n  private evaluateReuseNode(expr: SyntaxNode): { type: \"reuse\"; data: IPlannerProgramReuse } {\n    if (expr.type.name === PlannerNodeName.ReuseSectionWithWeekDay) {\n      const nameNode = expr.getChild(PlannerNodeName.ReuseSection)?.getChild(PlannerNodeName.ExerciseName);\n      if (nameNode == null) {\n        assert(PlannerNodeName.ExerciseName);\n      }\n      const name = this.getValue(nameNode);\n      const { week, day } = this.getReuseWeekDay(expr.getChild(PlannerNodeName.WeekDay));\n      return { type: \"reuse\", data: { fullName: name, week, day, source: \"overall\" } };\n    } else {\n      assert(PlannerNodeName.ReuseSectionWithWeekDay);\n    }\n  }\n\n  private evaluateSection(\n    expr: SyntaxNode,\n    exerciseType?: IExerciseType\n  ):\n    | { type: \"sets\"; data: IPlannerProgramExerciseSet[]; isCurrent: boolean }\n    | { type: \"progress\"; data: IProgramExerciseProgress }\n    | { type: \"update\"; data: IProgramExerciseUpdate }\n    | { type: \"id\"; data: number[] }\n    | { type: \"reuse\"; data: IPlannerProgramReuse }\n    | { type: \"warmup\"; data: IPlannerProgramExerciseWarmupSet[] }\n    | { type: \"superset\"; data: IPlannerProgramExerciseSuperset }\n    | { type: \"used\"; data: \"\" } {\n    if (expr.type.name === PlannerNodeName.ExerciseSection) {\n      const reuseNode = expr.getChild(PlannerNodeName.ReuseSectionWithWeekDay);\n      if (reuseNode != null) {\n        return this.evaluateReuseNode(reuseNode);\n      }\n      const setsNode = expr.getChild(PlannerNodeName.ExerciseSets);\n      if (setsNode != null) {\n        const sets = setsNode.getChildren(PlannerNodeName.ExerciseSet);\n        const isCurrent = setsNode.getChild(PlannerNodeName.CurrentVariation) != null;\n        if (sets.length > 0) {\n          return { type: \"sets\", data: sets.map((set) => this.evaluateSet(set)), isCurrent };\n        }\n      }\n      const superset = expr.getChild(PlannerNodeName.Superset);\n      if (superset != null) {\n        return this.evaluateSuperset(superset);\n      }\n      const property = expr.getChild(PlannerNodeName.ExerciseProperty);\n      if (property != null) {\n        return this.evaluateProperty(property, exerciseType);\n      } else {\n        assert(PlannerNodeName.ExerciseProperty);\n      }\n    } else {\n      assert(PlannerNodeName.ExerciseSection);\n    }\n  }\n\n  public static extractNameParts = memoize(\n    (str: string, exercises: IAllCustomExercises): { name: string; label?: string; equipment?: string } => {\n      let [label, ...nameEquipmentItems] = str.split(\":\");\n      if (nameEquipmentItems.length === 0) {\n        nameEquipmentItems = [label];\n        label = \"\";\n      } else {\n        label = label.trim();\n      }\n      const nameEquipment = nameEquipmentItems.join(\":\").trim();\n      const matchingExercise = Exercise_findByNameAndEquipment(nameEquipment, exercises);\n      if (matchingExercise) {\n        return { name: matchingExercise.name, label: label ? label : undefined, equipment: matchingExercise.equipment };\n      }\n      return { name: nameEquipment, label: label ? label : undefined };\n    },\n    { maxSize: 1000 }\n  );\n\n  private addDescription(value: string): void {\n    value = value.replace(/^\\/\\//, \"\");\n    if (this.latestDescriptions.length === 0) {\n      this.latestDescriptions.push([]);\n    }\n    this.latestDescriptions[this.latestDescriptions.length - 1].push(value);\n  }\n\n  private getOrder(expr: SyntaxNode): number {\n    if (expr.type.name === PlannerNodeName.ExerciseExpression) {\n      const repeatNode = expr.getChild(PlannerNodeName.Repeat);\n      if (repeatNode == null) {\n        return 0;\n      }\n      const children = getChildren(repeatNode);\n      for (const childNode of children) {\n        if (childNode.type.name === PlannerNodeName.Rep) {\n          return parseInt(this.getValue(childNode), 10);\n        }\n      }\n      return 0;\n    } else {\n      assert(PlannerNodeName.ExerciseExpression);\n    }\n  }\n\n  private getRepeat(expr: SyntaxNode): number[] {\n    if (expr.type.name === PlannerNodeName.ExerciseExpression) {\n      const repeatNode = expr.getChild(PlannerNodeName.Repeat);\n      if (repeatNode == null) {\n        return [];\n      }\n      const result: Set<number> = new Set();\n      const children = getChildren(repeatNode);\n      for (const childNode of children) {\n        if (childNode.type.name === PlannerNodeName.RepRange) {\n          const [from, to] = getChildren(childNode).map((n) => parseInt(this.getValue(n), 10));\n          for (let i = from; i <= to; i += 1) {\n            result.add(i);\n          }\n          break;\n        }\n      }\n      return Array.from(result).sort((a, b) => a - b);\n    } else {\n      assert(PlannerNodeName.ExerciseExpression);\n    }\n  }\n\n  private getRepeatRanges(numbers: number[]): string[] {\n    // Check if the input array is empty\n    if (numbers.length === 0) {\n      return [];\n    }\n\n    const ranges: string[] = [];\n    let rangeStart = numbers[0];\n    let rangeEnd = numbers[0];\n\n    for (let i = 1; i < numbers.length; i++) {\n      if (numbers[i] === rangeEnd + 1) {\n        // If the current number is consecutive, extend the current range\n        rangeEnd = numbers[i];\n      } else {\n        // If not consecutive, add the current range to results and start a new range\n        ranges.push(`${rangeStart}-${rangeEnd}`);\n        rangeStart = numbers[i];\n        rangeEnd = numbers[i];\n      }\n    }\n\n    // Add the last range to results\n    ranges.push(`${rangeStart}-${rangeEnd}`);\n\n    return ranges;\n  }\n\n  private getIsNotUsed(expr: SyntaxNode): boolean {\n    if (expr.type.name === PlannerNodeName.ExerciseExpression) {\n      const sections = expr.getChildren(PlannerNodeName.ExerciseSection);\n      for (const section of sections) {\n        const properties = section.getChildren(PlannerNodeName.ExerciseProperty);\n        for (const property of properties) {\n          const nameNode = property.getChild(PlannerNodeName.ExercisePropertyName);\n          const name = nameNode ? this.getValueTrim(nameNode) : undefined;\n          const valueNode = property.getChild(PlannerNodeName.None);\n          if (name === \"used\" && valueNode != null) {\n            return true;\n          }\n        }\n      }\n      return false;\n    } else {\n      assert(PlannerNodeName.ExerciseSection);\n    }\n  }\n\n  private evaluateExercise(expr: SyntaxNode): void {\n    if (expr.type.name === PlannerNodeName.EmptyExpression || expr.type.name === PlannerNodeName.TripleLineComment) {\n      if (this.latestDescriptions.length > 0) {\n        this.latestDescriptions.push([]);\n      }\n      return;\n    } else if (expr.type.name === PlannerNodeName.Week) {\n      if (this.mode === \"perday\") {\n        this.error(\n          `You cannot specify weeks in the per-day exercise lists. Switch to the full program mode for that.`,\n          expr,\n          { type: \"weeksNotAllowedInDayMode\" }\n        );\n      }\n      const weekName = this.getValueTrim(expr).replace(/^#+/, \"\").trim();\n      const [line] = this.getLineAndOffset(expr);\n      this.weeks.push({ name: weekName, line, days: [] });\n      this.dayData = { day: this.dayData.day, week: this.weeks.length + 1, dayInWeek: 0 };\n    } else if (expr.type.name === PlannerNodeName.Day) {\n      if (this.mode === \"perday\") {\n        this.error(\n          `You cannot specify days in the per-day exercise lists. Switch to the full program mode for that.`,\n          expr,\n          { type: \"daysNotAllowedInDayMode\" }\n        );\n      }\n      if (this.weeks.length === 0) {\n        this.error(`You need to specify a week before a day`, expr, { type: \"dayWithoutWeek\" });\n      }\n      const dayName = this.getValueTrim(expr).replace(/^#+/, \"\").trim();\n      const [line] = this.getLineAndOffset(expr);\n      this.weeks[this.weeks.length - 1].days.push({ name: dayName, line, exercises: [] });\n      this.dayData = {\n        day: this.dayData.day + 1,\n        week: this.dayData.week,\n        dayInWeek: (this.dayData.dayInWeek || 0) + 1,\n      };\n      this.exerciseIndex = 0;\n    } else if (expr.type.name === PlannerNodeName.LineComment) {\n      const value = this.getValueTrim(expr).trim();\n      this.addDescription(value);\n      return undefined;\n    } else if (expr.type.name === PlannerNodeName.ExerciseExpression) {\n      if (this.mode === \"full\" && (this.weeks.length === 0 || this.weeks[this.weeks.length - 1].days.length === 0)) {\n        this.error(`You should first define a week and a day before listing exercises.`, expr, {\n          type: \"exerciseWithoutDay\",\n        });\n      } else if (this.weeks.length === 0) {\n        this.weeks.push({ name: \"Week 1\", line: 1, days: [{ name: \"Day 1\", line: 1, exercises: [] }] });\n      }\n      const variationsNode = expr.getChild(PlannerNodeName.ExerciseVariations);\n      if (variationsNode == null) {\n        assert(PlannerNodeName.ExerciseVariations);\n      }\n      const nameNode = variationsNode;\n\n      const fullName = this.getValue(variationsNode);\n      const variationNodes = variationsNode.getChildren(PlannerNodeName.ExerciseVariation);\n      const exerciseVariations: IPlannerProgramExerciseVariation[] = [];\n      let label: string | undefined;\n      for (let i = 0; i < variationNodes.length; i += 1) {\n        const variationNode = variationNodes[i];\n        const isCurrent = variationNode.getChild(PlannerNodeName.CurrentVariation) != null;\n        const variationNameNode = variationNode.getChild(PlannerNodeName.ExerciseName);\n        if (variationNameNode == null) {\n          assert(PlannerNodeName.ExerciseName);\n        }\n        const variationFullName = this.getValue(variationNameNode);\n        const parts = PlannerExerciseEvaluator.extractNameParts(variationFullName, this.settings.exercises);\n        if (i === 0) {\n          label = parts.label;\n        }\n        const variationShortName = PlannerProgramExercise_shortNameFromFullName(variationFullName, this.settings);\n        const variationExerciseType = Exercise_findByNameAndEquipment(variationShortName, this.settings.exercises);\n        exerciseVariations.push({\n          exerciseType: variationExerciseType,\n          name: parts.name,\n          isCurrent,\n        });\n      }\n      const currentVariationIndex = exerciseVariations.findIndex((v) => v.isCurrent);\n      const activeVariationIndex = currentVariationIndex === -1 ? 0 : currentVariationIndex;\n      const activeVariation = exerciseVariations[activeVariationIndex];\n      const name = activeVariation?.name ?? \"\";\n      const exercise = activeVariation?.exerciseType;\n      const equipment = exercise?.equipment;\n      const key = PlannerKey_fromExerciseVariations(exerciseVariations, label);\n      const shortName = Exercise_buildName(name, this.settings, undefined, equipment);\n      let notused = this.getIsNotUsed(expr);\n      const sectionNodes = expr.getChildren(PlannerNodeName.ExerciseSection);\n      const setVariations: IPlannerProgramExerciseSetVariation[] = [];\n      const allSets: IPlannerProgramExerciseSet[] = [];\n      let allWarmupSets: IPlannerProgramExerciseWarmupSet[] | undefined;\n      let reuse: IPlannerProgramReuse | undefined;\n      const repeat = this.getRepeat(expr);\n      const order = this.getOrder(expr);\n      const text = this.getValueTrim(expr).trim();\n      let tags: number[] = [];\n      let progress: IProgramExerciseProgress | undefined;\n      let update: IProgramExerciseUpdate | undefined;\n      let superset: IPlannerProgramExerciseSuperset | undefined;\n      for (const sectionNode of sectionNodes) {\n        const section = this.evaluateSection(sectionNode, exercise ? { id: exercise.id, equipment } : undefined);\n        if (section.type === \"sets\") {\n          allSets.push(...section.data);\n          if (section.data.some((set) => set.repRange != null)) {\n            setVariations.push({ sets: section.data, isCurrent: section.isCurrent });\n          }\n        } else if (section.type === \"warmup\") {\n          allWarmupSets = allWarmupSets || [];\n          allWarmupSets.push(...section.data);\n        } else if (section.type === \"progress\") {\n          progress = section.data;\n        } else if (section.type === \"update\") {\n          update = section.data;\n        } else if (section.type === \"reuse\") {\n          reuse = section.data;\n        } else if (section.type === \"id\") {\n          tags = tags.concat(section.data);\n        } else if (section.type === \"superset\") {\n          superset = section.data;\n        } else if (section.type === \"used\") {\n          notused = true;\n        } else {\n          throw new Error(`Unexpected section type`);\n        }\n      }\n      const rpe = allSets.find((set) => set.repRange == null && set.rpe != null)?.rpe;\n      const timer = allSets.find((set) => set.repRange == null && set.timer != null)?.timer;\n      const setTimer = allSets.find((set) => set.repRange == null && set.setTimer != null)?.setTimer;\n      const isOverflowSetTimer = allSets.find(\n        (set) => set.repRange == null && set.isOverflowSetTimer != null\n      )?.isOverflowSetTimer;\n      const auto = allSets.find((set) => set.repRange == null && set.auto != null)?.auto;\n      const percentage = allSets.find((set) => set.repRange == null && set.percentage != null)?.percentage;\n      const weight = allSets.find((set) => set.repRange == null && set.weight != null)?.weight;\n      const logRpe = allSets.find((set) => set.repRange == null && set.logRpe != null)?.logRpe;\n      const askWeight = allSets.find((set) => set.repRange == null && set.askWeight != null)?.askWeight;\n      const [line] = this.getLineAndOffset(expr);\n      const rawDescriptions: string[] = this.latestDescriptions.map((d) => d.join(\"\\n\"));\n      const currentDescriptionIndex = rawDescriptions.findIndex((d) => /^\\s*!/.test(d));\n      let descriptions = rawDescriptions.map((d, i) => ({\n        value: d.replace(/^\\s*!/, \"\"),\n        isCurrent: i === currentDescriptionIndex,\n      }));\n      if (descriptions.length > 1) {\n        descriptions = descriptions.filter((d) => d.value);\n      }\n      descriptions = descriptions.map((d) => ({ ...d, value: StringUtils_unindent(d.value) }));\n      this.latestDescriptions = [];\n      const fullNamePoint = this.getPoint(nameNode);\n\n      const reuseSetsNode = expr\n        .getChildren(PlannerNodeName.ExerciseSection)\n        .map((n) => n.getChild(PlannerNodeName.ReuseSectionWithWeekDay))\n        .filter((n) => n)[0];\n      const reuseSetPoint = reuseSetsNode ? this.getPoint(reuseSetsNode) : undefined;\n\n      const progressNode = expr\n        .getChildren(PlannerNodeName.ExerciseSection)\n        .map((n) => {\n          const node = n.getChild(PlannerNodeName.ExerciseProperty)?.getChild(PlannerNodeName.ExercisePropertyName);\n          return node != null && this.getValueTrim(node) === \"progress\" ? node : undefined;\n        })\n        .flat(2)\n        .filter((n) => n)[0];\n      const progressPoint = progressNode ? this.getPoint(progressNode) : undefined;\n\n      const updateNode = expr\n        .getChildren(PlannerNodeName.ExerciseSection)\n        .map((n) => {\n          const node = n.getChild(PlannerNodeName.ExerciseProperty)?.getChild(PlannerNodeName.ExercisePropertyName);\n          return node != null && this.getValueTrim(node) === \"update\" ? node : undefined;\n        })\n        .flat(2)\n        .filter((n) => n)[0];\n      const updatePoint = updateNode ? this.getPoint(updateNode) : undefined;\n\n      const idNode = expr\n        .getChildren(PlannerNodeName.ExerciseSection)\n        .map((n) => {\n          const node = n.getChild(PlannerNodeName.ExerciseProperty)?.getChild(PlannerNodeName.ExercisePropertyName);\n          return node != null && this.getValueTrim(node) === \"id\" ? node : undefined;\n        })\n        .flat(2)\n        .filter((n) => n)[0];\n      const idPoint = idNode ? this.getPoint(idNode) : undefined;\n\n      // On the property name rather than on WarmupExerciseSets, so that `warmup: none` - which\n      // parses to a None node and no sets - still records where it was written.\n      const warmupNode = expr\n        .getChildren(PlannerNodeName.ExerciseSection)\n        .map((n) => {\n          const node = n.getChild(PlannerNodeName.ExerciseProperty)?.getChild(PlannerNodeName.ExercisePropertyName);\n          return node != null && this.getValueTrim(node) === \"warmup\" ? node : undefined;\n        })\n        .flat(2)\n        .filter((n) => n)[0];\n      const warmupPoint = warmupNode ? this.getPoint(warmupNode) : undefined;\n\n      const supersetNode = expr\n        .getChildren(PlannerNodeName.ExerciseSection)\n        .map((n) => n.getChild(PlannerNodeName.Superset))\n        .filter((n) => n)[0];\n      const supersetPoint = supersetNode ? this.getPoint(supersetNode) : undefined;\n\n      const plannerExercise: IPlannerProgramExercise = {\n        id: UidFactory_generateUid(8),\n        key,\n        fullName,\n        shortName,\n        exerciseType: exercise,\n        label,\n        dayData: this.dayData,\n        text,\n        repeat,\n        repeating: [...repeat],\n        order,\n        superset,\n        name,\n        equipment,\n        exerciseIndex: this.exerciseIndex,\n        line,\n        tags,\n        notused: notused,\n        evaluatedSetVariations: [],\n        setVariations,\n        exerciseVariations,\n        descriptions: {\n          values: descriptions,\n        },\n        warmupSets: allWarmupSets,\n        reuse,\n        progress,\n        update,\n        globals: {\n          rpe,\n          logRpe,\n          askWeight,\n          timer,\n          setTimer,\n          isOverflowSetTimer,\n          auto,\n          percentage,\n          weight,\n        },\n        points: {\n          fullName: fullNamePoint,\n          supersetPoint,\n          reuseSetPoint,\n          progressPoint,\n          idPoint,\n          updatePoint,\n          warmupPoint,\n        },\n      };\n      this.weeks[this.weeks.length - 1].days[this.weeks[this.weeks.length - 1].days.length - 1].exercises.push(\n        plannerExercise\n      );\n      if (!notused) {\n        this.exerciseIndex += 1;\n      }\n    } else {\n      this.error(`Unexpected node type ${expr.node.type.name}`, expr, {\n        type: \"unexpectedNode\",\n        data: { node: expr.node.type.name },\n      });\n    }\n  }\n\n  private evaluateProgram(expr: SyntaxNode): IPlannerExerciseEvaluatorWeek[] {\n    if (expr.type.name === PlannerNodeName.Program) {\n      this.weeks = [];\n      this.exerciseIndex = 0;\n      for (const child of CollectionUtils_compact(getChildren(expr))) {\n        this.evaluateExercise(child);\n      }\n      return this.weeks;\n    } else {\n      this.error(`Unexpected node type ${expr.node.type.name}`, expr, {\n        type: \"unexpectedNode\",\n        data: { node: expr.node.type.name },\n      });\n    }\n  }\n\n  public evaluate(programNode: SyntaxNode): IPlannerEvalFullResult {\n    try {\n      this.parse(programNode);\n      const program = this.evaluateProgram(programNode);\n      return { data: program, success: true };\n    } catch (e) {\n      if (e instanceof PlannerSyntaxError) {\n        return { error: e, success: false };\n      } else {\n        throw e;\n      }\n    }\n  }\n\n  public hasWeightInUnit(programNode: SyntaxNode, unit: IUnit): boolean {\n    const cursor = programNode.cursor();\n    do {\n      const weight = this.getWeight(cursor.node);\n      if (weight != null) {\n        if (weight.unit === unit) {\n          return true;\n        }\n      }\n    } while (cursor.next());\n    return false;\n  }\n\n  public switchWeightsToUnit(programNode: SyntaxNode, settings: ISettings): string {\n    const cursor = programNode.cursor();\n    let script = this.script;\n    let shift = 0;\n    do {\n      if (cursor.node.type.name === PlannerNodeName.Weight) {\n        const weight = this.getWeight(cursor.node);\n        if (weight != null) {\n          if (weight.unit !== settings.units) {\n            const from = cursor.node.from;\n            const to = cursor.node.to;\n            const oldWeightStr = Weight_print(weight);\n            const newWeightStr = Weight_print(Weight_smartConvert(weight, settings.units));\n            script = script.substring(0, from + shift) + newWeightStr + script.substring(to + shift);\n            shift = shift + newWeightStr.length - oldWeightStr.length;\n          }\n        }\n      } else if (cursor.node.type.name === PlannerNodeName.Liftoscript) {\n        const oldLiftoscript = this.getValueTrim(cursor.node);\n        const liftoscriptEvaluator = new ScriptRunner(\n          oldLiftoscript,\n          {},\n          {},\n          Progress_createEmptyScriptBindings({ day: 1, week: 1, dayInWeek: 1 }, settings),\n          Progress_createScriptFunctions(settings),\n          settings.units,\n          { unit: settings.units, prints: [] },\n          \"planner\"\n        );\n        const newLiftoscript = liftoscriptEvaluator.switchWeightsToUnit(settings.units);\n        script =\n          script.substring(0, cursor.node.from + shift) + newLiftoscript + script.substring(cursor.node.to + shift);\n        shift = shift + newLiftoscript.length - oldLiftoscript.length;\n      }\n    } while (cursor.next());\n    return script;\n  }\n\n  public changeExerciseName(node: SyntaxNode, from: string, to: string): string {\n    const cursor = node.cursor();\n    let script = this.script;\n    let shift = 0;\n    do {\n      if (cursor.node.type.name === PlannerNodeName.ExerciseName) {\n        const name = this.getValue(cursor.node);\n        if (name === from) {\n          const fromNode = cursor.node.from;\n          const toNode = cursor.node.to;\n          script = script.substring(0, fromNode + shift) + to + script.substring(toNode + shift);\n          shift = shift + to.length - name.length;\n        }\n      }\n    } while (cursor.next());\n    return script;\n  }\n\n  public static changeWeightsToCompletedWeights(oldScript: string): string {\n    const node = plannerExerciseParser.parse(oldScript);\n    const cursor = node.cursor();\n    let script = oldScript;\n    let shift = 0;\n    do {\n      if (cursor.node.type.name === PlannerNodeName.Liftoscript) {\n        const value = LiftoscriptEvaluator.getValueRaw(oldScript, cursor.node);\n        const from = cursor.node.from;\n        const to = cursor.node.to;\n        const newValue = LiftoscriptEvaluator.changeWeightsToCompleteWeights(value);\n        script = script.substring(0, from + shift) + newValue + script.substring(to + shift);\n        shift = shift + newValue.length - value.length;\n      }\n    } while (cursor.next());\n    return script;\n  }\n\n  public topLineMap(programNode: SyntaxNode): IPlannerTopLineItem[] {\n    if (programNode.type.name !== PlannerNodeName.Program) {\n      this.error(`Unexpected node type ${programNode.type.name} - should be Program`, programNode, {\n        type: \"unexpectedNode\",\n        data: { node: programNode.type.name },\n      });\n    }\n    const children = getChildren(programNode);\n    const result: IPlannerTopLineItem[] = [];\n    let lastDescriptions: string[][] = [];\n    let ongoingDescriptions = false;\n    let exerciseIndex = 0;\n    for (const child of children) {\n      if (child.type.name === PlannerNodeName.ExerciseExpression) {\n        ongoingDescriptions = false;\n        const nameNode = child.getChild(PlannerNodeName.ExerciseVariations)!;\n        const fullName = this.getValue(nameNode);\n        const key = PlannerKey_fromFullName(fullName, this.settings.exercises);\n        const repeat = this.getRepeat(child);\n        const repeatRanges = this.getRepeatRanges(repeat);\n        const order = this.getOrder(child);\n        const isUsed = !this.getIsNotUsed(child);\n        const sectionsNode = child.getChildren(PlannerNodeName.ExerciseSection);\n        const sections = sectionsNode.map((section) => this.getValueTrim(section).trim()).join(\" / \");\n        const sectionsToReuse = sectionsNode\n          .filter((section) => {\n            const properties = section.getChild(PlannerNodeName.ExerciseProperty);\n            if (properties == null) {\n              return true;\n            }\n            const propertyNameNode = properties.getChild(PlannerNodeName.ExercisePropertyName);\n            const propertyName = propertyNameNode ? this.getValue(propertyNameNode) : undefined;\n            if (propertyName === \"progress\") {\n              const none = properties.getChild(PlannerNodeName.None);\n              return none != null;\n            }\n            return false;\n          })\n          .map((section) => this.getValueTrim(section).trim())\n          .join(\" / \");\n        result.push({\n          type: \"exercise\",\n          fullName,\n          order,\n          notused: !isUsed,\n          value: key,\n          exerciseIndex,\n          repeat,\n          repeatRanges,\n          descriptions: lastDescriptions.map((d) => d.join(\"\\n\")),\n          sections,\n          sectionsToReuse,\n        });\n        if (isUsed) {\n          exerciseIndex += 1;\n        }\n        lastDescriptions = [];\n      } else if (child.type.name === PlannerNodeName.LineComment) {\n        ongoingDescriptions = true;\n        const description = this.getValueTrim(child).trim();\n        if (lastDescriptions.length === 0) {\n          lastDescriptions.push([]);\n        }\n        lastDescriptions[lastDescriptions.length - 1].push(description);\n        result.push({ type: \"description\", value: description });\n      } else if (child.type.name === PlannerNodeName.TripleLineComment) {\n        result.push({ type: \"comment\", value: this.getValueTrim(child).trim() });\n      } else if (child.type.name === PlannerNodeName.EmptyExpression) {\n        result.push({ type: \"empty\", value: \"\" });\n        if (ongoingDescriptions) {\n          lastDescriptions.push([]);\n        }\n      } else {\n        this.error(\n          `Unexpected node type ${child.type.name}, should be only exercise, comment, description or empty line`,\n          child,\n          { type: \"unexpectedNode\", data: { node: child.type.name } }\n        );\n      }\n    }\n    return result;\n  }\n}\n","import { SyntaxNode } from \"@lezer/common\";\nimport { CollectionUtils_compact } from \"../../utils/collection\";\nimport { PlannerNodeName } from \"./plannerExerciseStyles\";\nimport { PlannerExerciseEvaluator, PlannerSyntaxError } from \"./plannerExerciseEvaluator\";\nimport { IPlannerErrorDetails } from \"../../syntaxErrorTypes\";\n\nfunction getChildren(node: SyntaxNode): SyntaxNode[] {\n  const cur = node.cursor();\n  const result: SyntaxNode[] = [];\n  if (!cur.firstChild()) {\n    return result;\n  }\n  do {\n    result.push(cur.node);\n  } while (cur.nextSibling());\n  return result;\n}\n\nexport interface IPlannerExerciseEvaluatorTextWeek {\n  name: string;\n  description?: string;\n  days: IPlannerExerciseEvaluatorTextDay[];\n}\n\nexport interface IPlannerExerciseEvaluatorTextDay {\n  name: string;\n  description?: string;\n  exercises: string[];\n}\n\ntype IPlannerNonExerciseFullTextLine =\n  | { type: \"comment\"; line: string }\n  | { type: \"triplelinecomment\"; line: string }\n  | { type: \"empty\"; line: string };\n\nfunction fullTextLineToWeekdayDescription(line: IPlannerNonExerciseFullTextLine): string {\n  switch (line.type) {\n    case \"comment\":\n      return line.line.replace(/^\\s*\\/\\/\\s*/, \"\").trim();\n    case \"triplelinecomment\":\n      return line.line.replace(/^\\s*\\/\\/\\/\\s*/, \"\").trim();\n    case \"empty\":\n      return \"\";\n  }\n}\n\nexport class PlannerExerciseEvaluatorText {\n  private readonly script: string;\n  private weeks: IPlannerExerciseEvaluatorTextWeek[] = [];\n  private ongoingLines: IPlannerNonExerciseFullTextLine[] = [];\n\n  private readonly isStrict: boolean;\n\n  constructor(script: string, options: { isStrict?: boolean } = {}) {\n    this.script = script;\n    this.isStrict = options.isStrict ?? false;\n  }\n\n  private getValue(node: SyntaxNode): string {\n    return this.script.slice(node.from, node.to);\n  }\n\n  private getWeekDayOngoingLines(): {\n    linesToPreviousExercise: IPlannerNonExerciseFullTextLine[];\n    nextLines: IPlannerNonExerciseFullTextLine[];\n  } {\n    const ongoingLines = [...this.ongoingLines];\n    let anyCommentStarted = false;\n    let commentStarted = false;\n    const linesToPreviousExercise: IPlannerNonExerciseFullTextLine[] = [];\n    const nextLines: IPlannerNonExerciseFullTextLine[] = [];\n    for (let i = 0; i < ongoingLines.length; i++) {\n      const line = ongoingLines[i];\n      if (!anyCommentStarted && line?.type === \"empty\") {\n        continue;\n      }\n      if (line?.type === \"comment\" || line?.type === \"triplelinecomment\") {\n        anyCommentStarted = true;\n      }\n      if (line?.type === \"comment\") {\n        commentStarted = true;\n      }\n      if (anyCommentStarted && !commentStarted) {\n        linesToPreviousExercise.push(line);\n      }\n      if (commentStarted && line?.type === \"comment\") {\n        nextLines.push(line);\n      }\n    }\n    for (let i = nextLines.length - 1; i >= 0; i--) {\n      const line = nextLines[i];\n      if (line.type === \"empty\") {\n        nextLines.pop();\n      } else {\n        break;\n      }\n    }\n    for (let i = linesToPreviousExercise.length - 1; i >= 0; i--) {\n      const line = linesToPreviousExercise[i];\n      if (line.type === \"empty\") {\n        linesToPreviousExercise.pop();\n      } else {\n        break;\n      }\n    }\n    return { linesToPreviousExercise, nextLines };\n  }\n\n  private getWeekDayDescriptionAndFillLastDay(): string | undefined {\n    const { linesToPreviousExercise, nextLines } = this.getWeekDayOngoingLines();\n    if (linesToPreviousExercise.length > 0) {\n      const lastDay = this.getLastDay();\n      if (lastDay) {\n        lastDay.exercises.push(...linesToPreviousExercise.map((line) => line.line));\n      }\n    }\n    const description =\n      nextLines.length > 0 ? nextLines.map(fullTextLineToWeekdayDescription).join(\"\\n\").trim() : undefined;\n    return description;\n  }\n\n  private error(message: string, node: SyntaxNode, details: IPlannerErrorDetails): never {\n    const [line, offset] = PlannerExerciseEvaluator.getLineAndOffset(this.script, node);\n    throw PlannerSyntaxError.fromPoint(undefined, message, { line, offset, from: node.from, to: node.to }, details);\n  }\n\n  private getLastDay(): IPlannerExerciseEvaluatorTextDay | undefined {\n    const lastWeek = this.weeks[this.weeks.length - 1];\n    return lastWeek?.days[lastWeek.days.length - 1];\n  }\n\n  private evaluateLine(expr: SyntaxNode): void {\n    if (expr.type.name === PlannerNodeName.Week) {\n      const weekName = this.getValue(expr).replace(/^#+/, \"\").trim();\n      const description = this.getWeekDayDescriptionAndFillLastDay();\n      this.weeks.push({ name: weekName, description, days: [] });\n      this.ongoingLines = [];\n    } else if (expr.type.name === PlannerNodeName.Day) {\n      if (this.weeks.length === 0) {\n        this.error(`You need to specify a week before a day`, expr, { type: \"dayWithoutWeek\" });\n      }\n      const dayName = this.getValue(expr).replace(/^#+/, \"\").trim();\n      const description = this.getWeekDayDescriptionAndFillLastDay();\n      this.weeks[this.weeks.length - 1].days.push({ name: dayName, exercises: [], description });\n      this.ongoingLines = [];\n    } else if (expr.type.name === PlannerNodeName.EmptyExpression) {\n      this.ongoingLines.push({ type: \"empty\", line: this.getValue(expr) });\n    } else if (expr.type.name === PlannerNodeName.LineComment) {\n      this.ongoingLines.push({ type: \"comment\", line: this.getValue(expr) });\n    } else if (expr.type.name === PlannerNodeName.TripleLineComment) {\n      this.ongoingLines.push({ type: \"triplelinecomment\", line: this.getValue(expr) });\n    } else if (expr.type.name === PlannerNodeName.ExerciseExpression) {\n      const lastDay = this.getLastDay();\n      if (lastDay == null) {\n        if (!this.isStrict) {\n          return;\n        }\n        this.error(`You should first define a week and a day before listing exercises.`, expr, {\n          type: \"exerciseWithoutDay\",\n        });\n      }\n      for (const line of this.ongoingLines) {\n        lastDay.exercises.push(line.line);\n      }\n      lastDay.exercises.push(this.getValue(expr));\n      this.ongoingLines = [];\n    }\n  }\n\n  public evaluate(expr: SyntaxNode): IPlannerExerciseEvaluatorTextWeek[] {\n    if (expr.type.name === PlannerNodeName.Program) {\n      this.ongoingLines = [];\n      this.weeks = [];\n      for (const child of CollectionUtils_compact(getChildren(expr))) {\n        this.evaluateLine(child);\n      }\n      return this.weeks;\n    } else {\n      throw new Error(`Unexpected node type ${expr.type.name}`);\n    }\n  }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nimport { LRParser } from \"@lezer/lr\";\nconst spec_Keyword: any = { __proto__: null, none: 168, auto: 172 };\nexport const parser = LRParser.deserialize({\n  version: 14,\n  states:\n    \"3nQVQPOOOOQO'#Ce'#CeOOQO'#Dg'#DgOnQQO'#CfOOQO'#Cd'#CdO!SQPO'#CdO!XQQO'#CcO!gQQO'#CbOOQO'#De'#DeOOQO'#Ds'#DsOOQO'#Df'#DfQVQPOOOOQO-E7e-E7eOOQO,59O,59OO!rQPO'#DhO!zQQO,58}O#YQSO'#ChO#yQSO'#DjO$aQQO,58|OOQO,58|,58|O$aQQO,58|OOQO-E7d-E7dOOQO,5:S,5:SOOQO-E7f-E7fOOQO'#Ci'#CiO$iQSO,59SO$lQSO,59SO$tQWO'#CiOOQO'#Co'#CoO%PQSO'#CzO!SQPO'#DOO%[QSO'#CnOOQO'#DX'#DXO%aQWO'#DYO%iQSO'#DZO&dQSO'#D[O!SQPO'#D]OOQO'#Dn'#DnO'_QSO'#DUO'oQSO'#DTO#_QSO'#DTO'}QQO'#D_O(]QSO'#DcO(bQQO'#CmOOQO,5:U,5:UOOQO-E7h-E7hOOQO1G.h1G.hO(mQQO1G.hO#YQSO,59VO#YQSO'#DiO(uQSO1G.nOOQO1G.n1G.nOOQO,59r,59rOOQO'#Cv'#CvO(}QSO,59fOOQO,59f,59fOOQO,59j,59jO){QSO,59YO#YQSO,59tO*^QWO,59tOOQO,59u,59uOOQO,59v,59vO*cQPO,59wOOQO-E7l-E7lO#_QSO'#DoO*kQSO,59oO*kQSO,59oO*yQWO'#D`OOQO,59y,59yO!SQPO,59}O+RQPO,59XOOQO7+$S7+$SOOQO1G.q1G.qO+WQSO,5:TOOQO,5:T,5:TOOQO-E7g-E7gOOQO7+$Y7+$YOOQO1G/Q1G/QOOQO'#Cr'#CrO+cQQO'#CqO+wQWO'#DROOQO'#Dl'#DlO,cQSO'#DQO,zQSO'#DPOOQO'#DS'#DSOOQO1G.t1G.tO.TQSO1G/`O-YQSO1G/`O#YQSO1G/`OOQO1G/c1G/cOOQO,5:Z,5:ZOOQO-E7m-E7mO.[QSO1G/ZOOQO'#Da'#DaO.jQSO,59zOOQO1G/i1G/iOOQO1G.s1G.sO.rQSO'#C}OOQO,59],59]O/cQSO,59]O#YQSO,59mOOQO-E7j-E7jO/mQSO'#DmO/xQSO,59kOOQO7+$z7+$zO1RQSO7+$zO0WQSO7+$zOOQO1G/f1G/fO*yQWO1G/fO1YQPO,59iO1_QSO'#CiO1jQSO'#CkOOQO'#Ct'#CtO1oQSO'#CtO1wQSO'#C{OOQO'#Cs'#CsO.wQSO'#DkO2PQSO1G.wO2XQQO1G.wO2PQSO1G.wOOQO1G/X1G/XOOQO,5:X,5:XOOQO-E7k-E7kOOQO<<Hf<<HfO2jQPO7+%QO2oQPO'#CfOOQO1G/T1G/TOOQO,59`,59`O2wQSO,59gO3]QSO,59gOOQO,5:V,5:VOOQO-E7i-E7iO3bQQO7+$cOOQO7+$c7+$cO3sQSO7+$cOOQO<<Hl<<HlOOQO1G/R1G/RO3{QSO1G/ROOQO<<G}<<G}O4aQQO<<G}OOQO7+$m7+$mOOQOAN=iAN=iO!SQPO'#DO\",\n  stateData:\n    \"5U~O!fOS~OQXORXOSXOTXOZQO!hPO!zWO~OZQO`YX!iYX!jYX!{YX!yYX~OZQO~O!i^O`VX!jVX!{VX~O`aO!j`O!{cO~OZQO!hPO~O!i^O`Va!jVa!{Va~O^hO~O^kOlrOmsOyuO!QuO!otO!pmO!xpO~OdlO!WzO!hPO!snO`!^X!{!^X~P#_O`aO!{!OO~O!k!QO!l!RO!m!TO~O!w!UOi]X!u]X~O^!VOi!XOk!VO~O!n!ZO~Oi!]O!u![O~Oi!^O^}X`}Xl}Xm}Xy}X!Q}X!l}X!o}X!p}X!x}X!y}X!{}X~Oi!_O^!OX`!OXl!OXm!OXy!OX!Q!OX!l!OX!o!OX!p!OX!x!OX!y!OX!{!OX~O`xX!lxX!yxX!{xX~P#_O!l!bO`wX!ywX!{wX~O!j!eO`!RX!y!RX!{!RX~O!n!gO~O!y!hO`aX!{aX~O`aO!{!iO~O!l!RO!m!nO~Oi!oO^na`nalnamnayna!Qna!lna!ona!pna!xna!yna!{na!qna~O^hOd!pOl!sOm!sO!v!vO~O!u!zO~OZQO!q!{O~O!l!bO`wa!ywa!{wa~O^#PO!U#PO~O!z#SO~O!k!QO!l!]a!m!]a~Op#UO!o#VO!r#TO`eX!yeX!{eX~O!u#WO^uX`uXluXmuX!luX!yuX!{uX~O^hOl!sOm!sO`tX!ltX!ytX!{tX~O!l#YO`sX!ysX!{sX~Oi#[O^|i`|il|im|iy|i!Q|i!l|i!o|i!p|i!x|i!y|i!{|i~O!k!QO~P-YO!l!bO`wi!ywi!{wi~O!m#_O!n#`O~O!s$SO~O^#bOd#fOi#eOk!VOl#gOm#gO!k#eO!pmO~O!l#hO!q#jO~P.wO^hOl!sOm!sO~O!l#YO`sa!ysa!{sa~Oi#oO^|q`|ql|qm|qy|q!Q|q!l|q!o|q!p|q!x|q!y|q!{|q~O!k!QO~P0WO!t#rO~O!k]X!ljX!qjX~O!k!QO~O^!VOk!VO~Oi#uO!n#tO~O!l#hO!q#xO~Op#yO!r#TO`ei!yei!{ei~O!m#{O~OZQO!tYX~O^!VOi#eOk!VOl#|Om#|O!k#eO~O!n#}O~Op$OO!r#TO`eq!yeq!{eq~O!l#hO!q$PO~O^!VOi#eOk!VOl$QOm$QO!k#eO~Op$RO!r#TO`ey!yey!{ey~Ol!Wd!y!j!m!QRQTSZmyk^m~\",\n  goto: \"(v!hPPPPPP!i!m!q!x#QP#a#dP$VP$g$j$mP$p$s$v$|P%WPPP%d$cP%n%z$p&Q&W$p$j&]P&f&f&f&f&f&fP$j&l&oP$jP!i&u&{'`'f'm'w(R(Y(`(hPPP(rTXOZTVOZSUOZRf^UTOZ^RxaUSOZ^Q]TS!Yn$SR#R!gRdVQi`Wqavx!bQ!j!QQ!k!RU!r!Z!t#YQ!x![Q#]!zS#c#V#hR#l#WQj`Q!l!RQ!y![Q#^!zT#g#V#hR|aR{aRoaR!w!ZR!q!ZQ#k#VR#v#hS#g#V#hQ#|#tR$Q#}Q!WmW#d#V#h#t#}R#s#eWuavx!bT#g#V#hQ#U!qQ#y#jQ$O#xR$R$PQyaR#a#TQ!u!ZR#m#YV!s!Z!t#YQwaQ!dxR!|!bXuavx!bR!fyQ#Q!eR#p#`QZOReZ[ROTZ^n!gU[R!`#qQ!`tR#q$SQ_URg_S!SijR!m!SQbVS}b!PR!PdQ#i#VS#w#i#zR#z#kS!t!Z#YR#X!tQ#Z!uR#n#ZUvax!bR!avQ!cwS!}!c#OR#O!dTYOZ\",\n  nodeNames:\n    \"⚠ Program LineComment TripleLineComment Week Day ExerciseExpression ExerciseVariations ExerciseVariation CurrentVariation ExerciseName NonSeparator Repeat Rep Int RepRange SectionSeparator ExerciseSection ExerciseProperty ExercisePropertyName Keyword FunctionExpression FunctionName FunctionArgument Number Plus PosNumber Float Weight Percentage Rpe KeyValue Liftoscript ReuseLiftoscript ReuseSection WarmupExerciseSets WarmupExerciseSet WarmupSetPart None ExerciseSets ExerciseSet SetTimer Timer Auto SetPart WeightWithPlus PercentageWithPlus SetLabel AskWeight ReuseSectionWithWeekDay WeekDay WeekOrDay Current Superset SupersetKeyword EmptyExpression\",\n  maxTerm: 89,\n  skippedNodes: [0],\n  repeatNodeCount: 10,\n  tokenData:\n    \"!)W~R|OX#{XY$|YZ%XZ]#{]^%`^p#{pq$|qr%jrs#{st%otx#{xy)qyz)vz{#{{|){|}2g}!O3d!O!P4g!P!Q8r!Q![<|![!]A}!]!a#{!a!bBz!b!cDx!c!}Eu!}#OGR#O#PGW#P#QHT#Q#R#{#R#SHY#S#T#{#T#gEu#g#hIh#h#lEu#l#m!&l#m#oEu#o#p!'z#p#q!(w#q#r!(|#r;'S#{;'S;=`$v<%l~#{~O#{~~!)RR$Q[ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{R$yP;=`<%l#{~%RQ!f~XY$|pq$|_%`O!zP!{^_%gP!zP!{^YZ%X~%oO!h~~%rZOY&eYZ'TZ]&e]^'Y^s&est(Qt;'S&e;'S;=`'z<%l~&e~O&e~~'T~&hXOY&eYZ'TZ]&e]^'Y^;'S&e;'S;=`'z<%l~&e~O&e~~'T~'YOS~~'_XS~OY&eYZ'TZ]&e]^'Y^;'S&e;'S;=`'z<%l~&e~O&e~~'T~'}P;=`<%l&e~(TXOY(QYZ(pZ](Q]^(w^;'S(Q;'S;=`)k<%l~(Q~O(Q~~(p~(wOT~S~~)OXT~S~OY(QYZ(pZ](Q]^(w^;'S(Q;'S;=`)k<%l~(Q~O(Q~~(p~)nP;=`<%l(Q~)vO!o~~){O!q~_*S^i[ZROX#{Z]#{^p#{rs#{tx#{z!O#{!O!P+O!Q![1V![!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{_+T]ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![+|![!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{_,RbZROX#{Z]#{^p#{rs#{tu#{uv-Zvx#{z!P#{!Q![+|![!}#{#O#P#{#Q#_#{#_#`.W#`#a0U#a#o#{#r;'S#{;'S;=`$v<%lO#{_-b[ZRm[OX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{_.]^ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#Z#{#Z#[/X#[#o#{#r;'S#{;'S;=`$v<%lO#{_/`[l[ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{_0Z^ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#U#{#U#V/X#V#o#{#r;'S#{;'S;=`$v<%lO#{_1[cZROX#{Z]#{^p#{rs#{tu#{uv-Zvx#{z!O#{!O!P+O!Q![1V![!}#{#O#P#{#Q#_#{#_#`.W#`#a0U#a#o#{#r;'S#{;'S;=`$v<%lO#{_2n[!l[ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{_3k^!kSZROX#{Z]#{^p#{rs#{tx#{z!O#{!O!P+O!Q![1V![!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{_4l^ZROX#{Z]#{^p#{rs#{tx#{z!O#{!O!P5h!Q![7c![!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{V5m]ZROX#{Z]#{^p#{rs#{tx#{z!O#{!O!P6f!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{V6m[!sSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{_7jbZRkSOX#{Z]#{^p#{rs#{tu#{uv-Zvx#{z!P#{!Q![7c![!}#{#O#P#{#Q#_#{#_#`.W#`#a0U#a#o#{#r;'S#{;'S;=`$v<%lO#{_8wP`^!P!Q8zP8}ZOY9pYZ:`Z]9p]^:e^!P9p!P!Q;]!Q;'S9p;'S;=`;V<%l~9p~O9p~~:`P9sXOY9pYZ:`Z]9p]^:e^;'S9p;'S;=`;V<%l~9p~O9p~~:`P:eOQPP:jXQPOY9pYZ:`Z]9p]^:e^;'S9p;'S;=`;V<%l~9p~O9p~~:`P;YP;=`<%l9pP;`XOY;]YZ;{Z];]]^<S^;'S;];'S;=`<v<%l~;]~O;]~~;{P<SORPQPP<ZXRPQPOY;]YZ;{Z];]]^<S^;'S;];'S;=`<v<%l~;]~O;]~~;{P<yP;=`<%l;]_=TeZR^[OX#{Z]#{^p#{rs#{tu#{uv-Zvx#{z!O#{!O!P>f!Q![<|![!}#{#O#P#{#Q#_#{#_#`.W#`#a0U#a#g#{#g#h?d#h#o#{#r;'S#{;'S;=`$v<%lO#{_>k]ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![7c![!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{V?i_ZROX#{Z]#{^p#{rs#{tx#{z{#{{|@h|!P#{!Q!}#{#O#P#{#Q#o#{#p#qAf#r;'S#{;'S;=`$v<%lO#{V@m]ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#p#qAf#r;'S#{;'S;=`$v<%lO#{SAiQ!Q![Ao!a!bAxSArQ!Q![Ao#g#hAxSA}OySVBU[!nSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{~CP^ZROX#{Z]#{^p#{rs#{tx#{z{#{{|C{|!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{~DS[!Q~ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{VEP[!pSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{VE|adSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#oEu#r;'S#{;'S;=`$v<%lO#{~GWO!j~~G_[!y~ZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q!}#{#O#P#{#Q#o#{#r;'S#{;'S;=`$v<%lO#{~HYO!m~_Hca!UWdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#oEu#r;'S#{;'S;=`$v<%lO#{_Iqc!wWdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#iEu#i#jJ|#j#oEu#r;'S#{;'S;=`$v<%lO#{VKTcdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#dEu#d#eL`#e#oEu#r;'S#{;'S;=`$v<%lO#{VLgcdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#XEu#X#YMr#Y#oEu#r;'S#{;'S;=`$v<%lO#{VMycdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#fEu#f#g! U#g#oEu#r;'S#{;'S;=`$v<%lO#{V! ]cdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#gEu#g#h!!h#h#oEu#r;'S#{;'S;=`$v<%lO#{V!!ocdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#XEu#X#Y!#z#Y#oEu#r;'S#{;'S;=`$v<%lO#{V!$RcdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#hEu#h#i!%^#i#oEu#r;'S#{;'S;=`$v<%lO#{V!%ga!WSdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#oEu#r;'S#{;'S;=`$v<%lO#{_!&ua!uWdSZROX#{Z]#{^p#{rs#{tx#{z!P#{!Q![Eu![!c#{!c!}Eu#O#P#{#Q#R#{#R#SEu#S#T#{#T#oEu#r;'S#{;'S;=`$v<%lO#{~!(PP!r~#r#s!(S~!(VTO#r!(S#r#s!(f#s;'S!(S;'S;=`!(q<%lO!(S~!(iP#q#r!(l~!(qOp~~!(tP;=`<%l!(S~!(|O!i~~!)RO!t~^!)WO!{^\",\n  tokenizers: [0, 1, 2, 3],\n  topRules: { Program: [0, 1] },\n  specialized: [{ term: 20, get: (value: any) => spec_Keyword[value] || -1 }],\n  tokenPrec: 908,\n});\n","import { tags as t } from \"@lezer/highlight\";\n\nexport enum PlannerNodeName {\n  Program = \"Program\",\n  LineComment = \"LineComment\",\n  TripleLineComment = \"TripleLineComment\",\n  Week = \"Week\",\n  Day = \"Day\",\n  ExerciseExpression = \"ExerciseExpression\",\n  ExerciseVariations = \"ExerciseVariations\",\n  ExerciseVariation = \"ExerciseVariation\",\n  ExerciseName = \"ExerciseName\",\n  NonSeparator = \"NonSeparator\",\n  Repeat = \"Repeat\",\n  Rep = \"Rep\",\n  Int = \"Int\",\n  RepRange = \"RepRange\",\n  SectionSeparator = \"SectionSeparator\",\n  ExerciseSection = \"ExerciseSection\",\n  ExerciseProperty = \"ExerciseProperty\",\n  ExercisePropertyName = \"ExercisePropertyName\",\n  Keyword = \"Keyword\",\n  FunctionExpression = \"FunctionExpression\",\n  FunctionName = \"FunctionName\",\n  FunctionArgument = \"FunctionArgument\",\n  Number = \"Number\",\n  Plus = \"Plus\",\n  PosNumber = \"PosNumber\",\n  Float = \"Float\",\n  Weight = \"Weight\",\n  Percentage = \"Percentage\",\n  Rpe = \"Rpe\",\n  KeyValue = \"KeyValue\",\n  Liftoscript = \"Liftoscript\",\n  ReuseLiftoscript = \"ReuseLiftoscript\",\n  ReuseSection = \"ReuseSection\",\n  WarmupExerciseSets = \"WarmupExerciseSets\",\n  WarmupExerciseSet = \"WarmupExerciseSet\",\n  WarmupSetPart = \"WarmupSetPart\",\n  None = \"None\",\n  ExerciseSets = \"ExerciseSets\",\n  CurrentVariation = \"CurrentVariation\",\n  ExerciseSet = \"ExerciseSet\",\n  Timer = \"Timer\",\n  SetTimer = \"SetTimer\",\n  Auto = \"Auto\",\n  SetPart = \"SetPart\",\n  WeightWithPlus = \"WeightWithPlus\",\n  PercentageWithPlus = \"PercentageWithPlus\",\n  SetLabel = \"SetLabel\",\n  ReuseSectionWithWeekDay = \"ReuseSectionWithWeekDay\",\n  WeekDay = \"WeekDay\",\n  WeekOrDay = \"WeekOrDay\",\n  Current = \"Current\",\n  Superset = \"Superset\",\n  SupersetKeyword = \"SupersetKeyword\",\n  AskWeight = \"AskWeight\",\n  EmptyExpression = \"EmptyExpression\",\n}\n\nexport const plannerExerciseStyles = {\n  [`${[PlannerNodeName.SetPart]}/...`]: t.atom,\n  [`${[PlannerNodeName.WarmupSetPart]}/...`]: t.atom,\n  [`${[PlannerNodeName.Rpe]}/...`]: t.number,\n  [`${[PlannerNodeName.Timer]}/...`]: t.keyword,\n  [`${[PlannerNodeName.SetTimer]}/...`]: t.keyword,\n  [PlannerNodeName.Auto]: t.keyword,\n  [`${[PlannerNodeName.Weight]}/...`]: t.number,\n  [`${[PlannerNodeName.Percentage]}/...`]: t.number,\n  [PlannerNodeName.AskWeight]: t.number,\n  [PlannerNodeName.LineComment]: t.lineComment,\n  [PlannerNodeName.TripleLineComment]: t.blockComment,\n  [PlannerNodeName.SupersetKeyword]: t.keyword,\n  [PlannerNodeName.SectionSeparator]: t.lineComment,\n  [`${[PlannerNodeName.ExercisePropertyName]}/...`]: t.keyword,\n  [`${[PlannerNodeName.FunctionName]}/...`]: t.attributeName,\n  [`${[PlannerNodeName.FunctionArgument]}/...`]: t.attributeValue,\n  [PlannerNodeName.None]: t.atom,\n  [PlannerNodeName.Week]: t.annotation,\n  [PlannerNodeName.Day]: t.docComment,\n  [PlannerNodeName.WeekDay]: t.atom,\n  [PlannerNodeName.Repeat]: t.atom,\n};\n","import memoize from \"micro-memoize\";\nimport { Exercise_toKey, Exercise_findByNameEquipment } from \"../../models/exercise\";\nimport { IAllCustomExercises, IExerciseType, ISettings } from \"../../types\";\nimport { IPlannerProgramExercise, IPlannerProgramExerciseVariation } from \"./models/types\";\nimport { PlannerExerciseEvaluator } from \"./plannerExerciseEvaluator\";\n\nexport function PlannerKey_fromPlannerExercise(plannerExercise: IPlannerProgramExercise, settings: ISettings): string {\n  if (plannerExercise.exerciseVariations != null && plannerExercise.exerciseVariations.length > 1) {\n    return PlannerKey_fromExerciseVariations(plannerExercise.exerciseVariations, plannerExercise.label);\n  } else if (plannerExercise.exerciseType) {\n    return PlannerKey_fromExerciseType(plannerExercise.exerciseType, plannerExercise.label);\n  } else {\n    return PlannerKey_fromFullName(plannerExercise.fullName, settings.exercises);\n  }\n}\n\nexport function PlannerKey_fromExerciseVariations(\n  variations: IPlannerProgramExerciseVariation[],\n  label: string | undefined\n): string {\n  const keyPart = variations.map((v) => (v.exerciseType ? Exercise_toKey(v.exerciseType) : v.name)).join(\"_\");\n  return `${label ? `${label}-` : \"\"}${keyPart}`.toLowerCase();\n}\n\nexport function PlannerKey_fromExerciseType(exerciseType: IExerciseType, label?: string): string {\n  const key = Exercise_toKey(exerciseType);\n  const plannerKey = `${label ? `${label}-` : \"\"}${key}`.toLowerCase();\n  return plannerKey;\n}\n\nexport const PlannerKey_fromFullName = memoize(\n  (fullName: string, exercises: IAllCustomExercises): string => {\n    const segments = fullName.split(\"|\");\n    if (segments.length === 1) {\n      const { label, name, equipment } = PlannerExerciseEvaluator.extractNameParts(fullName, exercises);\n      return PlannerKey_fromLabelNameAndEquipment(label, name, equipment, exercises);\n    }\n    let label: string | undefined;\n    const keyParts = segments.map((segment, i) => {\n      const cleaned = segment.trim().replace(/^!\\s*/, \"\");\n      const { label: segmentLabel, name, equipment } = PlannerExerciseEvaluator.extractNameParts(cleaned, exercises);\n      if (i === 0) {\n        label = segmentLabel;\n      }\n      const exercise = Exercise_findByNameEquipment(exercises, name, equipment);\n      return exercise ? Exercise_toKey(exercise) : name;\n    });\n    return `${label ? `${label}-` : \"\"}${keyParts.join(\"_\")}`.toLowerCase();\n  },\n  { maxSize: 1000 }\n);\n\nexport const PlannerKey_fromLabelNameAndEquipment = memoize(\n  (label: string | undefined, name: string, equipment: string | undefined, exercises: IAllCustomExercises): string => {\n    const exercise = Exercise_findByNameEquipment(exercises, name, equipment);\n    const key = exercise ? Exercise_toKey(exercise) : name;\n    const plannerKey = `${label ? `${label}-` : \"\"}${key}`.toLowerCase();\n    return plannerKey;\n  },\n  {\n    maxSize: 1000,\n  }\n);\n","/* eslint-disable @typescript-eslint/unified-signatures */\nimport { LiftoscriptEvaluator, NodeName, LiftoscriptSyntaxError } from \"./liftoscriptEvaluator\";\nimport { parser as LiftoscriptParser } from \"./liftoscript\";\nimport {\n  IScriptBindings,\n  IScriptFnContext,\n  Progress_createEmptyScriptBindings,\n  Progress_createScriptFunctions,\n} from \"./models/progress\";\nimport { IScriptFunctions } from \"./liftoscriptFns\";\nimport { Weight_build } from \"./models/weight\";\nimport { IUnit, IWeight, IProgramState, IPercentage, IDayData, IExerciseType, ISettings } from \"./types\";\nimport type { Tree } from \"@lezer/common\";\nimport RB from \"rollbar\";\nimport { IProgramMode } from \"./models/program\";\nimport { ILiftoscriptEvaluatorUpdate, ILiftoscriptScalar } from \"./liftoscriptEvaluator\";\nimport { Dialog_alert } from \"./utils/dialog\";\nimport memoize from \"micro-memoize\";\n\ndeclare let Rollbar: RB;\n\nconst lastAlertDisplayedTs: Partial<Record<string, number>> = {};\n\nconst parseLiftoscript = memoize((script: string): Tree => LiftoscriptParser.parse(script), { maxSize: 200 });\n\n// The semantic pass reads only the script, the mode, and which state and binding keys exist, never their values.\n// A pass that throws is not cached, so every run of a broken script still reports its error.\nconst validateLiftoscript = memoize(\n  (_script: string, _mode: IProgramMode, _stateKeys: string, _bindingKeys: string, validate: () => void): true => {\n    validate();\n    return true;\n  },\n  { maxSize: 500, transformKey: (args) => args.slice(0, 4) }\n);\n\n// The pass checks membership with `in`, which also sees inherited keys. A state variable named `__proto__`\n// gives the state a prototype, and then `Object.keys` no longer describes what `in` finds.\nfunction hasOnlyOwnKeys(value: object): boolean {\n  return Object.getPrototypeOf(value) === Object.prototype;\n}\n\nconst hasKeywordMemoized = memoize(\n  (script: string, name: string): boolean => {\n    const expr = parseLiftoscript(script);\n    const cursor = expr.cursor();\n    do {\n      if (cursor.node.type.name === NodeName.Keyword) {\n        if (LiftoscriptEvaluator.getValue(script, cursor.node) === name) {\n          return true;\n        }\n      }\n    } while (cursor.next());\n    return false;\n  },\n  { maxSize: 200 }\n);\n\nexport class ScriptRunner {\n  private readonly script: string;\n  private readonly state: IProgramState;\n  private readonly otherStates: Record<number, IProgramState>;\n  private readonly bindings: IScriptBindings;\n  private readonly fns: IScriptFunctions;\n  private readonly units: IUnit;\n  private readonly context: IScriptFnContext;\n  private readonly mode: IProgramMode;\n  private updates: ILiftoscriptEvaluatorUpdate[] = [];\n\n  constructor(\n    script: string,\n    state: IProgramState,\n    otherStates: Record<number, IProgramState>,\n    bindings: IScriptBindings,\n    fns: IScriptFunctions,\n    units: IUnit,\n    context: IScriptFnContext,\n    mode: IProgramMode\n  ) {\n    this.script = script;\n    this.state = state;\n    this.otherStates = otherStates;\n    this.bindings = bindings;\n    this.fns = fns;\n    this.units = units;\n    this.context = context;\n    this.mode = mode;\n  }\n\n  public static isValid(\n    script: string,\n    state: IProgramState,\n    dayData: IDayData,\n    settings: ISettings,\n    exerciseType?: IExerciseType\n  ): LiftoscriptSyntaxError | undefined {\n    const liftoscriptEvaluator = new ScriptRunner(\n      script,\n      state,\n      {},\n      Progress_createEmptyScriptBindings(dayData, settings),\n      Progress_createScriptFunctions(settings),\n      settings.units,\n      { exerciseType: exerciseType, unit: settings.units, prints: [] },\n      \"planner\"\n    );\n    try {\n      liftoscriptEvaluator.parse();\n    } catch (e) {\n      if (e instanceof LiftoscriptSyntaxError) {\n        return e;\n      } else {\n        throw e;\n      }\n    }\n    return undefined;\n  }\n\n  public parse(): [LiftoscriptEvaluator, Tree] {\n    const liftoscriptTree = parseLiftoscript(this.script);\n    const liftoscriptEvaluator = new LiftoscriptEvaluator(\n      this.script,\n      this.state,\n      this.otherStates,\n      this.bindings,\n      this.fns,\n      this.context,\n      this.units,\n      this.mode\n    );\n    const validate = (): void => liftoscriptEvaluator.parse(liftoscriptTree.topNode);\n    if (hasOnlyOwnKeys(this.state) && hasOnlyOwnKeys(this.bindings)) {\n      validateLiftoscript(\n        this.script,\n        this.mode,\n        Object.keys(this.state).sort().join(\"\\n\"),\n        Object.keys(this.bindings).sort().join(\"\\n\"),\n        validate\n      );\n    } else {\n      validate();\n    }\n    return [liftoscriptEvaluator, liftoscriptTree];\n  }\n\n  public switchWeightsToUnit(toUnit: IUnit): string {\n    const liftoscriptTree = parseLiftoscript(this.script);\n    const liftoscriptEvaluator = new LiftoscriptEvaluator(\n      this.script,\n      this.state,\n      this.otherStates,\n      this.bindings,\n      this.fns,\n      this.context,\n      this.units,\n      this.mode\n    );\n    return liftoscriptEvaluator.switchWeightsToUnit(liftoscriptTree.topNode, toUnit);\n  }\n\n  public getStateVariableKeys(): Set<string> {\n    const liftoscriptTree = parseLiftoscript(this.script);\n    const liftoscriptEvaluator = new LiftoscriptEvaluator(\n      this.script,\n      this.state,\n      this.otherStates,\n      this.bindings,\n      this.fns,\n      this.context,\n      this.units,\n      this.mode\n    );\n    return liftoscriptEvaluator.getStateVariableKeys(liftoscriptTree.topNode);\n  }\n\n  public static hasStateVariable(script: string, name: string): boolean {\n    const expr = parseLiftoscript(script);\n    const cursor = expr.cursor();\n    do {\n      if (cursor.node.type.name === NodeName.StateVariable) {\n        const keywordNode = cursor.node.getChild(NodeName.Keyword);\n        if (keywordNode != null) {\n          const value = LiftoscriptEvaluator.getValue(script, keywordNode);\n          if (value === name) {\n            return true;\n          }\n        }\n      }\n    } while (cursor.next());\n    return false;\n  }\n\n  public static hasKeyword(script: string, name: string): boolean {\n    // A keyword node's value is a slice of the script, so a name absent from the text cannot match.\n    if (script.indexOf(name) === -1) {\n      return false;\n    }\n    return hasKeywordMemoized(script, name);\n  }\n\n  public static safe<T>(cb: () => T, errorMsg: (e: Error) => string, defaultValue: T, disabled?: boolean): T {\n    let value: T;\n    try {\n      value = cb();\n    } catch (e) {\n      if (!disabled && e instanceof LiftoscriptSyntaxError) {\n        const lastAlertTs = lastAlertDisplayedTs[e.message];\n        console.error(e);\n        if (lastAlertTs == null || lastAlertTs < Date.now() - 1000 * 60 * 1) {\n          Dialog_alert(errorMsg(e));\n          this.reportError(\"Error during Liftoscript execution\", e);\n          lastAlertDisplayedTs[e.message] = Date.now();\n        }\n        value = defaultValue;\n      } else {\n        throw e;\n      }\n    }\n    return value;\n  }\n\n  public execute(type: \"reps\"): number;\n  public execute(type: \"rpe\"): number;\n  public execute(type: \"weight\"): IWeight | IPercentage;\n  public execute(type: \"timer\"): number;\n  public execute(type?: undefined): ILiftoscriptScalar;\n  public execute(type?: \"reps\" | \"weight\" | \"timer\" | \"rpe\"): ILiftoscriptScalar {\n    const [liftoscriptEvaluator, liftoscriptTree] = this.parse();\n    const rawResult = liftoscriptEvaluator.evaluate(liftoscriptTree.topNode);\n    let result = Array.isArray(rawResult) ? rawResult[0] : rawResult;\n    if (result == null) {\n      result = 0;\n    }\n    const output = this.convertResult(type, result);\n    this.updates = liftoscriptEvaluator.updates;\n\n    return output;\n  }\n\n  public getUpdates(): ILiftoscriptEvaluatorUpdate[] {\n    return this.updates;\n  }\n\n  private convertResult(\n    type: \"reps\" | \"weight\" | \"timer\" | \"rpe\" | undefined,\n    result: ILiftoscriptScalar\n  ): ILiftoscriptScalar {\n    if (type === \"reps\" || type === \"timer\") {\n      if (typeof result !== \"number\") {\n        throw new LiftoscriptSyntaxError(\"Expected to get number as a result\", 0, 0, 0, 0, {\n          type: \"wrongResultType\",\n          data: { expected: \"number\" },\n        });\n      } else if (result < 0) {\n        return 0;\n      } else {\n        return result;\n      }\n    } else if (type === \"rpe\") {\n      if (typeof result !== \"number\") {\n        throw new LiftoscriptSyntaxError(\"Expected to get number as a result\", 0, 0, 0, 0, {\n          type: \"wrongResultType\",\n          data: { expected: \"number\" },\n        });\n      } else {\n        return Math.round(Math.min(10, Math.max(0, result)) / 0.5) * 0.5;\n      }\n    } else if (type === \"weight\") {\n      if (typeof result === \"boolean\" || typeof result === \"string\") {\n        throw new LiftoscriptSyntaxError(\"Expected to get number, percentage or weight as a result\", 0, 0, 0, 0, {\n          type: \"wrongResultType\",\n          data: { expected: \"numberOrPercentageOrWeight\" },\n        });\n      } else if (typeof result === \"number\") {\n        return Weight_build(result, this.units);\n      } else {\n        if (result.value < 0) {\n          return Weight_build(0, this.units);\n        } else {\n          return result;\n        }\n      }\n    } else {\n      return result;\n    }\n  }\n\n  private static reportError(msg: string, error?: Error): void {\n    if (typeof Rollbar === \"undefined\") {\n      return;\n    }\n    const payload = {\n      error: error ? { message: error.message, name: error.name, stack: error.stack } : undefined,\n    };\n    Rollbar.error(msg, payload);\n  }\n}\n","import { IProgram } from \"../types\";\n\nexport const basicBeginnerProgram: IProgram = {\n  vtype: \"program\",\n  weeks: [],\n  author: \"/r/fitness\",\n  clonedAt: 1708563096401,\n  description:\n    \"<div><p>This is a great starting routine for complete beginners.</p><p>It's simple, easy to follow routine, which will introduce you to weight lifting.</p><p>You should run it for ~3 months, and then switch to some other routine, like '5/3/1 for beginners'.</p></div>\",\n  shortDescription: \"Great first starter program\",\n  url: \"https://thefitness.wiki/routines/r-fitness-basic-beginner-routine/\",\n  tags: [],\n  exercises: [],\n  name: \"Basic Beginner Routine\",\n  days: [],\n  id: \"basicBeginner\",\n  planner: {\n    vtype: \"planner\",\n    name: \"Basic Beginner Routine\",\n    weeks: [\n      {\n        name: \"Week 1\",\n        days: [\n          {\n            name: \"Workout A\",\n            exerciseText:\n              \"Bent Over Row / 2x5, 1x5+ / 95lb / progress: lp(2.5lb, 1, 0, 10%, 1, 0)\\nBench Press / 2x5, 1x5+ / 45lb / progress: lp(2.5lb, 1, 0, 10%, 1, 0)\\nSquat / 2x5, 1x5+ / 45lb / progress: lp(5lb, 1, 0, 10%, 1, 0)\",\n          },\n          {\n            name: \"Workout B\",\n            exerciseText:\n              \"Chin Up / 2x5, 1x5+ / 0lb / progress: lp(2.5lb, 1, 0, 10%, 1, 0)\\nOverhead Press / 2x5, 1x5+ / 45lb / progress: lp(2.5lb, 1, 0, 10%, 1, 0)\\nDeadlift / 2x5, 1x5+ / 95lb / progress: lp(5lb, 1, 0, 10%, 1, 0)\",\n          },\n          {\n            name: \"Workout A\",\n            exerciseText: \"Bent Over Row / 2x5, 1x5+ / 95lb\\nBench Press / 2x5, 1x5+ / 45lb\\nSquat / 2x5, 1x5+ / 45lb\",\n          },\n        ],\n      },\n      {\n        name: \"Week 2\",\n        days: [\n          {\n            name: \"Workout A\",\n            exerciseText: \"Chin Up / 2x5, 1x5+ / 0lb\\nOverhead Press / 2x5, 1x5+ / 45lb\\nDeadlift / 2x5, 1x5+ / 95lb\",\n          },\n          {\n            name: \"Workout B\",\n            exerciseText: \"Bent Over Row / 2x5, 1x5+ / 95lb\\nBench Press / 2x5, 1x5+ / 45lb\\nSquat / 2x5, 1x5+ / 45lb\",\n          },\n          {\n            name: \"Workout B\",\n            exerciseText: \"Chin Up / 2x5, 1x5+ / 0lb\\nOverhead Press / 2x5, 1x5+ / 45lb\\nDeadlift / 2x5, 1x5+ / 95lb\",\n          },\n        ],\n      },\n    ],\n  },\n  nextDay: 1,\n  isMultiweek: true,\n};\n","/* eslint-disable no-void */\nimport * as v from \"valibot\";\nimport { IVersions, IVersionTypes } from \"./models/versionTracker/types\";\nimport { IEquals } from \"./utils/types\";\n\nexport const equipments = [\n  \"barbell\",\n  \"cable\",\n  \"dumbbell\",\n  \"smith\",\n  \"band\",\n  \"kettlebell\",\n  \"bodyweight\",\n  \"leverageMachine\",\n  \"medicineball\",\n  \"ezbar\",\n  \"trapbar\",\n] as const;\n\nexport const exerciseTypes = [\n  \"abWheel\",\n  \"arnoldPress\",\n  \"aroundTheWorld\",\n  \"backExtension\",\n  \"ballSlams\",\n  \"battleRopes\",\n  \"benchDip\",\n  \"benchPress\",\n  \"benchPressCloseGrip\",\n  \"benchPressWideGrip\",\n  \"bentOverOneArmRow\",\n  \"bentOverRow\",\n  \"bicepCurl\",\n  \"bicycleCrunch\",\n  \"boxJump\",\n  \"boxSquat\",\n  \"bulgarianSplitSquat\",\n  \"burpee\",\n  \"cableCrossover\",\n  \"cableCrunch\",\n  \"cableKickback\",\n  \"cablePullThrough\",\n  \"cableTwist\",\n  \"calfPressOnLegPress\",\n  \"calfPressOnSeatedLegPress\",\n  \"chestDip\",\n  \"chestFly\",\n  \"chestPress\",\n  \"chinUp\",\n  \"clean\",\n  \"cleanandJerk\",\n  \"concentrationCurl\",\n  \"crossBodyCrunch\",\n  \"crunch\",\n  \"cycling\",\n  \"deadlift\",\n  \"deadliftHighPull\",\n  \"declineBenchPress\",\n  \"declineCrunch\",\n  \"deficitDeadlift\",\n  \"ellipticalMachine\",\n  \"facePull\",\n  \"flatKneeRaise\",\n  \"flatLegRaise\",\n  \"frontRaise\",\n  \"frontSquat\",\n  \"gluteBridge\",\n  \"gluteBridgeMarch\",\n  \"gluteKickback\",\n  \"gobletSquat\",\n  \"goodMorning\",\n  \"hackSquat\",\n  \"hammerCurl\",\n  \"handstandPushUp\",\n  \"hangClean\",\n  \"hangSnatch\",\n  \"hangingLegRaise\",\n  \"highKneeSkips\",\n  \"highRow\",\n  \"hipAbductor\",\n  \"hipAdductor\",\n  \"hipThrust\",\n  \"inclineBenchPress\",\n  \"inclineChestFly\",\n  \"inclineChestPress\",\n  \"inclineCurl\",\n  \"inclineRow\",\n  \"invertedRow\",\n  \"isoLateralChestPress\",\n  \"isoLateralRow\",\n  \"jackknifeSitUp\",\n  \"jumpRope\",\n  \"jumpSquat\",\n  \"jumpingJack\",\n  \"kettlebellSwing\",\n  \"kettlebellTurkishGetUp\",\n  \"kippingPullUp\",\n  \"kneeRaise\",\n  \"kneelingPulldown\",\n  \"kneestoElbows\",\n  \"latPulldown\",\n  \"lateralBoxJump\",\n  \"lateralRaise\",\n  \"legExtension\",\n  \"legPress\",\n  \"lunge\",\n  \"lyingLegCurl\",\n  \"mountainClimber\",\n  \"muscleUp\",\n  \"obliqueCrunch\",\n  \"overheadPress\",\n  \"overheadSquat\",\n  \"pecDeck\",\n  \"pendlayRow\",\n  \"pistolSquat\",\n  \"plank\",\n  \"powerClean\",\n  \"powerSnatch\",\n  \"preacherCurl\",\n  \"pressUnder\",\n  \"pullUp\",\n  \"pullover\",\n  \"pushPress\",\n  \"pushUp\",\n  \"reverseCrunch\",\n  \"reverseCurl\",\n  \"reverseFly\",\n  \"reverseGripConcentrationCurl\",\n  \"reverseHyperextension\",\n  \"reverseWristCurl\",\n  \"reverseLunge\",\n  \"reversePlank\",\n  \"romanianDeadlift\",\n  \"rowing\",\n  \"russianTwist\",\n  \"seatedCalfRaise\",\n  \"seatedLegCurl\",\n  \"seatedLegPress\",\n  \"seatedOverheadPress\",\n  \"seatedPalmsUpWristCurl\",\n  \"seatedRow\",\n  \"seatedWideGripRow\",\n  \"shoulderPress\",\n  \"shrug\",\n  \"sideBend\",\n  \"sideCrunch\",\n  \"sideHipAbductor\",\n  \"sideLyingClam\",\n  \"sidePlank\",\n  \"singleLegBridge\",\n  \"singleLegDeadlift\",\n  \"singleLegGluteBridgeBench\",\n  \"singleLegGluteBridgeStraight\",\n  \"singleLegGluteBridgeBentKnee\",\n  \"singleLegHipThrust\",\n  \"sitUp\",\n  \"skullcrusher\",\n  \"snatch\",\n  \"snatchPull\",\n  \"splitSquat\",\n  \"splitJerk\",\n  \"squat\",\n  \"squatRow\",\n  \"standingCalfRaise\",\n  \"stepUp\",\n  \"stiffLegDeadlift\",\n  \"straightLegDeadlift\",\n  \"sumoDeadlift\",\n  \"sumoDeadliftHighPull\",\n  \"superman\",\n  \"tBarRow\",\n  \"thruster\",\n  \"toesToBar\",\n  \"torsoRotation\",\n  \"trapBarDeadlift\",\n  \"tricepsDip\",\n  \"tricepsExtension\",\n  \"tricepsPushdown\",\n  \"uprightRow\",\n  \"vUp\",\n  \"widePullUp\",\n  \"wristCurl\",\n  \"wristRoller\",\n  \"zercherSquat\",\n] as const;\nexport const availableMuscles = [\n  \"Adductor Brevis\",\n  \"Adductor Longus\",\n  \"Adductor Magnus\",\n  \"Biceps Brachii\",\n  \"Brachialis\",\n  \"Brachioradialis\",\n  \"Deltoid Anterior\",\n  \"Deltoid Lateral\",\n  \"Deltoid Posterior\",\n  \"Erector Spinae\",\n  \"Gastrocnemius\",\n  \"Gluteus Maximus\",\n  \"Gluteus Medius\",\n  \"Hamstrings\",\n  \"Iliopsoas\",\n  \"Infraspinatus\",\n  \"Latissimus Dorsi\",\n  \"Levator Scapulae\",\n  \"Obliques\",\n  \"Pectineous\",\n  \"Pectoralis Major Clavicular Head\",\n  \"Pectoralis Major Sternal Head\",\n  \"Quadriceps\",\n  \"Rectus Abdominis\",\n  \"Sartorius\",\n  \"Serratus Anterior\",\n  \"Soleus\",\n  \"Splenius\",\n  \"Sternocleidomastoid\",\n  \"Tensor Fasciae Latae\",\n  \"Teres Major\",\n  \"Teres Minor\",\n  \"Tibialis Anterior\",\n  \"Trapezius Lower Fibers\",\n  \"Trapezius Middle Fibers\",\n  \"Trapezius Upper Fibers\",\n  \"Triceps Brachii\",\n  \"Wrist Extensors\",\n  \"Wrist Flexors\",\n] as const;\n\nexport const availableBodyParts: string[] = [\n  \"Back\",\n  \"Calves\",\n  \"Chest\",\n  \"Forearms\",\n  \"Hips\",\n  \"Shoulders\",\n  \"Thighs\",\n  \"Upper Arms\",\n  \"Waist\",\n];\n\nexport const exerciseKinds = [\"core\", \"pull\", \"push\", \"legs\", \"upper\", \"lower\"] as const;\nexport const graphExerciseSelectedTypes = [\"weight\", \"volume\"] as const;\nexport const graphMuscleGroupSelectedTypes = [\"volume\", \"sets\"] as const;\nexport const units = [\"kg\", \"lb\"] as const;\nexport const percentageUnits = [\"%\"] as const;\nexport const lengthUnits = [\"in\", \"cm\"] as const;\nexport const historyRecordChange = [\"order\"] as const;\nexport const targetTypes = [\"target\", \"lasttime\", \"platescalculator\", \"e1rm\"] as const;\nexport const exercisePickerSorts = [\"name_asc\", \"similar_muscles\"] as const;\n\nexport const screenMuscles: string[] = [\n  \"chest\",\n  \"lats\",\n  \"upperBack\",\n  \"frontDelts\",\n  \"sideDelts\",\n  \"rearDelts\",\n  \"biceps\",\n  \"triceps\",\n  \"quadriceps\",\n  \"hamstrings\",\n  \"glutes\",\n  \"calves\",\n  \"abs\",\n  \"upperTraps\",\n  \"lowerBack\",\n  \"neck\",\n  \"rotatorCuff\",\n  \"forearmFlexors\",\n  \"forearmExtensors\",\n  \"obliques\",\n  \"hipFlexors\",\n  \"abductors\",\n  \"adductors\",\n];\n\nexport const statsWeightDef = [\"weight\"] as const;\nexport const statsLengthDef = [\n  \"neck\",\n  \"shoulders\",\n  \"bicepLeft\",\n  \"bicepRight\",\n  \"forearmLeft\",\n  \"forearmRight\",\n  \"chest\",\n  \"waist\",\n  \"hips\",\n  \"thighLeft\",\n  \"thighRight\",\n  \"calfLeft\",\n  \"calfRight\",\n] as const;\nexport const statsPercentageDef = [\"bodyfat\"] as const;\nexport const statsHealthDef = [\"sleep\", \"calories\", \"protein\"] as const;\n\nexport const VUnit = v.picklist(units);\nexport type IUnit = v.InferOutput<typeof VUnit>;\n\nexport const VPercentageUnit = v.picklist(percentageUnits);\nexport type IPercentageUnit = v.InferOutput<typeof VPercentageUnit>;\n\nexport const VLengthUnit = v.picklist(lengthUnits);\nexport type ILengthUnit = v.InferOutput<typeof VLengthUnit>;\n\nexport const VExerciseKind = v.picklist(exerciseKinds);\nexport type IExerciseKind = v.InferOutput<typeof VExerciseKind>;\n\nexport const VMuscle = v.picklist(availableMuscles);\nexport type IMuscle = v.InferOutput<typeof VMuscle>;\n\nexport const VBodyPart = v.picklist(availableBodyParts as readonly string[]);\nexport type IBodyPart = v.InferOutput<typeof VBodyPart>;\n\nexport const VBarKey = v.picklist([\"barbell\", \"ezbar\", \"dumbbell\"] as const);\nexport type IBarKey = v.InferOutput<typeof VBarKey>;\n\nexport const VBuiltinEquipment = v.picklist(equipments);\nexport type IBuiltinEquipment = v.InferOutput<typeof VBuiltinEquipment>;\n\nexport const VExercisePickerSort = v.picklist(exercisePickerSorts);\nexport type IExercisePickerSort = v.InferOutput<typeof VExercisePickerSort>;\n\nexport const VExercisePickerScreen = v.picklist([\"exercisePicker\", \"customExercise\", \"filter\", \"settings\"] as const);\nexport type IExercisePickerScreen = v.InferOutput<typeof VExercisePickerScreen>;\n\nexport const VHistoryRecordChange = v.picklist(historyRecordChange);\nexport type IHistoryRecordChange = v.InferOutput<typeof VHistoryRecordChange>;\n\nexport const VTargetType = v.picklist(targetTypes);\nexport type ITargetType = v.InferOutput<typeof VTargetType>;\n\nexport const VProgressMode = v.picklist([\"warmup\", \"workout\"] as const);\nexport type IProgressMode = v.InferOutput<typeof VProgressMode>;\n\nexport const VTimedSetSide = v.picklist([\"left\", \"right\", \"bilateral\"] as const);\nexport type ITimedSetSide = v.InferOutput<typeof VTimedSetSide>;\n\n// Liftoscript runtime failures are shown to the user as an alert and the offending change is dropped. Callers\n// with no UI (the public API in lambda) pass this instead, so a failed script can be surfaced as an error\n// response rather than silently no-opping.\nexport type IScriptErrorHandler = (message: string) => void;\n\nexport const VProgramTag = v.picklist([\n  \"first-starter\",\n  \"beginner\",\n  \"barbell\",\n  \"dumbbell\",\n  \"intermediate\",\n  \"woman\",\n  \"ppl\",\n  \"hypertrophy\",\n] as const);\nexport type IProgramTag = v.InferOutput<typeof VProgramTag>;\n\nexport const VGraphExerciseSelectedType = v.picklist(graphExerciseSelectedTypes);\nexport type IGraphExerciseSelectedType = v.InferOutput<typeof VGraphExerciseSelectedType>;\n\nexport const VGraphMuscleGroupSelectedType = v.picklist(graphMuscleGroupSelectedTypes);\nexport type IGraphMuscleGroupSelectedType = v.InferOutput<typeof VGraphMuscleGroupSelectedType>;\n\nexport const VScreenMuscle = v.union([v.picklist(screenMuscles as readonly string[]), v.string()]);\nexport type IScreenMuscle = v.InferOutput<typeof VScreenMuscle>;\n\nexport const VEquipment = v.string();\nexport type IEquipment = v.InferOutput<typeof VEquipment>;\n\nexport const VExerciseId = v.string();\nexport type IExerciseId = v.InferOutput<typeof VExerciseId>;\n\nexport interface IWeight {\n  value: number;\n  unit: IUnit;\n}\nconst _VWeight = v.object({\n  value: v.number(),\n  unit: VUnit,\n});\nconst _VWeightMatches: IEquals<v.InferOutput<typeof _VWeight>, IWeight> = true;\nvoid _VWeightMatches;\nexport const VWeight: v.GenericSchema<IWeight> = _VWeight;\n\nexport interface IPercentage {\n  value: number;\n  unit: IPercentageUnit;\n}\nconst _VPercentage = v.object({\n  value: v.number(),\n  unit: VPercentageUnit,\n});\nconst _VPercentageMatches: IEquals<v.InferOutput<typeof _VPercentage>, IPercentage> = true;\nvoid _VPercentageMatches;\nexport const VPercentage: v.GenericSchema<IPercentage> = _VPercentage;\n\nexport interface ILength {\n  value: number;\n  unit: ILengthUnit;\n}\nconst _VLength = v.object({\n  value: v.number(),\n  unit: VLengthUnit,\n});\nconst _VLengthMatches: IEquals<v.InferOutput<typeof _VLength>, ILength> = true;\nvoid _VLengthMatches;\nexport const VLength: v.GenericSchema<ILength> = _VLength;\n\nexport interface IPlate {\n  weight: IWeight;\n  num: number;\n}\nconst _VPlate = v.object({\n  weight: VWeight,\n  num: v.number(),\n});\nconst _VPlateMatches: IEquals<v.InferOutput<typeof _VPlate>, IPlate> = true;\nvoid _VPlateMatches;\nexport const VPlate: v.GenericSchema<IPlate> = _VPlate;\n\nexport const VBars = v.record(v.string(), VWeight);\nexport type IBars = v.InferOutput<typeof VBars>;\n\nexport interface IMetaExercises {\n  bodyParts: IBodyPart[];\n  targetMuscles: IMuscle[];\n  synergistMuscles: IMuscle[];\n  sortedEquipment?: IEquipment[];\n}\nconst _VMetaExercises = v.object({\n  bodyParts: v.array(VBodyPart),\n  targetMuscles: v.array(VMuscle),\n  synergistMuscles: v.array(VMuscle),\n  sortedEquipment: v.optional(v.array(VEquipment)),\n});\nconst _VMetaExercisesMatches: IEquals<v.InferOutput<typeof _VMetaExercises>, IMetaExercises> = true;\nvoid _VMetaExercisesMatches;\nexport const VMetaExercises: v.GenericSchema<IMetaExercises> = _VMetaExercises;\n\nexport interface IExerciseType {\n  id: IExerciseId;\n  equipment?: IEquipment;\n}\nconst _VExerciseType = v.object({\n  id: VExerciseId,\n  equipment: v.optional(VEquipment),\n});\nconst _VExerciseTypeMatches: IEquals<v.InferOutput<typeof _VExerciseType>, IExerciseType> = true;\nvoid _VExerciseTypeMatches;\nexport const VExerciseType: v.GenericSchema<IExerciseType> = _VExerciseType;\n\nexport interface ICustomExercise {\n  vtype: \"custom_exercise\";\n  id: IExerciseId;\n  name: string;\n  isDeleted: boolean;\n  meta: IMetaExercises;\n  defaultEquipment?: IEquipment;\n  types?: IExerciseKind[];\n  clonedFrom?: IExerciseType;\n  reuseImageFrom?: IExerciseType;\n  largeImageUrl?: string;\n  smallImageUrl?: string;\n}\nconst _VCustomExercise = v.object({\n  vtype: v.literal(\"custom_exercise\"),\n  id: VExerciseId,\n  name: v.string(),\n  isDeleted: v.boolean(),\n  meta: VMetaExercises,\n  defaultEquipment: v.optional(VEquipment),\n  types: v.optional(v.array(VExerciseKind)),\n  clonedFrom: v.optional(VExerciseType),\n  reuseImageFrom: v.optional(VExerciseType),\n  largeImageUrl: v.optional(v.string()),\n  smallImageUrl: v.optional(v.string()),\n});\nconst _VCustomExerciseMatches: IEquals<v.InferOutput<typeof _VCustomExercise>, ICustomExercise> = true;\nvoid _VCustomExerciseMatches;\nexport const VCustomExercise: v.GenericSchema<ICustomExercise> = _VCustomExercise;\nexport type IAllCustomExercises = Partial<Record<string, ICustomExercise>>;\n\nexport interface ISet {\n  vtype: \"set\";\n  index: number;\n  id: string;\n  reps?: number;\n  originalWeight?: IWeight | IPercentage;\n  weight?: IWeight;\n  minReps?: number;\n  rpe?: number;\n  logRpe?: boolean;\n  timestamp?: number;\n  isAmrap?: boolean;\n  label?: string;\n  timer?: number;\n  setTimer?: number;\n  isOverflowSetTimer?: boolean;\n  auto?: boolean;\n  askWeight?: boolean;\n  isCompleted?: boolean;\n  isUnilateral?: boolean;\n  completedRepsLeft?: number;\n  completedReps?: number;\n  completedWeight?: IWeight;\n  completedRpe?: number;\n  completedSetTimer?: number;\n  completedSetTimerLeft?: number;\n  programSetIndex?: number;\n}\nconst _VSet = v.object({\n  vtype: v.literal(\"set\"),\n  index: v.number(),\n  id: v.string(),\n  reps: v.optional(v.number()),\n  originalWeight: v.optional(v.union([VWeight, VPercentage])),\n  weight: v.optional(VWeight),\n  minReps: v.optional(v.number()),\n  rpe: v.optional(v.number()),\n  logRpe: v.optional(v.boolean()),\n  timestamp: v.optional(v.number()),\n  isAmrap: v.optional(v.boolean()),\n  label: v.optional(v.string()),\n  timer: v.optional(v.number()),\n  setTimer: v.optional(v.number()),\n  isOverflowSetTimer: v.optional(v.boolean()),\n  auto: v.optional(v.boolean()),\n  askWeight: v.optional(v.boolean()),\n  isCompleted: v.optional(v.boolean()),\n  isUnilateral: v.optional(v.boolean()),\n  completedRepsLeft: v.optional(v.number()),\n  completedReps: v.optional(v.number()),\n  completedWeight: v.optional(VWeight),\n  completedRpe: v.optional(v.number()),\n  completedSetTimer: v.optional(v.number()),\n  completedSetTimerLeft: v.optional(v.number()),\n  programSetIndex: v.optional(v.number()),\n});\nconst _VSetMatches: IEquals<v.InferOutput<typeof _VSet>, ISet> = true;\nvoid _VSetMatches;\nexport const VSet: v.GenericSchema<ISet> = _VSet;\n\nexport const VProgramState = v.record(v.string(), v.union([v.number(), VWeight, VPercentage]));\nexport type IProgramState = v.InferOutput<typeof VProgramState>;\n\nexport interface IHistoryEntryProgressSnapshot {\n  diffState?: Record<string, string>;\n  diffVars?: Record<string, string>;\n  prints?: (number | IWeight | IPercentage)[][];\n  updatePrints?: (number | IWeight | IPercentage)[][];\n  printLines?: string[];\n  updatePrintLines?: string[];\n}\nconst _VHistoryEntryProgressSnapshot = v.object({\n  diffState: v.optional(v.record(v.string(), v.string())),\n  diffVars: v.optional(v.record(v.string(), v.string())),\n  prints: v.optional(v.array(v.array(v.union([v.number(), VWeight, VPercentage])))),\n  updatePrints: v.optional(v.array(v.array(v.union([v.number(), VWeight, VPercentage])))),\n  printLines: v.optional(v.array(v.string())),\n  updatePrintLines: v.optional(v.array(v.string())),\n});\nconst _VHistoryEntryProgressSnapshotMatches: IEquals<\n  v.InferOutput<typeof _VHistoryEntryProgressSnapshot>,\n  IHistoryEntryProgressSnapshot\n> = true;\nvoid _VHistoryEntryProgressSnapshotMatches;\nexport const VHistoryEntryProgressSnapshot: v.GenericSchema<IHistoryEntryProgressSnapshot> =\n  _VHistoryEntryProgressSnapshot;\n\nexport interface IHistoryEntry {\n  vtype: \"history_entry\";\n  exercise: IExerciseType;\n  sets: ISet[];\n  warmupSets: ISet[];\n  index: number;\n  id: string;\n  programExerciseId?: string;\n  state?: IProgramState;\n  vars?: IProgramState;\n  notes?: string;\n  changed?: boolean;\n  isSuppressed?: boolean;\n  superset?: string;\n  updatePrints?: (number | IWeight | IPercentage)[][];\n  updatePrintLines?: string[];\n  descriptionSnapshot?: string;\n  progressSnapshot?: IHistoryEntryProgressSnapshot;\n}\nconst _VHistoryEntry = v.object({\n  vtype: v.literal(\"history_entry\"),\n  exercise: VExerciseType,\n  sets: v.array(VSet),\n  warmupSets: v.array(VSet),\n  index: v.number(),\n  id: v.string(),\n  programExerciseId: v.optional(v.string()),\n  state: v.optional(VProgramState),\n  vars: v.optional(VProgramState),\n  notes: v.optional(v.string()),\n  changed: v.optional(v.boolean()),\n  isSuppressed: v.optional(v.boolean()),\n  superset: v.optional(v.string()),\n  updatePrints: v.optional(v.array(v.array(v.union([v.number(), VWeight, VPercentage])))),\n  updatePrintLines: v.optional(v.array(v.string())),\n  descriptionSnapshot: v.optional(v.string()),\n  progressSnapshot: v.optional(VHistoryEntryProgressSnapshot),\n});\nconst _VHistoryEntryMatches: IEquals<v.InferOutput<typeof _VHistoryEntry>, IHistoryEntry> = true;\nvoid _VHistoryEntryMatches;\nexport const VHistoryEntry: v.GenericSchema<IHistoryEntry> = _VHistoryEntry;\n\nexport interface IProgramStateMetadataValue {\n  userPrompted?: boolean;\n}\nconst _VProgramStateMetadataValue = v.object({\n  userPrompted: v.optional(v.boolean()),\n});\nconst _VProgramStateMetadataValueMatches: IEquals<\n  v.InferOutput<typeof _VProgramStateMetadataValue>,\n  IProgramStateMetadataValue\n> = true;\nvoid _VProgramStateMetadataValueMatches;\nexport const VProgramStateMetadataValue: v.GenericSchema<IProgramStateMetadataValue> = _VProgramStateMetadataValue;\n\nexport const VProgramStateMetadata = v.record(v.string(), v.optional(VProgramStateMetadataValue));\nexport type IProgramStateMetadata = v.InferOutput<typeof VProgramStateMetadata>;\n\nexport interface IProgramSet {\n  repsExpr: string;\n  weightExpr: string;\n  isAmrap?: boolean;\n  rpeExpr?: string;\n  minRepsExpr?: string;\n  logRpe?: boolean;\n  askWeight?: boolean;\n  label?: string;\n  timerExpr?: string;\n}\nconst _VProgramSet = v.object({\n  repsExpr: v.string(),\n  weightExpr: v.string(),\n  isAmrap: v.optional(v.boolean()),\n  rpeExpr: v.optional(v.string()),\n  minRepsExpr: v.optional(v.string()),\n  logRpe: v.optional(v.boolean()),\n  askWeight: v.optional(v.boolean()),\n  label: v.optional(v.string()),\n  timerExpr: v.optional(v.string()),\n});\nconst _VProgramSetMatches: IEquals<v.InferOutput<typeof _VProgramSet>, IProgramSet> = true;\nvoid _VProgramSetMatches;\nexport const VProgramSet: v.GenericSchema<IProgramSet> = _VProgramSet;\n\nexport interface IProgramExerciseVariation {\n  sets: IProgramSet[];\n  quickAddSets?: boolean;\n}\nconst _VProgramExerciseVariation = v.object({\n  sets: v.array(VProgramSet),\n  quickAddSets: v.optional(v.boolean()),\n});\nconst _VProgramExerciseVariationMatches: IEquals<\n  v.InferOutput<typeof _VProgramExerciseVariation>,\n  IProgramExerciseVariation\n> = true;\nvoid _VProgramExerciseVariationMatches;\nexport const VProgramExerciseVariation: v.GenericSchema<IProgramExerciseVariation> = _VProgramExerciseVariation;\n\nexport interface IProgramExerciseWarmupSet {\n  reps: number;\n  value: IWeight | number;\n  threshold: IWeight;\n}\nconst _VProgramExerciseWarmupSet = v.object({\n  reps: v.number(),\n  value: v.union([VWeight, v.number()]),\n  threshold: VWeight,\n});\nconst _VProgramExerciseWarmupSetMatches: IEquals<\n  v.InferOutput<typeof _VProgramExerciseWarmupSet>,\n  IProgramExerciseWarmupSet\n> = true;\nvoid _VProgramExerciseWarmupSetMatches;\nexport const VProgramExerciseWarmupSet: v.GenericSchema<IProgramExerciseWarmupSet> = _VProgramExerciseWarmupSet;\n\nexport interface IProgramExerciseReuseLogic {\n  selected?: string;\n  states: Record<string, IProgramState>;\n}\nconst _VProgramExerciseReuseLogic = v.object({\n  selected: v.optional(v.string()),\n  states: v.record(v.string(), VProgramState),\n});\nconst _VProgramExerciseReuseLogicMatches: IEquals<\n  v.InferOutput<typeof _VProgramExerciseReuseLogic>,\n  IProgramExerciseReuseLogic\n> = true;\nvoid _VProgramExerciseReuseLogicMatches;\nexport const VProgramExerciseReuseLogic: v.GenericSchema<IProgramExerciseReuseLogic> = _VProgramExerciseReuseLogic;\n\nexport interface IProgramExercise {\n  exerciseType: IExerciseType;\n  id: string;\n  name: string;\n  variations: v.InferOutput<typeof VProgramExerciseVariation>[];\n  state: IProgramState;\n  variationExpr: string;\n  finishDayExpr: string;\n  descriptions: string[];\n  tags?: number[];\n  updateDayExpr?: string;\n  diffPaths?: string[];\n  description?: string;\n  descriptionExpr?: string;\n  quickAddSets?: boolean;\n  enableRepRanges?: boolean;\n  enableRpe?: boolean;\n  stateMetadata?: IProgramStateMetadata;\n  timerExpr?: string;\n  reuseLogic?: v.InferOutput<typeof VProgramExerciseReuseLogic>;\n  warmupSets?: v.InferOutput<typeof VProgramExerciseWarmupSet>[];\n  reuseFinishDayScript?: string;\n  reuseUpdateDayScript?: string;\n}\nconst _VProgramExercise = v.object({\n  exerciseType: VExerciseType,\n  id: v.string(),\n  name: v.string(),\n  variations: v.array(VProgramExerciseVariation),\n  state: VProgramState,\n  variationExpr: v.string(),\n  finishDayExpr: v.string(),\n  descriptions: v.array(v.string()),\n  tags: v.optional(v.array(v.number())),\n  updateDayExpr: v.optional(v.string()),\n  diffPaths: v.optional(v.array(v.string())),\n  description: v.optional(v.string()),\n  descriptionExpr: v.optional(v.string()),\n  quickAddSets: v.optional(v.boolean()),\n  enableRepRanges: v.optional(v.boolean()),\n  enableRpe: v.optional(v.boolean()),\n  stateMetadata: v.optional(VProgramStateMetadata),\n  timerExpr: v.optional(v.string()),\n  reuseLogic: v.optional(VProgramExerciseReuseLogic),\n  warmupSets: v.optional(v.array(VProgramExerciseWarmupSet)),\n  reuseFinishDayScript: v.optional(v.string()),\n  reuseUpdateDayScript: v.optional(v.string()),\n});\nconst _VProgramExerciseMatches: IEquals<v.InferOutput<typeof _VProgramExercise>, IProgramExercise> = true;\nvoid _VProgramExerciseMatches;\nexport const VProgramExercise: v.GenericSchema<IProgramExercise> = _VProgramExercise;\n\nexport interface IExercisePickerFilters {\n  equipment?: IBuiltinEquipment[];\n  type?: IExerciseKind[];\n  muscles?: IMuscle[];\n  isStarred?: boolean;\n}\nconst _VExercisePickerFilters = v.object({\n  equipment: v.optional(v.array(VBuiltinEquipment)),\n  type: v.optional(v.array(VExerciseKind)),\n  muscles: v.optional(v.array(VMuscle)),\n  isStarred: v.optional(v.boolean()),\n});\nconst _VExercisePickerFiltersMatches: IEquals<\n  v.InferOutput<typeof _VExercisePickerFilters>,\n  IExercisePickerFilters\n> = true;\nvoid _VExercisePickerFiltersMatches;\nexport const VExercisePickerFilters: v.GenericSchema<IExercisePickerFilters> = _VExercisePickerFilters;\n\nexport interface IExercisePickerProgramExercise {\n  type: \"program\";\n  exerciseType: IExerciseType;\n  week: number;\n  dayInWeek: number;\n}\nconst _VExercisePickerProgramExercise = v.object({\n  type: v.literal(\"program\"),\n  exerciseType: VExerciseType,\n  week: v.number(),\n  dayInWeek: v.number(),\n});\nconst _VExercisePickerProgramExerciseMatches: IEquals<\n  v.InferOutput<typeof _VExercisePickerProgramExercise>,\n  IExercisePickerProgramExercise\n> = true;\nvoid _VExercisePickerProgramExerciseMatches;\nexport const VExercisePickerProgramExercise: v.GenericSchema<IExercisePickerProgramExercise> =\n  _VExercisePickerProgramExercise;\n\nexport interface IExercisePickerAdhocExercise {\n  type: \"adhoc\";\n  exerciseType: IExerciseType;\n  label?: string;\n}\nconst _VExercisePickerAdhocExercise = v.object({\n  type: v.literal(\"adhoc\"),\n  exerciseType: VExerciseType,\n  label: v.optional(v.string()),\n});\nconst _VExercisePickerAdhocExerciseMatches: IEquals<\n  v.InferOutput<typeof _VExercisePickerAdhocExercise>,\n  IExercisePickerAdhocExercise\n> = true;\nvoid _VExercisePickerAdhocExerciseMatches;\nexport const VExercisePickerAdhocExercise: v.GenericSchema<IExercisePickerAdhocExercise> =\n  _VExercisePickerAdhocExercise;\n\nexport interface IExercisePickerTemplate {\n  type: \"template\";\n  name: string;\n  label?: string;\n}\nconst _VExercisePickerTemplate = v.object({\n  type: v.literal(\"template\"),\n  name: v.string(),\n  label: v.optional(v.string()),\n});\nconst _VExercisePickerTemplateMatches: IEquals<\n  v.InferOutput<typeof _VExercisePickerTemplate>,\n  IExercisePickerTemplate\n> = true;\nvoid _VExercisePickerTemplateMatches;\nexport const VExercisePickerTemplate: v.GenericSchema<IExercisePickerTemplate> = _VExercisePickerTemplate;\n\nexport const VExercisePickerSelectedExercise = v.union([\n  VExercisePickerProgramExercise,\n  VExercisePickerAdhocExercise,\n  VExercisePickerTemplate,\n]);\nexport type IExercisePickerSelectedExercise = v.InferOutput<typeof VExercisePickerSelectedExercise>;\n\nexport interface IExercisePickerState {\n  screenStack: IExercisePickerScreen[];\n  sort: IExercisePickerSort;\n  filters: IExercisePickerFilters;\n  selectedExercises: IExercisePickerSelectedExercise[];\n  mode: \"workout\" | \"program\";\n  showMuscles?: boolean;\n  customExerciseName?: string;\n  label?: string;\n  templateName?: string;\n  selectedTab?: number;\n  editCustomExercise?: ICustomExercise;\n  search?: string;\n  exerciseType?: IExerciseType;\n  entryIndex?: number;\n  hideLabel?: boolean;\n  hideTemplate?: boolean;\n}\nconst _VExercisePickerState = v.object({\n  screenStack: v.array(VExercisePickerScreen),\n  sort: VExercisePickerSort,\n  filters: VExercisePickerFilters,\n  selectedExercises: v.array(VExercisePickerSelectedExercise),\n  mode: v.union([v.literal(\"workout\"), v.literal(\"program\")]),\n  showMuscles: v.optional(v.boolean()),\n  customExerciseName: v.optional(v.string()),\n  label: v.optional(v.string()),\n  templateName: v.optional(v.string()),\n  selectedTab: v.optional(v.number()),\n  editCustomExercise: v.optional(VCustomExercise),\n  search: v.optional(v.string()),\n  exerciseType: v.optional(VExerciseType),\n  entryIndex: v.optional(v.number()),\n  hideLabel: v.optional(v.boolean()),\n  hideTemplate: v.optional(v.boolean()),\n});\nconst _VExercisePickerStateMatches: IEquals<v.InferOutput<typeof _VExercisePickerState>, IExercisePickerState> = true;\nvoid _VExercisePickerStateMatches;\nexport const VExercisePickerState: v.GenericSchema<IExercisePickerState> = _VExercisePickerState;\n\nexport interface IProgressUi {\n  vtype?: \"progress_ui\";\n  id?: string;\n  editModal?: {\n    programExerciseId: string;\n    entryIndex: number;\n  };\n  dateModal?: {\n    date: string;\n    time: number;\n  };\n  exercisePicker?: {\n    state?: IExercisePickerState;\n  };\n  equipmentModal?: {\n    exerciseType?: IExerciseType;\n  };\n  rm1Modal?: {\n    exerciseType?: IExerciseType;\n  };\n  editSetModal?: {\n    isWarmup: boolean;\n    entryIndex: number;\n    exerciseType?: IExerciseType;\n    programExerciseId?: string;\n    set: ISet;\n    setIndex?: number;\n  };\n  setTimerEditModal?: {\n    entryIndex: number;\n    setIndex: number;\n  };\n  roundingModal?: {\n    entryIndex: number;\n    setIndex: number;\n  };\n  exerciseBottomSheet?: {\n    entryIndex: number;\n  };\n  entryIndexEditMode?: number;\n  showSupersetPicker?: IHistoryEntry;\n  forceUpdateEntryIndex?: boolean;\n  isExternal?: boolean;\n  nativeNotificationScheduled?: boolean;\n}\nconst _VProgressUi = v.object({\n  vtype: v.optional(v.literal(\"progress_ui\")),\n  id: v.optional(v.string()),\n  editModal: v.optional(\n    v.object({\n      programExerciseId: v.string(),\n      entryIndex: v.number(),\n    })\n  ),\n  dateModal: v.optional(\n    v.object({\n      date: v.string(),\n      time: v.number(),\n    })\n  ),\n  exercisePicker: v.optional(\n    v.object({\n      state: v.optional(VExercisePickerState),\n    })\n  ),\n  equipmentModal: v.optional(\n    v.object({\n      exerciseType: v.optional(VExerciseType),\n    })\n  ),\n  rm1Modal: v.optional(\n    v.object({\n      exerciseType: v.optional(VExerciseType),\n    })\n  ),\n  editSetModal: v.optional(\n    v.object({\n      isWarmup: v.boolean(),\n      entryIndex: v.number(),\n      exerciseType: v.optional(VExerciseType),\n      programExerciseId: v.optional(v.string()),\n      set: VSet,\n      setIndex: v.optional(v.number()),\n    })\n  ),\n  setTimerEditModal: v.optional(\n    v.object({\n      entryIndex: v.number(),\n      setIndex: v.number(),\n    })\n  ),\n  roundingModal: v.optional(\n    v.object({\n      entryIndex: v.number(),\n      setIndex: v.number(),\n    })\n  ),\n  exerciseBottomSheet: v.optional(\n    v.object({\n      entryIndex: v.number(),\n    })\n  ),\n  entryIndexEditMode: v.optional(v.number()),\n  showSupersetPicker: v.optional(v.lazy(() => VHistoryEntry)),\n  forceUpdateEntryIndex: v.optional(v.boolean()),\n  isExternal: v.optional(v.boolean()),\n  nativeNotificationScheduled: v.optional(v.boolean()),\n});\nconst _VProgressUiMatches: IEquals<v.InferOutput<typeof _VProgressUi>, IProgressUi> = true;\nvoid _VProgressUiMatches;\nexport const VProgressUi: v.GenericSchema<IProgressUi> = _VProgressUi;\n\nexport const VIntervals = v.array(v.tuple([v.number(), v.union([v.number(), v.undefined(), v.null()])]));\nexport type IIntervals = v.InferOutput<typeof VIntervals>;\n\nexport interface IHistoryRecord {\n  vtype: \"history_record\" | \"progress\";\n  date: string;\n  programId: string;\n  programName: string;\n  day: number;\n  dayName: string;\n  entries: IHistoryEntry[];\n  startTime: number;\n  id: number;\n  endTime?: number;\n  week?: number;\n  dayInWeek?: number;\n  ui?: IProgressUi;\n  intervals?: IIntervals;\n  deletedProgramExercises?: Record<string, boolean | undefined>;\n  userPromptedStateVars?: Record<string, IProgramState | undefined>;\n  changes?: IHistoryRecordChange[];\n  timerSince?: number;\n  timerMode?: IProgressMode;\n  timer?: number;\n  timerEntryIndex?: number;\n  timerSetIndex?: number;\n  // The running clock for a time-based set. Lives on the record (not under `ui`) so it's version-tracked\n  // and syncs across devices like the rest timer — a clock started on the watch shows in the app and vice\n  // versa. `nonce` drives re-presenting the modal; `keepTiming` survives the AMRAP resolution.\n  setTimer?: {\n    entryIndex: number;\n    setIndex: number;\n    setId: string;\n    id: string;\n    side: ITimedSetSide;\n    startedAt: number;\n    nonce?: number;\n    keepTiming?: boolean;\n  };\n  // Must stay a sibling of setTimer, never a phase inside it: the watch, the iOS widget and the Android\n  // live update all read setTimer's presence as \"the work clock is live\".\n  setTimerGetReady?: {\n    entryIndex: number;\n    setIndex: number;\n    setId: string;\n    id: string;\n    side: ITimedSetSide;\n    startedAt: number;\n    getReady: number;\n    nonce?: number;\n  };\n  // Lives on the record (not under `ui`) so it's version-tracked and syncs across devices like setTimer — an\n  // AMRAP prompt opened on the watch shows in the app and vice versa, and resolving it on either device\n  // dismisses it on both. `nonce` drives re-presenting the modal.\n  amrapModal?: {\n    entryIndex: number;\n    setIndex: number;\n    isAmrap?: boolean;\n    logRpe?: boolean;\n    askWeight?: boolean;\n    userVars?: boolean;\n    nonce?: number;\n  };\n  // The exercise the workout screen is scrolled to. Lives on the record (not under `ui`) so it version-syncs\n  // across devices — auto-advancing past an exercise (EMOM/Tabata) on one client moves the others too.\n  currentEntryIndex?: number;\n  notes?: string;\n  updatedAt?: number;\n  // Which client wrote this workout, from the X-Liftosaur-Client header on the public API. Absent for\n  // anything logged in our own apps. Provenance can't be reconstructed later, so it's recorded at write time.\n  source?: string;\n}\nconst _VHistoryRecord = v.object({\n  vtype: v.union([v.literal(\"history_record\"), v.literal(\"progress\")]),\n  date: v.string(),\n  programId: v.string(),\n  programName: v.string(),\n  day: v.number(),\n  dayName: v.string(),\n  entries: v.array(VHistoryEntry),\n  startTime: v.number(),\n  id: v.number(),\n  endTime: v.optional(v.number()),\n  week: v.optional(v.number()),\n  dayInWeek: v.optional(v.number()),\n  ui: v.optional(VProgressUi),\n  intervals: v.optional(VIntervals),\n  deletedProgramExercises: v.optional(v.record(v.string(), v.optional(v.boolean()))),\n  userPromptedStateVars: v.optional(v.record(v.string(), v.optional(VProgramState))),\n  changes: v.optional(v.array(VHistoryRecordChange)),\n  timerSince: v.optional(v.number()),\n  timerMode: v.optional(VProgressMode),\n  timer: v.optional(v.number()),\n  timerEntryIndex: v.optional(v.number()),\n  timerSetIndex: v.optional(v.number()),\n  setTimer: v.optional(\n    v.object({\n      entryIndex: v.number(),\n      setIndex: v.number(),\n      setId: v.string(),\n      id: v.string(),\n      side: VTimedSetSide,\n      startedAt: v.number(),\n      nonce: v.optional(v.number()),\n      keepTiming: v.optional(v.boolean()),\n    })\n  ),\n  setTimerGetReady: v.optional(\n    v.object({\n      entryIndex: v.number(),\n      setIndex: v.number(),\n      setId: v.string(),\n      id: v.string(),\n      side: VTimedSetSide,\n      startedAt: v.number(),\n      getReady: v.number(),\n      nonce: v.optional(v.number()),\n    })\n  ),\n  amrapModal: v.optional(\n    v.object({\n      entryIndex: v.number(),\n      setIndex: v.number(),\n      isAmrap: v.optional(v.boolean()),\n      logRpe: v.optional(v.boolean()),\n      askWeight: v.optional(v.boolean()),\n      userVars: v.optional(v.boolean()),\n      nonce: v.optional(v.number()),\n    })\n  ),\n  currentEntryIndex: v.optional(v.number()),\n  notes: v.optional(v.string()),\n  updatedAt: v.optional(v.number()),\n  source: v.optional(v.string()),\n});\nconst _VHistoryRecordMatches: IEquals<v.InferOutput<typeof _VHistoryRecord>, IHistoryRecord> = true;\nvoid _VHistoryRecordMatches;\nexport const VHistoryRecord: v.GenericSchema<IHistoryRecord> = _VHistoryRecord;\n\nexport interface IProgramDayEntry {\n  exercise: IExerciseType;\n  sets: IProgramSet[];\n}\nconst _VProgramDayEntry = v.object({\n  exercise: VExerciseType,\n  sets: v.array(VProgramSet),\n});\nconst _VProgramDayEntryMatches: IEquals<v.InferOutput<typeof _VProgramDayEntry>, IProgramDayEntry> = true;\nvoid _VProgramDayEntryMatches;\nexport const VProgramDayEntry: v.GenericSchema<IProgramDayEntry> = _VProgramDayEntry;\n\nexport interface IProgramWeek {\n  id: string;\n  name: string;\n  days: { id: string }[];\n  description?: string;\n}\nconst _VProgramWeek = v.object({\n  id: v.string(),\n  name: v.string(),\n  days: v.array(v.object({ id: v.string() })),\n  description: v.optional(v.string()),\n});\nconst _VProgramWeekMatches: IEquals<v.InferOutput<typeof _VProgramWeek>, IProgramWeek> = true;\nvoid _VProgramWeekMatches;\nexport const VProgramWeek: v.GenericSchema<IProgramWeek> = _VProgramWeek;\n\nexport interface IProgramDay {\n  id: string;\n  name: string;\n  exercises: { id: string }[];\n  description?: string;\n}\nconst _VProgramDay = v.object({\n  id: v.string(),\n  name: v.string(),\n  exercises: v.array(v.object({ id: v.string() })),\n  description: v.optional(v.string()),\n});\nconst _VProgramDayMatches: IEquals<v.InferOutput<typeof _VProgramDay>, IProgramDay> = true;\nvoid _VProgramDayMatches;\nexport const VProgramDay: v.GenericSchema<IProgramDay> = _VProgramDay;\n\nexport interface IPlannerProgramDay {\n  name: string;\n  exerciseText: string;\n  id?: string;\n  description?: string;\n}\nconst _VPlannerProgramDay = v.object({\n  name: v.string(),\n  exerciseText: v.string(),\n  id: v.optional(v.string()),\n  description: v.optional(v.string()),\n});\nconst _VPlannerProgramDayMatches: IEquals<v.InferOutput<typeof _VPlannerProgramDay>, IPlannerProgramDay> = true;\nvoid _VPlannerProgramDayMatches;\nexport const VPlannerProgramDay: v.GenericSchema<IPlannerProgramDay> = _VPlannerProgramDay;\n\nexport interface IPlannerProgramWeek {\n  name: string;\n  days: IPlannerProgramDay[];\n  id?: string;\n  description?: string;\n}\nconst _VPlannerProgramWeek = v.object({\n  name: v.string(),\n  days: v.array(VPlannerProgramDay),\n  id: v.optional(v.string()),\n  description: v.optional(v.string()),\n});\nconst _VPlannerProgramWeekMatches: IEquals<v.InferOutput<typeof _VPlannerProgramWeek>, IPlannerProgramWeek> = true;\nvoid _VPlannerProgramWeekMatches;\nexport const VPlannerProgramWeek: v.GenericSchema<IPlannerProgramWeek> = _VPlannerProgramWeek;\n\nexport interface IPlannerProgram {\n  vtype: \"planner\";\n  name: string;\n  weeks: IPlannerProgramWeek[];\n}\nconst _VPlannerProgram = v.object({\n  vtype: v.literal(\"planner\"),\n  name: v.string(),\n  weeks: v.array(VPlannerProgramWeek),\n});\nconst _VPlannerProgramMatches: IEquals<v.InferOutput<typeof _VPlannerProgram>, IPlannerProgram> = true;\nvoid _VPlannerProgramMatches;\nexport const VPlannerProgram: v.GenericSchema<IPlannerProgram> = _VPlannerProgram;\n\nexport interface IProgram {\n  vtype: \"program\";\n  exercises: IProgramExercise[];\n  id: string;\n  name: string;\n  description: string;\n  url: string;\n  author: string;\n  nextDay: number;\n  days: IProgramDay[];\n  weeks: IProgramWeek[];\n  isMultiweek: boolean;\n  tags: IProgramTag[];\n  clonedAt?: number;\n  shortDescription?: string;\n  planner?: IPlannerProgram;\n  updatedAt?: number;\n  authorid?: string | null;\n  source?: string | null;\n}\nconst _VProgram = v.object({\n  vtype: v.literal(\"program\"),\n  exercises: v.array(VProgramExercise),\n  id: v.string(),\n  name: v.string(),\n  description: v.string(),\n  url: v.string(),\n  author: v.string(),\n  nextDay: v.number(),\n  days: v.array(VProgramDay),\n  weeks: v.array(VProgramWeek),\n  isMultiweek: v.boolean(),\n  tags: v.array(VProgramTag),\n  clonedAt: v.optional(v.number()),\n  shortDescription: v.optional(v.string()),\n  planner: v.optional(VPlannerProgram),\n  updatedAt: v.optional(v.number()),\n  authorid: v.optional(v.union([v.string(), v.null()])),\n  source: v.optional(v.union([v.string(), v.null()])),\n});\nconst _VProgramMatches: IEquals<v.InferOutput<typeof _VProgram>, IProgram> = true;\nvoid _VProgramMatches;\nexport const VProgram: v.GenericSchema<IProgram> = _VProgram;\n\nexport interface IStatsWeightValue {\n  vtype: \"stat\";\n  value: IWeight;\n  timestamp: number;\n  updatedAt?: number;\n  appleUuid?: string;\n  googleUuid?: string;\n}\nconst _VStatsWeightValue = v.object({\n  vtype: v.literal(\"stat\"),\n  value: VWeight,\n  timestamp: v.number(),\n  updatedAt: v.optional(v.number()),\n  appleUuid: v.optional(v.string()),\n  googleUuid: v.optional(v.string()),\n});\nconst _VStatsWeightValueMatches: IEquals<v.InferOutput<typeof _VStatsWeightValue>, IStatsWeightValue> = true;\nvoid _VStatsWeightValueMatches;\nexport const VStatsWeightValue: v.GenericSchema<IStatsWeightValue> = _VStatsWeightValue;\n\nexport const VStatsWeight = v.object({\n  weight: v.optional(v.array(VStatsWeightValue)),\n});\nexport type IStatsWeight = v.InferOutput<typeof VStatsWeight>;\n\nexport interface IStatsLengthValue {\n  vtype: \"stat\";\n  value: ILength;\n  timestamp: number;\n  updatedAt?: number;\n  appleUuid?: string;\n  googleUuid?: string;\n}\nconst _VStatsLengthValue = v.object({\n  vtype: v.literal(\"stat\"),\n  value: VLength,\n  timestamp: v.number(),\n  updatedAt: v.optional(v.number()),\n  appleUuid: v.optional(v.string()),\n  googleUuid: v.optional(v.string()),\n});\nconst _VStatsLengthValueMatches: IEquals<v.InferOutput<typeof _VStatsLengthValue>, IStatsLengthValue> = true;\nvoid _VStatsLengthValueMatches;\nexport const VStatsLengthValue: v.GenericSchema<IStatsLengthValue> = _VStatsLengthValue;\n\nexport type IStatsLength = Partial<Record<(typeof statsLengthDef)[number], IStatsLengthValue[]>>;\nexport const VStatsLength: v.GenericSchema<IStatsLength> = v.object(\n  statsLengthDef.reduce<Record<string, v.GenericSchema<IStatsLengthValue[] | undefined>>>((memo, key) => {\n    memo[key] = v.optional(v.array(VStatsLengthValue));\n    return memo;\n  }, {})\n);\n\nexport interface IStatsPercentageValue {\n  vtype: \"stat\";\n  value: IPercentage;\n  timestamp: number;\n  updatedAt?: number;\n  appleUuid?: string;\n  googleUuid?: string;\n}\nconst _VStatsPercentageValue = v.object({\n  vtype: v.literal(\"stat\"),\n  value: VPercentage,\n  timestamp: v.number(),\n  updatedAt: v.optional(v.number()),\n  appleUuid: v.optional(v.string()),\n  googleUuid: v.optional(v.string()),\n});\nconst _VStatsPercentageValueMatches: IEquals<\n  v.InferOutput<typeof _VStatsPercentageValue>,\n  IStatsPercentageValue\n> = true;\nvoid _VStatsPercentageValueMatches;\nexport const VStatsPercentageValue: v.GenericSchema<IStatsPercentageValue> = _VStatsPercentageValue;\n\nexport const VStatsPercentage = v.object({\n  bodyfat: v.optional(v.array(VStatsPercentageValue)),\n});\nexport type IStatsPercentage = v.InferOutput<typeof VStatsPercentage>;\n\n// Read-only daily metrics imported from Apple Health / Health Connect (sleep minutes, dietary\n// calories, protein grams). Unlike body measurements these are daily aggregates, keyed by the\n// local-midnight timestamp of the day they belong to; the value is a plain number whose unit is\n// implied by the key.\nexport interface IStatsHealthValue {\n  vtype: \"stat\";\n  value: number;\n  timestamp: number;\n  updatedAt?: number;\n  appleUuid?: string;\n  googleUuid?: string;\n  // Read-only imported records can't be truly deleted (they'd just re-sync), so the user hides them\n  // instead; the record stays in storage and re-syncs normally, it's just filtered out of the UI.\n  hidden?: boolean;\n}\nconst _VStatsHealthValue = v.object({\n  vtype: v.literal(\"stat\"),\n  value: v.number(),\n  timestamp: v.number(),\n  updatedAt: v.optional(v.number()),\n  appleUuid: v.optional(v.string()),\n  googleUuid: v.optional(v.string()),\n  hidden: v.optional(v.boolean()),\n});\nconst _VStatsHealthValueMatches: IEquals<v.InferOutput<typeof _VStatsHealthValue>, IStatsHealthValue> = true;\nvoid _VStatsHealthValueMatches;\nexport const VStatsHealthValue: v.GenericSchema<IStatsHealthValue> = _VStatsHealthValue;\n\nexport type IStatsHealthKey = (typeof statsHealthDef)[number];\nexport type IStatsHealth = Partial<Record<IStatsHealthKey, IStatsHealthValue[]>>;\nexport const VStatsHealth: v.GenericSchema<IStatsHealth> = v.object(\n  statsHealthDef.reduce<Record<string, v.GenericSchema<IStatsHealthValue[] | undefined>>>((memo, key) => {\n    memo[key] = v.optional(v.array(VStatsHealthValue));\n    return memo;\n  }, {})\n);\n\nexport type IStatsKey = keyof IStatsLength | keyof IStatsWeight | keyof IStatsPercentage;\n\nexport type IExerciseSelectedType = \"weight\" | \"volume\";\nexport type IVolumeSelectedType = \"sets\" | \"volume\";\n\nfunction buildBoolPartial<K extends string>(\n  keys: readonly K[]\n): v.ObjectSchema<Record<K, v.OptionalSchema<v.BooleanSchema<undefined>, undefined>>, undefined> {\n  const entries = keys.reduce<Record<string, v.OptionalSchema<v.BooleanSchema<undefined>, undefined>>>((memo, key) => {\n    memo[key] = v.optional(v.boolean());\n    return memo;\n  }, {});\n  return v.object(entries) as v.ObjectSchema<\n    Record<K, v.OptionalSchema<v.BooleanSchema<undefined>, undefined>>,\n    undefined\n  >;\n}\n\nexport const VStatsWeightEnabled = buildBoolPartial(statsWeightDef);\nexport type IStatsWeightEnabled = v.InferOutput<typeof VStatsWeightEnabled>;\n\nexport const VStatsLengthEnabled = buildBoolPartial(statsLengthDef);\nexport type IStatsLengthEnabled = v.InferOutput<typeof VStatsLengthEnabled>;\n\nexport const VStatsPercentageEnabled = buildBoolPartial(statsPercentageDef);\nexport type IStatsPercentageEnabled = v.InferOutput<typeof VStatsPercentageEnabled>;\n\nexport interface IStatsEnabled {\n  weight: IStatsWeightEnabled;\n  length: IStatsLengthEnabled;\n  percentage: IStatsPercentageEnabled;\n}\nconst _VStatsEnabled = v.object({\n  weight: VStatsWeightEnabled,\n  length: VStatsLengthEnabled,\n  percentage: VStatsPercentageEnabled,\n});\nconst _VStatsEnabledMatches: IEquals<v.InferOutput<typeof _VStatsEnabled>, IStatsEnabled> = true;\nvoid _VStatsEnabledMatches;\nexport const VStatsEnabled: v.GenericSchema<IStatsEnabled> = _VStatsEnabled;\n\nexport interface ISettingsTimers {\n  warmup?: number | null;\n  workout?: number | null;\n  reminder?: number;\n  superset?: number;\n  getReady?: number;\n}\nconst _VSettingsTimers = v.object({\n  warmup: v.optional(v.union([v.number(), v.null()])),\n  workout: v.optional(v.union([v.number(), v.null()])),\n  reminder: v.optional(v.number()),\n  superset: v.optional(v.number()),\n  getReady: v.optional(v.number()),\n});\nconst _VSettingsTimersMatches: IEquals<v.InferOutput<typeof _VSettingsTimers>, ISettingsTimers> = true;\nvoid _VSettingsTimersMatches;\nexport const VSettingsTimers: v.GenericSchema<ISettingsTimers> = _VSettingsTimers;\n\nexport const VGraph = v.union([\n  v.object({ vtype: v.literal(\"graph\"), type: v.literal(\"exercise\"), id: VExerciseId }),\n  v.object({\n    vtype: v.literal(\"graph\"),\n    type: v.literal(\"statsWeight\"),\n    id: v.picklist(statsWeightDef),\n  }),\n  v.object({\n    vtype: v.literal(\"graph\"),\n    type: v.literal(\"statsLength\"),\n    id: v.picklist(statsLengthDef),\n  }),\n  v.object({\n    vtype: v.literal(\"graph\"),\n    type: v.literal(\"statsPercentage\"),\n    id: v.picklist(statsPercentageDef),\n  }),\n  v.object({ vtype: v.literal(\"graph\"), type: v.literal(\"muscleGroup\"), id: v.string() }),\n]);\nexport type IGraph = v.InferOutput<typeof VGraph>;\n\nexport interface IWeightRange {\n  from: number;\n  to: number;\n  step: number;\n}\nconst _VWeightRange = v.object({ from: v.number(), to: v.number(), step: v.number() });\nconst _VWeightRangeMatches: IEquals<v.InferOutput<typeof _VWeightRange>, IWeightRange> = true;\nvoid _VWeightRangeMatches;\n\nexport interface IPlateCount {\n  weight: number;\n  num: number;\n}\nconst _VPlateCount = v.object({ weight: v.number(), num: v.number() });\nconst _VPlateCountMatches: IEquals<v.InferOutput<typeof _VPlateCount>, IPlateCount> = true;\nvoid _VPlateCountMatches;\n\nexport interface IEquipmentSetupBase {\n  unit: IUnit;\n  rounding?: \"down\" | \"nearest\";\n  direction?: \"adds\" | \"assists\";\n  bodyweight?: { share?: number };\n}\nconst _equipmentSetupBaseEntries = {\n  unit: VUnit,\n  rounding: v.optional(v.picklist([\"down\", \"nearest\"])),\n  direction: v.optional(v.picklist([\"adds\", \"assists\"])),\n  bodyweight: v.optional(v.object({ share: v.optional(v.number()) })),\n};\n\nexport interface IStackSetup extends IEquipmentSetupBase {\n  type: \"stack\";\n  base?: number;\n  ranges: IWeightRange[];\n  builtin?: number[];\n  addOn?: IPlateCount[];\n  skipAddOnsInWarmups?: boolean;\n  pullRatio?: number;\n  stackCount?: number;\n  showPinNumbers?: boolean;\n}\nconst _VStackSetup = v.object({\n  ..._equipmentSetupBaseEntries,\n  type: v.literal(\"stack\"),\n  base: v.optional(v.number()),\n  ranges: v.array(_VWeightRange),\n  builtin: v.optional(v.array(v.number())),\n  addOn: v.optional(v.array(_VPlateCount)),\n  skipAddOnsInWarmups: v.optional(v.boolean()),\n  pullRatio: v.optional(v.number()),\n  stackCount: v.optional(v.number()),\n  showPinNumbers: v.optional(v.boolean()),\n});\nconst _VStackSetupMatches: IEquals<v.InferOutput<typeof _VStackSetup>, IStackSetup> = true;\nvoid _VStackSetupMatches;\n\nexport interface IEquipmentHorn {\n  name: string;\n  ratio: number;\n}\n\nexport interface IPlatesSetup extends IEquipmentSetupBase {\n  type: \"plates\";\n  base: number;\n  plates: IPlateCount[];\n  sides: number;\n  horns?: IEquipmentHorn[];\n  warmupPlates?: number[];\n}\nconst _VPlatesSetup = v.object({\n  ..._equipmentSetupBaseEntries,\n  type: v.literal(\"plates\"),\n  base: v.number(),\n  plates: v.array(_VPlateCount),\n  sides: v.number(),\n  horns: v.optional(v.array(v.object({ name: v.string(), ratio: v.number() }))),\n  warmupPlates: v.optional(v.array(v.number())),\n});\nconst _VPlatesSetupMatches: IEquals<v.InferOutput<typeof _VPlatesSetup>, IPlatesSetup> = true;\nvoid _VPlatesSetupMatches;\n\nexport interface IFixedSetup extends IEquipmentSetupBase {\n  type: \"fixed\";\n  ranges: IWeightRange[];\n  values: number[];\n  addOn?: IPlateCount[];\n}\nconst _VFixedSetup = v.object({\n  ..._equipmentSetupBaseEntries,\n  type: v.literal(\"fixed\"),\n  ranges: v.array(_VWeightRange),\n  values: v.array(v.number()),\n  addOn: v.optional(v.array(_VPlateCount)),\n});\nconst _VFixedSetupMatches: IEquals<v.InferOutput<typeof _VFixedSetup>, IFixedSetup> = true;\nvoid _VFixedSetupMatches;\n\nexport interface IElectricSetup extends IEquipmentSetupBase {\n  type: \"electric\";\n  min: number;\n  max: number;\n  step: number;\n}\nconst _VElectricSetup = v.object({\n  ..._equipmentSetupBaseEntries,\n  type: v.literal(\"electric\"),\n  min: v.number(),\n  max: v.number(),\n  step: v.number(),\n});\nconst _VElectricSetupMatches: IEquals<v.InferOutput<typeof _VElectricSetup>, IElectricSetup> = true;\nvoid _VElectricSetupMatches;\n\nexport interface IEquipmentBand {\n  name: string;\n  color?: string;\n  weight: number;\n  num: number;\n}\n\nexport interface IBandsSetup extends IEquipmentSetupBase {\n  type: \"bands\";\n  bands: IEquipmentBand[];\n  combine: boolean;\n}\nconst _VBandsSetup = v.object({\n  ..._equipmentSetupBaseEntries,\n  type: v.literal(\"bands\"),\n  bands: v.array(v.object({ name: v.string(), color: v.optional(v.string()), weight: v.number(), num: v.number() })),\n  combine: v.boolean(),\n});\nconst _VBandsSetupMatches: IEquals<v.InferOutput<typeof _VBandsSetup>, IBandsSetup> = true;\nvoid _VBandsSetupMatches;\n\nexport type IEquipmentSetup = IStackSetup | IPlatesSetup | IFixedSetup | IElectricSetup | IBandsSetup;\nconst _VEquipmentSetup = v.variant(\"type\", [_VStackSetup, _VPlatesSetup, _VFixedSetup, _VElectricSetup, _VBandsSetup]);\nconst _VEquipmentSetupMatches: IEquals<v.InferOutput<typeof _VEquipmentSetup>, IEquipmentSetup> = true;\nvoid _VEquipmentSetupMatches;\nexport const VEquipmentSetup: v.GenericSchema<IEquipmentSetup> = _VEquipmentSetup;\n\nexport interface IEquipmentData {\n  vtype: \"equipment_data\";\n  bar: { lb: IWeight; kg: IWeight };\n  multiplier: number;\n  plates: { weight: IWeight; num: number }[];\n  fixed: IWeight[];\n  isFixed: boolean;\n  unit?: IUnit;\n  name?: string;\n  similarTo?: string;\n  isDeleted?: boolean;\n  useBodyweightForBar?: boolean;\n  isAssisting?: boolean;\n  notes?: string;\n  setup?: IEquipmentSetup;\n  setupLegacyHash?: string;\n}\nconst _VEquipmentData = v.object({\n  vtype: v.literal(\"equipment_data\"),\n  bar: v.object({ lb: VWeight, kg: VWeight }),\n  multiplier: v.number(),\n  plates: v.array(v.object({ weight: VWeight, num: v.number() })),\n  fixed: v.array(VWeight),\n  isFixed: v.boolean(),\n  unit: v.optional(VUnit),\n  name: v.optional(v.string()),\n  similarTo: v.optional(v.string()),\n  isDeleted: v.optional(v.boolean()),\n  useBodyweightForBar: v.optional(v.boolean()),\n  isAssisting: v.optional(v.boolean()),\n  notes: v.optional(v.string()),\n  setup: v.optional(_VEquipmentSetup),\n  setupLegacyHash: v.optional(v.string()),\n});\nconst _VEquipmentDataMatches: IEquals<v.InferOutput<typeof _VEquipmentData>, IEquipmentData> = true;\nvoid _VEquipmentDataMatches;\nexport const VEquipmentData: v.GenericSchema<IEquipmentData> = _VEquipmentData;\nexport type IAllEquipment = Partial<Record<string, IEquipmentData>>;\n\nexport interface IGraphOptions {\n  movingAverageWindowSize?: number;\n}\nconst _VGraphOptions = v.object({\n  movingAverageWindowSize: v.optional(v.number()),\n});\nconst _VGraphOptionsMatches: IEquals<v.InferOutput<typeof _VGraphOptions>, IGraphOptions> = true;\nvoid _VGraphOptionsMatches;\nexport const VGraphOptions: v.GenericSchema<IGraphOptions> = _VGraphOptions;\n\nexport interface IMuscleMultiplier {\n  muscle: IMuscle;\n  multiplier: number;\n}\nconst _VMuscleMultiplier = v.object({\n  muscle: VMuscle,\n  multiplier: v.number(),\n});\nconst _VMuscleMultiplierMatches: IEquals<v.InferOutput<typeof _VMuscleMultiplier>, IMuscleMultiplier> = true;\nvoid _VMuscleMultiplierMatches;\nexport const VMuscleMultiplier: v.GenericSchema<IMuscleMultiplier> = _VMuscleMultiplier;\n\n// The schema accepts any string key for muscleMultipliers so stale or future muscle\n// keys do not invalidate storage. Consumers that need IMuscle keys narrow at the call site\n// with `as IMuscle[]` after ObjectUtils_keys / Object.keys. (A union override here would\n// create real structural divergence between IExerciseDataValue and the schema's inferred\n// output, which would propagate through ISettings and break the IEquals check.)\nexport interface IExerciseDataValue {\n  rm1?: IWeight;\n  rounding?: number;\n  equipment?: Record<string, string | undefined>;\n  notes?: string;\n  muscleMultipliers?: Record<string, number | undefined>;\n  isUnilateral?: boolean;\n  volumeMultiplier?: number;\n}\nconst _VExerciseDataValue = v.object({\n  rm1: v.optional(VWeight),\n  rounding: v.optional(v.number()),\n  equipment: v.optional(v.record(v.string(), v.optional(v.string()))),\n  notes: v.optional(v.string()),\n  muscleMultipliers: v.optional(v.record(v.string(), v.optional(v.number()))),\n  isUnilateral: v.optional(v.boolean()),\n  volumeMultiplier: v.optional(v.number()),\n});\nconst _VExerciseDataValueMatches: IEquals<v.InferOutput<typeof _VExerciseDataValue>, IExerciseDataValue> = true;\nvoid _VExerciseDataValueMatches;\nexport const VExerciseDataValue: v.GenericSchema<IExerciseDataValue> = _VExerciseDataValue;\nexport type IExerciseData = Partial<Record<string, IExerciseDataValue>>;\n\nexport interface IPlannerSettings {\n  synergistMultiplier: number;\n  strengthSetsPct: number;\n  hypertrophySetsPct: number;\n  weeklyRangeSets: Record<IScreenMuscle, [number, number] | undefined>;\n  weeklyFrequency: Record<IScreenMuscle, number | undefined>;\n}\nconst _VPlannerSettings = v.object({\n  synergistMultiplier: v.number(),\n  strengthSetsPct: v.number(),\n  hypertrophySetsPct: v.number(),\n  weeklyRangeSets: v.record(VScreenMuscle, v.optional(v.tuple([v.number(), v.number()]))),\n  weeklyFrequency: v.record(VScreenMuscle, v.optional(v.number())),\n});\nconst _VPlannerSettingsMatches: IEquals<v.InferOutput<typeof _VPlannerSettings>, IPlannerSettings> = true;\nvoid _VPlannerSettingsMatches;\nexport const VPlannerSettings: v.GenericSchema<IPlannerSettings> = _VPlannerSettings;\n\nexport interface IGym {\n  vtype: \"gym\";\n  id: string;\n  name: string;\n  equipment: Record<IEquipment, IEquipmentData | undefined>;\n}\nconst _VGym = v.object({\n  vtype: v.literal(\"gym\"),\n  id: v.string(),\n  name: v.string(),\n  equipment: v.record(VEquipment, v.optional(VEquipmentData)),\n});\nconst _VGymMatches: IEquals<v.InferOutput<typeof _VGym>, IGym> = true;\nvoid _VGymMatches;\nexport const VGym: v.GenericSchema<IGym> = _VGym;\n\nexport interface IWorkoutSettings {\n  targetType: ITargetType;\n  shouldHideGraphs?: boolean;\n  shouldKeepProgramExerciseId?: boolean;\n  shouldShowInvisibleEquipment?: boolean;\n  pickerSort?: IExercisePickerSort;\n  showWorkoutNotes?: boolean;\n  showExerciseNotes?: boolean;\n  shouldCollapseSets?: boolean;\n}\nconst _VWorkoutSettings = v.object({\n  targetType: VTargetType,\n  shouldHideGraphs: v.optional(v.boolean()),\n  shouldKeepProgramExerciseId: v.optional(v.boolean()),\n  shouldShowInvisibleEquipment: v.optional(v.boolean()),\n  pickerSort: v.optional(VExercisePickerSort),\n  showWorkoutNotes: v.optional(v.boolean()),\n  showExerciseNotes: v.optional(v.boolean()),\n  shouldCollapseSets: v.optional(v.boolean()),\n});\nconst _VWorkoutSettingsMatches: IEquals<v.InferOutput<typeof _VWorkoutSettings>, IWorkoutSettings> = true;\nvoid _VWorkoutSettingsMatches;\nexport const VWorkoutSettings: v.GenericSchema<IWorkoutSettings> = _VWorkoutSettings;\n\nexport interface IGraphs {\n  vtype: \"graphs\";\n  graphs: IGraph[];\n}\nconst _VGraphs = v.object({\n  vtype: v.literal(\"graphs\"),\n  graphs: v.array(VGraph),\n});\nconst _VGraphsMatches: IEquals<v.InferOutput<typeof _VGraphs>, IGraphs> = true;\nvoid _VGraphsMatches;\nexport const VGraphs: v.GenericSchema<IGraphs> = _VGraphs;\n\nexport interface IMuscleGroupsSettings {\n  vtype: \"muscle_groups_settings\";\n  data: Record<string, { name?: string; isHidden?: boolean; muscles?: IMuscle[] } | undefined>;\n}\nconst _VMuscleGroupsSettings = v.object({\n  vtype: v.literal(\"muscle_groups_settings\"),\n  data: v.record(\n    v.string(),\n    v.optional(\n      v.object({\n        name: v.optional(v.string()),\n        isHidden: v.optional(v.boolean()),\n        muscles: v.optional(v.array(VMuscle)),\n      })\n    )\n  ),\n});\nconst _VMuscleGroupsSettingsMatches: IEquals<\n  v.InferOutput<typeof _VMuscleGroupsSettings>,\n  IMuscleGroupsSettings\n> = true;\nvoid _VMuscleGroupsSettingsMatches;\nexport const VMuscleGroupsSettings: v.GenericSchema<IMuscleGroupsSettings> = _VMuscleGroupsSettings;\n\nexport interface ISettings {\n  timers: ISettingsTimers;\n  gyms: IGym[];\n  deletedGyms?: string[];\n  graphs: IGraphs;\n  graphOptions: Record<string, IGraphOptions | undefined>;\n  graphsSettings: {\n    isSameXAxis?: boolean;\n    isWithBodyweight?: boolean;\n    isWithOneRm?: boolean;\n    isWithProgramLines?: boolean;\n    defaultType?: IGraphExerciseSelectedType;\n    defaultMuscleGroupType?: IGraphMuscleGroupSelectedType;\n  };\n  exerciseStatsSettings: {\n    ascendingSort?: boolean;\n    hideWithoutWorkoutNotes?: boolean;\n    hideWithoutExerciseNotes?: boolean;\n  };\n  exercises: Record<string, ICustomExercise | undefined>;\n  statsEnabled: IStatsEnabled;\n  units: IUnit;\n  lengthUnits: ILengthUnit;\n  volume: number;\n  exerciseData: Record<string, IExerciseDataValue | undefined>;\n  planner: IPlannerSettings;\n  workoutSettings: IWorkoutSettings;\n  muscleGroups: IMuscleGroupsSettings;\n  appleHealthSyncWorkout?: boolean;\n  appleHealthSyncMeasurements?: boolean;\n  appleHealthSyncSleepNutrition?: boolean;\n  appleHealthAnchor?: string;\n  googleHealthSyncWorkout?: boolean;\n  googleHealthSyncMeasurements?: boolean;\n  googleHealthSyncSleepNutrition?: boolean;\n  googleHealthAnchor?: string;\n  healthConfirmation?: boolean;\n  ignoreDoNotDisturb?: boolean;\n  currentGymId?: string;\n  isPublicProfile?: boolean;\n  nickname?: string;\n  alwaysOnDisplay?: boolean;\n  vibration?: boolean;\n  startWeekFromMonday?: boolean;\n  textSize?: number;\n  starredExercises?: Record<string, boolean | undefined>;\n  recentExercises?: Partial<Record<string, string[]>>;\n  theme?: \"dark\" | \"light\";\n  currentBodyweight?: IWeight;\n  affiliateEnabled?: boolean;\n}\nconst _VSettings = v.object({\n  timers: VSettingsTimers,\n  gyms: v.array(VGym),\n  deletedGyms: v.optional(v.array(v.string())),\n  graphs: VGraphs,\n  graphOptions: v.record(v.string(), v.optional(VGraphOptions)),\n  graphsSettings: v.object({\n    isSameXAxis: v.optional(v.boolean()),\n    isWithBodyweight: v.optional(v.boolean()),\n    isWithOneRm: v.optional(v.boolean()),\n    isWithProgramLines: v.optional(v.boolean()),\n    defaultType: v.optional(VGraphExerciseSelectedType),\n    defaultMuscleGroupType: v.optional(VGraphMuscleGroupSelectedType),\n  }),\n  exerciseStatsSettings: v.object({\n    ascendingSort: v.optional(v.boolean()),\n    hideWithoutWorkoutNotes: v.optional(v.boolean()),\n    hideWithoutExerciseNotes: v.optional(v.boolean()),\n  }),\n  exercises: v.record(v.string(), v.optional(VCustomExercise)),\n  statsEnabled: VStatsEnabled,\n  units: VUnit,\n  lengthUnits: VLengthUnit,\n  volume: v.number(),\n  exerciseData: v.record(v.string(), v.optional(VExerciseDataValue)),\n  planner: VPlannerSettings,\n  workoutSettings: VWorkoutSettings,\n  muscleGroups: VMuscleGroupsSettings,\n  appleHealthSyncWorkout: v.optional(v.boolean()),\n  appleHealthSyncMeasurements: v.optional(v.boolean()),\n  appleHealthSyncSleepNutrition: v.optional(v.boolean()),\n  appleHealthAnchor: v.optional(v.string()),\n  googleHealthSyncWorkout: v.optional(v.boolean()),\n  googleHealthSyncMeasurements: v.optional(v.boolean()),\n  googleHealthSyncSleepNutrition: v.optional(v.boolean()),\n  googleHealthAnchor: v.optional(v.string()),\n  healthConfirmation: v.optional(v.boolean()),\n  ignoreDoNotDisturb: v.optional(v.boolean()),\n  currentGymId: v.optional(v.string()),\n  isPublicProfile: v.optional(v.boolean()),\n  nickname: v.optional(v.string()),\n  alwaysOnDisplay: v.optional(v.boolean()),\n  vibration: v.optional(v.boolean()),\n  startWeekFromMonday: v.optional(v.boolean()),\n  textSize: v.optional(v.number()),\n  starredExercises: v.optional(v.record(VExerciseId, v.optional(v.boolean()))),\n  recentExercises: v.optional(v.record(VExerciseId, v.optional(v.array(VExerciseId)))),\n  theme: v.optional(v.union([v.literal(\"dark\"), v.literal(\"light\")])),\n  currentBodyweight: v.optional(VWeight),\n  affiliateEnabled: v.optional(v.boolean()),\n});\nconst _VSettingsMatches: IEquals<v.InferOutput<typeof _VSettings>, ISettings> = true;\nvoid _VSettingsMatches;\nexport const VSettings: v.GenericSchema<ISettings> = _VSettings;\n\nexport interface IStats {\n  weight: IStatsWeight;\n  length: IStatsLength;\n  percentage: IStatsPercentage;\n  health?: IStatsHealth;\n}\nconst _VStats = v.object({\n  weight: VStatsWeight,\n  length: VStatsLength,\n  percentage: VStatsPercentage,\n  health: v.optional(VStatsHealth),\n});\nconst _VStatsMatches: IEquals<v.InferOutput<typeof _VStats>, IStats> = true;\nvoid _VStatsMatches;\nexport const VStats: v.GenericSchema<IStats> = _VStats;\n\nexport interface ISubscriptionReceipt {\n  vtype: \"subscription_receipt\";\n  id: string;\n  value: string;\n  createdAt: number;\n}\nconst _VSubscriptionReceipt = v.object({\n  vtype: v.literal(\"subscription_receipt\"),\n  id: v.string(),\n  value: v.string(),\n  createdAt: v.number(),\n});\nconst _VSubscriptionReceiptMatches: IEquals<v.InferOutput<typeof _VSubscriptionReceipt>, ISubscriptionReceipt> = true;\nvoid _VSubscriptionReceiptMatches;\nexport const VSubscriptionReceipt: v.GenericSchema<ISubscriptionReceipt> = _VSubscriptionReceipt;\n\nexport interface ISubscription {\n  apple: ISubscriptionReceipt[];\n  google: ISubscriptionReceipt[];\n  key?: string;\n}\nconst _VSubscription = v.object({\n  apple: v.array(VSubscriptionReceipt),\n  google: v.array(VSubscriptionReceipt),\n  key: v.optional(v.string()),\n});\nconst _VSubscriptionMatches: IEquals<v.InferOutput<typeof _VSubscription>, ISubscription> = true;\nvoid _VSubscriptionMatches;\nexport const VSubscription: v.GenericSchema<ISubscription> = _VSubscription;\n\nexport interface IAffiliateData {\n  id: string;\n  timestamp: number;\n  type: \"coupon\" | \"program\";\n  vtype: \"affiliate\";\n}\nconst _VAffiliateData = v.object({\n  id: v.string(),\n  timestamp: v.number(),\n  type: v.union([v.literal(\"coupon\"), v.literal(\"program\")]),\n  vtype: v.literal(\"affiliate\"),\n});\nconst _VAffiliateDataMatches: IEquals<v.InferOutput<typeof _VAffiliateData>, IAffiliateData> = true;\nvoid _VAffiliateDataMatches;\nexport const VAffiliateData: v.GenericSchema<IAffiliateData> = _VAffiliateData;\n\nexport interface IImportSession {\n  vtype: \"import_session\";\n  id: string;\n  timestamp: number;\n  source: \"hevy\" | \"liftosaurCsv\";\n  historyRecordIds: number[];\n  customExerciseIds: string[];\n  workoutCount: number;\n}\nconst _VImportSession = v.object({\n  vtype: v.literal(\"import_session\"),\n  id: v.string(),\n  timestamp: v.number(),\n  source: v.union([v.literal(\"hevy\"), v.literal(\"liftosaurCsv\")]),\n  historyRecordIds: v.array(v.number()),\n  customExerciseIds: v.array(v.string()),\n  workoutCount: v.number(),\n});\nconst _VImportSessionMatches: IEquals<v.InferOutput<typeof _VImportSession>, IImportSession> = true;\nvoid _VImportSessionMatches;\nexport const VImportSession: v.GenericSchema<IImportSession> = _VImportSession;\n\nexport interface IWorkoutOutcome {\n  vtype: \"workout_outcome\";\n  id: number;\n  outcome: \"finish\" | \"discard\";\n  healthSync: boolean;\n  endTime: number;\n}\nconst _VWorkoutOutcome = v.object({\n  vtype: v.literal(\"workout_outcome\"),\n  id: v.number(),\n  outcome: v.union([v.literal(\"finish\"), v.literal(\"discard\")]),\n  healthSync: v.boolean(),\n  endTime: v.number(),\n});\nconst _VWorkoutOutcomeMatches: IEquals<v.InferOutput<typeof _VWorkoutOutcome>, IWorkoutOutcome> = true;\nvoid _VWorkoutOutcomeMatches;\nexport const VWorkoutOutcome: v.GenericSchema<IWorkoutOutcome> = _VWorkoutOutcome;\n\nexport interface IHearAboutUs {\n  result?: {\n    source: string;\n    detail?: string;\n    freeform?: string;\n    ts: number;\n  };\n  requests: number[];\n  done?: boolean;\n}\nconst _VHearAboutUs = v.object({\n  result: v.optional(\n    v.object({\n      source: v.string(),\n      detail: v.optional(v.string()),\n      freeform: v.optional(v.string()),\n      ts: v.number(),\n    })\n  ),\n  requests: v.array(v.number()),\n  done: v.optional(v.boolean()),\n});\nconst _VHearAboutUsMatches: IEquals<v.InferOutput<typeof _VHearAboutUs>, IHearAboutUs> = true;\nvoid _VHearAboutUsMatches;\nexport const VHearAboutUs: v.GenericSchema<IHearAboutUs> = _VHearAboutUs;\n\ninterface IStorageRaw {\n  history: IHistoryRecord[];\n  deletedHistory?: number[];\n  stats: IStats;\n  deletedStats?: number[];\n  settings: ISettings;\n  currentProgramId?: string;\n  version: string;\n  programs: IProgram[];\n  deletedPrograms?: number[];\n  reviewRequests: number[];\n  signupRequests: number[];\n  hearAboutUs?: IHearAboutUs;\n  helps: string[];\n  tempUserId: string;\n  email?: string;\n  affiliates: Record<string, IAffiliateData | undefined>;\n  subscription: ISubscription;\n  whatsNew?: string;\n  progress: IHistoryRecord[];\n  originalId?: number;\n  id?: number;\n  referrer?: string;\n  landingPage?: string;\n  attribution?: string;\n  importSessions?: IImportSession[];\n  workoutOutcomes?: IWorkoutOutcome[];\n  // Localized store prices (displayPrice strings keyed by product id) captured on a native device,\n  // synced so the web paywall can show the user's real prices instead of hardcoded US defaults.\n  subscriptionPrices?: Partial<Record<string, string>>;\n  _versions?: unknown;\n}\nconst _VStorage = v.object({\n  history: v.array(VHistoryRecord),\n  deletedHistory: v.optional(v.array(v.number())),\n  stats: VStats,\n  deletedStats: v.optional(v.array(v.number())),\n  settings: VSettings,\n  currentProgramId: v.optional(v.string()),\n  version: v.string(),\n  programs: v.array(VProgram),\n  deletedPrograms: v.optional(v.array(v.number())),\n  reviewRequests: v.array(v.number()),\n  signupRequests: v.array(v.number()),\n  hearAboutUs: v.optional(_VHearAboutUs),\n  helps: v.array(v.string()),\n  tempUserId: v.string(),\n  email: v.optional(v.string()),\n  affiliates: v.record(v.string(), v.optional(VAffiliateData)),\n  subscription: VSubscription,\n  whatsNew: v.optional(v.string()),\n  progress: v.array(VHistoryRecord),\n  originalId: v.optional(v.number()),\n  id: v.optional(v.number()),\n  referrer: v.optional(v.string()),\n  landingPage: v.optional(v.string()),\n  attribution: v.optional(v.string()),\n  importSessions: v.optional(v.array(VImportSession)),\n  workoutOutcomes: v.optional(v.array(VWorkoutOutcome)),\n  subscriptionPrices: v.optional(v.record(v.string(), v.optional(v.string()))),\n  _versions: v.optional(v.unknown()),\n});\nconst _VStorageMatches: IEquals<v.InferOutput<typeof _VStorage>, IStorageRaw> = true;\nvoid _VStorageMatches;\nexport const VStorage: v.GenericSchema<IStorageRaw> = _VStorage;\n\nexport interface IMuscleGeneratorResponse {\n  targetMuscles: IMuscle[];\n  synergistMuscles: IMuscle[];\n  types: IExerciseKind[];\n}\nconst _VMuscleGeneratorResponse = v.object({\n  targetMuscles: v.array(VMuscle),\n  synergistMuscles: v.array(VMuscle),\n  types: v.array(VExerciseKind),\n});\nconst _VMuscleGeneratorResponseMatches: IEquals<\n  v.InferOutput<typeof _VMuscleGeneratorResponse>,\n  IMuscleGeneratorResponse\n> = true;\nvoid _VMuscleGeneratorResponseMatches;\nexport const VMuscleGeneratorResponse: v.GenericSchema<IMuscleGeneratorResponse> = _VMuscleGeneratorResponse;\n\nexport function vIs<T>(schema: v.GenericSchema<T>): { is: (u: unknown) => boolean } {\n  return { is: (u: unknown): boolean => v.safeParse(schema, u).success };\n}\n\nexport type IStorage = Omit<IStorageRaw, \"_versions\"> & {\n  _versions?: IVersions<Omit<IStorageRaw, \"_versions\">>;\n};\n\nexport type IPartialStorage = Omit<IStorage, \"history\" | \"stats\" | \"programs\"> &\n  Partial<Pick<IStorage, \"history\" | \"stats\" | \"programs\">>;\n\nexport type IProgramContentSettings = Partial<\n  Pick<ISettings, \"units\" | \"planner\" | \"muscleGroups\" | \"exerciseData\" | \"workoutSettings\"> & {\n    timers: Partial<ISettings[\"timers\"]>;\n  }\n>;\nexport type IWebEditorSettings = Partial<\n  Pick<ISettings, \"units\" | \"planner\" | \"muscleGroups\" | \"exerciseData\" | \"exercises\" | \"starredExercises\"> & {\n    timers: Partial<ISettings[\"timers\"]>;\n    workoutSettings: Partial<IWorkoutSettings>;\n    plannerUpdate: Partial<IPlannerSettings>;\n    muscleGroupsUpdate: IMuscleGroupsSettings[\"data\"];\n  }\n>;\n// Only /api/settings validates against this - the export/import paths keep passing it around unchecked\nconst _VWebEditorSettings = v.object({\n  units: v.optional(VUnit),\n  timers: v.optional(VSettingsTimers),\n  planner: v.optional(VPlannerSettings),\n  muscleGroups: v.optional(VMuscleGroupsSettings),\n  exerciseData: v.optional(v.record(v.string(), v.optional(VExerciseDataValue))),\n  workoutSettings: v.optional(v.partial(_VWorkoutSettings)),\n  exercises: v.optional(v.record(v.string(), v.optional(VCustomExercise))),\n  starredExercises: v.optional(v.record(VExerciseId, v.optional(v.boolean()))),\n  plannerUpdate: v.optional(v.partial(_VPlannerSettings)),\n  muscleGroupsUpdate: v.optional(_VMuscleGroupsSettings.entries.data),\n});\nconst _VWebEditorSettingsMatches: IEquals<v.InferOutput<typeof _VWebEditorSettings>, IWebEditorSettings> = true;\nvoid _VWebEditorSettingsMatches;\nexport const VWebEditorSettings: v.GenericSchema<IWebEditorSettings> = _VWebEditorSettings;\nexport const VDeletedSettingsKeys: v.GenericSchema<string[]> = v.array(v.string());\n\nexport type IDayData = {\n  week?: number;\n  day: number;\n  dayInWeek?: number;\n};\n\nexport type IShortDayData = {\n  week: number;\n  dayInWeek: number;\n};\n\nexport type IDaySetData = {\n  week: number;\n  dayInWeek: number;\n  setVariation: number;\n  set: number;\n};\n\nexport const ATOMIC_TYPES = [\n  \"history_record\",\n  \"progress_ui\",\n  \"set\",\n  \"equipment_data\",\n  \"custom_exercise\",\n  \"planner\",\n  \"stat\",\n  \"graph\",\n  \"graphs\",\n  \"subscription_receipt\",\n  \"affiliate\",\n  \"muscle_groups_settings\",\n  \"import_session\",\n  \"workout_outcome\",\n] as const;\n\nexport type IAtomicType = (typeof ATOMIC_TYPES)[number];\n\nexport const CONTROLLED_TYPES = [\"program\", \"gym\", \"progress\", \"history_entry\"] as const;\n\nexport type IControlledType = (typeof CONTROLLED_TYPES)[number];\n\nexport const CONTROLLED_FIELDS: Record<IControlledType, readonly string[]> = {\n  program: [\"name\", \"nextDay\", \"planner\"] as const,\n  gym: [\"name\", \"equipment\"] as const,\n  progress: [\n    \"entries\",\n    \"endTime\",\n    \"intervals\",\n    \"notes\",\n    \"deletedProgramExercises\",\n    \"userPromptedStateVars\",\n    \"updatedAt\",\n    \"changes\",\n    \"timerSince\",\n    \"timerMode\",\n    \"timer\",\n    \"timerEntryIndex\",\n    \"timerSetIndex\",\n    \"setTimer\",\n    \"setTimerGetReady\",\n    \"amrapModal\",\n    \"currentEntryIndex\",\n  ] as const,\n  history_entry: [\n    \"exercise\",\n    \"sets\",\n    \"warmupSets\",\n    \"index\",\n    \"isSuppressed\",\n    \"programExerciseId\",\n    \"state\",\n    \"vars\",\n    \"notes\",\n    \"changed\",\n    \"superset\",\n    \"updatePrints\",\n    \"updatePrintLines\",\n  ] as const,\n};\n\nexport const TYPE_ID_MAPPING: Record<IAtomicType | IControlledType, string> = {\n  affiliate: \"id\",\n  program: \"clonedAt\",\n  history_record: \"id\",\n  set: \"id\",\n  progress_ui: \"id\",\n  history_entry: \"id\",\n  progress: \"startTime\",\n  gym: \"id\",\n  custom_exercise: \"id\",\n  stat: \"timestamp\",\n  equipment_data: \"id\",\n  planner: \"name\",\n  subscription_receipt: \"id\",\n  graph: \"id\",\n  graphs: \"id\",\n  muscle_groups_settings: \"vtype\",\n  import_session: \"id\",\n  workout_outcome: \"id\",\n};\n\nexport const DICTIONARY_FIELDS = [\n  \"settings.exercises\",\n  \"settings.exerciseData\",\n  \"settings.gyms.equipment\",\n  \"affiliates\",\n] as const;\n\nexport type IDictionaryFieldPath = (typeof DICTIONARY_FIELDS)[number];\n\nexport const EXCLUDED_FIELDS: Partial<Record<IControlledType, readonly string[]>> = {\n  progress: [\"ui\"] as const,\n};\n\nexport const STORAGE_VERSION_TYPES: IVersionTypes<IAtomicType, IControlledType> = {\n  atomicTypes: ATOMIC_TYPES,\n  controlledTypes: CONTROLLED_TYPES,\n  typeIdMapping: TYPE_ID_MAPPING,\n  controlledFields: CONTROLLED_FIELDS,\n  excludedFields: EXCLUDED_FIELDS,\n  dictionaryFields: DICTIONARY_FIELDS,\n  compactionThresholds: {\n    \"subscription.apple\": 14 * 24 * 60 * 60 * 1000,\n    \"subscription.google\": 14 * 24 * 60 * 60 * 1000,\n    history: 180 * 24 * 60 * 60 * 1000,\n    progress: 30 * 24 * 60 * 60 * 1000,\n    workoutOutcomes: 30 * 24 * 60 * 60 * 1000,\n  },\n  typeValidators: {\n    progress: vIs(VHistoryRecord),\n  },\n} as const;\n","import { IAttributionData } from \"../models/state\";\n\nexport interface IAnalyticsPurchaseEvent {\n  productId: string;\n  price: number;\n  currency: string;\n  transactionId?: string;\n  transactionDate?: number;\n}\n\nexport interface IAnalyticsInitOptions {\n  userId?: string;\n  onAttribution: (data: IAttributionData) => void;\n  onLandingPage?: (landingPage: string) => void;\n}\n\nexport function Analytics_initialize(_opts: IAnalyticsInitOptions): () => void {\n  return () => undefined;\n}\n\nexport function Analytics_setUserId(_userId: string): void {}\n\nexport function Analytics_trackFinishWorkout(): void {}\n\nexport function Analytics_trackSignUp(): void {}\n\nexport function Analytics_trackPurchase(_event: IAnalyticsPurchaseEvent): void {}\n\nexport const Analytics_platform = \"web\";\n\nexport type { IAttributionData };\n","import { WatchHost_appVersion, WatchHost_isAvailable } from \"./watchHost\";\n\nexport interface IAppAttribution {\n  isMobile: boolean;\n  iOSVersion?: number;\n  androidVersion?: number;\n  iOSOSVersion?: number;\n  androidOSVersion?: number;\n  deviceModel?: string;\n}\n\nexport function AppAttribution_get(): IAppAttribution {\n  const isWatch = WatchHost_isAvailable();\n  return {\n    isMobile: isWatch,\n    iOSVersion: isWatch ? WatchHost_appVersion() : undefined,\n  };\n}\n","import { Platform } from \"react-native\";\n\ndeclare let __HOST__: string;\n\nexport type IAppleAuthResult =\n  | { type: \"success\"; id_token: string; code: string }\n  | { type: \"cancelled\" }\n  | { type: \"error\"; error: string };\n\ntype IAppleAuthSdk = NonNullable<Window[\"AppleID\"]>[\"auth\"];\n\nconst mountSdkWaitMs = 10000;\n// Browsers drop transient user activation ~5s after the click, and signIn() opens a popup, so waiting\n// out the full mount-time budget here would just trade the init error for a blocked popup. Bailing early\n// instead means the retry succeeds — by then the mount-time wait has init'ed the SDK.\nconst clickSdkWaitMs = 2000;\nconst sdkPollIntervalMs = 50;\n\nconst cancelErrorCodes = [\"popup_closed_by_user\", \"user_cancelled_authorize\", \"user_trigger_new_signin_flow\"];\n\n// appleid.auth.js is loaded with `async`, so it may land after the account screen mounts. Polling instead of\n// checking once means a slow script (common in Firefox, which rarely serves it from a warm cache) still gets\n// init'ed rather than silently leaving signIn() to throw 'The \"init\" function must be called first.'\nasync function waitForSdk(timeoutMs: number): Promise<IAppleAuthSdk | undefined> {\n  const deadline = Date.now() + timeoutMs;\n  while (window.AppleID?.auth == null) {\n    if (Date.now() > deadline) {\n      return undefined;\n    }\n    await new Promise((resolve) => setTimeout(resolve, sdkPollIntervalMs));\n  }\n  return window.AppleID.auth;\n}\n\nexport async function AppleAuth_init(timeoutMs: number = mountSdkWaitMs): Promise<boolean> {\n  if (Platform.OS !== \"web\" || typeof window === \"undefined\") {\n    return false;\n  }\n  const auth = await waitForSdk(timeoutMs);\n  if (auth == null) {\n    return false;\n  }\n  auth.init({\n    clientId: \"com.liftosaur.www.signinapple\",\n    scope: \"email\",\n    redirectURI: `${__HOST__}/appleauthcallback.html`,\n    usePopup: true,\n  });\n  return true;\n}\n\nexport async function AppleAuth_signIn(): Promise<IAppleAuthResult> {\n  // When the SDK is already loaded this resolves without yielding to the event loop, so the popup opened by\n  // signIn() still runs under the click's transient user activation and isn't blocked.\n  const isInitialized = await AppleAuth_init(clickSdkWaitMs);\n  if (!isInitialized || window.AppleID?.auth == null) {\n    return { type: \"error\", error: \"Apple Sign In is still loading. Please try again in a moment.\" };\n  }\n  try {\n    const response = await window.AppleID.auth.signIn();\n    const { id_token, code } = response.authorization;\n    if (id_token == null || code == null) {\n      return { type: \"error\", error: \"Apple Sign In didn't return the credentials\" };\n    }\n    return { type: \"success\", id_token, code };\n  } catch (e) {\n    const error = e as { error?: string } | undefined;\n    if (error?.error != null && cancelErrorCodes.indexOf(error.error) !== -1) {\n      return { type: \"cancelled\" };\n    }\n    return { type: \"error\", error: \"Couldn't sign in with Apple. Please try again.\" };\n  }\n}\n","import { createContext, useCallback, useContext } from \"react\";\nimport type { IDispatch } from \"../ducks/types\";\nimport { Thunk_log, Thunk_postevent } from \"../ducks/thunks\";\n\nexport const ClickTrackingContext = createContext<IDispatch | null>(null);\n\nexport function useTrackClick(): (name: string, className?: string, extra?: Record<string, string | number>) => void {\n  const dispatch = useContext(ClickTrackingContext);\n  return useCallback(\n    (name: string, className?: string, extra?: Record<string, string | number>) => {\n      if (!dispatch) {\n        return;\n      }\n      const lsClass = className?.split(/\\s+/).find((c) => c.startsWith(\"ls-\"));\n      const eventName = lsClass || `nm-${name}`;\n      dispatch(Thunk_postevent(\"click-\" + eventName, extra));\n      if (lsClass) {\n        dispatch(Thunk_log(lsClass));\n      }\n    },\n    [dispatch]\n  );\n}\n","import { IEither } from \"./types\";\n\nexport async function ClipboardUtils_paste(): Promise<string | undefined> {\n  if (!navigator.clipboard) {\n    return fallbackReadTextFromClipboard();\n  } else {\n    try {\n      const result = await readTextFromClipboard();\n      if (result.success) {\n        return result.data;\n      } else {\n        return fallbackReadTextFromClipboard();\n      }\n    } catch (e) {\n      return fallbackReadTextFromClipboard();\n    }\n  }\n}\n\nexport async function ClipboardUtils_copy(text: string): Promise<void> {\n  if (!navigator.clipboard) {\n    fallbackCopyTextToClipboard(text);\n  } else {\n    try {\n      await copyTextToClipboard(text);\n      fallbackCopyTextToClipboard(text);\n    } catch (e) {\n      fallbackCopyTextToClipboard(text);\n    }\n  }\n}\n\nfunction fallbackCopyTextToClipboard(text: string): void {\n  window.disableCopying = true;\n  const textArea = document.createElement(\"textarea\");\n  textArea.value = text;\n\n  textArea.style.top = \"0\";\n  textArea.style.left = \"0\";\n  textArea.style.position = \"fixed\";\n\n  document.body.appendChild(textArea);\n  textArea.focus();\n  textArea.select();\n\n  document.execCommand(\"copy\");\n  document.body.removeChild(textArea);\n  window.disableCopying = false;\n}\n\nfunction copyTextToClipboard(text: string): Promise<boolean> {\n  return new Promise(async (resolve, reject) => {\n    try {\n      navigator.permissions\n        .query({ name: \"clipboard-write\" as PermissionName })\n        .then(async (result) => {\n          if (result.state === \"granted\" || result.state === \"prompt\") {\n            await navigator.clipboard.writeText(text);\n            resolve(true);\n          } else {\n            resolve(false);\n          }\n        })\n        .catch(async () => {\n          try {\n            await navigator.clipboard.writeText(text);\n            resolve(true);\n          } catch (e) {\n            resolve(false);\n          }\n        });\n    } catch (_) {\n      try {\n        await navigator.clipboard.writeText(text);\n        resolve(true);\n      } catch (e) {\n        resolve(false);\n      }\n    }\n  });\n}\n\nexport async function ClipboardUtils_canReadTextFromClipboard(): Promise<boolean> {\n  try {\n    const queryResult = await navigator.permissions.query({ name: \"clipboard-read\" as PermissionName });\n    return queryResult.state === \"granted\" || queryResult.state === \"prompt\";\n  } catch (_) {\n    return false;\n  }\n}\n\nasync function readTextFromClipboard(): Promise<IEither<string | undefined, undefined>> {\n  try {\n    const queryResult = await navigator.permissions.query({ name: \"clipboard-read\" as PermissionName });\n    if (queryResult.state === \"granted\" || queryResult.state === \"prompt\") {\n      return { success: true, data: await navigator.clipboard.readText() };\n    } else {\n      throw new Error(\"Can't read from clipboard\");\n    }\n  } catch (_) {\n    try {\n      return { success: true, data: await navigator.clipboard.readText() };\n    } catch {\n      return { success: false, error: undefined };\n    }\n  }\n}\n\nfunction fallbackReadTextFromClipboard(): string | undefined {\n  const contentEditableElement = document.createElement(\"div\");\n  contentEditableElement.contentEditable = \"true\";\n  document.body.appendChild(contentEditableElement);\n  contentEditableElement.focus();\n\n  document.execCommand(\"paste\");\n  const result = contentEditableElement.innerText;\n  document.body.removeChild(contentEditableElement);\n  return result;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ObjectUtils_isEqual } from \"./object\";\n\nexport interface ICollectionDiff<T> {\n  changed: T[];\n  removedKeys: string[];\n}\n\nexport function CollectionUtils_diffByKey<T>(previous: T[], next: T[], keyOf: (item: T) => string): ICollectionDiff<T> {\n  const previousByKey = new Map(previous.map((item) => [keyOf(item), item]));\n  const nextKeys = new Set(next.map(keyOf));\n  const changed = next.filter((item) => {\n    const before = previousByKey.get(keyOf(item));\n    return before == null || !ObjectUtils_isEqual(before as Record<string, unknown>, item as Record<string, unknown>);\n  });\n  const removedKeys = Array.from(previousByKey.keys()).filter((key) => !nextKeys.has(key));\n  return { changed, removedKeys };\n}\n\n// inGroupsOf([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 3).forEach((e) => print(e));\n//\n// [\"1\", \"2\", \"3\"]\n// [\"4\", \"5\", \"6\"]\n// [\"7\", \"8\", \"9\"]\n// [\"10\"]\nexport function CollectionUtils_inGroupsOf<T>(length: number, collection: T[]): T[][] {\n  if (collection.length > 0) {\n    const result: T[][] = [[]];\n    collection.forEach((item) => {\n      let lastColl = result[result.length - 1];\n      if (lastColl.length >= length) {\n        lastColl = [];\n        result.push(lastColl);\n      }\n      lastColl.push(item);\n    });\n\n    return result;\n  } else {\n    return [];\n  }\n}\n\nexport function CollectionUtils_splitIntoNGroups<T>(coll: T[], numberOfGroups: number): T[][] {\n  const result: T[][] = [];\n  for (let i = 0; i < numberOfGroups; i += 1) {\n    result.push([]);\n  }\n  let index = 0;\n  for (const item of coll) {\n    result[index].push(item);\n    index += 1;\n    if (index >= numberOfGroups) {\n      index = 0;\n    }\n  }\n  return result;\n}\n\nexport function CollectionUtils_inGroupsOfFilled<T>(\n  length: number,\n  collection: T[],\n  shouldFill?: boolean\n): (T | undefined)[][] {\n  const result = CollectionUtils_inGroupsOf(length, collection) as (T | undefined)[][];\n  if (result.length > 0) {\n    const lastColl = result[result.length - 1];\n    if (lastColl != null) {\n      for (let i = 0; i < length; i += 1) {\n        lastColl[i] = lastColl[i] ?? undefined;\n      }\n    }\n  }\n  return result;\n}\n\nexport function CollectionUtils_groupBy<T>(items: T[], cond: (last: T, item: T) => boolean): T[][] {\n  return items.reduce<T[][]>(\n    (memo, set) => {\n      let lastGroup = memo[memo.length - 1];\n      const last = lastGroup[lastGroup.length - 1];\n      if (last != null && cond(last, set)) {\n        memo.push([]);\n        lastGroup = memo[memo.length - 1];\n      }\n      lastGroup.push(set);\n      return memo;\n    },\n    [[]]\n  );\n}\n\nexport function CollectionUtils_repeat<T>(el: T, length: number): T[] {\n  const arr: T[] = [];\n  for (let i = 0; i < length; i += 1) {\n    arr.push(el);\n  }\n  return arr;\n}\n\nexport function CollectionUtils_concatBy<T>(from: T[], to: T[], condition: (el: T) => string): T[] {\n  const map = [...from, ...to].reduce<Record<string, T>>((memo, item) => {\n    memo[condition(item)] = item;\n    return memo;\n  }, {});\n  return Object.keys(map).map((key) => map[key]);\n}\n\nexport function CollectionUtils_compatBy<T>(arr: T[], condition: (el: T) => string): T[] {\n  const map = arr.reduce<Record<string, T>>((memo, item) => {\n    memo[condition(item)] = item;\n    return memo;\n  }, {});\n  return Object.keys(map).map((key) => map[key]);\n}\n\nexport function CollectionUtils_compact<T>(arr: (T | undefined)[]): T[] {\n  return arr.filter((i) => i) as T[];\n}\n\nexport function CollectionUtils_groupByKey<\n  T,\n  K extends keyof T,\n  U extends T[K] extends string ? string : T[K] extends number ? number : never,\n>(arr: T[], key: K): Partial<Record<U, T[]>> {\n  return arr.reduce<Partial<Record<U, T[]>>>((memo, item) => {\n    const value = item[key] as unknown as U;\n    memo[value] = memo[value] || [];\n    memo[value]!.push(item);\n    return memo;\n  }, {});\n}\n\nexport function CollectionUtils_groupByExpr<T>(arr: T[], expr: (item: T) => string): Partial<Record<string, T[]>> {\n  return arr.reduce<Partial<Record<string, T[]>>>((memo, item) => {\n    const value = expr(item);\n    memo[value] = memo[value] || [];\n    memo[value]!.push(item);\n    return memo;\n  }, {});\n}\n\nexport function CollectionUtils_groupByKeyUniq<\n  T,\n  K extends keyof T,\n  U extends T[K] extends string ? string : T[K] extends number ? number : never,\n>(arr: T[], key: K): Partial<Record<U, T>> {\n  return arr.reduce<Partial<Record<U, T>>>((memo, item) => {\n    const value = item[key] as unknown as U;\n    memo[value] = item;\n    return memo;\n  }, {});\n}\n\nexport function CollectionUtils_groupByExprUniq<T>(arr: T[], expr: (item: T) => string): Partial<Record<string, T>> {\n  return arr.reduce<Partial<Record<string, T>>>((memo, item) => {\n    const value = expr(item);\n    memo[value] = item;\n    return memo;\n  }, {});\n}\n\nexport function CollectionUtils_collectToSet<T, K extends keyof T>(arr: T[], key: K): Set<T[K]> {\n  const set = new Set<T[K]>();\n  for (const el of arr) {\n    set.add(el[key]);\n  }\n  return set;\n}\n\nexport function CollectionUtils_collectToSetTransform<T, K extends keyof T, U>(\n  arr: T[],\n  key: K,\n  transformer: (val: T[K]) => U\n): Set<U> {\n  const set = new Set<U>();\n  for (const el of arr) {\n    set.add(transformer(el[key]));\n  }\n  return set;\n}\n\nexport function CollectionUtils_flat<T>(from: T[][]): T[] {\n  return from.reduce((acc, val) => acc.concat(val), []);\n}\n\nexport function CollectionUtils_sort<T>(arr: T[], compareFn?: (a: T, b: T) => number): T[] {\n  const arrCopy = [...arr];\n  arrCopy.sort(compareFn);\n  return arrCopy;\n}\n\nexport function CollectionUtils_immutableSort<T>(arr: T[], compare: (a: T, b: T) => number): T[] {\n  for (let i = 1; i < arr.length; i++) {\n    if (compare(arr[i - 1], arr[i]) > 0) {\n      return arr.slice().sort(compare);\n    }\n  }\n  return arr;\n}\n\nexport function CollectionUtils_reorder<T>(arr: T[], start: number, end: number): T[] {\n  const newDays = [...arr];\n  const [daysToMove] = newDays.splice(start, 1);\n  newDays.splice(end, 0, daysToMove);\n  return newDays;\n}\n\nexport function CollectionUtils_sortInOrder<T extends {}, K extends keyof T>(arr: T[], key: K, order: T[K][]): T[] {\n  const arrCopy = [...arr];\n  arrCopy.sort((a, b) => {\n    const aIndex = order.indexOf(a[key]);\n    const bIndex = order.indexOf(b[key]);\n    if (aIndex === -1) {\n      return 1;\n    } else if (bIndex === -1) {\n      return -1;\n    } else {\n      return aIndex - bIndex;\n    }\n  });\n  return arrCopy;\n}\n\nexport function CollectionUtils_sortByMultiple<T extends {}, K extends keyof T>(\n  arr: T[],\n  keys: K[],\n  isReverse?: boolean\n): T[] {\n  const arrCopy = [...arr];\n  arrCopy.sort((a, b) => {\n    for (const key of keys) {\n      const aVal = a[key] as any;\n      const bVal = b[key] as any;\n      if (aVal === bVal) {\n        continue;\n      } else {\n        if (typeof aVal === \"number\" && typeof bVal === \"number\") {\n          return isReverse ? bVal - aVal : aVal - bVal;\n        } else if (typeof aVal === \"string\" && typeof bVal === \"string\") {\n          return isReverse ? bVal.localeCompare(aVal) : aVal.localeCompare(bVal);\n        } else if (typeof aVal === \"boolean\" && typeof bVal === \"boolean\") {\n          return isReverse ? (bVal ? -1 : 1) : aVal ? -1 : 1;\n        } else if (aVal == null || bVal == null) {\n          return isReverse ? (bVal == null ? -1 : 1) : aVal == null ? -1 : 1;\n        }\n      }\n    }\n    return 0;\n  });\n\n  return arrCopy as any;\n}\n\nexport function CollectionUtils_sortBy<T extends {}, K extends keyof T>(\n  arr: T[],\n  key: K,\n  isReverse?: boolean\n): T[K] extends number ? T[] : never {\n  const arrCopy = [...arr];\n  arrCopy.sort((a, b) => {\n    const aVal = a[key] as any;\n\n    const bVal = b[key] as any;\n    return isReverse ? bVal - aVal : aVal - bVal;\n  });\n\n  return arrCopy as any;\n}\n\nexport function CollectionUtils_sortByExpr<T extends {}>(arr: T[], fn: (item: T) => number, isReverse?: boolean): T[] {\n  const arrCopy = [...arr];\n  arrCopy.sort((a, b) => {\n    const aVal = fn(a) as any;\n\n    const bVal = fn(b) as any;\n    return isReverse ? bVal - aVal : aVal - bVal;\n  });\n\n  return arrCopy as any;\n}\n\nexport function CollectionUtils_diff<T>(from: T[], to: T[]): T[] {\n  return from.filter((x) => !to.includes(x)).concat(to.filter((x) => !from.includes(x)));\n}\n\nexport function CollectionUtils_diffBy<T extends {}>(from: T[], to: T[], key: keyof T): T[] {\n  return from\n    .filter((x) => !to.some((y) => x[key] === y[key]))\n    .concat(to.filter((x) => !from.some((y) => x[key] === y[key])));\n}\n\nexport function CollectionUtils_remove<T>(from: T[], item: T): T[] {\n  return from.filter((t) => t !== item);\n}\n\nexport function CollectionUtils_removeAll<T>(from: T[], item: T[]): T[] {\n  return from.filter((t) => !item.includes(t));\n}\n\nexport function CollectionUtils_removeAt<T>(from: T[], index: number): T[] {\n  const result = [...from];\n  result.splice(index, 1);\n  return result;\n}\n\nexport function CollectionUtils_setAt<T>(from: T[], index: number, item: T): T[] {\n  return from.map((e, i) => (i === index ? item : e));\n}\n\nexport function CollectionUtils_setBy<T extends {}, K extends keyof T, V extends T[K]>(\n  from: T[],\n  key: K,\n  value: V,\n  newItem: T\n): T[] {\n  return from.map((e) => (e[key] === value ? newItem : e));\n}\n\nexport function CollectionUtils_setOrAddBy<T extends {}, K extends keyof T, V extends T[K]>(\n  from: T[],\n  key: K,\n  value: V,\n  newItem: T\n): T[] {\n  const hasKeyValue = from.some((e) => e[key] === value);\n  if (hasKeyValue) {\n    return CollectionUtils_setBy(from, key, value, newItem);\n  } else {\n    return [...from, newItem];\n  }\n}\n\nexport function CollectionUtils_removeBy<T extends {}, K extends keyof T, V extends T[K]>(\n  from: T[],\n  key: K,\n  value: V\n): T[] {\n  return from.filter((t) => t[key] !== value);\n}\n\nexport function CollectionUtils_nonnull<T>(from: (T | undefined)[]): T[] {\n  return from.filter((t) => t != null) as T[];\n}\n\nexport function CollectionUtils_uniqBy<T extends {}>(from: T[], key: keyof T): T[] {\n  const set = new Set();\n  const result = [];\n  for (const el of from) {\n    const id = el[key];\n    if (!set.has(id)) {\n      result.push(el);\n      set.add(id);\n    }\n  }\n  return result;\n}\n\nexport function CollectionUtils_uniqByExpr<T extends {}, V>(from: T[], fn: (item: T) => V): T[] {\n  const set = new Set();\n  const result = [];\n  for (const el of from) {\n    const id = fn(el);\n    if (!set.has(id)) {\n      result.push(el);\n      set.add(id);\n    }\n  }\n  return result;\n}\n\nexport function CollectionUtils_findBy<T extends {}, K extends keyof T>(from: T[], key: K, value: T[K]): T | undefined {\n  let result: T | undefined = undefined;\n  for (const el of from) {\n    if (el[key] === value) {\n      result = el;\n      break;\n    }\n  }\n  return result;\n}\n\nexport function CollectionUtils_findIndexReverse<T>(from: T[], cb: (item: T) => boolean): number {\n  for (let i = from.length - 1; i >= 0; i -= 1) {\n    if (cb(from[i])) {\n      return i;\n    }\n  }\n  return -1;\n}\n\nexport function CollectionUtils_merge<T>(from: T[], to: T[]): T[] {\n  return Array.from(new Set([...from, ...to]));\n}\n\nexport function CollectionUtils_compressArray(arr: number[], threshold: number): string[] {\n  const result: string[] = [];\n  let count = 1;\n\n  for (let i = 1; i <= arr.length; i++) {\n    if (arr[i] === arr[i - 1]) {\n      count += 1;\n    } else {\n      if (count >= threshold) {\n        result.push(`${count}x${arr[i - 1]}`);\n      } else {\n        while (count > 0) {\n          result.push(`${arr[i - 1]}`);\n          count -= 1;\n        }\n      }\n      count = 1;\n    }\n  }\n\n  return result;\n}\n\nexport function CollectionUtils_areSortedInSameOrder<T, U>(\n  coll1: T[],\n  coll2: U[],\n  areEqual: (a: T, b: U) => boolean\n): boolean {\n  if (coll1.length !== coll2.length) {\n    return false;\n  }\n  for (let i = 0; i < coll1.length; i += 1) {\n    if (!areEqual(coll1[i], coll2[i])) {\n      return false;\n    }\n  }\n  return true;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nexport type ICollectorFn<T, U> = { fn: (acc: U, item: T) => U; initial: U };\n\ntype IValuesFromCallbacks<V> = V extends [infer A, ...infer B]\n  ? A extends ICollectorFn<any, infer C>\n    ? [C, ...IValuesFromCallbacks<B>]\n    : never\n  : [];\n\nexport class Collector<ItemType, T extends ICollectorFn<ItemType, any>[] = []> {\n  private readonly callbacks: T;\n\n  public static build<IT>(items: IT[]): Collector<IT> {\n    return new Collector(items, []);\n  }\n\n  private constructor(\n    private readonly collection: ItemType[],\n    callbacks: T\n  ) {\n    this.callbacks = callbacks;\n  }\n\n  public addFn<U>(\n    callback: ICollectorFn<ItemType, U>\n  ): Collector<ItemType, T extends never[] ? [ICollectorFn<ItemType, U>] : [...T, ICollectorFn<ItemType, U>]> {\n    return new Collector(this.collection, [...this.callbacks, callback]) as any;\n  }\n\n  public add<U>(\n    fn: ICollectorFn<ItemType, U>[\"fn\"],\n    initial: U\n  ): Collector<ItemType, T extends never[] ? [ICollectorFn<ItemType, U>] : [...T, ICollectorFn<ItemType, U>]> {\n    const callback = { fn, initial };\n    return new Collector(this.collection, [...this.callbacks, callback]) as any;\n  }\n\n  public run(): IValuesFromCallbacks<T> {\n    const values = this.callbacks.map((callback) => callback.initial);\n    for (const item of this.collection) {\n      for (let i = 0; i < this.callbacks.length; i += 1) {\n        values[i] = this.callbacks[i].fn(values[i], item);\n      }\n    }\n    return values as any;\n  }\n}\n","export function CSV_toString(data: (number | string | null)[][]): string {\n  return data\n    .map((line) => {\n      return line\n        .map((value) => {\n          let shouldWrapIntoQuotes = false;\n          if (typeof value === \"string\") {\n            if (value.indexOf(\",\") !== -1 || value.indexOf(\"\\n\") !== -1 || value.indexOf(\"\\r\") !== -1) {\n              shouldWrapIntoQuotes = true;\n            }\n            if (value.indexOf('\"') !== -1) {\n              shouldWrapIntoQuotes = true;\n              value = value.replace(/\"/g, '\"\"');\n            }\n            if (shouldWrapIntoQuotes) {\n              value = `\"${value}\"`;\n            }\n          }\n          if (value === null) {\n            value = \"\";\n          }\n          return value;\n        })\n        .join(\",\");\n    })\n    .join(\"\\n\");\n}\n","export function DateUtils_format(dateStr: string | Date | number, hideWeekday?: boolean, hideYear?: boolean): string {\n  let date;\n  if (typeof dateStr === \"string\") {\n    date = new Date(Date.parse(dateStr));\n  } else if (typeof dateStr === \"number\") {\n    date = new Date(dateStr);\n  } else {\n    date = dateStr;\n  }\n  return date.toLocaleDateString(undefined, {\n    weekday: !hideWeekday ? \"short\" : undefined,\n    year: !hideYear ? \"numeric\" : undefined,\n    month: \"short\",\n    day: \"numeric\",\n  });\n}\n\nexport function DateUtils_formatDayMonth(timestamp: number, now: number = Date.now()): string {\n  const isThisYear = new Date(timestamp).getFullYear() === new Date(now).getFullYear();\n  return DateUtils_format(timestamp, true, isThisYear);\n}\n\nexport function DateUtils_formatWithTime(dateStr: string | Date | number): string {\n  let date;\n  if (typeof dateStr === \"string\") {\n    date = new Date(Date.parse(dateStr));\n  } else if (typeof dateStr === \"number\") {\n    date = new Date(dateStr);\n  } else {\n    date = dateStr;\n  }\n  return date.toLocaleDateString(undefined, {\n    weekday: \"short\",\n    year: \"numeric\",\n    month: \"short\",\n    day: \"numeric\",\n    hour: \"numeric\",\n    minute: \"numeric\",\n  });\n}\n\nexport function DateUtils_formatYYYYMMDD(date: Date | string | number, separator: string = \"-\"): string {\n  const d = new Date(date);\n  let month = `${d.getMonth() + 1}`;\n  let day = `${d.getDate()}`;\n  const year = `${d.getFullYear()}`;\n\n  if (month.length < 2) {\n    month = `0${month}`;\n  }\n  if (day.length < 2) {\n    day = `0${day}`;\n  }\n\n  return [year, month, day].join(separator);\n}\n\nexport function DateUtils_formatUTCYYYYMMDD(date: Date | string | number): string {\n  const d = new Date(date);\n  let month = `${d.getUTCMonth() + 1}`;\n  let day = `${d.getUTCDate()}`;\n  const year = `${d.getUTCFullYear()}`;\n\n  if (month.length < 2) {\n    month = `0${month}`;\n  }\n  if (day.length < 2) {\n    day = `0${day}`;\n  }\n\n  return [year, month, day].join(\"-\");\n}\n\nexport function DateUtils_formatUTCYYYYMMDDHHMM(date: Date | string | number): string {\n  const d = new Date(date);\n  let minutes = `${d.getUTCMinutes()}`;\n  let hours = `${d.getUTCHours()}`;\n  let day = `${d.getUTCDate()}`;\n  let month = `${d.getUTCMonth() + 1}`;\n  const year = `${d.getUTCFullYear()}`;\n\n  if (minutes.length < 2) {\n    minutes = `0${minutes}`;\n  }\n  if (hours.length < 2) {\n    hours = `0${hours}`;\n  }\n  if (month.length < 2) {\n    month = `0${month}`;\n  }\n  if (day.length < 2) {\n    day = `0${day}`;\n  }\n\n  return `${[year, month, day].join(\"-\")} ${hours}:${minutes}`;\n}\n\nexport function DateUtils_parseYYYYMMDDHHMM(dateStr: string): Date | undefined {\n  const match = dateStr.match(/^(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})$/);\n  if (match != null) {\n    const [, year, month, day, hours, minutes, seconds] = match;\n    return new Date(\n      new Date(\n        parseInt(year, 10),\n        parseInt(month, 10) - 1,\n        parseInt(day, 10),\n        parseInt(hours, 10),\n        parseInt(minutes, 10),\n        parseInt(seconds, 10)\n      )\n    );\n  }\n  return undefined;\n}\n\nconst monthNames = [\n  \"january\",\n  \"february\",\n  \"march\",\n  \"april\",\n  \"may\",\n  \"june\",\n  \"july\",\n  \"august\",\n  \"september\",\n  \"october\",\n  \"november\",\n  \"december\",\n];\n\nfunction monthIndexFromName(word: string): number | undefined {\n  if (word.length < 3) {\n    return undefined;\n  }\n  const index = monthNames.findIndex((name) => name.startsWith(word));\n  return index === -1 ? undefined : index;\n}\n\n// Hermes only parses ISO 8601 strings, so locale formats like \"Oct 17, 2026, 8:30 AM\" need this\nexport function DateUtils_parseNamedMonthDateTime(dateStr: string): number | undefined {\n  const tokens = dateStr.toLowerCase().match(/\\d+:\\d+(?::\\d+)?|[a-z]+|\\d+/g) ?? [];\n  let year: number | undefined;\n  let month: number | undefined;\n  let day: number | undefined;\n  let time: number[] | undefined;\n  let meridiem: string | undefined;\n  for (const token of tokens) {\n    if (token.includes(\":\")) {\n      if (time != null) {\n        return undefined;\n      }\n      time = token.split(\":\").map(Number);\n    } else if (token === \"am\" || token === \"pm\") {\n      if (meridiem != null) {\n        return undefined;\n      }\n      meridiem = token;\n    } else if (/^[a-z]/.test(token)) {\n      if (month != null) {\n        return undefined;\n      }\n      month = monthIndexFromName(token);\n      if (month == null) {\n        return undefined;\n      }\n    } else if (token.length === 4 && year == null) {\n      year = Number(token);\n    } else if (token.length <= 2 && day == null) {\n      day = Number(token);\n    } else {\n      return undefined;\n    }\n  }\n  if (year == null || month == null || day == null || time == null) {\n    return undefined;\n  }\n  const [rawHour, minute, second = 0] = time;\n  if (meridiem != null ? rawHour < 1 || rawHour > 12 : rawHour > 23) {\n    return undefined;\n  }\n  const hour = meridiem != null ? (rawHour % 12) + (meridiem === \"pm\" ? 12 : 0) : rawHour;\n  if (minute > 59 || second > 59) {\n    return undefined;\n  }\n  const date = new Date(year, month, day, hour, minute, second);\n  return date.getDate() === day ? date.getTime() : undefined;\n}\n\nexport function DateUtils_formatYYYYMMDDHHMM(date: Date | string | number, separator: string = \"\"): string {\n  const d = new Date(date);\n  let seconds = `${d.getSeconds()}`;\n  let minutes = `${d.getMinutes()}`;\n  let hours = `${d.getHours()}`;\n  let day = `${d.getDate()}`;\n  let month = `${d.getMonth() + 1}`;\n  const year = `${d.getFullYear()}`;\n\n  if (seconds.length < 2) {\n    seconds = `0${seconds}`;\n  }\n  if (minutes.length < 2) {\n    minutes = `0${minutes}`;\n  }\n  if (hours.length < 2) {\n    hours = `0${hours}`;\n  }\n  if (month.length < 2) {\n    month = `0${month}`;\n  }\n  if (day.length < 2) {\n    day = `0${day}`;\n  }\n\n  return [year, month, day, hours, minutes, seconds].join(separator);\n}\n\nexport function DateUtils_firstDayOfWeekTimestamp(date: Date | number, startWeekFromMonday?: boolean): number {\n  const d = new Date(date);\n  let weekDay = d.getDay();\n  if (startWeekFromMonday && weekDay === 0) {\n    weekDay = 7;\n  }\n  const currentDay = d.getDate();\n  const beginningOfWeekDay = currentDay - weekDay + (startWeekFromMonday ? 1 : 0);\n  const newDate = new Date(d.getFullYear(), d.getMonth(), beginningOfWeekDay);\n  return newDate.getTime();\n}\n\nexport function DateUtils_lastDayOfWeekTimestamp(date: Date | number, startWeekFromMonday?: boolean): number {\n  const d = new Date(date);\n  let weekDay = d.getDay();\n  if (startWeekFromMonday && weekDay === 0) {\n    weekDay = 7;\n  }\n  const currentDay = d.getDate();\n  const endOfWeekDay = currentDay + (7 - weekDay) + (startWeekFromMonday ? 1 : 0);\n  const newDate = new Date(d.getFullYear(), d.getMonth(), endOfWeekDay, 23, 59, 59);\n  return newDate.getTime();\n}\n\nexport function DateUtils_formatHHMMSS(date: Date | string | number, withMs: boolean = false): string {\n  const d = new Date(date);\n  let seconds = `${d.getSeconds()}`;\n  let minutes = `${d.getMinutes()}`;\n  let hours = `${d.getHours()}`;\n\n  if (seconds.length < 2) {\n    seconds = `0${seconds}`;\n  }\n  if (minutes.length < 2) {\n    minutes = `0${minutes}`;\n  }\n  if (hours.length < 2) {\n    hours = `0${hours}`;\n  }\n  let result = [hours, minutes, seconds].join(\":\");\n  if (withMs) {\n    result += `.${d.getMilliseconds()}`;\n  }\n  return result;\n}\n\nexport function DateUtils_fromYYYYMMDD(dateStr: string, separator: string = \"-\"): Date {\n  const regexp = new RegExp(`^(\\\\d{4})${separator}(\\\\d{2})${separator}(\\\\d{2})$`);\n  const regexpMatchArray = dateStr.match(regexp);\n  if (regexpMatchArray) {\n    const [, year, month, day] = regexpMatchArray;\n    const date = new Date(parseInt(year, 10), parseInt(month, 10) - 1, parseInt(day, 10));\n    return date;\n  } else {\n    return new Date(Date.UTC(1970, 1, 1));\n  }\n}\n\nexport function DateUtils_fromYYYYMMDDStr(dateStr: string, separator: string = \"-\"): string {\n  return DateUtils_fromYYYYMMDD(dateStr, separator).toISOString();\n}\n\nexport function DateUtils_yearAndMonth(date: Date | string | number): [number, number] {\n  const d = new Date(date);\n  return [d.getUTCFullYear(), d.getUTCMonth()];\n}\n\nexport function DateUtils_startOfUTCMonth(date: Date | string | number): number {\n  const d = new Date(date);\n  return Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), 1);\n}\n\nexport function DateUtils_addUTCMonths(timestamp: number, months: number): number {\n  const d = new Date(timestamp);\n  return Date.UTC(d.getUTCFullYear(), d.getUTCMonth() + months, 1);\n}\n\nexport function DateUtils_dayOfWeekStr(date: string): string {\n  const d = new Date(DateUtils_fromYYYYMMDDStr(date));\n  return d.toLocaleDateString(undefined, { weekday: \"long\" });\n}\n\nexport function DateUtils_formatRange(start: Date | string | number, end: Date | string | number): string {\n  const startDate = new Date(start);\n  const endDate = new Date(end);\n  if (startDate.getFullYear() !== endDate.getFullYear()) {\n    return `${DateUtils_format(startDate, true)} - ${DateUtils_format(endDate, true)}`;\n  } else {\n    if (startDate.getMonth() !== endDate.getMonth()) {\n      const formattedStart = startDate.toLocaleDateString(undefined, { month: \"short\", day: \"numeric\" });\n      const formattedEnd = endDate.toLocaleDateString(undefined, { month: \"short\", day: \"numeric\" });\n      return `${formattedStart} - ${formattedEnd}, ${startDate.getFullYear()}`;\n    } else {\n      const month = startDate.toLocaleDateString(undefined, { month: \"short\" });\n      return `${month} ${startDate.getDate()}-${endDate.getDate()}, ${startDate.getFullYear()}`;\n    }\n  }\n}\n","import { IndexedDBUtils_get, IndexedDBUtils_set } from \"./indexeddb\";\nimport { UidFactory_generateUid } from \"./generator\";\nimport { StoreRuntime_isIos, StoreRuntime_isAndroid } from \"./storeRuntime\";\n\nexport async function DeviceId_get(): Promise<string> {\n  if (DeviceId_cachedId) {\n    return DeviceId_cachedId;\n  }\n\n  const type = DeviceId_getDeviceType();\n  const storageKey = `${DeviceId_STORAGE_KEY}_${type}`;\n  const stored = await IndexedDBUtils_get(storageKey);\n  if (stored && typeof stored === \"string\") {\n    DeviceId_cachedId = stored;\n    return stored;\n  }\n\n  const newId = DeviceId_generate();\n  await IndexedDBUtils_set(storageKey, newId);\n  DeviceId_cachedId = newId;\n  return newId;\n}\n\nexport function DeviceId_generate(): string {\n  const type = DeviceId_getDeviceType();\n  const uid = UidFactory_generateUid(8);\n  return `${type}_${uid}`;\n}\n\n// Platform detection goes through StoreRuntime, not SendMessage: the latter only probes the old\n// WebView bridge, so on bare React Native it reports neither platform and every phone would end up\n// claiming a \"web\" node.\nexport function DeviceId_getDeviceType(): string {\n  if (typeof window === \"undefined\") {\n    return \"srv\";\n  } else if (window.webeditor) {\n    return \"edt\";\n  } else if (StoreRuntime_isIos()) {\n    return \"ios\";\n  } else if (StoreRuntime_isAndroid()) {\n    return \"and\";\n  } else {\n    return \"web\";\n  }\n}\n\nexport const DeviceId_STORAGE_KEY = \"device_id\";\n\nexport let DeviceId_cachedId: string | undefined;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { IState } from \"../models/state\";\n\nconst MAX_ACTIONS = 31;\n\ninterface IDiagnosticsAction {\n  type: string;\n  time?: string;\n  desc?: string;\n  ts?: number;\n  [key: string]: any;\n}\n\nlet lastState: IState | undefined;\nlet lastActions: IDiagnosticsAction[] = [];\nlet lastValidationErrors: string[] | undefined;\n\nexport function Diagnostics_setLastState(state: IState): void {\n  lastState = state;\n}\n\nexport function Diagnostics_getLastState(): IState | undefined {\n  return lastState;\n}\n\nexport function Diagnostics_recordAction(action: IDiagnosticsAction): void {\n  lastActions = [{ ...action, ts: Date.now() }, ...lastActions.slice(0, MAX_ACTIONS - 1)];\n}\n\nexport function Diagnostics_getLastActions(): IDiagnosticsAction[] {\n  return lastActions;\n}\n\nexport function Diagnostics_setLastValidationErrors(errors: string[]): void {\n  lastValidationErrors = errors;\n}\n\nexport function Diagnostics_getLastValidationErrors(): string[] | undefined {\n  return lastValidationErrors;\n}\n","export async function Dialog_confirm(message: string): Promise<boolean> {\n  if (typeof window !== \"undefined\") {\n    return Promise.resolve(window.confirm(message));\n  } else {\n    return Promise.resolve(false);\n  }\n}\n\n// The native version is an Alert with one button per option plus Cancel; the browser has no\n// multi-button primitive, so each branch is spelled out in the message and dismissing the\n// dialog picks the last option rather than cancelling.\nexport async function Dialog_choice(title: string, message: string, options: string[]): Promise<number | undefined> {\n  if (typeof window === \"undefined\") {\n    return Promise.resolve(undefined);\n  }\n  const spelled = options.map((option, index) => `${index === 0 ? \"OK\" : \"Cancel\"} — ${option}`).join(\"\\n\");\n  return Promise.resolve(window.confirm(`${title}\\n\\n${message}\\n\\n${spelled}`) ? 0 : options.length - 1);\n}\n\nexport async function Dialog_prompt(message: string): Promise<string | undefined> {\n  if (typeof window !== \"undefined\") {\n    const result = window.prompt(message);\n    return result == null ? undefined : result;\n  } else {\n    return Promise.resolve(undefined);\n  }\n}\n\nexport function Dialog_alert(message: string): void {\n  if (typeof window !== \"undefined\") {\n    window.alert(message);\n  }\n}\n","import { gzip, gzipSync, gunzip, gunzipSync } from \"fflate\";\nimport { UrlUtils_build } from \"./url\";\n\nconst isBrowser = typeof FileReader !== \"undefined\" && typeof Worker !== \"undefined\";\n\nexport async function Encoder_encodeIntoUrlAndSetUrl(str: string): Promise<void> {\n  const url = await Encoder_encodeIntoUrl(str, window.location.href);\n  window.history.replaceState({ path: url.toString() }, \"\", url.toString());\n}\n\nexport async function Encoder_encodeIntoUrl(str: string, base: string): Promise<URL> {\n  const base64data = await Encoder_encode(str.replace(\"liftosaur://\", \"https://\"));\n  const url = UrlUtils_build(base);\n  const urlParams = new URLSearchParams(url.search);\n  urlParams.set(\"data\", base64data);\n  url.search = urlParams.toString();\n  return url;\n}\n\nexport function Encoder_encode(str: string): Promise<string> {\n  const textEncoder = new TextEncoder();\n  const input = textEncoder.encode(str);\n\n  if (!isBrowser) {\n    const result = gzipSync(input);\n    let binary = \"\";\n    for (let i = 0; i < result.length; i++) {\n      binary += String.fromCharCode(result[i]);\n    }\n    const b64 = btoa(binary);\n    const dataUrl = `data:application/octet-stream;base64,${b64}`;\n    return Promise.resolve(btoa(dataUrl));\n  }\n\n  return new Promise((resolve, reject) => {\n    gzip(input, (err, result) => {\n      if (err) {\n        reject(err);\n        return;\n      }\n      if (typeof FileReader !== \"undefined\") {\n        const reader = new FileReader();\n        reader.onload = function () {\n          const b64 = reader.result;\n          if (typeof b64 === \"string\") {\n            resolve(btoa(b64));\n          }\n        };\n        reader.readAsDataURL(new Blob([result]));\n      } else {\n        let binary = \"\";\n        for (let i = 0; i < result.length; i++) {\n          binary += String.fromCharCode(result[i]);\n        }\n        const b64 = btoa(binary);\n        const dataUrl = `data:application/octet-stream;base64,${b64}`;\n        resolve(btoa(dataUrl));\n      }\n    });\n  });\n}\n\nexport function Encoder_decode(str: string): Promise<string> {\n  return new Promise(async (resolve, reject) => {\n    try {\n      const dataUrl = atob(str);\n      let uintarray: Uint8Array;\n      if (isBrowser) {\n        const response = await fetch(dataUrl);\n        const blob = await response.blob();\n        uintarray = new Uint8Array(await blob.arrayBuffer());\n      } else {\n        // RN: fetch doesn't support data: URLs, decode base64 directly\n        const b64 = dataUrl.replace(/^data:[^;]+;base64,/, \"\");\n        const binary = atob(b64);\n        uintarray = new Uint8Array(binary.length);\n        for (let i = 0; i < binary.length; i++) {\n          uintarray[i] = binary.charCodeAt(i);\n        }\n      }\n      const result = isBrowser ? await gunzipPromise(uintarray) : gunzipSync(uintarray);\n      if (typeof TextDecoder !== \"undefined\") {\n        resolve(new TextDecoder(\"utf-8\").decode(result));\n      } else {\n        let str2 = \"\";\n        for (let i = 0; i < result.length; i++) {\n          str2 += String.fromCharCode(result[i]);\n        }\n        resolve(decodeURIComponent(escape(str2)));\n      }\n    } catch (e) {\n      reject(e);\n    }\n  });\n}\n\nfunction gunzipPromise(data: Uint8Array): Promise<Uint8Array> {\n  return new Promise((resolve, reject) => {\n    gunzip(data, (err, result) => {\n      if (err) {\n        reject(err);\n      } else {\n        resolve(result);\n      }\n    });\n  });\n}\n","export function EventManager_isAvailable(): boolean {\n  return false;\n}\n\nexport function EventManager_log(_data: string): void {\n  // no-op on web; callers fall back to direct POST\n}\n\nexport function EventManager_flush(): Promise<void> {\n  return Promise.resolve();\n}\n\nexport type IEventManagerTelemetryHandler = (event: {\n  name: string;\n  timestamp: number;\n  extra: Record<string, string>;\n}) => void;\n\nexport function EventManager_initTelemetry(_handler: IEventManagerTelemetryHandler): void {\n  // no-op on web\n}\n","export function Exporter_toFile(filename: string, contents: string): void {\n  const blob = new Blob([contents], { type: \"text/plain\" });\n  const objectUrl = URL.createObjectURL(blob);\n  const a = document.createElement(\"a\");\n  a.href = objectUrl;\n  a.setAttribute(\"download\", filename);\n  document.body.appendChild(a);\n  a.click();\n  document.body.removeChild(a);\n}\n","export function UidFactory_generateUid(length: number): string {\n  const domain = \"abcdefghijklmnopqrstuvwxyz\";\n  let uid = \"\";\n  for (let i = 0; i < length; i += 1) {\n    uid += domain[Math.floor(Math.random() * domain.length)];\n  }\n  return uid;\n}\n","import { UrlUtils_build } from \"./url\";\n\ndeclare let __HOST__: string;\n\nlet windowRef: Window | null = null;\nlet windowUrl: string | undefined;\nlet receiveMessage: ((event: MessageEvent) => void) | undefined;\n\nexport function getGoogleAccessToken(useBrowserCallback?: boolean): Promise<string | undefined> {\n  return new Promise((resolve) => {\n    const callbackPath = useBrowserCallback ? \"/googleauthcallback-web.html\" : \"/googleauthcallback.html\";\n    const urlBuilder = UrlUtils_build(\"https://accounts.google.com/o/oauth2/v2/auth\");\n    urlBuilder.searchParams.append(\"scope\", \"openid email\");\n    urlBuilder.searchParams.append(\"include_granted_scopes\", \"true\");\n    urlBuilder.searchParams.append(\"response_type\", \"token\");\n    urlBuilder.searchParams.append(\"redirect_uri\", `${__HOST__}${callbackPath}`);\n    urlBuilder.searchParams.append(\n      \"client_id\",\n      \"944666871420-p8kv124sgte8o0p6ev2ah6npudsl7e4f.apps.googleusercontent.com\"\n    );\n    const url = urlBuilder.toString();\n\n    if (receiveMessage != null) {\n      window.removeEventListener(\"message\", receiveMessage);\n    }\n\n    const windowOpts = \"toolbar=no, menubar=no, width=600, height=700, top=100, left=100\";\n\n    if (windowRef == null || windowRef.closed) {\n      windowRef = window.open(url, \"google-auth\", windowOpts);\n    } else if (windowUrl !== url) {\n      windowRef = window.open(url, \"google-auth\", windowOpts);\n      if (windowRef != null) {\n        windowRef.focus();\n      }\n    } else {\n      windowRef.focus();\n    }\n\n    receiveMessage = (event) => {\n      const data = event.data;\n      if (typeof data !== \"string\") {\n        return;\n      }\n      if (!data.startsWith(\"http://\") && !data.startsWith(\"https://\")) {\n        return;\n      }\n      const callbackUrl = UrlUtils_build(data);\n      const params = callbackUrl.hash.slice(1);\n      const exUrl = UrlUtils_build(\"https://www.example.com\");\n      exUrl.search = params;\n      const accessToken = exUrl.searchParams.get(\"access_token\")!;\n      resolve(accessToken);\n    };\n    window.addEventListener(\"message\", receiveMessage);\n    windowUrl = url;\n  });\n}\n","// The native spec's TurboModuleRegistry call throws outside React Native and would break mocha.\nexport function HermesProfile_captureOnce(_label: string, _sampleMs?: number): void {}\n","import { ICollectionVersions, IVersions, isCollectionVersions, isFieldVersion } from \"../models/versionTracker\";\nimport { VersionTrackerUtils_compareVersions } from \"../models/versionTracker/utils\";\nimport { IHistoryRecord, IStorage } from \"../types\";\nimport { CollectionUtils_uniqBy } from \"./collection\";\n\nexport interface IHistoryDeltaLocal {\n  history: IHistoryRecord[];\n  versions: IVersions<IStorage> | undefined;\n}\n\nfunction historyVersions(versions: IVersions<IStorage> | undefined): ICollectionVersions | undefined {\n  const history = versions?.history;\n  return isCollectionVersions(history) ? history : undefined;\n}\n\nfunction isSameVersion(local: unknown, server: unknown): boolean {\n  if (isFieldVersion(local) && isFieldVersion(server)) {\n    return VersionTrackerUtils_compareVersions(local, server) === \"equal\";\n  }\n  return JSON.stringify(local) === JSON.stringify(server);\n}\n\nexport function HistoryDelta_missingIds(\n  local: IHistoryDeltaLocal,\n  serverVersions: IVersions<IStorage> | undefined,\n  present: IHistoryRecord[]\n): number[] | undefined {\n  const server = historyVersions(serverVersions);\n  if (server == null) {\n    return undefined;\n  }\n  const localItems = historyVersions(local.versions)?.items || {};\n  const localIds = new Set(local.history.map((r) => r.id));\n  const presentIds = new Set(present.map((r) => r.id));\n  const deleted = server.deleted || {};\n  const missing: number[] = [];\n  for (const key of Object.keys(server.items || {})) {\n    const id = Number(key);\n    if (presentIds.has(id) || key in deleted) {\n      continue;\n    }\n    const localVersion = localItems[key];\n    if (!localIds.has(id) || localVersion == null || !isSameVersion(localVersion, server.items?.[key])) {\n      missing.push(id);\n    }\n  }\n  return missing.sort((a, b) => b - a);\n}\n\nexport function HistoryDelta_unresolvedIds(requestedIds: number[], fetched: IHistoryRecord[]): number[] {\n  const fetchedIds = new Set(fetched.map((r) => r.id));\n  return requestedIds.filter((id) => !fetchedIds.has(id));\n}\n\nexport function HistoryDelta_apply(storage: IStorage, fetched: IHistoryRecord[]): IStorage {\n  return { ...storage, history: CollectionUtils_uniqBy([...storage.history, ...fetched], \"id\") };\n}\n\nexport function HistoryDelta_sortNewestFirst(history: IHistoryRecord[]): IHistoryRecord[] {\n  return [...history].sort((a, b) => b.id - a.id);\n}\n","import { IEither } from \"./types\";\n\nexport const HistoryIds_MAX = 100;\n\nexport function HistoryIds_parse(raw: string): IEither<number[], string> {\n  const ids: number[] = [];\n  for (const part of raw.split(\",\")) {\n    if (part === \"\") {\n      continue;\n    }\n    const id = Number(part);\n    if (!Number.isSafeInteger(id)) {\n      return { success: false, error: `Invalid history id: ${part}` };\n    }\n    if (ids.indexOf(id) === -1) {\n      ids.push(id);\n    }\n  }\n  if (ids.length > HistoryIds_MAX) {\n    return { success: false, error: `At most ${HistoryIds_MAX} history ids per request` };\n  }\n  return { success: true, data: ids };\n}\n","import type { JSX } from \"react\";\nimport { hydrateRoot } from \"react-dom/client\";\nimport RB from \"rollbar\";\nimport { RollbarUtils_config } from \"./rollbar\";\nimport { IPageWrapperProps } from \"../components/pageWrapper\";\nimport { PageTheme_restore } from \"./pageTheme\";\n\ndeclare let Rollbar: RB;\ndeclare let __ENV__: string;\n\nexport function HydrateUtils_hydratePage<T>(cb: (pageWrapperProps: IPageWrapperProps, data: T) => JSX.Element): void {\n  Rollbar.configure(RollbarUtils_config());\n  PageTheme_restore();\n\n  const escapedRawData = document.querySelector(\"#data\")?.innerHTML || \"{}\";\n  const escapedPageWrapperProps = document.querySelector(\"#pagewrapper\")?.innerHTML || \"{}\";\n  const parser = new DOMParser();\n  const unescapedRawData = parser.parseFromString(escapedRawData, \"text/html\").documentElement.textContent || \"{}\";\n  const unescapedPageWrapperProps =\n    parser.parseFromString(escapedPageWrapperProps, \"text/html\").documentElement.textContent || \"{}\";\n  const data = JSON.parse(unescapedRawData) as T;\n  const pageWrapperProps = JSON.parse(unescapedPageWrapperProps) as IPageWrapperProps;\n  hydrateRoot(document.getElementById(\"app\")!, cb({ ...pageWrapperProps, client: window.fetch.bind(window) }, data));\n}\n","import { Platform } from \"react-native\";\nimport { lb } from \"lens-shmens\";\nimport { IDispatch } from \"../ducks/types\";\nimport { IApplePromotionalOffer, ISubscriptionLoading, IState, updateState } from \"../models/state\";\nimport { Dialog_alert } from \"./dialog\";\nimport { IIapAdapter, IIapApplePromoOffer, IIapPurchase } from \"./iapAdapter\";\nimport { StoreRuntime_storeName } from \"./storeRuntime\";\n\nconst APPLE_KEY_IDENTIFIER = \"CNHQ5ZL35U\";\n\nexport function IapHelpers_getSkus(): { monthly: string; yearly: string; lifetime: string } {\n  return Platform.OS === \"ios\"\n    ? {\n        monthly: \"com.liftosaur.subscription.ios_montly\",\n        yearly: \"com.liftosaur.subscription.ios_yearly\",\n        lifetime: \"com.liftosaur.subscription.ios_lifetime\",\n      }\n    : {\n        monthly: \"com.liftosaur.subscription.and_montly\",\n        yearly: \"com.liftosaur.subscription.and_yearly\",\n        lifetime: \"com.liftosaur.subscription.and_lifetime\",\n      };\n}\n\nexport function IapHelpers_clearLoading(dispatch: IDispatch): void {\n  updateState(dispatch, [lb<IState>().p(\"subscriptionLoading\").record(undefined)], \"Stop subscription loading\");\n}\n\nconst SUBSCRIPTION_LOADING_TIMEOUT_MS = 60000;\n\n// Sets the spinner on a plan card and arms a safety timeout: if no purchase/error event clears it\n// within the window (e.g. StoreKit never delivers an actionable event), the card can't spin forever.\n// Only clears if the same loading object is still active, so it never cancels a newer attempt.\nexport function IapHelpers_setLoading(\n  dispatch: IDispatch,\n  getState: () => IState,\n  loading: ISubscriptionLoading\n): void {\n  updateState(dispatch, [lb<IState>().p(\"subscriptionLoading\").record(loading)], \"Start subscription loading\");\n  const timer = setTimeout(() => {\n    if (getState().subscriptionLoading === loading) {\n      IapHelpers_clearLoading(dispatch);\n    }\n  }, SUBSCRIPTION_LOADING_TIMEOUT_MS);\n  // Don't keep the Node process (tests) alive for the full window; no-op on RN where setTimeout returns a number.\n  (timer as unknown as { unref?: () => void }).unref?.();\n}\n\nexport function IapHelpers_alertAlreadySubscribed(): void {\n  Dialog_alert(\n    `You already have an active Liftosaur Premium purchase on this account. Manage or change your plan from your ${StoreRuntime_storeName()} subscriptions.`\n  );\n}\n\nexport function IapHelpers_applePromoToAdapter(promo?: IApplePromotionalOffer): IIapApplePromoOffer | undefined {\n  if (!promo) {\n    return undefined;\n  }\n  return {\n    identifier: promo.offerId,\n    keyIdentifier: APPLE_KEY_IDENTIFIER,\n    nonce: promo.nonce,\n    signature: promo.signature,\n    timestamp: promo.timestamp,\n  };\n}\n\nexport async function IapHelpers_readReceiptOrJwsIOS(\n  iap: IIapAdapter,\n  purchase?: IIapPurchase\n): Promise<string | undefined> {\n  const jws = purchase?.purchaseToken;\n  if (jws) {\n    console.log(\"IAP: using StoreKit 2 JWS\", jws.slice(0, 32) + \"...\");\n    return jws;\n  }\n  const data = await iap.getReceiptDataIOS();\n  if (data) {\n    console.log(\"IAP: using legacy App Store receipt\", data.slice(0, 32) + \"...\");\n    return data;\n  }\n  const refreshed = await iap.getReceiptIOS();\n  if (refreshed) {\n    console.log(\"IAP: using refreshed legacy receipt\", refreshed.slice(0, 32) + \"...\");\n    return refreshed;\n  }\n  console.warn(\"IAP: no receipt nor JWS available\", purchase);\n  return undefined;\n}\n","import { IHistoryRecord, ICustomExercise, ISettings, IWeight, VHistoryRecord } from \"../types\";\nimport Papa from \"papaparse\";\nimport { CollectionUtils_compact, CollectionUtils_groupByKey } from \"./collection\";\nimport { ObjectUtils_values } from \"./object\";\nimport { Exercise_findByName, Exercise_getIsUnilateral, Exercise_sanitizeName } from \"../models/exercise\";\nimport { Weight_build } from \"../models/weight\";\nimport { UidFactory_generateUid } from \"./generator\";\nimport { Progress_getEntryId } from \"../models/progress\";\nimport { History_generateId } from \"../models/history\";\nimport { Storage_validate } from \"../models/storage\";\nimport { DateUtils_parseNamedMonthDateTime } from \"./date\";\nimport {\n  IImportResult,\n  IImportRowError,\n  ImportFileError,\n  ImportUtils_detectCsvKind,\n  ImportUtils_isSuspiciousReps,\n  ImportUtils_isSuspiciousTimestamp,\n  ImportUtils_isSuspiciousWeight,\n} from \"./importTypes\";\n\nconst exerciseMapping: Partial<Record<string, [string, string | undefined]>> = {\n  \"21s Bicep Curl\": [\"Bicep Curl\", \"barbell\"],\n  \"Ab Wheel\": [\"Ab Wheel\", \"bodyweight\"],\n  \"Arnold Press (Dumbbell)\": [\"Arnold Press\", \"dumbbell\"],\n  \"Assisted Pistol Squats\": [\"Pistol Squat\", \"bodyweight\"],\n  \"Back Extension (Hyperextension)\": [\"Back Extension\", \"bodyweight\"],\n  \"Back Extension (Machine)\": [\"Back Extension\", \"leverageMachine\"],\n  \"Ball Slams\": [\"Ball Slams\", \"medicineball\"],\n  \"Bench Dip\": [\"Bench Dip\", \"bodyweight\"],\n  \"Bench Press - Close Grip (Barbell)\": [\"Bench Press Close Grip\", \"barbell\"],\n  \"Bench Press - Wide Grip (Barbell)\": [\"Bench Press Wide Grip\", \"barbell\"],\n  \"Bench Press (Barbell)\": [\"Bench Press\", \"barbell\"],\n  \"Bench Press (Cable)\": [\"Chest Press\", \"cable\"],\n  \"Bench Press (Dumbbell)\": [\"Chest Press\", \"dumbbell\"],\n  \"Bench Press (Smith Machine)\": [\"Chest Press\", \"smith\"],\n  \"Bent Over Row (Band)\": [\"Bent Over Row\", \"band\"],\n  \"Bent Over Row (Barbell)\": [\"Bent Over Row\", \"barbell\"],\n  \"Bent Over Row (Dumbbell)\": [\"Bent Over One Arm Row\", \"dumbbell\"],\n  \"Bicep Curl (Barbell)\": [\"Bicep Curl\", \"barbell\"],\n  \"Bicep Curl (Cable)\": [\"Bicep Curl\", \"cable\"],\n  \"Bicep Curl (Dumbbell)\": [\"Bicep Curl\", \"dumbbell\"],\n  \"Bicycle Crunch\": [\"Bicycle Crunch\", \"bodyweight\"],\n  \"Box Jump\": [\"Box Jump\", \"bodyweight\"],\n  \"Box Squat (Barbell)\": [\"Box Squat\", \"barbell\"],\n  \"Bulgarian Split Squat\": [\"Bulgarian Split Squat\", \"bodyweight\"],\n  Burpee: [\"Burpee\", \"bodyweight\"],\n  \"Butterfly (Pec Deck)\": [\"Pec Deck\", \"leverageMachine\"],\n  \"Cable Crunch\": [\"Cable Crunch\", \"cable\"],\n  \"Cable Pull Through\": [\"Cable Pull Through\", \"cable\"],\n  \"Cable Twist (Down to up)\": [\"Cable Twist\", \"cable\"],\n  \"Cable Twist (Up to down)\": [\"Cable Twist\", \"cable\"],\n  \"Calf Press (Machine)\": [\"Calf Press on Seated Leg Press\", \"leverageMachine\"],\n  \"Chest Dip\": [\"Chest Dip\", \"bodyweight\"],\n  \"Chest Fly (Band)\": [\"Chest Fly\", \"band\"],\n  \"Chest Fly (Dumbbell)\": [\"Chest Fly\", \"dumbbell\"],\n  \"Chest Fly (Machine)\": [\"Chest Fly\", \"leverageMachine\"],\n  \"Chest Press (Band)\": [\"Chest Press\", \"band\"],\n  \"Chest Press (Machine)\": [\"Chest Press\", \"leverageMachine\"],\n  \"Chest Supported Incline Row (Dumbbell)\": [\"Incline Row\", \"dumbbell\"],\n  \"Chin Up\": [\"Chin Up\", \"bodyweight\"],\n  Clamshell: [\"Side Lying Clam\", \"bodyweight\"],\n  Clean: [\"Clean\", \"barbell\"],\n  \"Clean and Jerk\": [\"Clean and Jerk\", \"barbell\"],\n  \"Concentration Curl\": [\"Concentration Curl\", \"dumbbell\"],\n  Crunch: [\"Crunch\", \"bodyweight\"],\n  \"Crunch (Machine)\": [\"Crunch\", \"leverageMachine\"],\n  \"Curtsy Lunge (Dumbbell)\": [\"Lunge\", \"dumbbell\"],\n  \"Deadlift (Band)\": [\"Deadlift\", \"band\"],\n  \"Deadlift (Barbell)\": [\"Deadlift\", \"barbell\"],\n  \"Deadlift (Dumbbell)\": [\"Deadlift\", \"dumbbell\"],\n  \"Deadlift (Smith Machine)\": [\"Deadlift\", \"smith\"],\n  \"Deadlift (Trap bar)\": [\"Trap Bar Deadlift\", \"trapbar\"],\n  \"Deadlift High Pull\": [\"Deadlift High Pull\", \"barbell\"],\n  \"Decline Bench Press (Barbell)\": [\"Decline Bench Press\", \"barbell\"],\n  \"Decline Bench Press (Dumbbell)\": [\"Decline Bench Press\", \"dumbbell\"],\n  \"Decline Bench Press (Machine)\": [\"Decline Bench Press\", \"leverageMachine\"],\n  \"Decline Bench Press (Smith Machine)\": [\"Decline Bench Press\", \"smith\"],\n  \"Decline Chest Fly (Dumbbell)\": [\"Chest Fly\", \"dumbbell\"],\n  \"Decline Crunch\": [\"Decline Crunch\", \"bodyweight\"],\n  \"Dumbbell Row\": [\"Bent Over One Arm Row\", \"dumbbell\"],\n  \"Dumbbell Step Up\": [\"Step up\", \"dumbbell\"],\n  \"EZ Bar Biceps Curl\": [\"Bicep Curl\", \"ezbar\"],\n  \"Face Pull\": [\"Face Pull\", \"cable\"],\n  \"Front Raise (Band)\": [\"Front Raise\", \"band\"],\n  \"Front Raise (Barbell)\": [\"Front Raise\", \"barbell\"],\n  \"Front Raise (Cable)\": [\"Front Raise\", \"cable\"],\n  \"Front Raise (Dumbbell)\": [\"Front Raise\", \"dumbbell\"],\n  \"Front Squat\": [\"Front Squat\", \"barbell\"],\n  \"Full Squat\": [\"Squat\", \"barbell\"],\n  \"Glute Bridge\": [\"Glute Bridge\", \"bodyweight\"],\n  \"Glute Kickback (Machine)\": [\"Cable Kickback\", \"cable\"],\n  \"Goblet Squat\": [\"Goblet Squat\", \"kettlebell\"],\n  \"Good Morning (Barbell)\": [\"Good Morning\", \"barbell\"],\n  \"Hack Squat\": [\"Hack Squat\", \"barbell\"],\n  \"Hack Squat (Machine)\": [\"Hack Squat\", \"leverageMachine\"],\n  \"Hammer Curl (Band)\": [\"Hammer Curl\", \"band\"],\n  \"Hammer Curl (Cable)\": [\"Hammer Curl\", \"cable\"],\n  \"Hammer Curl (Dumbbell)\": [\"Hammer Curl\", \"dumbbell\"],\n  \"Handstand Push Up\": [\"Handstand Push Up\", \"bodyweight\"],\n  \"Hang Clean\": [\"Hang Clean\", \"barbell\"],\n  \"Hang Snatch\": [\"Hang Snatch\", \"barbell\"],\n  \"Hanging Leg Raise\": [\"Hanging Leg Raise\", \"bodyweight\"],\n  \"High Knee Skips\": [\"High Knee Skips\", \"bodyweight\"],\n  \"Hip Abduction (Machine)\": [\"Hip Abductor\", \"leverageMachine\"],\n  \"Hip Thrust\": [\"Hip Thrust\", \"bodyweight\"],\n  \"Hip Thrust (Barbell)\": [\"Hip Thrust\", \"barbell\"],\n  \"Incline Bench Press (Barbell)\": [\"Incline Bench Press\", \"barbell\"],\n  \"Incline Bench Press (Dumbbell)\": [\"Incline Bench Press\", \"dumbbell\"],\n  \"Incline Bench Press (Smith Machine)\": [\"Incline Bench Press\", \"smith\"],\n  \"Incline Chest Fly (Dumbbell)\": [\"Incline Chest Fly\", \"dumbbell\"],\n  \"Incline Chest Press (Machine)\": [\"Incline Chest Press\", \"leverageMachine\"],\n  \"Inverted Row\": [\"Inverted Row\", \"bodyweight\"],\n  \"Jump Squat\": [\"Jump Squat\", \"bodyweight\"],\n  \"Jumping Jack\": [\"Jumping Jack\", \"bodyweight\"],\n  \"Kettlebell Clean\": [\"Clean\", \"kettlebell\"],\n  \"Kettlebell Goblet Squat\": [\"Goblet Squat\", \"kettlebell\"],\n  \"Kettlebell Shoulder Press\": [\"Shoulder Press\", \"kettlebell\"],\n  \"Kettlebell Swing\": [\"Kettlebell Swing\", \"kettlebell\"],\n  \"Lat Pulldown (Band)\": [\"Lat Pulldown\", \"band\"],\n  \"Lat Pulldown (Cable)\": [\"Lat Pulldown\", \"cable\"],\n  \"Lat Pulldown (Machine)\": [\"Lat Pulldown\", \"leverageMachine\"],\n  \"Lateral Raise (Band)\": [\"Lateral Raise\", \"band\"],\n  \"Lateral Raise (Cable)\": [\"Lateral Raise\", \"cable\"],\n  \"Lateral Raise (Dumbbell)\": [\"Lateral Raise\", \"dumbbell\"],\n  \"Lateral Raise (Machine)\": [\"Lateral Raise\", \"leverageMachine\"],\n  \"Leg Extension (Machine)\": [\"Leg Extension\", \"leverageMachine\"],\n  \"Leg Press (Machine)\": [\"Leg Press\", \"leverageMachine\"],\n  Lunge: [\"Lunge\", \"bodyweight\"],\n  \"Lunge (Barbell)\": [\"Lunge\", \"barbell\"],\n  \"Lunge (Dumbbell)\": [\"Lunge\", \"dumbbell\"],\n  \"Lying Leg Curl (Machine)\": [\"Lying Leg Curl\", \"leverageMachine\"],\n  \"Mountain Climber\": [\"Mountain Climber\", \"bodyweight\"],\n  \"Overhead Press (Barbell)\": [\"Overhead Press\", \"barbell\"],\n  \"Overhead Press (Dumbbell)\": [\"Overhead Press\", \"dumbbell\"],\n  \"Overhead Press (Smith Machine)\": [\"Overhead Press\", \"smith\"],\n  \"Overhead Squat\": [\"Overhead Squat\", \"barbell\"],\n  \"Pistol Squat\": [\"Pistol Squat\", \"bodyweight\"],\n  Plank: [\"Plank\", \"bodyweight\"],\n  \"Power Clean\": [\"Power Clean\", \"barbell\"],\n  \"Power Snatch\": [\"Power Snatch\", \"barbell\"],\n  \"Preacher Curl (Barbell)\": [\"Preacher Curl\", \"barbell\"],\n  \"Preacher Curl (Dumbbell)\": [\"Preacher Curl\", \"dumbbell\"],\n  \"Preacher Curl (Machine)\": [\"Preacher Curl\", \"leverageMachine\"],\n  \"Pull Up\": [\"Pull Up\", \"bodyweight\"],\n  \"Pull Up (Band)\": [\"Pull Up\", \"band\"],\n  \"Pullover (Dumbbell)\": [\"Pullover\", \"dumbbell\"],\n  \"Push Press\": [\"Push Press\", \"barbell\"],\n  \"Reverse Crunch\": [\"Reverse Crunch\", \"bodyweight\"],\n  \"Reverse Curl (Barbell)\": [\"Reverse Curl\", \"barbell\"],\n  \"Reverse Curl (Dumbbell)\": [\"Reverse Curl\", \"dumbbell\"],\n  \"Reverse Fly (Cable)\": [\"Reverse Fly\", \"cable\"],\n  \"Reverse Fly (Dumbbell)\": [\"Reverse Fly\", \"dumbbell\"],\n  \"Reverse Grip Lat Pulldown (Cable)\": [\"Lat Pulldown\", \"cable\"],\n  \"Reverse Hyperextension\": [\"Reverse Hyperextension\", \"bodyweight\"],\n  \"Romanian Deadlift (Barbell)\": [\"Romanian Deadlift\", \"barbell\"],\n  \"Romanian Deadlift (Dumbbell)\": [\"Romanian Deadlift\", \"dumbbell\"],\n  \"Russian Twist (Bodyweight)\": [\"Russian Twist\", \"bodyweight\"],\n  \"Seated Leg Curl (Machine)\": [\"Seated Leg Curl\", \"leverageMachine\"],\n  \"Seated Row (Machine)\": [\"Seated Row\", \"leverageMachine\"],\n  \"Seated Shoulder Press (Machine)\": [\"Shoulder Press\", \"leverageMachine\"],\n  \"Shoulder Press (Dumbbell)\": [\"Shoulder Press\", \"dumbbell\"],\n  \"Shrug (Barbell)\": [\"Shrug\", \"barbell\"],\n  \"Shrug (Cable)\": [\"Shrug\", \"cable\"],\n  \"Shrug (Dumbbell)\": [\"Shrug\", \"dumbbell\"],\n  \"Shrug (Smith Machine)\": [\"Shrug\", \"smith\"],\n  \"Side Bend\": [\"Side Bend\", \"bodyweight\"],\n  \"Side Bend (Dumbbell)\": [\"Side Bend\", \"dumbbell\"],\n  \"Side Plank\": [\"Side Plank\", \"bodyweight\"],\n  \"Single Leg Glute Bridge\": [\"Single Leg Bridge\", \"bodyweight\"],\n  \"Single Leg Hip Thrust\": [\"Single Leg Hip Thrust\", \"bodyweight\"],\n  \"Single Leg Romanian Deadlift (Barbell)\": [\"Single Leg Deadlift\", \"barbell\"],\n  \"Single Leg Romanian Deadlift (Dumbbell)\": [\"Single Leg Deadlift\", \"dumbbell\"],\n  \"Sit Up\": [\"Sit Up\", \"bodyweight\"],\n  \"Skullcrusher (Barbell)\": [\"Skullcrusher\", \"barbell\"],\n  \"Skullcrusher (Dumbbell)\": [\"Skullcrusher\", \"dumbbell\"],\n  Snatch: [\"Power Snatch\", \"barbell\"],\n  \"Split Jerk\": [\"Split Jerk\", \"barbell\"],\n  \"Squat (Band)\": [\"Squat\", \"band\"],\n  \"Squat (Barbell)\": [\"Squat\", \"barbell\"],\n  \"Squat (Bodyweight)\": [\"Squat\", \"bodyweight\"],\n  \"Squat (Dumbbell)\": [\"Squat\", \"dumbbell\"],\n  \"Squat (Machine)\": [\"Squat\", \"leverageMachine\"],\n  \"Squat (Smith Machine)\": [\"Squat\", \"smith\"],\n  \"Standing Military Press (Barbell)\": [\"Overhead Press\", \"barbell\"],\n  \"Straight Leg Deadlift\": [\"Stiff Leg Deadlift\", \"barbell\"],\n  \"Sumo Deadlift\": [\"Deadlift\", \"barbell\"],\n  Superman: [\"Superman\", \"bodyweight\"],\n  \"Thruster (Barbell)\": [\"Thruster\", \"barbell\"],\n  \"Thruster (Kettlebell)\": [\"Thruster\", \"kettlebell\"],\n  \"Upright Row (Barbell)\": [\"Upright Row\", \"barbell\"],\n  \"Upright Row (Cable)\": [\"Upright Row\", \"cable\"],\n  \"Upright Row (Dumbbell)\": [\"Upright Row\", \"dumbbell\"],\n  \"V Up\": [\"V Up\", \"bodyweight\"],\n  \"Wide Pull Up\": [\"Pull Up\", \"bodyweight\"],\n  \"Zercher Squat\": [\"Squat\", \"barbell\"],\n  \"Around The World\": [\"Around The World\", \"dumbbell\"],\n  \"Back Extension (Weighted Hyperextension)\": [\"Back Extension\", \"leverageMachine\"],\n  \"Battle Ropes\": [\"Battle Ropes\", \"bodyweight\"],\n  \"Bicep Curl (Machine)\": [\"Bicep Curl\", \"leverageMachine\"],\n  \"Bicep Curl (Suspension)\": [\"Bicep Curl\", \"dumbbell\"],\n  \"Bicycle Crunch Raised Legs\": [\"Bicycle Crunch\", \"bodyweight\"],\n  \"Burpee Over the Bar\": [\"Burpee\", \"bodyweight\"],\n  \"Cable Fly Crossovers\": [\"Cable Crossover\", \"cable\"],\n  \"Chest Dip (Assisted)\": [\"Chest Dip\", \"bodyweight\"],\n  \"Chest Dip (Weighted)\": [\"Chest Dip\", \"bodyweight\"],\n  \"Chest Fly (Suspension)\": [\"Chest Fly\", \"dumbbell\"],\n  \"Chin Up (Assisted)\": [\"Chin Up\", \"bodyweight\"],\n  \"Chin Up (Weighted)\": [\"Chin Up\", \"bodyweight\"],\n  \"Clean and Press\": [\"Clean and Jerk\", \"barbell\"],\n  \"Crunch (Weighted)\": [\"Crunch\", \"bodyweight\"],\n  Cycling: [\"Cycling\", \"bodyweight\"],\n  \"Decline Crunch (Weighted)\": [\"Decline Crunch\", \"bodyweight\"],\n  \"Decline Push Up\": [\"Push Up\", \"bodyweight\"],\n  \"Diamond Push Up\": [\"Push Up\", \"bodyweight\"],\n  \"Dumbbell Snatch\": [\"Power Snatch\", \"dumbbell\"],\n  \"Dumbbell Squeeze Press\": [\"Chest Press\", \"dumbbell\"],\n  \"Elliptical Trainer\": [\"Elliptical Machine\", \"leverageMachine\"],\n  \"Floor Press (Barbell)\": [\"Chest Press\", \"barbell\"],\n  \"Floor Press (Dumbbell)\": [\"Chest Press\", \"dumbbell\"],\n  \"Floor Triceps Dip\": [\"Triceps Dip\", \"bodyweight\"],\n  \"Frog Jumps\": [\"Box Jump\", \"bodyweight\"],\n  \"Frog Pumps (Dumbbell)\": [\"Glute Bridge\", \"dumbbell\"],\n  \"Front Raise (Suspension)\": [\"Front Raise\", \"dumbbell\"],\n  \"Handstand Hold\": [\"Handstand Push Up\", \"bodyweight\"],\n  \"Hanging Knee Raise\": [\"Hanging Leg Raise\", \"bodyweight\"],\n  \"High Knees\": [\"High Knee Skips\", \"bodyweight\"],\n  \"Incline Push Ups\": [\"Push Up\", \"bodyweight\"],\n  \"Iso-Lateral Chest Press (Machine)\": [\"Iso-Lateral Chest Press\", \"leverageMachine\"],\n  \"Iso-Lateral Row (Machine)\": [\"Iso-Lateral Row\", \"leverageMachine\"],\n  \"Jack Knife (Suspension)\": [\"Jackknife Sit Up\", \"bodyweight\"],\n  \"Jackknife Sit Up\": [\"Jackknife Sit Up\", \"bodyweight\"],\n  \"Jump Rope\": [\"Jump Rope\", \"bodyweight\"],\n  \"Kettlebell High Pull\": [\"Deadlift High Pull\", \"kettlebell\"],\n  \"Kettlebell Snatch\": [\"Power Snatch\", \"kettlebell\"],\n  \"Kettlebell Turkish Get Up\": [\"Kettlebell Turkish Get Up\", \"kettlebell\"],\n  \"Kipping Pull Up\": [\"Kipping Pull Up\", \"bodyweight\"],\n  \"Knee Raise Parallel Bars\": [\"Knee Raise\", \"bodyweight\"],\n  \"Lateral Box Jump\": [\"Lateral Box Jump\", \"bodyweight\"],\n  \"Leg Press Horizontal (Machine)\": [\"Leg Press\", \"leverageMachine\"],\n  \"Low Cable Fly Crossovers\": [\"Cable Crossover\", \"cable\"],\n  \"Lying Leg Raise\": [\"Flat Leg Raise\", \"bodyweight\"],\n  \"Muscle Up\": [\"Muscle Up\", \"bodyweight\"],\n  \"Oblique Crunch\": [\"Oblique Crunch\", \"bodyweight\"],\n  \"Overhead Dumbbell Lunge\": [\"Lunge\", \"dumbbell\"],\n  \"Pendlay Row (Barbell)\": [\"Pendlay Row\", \"barbell\"],\n  \"Press Under\": [\"Press Under\", \"barbell\"],\n  \"Pull Up (Assisted)\": [\"Pull Up\", \"bodyweight\"],\n  \"Pull Up (Weighted)\": [\"Pull Up\", \"bodyweight\"],\n  \"Push Up\": [\"Push Up\", \"bodyweight\"],\n  \"Push Up (Weighted)\": [\"Push Up\", \"bodyweight\"],\n  \"Rear Delt Reverse Fly (Machine)\": [\"Reverse Fly\", \"leverageMachine\"],\n  \"Reverse Fly Single Arm (Cable)\": [\"Reverse Fly\", \"cable\"],\n  \"Reverse Grip Concentration Curl\": [\"Reverse Grip Concentration Curl\", \"dumbbell\"],\n  \"Reverse Plank\": [\"Reverse Plank\", \"bodyweight\"],\n  \"Rowing Machine\": [\"Rowing\", \"leverageMachine\"],\n  \"Russian Twist (Weighted)\": [\"Russian Twist\", \"bodyweight\"],\n  \"Seated Cable Row\": [\"Seated Row\", \"cable\"],\n  \"Seated Calf Raise\": [\"Seated Calf Raise\", \"barbell\"],\n  \"Seated Incline Curl (Dumbbell)\": [\"Incline Curl\", \"dumbbell\"],\n  \"Seated Palms Up Wrist Curl\": [\"Seated Palms Up Wrist Curl\", \"dumbbell\"],\n  \"Single Arm Cable Crossover\": [\"Cable Crossover\", \"cable\"],\n  \"Single Leg Standing Calf Raise\": [\"Single Leg Calf Raise\", \"barbell\"],\n  \"Single Leg Standing Calf Raise (Barbell)\": [\"Single Leg Calf Raise\", \"barbell\"],\n  \"Single Leg Standing Calf Raise (Dumbbell)\": [\"Single Leg Calf Raise\", \"dumbbell\"],\n  \"Single Leg Standing Calf Raise (Machine)\": [\"Single Leg Calf Raise\", \"leverageMachine\"],\n  \"Sissy Squat (Weighted)\": [\"Sissy Squat\", \"bodyweight\"],\n  \"Sit Up (Weighted)\": [\"Sit Up\", \"bodyweight\"],\n  \"Split Squat (Dumbbell)\": [\"Bulgarian Split Squat\", \"dumbbell\"],\n  \"Squat Row\": [\"Squat Row\", \"band\"],\n  \"Standing Calf Raise\": [\"Standing Calf Raise\", \"dumbbell\"],\n  \"Standing Calf Raise (Barbell)\": [\"Standing Calf Raise\", \"barbell\"],\n  \"Standing Calf Raise (Dumbbell)\": [\"Standing Calf Raise\", \"dumbbell\"],\n  \"Standing Calf Raise (Machine)\": [\"Standing Calf Raise\", \"leverageMachine\"],\n  \"Step Up\": [\"Step up\", \"dumbbell\"],\n  \"T Bar Row\": [\"T Bar Row\", \"leverageMachine\"],\n  \"Toes to Bar\": [\"Toes To Bar\", \"bodyweight\"],\n  \"Torso Rotation\": [\"Torso Rotation\", \"bodyweight\"],\n  \"Triceps Dip\": [\"Triceps Dip\", \"bodyweight\"],\n  \"Triceps Dip (Assisted)\": [\"Triceps Dip\", \"bodyweight\"],\n  \"Triceps Dip (Weighted)\": [\"Triceps Dip\", \"bodyweight\"],\n  \"Triceps Extension (Cable)\": [\"Triceps Extension\", \"cable\"],\n  \"Triceps Extension (Dumbbell)\": [\"Triceps Extension\", \"dumbbell\"],\n  \"Triceps Extension (Machine)\": [\"Triceps Extension\", \"leverageMachine\"],\n  \"Triceps Extension (Suspension)\": [\"Triceps Extension\", \"dumbbell\"],\n  \"Triceps Extension (Barbell)\": [\"Triceps Extension\", \"barbell\"],\n  \"Triceps Pressdown\": [\"Triceps Pushdown\", \"cable\"],\n  \"Triceps Pushdown\": [\"Triceps Pushdown\", \"cable\"],\n  \"Triceps Rope Pushdown\": [\"Triceps Pushdown\", \"cable\"],\n  \"Wrist Roller\": [\"Wrist Roller\", \"bodyweight\"],\n};\n\nfunction parseHevyDate(raw: string | undefined): number | undefined {\n  if (!raw) {\n    return undefined;\n  }\n  const ts = DateUtils_parseNamedMonthDateTime(raw) ?? new Date(raw).getTime();\n  return isNaN(ts) ? undefined : ts;\n}\n\ninterface IHevyRecord {\n  title: string;\n  start_time: string;\n  end_time: string;\n  exercise_title: string;\n  description: string;\n  exercise_notes: string;\n  set_index: number;\n  set_type: string;\n  weight_lbs?: number;\n  weight_kg?: number;\n  reps: number;\n}\n\ninterface IHevyStructExercise {\n  exercise_title: string;\n  exercise_notes: string;\n  sets: IHevyStructSet[];\n  warmupSets: IHevyStructSet[];\n}\n\ninterface IHevyStructSet {\n  weight_lbs?: number;\n  weight_kg?: number;\n  reps: number;\n}\n\ninterface IHevyStruct {\n  title: string;\n  start_time: string;\n  end_time: string;\n  description: string;\n  exercises: IHevyStructExercise[];\n  row: number;\n}\n\nfunction parseHevyNumber(value: string | number | undefined | null): number | undefined {\n  if (value == null || `${value}`.trim() === \"\") {\n    return undefined;\n  }\n  const num = Number(`${value}`);\n  return isNaN(num) ? undefined : num;\n}\n\n// Leave the weight undefined when both columns are blank (bodyweight set) instead of fabricating 0kg.\nfunction buildHevyWeight(set: IHevyStructSet): IWeight | undefined {\n  if (set.weight_lbs != null) {\n    return Weight_build(set.weight_lbs, \"lb\");\n  }\n  if (set.weight_kg != null) {\n    return Weight_build(set.weight_kg, \"kg\");\n  }\n  return undefined;\n}\n\nfunction validateHevyRecord(record: IHevyRecord & { row: number }): IImportRowError | undefined {\n  if (parseHevyDate(record.start_time) == null) {\n    return {\n      row: record.row,\n      column: \"start_time\",\n      value: `${record.start_time ?? \"\"}`,\n      message: `\"${record.start_time ?? \"\"}\" is not a valid date`,\n    };\n  }\n  for (const column of [\"reps\", \"weight_lbs\", \"weight_kg\"] as const) {\n    const value = record[column];\n    if (value != null && `${value}`.trim() !== \"\" && isNaN(Number(`${value}`))) {\n      return { row: record.row, column, value: `${value}`, message: `\"${value}\" is not a number` };\n    }\n  }\n  return undefined;\n}\n\nfunction collectHevyWarnings(record: IHevyRecord & { row: number }, warnings: IImportRowError[]): void {\n  const startTs = parseHevyDate(record.start_time);\n  if (startTs != null && ImportUtils_isSuspiciousTimestamp(startTs)) {\n    warnings.push({\n      row: record.row,\n      column: \"start_time\",\n      value: `${record.start_time}`,\n      message: `\"${record.start_time}\" looks like an implausible workout date`,\n    });\n  }\n  for (const [column, unit] of [\n    [\"weight_lbs\", \"lb\"],\n    [\"weight_kg\", \"kg\"],\n  ] as const) {\n    const value = parseHevyNumber(record[column]);\n    if (value != null && ImportUtils_isSuspiciousWeight(value, unit)) {\n      warnings.push({\n        row: record.row,\n        column,\n        value: `${record[column]}`,\n        message: `${value} ${unit} looks like an implausible weight`,\n      });\n    }\n  }\n  const reps = parseHevyNumber(record.reps);\n  if (reps != null && ImportUtils_isSuspiciousReps(reps)) {\n    warnings.push({\n      row: record.row,\n      column: \"reps\",\n      value: `${record.reps}`,\n      message: `${reps} looks like an implausible rep count`,\n    });\n  }\n}\n\nexport function ImportFromHevy_convertHevyCsvToHistoryRecords(hevyCsvRaw: string, settings: ISettings): IImportResult {\n  const parsed = Papa.parse<IHevyRecord>(hevyCsvRaw, { header: true, skipEmptyLines: true });\n  const kind = ImportUtils_detectCsvKind((parsed.meta.fields ?? []).map((f) => `${f}`));\n  if (kind === \"liftosaur\") {\n    throw new ImportFileError(\n      'This looks like a Liftosaur history CSV. Use \"Import history from CSV file\" in Settings instead.'\n    );\n  }\n  if (kind !== \"hevy\") {\n    throw new ImportFileError(\"This doesn't look like a Hevy workout export CSV.\");\n  }\n  const hevyRecords = parsed.data.map((record, i) => ({ ...record, row: i + 2 }));\n  if (hevyRecords.length === 0) {\n    throw new ImportFileError(\"The file has no workout rows\");\n  }\n\n  const errors: IImportRowError[] = [];\n  const warnings: IImportRowError[] = [];\n  const validRecords: (IHevyRecord & { row: number })[] = [];\n  for (const record of hevyRecords) {\n    const error = validateHevyRecord(record);\n    if (error) {\n      errors.push(error);\n    } else {\n      collectHevyWarnings(record, warnings);\n      validRecords.push(record);\n    }\n  }\n  if (validRecords.length < hevyRecords.length / 2) {\n    throw new ImportFileError(\n      `${errors.length} of ${hevyRecords.length} rows failed to parse - this doesn't look like a valid Hevy export.`\n    );\n  }\n\n  const hevyWorkouts: IHevyStruct[] = [];\n  for (const workout of ObjectUtils_values(CollectionUtils_groupByKey(validRecords, \"start_time\"))) {\n    if (!workout) {\n      continue;\n    }\n    const hevyExercises: IHevyStructExercise[] = [];\n    const exercises = CollectionUtils_groupByKey(workout, \"exercise_title\");\n    for (const exercise of ObjectUtils_values(exercises)) {\n      if (!exercise) {\n        continue;\n      }\n      const warmupSets = exercise.filter((record) => record.set_type === \"warmup\");\n      warmupSets.sort((a, b) => (a.set_index ?? 0) - (b.set_index ?? 0));\n      const sets = exercise.filter((record) => record.set_type !== \"warmup\");\n      sets.sort((a, b) => (a.set_index ?? 0) - (b.set_index ?? 0));\n      hevyExercises.push({\n        exercise_title: exercise[0].exercise_title,\n        exercise_notes: (exercise[0].exercise_notes || \"\").replace(/\\\\n/g, \"\\n\"),\n        warmupSets: warmupSets.map((set) => ({\n          weight_lbs: parseHevyNumber(set.weight_lbs),\n          weight_kg: parseHevyNumber(set.weight_kg),\n          reps: parseHevyNumber(set.reps) ?? 1,\n        })),\n        sets: sets.map((set) => ({\n          weight_lbs: parseHevyNumber(set.weight_lbs),\n          weight_kg: parseHevyNumber(set.weight_kg),\n          reps: parseHevyNumber(set.reps) ?? 1,\n        })),\n      });\n    }\n    hevyWorkouts.push({\n      title: workout[0].title,\n      start_time: workout[0].start_time,\n      end_time: workout[0].end_time,\n      description: (workout[0].description || \"\").replace(/\\\\n/g, \"\\n\"),\n      exercises: hevyExercises,\n      row: workout[0].row,\n    });\n  }\n\n  const customExercises: Record<string, ICustomExercise> = {};\n  const backMap: Partial<Record<string, string>> = {};\n  const historyRecords = hevyWorkouts.map((hevyWorkout): IHistoryRecord | undefined => {\n    const startTs = parseHevyDate(hevyWorkout.start_time)!;\n    const endTs = parseHevyDate(hevyWorkout.end_time);\n    if (hevyWorkout.end_time && endTs == null) {\n      warnings.push({\n        row: hevyWorkout.row,\n        column: \"end_time\",\n        value: hevyWorkout.end_time,\n        message: `\"${hevyWorkout.end_time}\" is not a valid date, using the start time instead`,\n      });\n    }\n    const entries = hevyWorkout.exercises.map((record, index) => {\n      let exerciseNameAndEquipment = exerciseMapping[record.exercise_title];\n      let exerciseId: string;\n      if (!exerciseNameAndEquipment) {\n        // Key by the sanitized name so titles differing only in stripped characters\n        // (e.g. \"Cable Row (Wide)\" vs \"Cable Row Wide\") merge into one custom exercise.\n        const sanitizedTitle = Exercise_sanitizeName(record.exercise_title);\n        const maybeExerciseId = backMap[sanitizedTitle];\n        if (!maybeExerciseId) {\n          exerciseId = UidFactory_generateUid(8);\n          backMap[sanitizedTitle] = exerciseId;\n          customExercises[exerciseId] = {\n            vtype: \"custom_exercise\",\n            id: exerciseId,\n            name: sanitizedTitle,\n            isDeleted: false,\n            meta: {\n              bodyParts: [],\n              targetMuscles: [],\n              synergistMuscles: [],\n              sortedEquipment: [],\n            },\n            types: [],\n          };\n        } else {\n          exerciseId = maybeExerciseId;\n        }\n        exerciseNameAndEquipment = [sanitizedTitle, undefined];\n      } else {\n        const [exerciseName] = exerciseNameAndEquipment;\n        const exercise = Exercise_findByName(exerciseName, {})!;\n        exerciseId = exercise.id;\n      }\n      const [, equipment] = exerciseNameAndEquipment;\n      const isUnilateral = Exercise_getIsUnilateral({ id: exerciseId, equipment: equipment }, settings);\n      return {\n        vtype: \"history_entry\" as const,\n        id: Progress_getEntryId({ id: exerciseId, equipment }, UidFactory_generateUid(3)),\n        exercise: { id: exerciseId, equipment: equipment },\n        index,\n        warmupSets: record.warmupSets.map((set, i) => {\n          const weight = buildHevyWeight(set);\n          return {\n            vtype: \"set\" as const,\n            id: UidFactory_generateUid(6),\n            index: i,\n            originalWeight: weight,\n            weight,\n            completedWeight: weight,\n            reps: set.reps ?? 1,\n            completedReps: set.reps ?? 1,\n            completedRepsLeft: isUnilateral ? set.reps : undefined,\n            isUnilateral,\n            isCompleted: true,\n            isAmrap: false,\n            timestamp: startTs,\n          };\n        }),\n        sets: record.sets.map((set, i) => {\n          const weight = buildHevyWeight(set);\n          return {\n            vtype: \"set\" as const,\n            id: UidFactory_generateUid(6),\n            index: i,\n            weight,\n            originalWeight: weight,\n            completedWeight: weight,\n            reps: set.reps ?? 1,\n            completedReps: set.reps ?? 1,\n            completedRepsLeft: isUnilateral ? set.reps : undefined,\n            isAmrap: false,\n            timestamp: startTs,\n            isUnilateral,\n            isCompleted: true,\n          };\n        }),\n        notes: record.exercise_notes,\n      };\n    });\n    const historyRecord: IHistoryRecord = {\n      vtype: \"history_record\",\n      id: History_generateId(endTs ?? startTs),\n      date: new Date(endTs ?? startTs).toISOString(),\n      startTime: startTs,\n      endTime: endTs ?? startTs,\n      dayName: hevyWorkout.title,\n      programName: \"Hevy\",\n      programId: \"hevy\",\n      day: 1,\n      notes: hevyWorkout.description,\n      entries,\n    };\n    const validation = Storage_validate(historyRecord, VHistoryRecord, \"historyRecord\");\n    if (!validation.success) {\n      errors.push({\n        row: hevyWorkout.row,\n        message: `Workout \"${hevyWorkout.start_time}\" failed validation: ${validation.error.join(\"; \")}`,\n      });\n      return undefined;\n    }\n    return historyRecord;\n  });\n\n  return { historyRecords: CollectionUtils_compact(historyRecords), customExercises, errors, warnings };\n}\n","import {\n  IHistoryRecord,\n  ICustomExercise,\n  ISettings,\n  IHistoryEntry,\n  availableMuscles,\n  IMuscle,\n  IExerciseType,\n  VHistoryRecord,\n} from \"../types\";\nimport Papa from \"papaparse\";\nimport { CollectionUtils_groupByKey, CollectionUtils_compact, CollectionUtils_sortBy } from \"./collection\";\nimport { ObjectUtils_values } from \"./object\";\nimport { Exercise_findByNameAndEquipment, Exercise_getIsUnilateral, Exercise_sanitizeName } from \"../models/exercise\";\nimport { Weight_build } from \"../models/weight\";\nimport { StringUtils_dashcase } from \"./string\";\nimport { Progress_getEntryId } from \"../models/progress\";\nimport { UidFactory_generateUid } from \"./generator\";\nimport { History_generateId } from \"../models/history\";\nimport { Storage_validate } from \"../models/storage\";\nimport {\n  IImportResult,\n  IImportRowError,\n  ImportFileError,\n  ImportUtils_detectCsvKind,\n  ImportUtils_isSuspiciousReps,\n  ImportUtils_isSuspiciousTimestamp,\n  ImportUtils_isSuspiciousWeight,\n} from \"./importTypes\";\n\nconst columns = [\n  \"workoutDateTime\",\n  \"program\",\n  \"dayname\",\n  \"exercise\",\n  \"isWarmupSet\",\n  \"requiredReps\",\n  \"completedReps\",\n  \"isAmrap\",\n  \"rpe\",\n  \"completedRpe\",\n  \"logRpe\",\n  \"weightValue\",\n  \"weightUnit\",\n  \"completedWeightValue\",\n  \"completedWeightUnit\",\n  \"askWeight\",\n  \"completedRepsTime\",\n  \"targetMuscles\",\n  \"synergistMuscles\",\n  \"notes\",\n  \"completedRepsLeft\",\n  \"setTimer\",\n  \"isOverflowSetTimer\",\n  \"completedSetTimer\",\n  \"completedSetTimerLeft\",\n] as const;\ntype IColumn = (typeof columns)[number];\n\ninterface ILiftosaurRecord extends Record<IColumn, string> {\n  row: number;\n}\n\nconst numericColumns: IColumn[] = [\n  \"requiredReps\",\n  \"completedReps\",\n  \"rpe\",\n  \"completedRpe\",\n  \"weightValue\",\n  \"completedWeightValue\",\n  \"completedRepsLeft\",\n  \"setTimer\",\n  \"completedSetTimer\",\n  \"completedSetTimerLeft\",\n];\nconst unitColumns: IColumn[] = [\"weightUnit\", \"completedWeightUnit\"];\n\nfunction parseTimestamp(date: string): number | undefined {\n  try {\n    const value = new Date(date).getTime();\n    return isNaN(value) ? undefined : value;\n  } catch (e) {\n    return undefined;\n  }\n}\n\nfunction validateRecord(record: ILiftosaurRecord): IImportRowError | undefined {\n  if (parseTimestamp(record.workoutDateTime) == null) {\n    return {\n      row: record.row,\n      column: \"Workout DateTime\",\n      value: record.workoutDateTime,\n      message: `\"${record.workoutDateTime}\" is not a valid date`,\n    };\n  }\n  for (const column of numericColumns) {\n    const value = record[column];\n    if (value && isNaN(Number(value))) {\n      return { row: record.row, column, value, message: `\"${value}\" is not a number` };\n    }\n  }\n  for (const column of unitColumns) {\n    const value = record[column];\n    if (value && value !== \"kg\" && value !== \"lb\") {\n      return { row: record.row, column, value, message: `\"${value}\" is not a valid unit (expected \"kg\" or \"lb\")` };\n    }\n  }\n  return undefined;\n}\n\nfunction collectWarnings(record: ILiftosaurRecord, warnings: IImportRowError[]): void {\n  const timestamp = parseTimestamp(record.workoutDateTime);\n  if (timestamp != null && ImportUtils_isSuspiciousTimestamp(timestamp)) {\n    warnings.push({\n      row: record.row,\n      column: \"Workout DateTime\",\n      value: record.workoutDateTime,\n      message: `\"${record.workoutDateTime}\" looks like an implausible workout date`,\n    });\n  }\n  for (const [valueColumn, unitColumn] of [\n    [\"weightValue\", \"weightUnit\"],\n    [\"completedWeightValue\", \"completedWeightUnit\"],\n  ] as const) {\n    const value = record[valueColumn];\n    const unit = record[unitColumn];\n    if (value && (unit === \"kg\" || unit === \"lb\") && ImportUtils_isSuspiciousWeight(Number(value), unit)) {\n      warnings.push({\n        row: record.row,\n        column: valueColumn,\n        value,\n        message: `${value} ${unit} looks like an implausible weight`,\n      });\n    }\n  }\n  for (const column of [\"requiredReps\", \"completedReps\"] as const) {\n    const value = record[column];\n    if (value && !isNaN(Number(value)) && ImportUtils_isSuspiciousReps(Number(value))) {\n      warnings.push({ row: record.row, column, value, message: `${value} looks like an implausible rep count` });\n    }\n  }\n  if (record.completedRepsTime && parseTimestamp(record.completedRepsTime) == null) {\n    warnings.push({\n      row: record.row,\n      column: \"Completed Reps Time\",\n      value: record.completedRepsTime,\n      message: `\"${record.completedRepsTime}\" is not a valid time, using the workout date instead`,\n    });\n  }\n}\n\nexport function ImportFromLiftosaur_convertLiftosaurCsvToHistoryRecords(\n  liftosaurCsvRaw: string,\n  settings: ISettings\n): IImportResult {\n  const parsed = Papa.parse<string[]>(liftosaurCsvRaw, { skipEmptyLines: true });\n  const rows = parsed.data;\n  if (rows.length < 2) {\n    throw new ImportFileError(\"The file has no workout rows\");\n  }\n  const kind = ImportUtils_detectCsvKind(rows[0].map((h) => `${h}`));\n  if (kind === \"hevy\") {\n    throw new ImportFileError(\n      'This looks like a Hevy export. Use \"Import history from other apps\" in Settings instead.'\n    );\n  }\n  if (kind !== \"liftosaur\") {\n    throw new ImportFileError(\n      \"This doesn't look like a Liftosaur history CSV - the header row doesn't match the format of \" +\n        '\"Export history to CSV file\".'\n    );\n  }\n\n  const liftosaurRecords = rows.slice(1).map<ILiftosaurRecord>((cells, i) => {\n    const record = { row: i + 2 } as ILiftosaurRecord;\n    columns.forEach((column, columnIndex) => {\n      record[column] = `${cells[columnIndex] ?? \"\"}`;\n    });\n    return record;\n  });\n\n  const errors: IImportRowError[] = [];\n  const warnings: IImportRowError[] = [];\n  const validRecords: ILiftosaurRecord[] = [];\n  for (const record of liftosaurRecords) {\n    const error = validateRecord(record);\n    if (error) {\n      errors.push(error);\n    } else {\n      collectWarnings(record, warnings);\n      validRecords.push(record);\n    }\n  }\n  if (validRecords.length < liftosaurRecords.length / 2) {\n    throw new ImportFileError(\n      `${errors.length} of ${liftosaurRecords.length} rows failed to parse - this doesn't look like a valid Liftosaur history CSV.`\n    );\n  }\n\n  const groupedRecords = CollectionUtils_groupByKey(validRecords, \"workoutDateTime\");\n  const customExercises: Record<string, ICustomExercise> = {};\n  const historyRecords = CollectionUtils_compact(ObjectUtils_values(groupedRecords)).map((records) => {\n    const rawEntries = CollectionUtils_compact(ObjectUtils_values(CollectionUtils_groupByKey(records, \"exercise\")));\n    const entries = rawEntries.map((rawSets, index) => {\n      const firstSet = rawSets[0];\n      const exerciseName = Exercise_sanitizeName(firstSet.exercise || \"Unknown\");\n      const exercise = Exercise_findByNameAndEquipment(exerciseName, settings.exercises);\n      let exerciseId: string;\n      let exerciseEquipment: string | undefined = undefined;\n      if (exercise) {\n        exerciseId = exercise.id;\n        exerciseEquipment = exercise.equipment;\n      } else {\n        const id = StringUtils_dashcase(exerciseName || \"exercise\");\n        customExercises[id] = {\n          vtype: \"custom_exercise\",\n          id,\n          name: exerciseName,\n          isDeleted: false,\n          meta: {\n            bodyParts: [],\n            targetMuscles: ((firstSet.targetMuscles || \"\")\n              .split(\",\")\n              .filter((m) => availableMuscles.indexOf(m as IMuscle) !== -1) || []) as IMuscle[],\n            synergistMuscles: ((firstSet.synergistMuscles || \"\")\n              .split(\",\")\n              .filter((m) => availableMuscles.indexOf(m as IMuscle) !== -1) || []) as IMuscle[],\n            sortedEquipment: [],\n          },\n          types: [],\n        };\n        exerciseId = id;\n      }\n\n      const rawWarmupSets = rawSets.filter((set) => set.isWarmupSet === \"1\");\n      const rawWorkoutSets = rawSets.filter((set) => set.isWarmupSet !== \"1\");\n      const exerciseType: IExerciseType = { id: exerciseId, equipment: exerciseEquipment };\n      const isUnilateral = Exercise_getIsUnilateral(exerciseType, settings);\n\n      const buildSet = (set: ILiftosaurRecord, i: number): IHistoryEntry[\"sets\"][number] => {\n        const weight =\n          set.weightValue && set.weightUnit\n            ? Weight_build(Number(set.weightValue), set.weightUnit as \"kg\" | \"lb\")\n            : undefined;\n        const completedReps = set.completedReps ? Number(set.completedReps) : undefined;\n        const completedWeight =\n          set.completedWeightValue && set.completedWeightUnit\n            ? Weight_build(Number(set.completedWeightValue), set.completedWeightUnit as \"kg\" | \"lb\")\n            : undefined;\n        const completedRpe = set.completedRpe ? Number(set.completedRpe) : undefined;\n        const optionalNumber = (value: string): number | undefined => (value ? Number(value) : undefined);\n        const completedRepsLeft = optionalNumber(set.completedRepsLeft) ?? (isUnilateral ? completedReps : undefined);\n        return {\n          vtype: \"set\",\n          id: UidFactory_generateUid(6),\n          index: i,\n          reps: set.requiredReps ? Number(set.requiredReps) : undefined,\n          completedReps: completedReps,\n          isAmrap: set.isAmrap === \"1\",\n          rpe: set.rpe ? Number(set.rpe) : undefined,\n          completedRpe: completedRpe,\n          completedRepsLeft,\n          setTimer: optionalNumber(set.setTimer),\n          isOverflowSetTimer: set.isOverflowSetTimer === \"1\" || undefined,\n          completedSetTimer: optionalNumber(set.completedSetTimer),\n          completedSetTimerLeft: optionalNumber(set.completedSetTimerLeft),\n          isUnilateral,\n          logRpe: set.logRpe === \"1\",\n          weight: weight,\n          originalWeight: weight,\n          completedWeight: completedWeight,\n          askWeight: set.askWeight === \"1\",\n          label: \"\",\n          timestamp: parseTimestamp(set.completedRepsTime) ?? parseTimestamp(set.workoutDateTime),\n          isCompleted: completedReps != null || completedWeight != null || completedRpe != null,\n        };\n      };\n\n      const entry: IHistoryEntry = {\n        vtype: \"history_entry\",\n        id: Progress_getEntryId(exerciseType, UidFactory_generateUid(3)),\n        exercise: exerciseType,\n        index,\n        warmupSets: rawWarmupSets.map(buildSet),\n        sets: rawWorkoutSets.map(buildSet),\n        notes: firstSet.notes,\n      };\n      return entry;\n    });\n    const firstRecord = records[0];\n    let endTime = CollectionUtils_sortBy(\n      CollectionUtils_compact(entries.flatMap((e) => e.warmupSets.concat(e.sets)).map((s) => s.timestamp)).map((t) => ({\n        t,\n      })),\n      \"t\",\n      true\n    )[0]?.t;\n    const startTime = parseTimestamp(firstRecord.workoutDateTime)!;\n    if (endTime == null || endTime < startTime) {\n      endTime = startTime;\n    }\n    const historyRecord: IHistoryRecord = {\n      vtype: \"history_record\",\n      date: new Date(startTime).toISOString(),\n      day: 1,\n      dayName: `${firstRecord.dayname}` || \"Workout\",\n      programName: `${firstRecord.program}` || \"CSV Import\",\n      intervals: [[startTime, endTime]],\n      entries,\n      id: History_generateId(endTime ?? startTime),\n      programId: StringUtils_dashcase(firstRecord.program || \"csv\"),\n      startTime: startTime,\n      dayInWeek: 1,\n      endTime: endTime,\n      notes: \"\",\n    };\n    const validation = Storage_validate(historyRecord, VHistoryRecord, \"historyRecord\");\n    if (!validation.success) {\n      errors.push({\n        row: firstRecord.row,\n        message: `Workout \"${firstRecord.workoutDateTime}\" failed validation: ${validation.error.join(\"; \")}`,\n      });\n      return undefined;\n    }\n    return historyRecord;\n  });\n\n  return { historyRecords: CollectionUtils_compact(historyRecords), customExercises, errors, warnings };\n}\n","import { IEither } from \"./types\";\nimport { Encoder_decode } from \"./encoder\";\nimport { Service } from \"../api/service\";\nimport { UrlUtils_build } from \"./url\";\n\nexport interface IImportLinkData {\n  decoded: string;\n  source?: string;\n  userid?: string;\n}\n\nexport async function ImportFromLink_importFromLink(\n  link: string,\n  client: Window[\"fetch\"]\n): Promise<IEither<{ decoded: string; source?: string; userid?: string }, string[]>> {\n  let url: URL;\n  try {\n    url = UrlUtils_build(link);\n  } catch (e) {\n    return { success: false, error: [\"Invalid link\"] };\n  }\n  let base64 = url.searchParams.get(\"data\") || undefined;\n  let source = url.searchParams.get(\"s\") || undefined;\n  let userid = url.searchParams.get(\"u\") || undefined;\n  let decoded;\n  if (base64) {\n    decoded = await getDecodedData(base64);\n  } else {\n    const [type, id] = url.pathname.split(\"/\").filter((p) => p);\n    if ((type === \"p\" || type === \"n\") && id) {\n      const service = new Service(client);\n      const result = await service.getDataFromShortUrl(type, id);\n      base64 = result.data;\n      source = source || result.s;\n      userid = userid || result.u;\n      if (base64) {\n        decoded = await getDecodedData(base64);\n      }\n    }\n  }\n  if (decoded) {\n    if (decoded.success) {\n      return { success: true, data: { decoded: decoded.data, source, userid } };\n    } else {\n      return decoded;\n    }\n  } else {\n    return { success: false, error: [\"No data found\"] };\n  }\n}\n\nasync function getDecodedData(base64: string): Promise<IEither<string, string[]>> {\n  try {\n    const decoded = await Encoder_decode(base64);\n    return { success: true, data: decoded };\n  } catch (e) {\n    return { success: false, error: [\"Error decoding the link\"] };\n  }\n}\n","import { ICustomExercise, IHistoryRecord } from \"../types\";\n\nexport interface IImportRowError {\n  row: number;\n  column?: string;\n  value?: string;\n  message: string;\n}\n\nexport interface IImportResult {\n  historyRecords: IHistoryRecord[];\n  customExercises: Record<string, ICustomExercise>;\n  errors: IImportRowError[];\n  warnings: IImportRowError[];\n}\n\nexport class ImportFileError extends Error {}\n\nexport function ImportUtils_customExercisesForRecords(\n  records: IHistoryRecord[],\n  customExercises: Record<string, ICustomExercise>\n): Record<string, ICustomExercise> {\n  const referencedIds = new Set<string>();\n  for (const record of records) {\n    for (const entry of record.entries) {\n      referencedIds.add(entry.exercise.id);\n    }\n  }\n  const result: Record<string, ICustomExercise> = {};\n  for (const id of Object.keys(customExercises)) {\n    if (referencedIds.has(id)) {\n      result[id] = customExercises[id];\n    }\n  }\n  return result;\n}\n\nconst hevySignatureHeaders = [\"start_time\", \"exercise_title\", \"set_type\"];\nconst liftosaurSignatureHeaders = [\"workout datetime\", \"exercise\", \"is warmup set?\"];\n\nexport function ImportUtils_detectCsvKind(headers: string[]): \"hevy\" | \"liftosaur\" | \"unknown\" {\n  const normalized = headers.map((h) => h.trim().toLowerCase());\n  if (hevySignatureHeaders.every((h) => normalized.includes(h))) {\n    return \"hevy\";\n  }\n  if (liftosaurSignatureHeaders.every((h) => normalized.includes(h))) {\n    return \"liftosaur\";\n  }\n  return \"unknown\";\n}\n\nconst maxWeightLb = 3000;\nconst maxReps = 1000;\nconst minTimestamp = Date.UTC(2000, 0, 1);\n\nexport function ImportUtils_isSuspiciousWeight(value: number, unit: \"kg\" | \"lb\"): boolean {\n  const lb = unit === \"kg\" ? value * 2.2046 : value;\n  return lb < 0 || lb > maxWeightLb;\n}\n\nexport function ImportUtils_isSuspiciousReps(value: number): boolean {\n  return value < 0 || value > maxReps;\n}\n\nexport function ImportUtils_isSuspiciousTimestamp(ts: number): boolean {\n  return ts < minTimestamp || ts > Date.now() + 24 * 60 * 60 * 1000;\n}\n\nexport interface IImportSummary {\n  workoutCount: number;\n  minStartTime?: number;\n  maxStartTime?: number;\n  customExerciseNames: string[];\n  duplicateIds: Set<number>;\n}\n\nexport function ImportUtils_summarize(result: IImportResult, existingHistory: IHistoryRecord[]): IImportSummary {\n  let minStartTime: number | undefined;\n  let maxStartTime: number | undefined;\n  for (const record of result.historyRecords) {\n    if (minStartTime == null || record.startTime < minStartTime) {\n      minStartTime = record.startTime;\n    }\n    if (maxStartTime == null || record.startTime > maxStartTime) {\n      maxStartTime = record.startTime;\n    }\n  }\n  return {\n    workoutCount: result.historyRecords.length,\n    minStartTime,\n    maxStartTime,\n    customExerciseNames: Object.values(result.customExercises)\n      .map((e) => e.name)\n      .sort(),\n    duplicateIds: ImportUtils_findDuplicates(result.historyRecords, existingHistory),\n  };\n}\n\nconst duplicateToleranceMs = 60 * 1000;\n\nexport function ImportUtils_findDuplicates(records: IHistoryRecord[], existingHistory: IHistoryRecord[]): Set<number> {\n  const existingStartTimes = existingHistory.map((r) => r.startTime).sort((a, b) => a - b);\n  const duplicates = new Set<number>();\n  for (const record of records) {\n    let lo = 0;\n    let hi = existingStartTimes.length - 1;\n    while (lo <= hi) {\n      const mid = Math.floor((lo + hi) / 2);\n      const diff = existingStartTimes[mid] - record.startTime;\n      if (Math.abs(diff) <= duplicateToleranceMs) {\n        duplicates.add(record.id);\n        break;\n      } else if (diff < 0) {\n        lo = mid + 1;\n      } else {\n        hi = mid - 1;\n      }\n    }\n  }\n  return duplicates;\n}\n","export function InAppReview_request(): Promise<void> {\n  return Promise.resolve();\n}\n","import { lg } from \"./posthog\";\n\ntype ITransactionMode = \"readonly\" | \"readwrite\";\n\nfunction runTransaction<T>(\n  mode: ITransactionMode,\n  operation: (objectStore: IDBObjectStore) => IDBRequest<T>\n): Promise<T> {\n  return new Promise<T>(async (resolve, reject) => {\n    const db = await IndexedDBUtils_initialize();\n    if (db == null) {\n      lg(\"ls-indexeddb-empty\");\n      return;\n    }\n    const transaction = db.transaction(\"keyval\", mode);\n    const objectStore = transaction.objectStore(\"keyval\");\n\n    let result: T;\n\n    try {\n      const request = operation(objectStore);\n\n      request.addEventListener(\"success\", () => {\n        result = request.result;\n      });\n\n      request.addEventListener(\"error\", (e) => {\n        const error = (e.target as IDBRequest)?.error;\n        reject(error || new Error(\"IndexedDB request failed\"));\n      });\n    } catch (e) {\n      db.close();\n      reject(e);\n      return;\n    }\n\n    transaction.addEventListener(\"complete\", () => {\n      db.close();\n      resolve(result);\n    });\n\n    transaction.addEventListener(\"error\", (e) => {\n      db.close();\n      const error = (e.target as IDBTransaction)?.error;\n      reject(error || new Error(\"IndexedDB transaction failed\"));\n    });\n\n    transaction.addEventListener(\"abort\", (e) => {\n      db.close();\n      const error = (e.target as IDBTransaction)?.error;\n      reject(error || new Error(\"IndexedDB transaction aborted\"));\n    });\n  });\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction logIndexedDBError(e: any): void {\n  const errorDetails = {\n    name: e?.name,\n    message: e?.message,\n    stack: e?.stack,\n  };\n  lg(\"ls-indexeddb-error\", { json: JSON.stringify(e), details: JSON.stringify(errorDetails) });\n  console.error(\"IndexedDB error:\", e);\n}\n\nasync function withTransaction<T>(\n  mode: ITransactionMode,\n  operation: (objectStore: IDBObjectStore) => IDBRequest<T>\n): Promise<T | undefined> {\n  try {\n    return await runTransaction(mode, operation);\n  } catch (e) {\n    logIndexedDBError(e);\n    return undefined;\n  }\n}\n\nexport function IndexedDBUtils_initializeForSafari(): Promise<void> {\n  return new Promise((resolve) => {\n    if (!window.indexedDB) {\n      window.location.reload();\n      resolve();\n      return;\n    }\n    const connection = window.indexedDB.open(\"keyval-store\");\n    const handler = (): void => {\n      if (connection.result != null) {\n        connection.result.close();\n      }\n      resolve();\n    };\n    connection.addEventListener(\"success\", handler);\n    connection.addEventListener(\"error\", handler);\n    connection.addEventListener(\"blocked\", handler);\n    connection.addEventListener(\"upgradeneeded\", (event) => {\n      const request = event.target as IDBOpenDBRequest;\n      if (request?.result) {\n        request.result.createObjectStore(\"keyval\");\n      }\n    });\n  });\n}\n\nexport function IndexedDBUtils_initialize(): Promise<IDBDatabase | undefined> {\n  return new Promise((resolve, reject) => {\n    if (!window.indexedDB) {\n      window.location.reload();\n      reject(new Error(\"IndexedDB is not available\"));\n      return;\n    }\n    const connection = window.indexedDB.open(\"keyval-store\");\n    connection.addEventListener(\"success\", (event) => {\n      const request = event.target as IDBOpenDBRequest;\n      resolve(request.result);\n    });\n    connection.addEventListener(\"error\", (event) => {\n      reject(event);\n    });\n    connection.addEventListener(\"blocked\", (event) => {\n      reject(new Error(\"IndexedDB initialization blocked\"));\n    });\n    connection.addEventListener(\"upgradeneeded\", (event) => {\n      const request = event.target as IDBOpenDBRequest;\n      request.result.createObjectStore(\"keyval\");\n    });\n  });\n}\n\nexport async function IndexedDBUtils_getAllKeys(): Promise<string[]> {\n  const result = await withTransaction(\"readonly\", (objectStore) => {\n    const keys = objectStore.getAllKeys();\n    return keys as IDBRequest<string[]>;\n  });\n  if (result != null) {\n    return result;\n  } else {\n    return Promise.resolve([]);\n  }\n}\n\nexport async function IndexedDBUtils_get(key: string): Promise<unknown> {\n  const userid =\n    typeof window !== \"undefined\"\n      ? (window.tempUserId ?? (key.startsWith(\"liftosaur_\") ? key.replace(\"liftosaur_\", \"\") : undefined))\n      : undefined;\n  const result = await withTransaction(\"readonly\", (objectStore) => objectStore.getAll(key)).then(\n    (results: unknown[] | undefined) => {\n      return results?.[0];\n    }\n  );\n  lg(\"ls-indexeddb-get\", { key }, undefined, userid);\n  return result;\n}\n\nexport async function IndexedDBUtils_remove(key: string): Promise<void> {\n  await withTransaction(\"readwrite\", (objectStore) => objectStore.delete(key));\n}\n\nexport async function IndexedDBUtils_set(key: string, value?: string): Promise<void> {\n  await withTransaction(\"readwrite\", (objectStore) => {\n    return objectStore.put(value, key);\n  });\n}\n\n// Unlike IndexedDBUtils_set, REJECTS on transaction failure (e.g. quota abort): the\n// persistence layer's reference-diff cache must only record refs after a confirmed write,\n// otherwise a silently failed shard write would be skipped as \"unchanged\" forever.\nexport async function IndexedDBUtils_setMany(pairs: Array<[string, string | undefined]>): Promise<void> {\n  if (pairs.length === 0) {\n    return;\n  }\n  try {\n    // Single transaction so concurrent tabs always observe a consistent set of shards\n    await runTransaction(\"readwrite\", (objectStore) => {\n      let lastRequest: IDBRequest | undefined;\n      for (const [key, value] of pairs) {\n        lastRequest = value != null ? objectStore.put(value, key) : objectStore.delete(key);\n      }\n      return lastRequest!;\n    });\n  } catch (e) {\n    logIndexedDBError(e);\n    throw e;\n  }\n}\n","import { Exercise_get, Exercise_getIsUnilateral, Exercise_fullName } from \"../models/exercise\";\nimport { ExerciseImageUtils_url } from \"../models/exerciseImage\";\nimport { Program_evaluate, Program_getProgramExercise } from \"../models/program\";\nimport { ProgramExercise_hasUserPromptedVars } from \"../models/programExercise\";\nimport { Progress_shouldShowAmrapModal, Progress_getNextEntry, Progress_getActiveSetTimer } from \"../models/progress\";\nimport { Reps_setsStatus, Reps_findNextSetIndex } from \"../models/set\";\nimport { Weight_realizeLoad, Weight_print } from \"../models/weight\";\nimport { EquipmentLoadText_line } from \"../models/equipmentLoadText\";\nimport { IPlannerProgramExercise } from \"../pages/planner/models/types\";\nimport { IHistoryRecord, IProgram, ISettings, ISubscription } from \"../types\";\nimport { TimedSet_toView } from \"../models/timedSet\";\nimport { n } from \"./math\";\nimport {\n  ILiveActivityEntry,\n  ILiveActivityGetReady,\n  ILiveActivitySetTimer,\n  ILiveActivityState,\n} from \"./liveActivityState\";\nimport { INativeEffect } from \"../models/nativeEffects\";\nimport { Subscriptions_hasSubscription } from \"./subscriptions\";\nimport { UrlUtils_build } from \"./url\";\n\ndeclare const __HOST__: string;\n\nexport type {\n  ILiveActivitySet,\n  ILiveActivityEntry,\n  ILiveActivityRest,\n  ILiveActivitySetTimer,\n  ILiveActivityGetReady,\n  ILiveActivityState,\n} from \"./liveActivityState\";\n\nexport function LiveActivityManager_getLiveActivityEntry(\n  progress: IHistoryRecord,\n  entryIndex: number | undefined,\n  setIndex: number | undefined,\n  programExercise: IPlannerProgramExercise | undefined,\n  settings: ISettings\n): ILiveActivityEntry | undefined {\n  if (entryIndex == null || setIndex == null) {\n    return undefined;\n  }\n  const entry = progress.entries[entryIndex];\n  if (!entry) {\n    return undefined;\n  }\n  const exercise = Exercise_get(entry.exercise, settings.exercises);\n  const allSets = [...entry.warmupSets, ...entry.sets];\n  const set = allSets[setIndex];\n  if (setIndex === -1 || !set) {\n    return undefined;\n  }\n  const isNextSetWarmup = setIndex < entry.warmupSets.length;\n  const weightForPlates = set.completedWeight ?? set.weight;\n  const load = weightForPlates\n    ? Weight_realizeLoad(weightForPlates, settings, entry.exercise, isNextSetWarmup)\n    : undefined;\n  const loadText = EquipmentLoadText_line(load);\n  let exerciseImageUrl = ExerciseImageUtils_url(exercise, \"small\", settings);\n  if (exerciseImageUrl) {\n    exerciseImageUrl = UrlUtils_build(exerciseImageUrl, __HOST__)?.toString();\n  }\n  const hasUserPromptedVars = !!(programExercise && ProgramExercise_hasUserPromptedVars(programExercise));\n  const canCompleteFromLiveActivity = !Progress_shouldShowAmrapModal(\n    entry,\n    isNextSetWarmup ? setIndex : setIndex - entry.warmupSets.length,\n    isNextSetWarmup ? \"warmup\" : \"workout\",\n    hasUserPromptedVars,\n    settings\n  );\n\n  const isUnilateral = Exercise_getIsUnilateral(entry.exercise, settings);\n  const currentReps =\n    isUnilateral && set.completedRepsLeft != null\n      ? `${set.completedRepsLeft}/${set.completedReps ?? set.reps ?? 0}`\n      : (set.completedReps ?? set.reps);\n  const currentWeight = set.completedWeight ?? set.weight;\n  const state: ILiveActivityEntry = {\n    exerciseName: Exercise_fullName(exercise, settings),\n    exerciseImageUrl,\n    currentSet: setIndex + 1,\n    totalSets: allSets.length,\n    entryIndex: progress.entries.indexOf(entry),\n    setIndex,\n    completedSets: allSets.map((s, i) => ({\n      status: Reps_setsStatus([s]),\n      isWarmup: i < entry.warmupSets.length,\n    })),\n    targetReps: set.reps\n      ? `${set.minReps != null ? `${n(set.minReps)}-` : \"\"}${n(set.reps)}${set.isAmrap ? \"+\" : \"\"}`\n      : undefined,\n    targetWeight: set.weight ? `${Weight_print(set.weight)}${set.askWeight ? \"+\" : \"\"}` : undefined,\n    targetRPE: set.rpe != null ? `${n(set.rpe)}${set.logRpe ? \"+\" : \"\"}` : undefined,\n    targetTimer: set.timer != null ? set.timer.toString() : undefined,\n    plates: loadText !== \"\" ? loadText : \"None\",\n    currentWeight: currentWeight != null ? Weight_print(currentWeight) : undefined,\n    currentReps: currentReps != null ? currentReps.toString() : undefined,\n    isWarmup: isNextSetWarmup,\n    canCompleteFromLiveActivity,\n    isSetTimer: set.setTimer != null,\n  };\n  return state;\n}\n\nexport function LiveActivityManager_updateProgressLiveActivity(\n  effects: INativeEffect[],\n  program: IProgram | undefined,\n  progress: IHistoryRecord,\n  settings: ISettings,\n  subscription: ISubscription | undefined,\n  entryIndex: number | undefined,\n  setIndex: number | undefined,\n  restTimer: number | undefined,\n  restTimerSince: number | undefined\n): void {\n  const entry = entryIndex != null ? progress.entries[entryIndex] : undefined;\n  const evaluatedProgram = program ? Program_evaluate(program, settings) : undefined;\n  const programExercise =\n    evaluatedProgram && entry\n      ? Program_getProgramExercise(progress.day, evaluatedProgram, entry.programExerciseId)\n      : undefined;\n  LiveActivityManager_updateLiveActivity(\n    effects,\n    progress,\n    entryIndex,\n    setIndex,\n    restTimer,\n    restTimerSince,\n    programExercise,\n    settings,\n    subscription\n  );\n}\n\nexport function LiveActivityManager_updateLiveActivity(\n  effects: INativeEffect[],\n  progress: IHistoryRecord,\n  entryIndex: number | undefined,\n  setIndex: number | undefined,\n  restTimer: number | undefined,\n  restTimerSince: number | undefined,\n  programExercise: IPlannerProgramExercise | undefined,\n  settings: ISettings,\n  subscription?: ISubscription\n): void {\n  if (!subscription || !Subscriptions_hasSubscription(subscription)) {\n    return;\n  }\n  let liveActivityEntry = LiveActivityManager_getLiveActivityEntry(\n    progress,\n    entryIndex,\n    setIndex,\n    programExercise,\n    settings\n  );\n\n  // A running set timer takes over the live activity entirely: it shows the timed set's\n  // count-up clock and \"complete the set\" buttons instead of the next-exercise/rest layout.\n  const view = TimedSet_toView(progress, Progress_getActiveSetTimer(progress), settings);\n  let setTimerState: ILiveActivitySetTimer | undefined;\n  let getReadyState: ILiveActivityGetReady | undefined;\n  if (view != null) {\n    liveActivityEntry =\n      LiveActivityManager_getLiveActivityEntry(\n        progress,\n        view.entryIndex,\n        view.currentSet - 1,\n        programExercise,\n        settings\n      ) ?? liveActivityEntry;\n    if (view.stage === \"work\") {\n      setTimerState = {\n        setTimerSince: view.startedAt,\n        setTimer: view.targetSeconds,\n        isOverflow: view.isOverflow,\n        isCompleted: view.isCompleted,\n        entryIndex: view.entryIndex,\n        setIndex: view.setIndex,\n        restTimer: view.restSeconds,\n        phaseId: view.phaseId,\n        side: view.side,\n        recordedThisSide: view.recordedThisSide,\n      };\n    } else {\n      getReadyState = {\n        getReadySince: view.startedAt,\n        getReady: view.getReadySeconds,\n        entryIndex: view.entryIndex,\n        setIndex: view.setIndex,\n        setTimer: view.targetSeconds,\n        phaseId: view.phaseId,\n        side: view.side,\n      };\n    }\n  }\n\n  const restingSet =\n    progress.timerEntryIndex != null && progress.timerSetIndex != null\n      ? progress.entries[progress.timerEntryIndex]?.sets[progress.timerSetIndex]\n      : undefined;\n  const attributes: ILiveActivityState = {\n    workoutStartTimestamp: progress.startTime,\n    historyEntryState: liveActivityEntry,\n    setTimer: setTimerState,\n    getReady: getReadyState,\n    restTimer:\n      setTimerState == null && getReadyState == null && progress.timerSince != null && progress.timer != null\n        ? {\n            restTimerSince: restTimerSince ?? progress.timerSince,\n            restTimer: restTimer ?? progress.timer,\n            isAuto: !!restingSet?.auto,\n          }\n        : undefined,\n    ignoreDoNotDisturb: !!settings.ignoreDoNotDisturb,\n  };\n  effects.push({ type: \"updateLiveActivity\", state: attributes });\n}\n\nexport function LiveActivityManager_updateLiveActivityForNextEntry(\n  effects: INativeEffect[],\n  progress: IHistoryRecord,\n  entryIndex: number,\n  mode: \"workout\" | \"warmup\",\n  programExercise: IPlannerProgramExercise | undefined,\n  settings: ISettings,\n  subscription?: ISubscription\n): void {\n  const currentEntry = progress.entries[entryIndex];\n  if (!currentEntry) {\n    return;\n  }\n  const nextEntry = Progress_getNextEntry(progress, currentEntry, mode, true);\n  const nextEntryIndex = nextEntry ? progress.entries.indexOf(nextEntry) : undefined;\n  const nextSetIndex = nextEntry ? Reps_findNextSetIndex(nextEntry) : undefined;\n  LiveActivityManager_updateLiveActivity(\n    effects,\n    progress,\n    nextEntryIndex,\n    nextSetIndex,\n    progress.timer,\n    progress.timerSince,\n    programExercise,\n    settings,\n    subscription\n  );\n}\n","import RB from \"rollbar\";\nimport { Platform } from \"react-native\";\nimport { UrlUtils_build } from \"./url\";\nimport { IAffiliateData } from \"../types\";\nimport { IEventPayload } from \"../api/service\";\nimport { EventManager_isAvailable, EventManager_log } from \"./eventManager\";\n\ndeclare let Rollbar: RB;\ndeclare let __API_HOST__: string;\ndeclare let __COMMIT_HASH__: string;\n\nexport function LogUtils_log(\n  user: string,\n  action: string,\n  affiliates: Partial<Record<string, IAffiliateData>>,\n  subscriptions: string[],\n  referrer?: string,\n  landingPage?: string,\n  detail?: string\n): void {\n  const platform = {\n    name: Platform.OS,\n    version: \"RN\",\n  };\n\n  if (EventManager_isAvailable()) {\n    const event: IEventPayload = {\n      type: \"log\",\n      userId: user,\n      timestamp: Date.now(),\n      action,\n      detail,\n      affiliates,\n      subscriptions,\n      referrer,\n      landingPage,\n      platform,\n      commithash: typeof __COMMIT_HASH__ !== \"undefined\" ? __COMMIT_HASH__ : \"unknown\",\n    };\n    EventManager_log(JSON.stringify(event));\n    return;\n  }\n\n  const url = UrlUtils_build(`${__API_HOST__}/api/log`);\n  try {\n    fetch(url.toString(), {\n      method: \"POST\",\n      body: JSON.stringify({ user, action, detail, affiliates, platform, subscriptions, referrer, landingPage }),\n      credentials: \"include\",\n    });\n  } catch (e) {\n    if (Rollbar != null) {\n      Rollbar.error(\"Log failed\");\n    }\n  }\n}\n","export function MathUtils_round(value: number, to: number): number {\n  return MathUtils_roundFloat(Math.round(value / to) * to, 4);\n}\n\nexport function MathUtils_roundTo05(value: number): number {\n  return MathUtils_round(value, 0.5);\n}\n\nexport function MathUtils_roundTo005(value: number): number {\n  return MathUtils_round(value, 0.05);\n}\n\nexport function MathUtils_roundTo0005(value: number): number {\n  return MathUtils_round(value, 0.005);\n}\n\nexport function MathUtils_roundTo00005(value: number): number {\n  return MathUtils_round(value, 0.0005);\n}\n\nexport function MathUtils_roundTo000005(value: number): number {\n  return MathUtils_round(value, 0.00005);\n}\n\nexport function MathUtils_roundFloat(value: number, precision: number): number {\n  if (typeof value !== \"number\" || isNaN(value)) {\n    return 0;\n  }\n  return +value.toFixed(precision);\n}\n\nexport function MathUtils_applyOp(a: number, b: number, opr: \"+=\" | \"-=\" | \"*=\" | \"/=\" | \"=\"): number {\n  if (opr === \"=\") {\n    return b;\n  } else if (opr === \"+=\") {\n    return a + b;\n  } else if (opr === \"-=\") {\n    return a - b;\n  } else if (opr === \"*=\") {\n    return MathUtils_roundTo005(a * b);\n  } else {\n    return MathUtils_roundTo005(a / b);\n  }\n}\n\nexport function MathUtils_clamp(value: number, min?: number, max?: number): number {\n  if (min != null && max != null) {\n    return Math.max(min, Math.min(max, value));\n  } else if (min != null) {\n    return Math.max(min, value);\n  } else if (max != null) {\n    return Math.min(max, value);\n  } else {\n    return value;\n  }\n}\n\nexport function MathUtils_toWord(num?: number): string | undefined {\n  if (num == null) {\n    return undefined;\n  }\n  return [\"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"ten\", \"eleven\", \"twelve\"][\n    num\n  ];\n}\n\nexport function MathUtils_parse(value?: string): number | undefined {\n  if (value == null) {\n    return undefined;\n  }\n  const num = Number(value);\n  return isNaN(num) ? undefined : num;\n}\n\n// Non-US iOS/Android keyboards use \",\" as the decimal separator, but Number()/parseFloat() only accept \".\"\nexport function MathUtils_normalizeNumStr(value: string): string {\n  return value.replace(/,/g, \".\");\n}\n\nexport function n(value: number, precision: number = 2): string {\n  return `${MathUtils_roundFloat(value, precision)}`;\n}\n\nexport function MathUtils_formatCompact(value: number, fractionDigits: number = 1): string {\n  if (!isFinite(value)) {\n    return `${value}`;\n  }\n  const abs = Math.abs(value);\n  const sign = value < 0 ? \"-\" : \"\";\n  const trim = (num: number): string => {\n    const fixed = num.toFixed(fractionDigits);\n    return fixed.replace(/\\.?0+$/, \"\");\n  };\n  if (abs >= 1e9) {\n    return `${sign}${trim(abs / 1e9)}b`;\n  }\n  if (abs >= 1e6) {\n    return `${sign}${trim(abs / 1e6)}m`;\n  }\n  if (abs >= 1e3) {\n    return `${sign}${trim(abs / 1e3)}k`;\n  }\n  return `${sign}${trim(abs)}`;\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { CollectionUtils_compact, CollectionUtils_remove } from \"./collection\";\nimport { INonNullObject } from \"./types\";\n\nexport function ObjectUtils_keys<T extends {}>(obj: T): Array<keyof T> {\n  return Object.keys(obj) as Array<keyof T>;\n}\n\nexport function ObjectUtils_values<T extends {}>(obj: T): Array<T[keyof T]> {\n  if (\"values\" in Object) {\n    return Object.values(obj);\n  } else {\n    return ObjectUtils_keys(obj).map((key) => obj[key]);\n  }\n}\n\nexport function ObjectUtils_entries<T extends {}>(obj: T): Array<[keyof T, T[keyof T]]> {\n  return ObjectUtils_keys(obj).map((key) => [key, obj[key]]);\n}\n\nexport function ObjectUtils_entriesNonnull<T extends {}>(obj: T): Array<[keyof T, NonNullable<T[keyof T]>]> {\n  return CollectionUtils_compact(ObjectUtils_keys(obj)).map((key) => [key, obj[key] as NonNullable<T[keyof T]>]);\n}\n\nexport function ObjectUtils_isEmpty<T extends {}>(obj: T): boolean {\n  return ObjectUtils_keys(obj).length === 0;\n}\n\nexport function ObjectUtils_isNotEmpty<T extends {}>(obj: T): boolean {\n  return !ObjectUtils_isEmpty(obj);\n}\n\nexport function ObjectUtils_isEqual<T extends Record<string, any>>(\n  obj1: T,\n  obj2: T,\n  ignoreKeys: string[] = []\n): boolean {\n  if (obj1 === obj2) {\n    return true;\n  }\n  // Create a stack for comparing objects\n  const stack: Array<[any, any]> = [[obj1, obj2]];\n\n  while (stack.length > 0) {\n    // Pop a pair of items from the stack\n    const [currentObj1, currentObj2] = stack.pop()!;\n    if (currentObj1 === currentObj2) {\n      continue;\n    }\n\n    // Check if both are objects\n    if (\n      typeof currentObj1 !== \"object\" ||\n      typeof currentObj2 !== \"object\" ||\n      currentObj1 == null ||\n      currentObj2 == null\n    ) {\n      if (currentObj1 !== currentObj2) {\n        return false;\n      }\n      continue;\n    }\n\n    // Get keys of both objects\n    const keys1 = Object.keys(currentObj1);\n    const keys2 = Object.keys(currentObj2);\n\n    // Iterate over keys and add nested objects to the stack\n    for (const key of new Set([...keys1, ...keys2])) {\n      if (ignoreKeys.indexOf(key) !== -1) {\n        continue;\n      }\n      stack.push([currentObj1[key], currentObj2[key]]);\n    }\n  }\n\n  // If all checks pass, the objects are equal\n  return true;\n}\n\nexport function ObjectUtils_diffPaths<T extends object>(obj1original: T, obj2original: T): string[] {\n  const result: string[] = [];\n  const queue: {\n    obj1: any;\n    obj2: any;\n    path: string;\n  }[] = [{ obj1: obj1original, obj2: obj2original, path: \"\" }];\n\n  while (queue.length > 0) {\n    const { obj1, obj2, path } = queue.shift()!;\n\n    if (obj1 === obj2) {\n      continue;\n    }\n\n    if (Object(obj1) !== obj1 || Object(obj2) !== obj2) {\n      if (obj1 !== obj2) {\n        // console.log(\"diffPath\", path, obj1, obj2);\n        result.push(path);\n      }\n      continue;\n    }\n\n    for (const key of new Set([...Object.keys(obj1), ...Object.keys(obj2)])) {\n      const newPath = path ? `${path}.${key}` : key;\n      queue.push({ obj1: obj1[key], obj2: obj2[key], path: newPath });\n    }\n  }\n\n  return result;\n}\n\nexport function ObjectUtils_diff<T extends Record<string, any>>(oldObj: T, newObj: T): T {\n  const chKeys = ObjectUtils_changedKeys(oldObj, newObj);\n  const result: Partial<T> = {};\n  for (const key of ObjectUtils_keys(chKeys)) {\n    const value = chKeys[key];\n    if (value === \"add\" || value === \"update\") {\n      result[key] = newObj[key];\n    }\n  }\n  return result as any;\n}\n\nexport function ObjectUtils_changedKeys<T extends {}>(\n  oldObj: T,\n  newObj: T,\n  eq: (a: any, b: any) => boolean = (a, b) => a === b\n): Partial<Record<keyof T, \"delete\" | \"update\" | \"add\">> {\n  let oldKeys = ObjectUtils_keys(oldObj);\n  const newKeys = ObjectUtils_keys(newObj);\n  const changes: Partial<Record<keyof T, \"delete\" | \"update\" | \"add\">> = {};\n\n  for (const newKey of newKeys) {\n    if (newObj[newKey] != null && oldObj[newKey] == null) {\n      changes[newKey] = \"add\";\n    } else if (newObj[newKey] == null && oldObj[newKey] != null) {\n      changes[newKey] = \"delete\";\n    } else if (newObj[newKey] != null && oldObj[newKey] != null) {\n      if (!eq(newObj[newKey], oldObj[newKey])) {\n        changes[newKey] = \"update\";\n      }\n    }\n    oldKeys = CollectionUtils_remove(oldKeys, newKey);\n  }\n  for (const oldKey of oldKeys) {\n    if (oldObj[oldKey] != null && newObj[oldKey] == null) {\n      changes[oldKey] = \"delete\";\n    }\n  }\n  return changes;\n}\n\nexport function ObjectUtils_mapValues<U, V, T extends Record<any, U>>(\n  obj: T,\n  fn: (x: U, k: keyof T) => V\n): Record<keyof T, V> {\n  return ObjectUtils_keys(obj).reduce<Record<keyof T, V>>(\n    (memo, k) => {\n      memo[k] = fn(obj[k], k);\n      return memo;\n    },\n    {} as Record<keyof T, V>\n  );\n}\n\nexport function ObjectUtils_filter<T extends {}>(obj: T, cb: (key: keyof T, value: T[keyof T]) => boolean): Partial<T> {\n  const filteredKeys = ObjectUtils_keys(obj).filter((key) => {\n    const value = obj[key];\n    return cb(key, value);\n  });\n  return filteredKeys.reduce<Partial<T>>((memo, k) => {\n    memo[k] = obj[k];\n    return memo;\n  }, {});\n}\n\nexport function ObjectUtils_compact<T extends Record<string, any>>(obj: T): INonNullObject<T> {\n  return Object.fromEntries(Object.entries(obj).filter(([_, value]) => value !== null)) as INonNullObject<T>;\n}\n\nexport function ObjectUtils_sortedByKeys<T extends {}>(\n  obj: T,\n  sortedKeys: Array<keyof T>\n): Array<[keyof T, T[keyof T]]> {\n  const arr: Array<[keyof T, T[keyof T]]> = [];\n  const copyObj = { ...obj };\n  for (const k of sortedKeys) {\n    arr.push([k, copyObj[k]]);\n    delete copyObj[k];\n  }\n  for (const k of ObjectUtils_keys(copyObj)) {\n    arr.push([k, copyObj[k]]);\n  }\n  return arr;\n}\n\nexport function ObjectUtils_pick<T extends {}, K extends keyof T, U extends Pick<T, K>>(obj: T, theKeys: K[]): U {\n  return ObjectUtils_keys(obj).reduce<U>((memo, key: any) => {\n    if (theKeys.indexOf(key) !== -1) {\n      (memo as any)[key] = (obj as any)[key];\n    }\n    return memo;\n  }, {} as any);\n}\n\nexport function ObjectUtils_omit<T extends {}, K extends keyof T, U extends Omit<T, K>>(\n  obj: T,\n  theKeys: readonly K[]\n): U {\n  return ObjectUtils_keys(obj).reduce<U>((memo, key: any) => {\n    if (theKeys.indexOf(key) === -1) {\n      (memo as any)[key] = (obj as any)[key];\n    }\n    return memo;\n  }, {} as any);\n}\n\nexport function ObjectUtils_combinedKeys<T extends Record<string, unknown>, U extends Record<string, unknown>>(\n  obj1: T,\n  obj2: U\n): Array<keyof T | keyof U> {\n  return Array.from(new Set(ObjectUtils_keys(obj1).concat(ObjectUtils_keys(obj2) as any)));\n}\n\nexport function ObjectUtils_findMaxValue<T extends Record<string, number | undefined>>(obj: T): number {\n  return ObjectUtils_keys(obj).reduce<number>((memo, key) => {\n    const v = obj[key];\n    if (v != null && v > memo) {\n      memo = v || 0;\n    }\n    return memo;\n  }, 0);\n}\n\nexport function ObjectUtils_findKeyByExpression<T extends Record<string, any>>(\n  obj: T,\n  expression: (key: keyof T, value: T[keyof T]) => boolean\n): keyof T | undefined {\n  for (const key of ObjectUtils_keys(obj)) {\n    if (expression(key, obj[key])) {\n      return key;\n    }\n  }\n  return undefined;\n}\n\n// A faithful `structuredClone` polyfill. We use it on every platform rather than the native\n// structuredClone because Hermes (React Native) doesn't ship one, and routing everything\n// through a single implementation keeps web and native byte-for-byte identical.\n//\n// It matches structuredClone's two defining properties that JSON.parse(JSON.stringify())\n// gets wrong, and that caused real crashes here:\n//   - Shared references are preserved, not duplicated. An evaluated program inlines the same\n//     reused exercise into hundreds of exercises; JSON.stringify expands that shared graph\n//     into a multi-hundred-MB string and throws \"String length exceeds limit\". Preserving the\n//     sharing keeps the clone the same size as the original.\n//   - Reference cycles are preserved instead of throwing.\n// It also preserves the values structuredClone keeps but JSON drops/mangles: NaN/Infinity,\n// `undefined`, Date/RegExp/Map/Set/ArrayBuffer/typed arrays.\n//\n// One deliberate deviation: native structuredClone THROWS a DataCloneError on functions and\n// symbols; we drop them instead (objects skip the key, arrays/maps/sets get `undefined`), the\n// way the previous JSON-based clone tolerated them. Uncommon container types structuredClone\n// also handles (Error, Blob/File, boxed primitives) are cloned as plain objects, since they\n// never appear in the state we clone.\nexport function ObjectUtils_clone<T>(obj: T): T {\n  return structuredCloneLike(obj, new WeakMap());\n}\n\nfunction structuredCloneLike<T>(obj: T, seen: WeakMap<object, unknown>): T {\n  if (obj === null) {\n    return obj;\n  }\n  const type = typeof obj;\n  if (type !== \"object\") {\n    // strings, numbers (NaN/Infinity/-0 preserved), booleans, bigint and undefined pass through.\n    return (type === \"function\" || type === \"symbol\" ? undefined : obj) as T;\n  }\n\n  const value = obj as object;\n  const existing = seen.get(value);\n  if (existing !== undefined) {\n    return existing as T;\n  }\n\n  if (value instanceof Date) {\n    const result = new Date(value.getTime());\n    seen.set(value, result);\n    return result as unknown as T;\n  }\n  if (value instanceof RegExp) {\n    const result = new RegExp(value.source, value.flags);\n    seen.set(value, result);\n    return result as unknown as T;\n  }\n  if (value instanceof ArrayBuffer) {\n    const result = value.slice(0);\n    seen.set(value, result);\n    return result as unknown as T;\n  }\n  if (ArrayBuffer.isView(value)) {\n    const view = value as ArrayBufferView & { length: number };\n    const buffer = structuredCloneLike(view.buffer, seen) as ArrayBuffer;\n    const result =\n      value instanceof DataView\n        ? new DataView(buffer, view.byteOffset, view.byteLength)\n        : new (value.constructor as new (b: ArrayBuffer, o: number, l: number) => ArrayBufferView)(\n            buffer,\n            view.byteOffset,\n            view.length\n          );\n    seen.set(value, result);\n    return result as unknown as T;\n  }\n  if (value instanceof Map) {\n    const result = new Map();\n    seen.set(value, result);\n    for (const [k, v] of value) {\n      result.set(structuredCloneLike(k, seen), structuredCloneLike(v, seen));\n    }\n    return result as unknown as T;\n  }\n  if (value instanceof Set) {\n    const result = new Set();\n    seen.set(value, result);\n    for (const v of value) {\n      result.add(structuredCloneLike(v, seen));\n    }\n    return result as unknown as T;\n  }\n  if (Array.isArray(value)) {\n    const result = new Array(value.length);\n    seen.set(value, result);\n    for (let i = 0; i < value.length; i += 1) {\n      if (i in value) {\n        result[i] = structuredCloneLike(value[i], seen);\n      }\n    }\n    return result as unknown as T;\n  }\n\n  const result: Record<string, unknown> = {};\n  seen.set(value, result);\n  for (const key of Object.keys(value)) {\n    const item = (value as Record<string, unknown>)[key];\n    if (typeof item === \"function\" || typeof item === \"symbol\") {\n      continue;\n    }\n    result[key] = structuredCloneLike(item, seen);\n  }\n  return result as unknown as T;\n}\n\nexport function ObjectUtils_fromArray<K extends string, V>(arr: Array<[K, V]>): Record<K, V> {\n  return arr.reduce<Record<K, V>>(\n    (memo, [key, value]) => {\n      memo[key] = value;\n      return memo;\n    },\n    {} as Record<K, V>\n  );\n}\n","import semanticColors from \"../../tailwind.semantic.generated.json\";\nimport { SafeLocalStorage_getItem, SafeLocalStorage_setItem } from \"./safeLocalStorage\";\nimport { Theme_apply } from \"./theme\";\n\nexport const PAGE_THEME_STORAGE_KEY = \"liftosaurSiteTheme\";\n\nexport function PageTheme_backgroundColor(theme: \"dark\" | \"light\"): string {\n  return semanticColors[theme].background.default;\n}\n\nexport function PageTheme_current(): \"dark\" | \"light\" {\n  return typeof document !== \"undefined\" && document.documentElement.classList.contains(\"dark\") ? \"dark\" : \"light\";\n}\n\nexport function PageTheme_set(theme: \"dark\" | \"light\"): void {\n  SafeLocalStorage_setItem(PAGE_THEME_STORAGE_KEY, theme);\n  Theme_apply(theme);\n  document.querySelector('meta[name=\"theme-color\"]')?.setAttribute(\"content\", PageTheme_backgroundColor(theme));\n}\n\nexport function PageTheme_toggle(): void {\n  PageTheme_set(PageTheme_current() === \"dark\" ? \"light\" : \"dark\");\n}\n\n// Uniwind's web runtime rewrites the theme class on <html> from the system color scheme while it is\n// being imported, so the stored choice has to be re-applied from the entry body, after that import.\nexport function PageTheme_restore(): void {\n  const stored = SafeLocalStorage_getItem(PAGE_THEME_STORAGE_KEY);\n  if (stored === \"dark\" || stored === \"light\") {\n    PageTheme_set(stored);\n  }\n}\n","import { PerfSampling_decide, IPerfSamplingDecision } from \"./perfSampling\";\n\ndeclare let __DEV__: boolean;\ndeclare const __PERF__: boolean | undefined;\n\n// Decided once per session and memoized so a session never flips tier mid-run.\nlet cached: IPerfSamplingDecision | undefined;\n\nfunction decision(): IPerfSamplingDecision {\n  if (cached != null) {\n    return cached;\n  }\n  if (__DEV__ || (typeof __PERF__ !== \"undefined\" && __PERF__ === true)) {\n    cached = { tier1: true, tier2: true };\n  } else {\n    cached = PerfSampling_decide();\n  }\n  return cached;\n}\n\n// Tier 1: always-on scorecard (aggregated in memory, one lg() event per screen visit).\nexport function PerfEnabled_tier1(): boolean {\n  return decision().tier1;\n}\n\n// Tier 2: raw per-event trace streamed to the network. Strict subset of Tier 1.\nexport function PerfEnabled_tier2(): boolean {\n  return decision().tier2;\n}\n\nexport function PerfEnabled_isEnabled(): boolean {\n  const d = decision();\n  return d.tier1 || d.tier2;\n}\n","export interface IPerfSamplingDecision {\n  tier1: boolean;\n  tier2: boolean;\n}\n\n// OTA-tunable: these are the single source of truth for how many production sessions report perf\n// data. Changing them ships in a normal JS bundle (no store release). Tier 2 is a strict subset of\n// Tier 1 (same uniform draw), so every raw-trace session also produces a scorecard.\n// Temporarily 1.0 for an initial characterization bake (full long-tail resolution). Drop back to\n// ~0.1–0.25 for steady-state monitoring once the shape of the problem is known.\nconst TIER1_RATE = 1.0;\n// Tier 2 (raw per-event stream to /api/_dev/perf) is deferred until that backend handler exists, so\n// it is disabled in production. Dev still gets it via the __DEV__ override in perfEnabled.ts. Set\n// this to e.g. 0.01 once the endpoint is built.\nconst TIER2_RATE = 0;\nconst KILL_SWITCH = false;\n\nexport function PerfSampling_decideFor(unit: number): IPerfSamplingDecision {\n  if (KILL_SWITCH) {\n    return { tier1: false, tier2: false };\n  }\n  return { tier1: unit < TIER1_RATE, tier2: unit < TIER2_RATE };\n}\n\nexport function PerfSampling_decide(): IPerfSamplingDecision {\n  return PerfSampling_decideFor(Math.random());\n}\n","import type { IPerfFrameWindow, IPerfRecentAction } from \"./perfTracker\";\n\nexport function PerfScorecard_setContextProvider(_provider: () => Record<string, number>): void {}\nexport function PerfScorecard_recordFrameWindow(_window: IPerfFrameWindow): void {}\nexport function PerfScorecard_recordLongTask(\n  _durationMs: number,\n  _screen: string | undefined,\n  _recent?: IPerfRecentAction[]\n): void {}\nexport function PerfScorecard_recordAction(_label: string, _durationMs: number): void {}\nexport function PerfScorecard_flush(): void {}\nexport function PerfScorecard_onScreenChange(_screen: string | undefined): void {}\n","import { lg } from \"./posthog\";\n\n// TEMP DIAGNOSTIC (remove after investigation): attributes the per-tap workout-screen commit cost\n// for two specific users who reported multi-second lag on set completion. Everything here is a no-op\n// unless the running device's tempUserId is in this list, so it's safe to ship in a normal bundle.\nconst TARGET_USER_IDS = [\"wtudhpsaxn\", \"xfuonfcjme\"];\n\n// A tap fires a burst of commits (the completion itself + the sync loading lifecycle). We only record\n// commits while a tap window is open (opened by PerfProbe_onAction) so mount/nav/timer commits that\n// no tap caused don't create noise, then flush once the burst goes quiet.\nconst FLUSH_QUIET_MS = 400;\n// A window with no commits (a tap that caused no render) still flushes so it can't latch onto a later,\n// unrelated commit.\nconst WINDOW_MAX_MS = 2500;\n\ntype IProfilerPhase = \"mount\" | \"update\" | \"nested-update\";\n\ninterface ISubtreeAgg {\n  commits: number;\n  sumMs: number;\n  maxMs: number;\n  mounts: number;\n  updates: number;\n}\n\nlet byId: Record<string, ISubtreeAgg> = {};\n// Which components actually re-rendered this tap (their body ran → memo did NOT bail), and the set of\n// prop keys whose reference changed on that render — i.e. what defeated the memo.\nlet renderCounts: Record<string, number> = {};\nlet renderChanges: Record<string, Set<string>> = {};\nlet triggerLabel: string | undefined;\nlet triggerReducerMs = 0;\nlet windowActive = false;\nlet flushTimer: ReturnType<typeof setTimeout> | undefined;\n\nexport function PerfProbe_isTarget(): boolean {\n  const uid =\n    (typeof globalThis !== \"undefined\" ? (globalThis as { tempUserId?: string }).tempUserId : undefined) ??\n    (typeof window !== \"undefined\" ? window.tempUserId : undefined);\n  return uid != null && TARGET_USER_IDS.indexOf(uid) >= 0;\n}\n\n// True only for a target user AND while a tap window is open — so the (potentially non-trivial) deep\n// prop diffing in usePerfWhyRender never runs for idle/background re-renders.\nexport function PerfProbe_isRecording(): boolean {\n  return windowActive && PerfProbe_isTarget();\n}\n\n// Opens a tap window for user-initiated actions only (not the sync/loading UpdateStates), so the burst\n// is labeled by the tap that started it and pre-tap commits are excluded.\nexport function PerfProbe_onAction(label: string, reducerMs: number): void {\n  if (!PerfProbe_isTarget()) {\n    return;\n  }\n  if (windowActive) {\n    // Two taps before the previous window drained — flush the old one under its own label first.\n    flush();\n  }\n  triggerLabel = label;\n  triggerReducerMs = reducerMs;\n  windowActive = true;\n  scheduleFlush(WINDOW_MAX_MS);\n}\n\nexport function PerfProbe_onCommit(id: string, phase: IProfilerPhase, durationMs: number): void {\n  if (!PerfProbe_isTarget() || !windowActive) {\n    return;\n  }\n  const agg = byId[id] ?? (byId[id] = { commits: 0, sumMs: 0, maxMs: 0, mounts: 0, updates: 0 });\n  agg.commits += 1;\n  agg.sumMs += durationMs;\n  agg.maxMs = Math.max(agg.maxMs, durationMs);\n  if (phase === \"mount\") {\n    agg.mounts += 1;\n  } else {\n    agg.updates += 1;\n  }\n  scheduleFlush(FLUSH_QUIET_MS);\n}\n\n// Called from usePerfWhyRender's post-commit useLayoutEffect inside a memoized component — so it only\n// fires when the memo did NOT bail and the render actually committed. changedKeys names the prop refs\n// that differed from the previous committed render (empty = identical props, i.e. a context/state/\n// forced re-render rather than a prop change).\nexport function PerfProbe_recordRender(component: string, changedKeys: string[]): void {\n  if (!PerfProbe_isTarget() || !windowActive) {\n    return;\n  }\n  renderCounts[component] = (renderCounts[component] ?? 0) + 1;\n  const set = renderChanges[component] ?? (renderChanges[component] = new Set<string>());\n  if (changedKeys.length === 0) {\n    set.add(\"<none>\");\n  } else {\n    for (const k of changedKeys) {\n      set.add(k);\n    }\n  }\n  // No scheduleFlush here on purpose: each instrumented component sits inside a PerfProbeSubtree whose\n  // own post-commit useLayoutEffect already schedules the flush for this same commit.\n}\n\nfunction scheduleFlush(ms: number): void {\n  if (flushTimer != null) {\n    clearTimeout(flushTimer);\n  }\n  flushTimer = setTimeout(flush, ms);\n}\n\nfunction flush(): void {\n  if (flushTimer != null) {\n    clearTimeout(flushTimer);\n  }\n  flushTimer = undefined;\n  windowActive = false;\n  const ids = Object.keys(byId);\n  const renderComps = Object.keys(renderCounts);\n  if (ids.length === 0 && renderComps.length === 0) {\n    triggerLabel = undefined;\n    triggerReducerMs = 0;\n    return;\n  }\n  const extra: Record<string, string | number> = {\n    trigger: triggerLabel ?? \"unknown\",\n    reducer_ms: Math.round(triggerReducerMs),\n  };\n  for (const id of ids) {\n    const a = byId[id];\n    extra[`${id}_commits`] = a.commits;\n    extra[`${id}_sum_ms`] = Math.round(a.sumMs);\n    extra[`${id}_max_ms`] = Math.round(a.maxMs);\n    extra[`${id}_mounts`] = a.mounts;\n    extra[`${id}_updates`] = a.updates;\n  }\n  for (const comp of renderComps) {\n    extra[`${comp}_renders`] = renderCounts[comp];\n    extra[`${comp}_changed`] = Array.from(renderChanges[comp] ?? []).join(\",\");\n  }\n  byId = {};\n  renderCounts = {};\n  renderChanges = {};\n  triggerLabel = undefined;\n  triggerReducerMs = 0;\n  lg(\"perf-set-complete\", extra);\n}\n","export interface IPerfRecentAction {\n  type: string;\n  desc?: string;\n  age_ms: number;\n}\n\nexport interface IPerfFrameWindow {\n  screen?: string;\n  frames_total: number;\n  frames_slow: number;\n  frames_frozen: number;\n  max_gap_ms: number;\n  window_ms: number;\n  ts: number;\n}\n\nexport type IPerfEvent =\n  | { type: \"nav\"; session: string; from?: string; to: string; tap_ts: number }\n  | {\n      type: \"longtask\";\n      session: string;\n      duration: number;\n      start: number;\n      screen?: string;\n      recent?: IPerfRecentAction[];\n    }\n  | {\n      type: \"framedrop\";\n      session: string;\n      thread: \"ui\" | \"js\";\n      gap_ms: number;\n      expected_ms: number;\n      screen?: string;\n      ts: number;\n    }\n  | {\n      type: \"frame_summary\";\n      session: string;\n      screen?: string;\n      frames_total: number;\n      frames_slow: number;\n      frames_frozen: number;\n      max_gap_ms: number;\n      window_ms: number;\n      ts: number;\n    }\n  | { type: \"session_start\"; session: string; ts: number; platform: string; build: string }\n  | {\n      type: \"mark\";\n      session: string;\n      screen: string;\n      phase: \"mount\" | \"commit\" | \"interactive\" | \"loaded\";\n      ts: number;\n      loaded_source?: \"auto\" | \"explicit\";\n    }\n  | {\n      type: \"render_count\";\n      session: string;\n      component: string;\n      delta: number;\n      total: number;\n      window_ms: number;\n      ts: number;\n    }\n  | {\n      type: \"memo_timing\";\n      session: string;\n      label: string;\n      duration_ms: number;\n      ts: number;\n    }\n  | {\n      type: \"scroll_start\" | \"scroll_end\";\n      session: string;\n      screen?: string;\n      label?: string;\n      ts: number;\n    }\n  | {\n      type: \"action\";\n      session: string;\n      action: string;\n      desc?: string;\n      duration_ms?: number;\n      ts: number;\n    }\n  | {\n      type: \"render_trace\";\n      session: string;\n      component: string;\n      ts: number;\n    }\n  | {\n      type: \"profile\";\n      session: string;\n      id: string;\n      phase: \"mount\" | \"update\" | \"nested-update\";\n      actual_ms: number;\n      base_ms: number;\n      ts: number;\n    };\n\nexport function PerfTracker_mark(_name: string, _screen?: string): void {}\nexport function PerfTracker_recordEvent(_event: IPerfEvent): void {}\nexport function PerfTracker_getSessionId(): string {\n  return \"noop\";\n}\nexport function PerfTracker_flush(): Promise<void> {\n  return Promise.resolve();\n}\nexport function PerfTracker_getRecent(_n: number): IPerfEvent[] {\n  return [];\n}\n","import { UrlUtils_build } from \"./url\";\nimport { SafeLocalStorage_getItem } from \"./safeLocalStorage\";\n\nexport function Platform_isiOS(userAgent?: string): boolean {\n  userAgent = userAgent || (typeof window !== \"undefined\" && window.navigator ? window.navigator.userAgent : \"\");\n  return /iPhone|iPad|iPod/i.test(userAgent);\n}\n\nexport function Platform_isAndroid(userAgent?: string): boolean {\n  userAgent = userAgent || (typeof window !== \"undefined\" && window.navigator ? window.navigator.userAgent : \"\");\n  return /Android/i.test(userAgent);\n}\n\nexport interface IOnelinkLandingParams {\n  id: string;\n  type: \"program\" | \"exercise\" | \"rep-max\";\n}\n\n// Identifies the SEO page a OneLink click originated from, so AppsFlyer can carry it through the\n// install (deferred deep link) and the native app can attribute the install to that page. The `id`\n// has no slashes on purpose - it goes into deep_link_value, and the native side reconstructs the path\n// from id + type, keeping web-cookie and native landing pages in the same format.\nexport function Platform_landingPageParams(pathname: string): IOnelinkLandingParams | undefined {\n  const programMatch = pathname.match(/^\\/programs\\/([^/]+)$/);\n  if (programMatch) {\n    return { id: programMatch[1], type: \"program\" };\n  }\n  const exerciseMatch = pathname.match(/^\\/exercises\\/([^/]+)$/);\n  if (exerciseMatch) {\n    return { id: exerciseMatch[1], type: \"exercise\" };\n  }\n  const repMaxMatch = pathname.match(/^\\/([a-z-]*rep-max-calculator)$/);\n  if (repMaxMatch) {\n    return { id: repMaxMatch[1], type: \"rep-max\" };\n  }\n  return undefined;\n}\n\nexport function Platform_onelink(noparams: boolean, type?: \"ios\" | \"android\"): string {\n  const url = UrlUtils_build(\"https://liftosaur.onelink.me/cG8a/aylyqael\");\n  let afr: string | undefined = undefined;\n  if (type) {\n    afr =\n      type === \"ios\"\n        ? \"https://apps.apple.com/us/app/liftosaur-scriptable-workouts/id1661880849\"\n        : \"https://play.google.com/store/apps/details?id=com.liftosaur.www.twa\";\n  }\n  if (typeof window !== \"undefined\" && !noparams) {\n    const currentSearchParams = new URL(window.location.href).searchParams;\n    const utmSource = currentSearchParams?.get(\"utm_source\") ?? SafeLocalStorage_getItem(\"utm_source\");\n    if (utmSource) {\n      url.searchParams.set(\"utm_source\", utmSource);\n      url.searchParams.set(\"pid\", `${utmSource}_int`);\n    }\n    const utmMedium = currentSearchParams?.get(\"utm_medium\") ?? SafeLocalStorage_getItem(\"utm_medium\");\n    if (utmMedium) {\n      url.searchParams.set(\"utm_medium\", utmMedium);\n      url.searchParams.set(\"af_channel\", utmMedium);\n    }\n    const utmCampaign = currentSearchParams?.get(\"utm_campaign\") ?? SafeLocalStorage_getItem(\"utm_campaign\");\n    if (utmCampaign) {\n      url.searchParams.set(\"utm_campaign\", utmCampaign);\n      url.searchParams.set(\"c\", utmCampaign);\n    }\n    const utmContent = currentSearchParams?.get(\"utm_content\") ?? SafeLocalStorage_getItem(\"utm_content\");\n    if (utmContent) {\n      url.searchParams.set(\"utm_content\", utmContent);\n      url.searchParams.set(\"af_ad\", utmContent);\n    }\n    const utmTerm = currentSearchParams?.get(\"utm_term\") ?? SafeLocalStorage_getItem(\"utm_term\");\n    if (utmTerm) {\n      url.searchParams.set(\"utm_term\", utmTerm);\n      url.searchParams.set(\"af_adset\", utmTerm);\n    }\n    const landing = Platform_landingPageParams(window.location.pathname);\n    if (landing) {\n      url.searchParams.set(\"deep_link_value\", landing.id);\n      url.searchParams.set(\"deep_link_sub1\", landing.type);\n      // Don't clobber a paid UTM source/campaign; only label as SEO when nothing else claimed it.\n      if (!url.searchParams.has(\"pid\")) {\n        url.searchParams.set(\"pid\", \"seo\");\n      }\n      if (!url.searchParams.has(\"c\")) {\n        url.searchParams.set(\"c\", `${landing.type}-pages`);\n      }\n      // deep_link_value is only a routing param, so AppsFlyer aggregate reports can't split by program.\n      // Mirror the slug/type into af_ad/af_adset (real attribution dimensions) so per-program installs\n      // and conversions are groupable in the dashboard.\n      if (!url.searchParams.has(\"af_adset\")) {\n        url.searchParams.set(\"af_adset\", `${landing.type}-pages`);\n      }\n      if (!url.searchParams.has(\"af_ad\")) {\n        url.searchParams.set(\"af_ad\", landing.id);\n      }\n    }\n    if (afr) {\n      url.searchParams.set(\"af_r\", afr);\n    }\n  }\n  return url.toString();\n}\n","import { IEventPayload, Service } from \"../api/service\";\nimport { WatchHost_isAvailable, WatchHost_send } from \"./watchHost\";\nimport { AppAttribution_get } from \"./appAttribution\";\nimport { EventManager_isAvailable, EventManager_log } from \"./eventManager\";\nimport { AdminDebug_isDebugAccountId } from \"../models/adminDebug\";\n\ndeclare let __COMMIT_HASH__: string;\n\nconst trackedEvents = new Set<string>();\n\nexport function track(args: {\n  name?: string;\n  redditname?: string;\n  googlename?: string;\n  extra?: Record<string, string | number>;\n}): void {\n  if (typeof window === \"undefined\") {\n    return;\n  }\n  const eventName = args.name || args.googlename || args.redditname || \"\";\n  if (trackedEvents.has(eventName)) {\n    return;\n  }\n  trackedEvents.add(eventName);\n  if (window.gtag) {\n    window.gtag(\"event\", args.name || args.googlename, args.extra || {});\n  }\n  if (window.rdt) {\n    window.rdt(\"track\", args.name || args.redditname || \"\", args.extra || {});\n  }\n}\n\nexport function lgDebug(name: string, userId: string, extra?: Record<string, string | number>): void {\n  const currentUserId =\n    (typeof globalThis !== \"undefined\" ? (globalThis as { tempUserId?: string }).tempUserId : undefined) ??\n    (typeof window !== \"undefined\" ? window.tempUserId : undefined);\n  if (currentUserId === userId) {\n    lg(name, extra);\n  }\n}\n\nexport function lg(\n  name: string,\n  extra?: Record<string, string | number>,\n  service?: Service,\n  tempUserId?: string,\n  timestamp?: number\n): void {\n  tempUserId =\n    tempUserId ??\n    (typeof globalThis !== \"undefined\" ? (globalThis as { tempUserId?: string }).tempUserId : undefined) ??\n    (typeof window !== \"undefined\" ? window.tempUserId : undefined);\n\n  if (tempUserId == null) {\n    return;\n  }\n\n  // A debug sandbox must stay analytics-silent so the target-derived id never leaves the device.\n  if (AdminDebug_isDebugAccountId(tempUserId)) {\n    return;\n  }\n\n  const event: IEventPayload = {\n    type: \"event\",\n    timestamp: timestamp ?? Date.now(),\n    commithash: typeof __COMMIT_HASH__ !== \"undefined\" ? __COMMIT_HASH__ : \"unknown\",\n    ...AppAttribution_get(),\n    name,\n    extra,\n    userId: tempUserId,\n  };\n\n  if (WatchHost_isAvailable()) {\n    WatchHost_send({\n      type: \"event\",\n      data: JSON.stringify(event),\n      commithash: event.commithash,\n      userId: event.userId,\n    });\n    return;\n  }\n\n  if (EventManager_isAvailable()) {\n    EventManager_log(JSON.stringify(event));\n    return;\n  }\n\n  service =\n    service ?? (typeof window !== \"undefined\" && window.fetch ? new Service(window.fetch.bind(window)) : undefined);\n  if (service == null) {\n    return;\n  }\n\n  service.postEvent(event).catch((e) => {\n    // do nothing;\n  });\n}\n","import { IState } from \"../models/state\";\nimport { AdminDebug_isDebugAccountId } from \"../models/adminDebug\";\nimport { IPushIdentity } from \"./pushSyncAdapter\";\n\nexport interface IPushPosted {\n  userId: string;\n  deviceId: string;\n  token: string;\n}\n\nexport interface IPushRegistrationState {\n  token?: string;\n  identity?: IPushIdentity;\n  lastPosted?: IPushPosted;\n  syncing: boolean;\n  pendingOriginalId?: number;\n  deliveries: string[];\n}\n\nexport type IPushRegistrationEvent =\n  | { type: \"token\"; token: string }\n  | { type: \"identity\"; identity: IPushIdentity | undefined }\n  | { type: \"posted\"; posted: IPushPosted }\n  | { type: \"push\"; originalId: number; localOriginalId: number | undefined; deliveryId: string }\n  | { type: \"syncDone\"; localOriginalId: number | undefined }\n  | { type: \"signout\" };\n\nexport type IPushRegistrationEffect =\n  | { type: \"post\"; registration: { deviceId: string; token: string } }\n  | { type: \"delete\"; deviceId: string }\n  | { type: \"sync\"; originalId: number }\n  | { type: \"complete\"; deliveryIds: string[]; newData: boolean };\n\nexport function PushRegistration_initial(): IPushRegistrationState {\n  return { syncing: false, deliveries: [] };\n}\n\nexport function PushRegistration_next(\n  state: IPushRegistrationState,\n  event: IPushRegistrationEvent\n): { state: IPushRegistrationState; effects: IPushRegistrationEffect[] } {\n  switch (event.type) {\n    case \"token\":\n      return withPostIfNeeded({ ...state, token: event.token });\n    case \"identity\":\n      return withPostIfNeeded({ ...state, identity: event.identity });\n    case \"posted\": {\n      const stillWanted =\n        state.identity?.userId === event.posted.userId &&\n        state.identity?.deviceId === event.posted.deviceId &&\n        state.token === event.posted.token;\n      return { state: stillWanted ? { ...state, lastPosted: event.posted } : state, effects: [] };\n    }\n    case \"push\":\n      if (event.originalId === event.localOriginalId) {\n        return { state, effects: [{ type: \"complete\", deliveryIds: [event.deliveryId], newData: false }] };\n      }\n      if (state.syncing) {\n        return {\n          state: { ...state, pendingOriginalId: event.originalId, deliveries: [...state.deliveries, event.deliveryId] },\n          effects: [],\n        };\n      }\n      return {\n        state: { ...state, syncing: true, deliveries: [event.deliveryId] },\n        effects: [{ type: \"sync\", originalId: event.originalId }],\n      };\n    case \"syncDone\": {\n      const pending = state.pendingOriginalId;\n      if (pending != null && pending !== event.localOriginalId) {\n        return {\n          state: { ...state, syncing: true, pendingOriginalId: undefined },\n          effects: [{ type: \"sync\", originalId: pending }],\n        };\n      }\n      return {\n        state: { ...state, syncing: false, pendingOriginalId: undefined, deliveries: [] },\n        effects:\n          state.deliveries.length > 0 ? [{ type: \"complete\", deliveryIds: state.deliveries, newData: true }] : [],\n      };\n    }\n    case \"signout\": {\n      const deviceId = state.lastPosted?.deviceId ?? state.identity?.deviceId;\n      const next = { ...state, identity: undefined, lastPosted: undefined };\n      return { state: next, effects: deviceId ? [{ type: \"delete\", deviceId }] : [] };\n    }\n  }\n}\n\nfunction withPostIfNeeded(state: IPushRegistrationState): {\n  state: IPushRegistrationState;\n  effects: IPushRegistrationEffect[];\n} {\n  const { token, identity, lastPosted } = state;\n  if (token == null || identity == null) {\n    return { state, effects: [] };\n  }\n  const alreadyPosted =\n    lastPosted != null &&\n    lastPosted.userId === identity.userId &&\n    lastPosted.deviceId === identity.deviceId &&\n    lastPosted.token === token;\n  if (alreadyPosted) {\n    return { state, effects: [] };\n  }\n  return { state, effects: [{ type: \"post\", registration: { deviceId: identity.deviceId, token } }] };\n}\n\nexport function PushRegistration_identityOf(state: IState): IPushIdentity | undefined {\n  const userId = state.user?.id;\n  if (userId == null || AdminDebug_isDebugAccountId(state.storage.tempUserId)) {\n    return undefined;\n  }\n  return { userId, deviceId: state.deviceId };\n}\n\nexport function PushRegistration_identityChanged(\n  oldState: IState,\n  newState: IState\n): IPushIdentity | undefined | false {\n  const before = PushRegistration_identityOf(oldState);\n  const after = PushRegistration_identityOf(newState);\n  if (before?.userId === after?.userId && before?.deviceId === after?.deviceId) {\n    return false;\n  }\n  return after;\n}\n","import RB, { Dictionary, LogArgument } from \"rollbar\";\nimport { Service } from \"../api/service\";\nimport { IState } from \"../models/state\";\nimport { UidFactory_generateUid } from \"./generator\";\nimport { Encoder_encode } from \"./encoder\";\nimport {\n  Diagnostics_getLastActions,\n  Diagnostics_getLastState,\n  Diagnostics_getLastValidationErrors,\n} from \"./diagnostics\";\n\ndeclare let __ENV__: string;\ndeclare let __FULL_COMMIT_HASH__: string;\n\ninterface IOccurenceResponse {\n  err: number;\n  result: {\n    data: {\n      liftosaur_exception_id: string;\n    };\n  };\n}\n\ndeclare let __API_HOST__: string;\n\nexport const exceptionIgnores = [\n  \"Script error\",\n  \"Failed to fetch\",\n  \"Failed to register a ServiceWorker\",\n  \"The element has no supported sources\",\n  \"The operation was aborted\",\n  \"FetchEvent.respondWith received an error\",\n  \"play() failed because the user\",\n  \"play() request was interrupted\",\n  \"The request is not allowed by the user agent or the platform\",\n  \"Load failed\",\n  \"Function timed out\",\n  \"is out of range for changeset\",\n  \"when attempting to fetch resource\",\n  \"Selection points outside of document\",\n  \"Invalid position\",\n  \"outdated_client_storage\",\n  '{\"isTrusted\":true}',\n  \"Unable to resolve host\",\n  \"connection closed\",\n  \"Invalid change range\",\n  \"Empty response from API\",\n  \"_AutofillCallbackHandler\",\n  \"Incorrect locale information provided\",\n  \"chrome-extension://\",\n];\n\nexport async function RollbarUtils_load(item: string | number, token: string, key: string): Promise<void> {\n  const result = await fetch(`https://api.rollbar.com/api/1/instance/${item}`, {\n    headers: {\n      accept: \"application/json\",\n      \"X-Rollbar-Access-Token\": token,\n    },\n  });\n  const json = (await result.json()) as IOccurenceResponse;\n  if (json.err === 0) {\n    const id = json.result.data.liftosaur_exception_id;\n    const service = new Service(window.fetch.bind(window));\n    const data = await service.getExceptionData(id, key);\n    if (data == null) {\n      console.error(\"No exception info\");\n      return;\n    }\n    const { lastState, lastActions } = JSON.parse(data);\n    if (lastState && lastActions) {\n      const state = JSON.parse(lastState) as IState;\n      state.nosync = true;\n      window.replaceState(state);\n      console.log(\"Last Actions\");\n      console.log(JSON.parse(lastActions));\n    } else {\n      console.error(\"No last state or actions\");\n    }\n  } else {\n    console.error(json);\n  }\n}\n\nexport function RollbarUtils_checkIgnore(isUncaught: boolean, args: LogArgument[], item: Dictionary): boolean {\n  const firstArg = args[0];\n  const message = typeof firstArg === \"object\" && \"message\" in firstArg ? firstArg.message : firstArg;\n  if (message && typeof message === \"string\" && exceptionIgnores.some((i) => message.indexOf(i) !== -1)) {\n    return true;\n  }\n  return false;\n}\n\nexport function RollbarUtils_config(payload?: object): RB.Configuration {\n  return {\n    enabled: __ENV__ === \"production\" || __ENV__ === \"prod-lambda\" || __ENV__ === \"android\",\n    payload: {\n      environment: __ENV__,\n      client: {\n        javascript: {\n          source_map_enabled: true,\n          code_version: __FULL_COMMIT_HASH__,\n          guess_uncaught_frames: true,\n        },\n      },\n      ...(payload || {}),\n    },\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    transform: async (pld: any, item: any) => {\n      const shouldIgnore = RollbarUtils_checkIgnore(false, [item?.err?.message], item);\n      if (shouldIgnore) {\n        return;\n      }\n      const id = UidFactory_generateUid(12);\n      pld.liftosaur_exception_id = id;\n      const state = Diagnostics_getLastState() ?? window.state;\n      const lastActions = Diagnostics_getLastActions();\n      const validationErrors = Diagnostics_getLastValidationErrors();\n      const data = {\n        userid: pld.person?.id ?? window.tempUserId,\n        lastState: state ? JSON.stringify(state) : undefined,\n        lastActions: lastActions.length > 0 ? JSON.stringify(lastActions) : undefined,\n        validationErrors: validationErrors ? JSON.stringify(validationErrors) : undefined,\n      };\n      console.log(\"Sending exception\", data);\n      const compressed = await Encoder_encode(JSON.stringify(data));\n      fetch(`${__API_HOST__}/api/exception`, {\n        method: \"POST\",\n        body: JSON.stringify({ id, data: compressed }),\n        credentials: \"include\",\n      });\n    },\n    checkIgnore: RollbarUtils_checkIgnore,\n  };\n}\n\nif (typeof window !== \"undefined\") {\n  window.loadRollbar = RollbarUtils_load;\n}\n","// Accessing `window.localStorage` throws `SecurityError: The operation is insecure.` on iOS Safari\n// when storage is blocked (e.g. \"Block All Cookies\" or some private/embedded contexts). The throw\n// happens on the property access itself, so optional chaining (`window.localStorage?.`) can't guard it.\nexport function SafeLocalStorage_getItem(key: string): string | null {\n  try {\n    if (typeof window === \"undefined\") {\n      return null;\n    }\n    return window.localStorage.getItem(key);\n  } catch {\n    return null;\n  }\n}\n\nexport function SafeLocalStorage_setItem(key: string, value: string): void {\n  try {\n    if (typeof window === \"undefined\") {\n      return;\n    }\n    window.localStorage.setItem(key, value);\n  } catch {\n    // ignore - storage may be blocked or full\n  }\n}\n\nexport function SafeLocalStorage_removeItem(key: string): void {\n  try {\n    if (typeof window === \"undefined\") {\n      return;\n    }\n    window.localStorage.removeItem(key);\n  } catch {\n    // ignore - storage may be blocked\n  }\n}\n","// Generated by scripts/generate-theme-css.js — do not edit by hand.\nexport const SCALED_SPACINGS = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 20, 24, 28, 32, 36, 40, 44, 48, 56, 60, 64, 72, 80, 96];\nexport const SCALED_LEADINGS = [3, 4, 5, 6, 7, 8, 9, 10, 12];\n","export function SetUtils_areEqual<T>(a: Set<T>, b: Set<T>): boolean {\n  if (a.size !== b.size) {\n    return false;\n  }\n  for (const item of a) {\n    if (!b.has(item)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function SetUtils_areAllEqual<T>(sets: Set<T>[]): boolean {\n  if (sets.length < 2) {\n    return true;\n  }\n\n  const [first, ...rest] = sets;\n  for (const set of rest) {\n    if (!SetUtils_areEqual(first, set)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nexport function SetUtils_containsAnyValues<T>(within: Set<T>, from: Set<T>): boolean {\n  for (const item of from) {\n    if (within.has(item)) {\n      return true;\n    }\n  }\n  return false;\n}\n","export interface IGoogleSignInResult {\n  idToken?: string;\n  accessToken?: string;\n}\n\nexport interface IAppleSignInResult {\n  idToken: string;\n  code?: string;\n}\n\nexport async function SignIn_google(): Promise<IGoogleSignInResult | undefined> {\n  throw new Error(\"SignIn_google is only supported on native platforms\");\n}\n\nexport async function SignOut_google(): Promise<void> {\n  // no-op on web\n}\n\nexport async function SignIn_apple(): Promise<IAppleSignInResult | undefined> {\n  throw new Error(\"SignIn_apple is only supported on native platforms\");\n}\n","import { Platform } from \"react-native\";\n\nexport function StoreRuntime_isIos(): boolean {\n  return Platform.OS === \"ios\";\n}\n\nexport function StoreRuntime_isAndroid(): boolean {\n  return Platform.OS === \"android\";\n}\n\nexport function StoreRuntime_isNative(): boolean {\n  return StoreRuntime_isIos() || StoreRuntime_isAndroid();\n}\n\nexport function StoreRuntime_storeName(): string {\n  if (StoreRuntime_isIos()) {\n    return \"App Store\";\n  }\n  return StoreRuntime_isAndroid() ? \"Google Play\" : \"App Store / Play Store\";\n}\n","/* eslint-disable no-bitwise */\nexport function StringUtils_pad(str: string, width: number, fill: string = \"0\"): string {\n  return str.length >= width ? str : new Array(width - str.length + 1).join(fill) + str;\n}\n\nexport function StringUtils_capitalize(string: string): string {\n  return string[0].toUpperCase() + string.slice(1);\n}\n\nexport function StringUtils_pluralize(string: string, count: number): string {\n  return `${string}${count !== 1 ? \"s\" : \"\"}`;\n}\n\nexport function StringUtils_dashcase(string: string): string {\n  return string.replace(/[:,]/g, \"\").replace(/\\s+/g, \"-\").toLowerCase();\n}\n\nexport function StringUtils_undashcase(string: string): string {\n  return string.replace(/-/g, \" \");\n}\n\nexport function StringUtils_uncamelCase(string: string): string {\n  return string.replace(/([a-z])([A-Z])/g, \"$1 $2\");\n}\n\nexport function StringUtils_camelCase(string: string): string {\n  return string\n    .replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (letter, index) => (index === 0 ? letter.toLowerCase() : letter.toUpperCase()))\n    .replace(/\\s+/g, \"\");\n}\n\nexport function StringUtils_snakecase(string: string): string {\n  return string.replace(/[:,]/g, \"\").replace(/\\s+/g, \"_\").toLowerCase();\n}\n\nexport function StringUtils_truncate(string: string, length: number): string {\n  if (string.length > length) {\n    return `${string.slice(0, length - 3)}...`;\n  } else {\n    return string;\n  }\n}\n\nexport function StringUtils_unindent(string: string): string {\n  const indent2 = string.split(\"\\n\").reduce<number | undefined>((memo, line) => {\n    const match = line.match(/^(\\s*)\\S/);\n    if (match != null) {\n      const spaces = match[1];\n      if (memo == null || memo > spaces.length) {\n        return spaces.length;\n      }\n    }\n    return memo;\n  }, undefined);\n  if (indent2 != null) {\n    return string\n      .split(\"\\n\")\n      .map((s) => (s.trim() === \"\" ? \"\" : s.slice(indent2, s.length).trimEnd()))\n      .join(\"\\n\");\n  } else {\n    return string;\n  }\n}\n\nexport function StringUtils_indent(string: string, spaces: number): string {\n  const indent2 = new Array(spaces + 1).join(\" \");\n  return string\n    .split(\"\\n\")\n    .map((s) => (s.trim() !== \"\" ? `${indent2}${s}` : s))\n    .join(\"\\n\");\n}\n\nexport function StringUtils_fuzzySearch(needle: string, haystack: string): boolean {\n  if (needle.length > haystack.length) {\n    return false;\n  } else if (needle === haystack) {\n    return true;\n  } else {\n    outer: for (let i = 0, j = 0; i < needle.length; i++) {\n      const nch = needle.charCodeAt(i);\n      while (j < haystack.length) {\n        // eslint-disable-next-line no-plusplus\n        if (haystack.charCodeAt(j++) === nch) {\n          continue outer;\n        }\n      }\n      return false;\n    }\n    return true;\n  }\n}\n\nexport function StringUtils_nextName(name: string): string {\n  const match = name.match(/(\\d+)$/);\n  if (match) {\n    const number = parseInt(match[0], 10);\n    return name.replace(/\\d+$/, (number + 1).toString());\n  }\n  return name + \" 2\";\n}\n\nexport function StringUtils_hashCode(str: string): number {\n  let hash = 0;\n  for (let i = 0; i < str.length; i++) {\n    hash = (hash << 5) - hash + str.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n  return hash;\n}\n\nexport function StringUtils_hashString(str: string): string {\n  return new Uint32Array([StringUtils_hashCode(str)])[0].toString(16);\n}\n\nexport function StringUtils_hashCode0To1(str: string): number {\n  const hash = Math.abs(StringUtils_hashCode(str));\n  return (hash % 10000) / 10000;\n}\n\nexport function StringUtils_cleanJson(str: string): string {\n  return str.trim().replace(/^[\\s\\S]*?(\\{[\\s\\S]*\\})[\\s\\S]*?$/, \"$1\");\n}\n","import { ISubscriptionReceipt } from \"../types\";\n\nexport function SubscriptionReceipts_cleanupApple(\n  apple: ISubscriptionReceipt[],\n  verdicts: ReadonlyMap<string, boolean>\n): ISubscriptionReceipt[] {\n  const valid = apple.filter((r) => verdicts.get(r.value) === true);\n  const newestValid = valid.reduce<ISubscriptionReceipt | undefined>(\n    (newest, r) => (newest == null || r.createdAt >= newest.createdAt ? r : newest),\n    undefined\n  );\n  // Receipts without a verdict appeared after verification started (sync merge or store restore) and\n  // must be kept - deciding from a stale snapshot is how valid receipts used to get tombstoned\n  // account-wide. Collapsing valid ones to a single newest receipt is still required: legacy Apple\n  // receipts are tens of KB, differ on every refresh, and all verify true while the account is\n  // active, so per-receipt pruning would let the array grow unboundedly.\n  const result = apple.filter((r) => !verdicts.has(r.value) || r === newestValid);\n  return result.length === apple.length ? apple : result;\n}\n","import { Service } from \"../api/service\";\nimport { IDispatch } from \"../ducks/types\";\nimport { IState, updateState } from \"../models/state\";\nimport { lb } from \"lens-shmens\";\nimport { ISubscription } from \"../types\";\nimport { UidFactory_generateUid } from \"./generator\";\nimport { CollectionUtils_removeBy } from \"./collection\";\nimport { SubscriptionReceipts_cleanupApple } from \"./subscriptionReceipts\";\nimport { Thunk_postevent } from \"../ducks/thunks\";\n\nexport function Subscriptions_hasSubscription(subscription: ISubscription): boolean {\n  if (subscription.key && subscription.key !== \"unclaimed\") {\n    return true;\n  }\n  const hasApple = hasAppleSubscription(subscription);\n  const hasGoogle = hasGoogleSubscription(subscription);\n  return hasApple || hasGoogle;\n}\n\nexport function Subscriptions_listOfSubscriptions(subscription: ISubscription): string[] {\n  const arr: string[] = [];\n  if ((subscription.apple || []).length > 0) {\n    arr.push(\"apple\");\n  }\n  if ((subscription.google || []).length > 0) {\n    arr.push(\"google\");\n  }\n  if (subscription.key === \"unclaimed\") {\n    arr.push(\"unclaimedkey\");\n  } else if (subscription.key) {\n    arr.push(\"key\");\n  }\n  return arr;\n}\n\nfunction hasAppleSubscription(subscription: ISubscription): boolean {\n  return subscription.apple.length > 0;\n}\n\nfunction hasGoogleSubscription(subscription: ISubscription): boolean {\n  return subscription.google.length > 0;\n}\n\nexport function Subscriptions_setAppleReceipt(dispatch: IDispatch, receipt: string): void {\n  updateState(\n    dispatch,\n    [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"subscription\")\n        .p(\"apple\")\n        .recordModify((v) => {\n          if (v.some((s) => s.value === receipt)) {\n            dispatch(Thunk_postevent(\"same-apple-receipt\"));\n            return v;\n          } else {\n            dispatch(Thunk_postevent(\"new-apple-receipt\"));\n            return [\n              ...v,\n              {\n                vtype: \"subscription_receipt\",\n                value: receipt,\n                id: UidFactory_generateUid(6),\n                createdAt: Date.now(),\n              },\n            ];\n          }\n        }),\n    ],\n    \"Set Apple receipt\"\n  );\n}\n\nexport function Subscriptions_setGooglePurchaseToken(dispatch: IDispatch, purchaseToken: string): void {\n  updateState(\n    dispatch,\n    [\n      lb<IState>()\n        .p(\"storage\")\n        .p(\"subscription\")\n        .p(\"google\")\n        .recordModify((v) => {\n          if (v.some((s) => s.value === purchaseToken)) {\n            return v;\n          } else {\n            return [\n              ...v,\n              {\n                vtype: \"subscription_receipt\",\n                value: purchaseToken,\n                id: UidFactory_generateUid(6),\n                createdAt: Date.now(),\n              },\n            ];\n          }\n        }),\n    ],\n    \"Set Google purchase token\"\n  );\n}\n\nexport function Subscriptions_cleanupOutdatedAppleReceipts(\n  dispatch: IDispatch,\n  userId: string,\n  service: Service,\n  subscription: ISubscription\n): Promise<void> {\n  return Promise.all(\n    subscription.apple.map<Promise<[string, boolean]>>(async (value) => {\n      return [value.value, await Subscriptions_verifyAppleReceipt(userId, service, value.value)];\n    })\n  ).then((results) => {\n    const verdicts = new Map(results);\n    updateState(\n      dispatch,\n      [\n        lb<IState>()\n          .p(\"storage\")\n          .p(\"subscription\")\n          .p(\"apple\")\n          .recordModify((apple) => SubscriptionReceipts_cleanupApple(apple, verdicts)),\n      ],\n      \"Clean up outdated Apple receipts\"\n    );\n  });\n}\n\nexport function Subscriptions_cleanupOutdatedGooglePurchaseTokens(\n  dispatch: IDispatch,\n  userId: string,\n  service: Service,\n  subscription: ISubscription\n): Promise<void> {\n  return Promise.all(\n    subscription.google.map<Promise<[string, boolean]>>(async (token) => {\n      return [token.id, await Subscriptions_verifyGooglePurchaseToken(service, userId, token.value)];\n    })\n  ).then((results) => {\n    for (const [id, result] of results) {\n      if (!result) {\n        updateState(\n          dispatch,\n          [\n            lb<IState>()\n              .p(\"storage\")\n              .p(\"subscription\")\n              .p(\"google\")\n              .recordModify((r) => {\n                return CollectionUtils_removeBy([...r], \"id\", id);\n              }),\n          ],\n          \"Cleanup outdated Google receipt\"\n        );\n      }\n    }\n  });\n}\n\nexport function Subscriptions_verifyAppleReceipt(userId: string, service: Service, receipt?: string): Promise<boolean> {\n  if (receipt != null) {\n    return service.verifyAppleReceipt(userId, receipt);\n  } else {\n    return Promise.resolve(false);\n  }\n}\n\nexport function Subscriptions_verifyGooglePurchaseToken(\n  service: Service,\n  userId: string,\n  purchaseToken?: string\n): Promise<boolean> {\n  if (purchaseToken != null) {\n    return service.verifyGooglePurchaseToken(userId, purchaseToken);\n  } else {\n    return Promise.resolve(false);\n  }\n}\n","import { IVersions, VersionTracker } from \"../models/versionTracker\";\nimport { IStorage, STORAGE_VERSION_TYPES } from \"../types\";\nimport { CollectionUtils_compact, CollectionUtils_groupByKey } from \"./collection\";\nimport { ObjectUtils_values, ObjectUtils_filter, ObjectUtils_isEqual } from \"./object\";\nimport { lg } from \"./posthog\";\n\nexport interface IStorageUpdate2 {\n  versions?: IVersions<IStorage>;\n  storage?: Partial<IStorage>;\n  version: IStorage[\"version\"];\n  originalId?: IStorage[\"originalId\"];\n}\n\nexport function Sync_getStorageUpdate2(\n  currentStorage: IStorage,\n  lastVersions: IStorage[\"_versions\"],\n  deviceId: string\n): IStorageUpdate2 {\n  const versionTracker = new VersionTracker(STORAGE_VERSION_TYPES, { deviceId });\n  const versionsDiff = versionTracker.diffVersions(lastVersions, currentStorage._versions || {});\n  if (versionsDiff) {\n    const storageDiff = versionTracker.extractByVersions(currentStorage, versionsDiff);\n    const filledVersionsDiff = versionTracker.fillVersions(storageDiff, versionsDiff, Date.now());\n    let programs = storageDiff.programs;\n    const programIds = (storageDiff.programs || []).map((p) => p.id);\n    if (programIds.length !== new Set(programIds).size) {\n      const duplicatedPrograms = CollectionUtils_compact(\n        ObjectUtils_values(\n          ObjectUtils_filter(\n            CollectionUtils_groupByKey(storageDiff.programs || [], \"id\"),\n            (k, v) => v != null && v.length > 1\n          )\n        )\n      );\n      const duplicateInfo = duplicatedPrograms.map((arr) => {\n        const isEqual = arr.every((p) => ObjectUtils_isEqual(arr[0], p));\n        return { id: arr[0].id, name: arr.map((p) => p.name), isEqual };\n      });\n      lg(\"duplicate-programs\", { info: JSON.stringify(duplicateInfo) });\n      programs = CollectionUtils_compact(duplicatedPrograms.map((arr) => arr[arr.length - 1]));\n      storageDiff.programs = programs;\n    }\n    return {\n      version: currentStorage.version,\n      originalId: currentStorage.originalId,\n      versions: filledVersionsDiff,\n      storage: storageDiff,\n    };\n  } else {\n    return {\n      version: currentStorage.version,\n      originalId: currentStorage.originalId,\n    };\n  }\n}\n","import type { IPostSyncResponse } from \"../api/service\";\n\nexport type ISyncAccountMismatch = { userId: string; email: string };\nexport type ISyncAccountMismatchPlan = \"ignore\" | \"load-local\" | \"fetch-server\";\n\nexport function SyncAccountMismatch_fromResponse(result: IPostSyncResponse): ISyncAccountMismatch | undefined {\n  if (result.type === \"error\" && result.error === \"account_mismatch\" && \"user_id\" in result) {\n    return { userId: result.user_id, email: result.email };\n  }\n  return undefined;\n}\n\nexport function SyncAccountMismatch_plan(args: {\n  sentTempUserId: string;\n  currentTempUserId: string;\n  hasLocalCopy: boolean;\n}): ISyncAccountMismatchPlan {\n  if (args.currentTempUserId !== args.sentTempUserId) {\n    return \"ignore\";\n  }\n  return args.hasLocalCopy ? \"load-local\" : \"fetch-server\";\n}\n","import { ILastSynced } from \"../models/state\";\nimport { IStorage } from \"../types\";\n\nexport const SyncBaseline_MAX_AGE_MS = 24 * 60 * 60 * 1000;\n\nexport type ISyncBaselineFetchReason = \"missing\" | \"other-user\" | \"stale\";\n\nexport type ISyncBaselineSource = Pick<IStorage, \"_versions\" | \"tempUserId\">;\n\nexport function SyncBaseline_fromServer(serverStorage: ISyncBaselineSource, now: number): ILastSynced {\n  return {\n    versions: serverStorage._versions,\n    tempUserId: serverStorage.tempUserId,\n    serverVersionsFetchedAt: now,\n  };\n}\n\nexport function SyncBaseline_afterClean(baseline: ILastSynced, sentStorage: ISyncBaselineSource): ILastSynced {\n  return {\n    versions: sentStorage._versions,\n    tempUserId: sentStorage.tempUserId,\n    serverVersionsFetchedAt: baseline.serverVersionsFetchedAt,\n  };\n}\n\nexport function SyncBaseline_needsFetch(\n  baseline: ILastSynced | undefined,\n  tempUserId: string,\n  now: number\n): ISyncBaselineFetchReason | undefined {\n  if (baseline == null) {\n    return \"missing\";\n  }\n  if (baseline.tempUserId !== tempUserId) {\n    return \"other-user\";\n  }\n  if (now - baseline.serverVersionsFetchedAt >= SyncBaseline_MAX_AGE_MS) {\n    return \"stale\";\n  }\n  return undefined;\n}\n","import baseColors from \"../../tailwind.colors.json\";\nimport semanticColors from \"../../tailwind.semantic.generated.json\";\n\ntype IBaseColors = typeof baseColors;\ntype ISemanticColors = typeof semanticColors;\ntype IDeepString<T> = { [K in keyof T]: T[K] extends object ? IDeepString<T[K]> : string };\ntype ISemanticVars = IDeepString<ISemanticColors[\"light\"]>;\n\nexport const TAILWIND_PAGE_MARKER_CLASS = \"liftosaur-page\";\n\nlet isPageRenderContext = false;\n\nexport function Tailwind_markPageContext(): void {\n  isPageRenderContext = true;\n}\n\nexport function Tailwind_colors(): IBaseColors {\n  return baseColors;\n}\n\nfunction buildSemanticVars(): ISemanticVars {\n  const shape = semanticColors.light as Record<string, Record<string, string>>;\n  const result: Record<string, Record<string, string>> = {};\n  for (const category of Object.keys(shape)) {\n    const inner: Record<string, string> = {};\n    for (const name of Object.keys(shape[category])) {\n      inner[name] = `var(--color-${category}-${name})`;\n    }\n    result[category] = inner;\n  }\n  return result as unknown as ISemanticVars;\n}\n\nconst semanticVars: ISemanticVars = buildSemanticVars();\n\nexport function Tailwind_semantic(): ISemanticVars {\n  if (isPageRenderContext) {\n    return semanticVars;\n  }\n  if (typeof window === \"undefined\") {\n    return semanticColors.light as unknown as ISemanticVars;\n  }\n  const root = window.document.documentElement;\n  if (root.classList.contains(TAILWIND_PAGE_MARKER_CLASS)) {\n    return semanticVars;\n  }\n  const theme = root.classList.contains(\"dark\") ? \"dark\" : \"light\";\n  return semanticColors[theme] as unknown as ISemanticVars;\n}\n\nexport function Tailwind_isDark(): boolean {\n  return Tailwind_semantic().background.default === baseColors.black;\n}\n\nexport function Tailwind_semanticConcrete(): ISemanticVars {\n  return semanticColors.light as unknown as ISemanticVars;\n}\n","import { useEffect, useState } from \"react\";\n\nfunction darkSchemeQuery(): MediaQueryList | undefined {\n  return typeof window !== \"undefined\" && window.matchMedia\n    ? window.matchMedia(\"(prefers-color-scheme: dark)\")\n    : undefined;\n}\n\nexport function Theme_system(): \"dark\" | \"light\" {\n  return darkSchemeQuery()?.matches ? \"dark\" : \"light\";\n}\n\nexport function useSystemTheme(): \"dark\" | \"light\" {\n  const [theme, setTheme] = useState(Theme_system);\n  useEffect(() => {\n    const query = darkSchemeQuery();\n    if (query == null) {\n      return undefined;\n    }\n    const onChange = (): void => setTheme(Theme_system());\n    query.addEventListener(\"change\", onChange);\n    return () => query.removeEventListener(\"change\", onChange);\n  }, []);\n  return theme;\n}\n\nexport function Theme_apply(theme: \"dark\" | \"light\" | undefined): void {\n  const root = document.documentElement;\n  if ((theme ?? Theme_system()) === \"dark\") {\n    root.classList.add(\"dark\");\n    root.classList.remove(\"light\");\n  } else {\n    root.classList.add(\"light\");\n    root.classList.remove(\"dark\");\n  }\n}\n","let isUndoingRef = false;\n\nexport function UndoingFlag_set(value: boolean): void {\n  isUndoingRef = value;\n  if (typeof window !== \"undefined\") {\n    window.isUndoing = value;\n  }\n}\n\nexport function UndoingFlag_get(): boolean {\n  if (typeof window !== \"undefined\" && window.isUndoing != null) {\n    return window.isUndoing;\n  }\n  return isUndoingRef;\n}\n","import { IEither } from \"./types\";\nimport { URLPolyfill } from \"./urlPolyfill\";\n\n// Check if native URL is available (not available in QuickJS on watchOS)\nconst URLConstructor: typeof URL = typeof URL !== \"undefined\" ? URL : (URLPolyfill as unknown as typeof URL);\n\nexport function UrlUtils_build(url: string, base?: string | URL): URL {\n  if (base != null) {\n    base = base.toString().replace(\"liftosaur://\", \"https://\");\n  }\n  try {\n    return new URLConstructor(url, base);\n  } catch (e) {\n    let json: string | undefined;\n    try {\n      json = JSON.stringify(url);\n    } catch {}\n    throw new TypeError(`Failed to construct URL: ${json || url}`);\n  }\n}\n\nexport function UrlUtils_buildSafe(url: string, base?: string | URL): IEither<URL, string> {\n  try {\n    return { success: true, data: UrlUtils_build(url, base) };\n  } catch (e) {\n    return { success: false, error: e instanceof Error ? e.message : String(e) };\n  }\n}\n","// URL polyfill for environments without native URL support (e.g., QuickJS on watchOS)\n\ninterface IParsedURL {\n  protocol: string;\n  hostname: string;\n  port: string;\n  host: string;\n  pathname: string;\n  search: string;\n  hash: string;\n  username: string;\n  password: string;\n}\n\nfunction parseURL(url: string): IParsedURL | null {\n  const match = url.match(/^(([^:/?#]+):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/);\n  if (!match) {\n    return null;\n  }\n\n  const authority = match[4] || \"\";\n  let userInfo = \"\";\n  let host = authority;\n  const atIndex = authority.indexOf(\"@\");\n  if (atIndex !== -1) {\n    userInfo = authority.substring(0, atIndex);\n    host = authority.substring(atIndex + 1);\n  }\n\n  let username = \"\";\n  let password = \"\";\n  if (userInfo) {\n    const colonIndex = userInfo.indexOf(\":\");\n    if (colonIndex !== -1) {\n      username = userInfo.substring(0, colonIndex);\n      password = userInfo.substring(colonIndex + 1);\n    } else {\n      username = userInfo;\n    }\n  }\n\n  let hostname = host;\n  let port = \"\";\n  const portMatch = host.match(/^(.+):(\\d+)$/);\n  if (portMatch) {\n    hostname = portMatch[1];\n    port = portMatch[2];\n  }\n\n  return {\n    protocol: match[2] ? match[2] + \":\" : \"\",\n    hostname,\n    port,\n    host,\n    pathname: match[5] || \"\",\n    search: match[6] || \"\",\n    hash: match[8] || \"\",\n    username,\n    password,\n  };\n}\n\nexport class URLSearchParamsPolyfill {\n  private params: Map<string, string[]> = new Map();\n\n  constructor(init?: string | URLSearchParamsPolyfill | Record<string, string> | Array<[string, string]>) {\n    if (typeof init === \"string\") {\n      this._parseFromString(init);\n    } else if (init instanceof URLSearchParamsPolyfill) {\n      init.forEach((value, key) => this.append(key, value));\n    } else if (Array.isArray(init)) {\n      for (const [key, value] of init) {\n        this.append(key, value);\n      }\n    } else if (init && typeof init === \"object\") {\n      for (const key of Object.keys(init)) {\n        this.append(key, init[key]);\n      }\n    }\n  }\n\n  private _parseFromString(query: string): void {\n    if (query.startsWith(\"?\")) {\n      query = query.slice(1);\n    }\n    if (!query) {\n      return;\n    }\n    for (const pair of query.split(\"&\")) {\n      const eqIndex = pair.indexOf(\"=\");\n      if (eqIndex === -1) {\n        this.append(decodeURIComponent(pair), \"\");\n      } else {\n        const key = decodeURIComponent(pair.substring(0, eqIndex));\n        const value = decodeURIComponent(pair.substring(eqIndex + 1));\n        this.append(key, value);\n      }\n    }\n  }\n\n  public append(name: string, value: string): void {\n    const values = this.params.get(name) || [];\n    values.push(value);\n    this.params.set(name, values);\n  }\n\n  public delete(name: string, value?: string): void {\n    if (value === undefined) {\n      this.params.delete(name);\n    } else {\n      const values = this.params.get(name);\n      if (values) {\n        const filtered = values.filter((v) => v !== value);\n        if (filtered.length === 0) {\n          this.params.delete(name);\n        } else {\n          this.params.set(name, filtered);\n        }\n      }\n    }\n  }\n\n  public get(name: string): string | null {\n    const values = this.params.get(name);\n    return values ? values[0] : null;\n  }\n\n  public getAll(name: string): string[] {\n    return this.params.get(name) || [];\n  }\n\n  public has(name: string, value?: string): boolean {\n    if (!this.params.has(name)) {\n      return false;\n    }\n    if (value === undefined) {\n      return true;\n    }\n    const values = this.params.get(name)!;\n    return values.includes(value);\n  }\n\n  public set(name: string, value: string): void {\n    this.params.set(name, [value]);\n  }\n\n  public sort(): void {\n    const sorted = new Map([...this.params.entries()].sort((a, b) => a[0].localeCompare(b[0])));\n    this.params = sorted;\n  }\n\n  public toString(): string {\n    const parts: string[] = [];\n    this.params.forEach((values, key) => {\n      for (const value of values) {\n        parts.push(encodeURIComponent(key) + \"=\" + encodeURIComponent(value));\n      }\n    });\n    return parts.join(\"&\");\n  }\n\n  public forEach(\n    callback: (value: string, key: string, parent: URLSearchParamsPolyfill) => void,\n    thisArg?: unknown\n  ): void {\n    this.params.forEach((values, key) => {\n      for (const value of values) {\n        callback.call(thisArg, value, key, this);\n      }\n    });\n  }\n\n  public entries(): IterableIterator<[string, string]> {\n    const result: [string, string][] = [];\n    this.params.forEach((values, key) => {\n      for (const value of values) {\n        result.push([key, value]);\n      }\n    });\n    return result[Symbol.iterator]();\n  }\n\n  public keys(): IterableIterator<string> {\n    const result: string[] = [];\n    this.params.forEach((values, key) => {\n      for (let i = 0; i < values.length; i++) {\n        result.push(key);\n      }\n    });\n    return result[Symbol.iterator]();\n  }\n\n  public values(): IterableIterator<string> {\n    const result: string[] = [];\n    this.params.forEach((values) => {\n      for (const value of values) {\n        result.push(value);\n      }\n    });\n    return result[Symbol.iterator]();\n  }\n\n  public [Symbol.iterator](): IterableIterator<[string, string]> {\n    return this.entries();\n  }\n\n  public get size(): number {\n    let count = 0;\n    this.params.forEach((values) => {\n      count += values.length;\n    });\n    return count;\n  }\n}\n\nexport class URLPolyfill {\n  private _protocol: string = \"\";\n  private _hostname: string = \"\";\n  private _port: string = \"\";\n  private _pathname: string = \"\";\n  private _search: string = \"\";\n  private _hash: string = \"\";\n  private _username: string = \"\";\n  private _password: string = \"\";\n  private _searchParams: URLSearchParamsPolyfill;\n\n  constructor(url: string, base?: string | URLPolyfill) {\n    url = String(url);\n    if (base !== undefined) {\n      base = String(base);\n      const baseP = parseURL(base);\n      if (!baseP || !baseP.protocol) {\n        throw new TypeError(\"Invalid base URL\");\n      }\n\n      if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(url)) {\n        // Absolute URL\n        const p = parseURL(url);\n        if (p) {\n          this._protocol = p.protocol;\n          this._hostname = p.hostname;\n          this._port = p.port;\n          this._pathname = p.pathname;\n          this._search = p.search;\n          this._hash = p.hash;\n          this._username = p.username;\n          this._password = p.password;\n        }\n      } else if (url.indexOf(\"//\") === 0) {\n        // Protocol-relative URL\n        const p = parseURL(baseP.protocol + url);\n        if (p) {\n          this._protocol = p.protocol;\n          this._hostname = p.hostname;\n          this._port = p.port;\n          this._pathname = p.pathname;\n          this._search = p.search;\n          this._hash = p.hash;\n          this._username = p.username;\n          this._password = p.password;\n        }\n      } else if (url.indexOf(\"/\") === 0) {\n        // Absolute path\n        this._protocol = baseP.protocol;\n        this._hostname = baseP.hostname;\n        this._port = baseP.port;\n        this._username = baseP.username;\n        this._password = baseP.password;\n\n        let urlPart = url;\n        const hashIndex = urlPart.indexOf(\"#\");\n        if (hashIndex !== -1) {\n          this._hash = urlPart.substring(hashIndex);\n          urlPart = urlPart.substring(0, hashIndex);\n        }\n        const searchIndex = urlPart.indexOf(\"?\");\n        if (searchIndex !== -1) {\n          this._search = urlPart.substring(searchIndex);\n          this._pathname = urlPart.substring(0, searchIndex);\n        } else {\n          this._pathname = urlPart;\n        }\n      } else {\n        // Relative path\n        this._protocol = baseP.protocol;\n        this._hostname = baseP.hostname;\n        this._port = baseP.port;\n        this._username = baseP.username;\n        this._password = baseP.password;\n\n        const basePath = baseP.pathname.substring(0, baseP.pathname.lastIndexOf(\"/\") + 1);\n        let urlPart = url;\n        const hashIndex = urlPart.indexOf(\"#\");\n        if (hashIndex !== -1) {\n          this._hash = urlPart.substring(hashIndex);\n          urlPart = urlPart.substring(0, hashIndex);\n        }\n        const searchIndex = urlPart.indexOf(\"?\");\n        if (searchIndex !== -1) {\n          this._search = urlPart.substring(searchIndex);\n          this._pathname = basePath + urlPart.substring(0, searchIndex);\n        } else {\n          this._pathname = basePath + urlPart;\n        }\n      }\n    } else {\n      // No base URL\n      const p = parseURL(url);\n      if (!p || !p.protocol) {\n        throw new TypeError(\"Invalid URL\");\n      }\n      this._protocol = p.protocol;\n      this._hostname = p.hostname;\n      this._port = p.port;\n      this._pathname = p.pathname;\n      this._search = p.search;\n      this._hash = p.hash;\n      this._username = p.username;\n      this._password = p.password;\n    }\n\n    this._searchParams = new URLSearchParamsPolyfill(this._search);\n  }\n\n  public get protocol(): string {\n    return this._protocol;\n  }\n\n  public set protocol(value: string) {\n    this._protocol = value.endsWith(\":\") ? value : value + \":\";\n  }\n\n  public get hostname(): string {\n    return this._hostname;\n  }\n\n  public set hostname(value: string) {\n    this._hostname = value;\n  }\n\n  public get port(): string {\n    return this._port;\n  }\n\n  public set port(value: string) {\n    this._port = value;\n  }\n\n  public get host(): string {\n    return this._port ? this._hostname + \":\" + this._port : this._hostname;\n  }\n\n  public set host(value: string) {\n    const portMatch = value.match(/^(.+):(\\d+)$/);\n    if (portMatch) {\n      this._hostname = portMatch[1];\n      this._port = portMatch[2];\n    } else {\n      this._hostname = value;\n      this._port = \"\";\n    }\n  }\n\n  public get pathname(): string {\n    return this._pathname;\n  }\n\n  public set pathname(value: string) {\n    this._pathname = value.startsWith(\"/\") ? value : \"/\" + value;\n  }\n\n  public get search(): string {\n    return this._search;\n  }\n\n  public set search(value: string) {\n    this._search = value.startsWith(\"?\") ? value : value ? \"?\" + value : \"\";\n    this._searchParams = new URLSearchParamsPolyfill(this._search);\n  }\n\n  public get searchParams(): URLSearchParamsPolyfill {\n    return this._searchParams;\n  }\n\n  public get hash(): string {\n    return this._hash;\n  }\n\n  public set hash(value: string) {\n    this._hash = value.startsWith(\"#\") ? value : value ? \"#\" + value : \"\";\n  }\n\n  public get username(): string {\n    return this._username;\n  }\n\n  public set username(value: string) {\n    this._username = value;\n  }\n\n  public get password(): string {\n    return this._password;\n  }\n\n  public set password(value: string) {\n    this._password = value;\n  }\n\n  public get origin(): string {\n    return this._protocol + \"//\" + this.host;\n  }\n\n  public get href(): string {\n    let userinfo = \"\";\n    if (this._username) {\n      userinfo = this._username;\n      if (this._password) {\n        userinfo += \":\" + this._password;\n      }\n      userinfo += \"@\";\n    }\n    return this._protocol + \"//\" + userinfo + this.host + this._pathname + this._search + this._hash;\n  }\n\n  public set href(value: string) {\n    const p = parseURL(value);\n    if (!p || !p.protocol) {\n      throw new TypeError(\"Invalid URL\");\n    }\n    this._protocol = p.protocol;\n    this._hostname = p.hostname;\n    this._port = p.port;\n    this._pathname = p.pathname;\n    this._search = p.search;\n    this._hash = p.hash;\n    this._username = p.username;\n    this._password = p.password;\n    this._searchParams = new URLSearchParamsPolyfill(this._search);\n  }\n\n  public toString(): string {\n    return this.href;\n  }\n\n  public toJSON(): string {\n    return this.href;\n  }\n\n  public static canParse(url: string, base?: string): boolean {\n    try {\n      new URLPolyfill(url, base);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n}\n","import { useSyncExternalStore } from \"react\";\nimport { SCALED_SPACINGS, SCALED_LEADINGS } from \"./scaledSpacings.generated\";\n\nconst BASE_REM = 16;\nconst listeners = new Set<() => void>();\nlet currentRem: number | undefined = undefined;\n\nexport function useRem(): number {\n  return useSyncExternalStore(remSubscribe, remGet, remServerGet);\n}\n\nexport function useRemScale(): number {\n  return useRem() / BASE_REM;\n}\n\nexport function Rem_set(size: number): void {\n  if (typeof document !== \"undefined\") {\n    const root = document.documentElement;\n    root.style.fontSize = `${size}px`;\n    const scale = size / BASE_REM;\n    // --spacing is deliberately absent: paddings, margins and gaps are constant at every text\n    // size. Only type, and the boxes that have to keep containing it, grow.\n    const vars: Record<string, string> = {\n      \"--text-2xs\": `${10 * scale}px`,\n      \"--text-xs\": `${12 * scale}px`,\n      \"--text-sm\": `${14 * scale}px`,\n      \"--text-base\": `${16 * scale}px`,\n      \"--text-lg\": `${18 * scale}px`,\n      \"--text-xl\": `${20 * scale}px`,\n      \"--text-2xl\": `${24 * scale}px`,\n      \"--text-3xl\": `${30 * scale}px`,\n      \"--text-4xl\": `${36 * scale}px`,\n      \"--text-5xl\": `${48 * scale}px`,\n    };\n    for (const n of SCALED_SPACINGS) {\n      vars[`--spacing-scaled-${n}`] = `${n * 4 * scale}px`;\n    }\n    for (const n of SCALED_LEADINGS) {\n      vars[`--leading-scaled-${n}`] = `${n * 4 * scale}px`;\n    }\n    for (const [k, v] of Object.entries(vars)) {\n      root.style.setProperty(k, v);\n    }\n  }\n  currentRem = size;\n  for (const l of listeners) {\n    l();\n  }\n}\n\n// getSnapshot runs on every render of every subscriber (and there's one per icon),\n// so it must not call getComputedStyle - that forces a style recalc each time.\nfunction remGet(): number {\n  if (currentRem == null) {\n    if (typeof document === \"undefined\") {\n      return BASE_REM;\n    }\n    const fs = parseFloat(getComputedStyle(document.documentElement).fontSize);\n    currentRem = isNaN(fs) ? BASE_REM : fs;\n  }\n  return currentRem;\n}\n\nfunction remServerGet(): number {\n  return BASE_REM;\n}\n\nfunction remSubscribe(onChange: () => void): () => void {\n  listeners.add(onChange);\n  return () => {\n    listeners.delete(onChange);\n  };\n}\n","import { IAuthToken } from \"./keychain\";\nimport { IUser } from \"../models/user\";\nimport { IStorage } from \"../types\";\nimport { AdminDebug_isDebugAccountId } from \"../models/adminDebug\";\n\nexport type IWatchAuthSource = \"startup\" | \"request\";\n\nexport type IWatchAuthDecision =\n  | { kind: \"send\"; auth: IAuthToken }\n  | { kind: \"clearWatch\"; storedUserId: string }\n  | { kind: \"sendNoAuth\" }\n  | { kind: \"nothing\" };\n\nexport function WatchAuthHandoff_accountId(\n  user: IUser | undefined,\n  storage: Pick<IStorage, \"email\" | \"tempUserId\">\n): string | undefined {\n  if (AdminDebug_isDebugAccountId(storage.tempUserId)) {\n    return undefined;\n  }\n  if (user != null) {\n    return user.id;\n  }\n  if (storage.email) {\n    return storage.tempUserId;\n  }\n  return undefined;\n}\n\nexport function WatchAuthHandoff_decide(\n  auth: IAuthToken | undefined,\n  accountId: string | undefined,\n  source: IWatchAuthSource\n): IWatchAuthDecision {\n  if (!auth?.token || !accountId) {\n    return source === \"request\" ? { kind: \"sendNoAuth\" } : { kind: \"nothing\" };\n  }\n  return auth.userId === accountId ? { kind: \"send\", auth } : { kind: \"clearWatch\", storedUserId: auth.userId || \"\" };\n}\n","// The watch runs watch-bundle.js in QuickJS. JSContext.swift installs these globals so the bundle can\n// post messages to WatchMessageHandler.swift. They exist nowhere else.\ndeclare global {\n  // eslint-disable-next-line no-var\n  var webkit:\n    | {\n        messageHandlers?: { liftosaurMessage?: { postMessage: (message: Record<string, string | undefined>) => void } };\n      }\n    | undefined;\n  // eslint-disable-next-line no-var\n  var lftIosAppVersion: string | undefined;\n}\n\nexport function WatchHost_isAvailable(): boolean {\n  return globalThis.webkit?.messageHandlers?.liftosaurMessage != null;\n}\n\nexport function WatchHost_appVersion(): number {\n  return parseInt(globalThis.lftIosAppVersion || \"0\", 10);\n}\n\nexport function WatchHost_send(message: Record<string, string | undefined>): void {\n  globalThis.webkit?.messageHandlers?.liftosaurMessage?.postMessage(message);\n}\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(n); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction filterUniqueArray(arr) {\n  return arr.filter(function (val, index) {\n    return arr.lastIndexOf(val) === index;\n  });\n}\n\nexport default function assignStyle(base) {\n  for (var i = 0, len = arguments.length <= 1 ? 0 : arguments.length - 1; i < len; ++i) {\n    var style = i + 1 < 1 || arguments.length <= i + 1 ? undefined : arguments[i + 1];\n\n    for (var property in style) {\n      var value = style[property];\n      var baseValue = base[property];\n\n      if (baseValue && value) {\n        if (Array.isArray(baseValue)) {\n          base[property] = filterUniqueArray(baseValue.concat(value));\n          continue;\n        }\n\n        if (Array.isArray(value)) {\n          base[property] = filterUniqueArray([baseValue].concat(_toConsumableArray(value)));\n          continue;\n        }\n\n        if (_typeof(value) === 'object') {\n          base[property] = assignStyle({}, baseValue, value);\n          continue;\n        }\n      }\n\n      base[property] = value;\n    }\n  }\n\n  return base;\n}","var DASH = /-([a-z])/g;\nvar MS = /^Ms/g;\nvar cache = {};\n\nfunction toUpper(match) {\n  return match[1].toUpperCase();\n}\n\nexport default function camelCaseProperty(property) {\n  if (cache.hasOwnProperty(property)) {\n    return cache[property];\n  }\n\n  var camelProp = property.replace(DASH, toUpper).replace(MS, 'ms');\n  cache[property] = camelProp;\n  return camelProp;\n}","import hyphenateStyleName from 'hyphenate-style-name';\nexport default function hyphenateProperty(property) {\n  return hyphenateStyleName(property);\n}","import hyphenateProperty from './hyphenateProperty';\nexport default function cssifyDeclaration(property, value) {\n  return hyphenateProperty(property) + ':' + value;\n}","import cssifyDeclaration from './cssifyDeclaration';\nexport default function cssifyObject(style) {\n  var css = '';\n\n  for (var property in style) {\n    var value = style[property];\n\n    if (typeof value !== 'string' && typeof value !== 'number') {\n      continue;\n    } // prevents the semicolon after\n    // the last rule declaration\n\n\n    if (css) {\n      css += ';';\n    }\n\n    css += cssifyDeclaration(property, value);\n  }\n\n  return css;\n}","var RE = /^(Webkit|Moz|O|ms)/;\nexport default function isPrefixedProperty(property) {\n  return RE.test(property);\n}","var RE = /-webkit-|-moz-|-ms-/;\nexport default function isPrefixedValue(value) {\n  return typeof value === 'string' && RE.test(value);\n}","import hyphenateProperty from './hyphenateProperty';\nvar unitlessProperties = {\n  borderImageOutset: true,\n  borderImageSlice: true,\n  borderImageWidth: true,\n  fontWeight: true,\n  lineHeight: true,\n  opacity: true,\n  orphans: true,\n  tabSize: true,\n  widows: true,\n  zIndex: true,\n  zoom: true,\n  // SVG-related properties\n  fillOpacity: true,\n  floodOpacity: true,\n  stopOpacity: true,\n  strokeDasharray: true,\n  strokeDashoffset: true,\n  strokeMiterlimit: true,\n  strokeOpacity: true,\n  strokeWidth: true\n};\nvar prefixedUnitlessProperties = ['animationIterationCount', 'boxFlex', 'boxFlexGroup', 'boxOrdinalGroup', 'columnCount', 'flex', 'flexGrow', 'flexPositive', 'flexShrink', 'flexNegative', 'flexOrder', 'gridColumn', 'gridColumnEnd', 'gridColumnStart', 'gridRow', 'gridRowEnd', 'gridRowStart', 'lineClamp', 'order'];\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O'];\n\nfunction getPrefixedProperty(prefix, property) {\n  return prefix + property.charAt(0).toUpperCase() + property.slice(1);\n} // add all prefixed properties to the unitless properties\n\n\nfor (var i = 0, len = prefixedUnitlessProperties.length; i < len; ++i) {\n  var property = prefixedUnitlessProperties[i];\n  unitlessProperties[property] = true;\n\n  for (var j = 0, jLen = prefixes.length; j < jLen; ++j) {\n    unitlessProperties[getPrefixedProperty(prefixes[j], property)] = true;\n  }\n} // add all hypenated properties as well\n\n\nfor (var _property in unitlessProperties) {\n  unitlessProperties[hyphenateProperty(_property)] = true;\n}\n\nexport default function isUnitlessProperty(property) {\n  return unitlessProperties.hasOwnProperty(property);\n}","var RE = /^(ms|Webkit|Moz|O)/;\nexport default function unprefixProperty(property) {\n  var propertyWithoutPrefix = property.replace(RE, '');\n  return propertyWithoutPrefix.charAt(0).toLowerCase() + propertyWithoutPrefix.slice(1);\n}","import camelCaseProperty from './camelCaseProperty';\nimport unprefixProperty from './unprefixProperty';\nexport default function normalizeProperty(property) {\n  return unprefixProperty(camelCaseProperty(property));\n}","import hyphenateProperty from './hyphenateProperty';\nexport default function resolveArrayValue(property, value) {\n  return value.join(';' + hyphenateProperty(property) + ':');\n}","var RE = /(-ms-|-webkit-|-moz-|-o-)/g;\nexport default function unprefixValue(value) {\n  if (typeof value === 'string') {\n    return value.replace(RE, '');\n  }\n\n  return value;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = hyphenateProperty;\n\nvar _hyphenateStyleName = require(\"hyphenate-style-name\");\n\nvar _hyphenateStyleName2 = _interopRequireDefault(_hyphenateStyleName);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction hyphenateProperty(property) {\n  return (0, _hyphenateStyleName2[\"default\"])(property);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports[\"default\"] = isPrefixedValue;\nvar RE = /-webkit-|-moz-|-ms-/;\n\nfunction isPrefixedValue(value) {\n  return typeof value === 'string' && RE.test(value);\n}","const parseNumber = (color, len) => {\n\tif (typeof color !== 'number') return;\n\n\t// hex3: #c93 -> #cc9933\n\tif (len === 3) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: (((color >> 8) & 0xf) | ((color >> 4) & 0xf0)) / 255,\n\t\t\tg: (((color >> 4) & 0xf) | (color & 0xf0)) / 255,\n\t\t\tb: ((color & 0xf) | ((color << 4) & 0xf0)) / 255\n\t\t};\n\t}\n\n\t// hex4: #c931 -> #cc993311\n\tif (len === 4) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: (((color >> 12) & 0xf) | ((color >> 8) & 0xf0)) / 255,\n\t\t\tg: (((color >> 8) & 0xf) | ((color >> 4) & 0xf0)) / 255,\n\t\t\tb: (((color >> 4) & 0xf) | (color & 0xf0)) / 255,\n\t\t\talpha: ((color & 0xf) | ((color << 4) & 0xf0)) / 255\n\t\t};\n\t}\n\n\t// hex6: #f0f1f2\n\tif (len === 6) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: ((color >> 16) & 0xff) / 255,\n\t\t\tg: ((color >> 8) & 0xff) / 255,\n\t\t\tb: (color & 0xff) / 255\n\t\t};\n\t}\n\n\t// hex8: #f0f1f2ff\n\tif (len === 8) {\n\t\treturn {\n\t\t\tmode: 'rgb',\n\t\t\tr: ((color >> 24) & 0xff) / 255,\n\t\t\tg: ((color >> 16) & 0xff) / 255,\n\t\t\tb: ((color >> 8) & 0xff) / 255,\n\t\t\talpha: (color & 0xff) / 255\n\t\t};\n\t}\n};\n\nexport default parseNumber;\n","const named = {\n\taliceblue: 0xf0f8ff,\n\tantiquewhite: 0xfaebd7,\n\taqua: 0x00ffff,\n\taquamarine: 0x7fffd4,\n\tazure: 0xf0ffff,\n\tbeige: 0xf5f5dc,\n\tbisque: 0xffe4c4,\n\tblack: 0x000000,\n\tblanchedalmond: 0xffebcd,\n\tblue: 0x0000ff,\n\tblueviolet: 0x8a2be2,\n\tbrown: 0xa52a2a,\n\tburlywood: 0xdeb887,\n\tcadetblue: 0x5f9ea0,\n\tchartreuse: 0x7fff00,\n\tchocolate: 0xd2691e,\n\tcoral: 0xff7f50,\n\tcornflowerblue: 0x6495ed,\n\tcornsilk: 0xfff8dc,\n\tcrimson: 0xdc143c,\n\tcyan: 0x00ffff,\n\tdarkblue: 0x00008b,\n\tdarkcyan: 0x008b8b,\n\tdarkgoldenrod: 0xb8860b,\n\tdarkgray: 0xa9a9a9,\n\tdarkgreen: 0x006400,\n\tdarkgrey: 0xa9a9a9,\n\tdarkkhaki: 0xbdb76b,\n\tdarkmagenta: 0x8b008b,\n\tdarkolivegreen: 0x556b2f,\n\tdarkorange: 0xff8c00,\n\tdarkorchid: 0x9932cc,\n\tdarkred: 0x8b0000,\n\tdarksalmon: 0xe9967a,\n\tdarkseagreen: 0x8fbc8f,\n\tdarkslateblue: 0x483d8b,\n\tdarkslategray: 0x2f4f4f,\n\tdarkslategrey: 0x2f4f4f,\n\tdarkturquoise: 0x00ced1,\n\tdarkviolet: 0x9400d3,\n\tdeeppink: 0xff1493,\n\tdeepskyblue: 0x00bfff,\n\tdimgray: 0x696969,\n\tdimgrey: 0x696969,\n\tdodgerblue: 0x1e90ff,\n\tfirebrick: 0xb22222,\n\tfloralwhite: 0xfffaf0,\n\tforestgreen: 0x228b22,\n\tfuchsia: 0xff00ff,\n\tgainsboro: 0xdcdcdc,\n\tghostwhite: 0xf8f8ff,\n\tgold: 0xffd700,\n\tgoldenrod: 0xdaa520,\n\tgray: 0x808080,\n\tgreen: 0x008000,\n\tgreenyellow: 0xadff2f,\n\tgrey: 0x808080,\n\thoneydew: 0xf0fff0,\n\thotpink: 0xff69b4,\n\tindianred: 0xcd5c5c,\n\tindigo: 0x4b0082,\n\tivory: 0xfffff0,\n\tkhaki: 0xf0e68c,\n\tlavender: 0xe6e6fa,\n\tlavenderblush: 0xfff0f5,\n\tlawngreen: 0x7cfc00,\n\tlemonchiffon: 0xfffacd,\n\tlightblue: 0xadd8e6,\n\tlightcoral: 0xf08080,\n\tlightcyan: 0xe0ffff,\n\tlightgoldenrodyellow: 0xfafad2,\n\tlightgray: 0xd3d3d3,\n\tlightgreen: 0x90ee90,\n\tlightgrey: 0xd3d3d3,\n\tlightpink: 0xffb6c1,\n\tlightsalmon: 0xffa07a,\n\tlightseagreen: 0x20b2aa,\n\tlightskyblue: 0x87cefa,\n\tlightslategray: 0x778899,\n\tlightslategrey: 0x778899,\n\tlightsteelblue: 0xb0c4de,\n\tlightyellow: 0xffffe0,\n\tlime: 0x00ff00,\n\tlimegreen: 0x32cd32,\n\tlinen: 0xfaf0e6,\n\tmagenta: 0xff00ff,\n\tmaroon: 0x800000,\n\tmediumaquamarine: 0x66cdaa,\n\tmediumblue: 0x0000cd,\n\tmediumorchid: 0xba55d3,\n\tmediumpurple: 0x9370db,\n\tmediumseagreen: 0x3cb371,\n\tmediumslateblue: 0x7b68ee,\n\tmediumspringgreen: 0x00fa9a,\n\tmediumturquoise: 0x48d1cc,\n\tmediumvioletred: 0xc71585,\n\tmidnightblue: 0x191970,\n\tmintcream: 0xf5fffa,\n\tmistyrose: 0xffe4e1,\n\tmoccasin: 0xffe4b5,\n\tnavajowhite: 0xffdead,\n\tnavy: 0x000080,\n\toldlace: 0xfdf5e6,\n\tolive: 0x808000,\n\tolivedrab: 0x6b8e23,\n\torange: 0xffa500,\n\torangered: 0xff4500,\n\torchid: 0xda70d6,\n\tpalegoldenrod: 0xeee8aa,\n\tpalegreen: 0x98fb98,\n\tpaleturquoise: 0xafeeee,\n\tpalevioletred: 0xdb7093,\n\tpapayawhip: 0xffefd5,\n\tpeachpuff: 0xffdab9,\n\tperu: 0xcd853f,\n\tpink: 0xffc0cb,\n\tplum: 0xdda0dd,\n\tpowderblue: 0xb0e0e6,\n\tpurple: 0x800080,\n\n\t// Added in CSS Colors Level 4:\n\t// https://drafts.csswg.org/css-color/#changes-from-3\n\trebeccapurple: 0x663399,\n\n\tred: 0xff0000,\n\trosybrown: 0xbc8f8f,\n\troyalblue: 0x4169e1,\n\tsaddlebrown: 0x8b4513,\n\tsalmon: 0xfa8072,\n\tsandybrown: 0xf4a460,\n\tseagreen: 0x2e8b57,\n\tseashell: 0xfff5ee,\n\tsienna: 0xa0522d,\n\tsilver: 0xc0c0c0,\n\tskyblue: 0x87ceeb,\n\tslateblue: 0x6a5acd,\n\tslategray: 0x708090,\n\tslategrey: 0x708090,\n\tsnow: 0xfffafa,\n\tspringgreen: 0x00ff7f,\n\tsteelblue: 0x4682b4,\n\ttan: 0xd2b48c,\n\tteal: 0x008080,\n\tthistle: 0xd8bfd8,\n\ttomato: 0xff6347,\n\tturquoise: 0x40e0d0,\n\tviolet: 0xee82ee,\n\twheat: 0xf5deb3,\n\twhite: 0xffffff,\n\twhitesmoke: 0xf5f5f5,\n\tyellow: 0xffff00,\n\tyellowgreen: 0x9acd32\n};\n\nexport default named;\n","import parseNumber from './parseNumber.js';\n\nconst hex = /^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i;\n\nconst parseHex = color => {\n\tlet match;\n\t// eslint-disable-next-line no-cond-assign\n\treturn (match = color.match(hex))\n\t\t? parseNumber(parseInt(match[1], 16), match[1].length)\n\t\t: undefined;\n};\n\nexport default parseHex;\n","/*\n\tBasic building blocks for color regexes\n\t---------------------------------------\n\n\tThese regexes are expressed as strings\n\tto be interpolated in the color regexes.\n */\n\n// <number>\nexport const num = '([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)';\n\n// <number> or 'none'\nexport const num_none = `(?:${num}|none)`;\n\n// <percentage>\nexport const per = `${num}%`;\n\n// <percent> or 'none'\nexport const per_none = `(?:${num}%|none)`;\n\n// <number-percentage> (<alpha-value>)\nexport const num_per = `(?:${num}%|${num})`;\n\n// <number-percentage> (<alpha-value>) or 'none'\nexport const num_per_none = `(?:${num}%|${num}|none)`;\n\n// <hue>\nexport const hue = `(?:${num}(deg|grad|rad|turn)|${num})`;\n\n// <hue> or 'none'\nexport const hue_none = `(?:${num}(deg|grad|rad|turn)|${num}|none)`;\n\nexport const c = `\\\\s*,\\\\s*`; // comma\nexport const so = '\\\\s*'; // space, optional\nexport const s = `\\\\s+`; // space\n\nexport const rx_num_per_none = new RegExp('^' + num_per_none + '$');\n","import { num, per, num_per, c } from '../util/regex.js';\n\n/*\n\trgb() regular expressions for legacy format\n\tReference: https://drafts.csswg.org/css-color/#rgb-functions\n */\nconst rgb_num_old = new RegExp(\n\t`^rgba?\\\\(\\\\s*${num}${c}${num}${c}${num}\\\\s*(?:,\\\\s*${num_per}\\\\s*)?\\\\)$`\n);\n\nconst rgb_per_old = new RegExp(\n\t`^rgba?\\\\(\\\\s*${per}${c}${per}${c}${per}\\\\s*(?:,\\\\s*${num_per}\\\\s*)?\\\\)$`\n);\n\nconst parseRgbLegacy = color => {\n\tlet res = { mode: 'rgb' };\n\tlet match;\n\tif ((match = color.match(rgb_num_old))) {\n\t\tif (match[1] !== undefined) {\n\t\t\tres.r = match[1] / 255;\n\t\t}\n\t\tif (match[2] !== undefined) {\n\t\t\tres.g = match[2] / 255;\n\t\t}\n\t\tif (match[3] !== undefined) {\n\t\t\tres.b = match[3] / 255;\n\t\t}\n\t} else if ((match = color.match(rgb_per_old))) {\n\t\tif (match[1] !== undefined) {\n\t\t\tres.r = match[1] / 100;\n\t\t}\n\t\tif (match[2] !== undefined) {\n\t\t\tres.g = match[2] / 100;\n\t\t}\n\t\tif (match[3] !== undefined) {\n\t\t\tres.b = match[3] / 100;\n\t\t}\n\t} else {\n\t\treturn undefined;\n\t}\n\n\tif (match[4] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, match[4] / 100));\n\t} else if (match[5] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, +match[5]));\n\t}\n\n\treturn res;\n};\n\nexport default parseRgbLegacy;\n","import { converters } from './modes.js';\nimport prepare from './_prepare.js';\n\nconst converter =\n\t(target_mode = 'rgb') =>\n\tcolor =>\n\t\t(color = prepare(color, target_mode)) !== undefined\n\t\t\t? // if the color's mode corresponds to our target mode\n\t\t\t  color.mode === target_mode\n\t\t\t\t? // then just return the color\n\t\t\t\t  color\n\t\t\t\t: // otherwise check to see if we have a dedicated\n\t\t\t\t// converter for the target mode\n\t\t\t\tconverters[color.mode][target_mode]\n\t\t\t\t? // and return its result...\n\t\t\t\t  converters[color.mode][target_mode](color)\n\t\t\t\t: // ...otherwise pass through RGB as an intermediary step.\n\t\t\t\t// if the target mode is RGB...\n\t\t\t\ttarget_mode === 'rgb'\n\t\t\t\t? // just return the RGB\n\t\t\t\t  converters[color.mode].rgb(color)\n\t\t\t\t: // otherwise convert color.mode -> RGB -> target_mode\n\t\t\t\t  converters.rgb[target_mode](converters[color.mode].rgb(color))\n\t\t\t: undefined;\n\nexport default converter;\n","import parse from './parse.js';\n\nconst prepare = (color, mode) =>\n\tcolor === undefined\n\t\t? undefined\n\t\t: typeof color !== 'object'\n\t\t? parse(color)\n\t\t: color.mode !== undefined\n\t\t? color\n\t\t: mode\n\t\t? { ...color, mode }\n\t\t: undefined;\n\nexport default prepare;\n","import converter from './converter.js';\n\nconst converters = {};\nconst modes = {};\n\nconst parsers = [];\nconst colorProfiles = {};\n\nconst identity = v => v;\n\nconst useMode = definition => {\n\tconverters[definition.mode] = {\n\t\t...converters[definition.mode],\n\t\t...definition.toMode\n\t};\n\n\tObject.keys(definition.fromMode || {}).forEach(k => {\n\t\tif (!converters[k]) {\n\t\t\tconverters[k] = {};\n\t\t}\n\t\tconverters[k][definition.mode] = definition.fromMode[k];\n\t});\n\n\t// Color space channel ranges\n\tif (!definition.ranges) {\n\t\tdefinition.ranges = {};\n\t}\n\n\tif (!definition.difference) {\n\t\tdefinition.difference = {};\n\t}\n\n\tdefinition.channels.forEach(channel => {\n\t\t// undefined channel ranges default to the [0, 1] interval\n\t\tif (definition.ranges[channel] === undefined) {\n\t\t\tdefinition.ranges[channel] = [0, 1];\n\t\t}\n\n\t\tif (!definition.interpolate[channel]) {\n\t\t\tthrow new Error(`Missing interpolator for: ${channel}`);\n\t\t}\n\n\t\tif (typeof definition.interpolate[channel] === 'function') {\n\t\t\tdefinition.interpolate[channel] = {\n\t\t\t\tuse: definition.interpolate[channel]\n\t\t\t};\n\t\t}\n\n\t\tif (!definition.interpolate[channel].fixup) {\n\t\t\tdefinition.interpolate[channel].fixup = identity;\n\t\t}\n\t});\n\n\tmodes[definition.mode] = definition;\n\t(definition.parse || []).forEach(parser => {\n\t\tuseParser(parser, definition.mode);\n\t});\n\n\treturn converter(definition.mode);\n};\n\nconst getMode = mode => modes[mode];\n\nconst useParser = (parser, mode) => {\n\tif (typeof parser === 'string') {\n\t\tif (!mode) {\n\t\t\tthrow new Error(`'mode' required when 'parser' is a string`);\n\t\t}\n\t\tcolorProfiles[parser] = mode;\n\t} else if (typeof parser === 'function') {\n\t\tif (parsers.indexOf(parser) < 0) {\n\t\t\tparsers.push(parser);\n\t\t}\n\t}\n};\n\nconst removeParser = parser => {\n\tif (typeof parser === 'string') {\n\t\tdelete colorProfiles[parser];\n\t} else if (typeof parser === 'function') {\n\t\tconst idx = parsers.indexOf(parser);\n\t\tif (idx > 0) {\n\t\t\tparsers.splice(idx, 1);\n\t\t}\n\t}\n};\n\nexport {\n\tuseMode,\n\tgetMode,\n\tuseParser,\n\tremoveParser,\n\tconverters,\n\tparsers,\n\tcolorProfiles\n};\n","import { parsers, colorProfiles, getMode } from './modes.js';\n\n/* eslint-disable-next-line no-control-regex */\nconst IdentStartCodePoint = /[^\\x00-\\x7F]|[a-zA-Z_]/;\n\n/* eslint-disable-next-line no-control-regex */\nconst IdentCodePoint = /[^\\x00-\\x7F]|[-\\w]/;\n\nexport const Tok = {\n\tFunction: 'function',\n\tIdent: 'ident',\n\tNumber: 'number',\n\tPercentage: 'percentage',\n\tParenClose: ')',\n\tNone: 'none',\n\tHue: 'hue',\n\tAlpha: 'alpha'\n};\n\nlet _i = 0;\n\n/*\n\t4.3.10. Check if three code points would start a number\n\thttps://drafts.csswg.org/css-syntax/#starts-with-a-number\n */\nfunction is_num(chars) {\n\tlet ch = chars[_i];\n\tlet ch1 = chars[_i + 1];\n\tif (ch === '-' || ch === '+') {\n\t\treturn /\\d/.test(ch1) || (ch1 === '.' && /\\d/.test(chars[_i + 2]));\n\t}\n\tif (ch === '.') {\n\t\treturn /\\d/.test(ch1);\n\t}\n\treturn /\\d/.test(ch);\n}\n\n/*\n\tCheck if the stream starts with an identifier.\n */\n\nfunction is_ident(chars) {\n\tif (_i >= chars.length) {\n\t\treturn false;\n\t}\n\tlet ch = chars[_i];\n\tif (IdentStartCodePoint.test(ch)) {\n\t\treturn true;\n\t}\n\tif (ch === '-') {\n\t\tif (chars.length - _i < 2) {\n\t\t\treturn false;\n\t\t}\n\t\tlet ch1 = chars[_i + 1];\n\t\tif (ch1 === '-' || IdentStartCodePoint.test(ch1)) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\treturn false;\n}\n\n/*\n\t4.3.3. Consume a numeric token\n\thttps://drafts.csswg.org/css-syntax/#consume-numeric-token\n */\n\nconst huenits = {\n\tdeg: 1,\n\trad: 180 / Math.PI,\n\tgrad: 9 / 10,\n\tturn: 360\n};\n\nfunction num(chars) {\n\tlet value = '';\n\tif (chars[_i] === '-' || chars[_i] === '+') {\n\t\tvalue += chars[_i++];\n\t}\n\tvalue += digits(chars);\n\tif (chars[_i] === '.' && /\\d/.test(chars[_i + 1])) {\n\t\tvalue += chars[_i++] + digits(chars);\n\t}\n\tif (chars[_i] === 'e' || chars[_i] === 'E') {\n\t\tif (\n\t\t\t(chars[_i + 1] === '-' || chars[_i + 1] === '+') &&\n\t\t\t/\\d/.test(chars[_i + 2])\n\t\t) {\n\t\t\tvalue += chars[_i++] + chars[_i++] + digits(chars);\n\t\t} else if (/\\d/.test(chars[_i + 1])) {\n\t\t\tvalue += chars[_i++] + digits(chars);\n\t\t}\n\t}\n\tif (is_ident(chars)) {\n\t\tlet id = ident(chars);\n\t\tif (id === 'deg' || id === 'rad' || id === 'turn' || id === 'grad') {\n\t\t\treturn { type: Tok.Hue, value: value * huenits[id] };\n\t\t}\n\t\treturn undefined;\n\t}\n\tif (chars[_i] === '%') {\n\t\t_i++;\n\t\treturn { type: Tok.Percentage, value: +value };\n\t}\n\treturn { type: Tok.Number, value: +value };\n}\n\n/*\n\tConsume digits.\n */\nfunction digits(chars) {\n\tlet v = '';\n\twhile (/\\d/.test(chars[_i])) {\n\t\tv += chars[_i++];\n\t}\n\treturn v;\n}\n\n/*\n\tConsume an identifier.\n */\nfunction ident(chars) {\n\tlet v = '';\n\twhile (_i < chars.length && IdentCodePoint.test(chars[_i])) {\n\t\tv += chars[_i++];\n\t}\n\treturn v;\n}\n\n/*\n\tConsume an ident-like token.\n */\nfunction identlike(chars) {\n\tlet v = ident(chars);\n\tif (chars[_i] === '(') {\n\t\t_i++;\n\t\treturn { type: Tok.Function, value: v };\n\t}\n\tif (v === 'none') {\n\t\treturn { type: Tok.None, value: undefined };\n\t}\n\treturn { type: Tok.Ident, value: v };\n}\n\nexport function tokenize(str = '') {\n\tlet chars = str.trim();\n\tlet tokens = [];\n\tlet ch;\n\n\t/* reset counter */\n\t_i = 0;\n\n\twhile (_i < chars.length) {\n\t\tch = chars[_i++];\n\n\t\t/*\n\t\t\tConsume whitespace without emitting it\n\t\t */\n\t\tif (ch === '\\n' || ch === '\\t' || ch === ' ') {\n\t\t\twhile (\n\t\t\t\t_i < chars.length &&\n\t\t\t\t(chars[_i] === '\\n' || chars[_i] === '\\t' || chars[_i] === ' ')\n\t\t\t) {\n\t\t\t\t_i++;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ch === ',') {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === ')') {\n\t\t\ttokens.push({ type: Tok.ParenClose });\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ch === '+') {\n\t\t\t_i--;\n\t\t\tif (is_num(chars)) {\n\t\t\t\ttokens.push(num(chars));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === '-') {\n\t\t\t_i--;\n\t\t\tif (is_num(chars)) {\n\t\t\t\ttokens.push(num(chars));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (is_ident(chars)) {\n\t\t\t\ttokens.push({ type: Tok.Ident, value: ident(chars) });\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === '.') {\n\t\t\t_i--;\n\t\t\tif (is_num(chars)) {\n\t\t\t\ttokens.push(num(chars));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (ch === '/') {\n\t\t\twhile (\n\t\t\t\t_i < chars.length &&\n\t\t\t\t(chars[_i] === '\\n' || chars[_i] === '\\t' || chars[_i] === ' ')\n\t\t\t) {\n\t\t\t\t_i++;\n\t\t\t}\n\t\t\tlet alpha;\n\t\t\tif (is_num(chars)) {\n\t\t\t\talpha = num(chars);\n\t\t\t\tif (alpha.type !== Tok.Hue) {\n\t\t\t\t\ttokens.push({ type: Tok.Alpha, value: alpha });\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (is_ident(chars)) {\n\t\t\t\tif (ident(chars) === 'none') {\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\ttype: Tok.Alpha,\n\t\t\t\t\t\tvalue: { type: Tok.None, value: undefined }\n\t\t\t\t\t});\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (/\\d/.test(ch)) {\n\t\t\t_i--;\n\t\t\ttokens.push(num(chars));\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (IdentStartCodePoint.test(ch)) {\n\t\t\t_i--;\n\t\t\ttokens.push(identlike(chars));\n\t\t\tcontinue;\n\t\t}\n\n\t\t/*\n\t\t\tTreat everything not already handled as an error.\n\t\t */\n\t\treturn undefined;\n\t}\n\n\treturn tokens;\n}\n\nexport function parseColorSyntax(tokens) {\n\ttokens._i = 0;\n\tlet token = tokens[tokens._i++];\n\tif (!token || token.type !== Tok.Function || token.value !== 'color') {\n\t\treturn undefined;\n\t}\n\ttoken = tokens[tokens._i++];\n\tif (token.type !== Tok.Ident) {\n\t\treturn undefined;\n\t}\n\tconst mode = colorProfiles[token.value];\n\tif (!mode) {\n\t\treturn undefined;\n\t}\n\tconst res = { mode };\n\tconst coords = consumeCoords(tokens, false);\n\tif (!coords) {\n\t\treturn undefined;\n\t}\n\tconst channels = getMode(mode).channels;\n\tfor (let ii = 0, c, ch; ii < channels.length; ii++) {\n\t\tc = coords[ii];\n\t\tch = channels[ii];\n\t\tif (c.type !== Tok.None) {\n\t\t\tres[ch] = c.type === Tok.Number ? c.value : c.value / 100;\n\t\t\tif (ch === 'alpha') {\n\t\t\t\tres[ch] = Math.max(0, Math.min(1, res[ch]));\n\t\t\t}\n\t\t}\n\t}\n\treturn res;\n}\n\nfunction consumeCoords(tokens, includeHue) {\n\tconst coords = [];\n\tlet token;\n\twhile (tokens._i < tokens.length) {\n\t\ttoken = tokens[tokens._i++];\n\t\tif (\n\t\t\ttoken.type === Tok.None ||\n\t\t\ttoken.type === Tok.Number ||\n\t\t\ttoken.type === Tok.Alpha ||\n\t\t\ttoken.type === Tok.Percentage ||\n\t\t\t(includeHue && token.type === Tok.Hue)\n\t\t) {\n\t\t\tcoords.push(token);\n\t\t\tcontinue;\n\t\t}\n\t\tif (token.type === Tok.ParenClose) {\n\t\t\tif (tokens._i < tokens.length) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tif (coords.length < 3 || coords.length > 4) {\n\t\treturn undefined;\n\t}\n\n\tif (coords.length === 4) {\n\t\tif (coords[3].type !== Tok.Alpha) {\n\t\t\treturn undefined;\n\t\t}\n\t\tcoords[3] = coords[3].value;\n\t}\n\tif (coords.length === 3) {\n\t\tcoords.push({ type: Tok.None, value: undefined });\n\t}\n\n\treturn coords.every(c => c.type !== Tok.Alpha) ? coords : undefined;\n}\n\nexport function parseModernSyntax(tokens, includeHue) {\n\ttokens._i = 0;\n\tlet token = tokens[tokens._i++];\n\tif (!token || token.type !== Tok.Function) {\n\t\treturn undefined;\n\t}\n\tlet coords = consumeCoords(tokens, includeHue);\n\tif (!coords) {\n\t\treturn undefined;\n\t}\n\tcoords.unshift(token.value);\n\treturn coords;\n}\n\nconst parse = color => {\n\tif (typeof color !== 'string') {\n\t\treturn undefined;\n\t}\n\tconst tokens = tokenize(color);\n\tconst parsed = tokens ? parseModernSyntax(tokens, true) : undefined;\n\tlet result = undefined;\n\tlet i = 0;\n\tlet len = parsers.length;\n\twhile (i < len) {\n\t\tif ((result = parsers[i++](color, parsed)) !== undefined) {\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn tokens ? parseColorSyntax(tokens) : undefined;\n};\n\nexport default parse;\n","import { lerp } from './lerp.js';\nimport { interpolatorPiecewise } from './piecewise.js';\n\nexport const interpolatorLinear = interpolatorPiecewise(lerp);\n","const get_classes = arr => {\n\tlet classes = [];\n\tfor (let i = 0; i < arr.length - 1; i++) {\n\t\tlet a = arr[i];\n\t\tlet b = arr[i + 1];\n\t\tif (a === undefined && b === undefined) {\n\t\t\tclasses.push(undefined);\n\t\t} else if (a !== undefined && b !== undefined) {\n\t\t\tclasses.push([a, b]);\n\t\t} else {\n\t\t\tclasses.push(a !== undefined ? [a, a] : [b, b]);\n\t\t}\n\t}\n\treturn classes;\n};\n\nconst interpolatorPiecewise = interpolator => arr => {\n\tlet classes = get_classes(arr);\n\treturn t => {\n\t\tlet cls = t * classes.length;\n\t\tlet idx = t >= 1 ? classes.length - 1 : Math.max(Math.floor(cls), 0);\n\t\tlet pair = classes[idx];\n\t\treturn pair === undefined\n\t\t\t? undefined\n\t\t\t: interpolator(pair[0], pair[1], cls - idx);\n\t};\n};\n\nexport { interpolatorPiecewise };\n","const lerp = (a, b, t) => a + t * (b - a);\nconst unlerp = (a, b, v) => (v - a) / (b - a);\n\nconst blerp = (a00, a01, a10, a11, tx, ty) => {\n\treturn lerp(lerp(a00, a01, tx), lerp(a10, a11, tx), ty);\n};\n\nconst trilerp = (\n\ta000,\n\ta010,\n\ta100,\n\ta110,\n\ta001,\n\ta011,\n\ta101,\n\ta111,\n\ttx,\n\tty,\n\ttz\n) => {\n\treturn lerp(\n\t\tblerp(a000, a010, a100, a110, tx, ty),\n\t\tblerp(a001, a011, a101, a111, tx, ty),\n\t\ttz\n\t);\n};\n\nexport { lerp, blerp, trilerp, unlerp };\n","const fixupAlpha = arr => {\n\tlet some_defined = false;\n\tlet res = arr.map(v => {\n\t\tif (v !== undefined) {\n\t\t\tsome_defined = true;\n\t\t\treturn v;\n\t\t}\n\t\treturn 1;\n\t});\n\treturn some_defined ? res : arr;\n};\n\nexport { fixupAlpha };\n","import parseNamed from './parseNamed.js';\nimport parseHex from './parseHex.js';\nimport parseRgbLegacy from './parseRgbLegacy.js';\nimport parseRgb from './parseRgb.js';\nimport parseTransparent from './parseTransparent.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\n/*\n\tsRGB color space\n */\n\nconst definition = {\n\tmode: 'rgb',\n\tchannels: ['r', 'g', 'b', 'alpha'],\n\tparse: [\n\t\tparseRgb,\n\t\tparseHex,\n\t\tparseRgbLegacy,\n\t\tparseNamed,\n\t\tparseTransparent,\n\t\t'srgb'\n\t],\n\tserialize: 'srgb',\n\tinterpolate: {\n\t\tr: interpolatorLinear,\n\t\tg: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\tgamut: true,\n\twhite: { r: 1, g: 1, b: 1 },\n\tblack: { r: 0, g: 0, b: 0 }\n};\n\nexport default definition;\n","import { Tok } from '../parse.js';\n\nfunction parseRgb(color, parsed) {\n\tif (!parsed || (parsed[0] !== 'rgb' && parsed[0] !== 'rgba')) {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'rgb' };\n\tconst [, r, g, b, alpha] = parsed;\n\tif (r.type === Tok.Hue || g.type === Tok.Hue || b.type === Tok.Hue) {\n\t\treturn undefined;\n\t}\n\tif (r.type !== Tok.None) {\n\t\tres.r = r.type === Tok.Number ? r.value / 255 : r.value / 100;\n\t}\n\tif (g.type !== Tok.None) {\n\t\tres.g = g.type === Tok.Number ? g.value / 255 : g.value / 100;\n\t}\n\tif (b.type !== Tok.None) {\n\t\tres.b = b.type === Tok.Number ? b.value / 255 : b.value / 100;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseRgb;\n","import parseNumber from './parseNumber.js';\nimport named from '../colors/named.js';\n\n// Also supports the `transparent` color as defined in:\n// https://drafts.csswg.org/css-color/#transparent-black\nconst parseNamed = color => {\n\treturn parseNumber(named[color.toLowerCase()], 6);\n};\n\nexport default parseNamed;\n","const parseTransparent = c =>\n\tc === 'transparent'\n\t\t? { mode: 'rgb', r: 0, g: 0, b: 0, alpha: 0 }\n\t\t: undefined;\n\nexport default parseTransparent;\n","/*\n\tConvert A98 RGB values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://www.adobe.com/digitalimag/pdfs/AdobeRGB1998.pdf\n*/\n\nconst linearize = (v = 0) => Math.pow(Math.abs(v), 563 / 256) * Math.sign(v);\n\nconst convertA98ToXyz65 = a98 => {\n\tlet r = linearize(a98.r);\n\tlet g = linearize(a98.g);\n\tlet b = linearize(a98.b);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.5766690429101305 * r +\n\t\t\t0.1855582379065463 * g +\n\t\t\t0.1882286462349947 * b,\n\t\ty:\n\t\t\t0.297344975250536 * r +\n\t\t\t0.6273635662554661 * g +\n\t\t\t0.0752914584939979 * b,\n\t\tz:\n\t\t\t0.0270313613864123 * r +\n\t\t\t0.0706888525358272 * g +\n\t\t\t0.9913375368376386 * b\n\t};\n\tif (a98.alpha !== undefined) {\n\t\tres.alpha = a98.alpha;\n\t}\n\treturn res;\n};\n\nexport default convertA98ToXyz65;\n","/*\n\tConvert CIE XYZ D65 values to A98 RGB\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nconst gamma = v => Math.pow(Math.abs(v), 256 / 563) * Math.sign(v);\n\nconst convertXyz65ToA98 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'a98',\n\t\tr: gamma(\n\t\t\tx * 2.0415879038107465 -\n\t\t\t\ty * 0.5650069742788597 -\n\t\t\t\t0.3447313507783297 * z\n\t\t),\n\t\tg: gamma(\n\t\t\tx * -0.9692436362808798 +\n\t\t\t\ty * 1.8759675015077206 +\n\t\t\t\t0.0415550574071756 * z\n\t\t),\n\t\tb: gamma(\n\t\t\tx * 0.0134442806320312 -\n\t\t\t\ty * 0.1183623922310184 +\n\t\t\t\t1.0151749943912058 * z\n\t\t)\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToA98;\n","const fn = (c = 0) => {\n\tconst abs = Math.abs(c);\n\tif (abs <= 0.04045) {\n\t\treturn c / 12.92;\n\t}\n\treturn (Math.sign(c) || 1) * Math.pow((abs + 0.055) / 1.055, 2.4);\n};\n\nconst convertRgbToLrgb = ({ r, g, b, alpha }) => {\n\tlet res = {\n\t\tmode: 'lrgb',\n\t\tr: fn(r),\n\t\tg: fn(g),\n\t\tb: fn(b)\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertRgbToLrgb;\n","/*\n\tConvert sRGB values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://observablehq.com/@danburzo/color-matrix-calculator\n*/\n\nimport convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\n\nconst convertRgbToXyz65 = rgb => {\n\tlet { r, g, b, alpha } = convertRgbToLrgb(rgb);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.4123907992659593 * r +\n\t\t\t0.357584339383878 * g +\n\t\t\t0.1804807884018343 * b,\n\t\ty:\n\t\t\t0.2126390058715102 * r +\n\t\t\t0.715168678767756 * g +\n\t\t\t0.0721923153607337 * b,\n\t\tz:\n\t\t\t0.0193308187155918 * r +\n\t\t\t0.119194779794626 * g +\n\t\t\t0.9505321522496607 * b\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToXyz65;\n","const fn = (c = 0) => {\n\tconst abs = Math.abs(c);\n\tif (abs > 0.0031308) {\n\t\treturn (Math.sign(c) || 1) * (1.055 * Math.pow(abs, 1 / 2.4) - 0.055);\n\t}\n\treturn c * 12.92;\n};\n\nconst convertLrgbToRgb = ({ r, g, b, alpha }, mode = 'rgb') => {\n\tlet res = {\n\t\tmode,\n\t\tr: fn(r),\n\t\tg: fn(g),\n\t\tb: fn(b)\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLrgbToRgb;\n","/*\n\tCIE XYZ D65 values to sRGB.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://observablehq.com/@danburzo/color-matrix-calculator\n*/\n\nimport convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\n\nconst convertXyz65ToRgb = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = convertLrgbToRgb({\n\t\tr:\n\t\t\tx * 3.2409699419045226 -\n\t\t\ty * 1.5373831775700939 -\n\t\t\t0.4986107602930034 * z,\n\t\tg:\n\t\t\tx * -0.9692436362808796 +\n\t\t\ty * 1.8759675015077204 +\n\t\t\t0.0415550574071756 * z,\n\t\tb:\n\t\t\tx * 0.0556300796969936 -\n\t\t\ty * 0.2039769588889765 +\n\t\t\t1.0569715142428784 * z\n\t});\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToRgb;\n","import rgb from '../rgb/definition.js';\n\nimport convertA98ToXyz65 from './convertA98ToXyz65.js';\nimport convertXyz65ToA98 from './convertXyz65ToA98.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'a98',\n\tparse: ['a98-rgb'],\n\tserialize: 'a98-rgb',\n\n\tfromMode: {\n\t\trgb: color => convertXyz65ToA98(convertRgbToXyz65(color)),\n\t\txyz65: convertXyz65ToA98\n\t},\n\n\ttoMode: {\n\t\trgb: color => convertXyz65ToRgb(convertA98ToXyz65(color)),\n\t\txyz65: convertA98ToXyz65\n\t}\n};\n\nexport default definition;\n","const normalizeHue = hue => ((hue = hue % 360) < 0 ? hue + 360 : hue);\n\nexport default normalizeHue;\n","import normalizeHue from '../util/normalizeHue.js';\n\nconst hue = (hues, fn) => {\n\treturn hues\n\t\t.map((hue, idx, arr) => {\n\t\t\tif (hue === undefined) {\n\t\t\t\treturn hue;\n\t\t\t}\n\t\t\tlet normalized = normalizeHue(hue);\n\t\t\tif (idx === 0 || hues[idx - 1] === undefined) {\n\t\t\t\treturn normalized;\n\t\t\t}\n\t\t\treturn fn(normalized - normalizeHue(arr[idx - 1]));\n\t\t})\n\t\t.reduce((acc, curr) => {\n\t\t\tif (\n\t\t\t\t!acc.length ||\n\t\t\t\tcurr === undefined ||\n\t\t\t\tacc[acc.length - 1] === undefined\n\t\t\t) {\n\t\t\t\tacc.push(curr);\n\t\t\t\treturn acc;\n\t\t\t}\n\t\t\tacc.push(curr + acc[acc.length - 1]);\n\t\t\treturn acc;\n\t\t}, []);\n};\n\nconst fixupHueShorter = arr =>\n\thue(arr, d => (Math.abs(d) <= 180 ? d : d - 360 * Math.sign(d)));\nconst fixupHueLonger = arr =>\n\thue(arr, d => (Math.abs(d) >= 180 || d === 0 ? d : d - 360 * Math.sign(d)));\nconst fixupHueIncreasing = arr => hue(arr, d => (d >= 0 ? d : d + 360));\nconst fixupHueDecreasing = arr => hue(arr, d => (d <= 0 ? d : d - 360));\n\nexport {\n\tfixupHueShorter,\n\tfixupHueLonger,\n\tfixupHueIncreasing,\n\tfixupHueDecreasing\n};\n","export const M = [-0.14861, 1.78277, -0.29227, -0.90649, 1.97294, 0];\n\nexport const degToRad = Math.PI / 180;\nexport const radToDeg = 180 / Math.PI;\n","/*\n\tConvert a RGB color to the Cubehelix HSL color space.\n\n\tThis computation is not present in Green's paper:\n\thttps://arxiv.org/pdf/1108.5083.pdf\n\n\t...but can be derived from the inverse, HSL to RGB conversion.\n\n\tIt matches the math in Mike Bostock's D3 implementation:\n\n\thttps://github.com/d3/d3-color/blob/master/src/cubehelix.js\n */\n\nimport { radToDeg, M } from './constants.js';\n\nlet DE = M[3] * M[4];\nlet BE = M[1] * M[4];\nlet BCAD = M[1] * M[2] - M[0] * M[3];\n\nconst convertRgbToCubehelix = ({ r, g, b, alpha }) => {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet l = (BCAD * b + r * DE - g * BE) / (BCAD + DE - BE);\n\tlet x = b - l;\n\tlet y = (M[4] * (g - l) - M[2] * x) / M[3];\n\n\tlet res = {\n\t\tmode: 'cubehelix',\n\t\tl: l,\n\t\ts:\n\t\t\tl === 0 || l === 1\n\t\t\t\t? undefined\n\t\t\t\t: Math.sqrt(x * x + y * y) / (M[4] * l * (1 - l))\n\t};\n\n\tif (res.s) res.h = Math.atan2(y, x) * radToDeg - 120;\n\tif (alpha !== undefined) res.alpha = alpha;\n\n\treturn res;\n};\n\nexport default convertRgbToCubehelix;\n","import { getMode } from './modes.js';\nimport converter from './converter.js';\nimport normalizeHue from './util/normalizeHue.js';\n\nconst differenceHueSaturation = (std, smp) => {\n\tif (std.h === undefined || smp.h === undefined || !std.s || !smp.s) {\n\t\treturn 0;\n\t}\n\tlet std_h = normalizeHue(std.h);\n\tlet smp_h = normalizeHue(smp.h);\n\tlet dH = Math.sin((((smp_h - std_h + 360) / 2) * Math.PI) / 180);\n\treturn 2 * Math.sqrt(std.s * smp.s) * dH;\n};\n\nconst differenceHueNaive = (std, smp) => {\n\tif (std.h === undefined || smp.h === undefined) {\n\t\treturn 0;\n\t}\n\tlet std_h = normalizeHue(std.h);\n\tlet smp_h = normalizeHue(smp.h);\n\tif (Math.abs(smp_h - std_h) > 180) {\n\t\t// todo should this be normalized once again?\n\t\treturn std_h - (smp_h - 360 * Math.sign(smp_h - std_h));\n\t}\n\treturn smp_h - std_h;\n};\n\nconst differenceHueChroma = (std, smp) => {\n\tif (std.h === undefined || smp.h === undefined || !std.c || !smp.c) {\n\t\treturn 0;\n\t}\n\tlet std_h = normalizeHue(std.h);\n\tlet smp_h = normalizeHue(smp.h);\n\tlet dH = Math.sin((((smp_h - std_h + 360) / 2) * Math.PI) / 180);\n\treturn 2 * Math.sqrt(std.c * smp.c) * dH;\n};\n\nconst differenceEuclidean = (mode = 'rgb', weights = [1, 1, 1, 0]) => {\n\tlet def = getMode(mode);\n\tlet channels = def.channels;\n\tlet diffs = def.difference;\n\tlet conv = converter(mode);\n\treturn (std, smp) => {\n\t\tlet ConvStd = conv(std);\n\t\tlet ConvSmp = conv(smp);\n\t\treturn Math.sqrt(\n\t\t\tchannels.reduce((sum, k, idx) => {\n\t\t\t\tlet delta = diffs[k]\n\t\t\t\t\t? diffs[k](ConvStd, ConvSmp)\n\t\t\t\t\t: ConvStd[k] - ConvSmp[k];\n\t\t\t\treturn (\n\t\t\t\t\tsum +\n\t\t\t\t\t(weights[idx] || 0) * Math.pow(isNaN(delta) ? 0 : delta, 2)\n\t\t\t\t);\n\t\t\t}, 0)\n\t\t);\n\t};\n};\n\nconst differenceCie76 = () => differenceEuclidean('lab65');\n\nconst differenceCie94 = (kL = 1, K1 = 0.045, K2 = 0.015) => {\n\tlet lab = converter('lab65');\n\n\treturn (std, smp) => {\n\t\tlet LabStd = lab(std);\n\t\tlet LabSmp = lab(smp);\n\n\t\t// Extract Lab values, and compute Chroma\n\t\tlet lStd = LabStd.l;\n\t\tlet aStd = LabStd.a;\n\t\tlet bStd = LabStd.b;\n\t\tlet cStd = Math.sqrt(aStd * aStd + bStd * bStd);\n\n\t\tlet lSmp = LabSmp.l;\n\t\tlet aSmp = LabSmp.a;\n\t\tlet bSmp = LabSmp.b;\n\t\tlet cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp);\n\n\t\tlet dL2 = Math.pow(lStd - lSmp, 2);\n\t\tlet dC2 = Math.pow(cStd - cSmp, 2);\n\t\tlet dH2 = Math.pow(aStd - aSmp, 2) + Math.pow(bStd - bSmp, 2) - dC2;\n\n\t\treturn Math.sqrt(\n\t\t\tdL2 / Math.pow(kL, 2) +\n\t\t\t\tdC2 / Math.pow(1 + K1 * cStd, 2) +\n\t\t\t\tdH2 / Math.pow(1 + K2 * cStd, 2)\n\t\t);\n\t};\n};\n\n/*\n\tCIEDE2000 color difference, original Matlab implementation by Gaurav Sharma\n\tBased on \"The CIEDE2000 Color-Difference Formula: Implementation Notes, Supplementary Test Data, and Mathematical Observations\" \n\tby Gaurav Sharma, Wencheng Wu, Edul N. Dalal in Color Research and Application, vol. 30. No. 1, pp. 21-30, February 2005.\n\thttp://www2.ece.rochester.edu/~gsharma/ciede2000/\n */\n\nconst differenceCiede2000 = (Kl = 1, Kc = 1, Kh = 1) => {\n\tlet lab = converter('lab65');\n\treturn (std, smp) => {\n\t\tlet LabStd = lab(std);\n\t\tlet LabSmp = lab(smp);\n\n\t\tlet lStd = LabStd.l;\n\t\tlet aStd = LabStd.a;\n\t\tlet bStd = LabStd.b;\n\t\tlet cStd = Math.sqrt(aStd * aStd + bStd * bStd);\n\n\t\tlet lSmp = LabSmp.l;\n\t\tlet aSmp = LabSmp.a;\n\t\tlet bSmp = LabSmp.b;\n\t\tlet cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp);\n\n\t\tlet cAvg = (cStd + cSmp) / 2;\n\n\t\tlet G =\n\t\t\t0.5 *\n\t\t\t(1 -\n\t\t\t\tMath.sqrt(\n\t\t\t\t\tMath.pow(cAvg, 7) / (Math.pow(cAvg, 7) + Math.pow(25, 7))\n\t\t\t\t));\n\n\t\tlet apStd = aStd * (1 + G);\n\t\tlet apSmp = aSmp * (1 + G);\n\n\t\tlet cpStd = Math.sqrt(apStd * apStd + bStd * bStd);\n\t\tlet cpSmp = Math.sqrt(apSmp * apSmp + bSmp * bSmp);\n\n\t\tlet hpStd =\n\t\t\tMath.abs(apStd) + Math.abs(bStd) === 0\n\t\t\t\t? 0\n\t\t\t\t: Math.atan2(bStd, apStd);\n\t\thpStd += (hpStd < 0) * 2 * Math.PI;\n\n\t\tlet hpSmp =\n\t\t\tMath.abs(apSmp) + Math.abs(bSmp) === 0\n\t\t\t\t? 0\n\t\t\t\t: Math.atan2(bSmp, apSmp);\n\t\thpSmp += (hpSmp < 0) * 2 * Math.PI;\n\n\t\tlet dL = lSmp - lStd;\n\t\tlet dC = cpSmp - cpStd;\n\n\t\tlet dhp = cpStd * cpSmp === 0 ? 0 : hpSmp - hpStd;\n\t\tdhp -= (dhp > Math.PI) * 2 * Math.PI;\n\t\tdhp += (dhp < -Math.PI) * 2 * Math.PI;\n\n\t\tlet dH = 2 * Math.sqrt(cpStd * cpSmp) * Math.sin(dhp / 2);\n\n\t\tlet Lp = (lStd + lSmp) / 2;\n\t\tlet Cp = (cpStd + cpSmp) / 2;\n\n\t\tlet hp;\n\t\tif (cpStd * cpSmp === 0) {\n\t\t\thp = hpStd + hpSmp;\n\t\t} else {\n\t\t\thp = (hpStd + hpSmp) / 2;\n\t\t\thp -= (Math.abs(hpStd - hpSmp) > Math.PI) * Math.PI;\n\t\t\thp += (hp < 0) * 2 * Math.PI;\n\t\t}\n\n\t\tlet Lpm50 = Math.pow(Lp - 50, 2);\n\t\tlet T =\n\t\t\t1 -\n\t\t\t0.17 * Math.cos(hp - Math.PI / 6) +\n\t\t\t0.24 * Math.cos(2 * hp) +\n\t\t\t0.32 * Math.cos(3 * hp + Math.PI / 30) -\n\t\t\t0.2 * Math.cos(4 * hp - (63 * Math.PI) / 180);\n\n\t\tlet Sl = 1 + (0.015 * Lpm50) / Math.sqrt(20 + Lpm50);\n\t\tlet Sc = 1 + 0.045 * Cp;\n\t\tlet Sh = 1 + 0.015 * Cp * T;\n\n\t\tlet deltaTheta =\n\t\t\t((30 * Math.PI) / 180) *\n\t\t\tMath.exp(-1 * Math.pow(((180 / Math.PI) * hp - 275) / 25, 2));\n\t\tlet Rc =\n\t\t\t2 *\n\t\t\tMath.sqrt(Math.pow(Cp, 7) / (Math.pow(Cp, 7) + Math.pow(25, 7)));\n\n\t\tlet Rt = -1 * Math.sin(2 * deltaTheta) * Rc;\n\n\t\treturn Math.sqrt(\n\t\t\tMath.pow(dL / (Kl * Sl), 2) +\n\t\t\t\tMath.pow(dC / (Kc * Sc), 2) +\n\t\t\t\tMath.pow(dH / (Kh * Sh), 2) +\n\t\t\t\t(((Rt * dC) / (Kc * Sc)) * dH) / (Kh * Sh)\n\t\t);\n\t};\n};\n\n/*\n\tCMC (l:c) difference formula\n\n\tReferences:\n\t\thttps://en.wikipedia.org/wiki/Color_difference#CMC_l:c_(1984)\n\t\thttp://www.brucelindbloom.com/index.html?Eqn_DeltaE_CMC.html\n */\nconst differenceCmc = (l = 1, c = 1) => {\n\tlet lab = converter('lab65');\n\n\t/*\n\t\tComparte two colors:\n\t\tstd - standard (first) color\n\t\tsmp - sample (second) color\n\t */\n\treturn (std, smp) => {\n\t\t// convert standard color to Lab\n\t\tlet LabStd = lab(std);\n\t\tlet lStd = LabStd.l;\n\t\tlet aStd = LabStd.a;\n\t\tlet bStd = LabStd.b;\n\n\t\t// Obtain hue/chroma\n\t\tlet cStd = Math.sqrt(aStd * aStd + bStd * bStd);\n\t\tlet hStd = Math.atan2(bStd, aStd);\n\t\thStd = hStd + 2 * Math.PI * (hStd < 0);\n\n\t\t// convert sample color to Lab, obtain LCh\n\t\tlet LabSmp = lab(smp);\n\t\tlet lSmp = LabSmp.l;\n\t\tlet aSmp = LabSmp.a;\n\t\tlet bSmp = LabSmp.b;\n\n\t\t// Obtain chroma\n\t\tlet cSmp = Math.sqrt(aSmp * aSmp + bSmp * bSmp);\n\n\t\t// lightness delta squared\n\t\tlet dL2 = Math.pow(lStd - lSmp, 2);\n\n\t\t// chroma delta squared\n\t\tlet dC2 = Math.pow(cStd - cSmp, 2);\n\n\t\t// hue delta squared\n\t\tlet dH2 = Math.pow(aStd - aSmp, 2) + Math.pow(bStd - bSmp, 2) - dC2;\n\n\t\tlet F = Math.sqrt(Math.pow(cStd, 4) / (Math.pow(cStd, 4) + 1900));\n\t\tlet T =\n\t\t\thStd >= (164 / 180) * Math.PI && hStd <= (345 / 180) * Math.PI\n\t\t\t\t? 0.56 + Math.abs(0.2 * Math.cos(hStd + (168 / 180) * Math.PI))\n\t\t\t\t: 0.36 + Math.abs(0.4 * Math.cos(hStd + (35 / 180) * Math.PI));\n\n\t\tlet Sl = lStd < 16 ? 0.511 : (0.040975 * lStd) / (1 + 0.01765 * lStd);\n\t\tlet Sc = (0.0638 * cStd) / (1 + 0.0131 * cStd) + 0.638;\n\t\tlet Sh = Sc * (F * T + 1 - F);\n\n\t\treturn Math.sqrt(\n\t\t\tdL2 / Math.pow(l * Sl, 2) +\n\t\t\t\tdC2 / Math.pow(c * Sc, 2) +\n\t\t\t\tdH2 / Math.pow(Sh, 2)\n\t\t);\n\t};\n};\n\n/*\n\n\tHyAB color difference formula, introduced in:\n\n\t\tAbasi S, Amani Tehran M, Fairchild MD. \n\t\t\"Distance metrics for very large color differences.\"\n\t\tColor Res Appl. 2019; 1–16. \n\t\thttps://doi.org/10.1002/col.22451\n\n\tPDF available at:\n\t\n\t\thttp://markfairchild.org/PDFs/PAP40.pdf\n */\nconst differenceHyab = () => {\n\tlet lab = converter('lab65');\n\treturn (std, smp) => {\n\t\tlet LabStd = lab(std);\n\t\tlet LabSmp = lab(smp);\n\t\tlet dL = LabStd.l - LabSmp.l;\n\t\tlet dA = LabStd.a - LabSmp.a;\n\t\tlet dB = LabStd.b - LabSmp.b;\n\t\treturn Math.abs(dL) + Math.sqrt(dA * dA + dB * dB);\n\t};\n};\n\n/*\n\t\"Measuring perceived color difference using YIQ NTSC\n\ttransmission color space in mobile applications\"\n\t\t\n\t\tby Yuriy Kotsarenko, Fernando Ramos in:\n\t\tProgramación Matemática y Software (2010) \n\n\tAvailable at:\n\t\t\n\t\thttp://www.progmat.uaem.mx:8080/artVol2Num2/Articulo3Vol2Num2.pdf\n */\nconst differenceKotsarenkoRamos = () =>\n\tdifferenceEuclidean('yiq', [0.5053, 0.299, 0.1957]);\n\n/*\n\tΔE_ITP, as defined in Rec. ITU-R BT.2124:\n\n\thttps://www.itu.int/rec/R-REC-BT.2124/en\n*/\nconst differenceItp = () =>\n\tdifferenceEuclidean('itp', [518400, 129600, 518400]);\n\nexport {\n\tdifferenceHueChroma,\n\tdifferenceHueSaturation,\n\tdifferenceHueNaive,\n\tdifferenceEuclidean,\n\tdifferenceCie76,\n\tdifferenceCie94,\n\tdifferenceCiede2000,\n\tdifferenceCmc,\n\tdifferenceHyab,\n\tdifferenceKotsarenkoRamos,\n\tdifferenceItp\n};\n","import converter from './converter.js';\nimport { getMode } from './modes.js';\n\nconst averageAngle = val => {\n\t// See: https://en.wikipedia.org/wiki/Mean_of_circular_quantities\n\tlet sum = val.reduce(\n\t\t(sum, val) => {\n\t\t\tif (val !== undefined) {\n\t\t\t\tlet rad = (val * Math.PI) / 180;\n\t\t\t\tsum.sin += Math.sin(rad);\n\t\t\t\tsum.cos += Math.cos(rad);\n\t\t\t}\n\t\t\treturn sum;\n\t\t},\n\t\t{ sin: 0, cos: 0 }\n\t);\n\tlet angle = (Math.atan2(sum.sin, sum.cos) * 180) / Math.PI;\n\treturn angle < 0 ? 360 + angle : angle;\n};\n\nconst averageNumber = val => {\n\tlet a = val.filter(v => v !== undefined);\n\treturn a.length ? a.reduce((sum, v) => sum + v, 0) / a.length : undefined;\n};\n\nconst isfn = o => typeof o === 'function';\n\nfunction average(colors, mode = 'rgb', overrides) {\n\tlet def = getMode(mode);\n\tlet cc = colors.map(converter(mode));\n\treturn def.channels.reduce(\n\t\t(res, ch) => {\n\t\t\tlet arr = cc.map(c => c[ch]).filter(val => val !== undefined);\n\t\t\tif (arr.length) {\n\t\t\t\tlet fn;\n\t\t\t\tif (isfn(overrides)) {\n\t\t\t\t\tfn = overrides;\n\t\t\t\t} else if (overrides && isfn(overrides[ch])) {\n\t\t\t\t\tfn = overrides[ch];\n\t\t\t\t} else if (def.average && isfn(def.average[ch])) {\n\t\t\t\t\tfn = def.average[ch];\n\t\t\t\t} else {\n\t\t\t\t\tfn = averageNumber;\n\t\t\t\t}\n\t\t\t\tres[ch] = fn(arr, ch);\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t\t{ mode }\n\t);\n}\n\nexport { average, averageAngle, averageNumber };\n","/* \n\tDave Green's Cubehelix\n\t----------------------\n\n\tGreen, D. A., 2011, \"A colour scheme for the display of astronomical intensity images\", \n\tBulletin of the Astronomical Society of India, 39, 289. (2011BASI...39..289G at ADS.) \n\n\thttps://www.mrao.cam.ac.uk/%7Edag/CUBEHELIX/\n\thttps://arxiv.org/pdf/1108.5083.pdf\n\n\tAlthough Cubehelix was defined to be a method to obtain a colour scheme,\n\tit actually contains a definition of a colour space, as identified by \n\tMike Bostock and implemented in D3.js.\n\n\tGreen's paper introduces the following terminology:\n\n\t* \ta `lightness` dimension in the interval [0, 1] \n\t\ton which we interpolate to obtain the colour scheme\n\t*\ta `start` colour that is analogous to a Hue in HSL space\n\t*\ta number of `rotations` around the Hue cylinder.\n\t*\ta `hue` parameter which should more appropriately be called `saturation`\n\t\n\tAs such, the original definition of the Cubehelix scheme is actually an\n\tinterpolation between two colors in the Cubehelix space:\n\n\tH: start \t\t\t\tH: start + 360 * rotations\n\tS: hue \t\t\t->\t\tS: hue\n\tL: 0\t\t\t\t\tL: 1\n\n\tWe can therefore extend the interpolation to any two colors in this space,\n\twith a variable Saturation and a Lightness interval other than the fixed 0 -> 1.\n*/\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport convertRgbToCubehelix from './convertRgbToCubehelix.js';\nimport convertCubehelixToRgb from './convertCubehelixToRgb.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'cubehelix',\n\tchannels: ['h', 's', 'l', 'alpha'],\n\tparse: ['--cubehelix'],\n\tserialize: '--cubehelix',\n\n\tranges: {\n\t\th: [0, 360],\n\t\ts: [0, 4.614],\n\t\tl: [0, 1]\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToCubehelix\n\t},\n\n\ttoMode: {\n\t\trgb: convertCubehelixToRgb\n\t},\n\n\tinterpolate: {\n\t\th: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupHueShorter\n\t\t},\n\t\ts: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupAlpha\n\t\t}\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import { degToRad, M } from './constants.js';\n\nconst convertCubehelixToRgb = ({ h, s, l, alpha }) => {\n\tlet res = { mode: 'rgb' };\n\n\th = (h === undefined ? 0 : h + 120) * degToRad;\n\tif (l === undefined) l = 0;\n\n\tlet amp = s === undefined ? 0 : s * l * (1 - l);\n\n\tlet cosh = Math.cos(h);\n\tlet sinh = Math.sin(h);\n\n\tres.r = l + amp * (M[0] * cosh + M[1] * sinh);\n\tres.g = l + amp * (M[2] * cosh + M[3] * sinh);\n\tres.b = l + amp * (M[4] * cosh + M[5] * sinh);\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertCubehelixToRgb;\n","import normalizeHue from '../util/normalizeHue.js';\n\n/* \n\tReferences: \n\t\t* https://drafts.csswg.org/css-color/#lab-to-lch\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n*/\nconst convertLabToLch = ({ l, a, b, alpha }, mode = 'lch') => {\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet c = Math.sqrt(a * a + b * b);\n\tlet res = { mode, l, c };\n\tif (c) res.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLabToLch;\n","/* \n\tReferences: \n\t\t* https://drafts.csswg.org/css-color/#lch-to-lab\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n*/\nconst convertLchToLab = ({ l, c, h, alpha }, mode = 'lab') => {\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode,\n\t\tl,\n\t\ta: c ? c * Math.cos((h / 180) * Math.PI) : 0,\n\t\tb: c ? c * Math.sin((h / 180) * Math.PI) : 0\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLchToLab;\n","export const k = Math.pow(29, 3) / Math.pow(3, 3);\nexport const e = Math.pow(6, 3) / Math.pow(29, 3);\n","/*\n\tThe XYZ tristimulus values (white point)\n\tof standard illuminants for the CIE 1931 2° \n\tstandard observer.\n\n\tSee: https://en.wikipedia.org/wiki/Standard_illuminant\n */\n\nexport const D50 = {\n\tX: 0.3457 / 0.3585,\n\tY: 1,\n\tZ: (1 - 0.3457 - 0.3585) / 0.3585\n};\n\nexport const D65 = {\n\tX: 0.3127 / 0.329,\n\tY: 1,\n\tZ: (1 - 0.3127 - 0.329) / 0.329\n};\n\nexport const k = Math.pow(29, 3) / Math.pow(3, 3);\nexport const e = Math.pow(6, 3) / Math.pow(29, 3);\n","import { k, e } from '../xyz65/constants.js';\nimport { D65 } from '../constants.js';\n\nlet fn = v => (Math.pow(v, 3) > e ? Math.pow(v, 3) : (116 * v - 16) / k);\n\nconst convertLab65ToXyz65 = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\n\tlet fy = (l + 16) / 116;\n\tlet fx = a / 500 + fy;\n\tlet fz = fy - b / 200;\n\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx: fn(fx) * D65.X,\n\t\ty: fn(fy) * D65.Y,\n\t\tz: fn(fz) * D65.Z\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLab65ToXyz65;\n","import convertLab65ToXyz65 from './convertLab65ToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst convertLab65ToRgb = lab => convertXyz65ToRgb(convertLab65ToXyz65(lab));\n\nexport default convertLab65ToRgb;\n","import { k, e } from '../xyz65/constants.js';\nimport { D65 } from '../constants.js';\n\nconst f = value => (value > e ? Math.cbrt(value) : (k * value + 16) / 116);\n\nconst convertXyz65ToLab65 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet f0 = f(x / D65.X);\n\tlet f1 = f(y / D65.Y);\n\tlet f2 = f(z / D65.Z);\n\n\tlet res = {\n\t\tmode: 'lab65',\n\t\tl: 116 * f1 - 16,\n\t\ta: 500 * (f0 - f1),\n\t\tb: 200 * (f1 - f2)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz65ToLab65;\n","import convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToLab65 from './convertXyz65ToLab65.js';\n\nconst convertRgbToLab65 = rgb => {\n\tlet res = convertXyz65ToLab65(convertRgbToXyz65(rgb));\n\n\t// Fixes achromatic RGB colors having a _slight_ chroma due to floating-point errors\n\t// and approximated computations in sRGB <-> CIELab.\n\t// See: https://github.com/d3/d3-color/pull/46\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToLab65;\n","export const kE = 1;\nexport const kCH = 1;\nexport const θ = (26 / 180) * Math.PI;\nexport const cosθ = Math.cos(θ);\nexport const sinθ = Math.sin(θ);\nexport const factor = 100 / Math.log(139 / 100); // ~ 303.67\n","import { kCH, kE, sinθ, cosθ, θ, factor } from './constants.js';\n\n/*\n\tConvert DIN99o LCh to CIELab D65\n\t--------------------------------\n */\n\nconst convertDlchToLab65 = ({ l, c, h, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (c === undefined) c = 0;\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode: 'lab65',\n\t\tl: (Math.exp((l * kE) / factor) - 1) / 0.0039\n\t};\n\n\tlet G = (Math.exp(0.0435 * c * kCH * kE) - 1) / 0.075;\n\tlet e = G * Math.cos((h / 180) * Math.PI - θ);\n\tlet f = G * Math.sin((h / 180) * Math.PI - θ);\n\tres.a = e * cosθ - (f / 0.83) * sinθ;\n\tres.b = e * sinθ + (f / 0.83) * cosθ;\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertDlchToLab65;\n","import { kCH, kE, sinθ, cosθ, θ, factor } from './constants.js';\nimport normalizeHue from '../util/normalizeHue.js';\n\n/*\n\tConvert CIELab D65 to DIN99o LCh\n\t================================\n */\n\nconst convertLab65ToDlch = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet e = a * cosθ + b * sinθ;\n\tlet f = 0.83 * (b * cosθ - a * sinθ);\n\tlet G = Math.sqrt(e * e + f * f);\n\tlet res = {\n\t\tmode: 'dlch',\n\t\tl: (factor / kE) * Math.log(1 + 0.0039 * l),\n\t\tc: Math.log(1 + 0.075 * G) / (0.0435 * kCH * kE)\n\t};\n\n\tif (res.c) {\n\t\tres.h = normalizeHue(((Math.atan2(f, e) + θ) / Math.PI) * 180);\n\t}\n\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertLab65ToDlch;\n","import convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertLab65ToRgb from '../lab65/convertLab65ToRgb.js';\nimport convertRgbToLab65 from '../lab65/convertRgbToLab65.js';\nimport convertDlchToLab65 from '../dlch/convertDlchToLab65.js';\nimport convertLab65ToDlch from '../dlch/convertLab65ToDlch.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst convertDlabToLab65 = c => convertDlchToLab65(convertLabToLch(c, 'dlch'));\nconst convertLab65ToDlab = c => convertLchToLab(convertLab65ToDlch(c), 'dlab');\n\nconst definition = {\n\tmode: 'dlab',\n\n\tparse: ['--din99o-lab'],\n\tserialize: '--din99o-lab',\n\n\ttoMode: {\n\t\tlab65: convertDlabToLab65,\n\t\trgb: c => convertLab65ToRgb(convertDlabToLab65(c))\n\t},\n\n\tfromMode: {\n\t\tlab65: convertLab65ToDlab,\n\t\trgb: c => convertLab65ToDlab(convertRgbToLab65(c))\n\t},\n\n\tchannels: ['l', 'a', 'b', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\ta: [-40.09, 45.501],\n\t\tb: [-40.469, 44.344]\n\t},\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\ta: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupAlpha\n\t\t}\n\t}\n};\n\nexport default definition;\n","import convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertDlchToLab65 from './convertDlchToLab65.js';\nimport convertLab65ToDlch from './convertLab65ToDlch.js';\nimport convertLab65ToRgb from '../lab65/convertLab65ToRgb.js';\nimport convertRgbToLab65 from '../lab65/convertRgbToLab65.js';\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'dlch',\n\n\tparse: ['--din99o-lch'],\n\tserialize: '--din99o-lch',\n\n\ttoMode: {\n\t\tlab65: convertDlchToLab65,\n\t\tdlab: c => convertLchToLab(c, 'dlab'),\n\t\trgb: c => convertLab65ToRgb(convertDlchToLab65(c))\n\t},\n\n\tfromMode: {\n\t\tlab65: convertLab65ToDlch,\n\t\tdlab: c => convertLabToLch(c, 'dlch'),\n\t\trgb: c => convertLab65ToDlch(convertRgbToLab65(c))\n\t},\n\n\tchannels: ['l', 'c', 'h', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 51.484],\n\t\th: [0, 360]\n\t},\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\tc: interpolatorLinear,\n\t\th: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupHueShorter\n\t\t},\n\t\talpha: {\n\t\t\tuse: interpolatorLinear,\n\t\t\tfixup: fixupAlpha\n\t\t}\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import convertHsiToRgb from './convertHsiToRgb.js';\nimport convertRgbToHsi from './convertRgbToHsi.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hsi',\n\n\ttoMode: {\n\t\trgb: convertHsiToRgb\n\t},\n\n\tparse: ['--hsi'],\n\tserialize: '--hsi',\n\n\tfromMode: {\n\t\trgb: convertRgbToHsi\n\t},\n\n\tchannels: ['h', 's', 'i', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\ts: interpolatorLinear,\n\t\ti: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import normalizeHue from '../util/normalizeHue.js';\n\n// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB\n\nexport default function convertHsiToRgb({ h, s, i, alpha }) {\n\th = normalizeHue(h !== undefined ? h : 0);\n\tif (s === undefined) s = 0;\n\tif (i === undefined) i = 0;\n\tlet f = Math.abs(((h / 60) % 2) - 1);\n\tlet res;\n\tswitch (Math.floor(h / 60)) {\n\t\tcase 0:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tg: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tb: i * (1 - s)\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tg: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tb: i * (1 - s)\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tres = {\n\t\t\t\tr: i * (1 - s),\n\t\t\t\tg: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tb: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tres = {\n\t\t\t\tr: i * (1 - s),\n\t\t\t\tg: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tb: i * (1 + s * (3 / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1)),\n\t\t\t\tg: i * (1 - s),\n\t\t\t\tb: i * (1 + s * (3 / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tres = {\n\t\t\t\tr: i * (1 + s * (3 / (2 - f) - 1)),\n\t\t\t\tg: i * (1 - s),\n\t\t\t\tb: i * (1 + s * ((3 * (1 - f)) / (2 - f) - 1))\n\t\t\t};\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tres = { r: i * (1 - s), g: i * (1 - s), b: i * (1 - s) };\n\t}\n\n\tres.mode = 'rgb';\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n","// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Formal_derivation\n\nexport default function convertRgbToHsi({ r, g, b, alpha }) {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet M = Math.max(r, g, b),\n\t\tm = Math.min(r, g, b);\n\tlet res = {\n\t\tmode: 'hsi',\n\t\ts: r + g + b === 0 ? 0 : 1 - (3 * m) / (r + g + b),\n\t\ti: (r + g + b) / 3\n\t};\n\tif (M - m !== 0)\n\t\tres.h =\n\t\t\t(M === r\n\t\t\t\t? (g - b) / (M - m) + (g < b) * 6\n\t\t\t\t: M === g\n\t\t\t\t? (b - r) / (M - m) + 2\n\t\t\t\t: (r - g) / (M - m) + 4) * 60;\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n","import hueToDeg from '../util/hue.js';\nimport { hue, per, num_per, c } from '../util/regex.js';\n\n/*\n\thsl() regular expressions for legacy format\n\tReference: https://drafts.csswg.org/css-color/#the-hsl-notation\n */\nconst hsl_old = new RegExp(\n\t`^hsla?\\\\(\\\\s*${hue}${c}${per}${c}${per}\\\\s*(?:,\\\\s*${num_per}\\\\s*)?\\\\)$`\n);\n\nconst parseHslLegacy = color => {\n\tlet match = color.match(hsl_old);\n\tif (!match) return;\n\tlet res = { mode: 'hsl' };\n\n\tif (match[3] !== undefined) {\n\t\tres.h = +match[3];\n\t} else if (match[1] !== undefined && match[2] !== undefined) {\n\t\tres.h = hueToDeg(match[1], match[2]);\n\t}\n\n\tif (match[4] !== undefined) {\n\t\tres.s = Math.min(Math.max(0, match[4] / 100), 1);\n\t}\n\n\tif (match[5] !== undefined) {\n\t\tres.l = Math.min(Math.max(0, match[5] / 100), 1);\n\t}\n\n\tif (match[6] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, match[6] / 100));\n\t} else if (match[7] !== undefined) {\n\t\tres.alpha = Math.max(0, Math.min(1, +match[7]));\n\t}\n\treturn res;\n};\n\nexport default parseHslLegacy;\n","import convertHslToRgb from './convertHslToRgb.js';\nimport convertRgbToHsl from './convertRgbToHsl.js';\nimport parseHslLegacy from './parseHslLegacy.js';\nimport parseHsl from './parseHsl.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hsl',\n\n\ttoMode: {\n\t\trgb: convertHslToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToHsl\n\t},\n\n\tchannels: ['h', 's', 'l', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tparse: [parseHsl, parseHslLegacy],\n\tserialize: c =>\n\t\t`hsl(${c.h !== undefined ? c.h : 'none'} ${\n\t\t\tc.s !== undefined ? c.s * 100 + '%' : 'none'\n\t\t} ${c.l !== undefined ? c.l * 100 + '%' : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\ts: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import normalizeHue from '../util/normalizeHue.js';\n// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB\n\nexport default function convertHslToRgb({ h, s, l, alpha }) {\n\th = normalizeHue(h !== undefined ? h : 0);\n\tif (s === undefined) s = 0;\n\tif (l === undefined) l = 0;\n\tlet m1 = l + s * (l < 0.5 ? l : 1 - l);\n\tlet m2 = m1 - (m1 - l) * 2 * Math.abs(((h / 60) % 2) - 1);\n\tlet res;\n\tswitch (Math.floor(h / 60)) {\n\t\tcase 0:\n\t\t\tres = { r: m1, g: m2, b: 2 * l - m1 };\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tres = { r: m2, g: m1, b: 2 * l - m1 };\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tres = { r: 2 * l - m1, g: m1, b: m2 };\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tres = { r: 2 * l - m1, g: m2, b: m1 };\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tres = { r: m2, g: 2 * l - m1, b: m1 };\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tres = { r: m1, g: 2 * l - m1, b: m2 };\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tres = { r: 2 * l - m1, g: 2 * l - m1, b: 2 * l - m1 };\n\t}\n\tres.mode = 'rgb';\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n","// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Formal_derivation\n\nexport default function convertRgbToHsl({ r, g, b, alpha }) {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet M = Math.max(r, g, b),\n\t\tm = Math.min(r, g, b);\n\tlet res = {\n\t\tmode: 'hsl',\n\t\ts: M === m ? 0 : (M - m) / (1 - Math.abs(M + m - 1)),\n\t\tl: 0.5 * (M + m)\n\t};\n\tif (M - m !== 0)\n\t\tres.h =\n\t\t\t(M === r\n\t\t\t\t? (g - b) / (M - m) + (g < b) * 6\n\t\t\t\t: M === g\n\t\t\t\t? (b - r) / (M - m) + 2\n\t\t\t\t: (r - g) / (M - m) + 4) * 60;\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n","import { Tok } from '../parse.js';\n\nfunction parseHsl(color, parsed) {\n\tif (!parsed || (parsed[0] !== 'hsl' && parsed[0] !== 'hsla')) {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'hsl' };\n\tconst [, h, s, l, alpha] = parsed;\n\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\n\tif (s.type !== Tok.None) {\n\t\tif (s.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.s = s.value / 100;\n\t}\n\n\tif (l.type !== Tok.None) {\n\t\tif (l.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.l = l.value / 100;\n\t}\n\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseHsl;\n","const hueToDeg = (val, unit) => {\n\tswitch (unit) {\n\t\tcase 'deg':\n\t\t\treturn +val;\n\t\tcase 'rad':\n\t\t\treturn (val / Math.PI) * 180;\n\t\tcase 'grad':\n\t\t\treturn (val / 10) * 9;\n\t\tcase 'turn':\n\t\t\treturn val * 360;\n\t}\n};\n\nexport default hueToDeg;\n","import normalizeHue from '../util/normalizeHue.js';\n\n// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB\n\nexport default function convertHsvToRgb({ h, s, v, alpha }) {\n\th = normalizeHue(h !== undefined ? h : 0);\n\tif (s === undefined) s = 0;\n\tif (v === undefined) v = 0;\n\tlet f = Math.abs(((h / 60) % 2) - 1);\n\tlet res;\n\tswitch (Math.floor(h / 60)) {\n\t\tcase 0:\n\t\t\tres = { r: v, g: v * (1 - s * f), b: v * (1 - s) };\n\t\t\tbreak;\n\t\tcase 1:\n\t\t\tres = { r: v * (1 - s * f), g: v, b: v * (1 - s) };\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tres = { r: v * (1 - s), g: v, b: v * (1 - s * f) };\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tres = { r: v * (1 - s), g: v * (1 - s * f), b: v };\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tres = { r: v * (1 - s * f), g: v * (1 - s), b: v };\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tres = { r: v, g: v * (1 - s), b: v * (1 - s * f) };\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tres = { r: v * (1 - s), g: v * (1 - s), b: v * (1 - s) };\n\t}\n\tres.mode = 'rgb';\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n","// Based on: https://en.wikipedia.org/wiki/HSL_and_HSV#Formal_derivation\n\nexport default function convertRgbToHsv({ r, g, b, alpha }) {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tlet M = Math.max(r, g, b),\n\t\tm = Math.min(r, g, b);\n\tlet res = {\n\t\tmode: 'hsv',\n\t\ts: M === 0 ? 0 : 1 - m / M,\n\t\tv: M\n\t};\n\tif (M - m !== 0)\n\t\tres.h =\n\t\t\t(M === r\n\t\t\t\t? (g - b) / (M - m) + (g < b) * 6\n\t\t\t\t: M === g\n\t\t\t\t? (b - r) / (M - m) + 2\n\t\t\t\t: (r - g) / (M - m) + 4) * 60;\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n}\n","import convertHsvToRgb from './convertHsvToRgb.js';\nimport convertRgbToHsv from './convertRgbToHsv.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueSaturation } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hsv',\n\n\ttoMode: {\n\t\trgb: convertHsvToRgb\n\t},\n\n\tparse: ['--hsv'],\n\tserialize: '--hsv',\n\n\tfromMode: {\n\t\trgb: convertRgbToHsv\n\t},\n\n\tchannels: ['h', 's', 'v', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\ts: interpolatorLinear,\n\t\tv: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueSaturation\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import convertHwbToRgb from './convertHwbToRgb.js';\nimport convertRgbToHwb from './convertRgbToHwb.js';\nimport parseHwb from './parseHwb.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueNaive } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'hwb',\n\n\ttoMode: {\n\t\trgb: convertHwbToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToHwb\n\t},\n\n\tchannels: ['h', 'w', 'b', 'alpha'],\n\n\tranges: {\n\t\th: [0, 360]\n\t},\n\n\tgamut: 'rgb',\n\n\tparse: [parseHwb],\n\tserialize: c =>\n\t\t`hwb(${c.h !== undefined ? c.h : 'none'} ${\n\t\t\tc.w !== undefined ? c.w * 100 + '%' : 'none'\n\t\t} ${c.b !== undefined ? c.b * 100 + '%' : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tw: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueNaive\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","/*\n\tHWB to RGB converter\n\t--------------------\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#hwb-to-rgb\n\t\t* https://en.wikipedia.org/wiki/HWB_color_model\n\t\t* http://alvyray.com/Papers/CG/HWB_JGTv208.pdf\n */\n\nimport convertHsvToRgb from '../hsv/convertHsvToRgb.js';\n\nexport default function convertHwbToRgb({ h, w, b, alpha }) {\n\tif (w === undefined) w = 0;\n\tif (b === undefined) b = 0;\n\t// normalize w + b to 1\n\tif (w + b > 1) {\n\t\tlet s = w + b;\n\t\tw /= s;\n\t\tb /= s;\n\t}\n\treturn convertHsvToRgb({\n\t\th: h,\n\t\ts: b === 1 ? 1 : 1 - w / (1 - b),\n\t\tv: 1 - b,\n\t\talpha: alpha\n\t});\n}\n","/*\n\tRGB to HWB converter\n\t--------------------\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#hwb-to-rgb\n\t\t* https://en.wikipedia.org/wiki/HWB_color_model\n\t\t* http://alvyray.com/Papers/CG/HWB_JGTv208.pdf\n */\n\nimport convertRgbToHsv from '../hsv/convertRgbToHsv.js';\n\nexport default function convertRgbToHwb(rgba) {\n\tlet hsv = convertRgbToHsv(rgba);\n\tif (hsv === undefined) return undefined;\n\tlet s = hsv.s !== undefined ? hsv.s : 0;\n\tlet v = hsv.v !== undefined ? hsv.v : 0;\n\tlet res = {\n\t\tmode: 'hwb',\n\t\tw: (1 - s) * v,\n\t\tb: 1 - v\n\t};\n\tif (hsv.h !== undefined) res.h = hsv.h;\n\tif (hsv.alpha !== undefined) res.alpha = hsv.alpha;\n\treturn res;\n}\n","import { Tok } from '../parse.js';\n\nfunction ParseHwb(color, parsed) {\n\tif (!parsed || parsed[0] !== 'hwb') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'hwb' };\n\tconst [, h, w, b, alpha] = parsed;\n\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\n\tif (w.type !== Tok.None) {\n\t\tif (w.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.w = w.value / 100;\n\t}\n\n\tif (b.type !== Tok.None) {\n\t\tif (b.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.b = b.value / 100;\n\t}\n\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default ParseHwb;\n","/*\n\thttps://en.wikipedia.org/wiki/Transfer_functions_in_imaging\n*/\n\nexport const M1 = 0.1593017578125;\nexport const M2 = 78.84375;\nexport const C1 = 0.8359375;\nexport const C2 = 18.8515625;\nexport const C3 = 18.6875;\n\n/*\n\tPerceptual Quantizer, as defined in Rec. BT 2100-2 (2018)\n\n\t* https://www.itu.int/rec/R-REC-BT.2100-2-201807-I/en\n\t* https://en.wikipedia.org/wiki/Perceptual_quantizer\n*/\n\n/* PQ EOTF, defined for `v` in [0,1]. */\nexport function transferPqDecode(v) {\n\tif (v < 0) return 0;\n\tconst c = Math.pow(v, 1 / M2);\n\treturn 1e4 * Math.pow(Math.max(0, c - C1) / (C2 - C3 * c), 1 / M1);\n}\n\n/* PQ EOTF^-1, defined for `v` in [0, 1e4]. */\nexport function transferPqEncode(v) {\n\tif (v < 0) return 0;\n\tconst c = Math.pow(v / 1e4, M1);\n\treturn Math.pow((C1 + C2 * c) / (1 + C3 * c), M2);\n}\n","import { YW } from '../hdr/constants.js';\nimport { transferPqDecode } from '../hdr/transfer.js';\n\nconst toRel = c => Math.max(c / YW, 0);\n\nconst convertItpToXyz65 = ({ i, t, p, alpha }) => {\n\tif (i === undefined) i = 0;\n\tif (t === undefined) t = 0;\n\tif (p === undefined) p = 0;\n\n\tconst l = transferPqDecode(\n\t\ti + 0.008609037037932761 * t + 0.11102962500302593 * p\n\t);\n\tconst m = transferPqDecode(\n\t\ti - 0.00860903703793275 * t - 0.11102962500302599 * p\n\t);\n\tconst s = transferPqDecode(\n\t\ti + 0.5600313357106791 * t - 0.32062717498731885 * p\n\t);\n\n\tconst res = {\n\t\tmode: 'xyz65',\n\t\tx: toRel(\n\t\t\t2.0701522183894219 * l -\n\t\t\t\t1.3263473389671556 * m +\n\t\t\t\t0.2066510476294051 * s\n\t\t),\n\t\ty: toRel(\n\t\t\t0.3647385209748074 * l +\n\t\t\t\t0.680566024947227 * m -\n\t\t\t\t0.0453045459220346 * s\n\t\t),\n\t\tz: toRel(\n\t\t\t-0.049747207535812 * l -\n\t\t\t\t0.0492609666966138 * m +\n\t\t\t\t1.1880659249923042 * s\n\t\t)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertItpToXyz65;\n","/*\n\tRelative XYZ has Y=1 for media white,\n\tBT.2048 says media white Y=203 (at PQ 58).\n\tSee: https://www.itu.int/dms_pub/itu-r/opb/rep/R-REP-BT.2408-3-2019-PDF-E.pdf\n*/\nexport const YW = 203;\n","import { YW } from '../hdr/constants.js';\nimport { transferPqEncode } from '../hdr/transfer.js';\n\nconst toAbs = (c = 0) => Math.max(c * YW, 0);\n\nconst convertXyz65ToItp = ({ x, y, z, alpha }) => {\n\tconst absX = toAbs(x);\n\tconst absY = toAbs(y);\n\tconst absZ = toAbs(z);\n\tconst l = transferPqEncode(\n\t\t0.3592832590121217 * absX +\n\t\t\t0.6976051147779502 * absY -\n\t\t\t0.0358915932320289 * absZ\n\t);\n\tconst m = transferPqEncode(\n\t\t-0.1920808463704995 * absX +\n\t\t\t1.1004767970374323 * absY +\n\t\t\t0.0753748658519118 * absZ\n\t);\n\tconst s = transferPqEncode(\n\t\t0.0070797844607477 * absX +\n\t\t\t0.0748396662186366 * absY +\n\t\t\t0.8433265453898765 * absZ\n\t);\n\n\tconst i = 0.5 * l + 0.5 * m;\n\tconst t = 1.61376953125 * l - 3.323486328125 * m + 1.709716796875 * s;\n\tconst p = 4.378173828125 * l - 4.24560546875 * m - 0.132568359375 * s;\n\n\tconst res = { mode: 'itp', i, t, p };\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz65ToItp;\n","import { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport convertItpToXyz65 from './convertItpToXyz65.js';\nimport convertXyz65ToItp from './convertXyz65ToItp.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\n/*\n  ICtCp (or ITP) color space, as defined in ITU-R Recommendation BT.2100.\n\n  ICtCp is drafted to be supported in CSS within\n  [CSS Color HDR Module Level 1](https://drafts.csswg.org/css-color-hdr/#ICtCp) spec.\n*/\n\nconst definition = {\n\tmode: 'itp',\n\tchannels: ['i', 't', 'p', 'alpha'],\n\tparse: ['--ictcp'],\n\tserialize: '--ictcp',\n\n\ttoMode: {\n\t\txyz65: convertItpToXyz65,\n\t\trgb: color => convertXyz65ToRgb(convertItpToXyz65(color))\n\t},\n\n\tfromMode: {\n\t\txyz65: convertXyz65ToItp,\n\t\trgb: color => convertXyz65ToItp(convertRgbToXyz65(color))\n\t},\n\n\tranges: {\n\t\ti: [0, 0.581],\n\t\tt: [-0.369, 0.272],\n\t\tp: [-0.164, 0.331]\n\t},\n\n\tinterpolate: {\n\t\ti: interpolatorLinear,\n\t\tt: interpolatorLinear,\n\t\tp: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","import { M1 as n, C1, C2, C3 } from '../hdr/transfer.js';\nconst p = 134.03437499999998; // = 1.7 * 2523 / Math.pow(2, 5);\nconst d0 = 1.6295499532821566e-11;\n\n/* \n\tThe encoding function is derived from Perceptual Quantizer.\n*/\nconst jabPqEncode = v => {\n\tif (v < 0) return 0;\n\tlet vn = Math.pow(v / 10000, n);\n\treturn Math.pow((C1 + C2 * vn) / (1 + C3 * vn), p);\n};\n\n// Convert to Absolute XYZ\nconst abs = (v = 0) => Math.max(v * 203, 0);\n\nconst convertXyz65ToJab = ({ x, y, z, alpha }) => {\n\tx = abs(x);\n\ty = abs(y);\n\tz = abs(z);\n\n\tlet xp = 1.15 * x - 0.15 * z;\n\tlet yp = 0.66 * y + 0.34 * x;\n\n\tlet l = jabPqEncode(0.41478972 * xp + 0.579999 * yp + 0.014648 * z);\n\tlet m = jabPqEncode(-0.20151 * xp + 1.120649 * yp + 0.0531008 * z);\n\tlet s = jabPqEncode(-0.0166008 * xp + 0.2648 * yp + 0.6684799 * z);\n\n\tlet i = (l + m) / 2;\n\n\tlet res = {\n\t\tmode: 'jab',\n\t\tj: (0.44 * i) / (1 - 0.56 * i) - d0,\n\t\ta: 3.524 * l - 4.066708 * m + 0.542708 * s,\n\t\tb: 0.199076 * l + 1.096799 * m - 1.295875 * s\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz65ToJab;\n","import { M1 as n, C1, C2, C3 } from '../hdr/transfer.js';\nconst p = 134.03437499999998; // = 1.7 * 2523 / Math.pow(2, 5);\nconst d0 = 1.6295499532821566e-11;\n\n/* \n\tThe encoding function is derived from Perceptual Quantizer.\n*/\nconst jabPqDecode = v => {\n\tif (v < 0) return 0;\n\tlet vp = Math.pow(v, 1 / p);\n\treturn 10000 * Math.pow((C1 - vp) / (C3 * vp - C2), 1 / n);\n};\n\nconst rel = v => v / 203;\n\nconst convertJabToXyz65 = ({ j, a, b, alpha }) => {\n\tif (j === undefined) j = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet i = (j + d0) / (0.44 + 0.56 * (j + d0));\n\n\tlet l = jabPqDecode(i + 0.13860504 * a + 0.058047316 * b);\n\tlet m = jabPqDecode(i - 0.13860504 * a - 0.058047316 * b);\n\tlet s = jabPqDecode(i - 0.096019242 * a - 0.8118919 * b);\n\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx: rel(\n\t\t\t1.661373024652174 * l -\n\t\t\t\t0.914523081304348 * m +\n\t\t\t\t0.23136208173913045 * s\n\t\t),\n\t\ty: rel(\n\t\t\t-0.3250758611844533 * l +\n\t\t\t\t1.571847026732543 * m -\n\t\t\t\t0.21825383453227928 * s\n\t\t),\n\t\tz: rel(-0.090982811 * l - 0.31272829 * m + 1.5227666 * s)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertJabToXyz65;\n","/*\n\tConvert sRGB to JzAzBz.\n\n\tFor achromatic sRGB colors, adjust the equivalent JzAzBz color\n\tto be achromatic as well, insteading of having a very slight chroma.\n */\n\nimport convertXyz65ToJab from './convertXyz65ToJab.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\n\nconst convertRgbToJab = rgb => {\n\tlet res = convertXyz65ToJab(convertRgbToXyz65(rgb));\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToJab;\n","import convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\nimport convertJabToXyz65 from './convertJabToXyz65.js';\n\nconst convertJabToRgb = color => convertXyz65ToRgb(convertJabToXyz65(color));\n\nexport default convertJabToRgb;\n","/*\n\tThe JzAzBz color space.\n\n\tBased on:\n\n\tMuhammad Safdar, Guihua Cui, Youn Jin Kim, and Ming Ronnier Luo, \n\t\"Perceptually uniform color space for image signals \n\tincluding high dynamic range and wide gamut,\" \n\tOpt. Express 25, 15131-15151 (2017) \n\n\thttps://doi.org/10.1364/OE.25.015131\n */\n\nimport convertXyz65ToJab from './convertXyz65ToJab.js';\nimport convertJabToXyz65 from './convertJabToXyz65.js';\nimport convertRgbToJab from './convertRgbToJab.js';\nimport convertJabToRgb from './convertJabToRgb.js';\n\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'jab',\n\tchannels: ['j', 'a', 'b', 'alpha'],\n\n\tparse: ['--jzazbz'],\n\tserialize: '--jzazbz',\n\n\tfromMode: {\n\t\trgb: convertRgbToJab,\n\t\txyz65: convertXyz65ToJab\n\t},\n\n\ttoMode: {\n\t\trgb: convertJabToRgb,\n\t\txyz65: convertJabToXyz65\n\t},\n\n\tranges: {\n\t\tj: [0, 0.222],\n\t\ta: [-0.109, 0.129],\n\t\tb: [-0.185, 0.134]\n\t},\n\n\tinterpolate: {\n\t\tj: interpolatorLinear,\n\t\ta: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","import normalizeHue from '../util/normalizeHue.js';\n\nconst convertJabToJch = ({ j, a, b, alpha }) => {\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet c = Math.sqrt(a * a + b * b);\n\tlet res = {\n\t\tmode: 'jch',\n\t\tj,\n\t\tc\n\t};\n\tif (c) {\n\t\tres.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\t}\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertJabToJch;\n","const convertJchToJab = ({ j, c, h, alpha }) => {\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode: 'jab',\n\t\tj,\n\t\ta: c ? c * Math.cos((h / 180) * Math.PI) : 0,\n\t\tb: c ? c * Math.sin((h / 180) * Math.PI) : 0\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertJchToJab;\n","import convertJabToJch from './convertJabToJch.js';\nimport convertJchToJab from './convertJchToJab.js';\nimport convertJabToRgb from '../jab/convertJabToRgb.js';\nimport convertRgbToJab from '../jab/convertRgbToJab.js';\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'jch',\n\n\tparse: ['--jzczhz'],\n\tserialize: '--jzczhz',\n\n\ttoMode: {\n\t\tjab: convertJchToJab,\n\t\trgb: c => convertJabToRgb(convertJchToJab(c))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertJabToJch(convertRgbToJab(c)),\n\t\tjab: convertJabToJch\n\t},\n\n\tchannels: ['j', 'c', 'h', 'alpha'],\n\n\tranges: {\n\t\tj: [0, 0.221],\n\t\tc: [0, 0.19],\n\t\th: [0, 360]\n\t},\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tc: interpolatorLinear,\n\t\tj: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","export const k = Math.pow(29, 3) / Math.pow(3, 3);\nexport const e = Math.pow(6, 3) / Math.pow(29, 3);\n","import { k, e } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nlet fn = v => (Math.pow(v, 3) > e ? Math.pow(v, 3) : (116 * v - 16) / k);\n\nconst convertLabToXyz50 = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\tlet fy = (l + 16) / 116;\n\tlet fx = a / 500 + fy;\n\tlet fz = fy - b / 200;\n\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx: fn(fx) * D50.X,\n\t\ty: fn(fy) * D50.Y,\n\t\tz: fn(fz) * D50.Z\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLabToXyz50;\n","/*\n\tCIE XYZ D50 values to sRGB.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nimport convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\n\nconst convertXyz50ToRgb = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = convertLrgbToRgb({\n\t\tr:\n\t\t\tx * 3.1341359569958707 -\n\t\t\ty * 1.6173863321612538 -\n\t\t\t0.4906619460083532 * z,\n\t\tg:\n\t\t\tx * -0.978795502912089 +\n\t\t\ty * 1.916254567259524 +\n\t\t\t0.03344273116131949 * z,\n\t\tb:\n\t\t\tx * 0.07195537988411677 -\n\t\t\ty * 0.2289768264158322 +\n\t\t\t1.405386058324125 * z\n\t});\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz50ToRgb;\n","import convertLabToXyz50 from './convertLabToXyz50.js';\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\n\nconst convertLabToRgb = lab => convertXyz50ToRgb(convertLabToXyz50(lab));\n\nexport default convertLabToRgb;\n","/*\n\tConvert sRGB values to CIE XYZ D50\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\n*/\n\nimport convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\n\nconst convertRgbToXyz50 = rgb => {\n\tlet { r, g, b, alpha } = convertRgbToLrgb(rgb);\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx:\n\t\t\t0.436065742824811 * r +\n\t\t\t0.3851514688337912 * g +\n\t\t\t0.14307845442264197 * b,\n\t\ty:\n\t\t\t0.22249319175623702 * r +\n\t\t\t0.7168870538238823 * g +\n\t\t\t0.06061979053616537 * b,\n\t\tz:\n\t\t\t0.013923904500943465 * r +\n\t\t\t0.09708128566574634 * g +\n\t\t\t0.7140993584005155 * b\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToXyz50;\n","import { k, e } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nconst f = value => (value > e ? Math.cbrt(value) : (k * value + 16) / 116);\n\nconst convertXyz50ToLab = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet f0 = f(x / D50.X);\n\tlet f1 = f(y / D50.Y);\n\tlet f2 = f(z / D50.Z);\n\n\tlet res = {\n\t\tmode: 'lab',\n\t\tl: 116 * f1 - 16,\n\t\ta: 500 * (f0 - f1),\n\t\tb: 200 * (f1 - f2)\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz50ToLab;\n","import convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\nimport convertXyz50ToLab from './convertXyz50ToLab.js';\n\nconst convertRgbToLab = rgb => {\n\tlet res = convertXyz50ToLab(convertRgbToXyz50(rgb));\n\n\t// Fixes achromatic RGB colors having a _slight_ chroma due to floating-point errors\n\t// and approximated computations in sRGB <-> CIELab.\n\t// See: https://github.com/d3/d3-color/pull/46\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToLab;\n","import convertLabToRgb from './convertLabToRgb.js';\nimport convertLabToXyz50 from './convertLabToXyz50.js';\nimport convertRgbToLab from './convertRgbToLab.js';\nimport convertXyz50ToLab from './convertXyz50ToLab.js';\nimport parseLab from './parseLab.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'lab',\n\n\ttoMode: {\n\t\txyz50: convertLabToXyz50,\n\t\trgb: convertLabToRgb\n\t},\n\n\tfromMode: {\n\t\txyz50: convertXyz50ToLab,\n\t\trgb: convertRgbToLab\n\t},\n\n\tchannels: ['l', 'a', 'b', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\ta: [-125, 125],\n\t\tb: [-125, 125]\n\t},\n\n\tparse: [parseLab],\n\tserialize: c =>\n\t\t`lab(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.a !== undefined ? c.a : 'none'\n\t\t} ${c.b !== undefined ? c.b : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\ta: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","import { Tok } from '../parse.js';\n\nfunction parseLab(color, parsed) {\n\tif (!parsed || parsed[0] !== 'lab') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'lab' };\n\tconst [, l, a, b, alpha] = parsed;\n\tif (l.type === Tok.Hue || a.type === Tok.Hue || b.type === Tok.Hue) {\n\t\treturn undefined;\n\t}\n\tif (l.type !== Tok.None) {\n\t\tres.l = Math.min(Math.max(0, l.value), 100);\n\t}\n\tif (a.type !== Tok.None) {\n\t\tres.a = a.type === Tok.Number ? a.value : (a.value * 125) / 100;\n\t}\n\tif (b.type !== Tok.None) {\n\t\tres.b = b.type === Tok.Number ? b.value : (b.value * 125) / 100;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseLab;\n","import convertLab65ToRgb from './convertLab65ToRgb.js';\nimport convertLab65ToXyz65 from './convertLab65ToXyz65.js';\nimport convertRgbToLab65 from './convertRgbToLab65.js';\nimport convertXyz65ToLab65 from './convertXyz65ToLab65.js';\nimport lab from '../lab/definition.js';\n\nconst definition = {\n\t...lab,\n\tmode: 'lab65',\n\n\tparse: ['--lab-d65'],\n\tserialize: '--lab-d65',\n\n\ttoMode: {\n\t\txyz65: convertLab65ToXyz65,\n\t\trgb: convertLab65ToRgb\n\t},\n\n\tfromMode: {\n\t\txyz65: convertXyz65ToLab65,\n\t\trgb: convertRgbToLab65\n\t},\n\n\tranges: {\n\t\tl: [0, 100],\n\t\ta: [-125, 125],\n\t\tb: [-125, 125]\n\t}\n};\n\nexport default definition;\n","import convertLabToLch from './convertLabToLch.js';\nimport convertLchToLab from './convertLchToLab.js';\nimport convertLabToRgb from '../lab/convertLabToRgb.js';\nimport convertRgbToLab from '../lab/convertRgbToLab.js';\nimport parseLch from './parseLch.js';\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst definition = {\n\tmode: 'lch',\n\n\ttoMode: {\n\t\tlab: convertLchToLab,\n\t\trgb: c => convertLabToRgb(convertLchToLab(c))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertLabToLch(convertRgbToLab(c)),\n\t\tlab: convertLabToLch\n\t},\n\n\tchannels: ['l', 'c', 'h', 'alpha'],\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 150],\n\t\th: [0, 360]\n\t},\n\n\tparse: [parseLch],\n\tserialize: c =>\n\t\t`lch(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.c !== undefined ? c.c : 'none'\n\t\t} ${c.h !== undefined ? c.h : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tc: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import { Tok } from '../parse.js';\n\nfunction parseLch(color, parsed) {\n\tif (!parsed || parsed[0] !== 'lch') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'lch' };\n\tconst [, l, c, h, alpha] = parsed;\n\tif (l.type !== Tok.None) {\n\t\tif (l.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.l = Math.min(Math.max(0, l.value), 100);\n\t}\n\tif (c.type !== Tok.None) {\n\t\tres.c = Math.max(\n\t\t\t0,\n\t\t\tc.type === Tok.Number ? c.value : (c.value * 150) / 100\n\t\t);\n\t}\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseLch;\n","import convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertLab65ToRgb from '../lab65/convertLab65ToRgb.js';\nimport convertRgbToLab65 from '../lab65/convertRgbToLab65.js';\nimport lch from '../lch/definition.js';\n\nconst definition = {\n\t...lch,\n\tmode: 'lch65',\n\n\tparse: ['--lch-d65'],\n\tserialize: '--lch-d65',\n\n\ttoMode: {\n\t\tlab65: c => convertLchToLab(c, 'lab65'),\n\t\trgb: c => convertLab65ToRgb(convertLchToLab(c, 'lab65'))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertLabToLch(convertRgbToLab65(c), 'lch65'),\n\t\tlab65: c => convertLabToLch(c, 'lch65')\n\t},\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 150],\n\t\th: [0, 360]\n\t}\n};\n\nexport default definition;\n","import normalizeHue from '../util/normalizeHue.js';\n\nconst convertLuvToLchuv = ({ l, u, v, alpha }) => {\n\tif (u === undefined) u = 0;\n\tif (v === undefined) v = 0;\n\tlet c = Math.sqrt(u * u + v * v);\n\tlet res = {\n\t\tmode: 'lchuv',\n\t\tl: l,\n\t\tc: c\n\t};\n\tif (c) {\n\t\tres.h = normalizeHue((Math.atan2(v, u) * 180) / Math.PI);\n\t}\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertLuvToLchuv;\n","const convertLchuvToLuv = ({ l, c, h, alpha }) => {\n\tif (h === undefined) h = 0;\n\tlet res = {\n\t\tmode: 'luv',\n\t\tl: l,\n\t\tu: c ? c * Math.cos((h / 180) * Math.PI) : 0,\n\t\tv: c ? c * Math.sin((h / 180) * Math.PI) : 0\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertLchuvToLuv;\n","import { k, e } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nexport const u_fn = (x, y, z) => (4 * x) / (x + 15 * y + 3 * z);\nexport const v_fn = (x, y, z) => (9 * y) / (x + 15 * y + 3 * z);\n\nexport const un = u_fn(D50.X, D50.Y, D50.Z);\nexport const vn = v_fn(D50.X, D50.Y, D50.Z);\n\nconst l_fn = value => (value <= e ? k * value : 116 * Math.cbrt(value) - 16);\n\nconst convertXyz50ToLuv = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet l = l_fn(y / D50.Y);\n\tlet u = u_fn(x, y, z);\n\tlet v = v_fn(x, y, z);\n\n\t// guard against NaNs produced by `xyz(0 0 0)` black\n\tif (!isFinite(u) || !isFinite(v)) {\n\t\tl = u = v = 0;\n\t} else {\n\t\tu = 13 * l * (u - un);\n\t\tv = 13 * l * (v - vn);\n\t}\n\n\tlet res = {\n\t\tmode: 'luv',\n\t\tl,\n\t\tu,\n\t\tv\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertXyz50ToLuv;\n","import { k } from '../xyz50/constants.js';\nimport { D50 } from '../constants.js';\n\nexport const u_fn = (x, y, z) => (4 * x) / (x + 15 * y + 3 * z);\nexport const v_fn = (x, y, z) => (9 * y) / (x + 15 * y + 3 * z);\n\nexport const un = u_fn(D50.X, D50.Y, D50.Z);\nexport const vn = v_fn(D50.X, D50.Y, D50.Z);\n\nconst convertLuvToXyz50 = ({ l, u, v, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (l === 0) {\n\t\treturn { mode: 'xyz50', x: 0, y: 0, z: 0 };\n\t}\n\n\tif (u === undefined) u = 0;\n\tif (v === undefined) v = 0;\n\n\tlet up = u / (13 * l) + un;\n\tlet vp = v / (13 * l) + vn;\n\tlet y = D50.Y * (l <= 8 ? l / k : Math.pow((l + 16) / 116, 3));\n\tlet x = (y * (9 * up)) / (4 * vp);\n\tlet z = (y * (12 - 3 * up - 20 * vp)) / (4 * vp);\n\n\tlet res = { mode: 'xyz50', x, y, z };\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLuvToXyz50;\n","/*\n\tCIELChuv color space\n\t--------------------\n\n\tReference: \n\n\t\thttps://en.wikipedia.org/wiki/CIELUV\n */\n\nimport convertLuvToLchuv from './convertLuvToLchuv.js';\nimport convertLchuvToLuv from './convertLchuvToLuv.js';\nimport convertXyz50ToLuv from '../luv/convertXyz50ToLuv.js';\nimport convertLuvToXyz50 from '../luv/convertLuvToXyz50.js';\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\nimport convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\n\nimport { fixupHueShorter } from '../fixup/hue.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { differenceHueChroma } from '../difference.js';\nimport { averageAngle } from '../average.js';\n\nconst convertRgbToLchuv = rgb =>\n\tconvertLuvToLchuv(convertXyz50ToLuv(convertRgbToXyz50(rgb)));\nconst convertLchuvToRgb = lchuv =>\n\tconvertXyz50ToRgb(convertLuvToXyz50(convertLchuvToLuv(lchuv)));\n\nconst definition = {\n\tmode: 'lchuv',\n\n\ttoMode: {\n\t\tluv: convertLchuvToLuv,\n\t\trgb: convertLchuvToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToLchuv,\n\t\tluv: convertLuvToLchuv\n\t},\n\n\tchannels: ['l', 'c', 'h', 'alpha'],\n\n\tparse: ['--lchuv'],\n\tserialize: '--lchuv',\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tc: [0, 176.956],\n\t\th: [0, 360]\n\t},\n\n\tinterpolate: {\n\t\th: { use: interpolatorLinear, fixup: fixupHueShorter },\n\t\tc: interpolatorLinear,\n\t\tl: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t},\n\n\tdifference: {\n\t\th: differenceHueChroma\n\t},\n\n\taverage: {\n\t\th: averageAngle\n\t}\n};\n\nexport default definition;\n","import rgb from '../rgb/definition.js';\nimport convertRgbToLrgb from './convertRgbToLrgb.js';\nimport convertLrgbToRgb from './convertLrgbToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'lrgb',\n\n\ttoMode: {\n\t\trgb: convertLrgbToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToLrgb\n\t},\n\n\tparse: ['srgb-linear'],\n\tserialize: 'srgb-linear'\n};\n\nexport default definition;\n","/*\n\tCIELUV color space\n\t------------------\n\n\tReference: \n\n\t\thttps://en.wikipedia.org/wiki/CIELUV\n */\n\nimport convertXyz50ToLuv from './convertXyz50ToLuv.js';\nimport convertLuvToXyz50 from './convertLuvToXyz50.js';\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\nimport convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\n\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'luv',\n\n\ttoMode: {\n\t\txyz50: convertLuvToXyz50,\n\t\trgb: luv => convertXyz50ToRgb(convertLuvToXyz50(luv))\n\t},\n\n\tfromMode: {\n\t\txyz50: convertXyz50ToLuv,\n\t\trgb: rgb => convertXyz50ToLuv(convertRgbToXyz50(rgb))\n\t},\n\n\tchannels: ['l', 'u', 'v', 'alpha'],\n\n\tparse: ['--luv'],\n\tserialize: '--luv',\n\n\tranges: {\n\t\tl: [0, 100],\n\t\tu: [-84.936, 175.042],\n\t\tv: [-125.882, 87.243]\n\t},\n\n\tinterpolate: {\n\t\tl: interpolatorLinear,\n\t\tu: interpolatorLinear,\n\t\tv: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","const convertLrgbToOklab = ({ r, g, b, alpha }) => {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\n\tlet L = Math.cbrt(\n\t\t0.412221469470763 * r + 0.5363325372617348 * g + 0.0514459932675022 * b\n\t);\n\tlet M = Math.cbrt(\n\t\t0.2119034958178252 * r + 0.6806995506452344 * g + 0.1073969535369406 * b\n\t);\n\tlet S = Math.cbrt(\n\t\t0.0883024591900564 * r + 0.2817188391361215 * g + 0.6299787016738222 * b\n\t);\n\n\tlet res = {\n\t\tmode: 'oklab',\n\t\tl:\n\t\t\t0.210454268309314 * L +\n\t\t\t0.7936177747023054 * M -\n\t\t\t0.0040720430116193 * S,\n\t\ta:\n\t\t\t1.9779985324311684 * L -\n\t\t\t2.4285922420485799 * M +\n\t\t\t0.450593709617411 * S,\n\t\tb:\n\t\t\t0.0259040424655478 * L +\n\t\t\t0.7827717124575296 * M -\n\t\t\t0.8086757549230774 * S\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertLrgbToOklab;\n","import convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\nimport convertLrgbToOklab from './convertLrgbToOklab.js';\n\nconst convertRgbToOklab = rgb => {\n\tlet res = convertLrgbToOklab(convertRgbToLrgb(rgb));\n\tif (rgb.r === rgb.b && rgb.b === rgb.g) {\n\t\tres.a = res.b = 0;\n\t}\n\treturn res;\n};\n\nexport default convertRgbToOklab;\n","const convertOklabToLrgb = ({ l, a, b, alpha }) => {\n\tif (l === undefined) l = 0;\n\tif (a === undefined) a = 0;\n\tif (b === undefined) b = 0;\n\n\tlet L = Math.pow(l + 0.3963377773761749 * a + 0.2158037573099136 * b, 3);\n\tlet M = Math.pow(l - 0.1055613458156586 * a - 0.0638541728258133 * b, 3);\n\tlet S = Math.pow(l - 0.0894841775298119 * a - 1.2914855480194092 * b, 3);\n\n\tlet res = {\n\t\tmode: 'lrgb',\n\t\tr:\n\t\t\t4.0767416360759574 * L -\n\t\t\t3.3077115392580616 * M +\n\t\t\t0.2309699031821044 * S,\n\t\tg:\n\t\t\t-1.2684379732850317 * L +\n\t\t\t2.6097573492876887 * M -\n\t\t\t0.3413193760026573 * S,\n\t\tb:\n\t\t\t-0.0041960761386756 * L -\n\t\t\t0.7034186179359362 * M +\n\t\t\t1.7076146940746117 * S\n\t};\n\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\n\treturn res;\n};\n\nexport default convertOklabToLrgb;\n","import convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\nimport convertOklabToLrgb from './convertOklabToLrgb.js';\n\nconst convertOklabToRgb = c => convertLrgbToRgb(convertOklabToLrgb(c));\n\nexport default convertOklabToRgb;\n","/*\n\tAdapted from code by Björn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport convertOklabToLrgb from '../oklab/convertOklabToLrgb.js';\n\nexport function toe(x) {\n\tconst k_1 = 0.206;\n\tconst k_2 = 0.03;\n\tconst k_3 = (1 + k_1) / (1 + k_2);\n\treturn (\n\t\t0.5 *\n\t\t(k_3 * x -\n\t\t\tk_1 +\n\t\t\tMath.sqrt((k_3 * x - k_1) * (k_3 * x - k_1) + 4 * k_2 * k_3 * x))\n\t);\n}\n\nexport function toe_inv(x) {\n\tconst k_1 = 0.206;\n\tconst k_2 = 0.03;\n\tconst k_3 = (1 + k_1) / (1 + k_2);\n\treturn (x * x + k_1 * x) / (k_3 * (x + k_2));\n}\n\n// Finds the maximum saturation possible for a given hue that fits in sRGB\n// Saturation here is defined as S = C/L\n// a and b must be normalized so a^2 + b^2 == 1\nfunction compute_max_saturation(a, b) {\n\t// Max saturation will be when one of r, g or b goes below zero.\n\n\t// Select different coefficients depending on which component goes below zero first\n\tlet k0, k1, k2, k3, k4, wl, wm, ws;\n\n\tif (-1.88170328 * a - 0.80936493 * b > 1) {\n\t\t// Red component\n\t\tk0 = +1.19086277;\n\t\tk1 = +1.76576728;\n\t\tk2 = +0.59662641;\n\t\tk3 = +0.75515197;\n\t\tk4 = +0.56771245;\n\t\twl = +4.0767416621;\n\t\twm = -3.3077115913;\n\t\tws = +0.2309699292;\n\t} else if (1.81444104 * a - 1.19445276 * b > 1) {\n\t\t// Green component\n\t\tk0 = +0.73956515;\n\t\tk1 = -0.45954404;\n\t\tk2 = +0.08285427;\n\t\tk3 = +0.1254107;\n\t\tk4 = +0.14503204;\n\t\twl = -1.2684380046;\n\t\twm = +2.6097574011;\n\t\tws = -0.3413193965;\n\t} else {\n\t\t// Blue component\n\t\tk0 = +1.35733652;\n\t\tk1 = -0.00915799;\n\t\tk2 = -1.1513021;\n\t\tk3 = -0.50559606;\n\t\tk4 = +0.00692167;\n\t\twl = -0.0041960863;\n\t\twm = -0.7034186147;\n\t\tws = +1.707614701;\n\t}\n\n\t// Approximate max saturation using a polynomial:\n\tlet S = k0 + k1 * a + k2 * b + k3 * a * a + k4 * a * b;\n\n\t// Do one step Halley's method to get closer\n\t// this gives an error less than 10e6, except for some blue hues where the dS/dh is close to infinite\n\t// this should be sufficient for most applications, otherwise do two/three steps\n\n\tlet k_l = +0.3963377774 * a + 0.2158037573 * b;\n\tlet k_m = -0.1055613458 * a - 0.0638541728 * b;\n\tlet k_s = -0.0894841775 * a - 1.291485548 * b;\n\n\t{\n\t\tlet l_ = 1 + S * k_l;\n\t\tlet m_ = 1 + S * k_m;\n\t\tlet s_ = 1 + S * k_s;\n\n\t\tlet l = l_ * l_ * l_;\n\t\tlet m = m_ * m_ * m_;\n\t\tlet s = s_ * s_ * s_;\n\n\t\tlet l_dS = 3 * k_l * l_ * l_;\n\t\tlet m_dS = 3 * k_m * m_ * m_;\n\t\tlet s_dS = 3 * k_s * s_ * s_;\n\n\t\tlet l_dS2 = 6 * k_l * k_l * l_;\n\t\tlet m_dS2 = 6 * k_m * k_m * m_;\n\t\tlet s_dS2 = 6 * k_s * k_s * s_;\n\n\t\tlet f = wl * l + wm * m + ws * s;\n\t\tlet f1 = wl * l_dS + wm * m_dS + ws * s_dS;\n\t\tlet f2 = wl * l_dS2 + wm * m_dS2 + ws * s_dS2;\n\n\t\tS = S - (f * f1) / (f1 * f1 - 0.5 * f * f2);\n\t}\n\n\treturn S;\n}\n\nexport function find_cusp(a, b) {\n\t// First, find the maximum saturation (saturation S = C/L)\n\tlet S_cusp = compute_max_saturation(a, b);\n\n\t// Convert to linear sRGB to find the first point where at least one of r,g or b >= 1:\n\tlet rgb = convertOklabToLrgb({ l: 1, a: S_cusp * a, b: S_cusp * b });\n\tlet L_cusp = Math.cbrt(1 / Math.max(rgb.r, rgb.g, rgb.b));\n\tlet C_cusp = L_cusp * S_cusp;\n\n\treturn [L_cusp, C_cusp];\n}\n\n// Finds intersection of the line defined by\n// L = L0 * (1 - t) + t * L1;\n// C = t * C1;\n// a and b must be normalized so a^2 + b^2 == 1\nfunction find_gamut_intersection(a, b, L1, C1, L0, cusp = null) {\n\tif (!cusp) {\n\t\t// Find the cusp of the gamut triangle\n\t\tcusp = find_cusp(a, b);\n\t}\n\n\t// Find the intersection for upper and lower half seprately\n\tlet t;\n\tif ((L1 - L0) * cusp[1] - (cusp[0] - L0) * C1 <= 0) {\n\t\t// Lower half\n\n\t\tt = (cusp[1] * L0) / (C1 * cusp[0] + cusp[1] * (L0 - L1));\n\t} else {\n\t\t// Upper half\n\n\t\t// First intersect with triangle\n\t\tt = (cusp[1] * (L0 - 1)) / (C1 * (cusp[0] - 1) + cusp[1] * (L0 - L1));\n\n\t\t// Then one step Halley's method\n\t\t{\n\t\t\tlet dL = L1 - L0;\n\t\t\tlet dC = C1;\n\n\t\t\tlet k_l = +0.3963377774 * a + 0.2158037573 * b;\n\t\t\tlet k_m = -0.1055613458 * a - 0.0638541728 * b;\n\t\t\tlet k_s = -0.0894841775 * a - 1.291485548 * b;\n\n\t\t\tlet l_dt = dL + dC * k_l;\n\t\t\tlet m_dt = dL + dC * k_m;\n\t\t\tlet s_dt = dL + dC * k_s;\n\n\t\t\t// If higher accuracy is required, 2 or 3 iterations of the following block can be used:\n\t\t\t{\n\t\t\t\tlet L = L0 * (1 - t) + t * L1;\n\t\t\t\tlet C = t * C1;\n\n\t\t\t\tlet l_ = L + C * k_l;\n\t\t\t\tlet m_ = L + C * k_m;\n\t\t\t\tlet s_ = L + C * k_s;\n\n\t\t\t\tlet l = l_ * l_ * l_;\n\t\t\t\tlet m = m_ * m_ * m_;\n\t\t\t\tlet s = s_ * s_ * s_;\n\n\t\t\t\tlet ldt = 3 * l_dt * l_ * l_;\n\t\t\t\tlet mdt = 3 * m_dt * m_ * m_;\n\t\t\t\tlet sdt = 3 * s_dt * s_ * s_;\n\n\t\t\t\tlet ldt2 = 6 * l_dt * l_dt * l_;\n\t\t\t\tlet mdt2 = 6 * m_dt * m_dt * m_;\n\t\t\t\tlet sdt2 = 6 * s_dt * s_dt * s_;\n\n\t\t\t\tlet r =\n\t\t\t\t\t4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s - 1;\n\t\t\t\tlet r1 =\n\t\t\t\t\t4.0767416621 * ldt -\n\t\t\t\t\t3.3077115913 * mdt +\n\t\t\t\t\t0.2309699292 * sdt;\n\t\t\t\tlet r2 =\n\t\t\t\t\t4.0767416621 * ldt2 -\n\t\t\t\t\t3.3077115913 * mdt2 +\n\t\t\t\t\t0.2309699292 * sdt2;\n\n\t\t\t\tlet u_r = r1 / (r1 * r1 - 0.5 * r * r2);\n\t\t\t\tlet t_r = -r * u_r;\n\n\t\t\t\tlet g =\n\t\t\t\t\t-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s - 1;\n\t\t\t\tlet g1 =\n\t\t\t\t\t-1.2684380046 * ldt +\n\t\t\t\t\t2.6097574011 * mdt -\n\t\t\t\t\t0.3413193965 * sdt;\n\t\t\t\tlet g2 =\n\t\t\t\t\t-1.2684380046 * ldt2 +\n\t\t\t\t\t2.6097574011 * mdt2 -\n\t\t\t\t\t0.3413193965 * sdt2;\n\n\t\t\t\tlet u_g = g1 / (g1 * g1 - 0.5 * g * g2);\n\t\t\t\tlet t_g = -g * u_g;\n\n\t\t\t\tlet b =\n\t\t\t\t\t-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s - 1;\n\t\t\t\tlet b1 =\n\t\t\t\t\t-0.0041960863 * ldt -\n\t\t\t\t\t0.7034186147 * mdt +\n\t\t\t\t\t1.707614701 * sdt;\n\t\t\t\tlet b2 =\n\t\t\t\t\t-0.0041960863 * ldt2 -\n\t\t\t\t\t0.7034186147 * mdt2 +\n\t\t\t\t\t1.707614701 * sdt2;\n\n\t\t\t\tlet u_b = b1 / (b1 * b1 - 0.5 * b * b2);\n\t\t\t\tlet t_b = -b * u_b;\n\n\t\t\t\tt_r = u_r >= 0 ? t_r : 10e5;\n\t\t\t\tt_g = u_g >= 0 ? t_g : 10e5;\n\t\t\t\tt_b = u_b >= 0 ? t_b : 10e5;\n\n\t\t\t\tt += Math.min(t_r, Math.min(t_g, t_b));\n\t\t\t}\n\t\t}\n\t}\n\n\treturn t;\n}\n\nexport function get_ST_max(a_, b_, cusp = null) {\n\tif (!cusp) {\n\t\tcusp = find_cusp(a_, b_);\n\t}\n\tlet L = cusp[0];\n\tlet C = cusp[1];\n\treturn [C / L, C / (1 - L)];\n}\n\nexport function get_ST_mid(a_, b_) {\n\tlet S =\n\t\t0.11516993 +\n\t\t1 /\n\t\t\t(+7.4477897 +\n\t\t\t\t4.1590124 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(-2.19557347 +\n\t\t\t\t\t\t1.75198401 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-2.13704948 -\n\t\t\t\t\t\t\t\t10.02301043 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(-4.24894561 +\n\t\t\t\t\t\t\t\t\t\t5.38770819 * b_ +\n\t\t\t\t\t\t\t\t\t\t4.69891013 * a_))));\n\n\tlet T =\n\t\t0.11239642 +\n\t\t1 /\n\t\t\t(+1.6132032 -\n\t\t\t\t0.68124379 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(+0.40370612 +\n\t\t\t\t\t\t0.90148123 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-0.27087943 +\n\t\t\t\t\t\t\t\t0.6122399 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(+0.00299215 -\n\t\t\t\t\t\t\t\t\t\t0.45399568 * b_ -\n\t\t\t\t\t\t\t\t\t\t0.14661872 * a_))));\n\n\treturn [S, T];\n}\n\nexport function get_Cs(L, a_, b_) {\n\tlet cusp = find_cusp(a_, b_);\n\n\tlet C_max = find_gamut_intersection(a_, b_, L, 1, L, cusp);\n\tlet ST_max = get_ST_max(a_, b_, cusp);\n\n\tlet S_mid =\n\t\t0.11516993 +\n\t\t1 /\n\t\t\t(+7.4477897 +\n\t\t\t\t4.1590124 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(-2.19557347 +\n\t\t\t\t\t\t1.75198401 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-2.13704948 -\n\t\t\t\t\t\t\t\t10.02301043 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(-4.24894561 +\n\t\t\t\t\t\t\t\t\t\t5.38770819 * b_ +\n\t\t\t\t\t\t\t\t\t\t4.69891013 * a_))));\n\n\tlet T_mid =\n\t\t0.11239642 +\n\t\t1 /\n\t\t\t(+1.6132032 -\n\t\t\t\t0.68124379 * b_ +\n\t\t\t\ta_ *\n\t\t\t\t\t(+0.40370612 +\n\t\t\t\t\t\t0.90148123 * b_ +\n\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t(-0.27087943 +\n\t\t\t\t\t\t\t\t0.6122399 * b_ +\n\t\t\t\t\t\t\t\ta_ *\n\t\t\t\t\t\t\t\t\t(+0.00299215 -\n\t\t\t\t\t\t\t\t\t\t0.45399568 * b_ -\n\t\t\t\t\t\t\t\t\t\t0.14661872 * a_))));\n\n\tlet k = C_max / Math.min(L * ST_max[0], (1 - L) * ST_max[1]);\n\n\tlet C_a = L * S_mid;\n\tlet C_b = (1 - L) * T_mid;\n\tlet C_mid =\n\t\t0.9 *\n\t\tk *\n\t\tMath.sqrt(\n\t\t\tMath.sqrt(\n\t\t\t\t1 / (1 / (C_a * C_a * C_a * C_a) + 1 / (C_b * C_b * C_b * C_b))\n\t\t\t)\n\t\t);\n\n\tC_a = L * 0.4;\n\tC_b = (1 - L) * 0.8;\n\tlet C_0 = Math.sqrt(1 / (1 / (C_a * C_a) + 1 / (C_b * C_b)));\n\treturn [C_0, C_mid, C_max];\n}\n","/*\n\tAdapted from code by Björn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport normalizeHue from '../util/normalizeHue.js';\nimport { get_Cs, toe } from './helpers.js';\n\nexport default function convertOklabToOkhsl(lab) {\n\tconst l = lab.l !== undefined ? lab.l : 0;\n\tconst a = lab.a !== undefined ? lab.a : 0;\n\tconst b = lab.b !== undefined ? lab.b : 0;\n\n\tconst ret = { mode: 'okhsl', l: toe(l) };\n\n\tif (lab.alpha !== undefined) {\n\t\tret.alpha = lab.alpha;\n\t}\n\tlet c = Math.sqrt(a * a + b * b);\n\tif (!c) {\n\t\tret.s = 0;\n\t\treturn ret;\n\t}\n\tlet [C_0, C_mid, C_max] = get_Cs(l, a / c, b / c);\n\tlet s;\n\tif (c < C_mid) {\n\t\tlet k_0 = 0;\n\t\tlet k_1 = 0.8 * C_0;\n\t\tlet k_2 = 1 - k_1 / C_mid;\n\t\tlet t = (c - k_0) / (k_1 + k_2 * (c - k_0));\n\t\ts = t * 0.8;\n\t} else {\n\t\tlet k_0 = C_mid;\n\t\tlet k_1 = (0.2 * C_mid * C_mid * 1.25 * 1.25) / C_0;\n\t\tlet k_2 = 1 - k_1 / (C_max - C_mid);\n\t\tlet t = (c - k_0) / (k_1 + k_2 * (c - k_0));\n\t\ts = 0.8 + 0.2 * t;\n\t}\n\tif (s) {\n\t\tret.s = s;\n\t\tret.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\t}\n\treturn ret;\n}\n","/*\n\tAdapted from code by Björn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport { toe_inv, get_Cs } from './helpers.js';\n\nexport default function convertOkhslToOklab(hsl) {\n\tlet h = hsl.h !== undefined ? hsl.h : 0;\n\tlet s = hsl.s !== undefined ? hsl.s : 0;\n\tlet l = hsl.l !== undefined ? hsl.l : 0;\n\n\tconst ret = { mode: 'oklab', l: toe_inv(l) };\n\n\tif (hsl.alpha !== undefined) {\n\t\tret.alpha = hsl.alpha;\n\t}\n\n\tif (!s || l === 1) {\n\t\tret.a = ret.b = 0;\n\t\treturn ret;\n\t}\n\n\tlet a_ = Math.cos((h / 180) * Math.PI);\n\tlet b_ = Math.sin((h / 180) * Math.PI);\n\tlet [C_0, C_mid, C_max] = get_Cs(ret.l, a_, b_);\n\tlet t, k_0, k_1, k_2;\n\tif (s < 0.8) {\n\t\tt = 1.25 * s;\n\t\tk_0 = 0;\n\t\tk_1 = 0.8 * C_0;\n\t\tk_2 = 1 - k_1 / C_mid;\n\t} else {\n\t\tt = 5 * (s - 0.8);\n\t\tk_0 = C_mid;\n\t\tk_1 = (0.2 * C_mid * C_mid * 1.25 * 1.25) / C_0;\n\t\tk_2 = 1 - k_1 / (C_max - C_mid);\n\t}\n\tlet C = k_0 + (t * k_1) / (1 - k_2 * t);\n\tret.a = C * a_;\n\tret.b = C * b_;\n\n\treturn ret;\n}\n","import convertRgbToOklab from '../oklab/convertRgbToOklab.js';\nimport convertOklabToRgb from '../oklab/convertOklabToRgb.js';\nimport convertOklabToOkhsl from './convertOklabToOkhsl.js';\nimport convertOkhslToOklab from './convertOkhslToOklab.js';\n\nimport modeHsl from '../hsl/definition.js';\n\nconst modeOkhsl = {\n\t...modeHsl,\n\tmode: 'okhsl',\n\tchannels: ['h', 's', 'l', 'alpha'],\n\tparse: ['--okhsl'],\n\tserialize: '--okhsl',\n\tfromMode: {\n\t\toklab: convertOklabToOkhsl,\n\t\trgb: c => convertOklabToOkhsl(convertRgbToOklab(c))\n\t},\n\ttoMode: {\n\t\toklab: convertOkhslToOklab,\n\t\trgb: c => convertOklabToRgb(convertOkhslToOklab(c))\n\t}\n};\n\nexport default modeOkhsl;\n","/*\n\tAdapted from code by Björn Ottosson,\n\treleased under the MIT license:\n\n\tCopyright (c) 2021 Björn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport normalizeHue from '../util/normalizeHue.js';\nimport convertOklabToLrgb from '../oklab/convertOklabToLrgb.js';\nimport { get_ST_max, toe_inv, toe } from '../okhsl/helpers.js';\n\nexport default function convertOklabToOkhsv(lab) {\n\tlet l = lab.l !== undefined ? lab.l : 0;\n\tlet a = lab.a !== undefined ? lab.a : 0;\n\tlet b = lab.b !== undefined ? lab.b : 0;\n\n\tlet c = Math.sqrt(a * a + b * b);\n\n\t// TODO: c = 0\n\tlet a_ = c ? a / c : 1;\n\tlet b_ = c ? b / c : 1;\n\n\tlet [S_max, T] = get_ST_max(a_, b_);\n\tlet S_0 = 0.5;\n\tlet k = 1 - S_0 / S_max;\n\n\tlet t = T / (c + l * T);\n\tlet L_v = t * l;\n\tlet C_v = t * c;\n\n\tlet L_vt = toe_inv(L_v);\n\tlet C_vt = (C_v * L_vt) / L_v;\n\n\tlet rgb_scale = convertOklabToLrgb({ l: L_vt, a: a_ * C_vt, b: b_ * C_vt });\n\tlet scale_L = Math.cbrt(\n\t\t1 / Math.max(rgb_scale.r, rgb_scale.g, rgb_scale.b, 0)\n\t);\n\n\tl = l / scale_L;\n\tc = ((c / scale_L) * toe(l)) / l;\n\tl = toe(l);\n\n\tconst ret = {\n\t\tmode: 'okhsv',\n\t\ts: c ? ((S_0 + T) * C_v) / (T * S_0 + T * k * C_v) : 0,\n\t\tv: l ? l / L_v : 0\n\t};\n\tif (ret.s) {\n\t\tret.h = normalizeHue((Math.atan2(b, a) * 180) / Math.PI);\n\t}\n\tif (lab.alpha !== undefined) {\n\t\tret.alpha = lab.alpha;\n\t}\n\treturn ret;\n}\n","/*\n\tCopyright (c) 2021 Björn Ottosson\n\n\tPermission is hereby granted, free of charge, to any person obtaining a copy of\n\tthis software and associated documentation files (the \"Software\"), to deal in\n\tthe Software without restriction, including without limitation the rights to\n\tuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n\tof the Software, and to permit persons to whom the Software is furnished to do\n\tso, subject to the following conditions:\n\n\tThe above copyright notice and this permission notice shall be included in all\n\tcopies or substantial portions of the Software.\n\n\tTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n\tIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n\tFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n\tAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n\tLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n\tOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n\tSOFTWARE.\n */\n\nimport convertOklabToLrgb from '../oklab/convertOklabToLrgb.js';\nimport { get_ST_max, toe_inv } from '../okhsl/helpers.js';\n\nexport default function convertOkhsvToOklab(hsv) {\n\tconst ret = { mode: 'oklab' };\n\tif (hsv.alpha !== undefined) {\n\t\tret.alpha = hsv.alpha;\n\t}\n\n\tconst h = hsv.h !== undefined ? hsv.h : 0;\n\tconst s = hsv.s !== undefined ? hsv.s : 0;\n\tconst v = hsv.v !== undefined ? hsv.v : 0;\n\n\tconst a_ = Math.cos((h / 180) * Math.PI);\n\tconst b_ = Math.sin((h / 180) * Math.PI);\n\n\tconst [S_max, T] = get_ST_max(a_, b_);\n\tconst S_0 = 0.5;\n\tconst k = 1 - S_0 / S_max;\n\tconst L_v = 1 - (s * S_0) / (S_0 + T - T * k * s);\n\tconst C_v = (s * T * S_0) / (S_0 + T - T * k * s);\n\n\tconst L_vt = toe_inv(L_v);\n\tconst C_vt = (C_v * L_vt) / L_v;\n\tconst rgb_scale = convertOklabToLrgb({\n\t\tl: L_vt,\n\t\ta: a_ * C_vt,\n\t\tb: b_ * C_vt\n\t});\n\tconst scale_L = Math.cbrt(\n\t\t1 / Math.max(rgb_scale.r, rgb_scale.g, rgb_scale.b, 0)\n\t);\n\n\tconst L_new = toe_inv(v * L_v);\n\tconst C = (C_v * L_new) / L_v;\n\n\tret.l = L_new * scale_L;\n\tret.a = C * a_ * scale_L;\n\tret.b = C * b_ * scale_L;\n\n\treturn ret;\n}\n","import convertRgbToOklab from '../oklab/convertRgbToOklab.js';\nimport convertOklabToRgb from '../oklab/convertOklabToRgb.js';\nimport convertOklabToOkhsv from './convertOklabToOkhsv.js';\nimport convertOkhsvToOklab from './convertOkhsvToOklab.js';\n\nimport modeHsv from '../hsv/definition.js';\n\nconst modeOkhsv = {\n\t...modeHsv,\n\tmode: 'okhsv',\n\tchannels: ['h', 's', 'v', 'alpha'],\n\tparse: ['--okhsv'],\n\tserialize: '--okhsv',\n\tfromMode: {\n\t\toklab: convertOklabToOkhsv,\n\t\trgb: c => convertOklabToOkhsv(convertRgbToOklab(c))\n\t},\n\ttoMode: {\n\t\toklab: convertOkhsvToOklab,\n\t\trgb: c => convertOklabToRgb(convertOkhsvToOklab(c))\n\t}\n};\n\nexport default modeOkhsv;\n","import convertOklabToLrgb from './convertOklabToLrgb.js';\nimport convertLrgbToOklab from './convertLrgbToOklab.js';\nimport convertRgbToOklab from './convertRgbToOklab.js';\nimport convertOklabToRgb from './convertOklabToRgb.js';\nimport parseOklab from './parseOklab.js';\n\nimport lab from '../lab/definition.js';\n\n/*\n\tOklab, a perceptual color space for image processing by Björn Ottosson\n\tReference: https://bottosson.github.io/posts/oklab/\n */\n\nconst definition = {\n\t...lab,\n\tmode: 'oklab',\n\n\ttoMode: {\n\t\tlrgb: convertOklabToLrgb,\n\t\trgb: convertOklabToRgb\n\t},\n\n\tfromMode: {\n\t\tlrgb: convertLrgbToOklab,\n\t\trgb: convertRgbToOklab\n\t},\n\n\tranges: {\n\t\tl: [0, 1],\n\t\ta: [-0.4, 0.4],\n\t\tb: [-0.4, 0.4]\n\t},\n\n\tparse: [parseOklab],\n\tserialize: c =>\n\t\t`oklab(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.a !== undefined ? c.a : 'none'\n\t\t} ${c.b !== undefined ? c.b : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`\n};\n\nexport default definition;\n","import { Tok } from '../parse.js';\n\nfunction parseOklab(color, parsed) {\n\tif (!parsed || parsed[0] !== 'oklab') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'oklab' };\n\tconst [, l, a, b, alpha] = parsed;\n\tif (l.type === Tok.Hue || a.type === Tok.Hue || b.type === Tok.Hue) {\n\t\treturn undefined;\n\t}\n\tif (l.type !== Tok.None) {\n\t\tres.l = Math.min(\n\t\t\tMath.max(0, l.type === Tok.Number ? l.value : l.value / 100),\n\t\t\t1\n\t\t);\n\t}\n\tif (a.type !== Tok.None) {\n\t\tres.a = a.type === Tok.Number ? a.value : (a.value * 0.4) / 100;\n\t}\n\tif (b.type !== Tok.None) {\n\t\tres.b = b.type === Tok.Number ? b.value : (b.value * 0.4) / 100;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseOklab;\n","import lch from '../lch/definition.js';\nimport convertLabToLch from '../lch/convertLabToLch.js';\nimport convertLchToLab from '../lch/convertLchToLab.js';\nimport convertOklabToRgb from '../oklab/convertOklabToRgb.js';\nimport convertRgbToOklab from '../oklab/convertRgbToOklab.js';\nimport parseOklch from './parseOklch.js';\n\nconst definition = {\n\t...lch,\n\tmode: 'oklch',\n\n\ttoMode: {\n\t\toklab: c => convertLchToLab(c, 'oklab'),\n\t\trgb: c => convertOklabToRgb(convertLchToLab(c, 'oklab'))\n\t},\n\n\tfromMode: {\n\t\trgb: c => convertLabToLch(convertRgbToOklab(c), 'oklch'),\n\t\toklab: c => convertLabToLch(c, 'oklch')\n\t},\n\n\tparse: [parseOklch],\n\tserialize: c =>\n\t\t`oklch(${c.l !== undefined ? c.l : 'none'} ${\n\t\t\tc.c !== undefined ? c.c : 'none'\n\t\t} ${c.h !== undefined ? c.h : 'none'}${\n\t\t\tc.alpha < 1 ? ` / ${c.alpha}` : ''\n\t\t})`,\n\n\tranges: {\n\t\tl: [0, 1],\n\t\tc: [0, 0.4],\n\t\th: [0, 360]\n\t}\n};\n\nexport default definition;\n","import { Tok } from '../parse.js';\n\nfunction parseOklch(color, parsed) {\n\tif (!parsed || parsed[0] !== 'oklch') {\n\t\treturn undefined;\n\t}\n\tconst res = { mode: 'oklch' };\n\tconst [, l, c, h, alpha] = parsed;\n\tif (l.type !== Tok.None) {\n\t\tif (l.type === Tok.Hue) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.l = Math.min(\n\t\t\tMath.max(0, l.type === Tok.Number ? l.value : l.value / 100),\n\t\t\t1\n\t\t);\n\t}\n\tif (c.type !== Tok.None) {\n\t\tres.c = Math.max(\n\t\t\t0,\n\t\t\tc.type === Tok.Number ? c.value : (c.value * 0.4) / 100\n\t\t);\n\t}\n\tif (h.type !== Tok.None) {\n\t\tif (h.type === Tok.Percentage) {\n\t\t\treturn undefined;\n\t\t}\n\t\tres.h = h.value;\n\t}\n\tif (alpha.type !== Tok.None) {\n\t\tres.alpha = Math.min(\n\t\t\t1,\n\t\t\tMath.max(\n\t\t\t\t0,\n\t\t\t\talpha.type === Tok.Number ? alpha.value : alpha.value / 100\n\t\t\t)\n\t\t);\n\t}\n\n\treturn res;\n}\n\nexport default parseOklch;\n","/*\n\tConvert Display P3 values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nimport convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\n\nconst convertP3ToXyz65 = rgb => {\n\tlet { r, g, b, alpha } = convertRgbToLrgb(rgb);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.486570948648216 * r +\n\t\t\t0.265667693169093 * g +\n\t\t\t0.1982172852343625 * b,\n\t\ty:\n\t\t\t0.2289745640697487 * r +\n\t\t\t0.6917385218365062 * g +\n\t\t\t0.079286914093745 * b,\n\t\tz: 0.0 * r + 0.0451133818589026 * g + 1.043944368900976 * b\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertP3ToXyz65;\n","/*\n\tCIE XYZ D65 values to Display P3.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nimport convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\n\nconst convertXyz65ToP3 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = convertLrgbToRgb(\n\t\t{\n\t\t\tr:\n\t\t\t\tx * 2.4934969119414263 -\n\t\t\t\ty * 0.9313836179191242 -\n\t\t\t\t0.402710784450717 * z,\n\t\t\tg:\n\t\t\t\tx * -0.8294889695615749 +\n\t\t\t\ty * 1.7626640603183465 +\n\t\t\t\t0.0236246858419436 * z,\n\t\t\tb:\n\t\t\t\tx * 0.0358458302437845 -\n\t\t\t\ty * 0.0761723892680418 +\n\t\t\t\t0.9568845240076871 * z\n\t\t},\n\t\t'p3'\n\t);\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToP3;\n","import rgb from '../rgb/definition.js';\nimport convertP3ToXyz65 from './convertP3ToXyz65.js';\nimport convertXyz65ToP3 from './convertXyz65ToP3.js';\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'p3',\n\tparse: ['display-p3'],\n\tserialize: 'display-p3',\n\n\tfromMode: {\n\t\trgb: color => convertXyz65ToP3(convertRgbToXyz65(color)),\n\t\txyz65: convertXyz65ToP3\n\t},\n\n\ttoMode: {\n\t\trgb: color => convertXyz65ToRgb(convertP3ToXyz65(color)),\n\t\txyz65: convertP3ToXyz65\n\t}\n};\n\nexport default definition;\n","/*\n\tConvert CIE XYZ D50 values to ProPhoto RGB\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nconst gamma = v => {\n\tlet abs = Math.abs(v);\n\tif (abs >= 1 / 512) {\n\t\treturn Math.sign(v) * Math.pow(abs, 1 / 1.8);\n\t}\n\treturn 16 * v;\n};\n\nconst convertXyz50ToProphoto = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'prophoto',\n\t\tr: gamma(\n\t\t\tx * 1.3457868816471585 -\n\t\t\t\ty * 0.2555720873797946 -\n\t\t\t\t0.0511018649755453 * z\n\t\t),\n\t\tg: gamma(\n\t\t\tx * -0.5446307051249019 +\n\t\t\t\ty * 1.5082477428451466 +\n\t\t\t\t0.0205274474364214 * z\n\t\t),\n\t\tb: gamma(x * 0.0 + y * 0.0 + 1.2119675456389452 * z)\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz50ToProphoto;\n","/*\n\tConvert ProPhoto RGB values to CIE XYZ D50\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n*/\n\nconst linearize = (v = 0) => {\n\tlet abs = Math.abs(v);\n\tif (abs >= 16 / 512) {\n\t\treturn Math.sign(v) * Math.pow(abs, 1.8);\n\t}\n\treturn v / 16;\n};\n\nconst convertProphotoToXyz50 = prophoto => {\n\tlet r = linearize(prophoto.r);\n\tlet g = linearize(prophoto.g);\n\tlet b = linearize(prophoto.b);\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx:\n\t\t\t0.7977666449006423 * r +\n\t\t\t0.1351812974005331 * g +\n\t\t\t0.0313477341283922 * b,\n\t\ty:\n\t\t\t0.2880748288194013 * r +\n\t\t\t0.7118352342418731 * g +\n\t\t\t0.0000899369387256 * b,\n\t\tz: 0 * r + 0 * g + 0.8251046025104602 * b\n\t};\n\tif (prophoto.alpha !== undefined) {\n\t\tres.alpha = prophoto.alpha;\n\t}\n\treturn res;\n};\n\nexport default convertProphotoToXyz50;\n","import rgb from '../rgb/definition.js';\n\nimport convertXyz50ToProphoto from './convertXyz50ToProphoto.js';\nimport convertProphotoToXyz50 from './convertProphotoToXyz50.js';\n\nimport convertXyz50ToRgb from '../xyz50/convertXyz50ToRgb.js';\nimport convertRgbToXyz50 from '../xyz50/convertRgbToXyz50.js';\n\n/*\n\tProPhoto RGB Color space\n\n\tReferences:\n\t\t* https://en.wikipedia.org/wiki/ProPhoto_RGB_color_space\n */\n\nconst definition = {\n\t...rgb,\n\tmode: 'prophoto',\n\tparse: ['prophoto-rgb'],\n\tserialize: 'prophoto-rgb',\n\n\tfromMode: {\n\t\txyz50: convertXyz50ToProphoto,\n\t\trgb: color => convertXyz50ToProphoto(convertRgbToXyz50(color))\n\t},\n\n\ttoMode: {\n\t\txyz50: convertProphotoToXyz50,\n\t\trgb: color => convertXyz50ToRgb(convertProphotoToXyz50(color))\n\t}\n};\n\nexport default definition;\n","/*\n\tConvert CIE XYZ D65 values to Rec. 2020\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://www.itu.int/rec/R-REC-BT.2020/en\n*/\n\nconst α = 1.09929682680944;\nconst β = 0.018053968510807;\nconst gamma = v => {\n\tconst abs = Math.abs(v);\n\tif (abs > β) {\n\t\treturn (Math.sign(v) || 1) * (α * Math.pow(abs, 0.45) - (α - 1));\n\t}\n\treturn 4.5 * v;\n};\n\nconst convertXyz65ToRec2020 = ({ x, y, z, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'rec2020',\n\t\tr: gamma(\n\t\t\tx * 1.7166511879712683 -\n\t\t\t\ty * 0.3556707837763925 -\n\t\t\t\t0.2533662813736599 * z\n\t\t),\n\t\tg: gamma(\n\t\t\tx * -0.6666843518324893 +\n\t\t\t\ty * 1.6164812366349395 +\n\t\t\t\t0.0157685458139111 * z\n\t\t),\n\t\tb: gamma(\n\t\t\tx * 0.0176398574453108 -\n\t\t\t\ty * 0.0427706132578085 +\n\t\t\t\t0.9421031212354739 * z\n\t\t)\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToRec2020;\n","/*\n\tConvert Rec. 2020 values to CIE XYZ D65\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html\n\t\t* https://www.itu.int/rec/R-REC-BT.2020/en\n*/\n\nconst α = 1.09929682680944;\nconst β = 0.018053968510807;\n\nconst linearize = (v = 0) => {\n\tlet abs = Math.abs(v);\n\tif (abs < β * 4.5) {\n\t\treturn v / 4.5;\n\t}\n\treturn (Math.sign(v) || 1) * Math.pow((abs + α - 1) / α, 1 / 0.45);\n};\n\nconst convertRec2020ToXyz65 = rec2020 => {\n\tlet r = linearize(rec2020.r);\n\tlet g = linearize(rec2020.g);\n\tlet b = linearize(rec2020.b);\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.6369580483012911 * r +\n\t\t\t0.1446169035862083 * g +\n\t\t\t0.1688809751641721 * b,\n\t\ty:\n\t\t\t0.262700212011267 * r +\n\t\t\t0.6779980715188708 * g +\n\t\t\t0.059301716469862 * b,\n\t\tz: 0 * r + 0.0280726930490874 * g + 1.0609850577107909 * b\n\t};\n\tif (rec2020.alpha !== undefined) {\n\t\tres.alpha = rec2020.alpha;\n\t}\n\treturn res;\n};\n\nexport default convertRec2020ToXyz65;\n","import rgb from '../rgb/definition.js';\n\nimport convertXyz65ToRec2020 from './convertXyz65ToRec2020.js';\nimport convertRec2020ToXyz65 from './convertRec2020ToXyz65.js';\n\nimport convertRgbToXyz65 from '../xyz65/convertRgbToXyz65.js';\nimport convertXyz65ToRgb from '../xyz65/convertXyz65ToRgb.js';\n\nconst definition = {\n\t...rgb,\n\tmode: 'rec2020',\n\n\tfromMode: {\n\t\txyz65: convertXyz65ToRec2020,\n\t\trgb: color => convertXyz65ToRec2020(convertRgbToXyz65(color))\n\t},\n\n\ttoMode: {\n\t\txyz65: convertRec2020ToXyz65,\n\t\trgb: color => convertXyz65ToRgb(convertRec2020ToXyz65(color))\n\t},\n\n\tparse: ['rec2020'],\n\tserialize: 'rec2020'\n};\n\nexport default definition;\n","export const bias = 0.00379307325527544933;\nexport const bias_cbrt = Math.cbrt(bias);\n","import convertRgbToLrgb from '../lrgb/convertRgbToLrgb.js';\nimport { bias, bias_cbrt } from './constants.js';\n\nconst transfer = v => Math.cbrt(v) - bias_cbrt;\n\nconst convertRgbToXyb = color => {\n\tconst { r, g, b, alpha } = convertRgbToLrgb(color);\n\tconst l = transfer(0.3 * r + 0.622 * g + 0.078 * b + bias);\n\tconst m = transfer(0.23 * r + 0.692 * g + 0.078 * b + bias);\n\tconst s = transfer(\n\t\t0.24342268924547819 * r +\n\t\t\t0.20476744424496821 * g +\n\t\t\t0.5518098665095536 * b +\n\t\t\tbias\n\t);\n\tconst res = {\n\t\tmode: 'xyb',\n\t\tx: (l - m) / 2,\n\t\ty: (l + m) / 2,\n\t\t/* Apply default chroma from luma (subtract Y from B) */\n\t\tb: s - (l + m) / 2\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertRgbToXyb;\n","import convertLrgbToRgb from '../lrgb/convertLrgbToRgb.js';\nimport { bias, bias_cbrt } from './constants.js';\n\nconst transfer = v => Math.pow(v + bias_cbrt, 3);\n\nconst convertXybToRgb = ({ x, y, b, alpha }) => {\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (b === undefined) b = 0;\n\tconst l = transfer(x + y) - bias;\n\tconst m = transfer(y - x) - bias;\n\t/* Account for chroma from luma: add Y back to B */\n\tconst s = transfer(b + y) - bias;\n\n\tconst res = convertLrgbToRgb({\n\t\tr:\n\t\t\t11.031566904639861 * l -\n\t\t\t9.866943908131562 * m -\n\t\t\t0.16462299650829934 * s,\n\t\tg:\n\t\t\t-3.2541473810744237 * l +\n\t\t\t4.418770377582723 * m -\n\t\t\t0.16462299650829934 * s,\n\t\tb:\n\t\t\t-3.6588512867136815 * l +\n\t\t\t2.7129230459360922 * m +\n\t\t\t1.9459282407775895 * s\n\t});\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertXybToRgb;\n","import { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\nimport convertRgbToXyb from './convertRgbToXyb.js';\nimport convertXybToRgb from './convertXybToRgb.js';\n\n/*\n\tThe XYB color space, used in JPEG XL.\n\tReference: https://ds.jpeg.org/whitepapers/jpeg-xl-whitepaper.pdf\n*/\n\nconst definition = {\n\tmode: 'xyb',\n\tchannels: ['x', 'y', 'b', 'alpha'],\n\tparse: ['--xyb'],\n\tserialize: '--xyb',\n\n\ttoMode: {\n\t\trgb: convertXybToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToXyb\n\t},\n\n\tranges: {\n\t\tx: [-0.0154, 0.0281],\n\t\ty: [0, 0.8453],\n\t\tb: [-0.2778, 0.388]\n\t},\n\n\tinterpolate: {\n\t\tx: interpolatorLinear,\n\t\ty: interpolatorLinear,\n\t\tb: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","/*\n\tThe XYZ D50 color space\n\t-----------------------\n */\n\nimport convertXyz50ToRgb from './convertXyz50ToRgb.js';\nimport convertXyz50ToLab from '../lab/convertXyz50ToLab.js';\nimport convertRgbToXyz50 from './convertRgbToXyz50.js';\nimport convertLabToXyz50 from '../lab/convertLabToXyz50.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'xyz50',\n\tparse: ['xyz-d50'],\n\tserialize: 'xyz-d50',\n\n\ttoMode: {\n\t\trgb: convertXyz50ToRgb,\n\t\tlab: convertXyz50ToLab\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToXyz50,\n\t\tlab: convertLabToXyz50\n\t},\n\n\tchannels: ['x', 'y', 'z', 'alpha'],\n\n\tranges: {\n\t\tx: [0, 0.964],\n\t\ty: [0, 0.999],\n\t\tz: [0, 0.825]\n\t},\n\n\tinterpolate: {\n\t\tx: interpolatorLinear,\n\t\ty: interpolatorLinear,\n\t\tz: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","/*\n\tThe XYZ D65 color space\n\t-----------------------\n */\n\nimport convertXyz65ToRgb from './convertXyz65ToRgb.js';\nimport convertRgbToXyz65 from './convertRgbToXyz65.js';\n\nimport convertXyz65ToXyz50 from './convertXyz65ToXyz50.js';\nimport convertXyz50ToXyz65 from './convertXyz50ToXyz65.js';\n\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\nconst definition = {\n\tmode: 'xyz65',\n\n\ttoMode: {\n\t\trgb: convertXyz65ToRgb,\n\t\txyz50: convertXyz65ToXyz50\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToXyz65,\n\t\txyz50: convertXyz50ToXyz65\n\t},\n\n\tranges: {\n\t\tx: [0, 0.95],\n\t\ty: [0, 1],\n\t\tz: [0, 1.088]\n\t},\n\n\tchannels: ['x', 'y', 'z', 'alpha'],\n\n\tparse: ['xyz', 'xyz-d65'],\n\tserialize: 'xyz-d65',\n\n\tinterpolate: {\n\t\tx: interpolatorLinear,\n\t\ty: interpolatorLinear,\n\t\tz: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","/*\n\tChromatic adaptation of CIE XYZ from D65 to D50 white point\n\tusing the Bradford method.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html\t\n*/\n\nconst convertXyz65ToXyz50 = xyz65 => {\n\tlet { x, y, z, alpha } = xyz65;\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'xyz50',\n\t\tx:\n\t\t\t1.0479298208405488 * x +\n\t\t\t0.0229467933410191 * y -\n\t\t\t0.0501922295431356 * z,\n\t\ty:\n\t\t\t0.0296278156881593 * x +\n\t\t\t0.990434484573249 * y -\n\t\t\t0.0170738250293851 * z,\n\t\tz:\n\t\t\t-0.0092430581525912 * x +\n\t\t\t0.0150551448965779 * y +\n\t\t\t0.7518742899580008 * z\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz65ToXyz50;\n","/*\n\tChromatic adaptation of CIE XYZ from D50 to D65 white point\n\tusing the Bradford method.\n\n\tReferences:\n\t\t* https://drafts.csswg.org/css-color/#color-conversion-code\n\t\t* http://www.brucelindbloom.com/index.html?Eqn_ChromAdapt.html\t\n*/\n\nconst convertXyz50ToXyz65 = xyz50 => {\n\tlet { x, y, z, alpha } = xyz50;\n\tif (x === undefined) x = 0;\n\tif (y === undefined) y = 0;\n\tif (z === undefined) z = 0;\n\tlet res = {\n\t\tmode: 'xyz65',\n\t\tx:\n\t\t\t0.9554734527042182 * x -\n\t\t\t0.0230985368742614 * y +\n\t\t\t0.0632593086610217 * z,\n\t\ty:\n\t\t\t-0.0283697069632081 * x +\n\t\t\t1.0099954580058226 * y +\n\t\t\t0.021041398966943 * z,\n\t\tz:\n\t\t\t0.0123140016883199 * x -\n\t\t\t0.0205076964334779 * y +\n\t\t\t1.3303659366080753 * z\n\t};\n\tif (alpha !== undefined) {\n\t\tres.alpha = alpha;\n\t}\n\treturn res;\n};\n\nexport default convertXyz50ToXyz65;\n","import convertRgbToYiq from './convertRgbToYiq.js';\nimport convertYiqToRgb from './convertYiqToRgb.js';\nimport { interpolatorLinear } from '../interpolate/linear.js';\nimport { fixupAlpha } from '../fixup/alpha.js';\n\n/*\n\tYIQ Color Space\n\n\tReferences\n\t----------\n\n\tWikipedia:\n\t\thttps://en.wikipedia.org/wiki/YIQ\n\n\t\"Measuring perceived color difference using YIQ NTSC\n\ttransmission color space in mobile applications\"\n\t\t\n\t\tby Yuriy Kotsarenko, Fernando Ramos in:\n\t\tProgramación Matemática y Software (2010) \n\n\tAvailable at:\n\t\t\n\t\thttp://www.progmat.uaem.mx:8080/artVol2Num2/Articulo3Vol2Num2.pdf\n */\n\nconst definition = {\n\tmode: 'yiq',\n\n\ttoMode: {\n\t\trgb: convertYiqToRgb\n\t},\n\n\tfromMode: {\n\t\trgb: convertRgbToYiq\n\t},\n\n\tchannels: ['y', 'i', 'q', 'alpha'],\n\n\tparse: ['--yiq'],\n\tserialize: '--yiq',\n\n\tranges: {\n\t\ti: [-0.595, 0.595],\n\t\tq: [-0.522, 0.522]\n\t},\n\n\tinterpolate: {\n\t\ty: interpolatorLinear,\n\t\ti: interpolatorLinear,\n\t\tq: interpolatorLinear,\n\t\talpha: { use: interpolatorLinear, fixup: fixupAlpha }\n\t}\n};\n\nexport default definition;\n","const convertYiqToRgb = ({ y, i, q, alpha }) => {\n\tif (y === undefined) y = 0;\n\tif (i === undefined) i = 0;\n\tif (q === undefined) q = 0;\n\tconst res = {\n\t\tmode: 'rgb',\n\t\tr: y + 0.95608445 * i + 0.6208885 * q,\n\t\tg: y - 0.27137664 * i - 0.6486059 * q,\n\t\tb: y - 1.10561724 * i + 1.70250126 * q\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertYiqToRgb;\n","const convertRgbToYiq = ({ r, g, b, alpha }) => {\n\tif (r === undefined) r = 0;\n\tif (g === undefined) g = 0;\n\tif (b === undefined) b = 0;\n\tconst res = {\n\t\tmode: 'yiq',\n\t\ty: 0.29889531 * r + 0.58662247 * g + 0.11448223 * b,\n\t\ti: 0.59597799 * r - 0.2741761 * g - 0.32180189 * b,\n\t\tq: 0.21147017 * r - 0.52261711 * g + 0.31114694 * b\n\t};\n\tif (alpha !== undefined) res.alpha = alpha;\n\treturn res;\n};\n\nexport default convertRgbToYiq;\n","import converter from './converter.js';\nimport round from './round.js';\nimport prepare from './_prepare.js';\nimport { getMode } from './modes.js';\n\nlet twoDecimals = round(2);\n\nconst clamp = value => Math.max(0, Math.min(1, value || 0));\nconst fixup = value => Math.round(clamp(value) * 255);\n\nconst rgb = converter('rgb');\nconst hsl = converter('hsl');\n\nexport const serializeHex = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet r = fixup(color.r);\n\tlet g = fixup(color.g);\n\tlet b = fixup(color.b);\n\n\treturn '#' + ((1 << 24) | (r << 16) | (g << 8) | b).toString(16).slice(1);\n};\n\nexport const serializeHex8 = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet a = fixup(color.alpha !== undefined ? color.alpha : 1);\n\treturn serializeHex(color) + ((1 << 8) | a).toString(16).slice(1);\n};\n\nexport const serializeRgb = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tlet r = fixup(color.r);\n\tlet g = fixup(color.g);\n\tlet b = fixup(color.b);\n\n\tif (color.alpha === undefined || color.alpha === 1) {\n\t\t// opaque color\n\t\treturn `rgb(${r}, ${g}, ${b})`;\n\t} else {\n\t\t// transparent color\n\t\treturn `rgba(${r}, ${g}, ${b}, ${twoDecimals(clamp(color.alpha))})`;\n\t}\n};\n\nexport const serializeHsl = color => {\n\tif (color === undefined) {\n\t\treturn undefined;\n\t}\n\n\tconst h = twoDecimals(color.h || 0);\n\tconst s = twoDecimals(clamp(color.s) * 100) + '%';\n\tconst l = twoDecimals(clamp(color.l) * 100) + '%';\n\n\tif (color.alpha === undefined || color.alpha === 1) {\n\t\t// opaque color\n\t\treturn `hsl(${h}, ${s}, ${l})`;\n\t} else {\n\t\t// transparent color\n\t\treturn `hsla(${h}, ${s}, ${l}, ${twoDecimals(clamp(color.alpha))})`;\n\t}\n};\n\nexport const formatCss = c => {\n\tconst color = prepare(c);\n\tif (!color) {\n\t\treturn undefined;\n\t}\n\tconst def = getMode(color.mode);\n\tif (!def.serialize || typeof def.serialize === 'string') {\n\t\tlet res = `color(${def.serialize || `--${color.mode}`} `;\n\t\tdef.channels.forEach((ch, i) => {\n\t\t\tif (ch !== 'alpha') {\n\t\t\t\tres +=\n\t\t\t\t\t(i ? ' ' : '') +\n\t\t\t\t\t(color[ch] !== undefined ? color[ch] : 'none');\n\t\t\t}\n\t\t});\n\t\tif (color.alpha !== undefined && color.alpha < 1) {\n\t\t\tres += ` / ${color.alpha}`;\n\t\t}\n\t\treturn res + ')';\n\t}\n\tif (typeof def.serialize === 'function') {\n\t\treturn def.serialize(color);\n\t}\n\treturn undefined;\n};\n\nexport const formatHex = c => serializeHex(rgb(c));\nexport const formatHex8 = c => serializeHex8(rgb(c));\nexport const formatRgb = c => serializeRgb(rgb(c));\nexport const formatHsl = c => serializeHsl(hsl(c));\n","// Color space definitions\nimport modeA98 from './a98/definition.js';\nimport modeCubehelix from './cubehelix/definition.js';\nimport modeDlab from './dlab/definition.js';\nimport modeDlch from './dlch/definition.js';\nimport modeHsi from './hsi/definition.js';\nimport modeHsl from './hsl/definition.js';\nimport modeHsv from './hsv/definition.js';\nimport modeHwb from './hwb/definition.js';\nimport modeItp from './itp/definition.js';\nimport modeJab from './jab/definition.js';\nimport modeJch from './jch/definition.js';\nimport modeLab from './lab/definition.js';\nimport modeLab65 from './lab65/definition.js';\nimport modeLch from './lch/definition.js';\nimport modeLch65 from './lch65/definition.js';\nimport modeLchuv from './lchuv/definition.js';\nimport modeLrgb from './lrgb/definition.js';\nimport modeLuv from './luv/definition.js';\nimport modeOkhsl from './okhsl/modeOkhsl.js';\nimport modeOkhsv from './okhsv/modeOkhsv.js';\nimport modeOklab from './oklab/definition.js';\nimport modeOklch from './oklch/definition.js';\nimport modeP3 from './p3/definition.js';\nimport modeProphoto from './prophoto/definition.js';\nimport modeRec2020 from './rec2020/definition.js';\nimport modeRgb from './rgb/definition.js';\nimport modeXyb from './xyb/definition.js';\nimport modeXyz50 from './xyz50/definition.js';\nimport modeXyz65 from './xyz65/definition.js';\nimport modeYiq from './yiq/definition.js';\nimport { useMode } from './modes.js';\n\nexport { default as converter } from './converter.js';\n\nexport {\n\tserializeHex,\n\tserializeHex8,\n\tserializeRgb,\n\tserializeHsl,\n\tformatHex,\n\tformatHex8,\n\tformatRgb,\n\tformatHsl,\n\tformatCss\n} from './formatter.js';\n\nexport { default as colorsNamed } from './colors/named.js';\nexport { default as blend } from './blend.js';\nexport { default as random } from './random.js';\n\nexport {\n\tfixupHueShorter,\n\tfixupHueLonger,\n\tfixupHueIncreasing,\n\tfixupHueDecreasing\n} from './fixup/hue.js';\n\nexport { fixupAlpha } from './fixup/alpha.js';\n\nexport {\n\tmapper,\n\tmapAlphaMultiply,\n\tmapAlphaDivide,\n\tmapTransferLinear,\n\tmapTransferGamma\n} from './map.js';\n\nexport { average, averageAngle, averageNumber } from './average.js';\n\nexport { default as round } from './round.js';\nexport {\n\tinterpolate,\n\tinterpolateWith,\n\tinterpolateWithPremultipliedAlpha\n} from './interpolate/interpolate.js';\n\nexport { interpolatorLinear } from './interpolate/linear.js';\n\nexport { interpolatorPiecewise } from './interpolate/piecewise.js';\n\nexport {\n\tinterpolatorSplineBasis,\n\tinterpolatorSplineBasisClosed\n} from './interpolate/splineBasis.js';\n\nexport {\n\tinterpolatorSplineNatural,\n\tinterpolatorSplineNaturalClosed\n} from './interpolate/splineNatural.js';\n\nexport {\n\tinterpolatorSplineMonotone,\n\tinterpolatorSplineMonotone2,\n\tinterpolatorSplineMonotoneClosed\n} from './interpolate/splineMonotone.js';\n\nexport { lerp, unlerp, blerp, trilerp } from './interpolate/lerp.js';\nexport { default as samples } from './samples.js';\nexport {\n\tdisplayable,\n\tinGamut,\n\tclampRgb,\n\tclampChroma,\n\tclampGamut,\n\ttoGamut\n} from './clamp.js';\nexport { default as nearest } from './nearest.js';\nexport { useMode, getMode, useParser, removeParser } from './modes.js';\nexport { default as parse } from './parse.js';\n\nexport {\n\tdifferenceEuclidean,\n\tdifferenceCie76,\n\tdifferenceCie94,\n\tdifferenceCiede2000,\n\tdifferenceCmc,\n\tdifferenceHyab,\n\tdifferenceHueSaturation,\n\tdifferenceHueChroma,\n\tdifferenceHueNaive,\n\tdifferenceKotsarenkoRamos,\n\tdifferenceItp\n} from './difference.js';\n\nexport {\n\tfilterBrightness,\n\tfilterContrast,\n\tfilterSepia,\n\tfilterInvert,\n\tfilterSaturate,\n\tfilterGrayscale,\n\tfilterHueRotate\n} from './filter.js';\n\nexport {\n\tfilterDeficiencyProt,\n\tfilterDeficiencyDeuter,\n\tfilterDeficiencyTrit\n} from './deficiency.js';\n\n// Easings\nexport { default as easingMidpoint } from './easing/midpoint.js';\nexport {\n\teasingSmoothstep,\n\teasingSmoothstepInverse\n} from './easing/smoothstep.js';\nexport { default as easingSmootherstep } from './easing/smootherstep.js';\nexport { default as easingInOutSine } from './easing/inOutSine.js';\nexport { default as easingGamma } from './easing/gamma.js';\n\nexport {\n\tluminance as wcagLuminance,\n\tcontrast as wcagContrast\n} from './wcag.js';\n\nexport { default as parseHsl } from './hsl/parseHsl.js';\nexport { default as parseHwb } from './hwb/parseHwb.js';\nexport { default as parseLab } from './lab/parseLab.js';\nexport { default as parseLch } from './lch/parseLch.js';\nexport { default as parseNamed } from './rgb/parseNamed.js';\nexport { default as parseTransparent } from './rgb/parseTransparent.js';\nexport { default as parseHex } from './rgb/parseHex.js';\nexport { default as parseRgb } from './rgb/parseRgb.js';\nexport { default as parseHslLegacy } from './hsl/parseHslLegacy.js';\nexport { default as parseRgbLegacy } from './rgb/parseRgbLegacy.js';\nexport { default as parseOklab } from './oklab/parseOklab.js';\nexport { default as parseOklch } from './oklch/parseOklch.js';\n\nexport { default as convertA98ToXyz65 } from './a98/convertA98ToXyz65.js';\nexport { default as convertCubehelixToRgb } from './cubehelix/convertCubehelixToRgb.js';\nexport { default as convertDlchToLab65 } from './dlch/convertDlchToLab65.js';\nexport { default as convertHsiToRgb } from './hsi/convertHsiToRgb.js';\nexport { default as convertHslToRgb } from './hsl/convertHslToRgb.js';\nexport { default as convertHsvToRgb } from './hsv/convertHsvToRgb.js';\nexport { default as convertHwbToRgb } from './hwb/convertHwbToRgb.js';\nexport { default as convertItpToXyz65 } from './itp/convertItpToXyz65.js';\nexport { default as convertJabToJch } from './jch/convertJabToJch.js';\nexport { default as convertJabToRgb } from './jab/convertJabToRgb.js';\nexport { default as convertJabToXyz65 } from './jab/convertJabToXyz65.js';\nexport { default as convertJchToJab } from './jch/convertJchToJab.js';\nexport { default as convertLab65ToDlch } from './dlch/convertLab65ToDlch.js';\nexport { default as convertLab65ToRgb } from './lab65/convertLab65ToRgb.js';\nexport { default as convertLab65ToXyz65 } from './lab65/convertLab65ToXyz65.js';\nexport { default as convertLabToLch } from './lch/convertLabToLch.js';\nexport { default as convertLabToRgb } from './lab/convertLabToRgb.js';\nexport { default as convertLabToXyz50 } from './lab/convertLabToXyz50.js';\nexport { default as convertLchToLab } from './lch/convertLchToLab.js';\nexport { default as convertLchuvToLuv } from './lchuv/convertLchuvToLuv.js';\nexport { default as convertLrgbToOklab } from './oklab/convertLrgbToOklab.js';\nexport { default as convertLrgbToRgb } from './lrgb/convertLrgbToRgb.js';\nexport { default as convertLuvToLchuv } from './lchuv/convertLuvToLchuv.js';\nexport { default as convertLuvToXyz50 } from './luv/convertLuvToXyz50.js';\nexport { default as convertOkhslToOklab } from './okhsl/convertOkhslToOklab.js';\nexport { default as convertOkhsvToOklab } from './okhsv/convertOkhsvToOklab.js';\nexport { default as convertOklabToLrgb } from './oklab/convertOklabToLrgb.js';\nexport { default as convertOklabToOkhsl } from './okhsl/convertOklabToOkhsl.js';\nexport { default as convertOklabToOkhsv } from './okhsv/convertOklabToOkhsv.js';\nexport { default as convertOklabToRgb } from './oklab/convertOklabToRgb.js';\nexport { default as convertP3ToXyz65 } from './p3/convertP3ToXyz65.js';\nexport { default as convertProphotoToXyz50 } from './prophoto/convertProphotoToXyz50.js';\nexport { default as convertRec2020ToXyz65 } from './rec2020/convertRec2020ToXyz65.js';\nexport { default as convertRgbToCubehelix } from './cubehelix/convertRgbToCubehelix.js';\nexport { default as convertRgbToHsi } from './hsi/convertRgbToHsi.js';\nexport { default as convertRgbToHsl } from './hsl/convertRgbToHsl.js';\nexport { default as convertRgbToHsv } from './hsv/convertRgbToHsv.js';\nexport { default as convertRgbToHwb } from './hwb/convertRgbToHwb.js';\nexport { default as convertRgbToJab } from './jab/convertRgbToJab.js';\nexport { default as convertRgbToLab } from './lab/convertRgbToLab.js';\nexport { default as convertRgbToLab65 } from './lab65/convertRgbToLab65.js';\nexport { default as convertRgbToLrgb } from './lrgb/convertRgbToLrgb.js';\nexport { default as convertRgbToOklab } from './oklab/convertRgbToOklab.js';\nexport { default as convertRgbToXyb } from './xyb/convertRgbToXyb.js';\nexport { default as convertRgbToXyz50 } from './xyz50/convertRgbToXyz50.js';\nexport { default as convertRgbToXyz65 } from './xyz65/convertRgbToXyz65.js';\nexport { default as convertRgbToYiq } from './yiq/convertRgbToYiq.js';\nexport { default as convertXybToRgb } from './xyb/convertXybToRgb.js';\nexport { default as convertXyz50ToLab } from './lab/convertXyz50ToLab.js';\nexport { default as convertXyz50ToLuv } from './luv/convertXyz50ToLuv.js';\nexport { default as convertXyz50ToProphoto } from './prophoto/convertXyz50ToProphoto.js';\nexport { default as convertXyz50ToRgb } from './xyz50/convertXyz50ToRgb.js';\nexport { default as convertXyz50ToXyz65 } from './xyz65/convertXyz50ToXyz65.js';\nexport { default as convertXyz65ToA98 } from './a98/convertXyz65ToA98.js';\nexport { default as convertXyz65ToItp } from './itp/convertXyz65ToItp.js';\nexport { default as convertXyz65ToJab } from './jab/convertXyz65ToJab.js';\nexport { default as convertXyz65ToLab65 } from './lab65/convertXyz65ToLab65.js';\nexport { default as convertXyz65ToP3 } from './p3/convertXyz65ToP3.js';\nexport { default as convertXyz65ToRec2020 } from './rec2020/convertXyz65ToRec2020.js';\nexport { default as convertXyz65ToRgb } from './xyz65/convertXyz65ToRgb.js';\nexport { default as convertXyz65ToXyz50 } from './xyz65/convertXyz65ToXyz50.js';\nexport { default as convertYiqToRgb } from './yiq/convertYiqToRgb.js';\n\nexport {\n\tmodeA98,\n\tmodeCubehelix,\n\tmodeDlab,\n\tmodeDlch,\n\tmodeHsi,\n\tmodeHsl,\n\tmodeHsv,\n\tmodeHwb,\n\tmodeItp,\n\tmodeJab,\n\tmodeJch,\n\tmodeLab,\n\tmodeLab65,\n\tmodeLch,\n\tmodeLch65,\n\tmodeLchuv,\n\tmodeLrgb,\n\tmodeLuv,\n\tmodeOkhsl,\n\tmodeOkhsv,\n\tmodeOklab,\n\tmodeOklch,\n\tmodeP3,\n\tmodeProphoto,\n\tmodeRec2020,\n\tmodeRgb,\n\tmodeXyb,\n\tmodeXyz50,\n\tmodeXyz65,\n\tmodeYiq\n};\n\nexport const a98 = useMode(modeA98);\nexport const cubehelix = useMode(modeCubehelix);\nexport const dlab = useMode(modeDlab);\nexport const dlch = useMode(modeDlch);\nexport const hsi = useMode(modeHsi);\nexport const hsl = useMode(modeHsl);\nexport const hsv = useMode(modeHsv);\nexport const hwb = useMode(modeHwb);\nexport const itp = useMode(modeItp);\nexport const jab = useMode(modeJab);\nexport const jch = useMode(modeJch);\nexport const lab = useMode(modeLab);\nexport const lab65 = useMode(modeLab65);\nexport const lch = useMode(modeLch);\nexport const lch65 = useMode(modeLch65);\nexport const lchuv = useMode(modeLchuv);\nexport const lrgb = useMode(modeLrgb);\nexport const luv = useMode(modeLuv);\nexport const okhsl = useMode(modeOkhsl);\nexport const okhsv = useMode(modeOkhsv);\nexport const oklab = useMode(modeOklab);\nexport const oklch = useMode(modeOklch);\nexport const p3 = useMode(modeP3);\nexport const prophoto = useMode(modeProphoto);\nexport const rec2020 = useMode(modeRec2020);\nexport const rgb = useMode(modeRgb);\nexport const xyb = useMode(modeXyb);\nexport const xyz50 = useMode(modeXyz50);\nexport const xyz65 = useMode(modeXyz65);\nexport const yiq = useMode(modeYiq);\n","'use strict';\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, options) {\n\treturn (options.clone !== false && options.isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, options)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, options) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, options)\n\t})\n}\n\nfunction getMergeFunction(key, options) {\n\tif (!options.customMerge) {\n\t\treturn deepmerge\n\t}\n\tvar customMerge = options.customMerge(key);\n\treturn typeof customMerge === 'function' ? customMerge : deepmerge\n}\n\nfunction getEnumerableOwnPropertySymbols(target) {\n\treturn Object.getOwnPropertySymbols\n\t\t? Object.getOwnPropertySymbols(target).filter(function(symbol) {\n\t\t\treturn Object.propertyIsEnumerable.call(target, symbol)\n\t\t})\n\t\t: []\n}\n\nfunction getKeys(target) {\n\treturn Object.keys(target).concat(getEnumerableOwnPropertySymbols(target))\n}\n\nfunction propertyIsOnObject(object, property) {\n\ttry {\n\t\treturn property in object\n\t} catch(_) {\n\t\treturn false\n\t}\n}\n\n// Protects from prototype poisoning and unexpected merging up the prototype chain.\nfunction propertyIsUnsafe(target, key) {\n\treturn propertyIsOnObject(target, key) // Properties are safe to merge if they don't exist in the target yet,\n\t\t&& !(Object.hasOwnProperty.call(target, key) // unsafe if they exist up the prototype chain,\n\t\t\t&& Object.propertyIsEnumerable.call(target, key)) // and also unsafe if they're nonenumerable.\n}\n\nfunction mergeObject(target, source, options) {\n\tvar destination = {};\n\tif (options.isMergeableObject(target)) {\n\t\tgetKeys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], options);\n\t\t});\n\t}\n\tgetKeys(source).forEach(function(key) {\n\t\tif (propertyIsUnsafe(target, key)) {\n\t\t\treturn\n\t\t}\n\n\t\tif (propertyIsOnObject(target, key) && options.isMergeableObject(source[key])) {\n\t\t\tdestination[key] = getMergeFunction(key, options)(target[key], source[key], options);\n\t\t} else {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], options);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, options) {\n\toptions = options || {};\n\toptions.arrayMerge = options.arrayMerge || defaultArrayMerge;\n\toptions.isMergeableObject = options.isMergeableObject || isMergeableObject;\n\t// cloneUnlessOtherwiseSpecified is added to `options` so that custom arrayMerge()\n\t// implementations can use it. The caller may not replace it.\n\toptions.cloneUnlessOtherwiseSpecified = cloneUnlessOtherwiseSpecified;\n\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, options)\n\t} else if (sourceIsArray) {\n\t\treturn options.arrayMerge(target, source, options)\n\t} else {\n\t\treturn mergeObject(target, source, options)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, options) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, options)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nmodule.exports = deepmerge_1;\n","var has = Object.prototype.hasOwnProperty;\n\nfunction find(iter, tar, key) {\n\tfor (key of iter.keys()) {\n\t\tif (dequal(key, tar)) return key;\n\t}\n}\n\nfunction dequal(foo, bar) {\n\tvar ctor, len, tmp;\n\tif (foo === bar) return true;\n\n\tif (foo && bar && (ctor=foo.constructor) === bar.constructor) {\n\t\tif (ctor === Date) return foo.getTime() === bar.getTime();\n\t\tif (ctor === RegExp) return foo.toString() === bar.toString();\n\n\t\tif (ctor === Array) {\n\t\t\tif ((len=foo.length) === bar.length) {\n\t\t\t\twhile (len-- && dequal(foo[len], bar[len]));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (ctor === Set) {\n\t\t\tif (foo.size !== bar.size) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (len of foo) {\n\t\t\t\ttmp = len;\n\t\t\t\tif (tmp && typeof tmp === 'object') {\n\t\t\t\t\ttmp = find(bar, tmp);\n\t\t\t\t\tif (!tmp) return false;\n\t\t\t\t}\n\t\t\t\tif (!bar.has(tmp)) return false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tif (ctor === Map) {\n\t\t\tif (foo.size !== bar.size) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfor (len of foo) {\n\t\t\t\ttmp = len[0];\n\t\t\t\tif (tmp && typeof tmp === 'object') {\n\t\t\t\t\ttmp = find(bar, tmp);\n\t\t\t\t\tif (!tmp) return false;\n\t\t\t\t}\n\t\t\t\tif (!dequal(len[1], bar.get(tmp))) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tif (ctor === ArrayBuffer) {\n\t\t\tfoo = new Uint8Array(foo);\n\t\t\tbar = new Uint8Array(bar);\n\t\t} else if (ctor === DataView) {\n\t\t\tif ((len=foo.byteLength) === bar.byteLength) {\n\t\t\t\twhile (len-- && foo.getInt8(len) === bar.getInt8(len));\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (ArrayBuffer.isView(foo)) {\n\t\t\tif ((len=foo.byteLength) === bar.byteLength) {\n\t\t\t\twhile (len-- && foo[len] === bar[len]);\n\t\t\t}\n\t\t\treturn len === -1;\n\t\t}\n\n\t\tif (!ctor || typeof foo === 'object') {\n\t\t\tlen = 0;\n\t\t\tfor (ctor in foo) {\n\t\t\t\tif (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;\n\t\t\t\tif (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;\n\t\t\t}\n\t\t\treturn Object.keys(bar).length === len;\n\t\t}\n\t}\n\n\treturn foo !== foo && bar !== bar;\n}\n\nexports.dequal = dequal;","\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\nfunction makeEmptyFunction(arg) {\n  return function () {\n    return arg;\n  };\n}\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\n\n\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\n\nemptyFunction.thatReturnsThis = function () {\n  return this;\n};\n\nemptyFunction.thatReturnsArgument = function (arg) {\n  return arg;\n};\n\nmodule.exports = emptyFunction;","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n'use strict';\n\nvar validateFormat = process.env.NODE_ENV !== \"production\" ? function (format) {\n  if (format === undefined) {\n    throw new Error('invariant(...): Second argument must be a string.');\n  }\n} : function (format) {};\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments to provide\n * information about what broke and what you were expecting.\n *\n * The invariant message will be stripped in production, but the invariant will\n * remain to ensure logic does not differ in production.\n */\n\nfunction invariant(condition, format) {\n  for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n    args[_key - 2] = arguments[_key];\n  }\n\n  validateFormat(format);\n\n  if (!condition) {\n    var error;\n\n    if (format === undefined) {\n      error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n    } else {\n      var argIndex = 0;\n      error = new Error(format.replace(/%s/g, function () {\n        return String(args[argIndex++]);\n      }));\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // Skip invariant's own stack frame.\n\n    throw error;\n  }\n}\n\nmodule.exports = invariant;","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n'use strict';\n\nvar emptyFunction = require(\"./emptyFunction\");\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\n\nfunction printWarning(format) {\n  for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    args[_key - 1] = arguments[_key];\n  }\n\n  var argIndex = 0;\n  var message = 'Warning: ' + format.replace(/%s/g, function () {\n    return args[argIndex++];\n  });\n\n  if (typeof console !== 'undefined') {\n    console.error(message);\n  }\n\n  try {\n    // --- Welcome to debugging React ---\n    // This error was thrown as a convenience so that you can use this stack\n    // to find the callsite that caused this warning to fire.\n    throw new Error(message);\n  } catch (x) {}\n}\n\nvar warning = process.env.NODE_ENV !== \"production\" ? function (condition, format) {\n  if (format === undefined) {\n    throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n  }\n\n  if (!condition) {\n    for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n      args[_key2 - 2] = arguments[_key2];\n    }\n\n    printWarning.apply(void 0, [format].concat(args));\n  }\n} : emptyFunction;\nmodule.exports = warning;","/* eslint-disable no-var, prefer-template */\nvar uppercasePattern = /[A-Z]/g\nvar msPattern = /^ms-/\nvar cache = {}\n\nfunction toHyphenLower(match) {\n  return '-' + match.toLowerCase()\n}\n\nfunction hyphenateStyleName(name) {\n  if (cache.hasOwnProperty(name)) {\n    return cache[name]\n  }\n\n  var hName = name.replace(uppercasePattern, toHyphenLower)\n  return (cache[name] = msPattern.test(hName) ? '-' + hName : hName)\n}\n\nexport default hyphenateStyleName\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = createPrefixer;\n\nvar _prefixProperty = require('./utils/prefixProperty');\n\nvar _prefixProperty2 = _interopRequireDefault(_prefixProperty);\n\nvar _prefixValue = require('./utils/prefixValue');\n\nvar _prefixValue2 = _interopRequireDefault(_prefixValue);\n\nvar _addNewValuesOnly = require('./utils/addNewValuesOnly');\n\nvar _addNewValuesOnly2 = _interopRequireDefault(_addNewValuesOnly);\n\nvar _isObject = require('./utils/isObject');\n\nvar _isObject2 = _interopRequireDefault(_isObject);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction createPrefixer(_ref) {\n  var prefixMap = _ref.prefixMap,\n      plugins = _ref.plugins;\n\n  return function prefix(style) {\n    for (var property in style) {\n      var value = style[property];\n\n      // handle nested objects\n      if ((0, _isObject2.default)(value)) {\n        style[property] = prefix(value);\n        // handle array values\n      } else if (Array.isArray(value)) {\n        var combinedValue = [];\n\n        for (var i = 0, len = value.length; i < len; ++i) {\n          var processedValue = (0, _prefixValue2.default)(plugins, property, value[i], style, prefixMap);\n\n          (0, _addNewValuesOnly2.default)(combinedValue, processedValue || value[i]);\n        }\n\n        // only modify the value if it was touched\n        // by any plugin to prevent unnecessary mutations\n        if (combinedValue.length > 0) {\n          style[property] = combinedValue;\n        }\n      } else {\n        var _processedValue = (0, _prefixValue2.default)(plugins, property, value, style, prefixMap);\n\n        // only modify the value if it was touched\n        // by any plugin to prevent unnecessary mutations\n        if (_processedValue) {\n          style[property] = _processedValue;\n        }\n\n        style = (0, _prefixProperty2.default)(prefixMap, property, style);\n      }\n    }\n\n    return style;\n  };\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = crossFade;\n\nvar _cssInJsUtils = require('css-in-js-utils');\n\nvar CROSS_FADE_REGEX = /cross-fade\\(/g;\n// http://caniuse.com/#search=cross-fade\nvar prefixes = ['-webkit-', ''];\n\nfunction crossFade(property, value) {\n  if (typeof value === 'string' && !(0, _cssInJsUtils.isPrefixedValue)(value) && value.indexOf('cross-fade(') !== -1) {\n    return prefixes.map(function (prefix) {\n      return value.replace(CROSS_FADE_REGEX, prefix + 'cross-fade(');\n    });\n  }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = imageSet;\n\nvar _isPrefixedValue = require('css-in-js-utils/lib/isPrefixedValue');\n\nvar _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// http://caniuse.com/#feat=css-image-set\nvar prefixes = ['-webkit-', ''];\n\nfunction imageSet(property, value) {\n  if (typeof value === 'string' && !(0, _isPrefixedValue2.default)(value) && value.indexOf('image-set(') > -1) {\n    return prefixes.map(function (prefix) {\n      return value.replace(/image-set\\(/g, prefix + 'image-set(');\n    });\n  }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = logical;\nvar alternativeProps = {\n  marginBlockStart: ['WebkitMarginBefore'],\n  marginBlockEnd: ['WebkitMarginAfter'],\n  marginInlineStart: ['WebkitMarginStart', 'MozMarginStart'],\n  marginInlineEnd: ['WebkitMarginEnd', 'MozMarginEnd'],\n  paddingBlockStart: ['WebkitPaddingBefore'],\n  paddingBlockEnd: ['WebkitPaddingAfter'],\n  paddingInlineStart: ['WebkitPaddingStart', 'MozPaddingStart'],\n  paddingInlineEnd: ['WebkitPaddingEnd', 'MozPaddingEnd'],\n  borderBlockStart: ['WebkitBorderBefore'],\n  borderBlockStartColor: ['WebkitBorderBeforeColor'],\n  borderBlockStartStyle: ['WebkitBorderBeforeStyle'],\n  borderBlockStartWidth: ['WebkitBorderBeforeWidth'],\n  borderBlockEnd: ['WebkitBorderAfter'],\n  borderBlockEndColor: ['WebkitBorderAfterColor'],\n  borderBlockEndStyle: ['WebkitBorderAfterStyle'],\n  borderBlockEndWidth: ['WebkitBorderAfterWidth'],\n  borderInlineStart: ['WebkitBorderStart', 'MozBorderStart'],\n  borderInlineStartColor: ['WebkitBorderStartColor', 'MozBorderStartColor'],\n  borderInlineStartStyle: ['WebkitBorderStartStyle', 'MozBorderStartStyle'],\n  borderInlineStartWidth: ['WebkitBorderStartWidth', 'MozBorderStartWidth'],\n  borderInlineEnd: ['WebkitBorderEnd', 'MozBorderEnd'],\n  borderInlineEndColor: ['WebkitBorderEndColor', 'MozBorderEndColor'],\n  borderInlineEndStyle: ['WebkitBorderEndStyle', 'MozBorderEndStyle'],\n  borderInlineEndWidth: ['WebkitBorderEndWidth', 'MozBorderEndWidth']\n};\n\nfunction logical(property, value, style) {\n  if (Object.prototype.hasOwnProperty.call(alternativeProps, property)) {\n    var alternativePropList = alternativeProps[property];\n    for (var i = 0, len = alternativePropList.length; i < len; ++i) {\n      style[alternativePropList[i]] = value;\n    }\n  }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = position;\nfunction position(property, value) {\n  if (property === 'position' && value === 'sticky') {\n    return ['-webkit-sticky', 'sticky'];\n  }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = sizing;\nvar prefixes = ['-webkit-', '-moz-', ''];\n\nvar properties = {\n  maxHeight: true,\n  maxWidth: true,\n  width: true,\n  height: true,\n  columnWidth: true,\n  minWidth: true,\n  minHeight: true\n};\nvar values = {\n  'min-content': true,\n  'max-content': true,\n  'fill-available': true,\n  'fit-content': true,\n  'contain-floats': true\n};\n\nfunction sizing(property, value) {\n  if (properties.hasOwnProperty(property) && values.hasOwnProperty(value)) {\n    return prefixes.map(function (prefix) {\n      return prefix + value;\n    });\n  }\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = transition;\n\nvar _hyphenateProperty = require('css-in-js-utils/lib/hyphenateProperty');\n\nvar _hyphenateProperty2 = _interopRequireDefault(_hyphenateProperty);\n\nvar _isPrefixedValue = require('css-in-js-utils/lib/isPrefixedValue');\n\nvar _isPrefixedValue2 = _interopRequireDefault(_isPrefixedValue);\n\nvar _capitalizeString = require('../utils/capitalizeString');\n\nvar _capitalizeString2 = _interopRequireDefault(_capitalizeString);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar properties = {\n  transition: true,\n  transitionProperty: true,\n  WebkitTransition: true,\n  WebkitTransitionProperty: true,\n  MozTransition: true,\n  MozTransitionProperty: true\n};\n\nvar prefixMapping = {\n  Webkit: '-webkit-',\n  Moz: '-moz-',\n  ms: '-ms-'\n};\n\nfunction prefixValue(value, propertyPrefixMap) {\n  if ((0, _isPrefixedValue2.default)(value)) {\n    return value;\n  }\n\n  // only split multi values, not cubic beziers\n  var multipleValues = value.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g);\n\n  for (var i = 0, len = multipleValues.length; i < len; ++i) {\n    var singleValue = multipleValues[i];\n    var values = [singleValue];\n    for (var property in propertyPrefixMap) {\n      var dashCaseProperty = (0, _hyphenateProperty2.default)(property);\n\n      if (singleValue.indexOf(dashCaseProperty) > -1 && dashCaseProperty !== 'order') {\n        var prefixes = propertyPrefixMap[property];\n        for (var j = 0, pLen = prefixes.length; j < pLen; ++j) {\n          // join all prefixes and create a new value\n          values.unshift(singleValue.replace(dashCaseProperty, prefixMapping[prefixes[j]] + dashCaseProperty));\n        }\n      }\n    }\n\n    multipleValues[i] = values.join(',');\n  }\n\n  return multipleValues.join(',');\n}\n\nfunction transition(property, value, style, propertyPrefixMap) {\n  // also check for already prefixed transitions\n  if (typeof value === 'string' && properties.hasOwnProperty(property)) {\n    var outputValue = prefixValue(value, propertyPrefixMap);\n    // if the property is already prefixed\n    var webkitOutput = outputValue.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g).filter(function (val) {\n      return !/-moz-|-ms-/.test(val);\n    }).join(',');\n\n    if (property.indexOf('Webkit') > -1) {\n      return webkitOutput;\n    }\n\n    var mozOutput = outputValue.split(/,(?![^()]*(?:\\([^()]*\\))?\\))/g).filter(function (val) {\n      return !/-webkit-|-ms-/.test(val);\n    }).join(',');\n\n    if (property.indexOf('Moz') > -1) {\n      return mozOutput;\n    }\n\n    style['Webkit' + (0, _capitalizeString2.default)(property)] = webkitOutput;\n    style['Moz' + (0, _capitalizeString2.default)(property)] = mozOutput;\n    return outputValue;\n  }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = addNewValuesOnly;\nfunction addIfNew(list, value) {\n  if (list.indexOf(value) === -1) {\n    list.push(value);\n  }\n}\n\nfunction addNewValuesOnly(list, values) {\n  if (Array.isArray(values)) {\n    for (var i = 0, len = values.length; i < len; ++i) {\n      addIfNew(list, values[i]);\n    }\n  } else {\n    addIfNew(list, values);\n  }\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = capitalizeString;\nfunction capitalizeString(str) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = isObject;\nfunction isObject(value) {\n  return value instanceof Object && !Array.isArray(value);\n}","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = prefixProperty;\n\nvar _capitalizeString = require('./capitalizeString');\n\nvar _capitalizeString2 = _interopRequireDefault(_capitalizeString);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction prefixProperty(prefixProperties, property, style) {\n  var requiredPrefixes = prefixProperties[property];\n\n  if (requiredPrefixes && style.hasOwnProperty(property)) {\n    var capitalizedProperty = (0, _capitalizeString2.default)(property);\n\n    for (var i = 0; i < requiredPrefixes.length; ++i) {\n      var prefixedProperty = requiredPrefixes[i] + capitalizedProperty;\n\n      if (!style[prefixedProperty]) {\n        style[prefixedProperty] = style[property];\n      }\n    }\n  }\n\n  return style;\n}","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = prefixValue;\nfunction prefixValue(plugins, property, value, style, metaData) {\n  for (var i = 0, len = plugins.length; i < len; ++i) {\n    var processedValue = plugins[i](property, value, style, metaData);\n\n    // we can stop processing if a value is returned\n    // as all plugin criteria are unique\n    if (processedValue) {\n      return processedValue;\n    }\n  }\n}","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __assign = (this && this.__assign) || function () {\n    __assign = Object.assign || function(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n            s = arguments[i];\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                t[p] = s[p];\n        }\n        return t;\n    };\n    return __assign.apply(this, arguments);\n};\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n            r[k] = a[j];\n    return r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Lens = exports.lf = exports.lbu = exports.lb = exports.LensBuilder = exports.LensBuilderWithObject = exports.LensError = void 0;\nvar object_1 = require(\"./utils/object\");\nvar LENS_OPTIONAL_BREAK = Symbol(\"LENS_OPTIONAL_BREAK\");\nvar LensError = /** @class */ (function (_super) {\n    __extends(LensError, _super);\n    function LensError(m, lens, type, err, value) {\n        var _this = _super.call(this, m) || this;\n        _this.lens = lens;\n        _this.type = type;\n        _this.err = err;\n        _this.value = value;\n        // Set the prototype explicitly.\n        Object.setPrototypeOf(_this, LensError.prototype);\n        return _this;\n    }\n    return LensError;\n}(Error));\nexports.LensError = LensError;\nvar AbstractLensBuilder = /** @class */ (function () {\n    function AbstractLensBuilder(lens) {\n        this.lens = lens;\n    }\n    AbstractLensBuilder.prototype.get = function () {\n        return this.lens;\n    };\n    return AbstractLensBuilder;\n}());\nvar LensBuilderWithObject = /** @class */ (function (_super) {\n    __extends(LensBuilderWithObject, _super);\n    function LensBuilderWithObject(lens, obj) {\n        var _this = _super.call(this, lens) || this;\n        _this.obj = obj;\n        return _this;\n    }\n    LensBuilderWithObject.start = function (lensFactory, obj) {\n        return {\n            p: function (key) {\n                return new LensBuilderWithObject(lensFactory(key), obj);\n            },\n            pi: (function (key, fallback) {\n                var baseLens = lensFactory(key);\n                if (fallback !== undefined) {\n                    var lens = new Lens(function (s) { var _a; return ((_a = baseLens.get(s)) !== null && _a !== void 0 ? _a : fallback); }, baseLens.set, { from: baseLens.from, to: baseLens.to });\n                    return new LensBuilderWithObject(lens, obj);\n                }\n                baseLens._optional = true;\n                return new LensBuilderWithObject(baseLens, obj);\n            }),\n            i: function (index) {\n                // @ts-ignore\n                return new LensBuilderWithObject(lensFactory(index), obj);\n            },\n            find: function (cb) {\n                // @ts-ignore\n                return new LensBuilderWithObject(lensFactory(cb), obj);\n            },\n            findBy: function (key, value, isReverse) {\n                // @ts-ignore\n                return new LensBuilderWithObject(lensFactory(key, value, isReverse), obj);\n            },\n            get: function () {\n                return new Lens(function (s) { return s; }, function (s, v) { return v; }, { from: \"obj\", to: \"obj\" });\n            },\n            record: function (value, name) {\n                return Lens.buildLensRecording(new Lens(function (s) { return s; }, function (s, v) { return v; }, { from: \"obj\", to: \"obj\" }), value, name);\n            },\n            recordModify: function (fn, name) {\n                return Lens.buildLensModifyRecording(new Lens(function (s) { return s; }, function (s, v) { return v; }, { from: \"obj\", to: \"obj\" }), fn, {}, name);\n            },\n        };\n    };\n    LensBuilderWithObject.prototype.p = function (key) {\n        return new LensBuilderWithObject(this.lens.then(Lens.prop()(key)), this.obj);\n    };\n    LensBuilderWithObject.prototype.pi = function (key, fallback) {\n        var propLens = Lens.prop()(key);\n        if (fallback !== undefined) {\n            var lens = new Lens(function (s) { var _a; return ((_a = propLens.get(s)) !== null && _a !== void 0 ? _a : fallback); }, propLens.set, { from: propLens.from, to: propLens.to });\n            return new LensBuilderWithObject(this.lens.then(lens), this.obj);\n        }\n        propLens._optional = true;\n        return new LensBuilderWithObject(this.lens.then(propLens), this.obj);\n    };\n    LensBuilderWithObject.prototype.i = function (index) {\n        // @ts-ignore\n        return new LensBuilderWithObject(this.lens.then(Lens.index()(index)), this.obj);\n    };\n    LensBuilderWithObject.prototype.find = function (cb) {\n        // @ts-ignore\n        return new LensBuilderWithObject(this.lens.then(Lens.find()(cb)), this.obj);\n    };\n    LensBuilderWithObject.prototype.findBy = function (key, value, isReverse) {\n        // @ts-ignore\n        return new LensBuilderWithObject(this.lens.then(Lens.findBy()(key, value, isReverse)), this.obj);\n    };\n    LensBuilderWithObject.prototype.set = function (value) {\n        return this.lens.set(this.obj, value);\n    };\n    LensBuilderWithObject.prototype.modify = function (fn) {\n        return this.lens.modify(this.obj, fn);\n    };\n    return LensBuilderWithObject;\n}(AbstractLensBuilder));\nexports.LensBuilderWithObject = LensBuilderWithObject;\nvar LensBuilder = /** @class */ (function (_super) {\n    __extends(LensBuilder, _super);\n    function LensBuilder(lens, lensGetters) {\n        var _this = _super.call(this, lens) || this;\n        _this.lensGetters = lensGetters;\n        return _this;\n    }\n    LensBuilder.start = function (lensFactory, lensGetters) {\n        var _this = this;\n        return {\n            p: function (key) {\n                return new LensBuilder(lensFactory(key), lensGetters);\n            },\n            pi: (function (key, fallback) {\n                var baseLens = lensFactory(key);\n                if (fallback !== undefined) {\n                    var lens = new Lens(function (s) { var _a; return ((_a = baseLens.get(s)) !== null && _a !== void 0 ? _a : fallback); }, baseLens.set, { from: baseLens.from, to: baseLens.to });\n                    return new LensBuilder(lens, lensGetters);\n                }\n                baseLens._optional = true;\n                return new LensBuilder(baseLens, lensGetters);\n            }),\n            i: function (index) {\n                // @ts-ignore\n                return new LensBuilder(lensFactory(index), lensGetters);\n            },\n            find: function (cb) {\n                // @ts-ignore\n                return new LensBuilder(lensFactory(cb), _this.lensGetters);\n            },\n            findBy: function (key, value, isReverse) {\n                // @ts-ignore\n                return new LensBuilder(lensFactory(key, value, isReverse), _this.lensGetters);\n            },\n            get: function () {\n                return new Lens(function (s) { return s; }, function (s, v) { return v; }, { from: \"obj\", to: \"obj\" });\n            },\n            record: function (value, name) {\n                return Lens.buildLensRecording(new Lens(function (s) { return s; }, function (s, v) { return v; }, { from: \"obj\", to: \"obj\" }), value, name);\n            },\n            recordModify: function (fn, name) {\n                return Lens.buildLensModifyRecording(new Lens(function (s) { return s; }, function (s, v) { return v; }, { from: \"obj\", to: \"obj\" }), fn, {}, name);\n            },\n        };\n    };\n    LensBuilder.prototype.p = function (key) {\n        return new LensBuilder(this.lens.then(Lens.prop()(key)), this.lensGetters);\n    };\n    LensBuilder.prototype.i = function (index) {\n        // @ts-ignore\n        return new LensBuilder(this.lens.then(Lens.index()(index)), this.lensGetters);\n    };\n    LensBuilder.prototype.pi = function (key, fallback) {\n        var propLens = Lens.prop()(key);\n        if (fallback !== undefined) {\n            var lens = new Lens(function (s) { var _a; return ((_a = propLens.get(s)) !== null && _a !== void 0 ? _a : fallback); }, propLens.set, { from: propLens.from, to: propLens.to });\n            return new LensBuilder(this.lens.then(lens), this.lensGetters);\n        }\n        propLens._optional = true;\n        return new LensBuilder(this.lens.then(propLens), this.lensGetters);\n    };\n    LensBuilder.prototype.find = function (cb) {\n        // @ts-ignore\n        return new LensBuilder(this.lens.then(Lens.find()(cb)), this.lensGetters);\n    };\n    LensBuilder.prototype.findBy = function (key, value, isReverse) {\n        // @ts-ignore\n        return new LensBuilder(this.lens.then(Lens.findBy()(key, value, isReverse)), this.lensGetters);\n    };\n    LensBuilder.prototype.set = function (obj, value) {\n        return this.lens.set(obj, value);\n    };\n    LensBuilder.prototype.modify = function (obj, fn) {\n        return this.lens.modify(obj, fn);\n    };\n    LensBuilder.prototype.record = function (value, name) {\n        return Lens.buildLensRecording(this.lens, value, name);\n    };\n    LensBuilder.prototype.recordModify = function (fn, name) {\n        return Lens.buildLensModifyRecording(this.lens, fn, this.lensGetters, name);\n    };\n    return LensBuilder;\n}(AbstractLensBuilder));\nexports.LensBuilder = LensBuilder;\nfunction lb() {\n    return Lens.build({});\n}\nexports.lb = lb;\nfunction lbu(lens) {\n    return Lens.build(lens);\n}\nexports.lbu = lbu;\nfunction lf(obj) {\n    return Lens.from(obj);\n}\nexports.lf = lf;\nvar Lens = /** @class */ (function () {\n    function Lens(getter, setter, args) {\n        var _this = this;\n        this._optional = false;\n        this._getRaw = function (obj) {\n            try {\n                return getter(obj);\n            }\n            catch (e) {\n                var nestedErr = e instanceof LensError ? e.err : e;\n                throw new LensError(\"LensError: Error when getting \" + args.from + \" -> \" + args.to + \" (\" + nestedErr.message + \")\", _this, \"get\", nestedErr);\n            }\n        };\n        this.get = function (obj) {\n            var result = _this._getRaw(obj);\n            if (result === LENS_OPTIONAL_BREAK) {\n                return undefined;\n            }\n            return result;\n        };\n        this.set = function (obj, value) {\n            try {\n                return setter(obj, value);\n            }\n            catch (e) {\n                var nestedErr = e instanceof LensError ? e.err : e;\n                throw new LensError(\"LensError: Error when setting \" + args.from + \" -> \" + args.to + \" - \" + value + \" (\" + nestedErr.message + \")\", _this, \"set\", nestedErr, value);\n            }\n        };\n        this.from = Array.isArray(args.from) ? args.from : [args.from];\n        this.to = args.to;\n    }\n    Lens.buildLensModifyRecording = function (aLens, modifyFn, lensGetters, name) {\n        var _this = this;\n        var lens = aLens instanceof Lens ? aLens : aLens.get();\n        var value = { v: undefined };\n        var fn = function (obj) {\n            var getters = object_1.ObjectUtils.keys(lensGetters).reduce(function (memo, key) {\n                // @ts-ignore\n                memo[key] = lensGetters[key].get(obj);\n                return memo;\n            }, {});\n            return lens.modify(obj, function (v) {\n                var newValue = modifyFn(v, getters);\n                value.v = newValue;\n                return newValue;\n            });\n        };\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        fn.toString = function () {\n            return lens.toString() + \" = `modify`\";\n        };\n        var log = function (startName) {\n            for (var _i = 0, _a = Object.keys(lensGetters); _i < _a.length; _i++) {\n                var g = _a[_i];\n                var l = lensGetters[g];\n                var lensGetterStr = __spreadArrays([startName], l.from.slice(1), [l.to]).join(\" -> \");\n                console.log(\"getter: \", lensGetterStr);\n            }\n            if (name != null) {\n                console.log(name + \": \");\n            }\n            console.log(__spreadArrays([startName], lens.from.slice(1), [lens.to]).join(\" -> \"), \"=\", \"`modify`\");\n        };\n        return {\n            fn: fn,\n            str: fn.toString(),\n            lens: lens,\n            lensGetters: lensGetters,\n            value: value,\n            log: log,\n            type: \"modify\",\n            prepend: function (newLensOrBuilder) {\n                var newLens = newLensOrBuilder instanceof Lens ? newLensOrBuilder : newLensOrBuilder.get();\n                var combinedLens = newLens.then(lens);\n                var newLensGetters = object_1.ObjectUtils.keys(lensGetters).reduce(function (memo, key) {\n                    var newGetter = newLens.then(lensGetters[key]);\n                    memo[key] = newGetter;\n                    return memo;\n                }, {});\n                return _this.buildLensModifyRecording(combinedLens, modifyFn, newLensGetters, name);\n            },\n        };\n    };\n    Lens.buildLensRecording = function (aLens, value, name) {\n        var _this = this;\n        var lens = aLens instanceof Lens ? aLens : aLens.get();\n        var fn = function (obj) {\n            return lens.set(obj, value);\n        };\n        // eslint-disable-next-line @typescript-eslint/unbound-method\n        fn.toString = function () {\n            return lens.toString() + \" = \" + value;\n        };\n        var log = function (startName) {\n            if (name != null) {\n                console.log(name + \": \");\n            }\n            console.log(__spreadArrays([startName], lens.from.slice(1), [lens.to]).join(\" -> \"), \"=\", value);\n        };\n        return {\n            fn: fn,\n            str: fn.toString(),\n            lens: lens,\n            value: { v: value },\n            log: log,\n            type: \"set\",\n            prepend: function (newLensOrBuilder) {\n                var newLens = newLensOrBuilder instanceof Lens ? newLensOrBuilder : newLensOrBuilder.get();\n                var combinedLens = newLens.then(lens);\n                return _this.buildLensRecording(combinedLens, value, name);\n            },\n        };\n    };\n    Lens.build = function (lens) {\n        return LensBuilder.start(Lens.prop(), lens);\n    };\n    Lens.from = function (obj) {\n        return LensBuilderWithObject.start(Lens.prop(), obj);\n    };\n    Lens.propKey = function (key) {\n        return new Lens(function (s) { return s[key]; }, function (s, v) {\n            var _a;\n            if (s != null && s[key] === v) {\n                return s;\n            }\n            if (Array.isArray(s)) {\n                // @ts-ignore\n                return s.map(function (e, i) { return (i === key ? v : e); });\n            }\n            else {\n                return __assign(__assign({}, s), (_a = {}, _a[key] = v, _a));\n            }\n        }, { from: \"obj\", to: \"\" + key });\n    };\n    Lens.prop = function () {\n        return function (key) { return Lens.propKey(key); };\n    };\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    Lens.index = function () {\n        return function (index) {\n            return new Lens(function (a) { return a[index]; }, function (a, v) { return (a[index] === v ? a : a.map(function (e, i) { return (i === index ? v : e); })); }, { from: \"obj\", to: \"\" + index });\n        };\n    };\n    Lens.find = function () {\n        return function (cb) {\n            return new Lens(function (a) { return a.filter(cb)[0]; }, function (a, v) {\n                var changed = false;\n                var result = a.map(function (e) {\n                    if (cb(e) && e !== v) {\n                        changed = true;\n                        return v;\n                    }\n                    return e;\n                });\n                return (changed ? result : a);\n            }, { from: \"obj\", to: \"find()\" });\n        };\n    };\n    Lens.findBy = function () {\n        return function (key, value, isReverse) {\n            return new Lens(function (a) {\n                if (isReverse) {\n                    return a.filter(function (e) { return e[key] === value; }).reverse()[0];\n                }\n                else {\n                    return a.filter(function (e) { return e[key] === value; })[0];\n                }\n            }, function (a, v) {\n                var index = -1;\n                if (isReverse) {\n                    for (var i = a.length - 1; i >= 0; i--) {\n                        if (a[i][key] === value) {\n                            index = i;\n                            break;\n                        }\n                    }\n                }\n                else {\n                    for (var i = 0; i < a.length; i++) {\n                        if (a[i][key] === value) {\n                            index = i;\n                            break;\n                        }\n                    }\n                }\n                if (index === -1 || a[index] === v) {\n                    return a;\n                }\n                return a.map(function (e, i) { return (i === index ? v : e); });\n            }, { from: \"obj\", to: key + \" == \" + value });\n        };\n    };\n    Lens.prototype.modify = function (obj, f) {\n        if (this._optional) {\n            var current = this._getRaw(obj);\n            if (current === LENS_OPTIONAL_BREAK) {\n                return obj;\n            }\n            return this.set(obj, f(current));\n        }\n        return this.set(obj, f(this.get(obj)));\n    };\n    Lens.prototype.then = function (lens) {\n        var isOptional = this._optional;\n        var thisGetRaw = this._getRaw;\n        var thisSet = this.set;\n        var result = new Lens(function (obj) {\n            var nextObj = thisGetRaw(obj);\n            if (isOptional && (nextObj == null || nextObj === LENS_OPTIONAL_BREAK)) {\n                return LENS_OPTIONAL_BREAK;\n            }\n            return lens._getRaw(nextObj);\n        }, function (obj, value) {\n            var parent = thisGetRaw(obj);\n            if (isOptional && (parent == null || parent === LENS_OPTIONAL_BREAK)) {\n                return obj;\n            }\n            var newParent = lens.set(parent, value);\n            if (newParent === parent) {\n                return obj;\n            }\n            return thisSet(obj, newParent);\n        }, {\n            from: __spreadArrays(this.from, [this.to]),\n            to: lens.to,\n        });\n        if (this._optional || lens._optional) {\n            result._optional = true;\n        }\n        return result;\n    };\n    Lens.prototype.toString = function () {\n        if (this.from != null && this.to != null) {\n            return this.from.join(\" -> \") + \" -> \" + this.to;\n        }\n        else {\n            return \"Lens\";\n        }\n    };\n    Lens.prototype.record = function (value, name) {\n        return Lens.buildLensRecording(this, value, name);\n    };\n    Lens.prototype.recordModify = function (fn, name) {\n        return Lens.buildLensModifyRecording(this, fn, {}, name);\n    };\n    return Lens;\n}());\nexports.Lens = Lens;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ObjectUtils = void 0;\nvar ObjectUtils;\n(function (ObjectUtils) {\n    function keys(obj) {\n        return Object.keys(obj);\n    }\n    ObjectUtils.keys = keys;\n})(ObjectUtils = exports.ObjectUtils || (exports.ObjectUtils = {}));\n//# sourceMappingURL=object.js.map","(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global[\"micro-memoize\"] = factory());\n})(this, (function () { 'use strict';\n\n    /**\n     * @constant DEFAULT_OPTIONS_KEYS the default options keys\n     */\n    var DEFAULT_OPTIONS_KEYS = {\n        isEqual: true,\n        isMatchingKey: true,\n        isPromise: true,\n        maxSize: true,\n        onCacheAdd: true,\n        onCacheChange: true,\n        onCacheHit: true,\n        transformKey: true,\n    };\n    /**\n     * @function slice\n     *\n     * @description\n     * slice.call() pre-bound\n     */\n    var slice = Array.prototype.slice;\n    /**\n     * @function cloneArray\n     *\n     * @description\n     * clone the array-like object and return the new array\n     *\n     * @param arrayLike the array-like object to clone\n     * @returns the clone as an array\n     */\n    function cloneArray(arrayLike) {\n        var length = arrayLike.length;\n        if (!length) {\n            return [];\n        }\n        if (length === 1) {\n            return [arrayLike[0]];\n        }\n        if (length === 2) {\n            return [arrayLike[0], arrayLike[1]];\n        }\n        if (length === 3) {\n            return [arrayLike[0], arrayLike[1], arrayLike[2]];\n        }\n        return slice.call(arrayLike, 0);\n    }\n    /**\n     * @function getCustomOptions\n     *\n     * @description\n     * get the custom options on the object passed\n     *\n     * @param options the memoization options passed\n     * @returns the custom options passed\n     */\n    function getCustomOptions(options) {\n        var customOptions = {};\n        /* eslint-disable no-restricted-syntax */\n        for (var key in options) {\n            if (!DEFAULT_OPTIONS_KEYS[key]) {\n                customOptions[key] = options[key];\n            }\n        }\n        /* eslint-enable */\n        return customOptions;\n    }\n    /**\n     * @function isMemoized\n     *\n     * @description\n     * is the function passed already memoized\n     *\n     * @param fn the function to test\n     * @returns is the function already memoized\n     */\n    function isMemoized(fn) {\n        return typeof fn === 'function' && fn.isMemoized;\n    }\n    /**\n     * @function isSameValueZero\n     *\n     * @description\n     * are the objects equal based on SameValueZero equality\n     *\n     * @param object1 the first object to compare\n     * @param object2 the second object to compare\n     * @returns are the two objects equal\n     */\n    function isSameValueZero(object1, object2) {\n        // eslint-disable-next-line no-self-compare\n        return object1 === object2 || (object1 !== object1 && object2 !== object2);\n    }\n    /**\n     * @function mergeOptions\n     *\n     * @description\n     * merge the options into the target\n     *\n     * @param existingOptions the options provided\n     * @param newOptions the options to include\n     * @returns the merged options\n     */\n    function mergeOptions(existingOptions, newOptions) {\n        var target = {};\n        /* eslint-disable no-restricted-syntax */\n        for (var key in existingOptions) {\n            target[key] = existingOptions[key];\n        }\n        for (var key in newOptions) {\n            target[key] = newOptions[key];\n        }\n        /* eslint-enable */\n        return target;\n    }\n\n    // utils\n    var Cache = /** @class */ (function () {\n        function Cache(options) {\n            this.keys = [];\n            this.values = [];\n            this.options = options;\n            var isMatchingKeyFunction = typeof options.isMatchingKey === 'function';\n            if (isMatchingKeyFunction) {\n                this.getKeyIndex = this._getKeyIndexFromMatchingKey;\n            }\n            else if (options.maxSize > 1) {\n                this.getKeyIndex = this._getKeyIndexForMany;\n            }\n            else {\n                this.getKeyIndex = this._getKeyIndexForSingle;\n            }\n            this.canTransformKey = typeof options.transformKey === 'function';\n            this.shouldCloneArguments = this.canTransformKey || isMatchingKeyFunction;\n            this.shouldUpdateOnAdd = typeof options.onCacheAdd === 'function';\n            this.shouldUpdateOnChange = typeof options.onCacheChange === 'function';\n            this.shouldUpdateOnHit = typeof options.onCacheHit === 'function';\n        }\n        Object.defineProperty(Cache.prototype, \"size\", {\n            /**\n             * The number of cached [key,value] results.\n             */\n            get: function () {\n                return this.keys.length;\n            },\n            enumerable: false,\n            configurable: true\n        });\n        Object.defineProperty(Cache.prototype, \"snapshot\", {\n            /**\n             * A copy of the cache at a moment in time. This is useful\n             * to compare changes over time, since the cache mutates\n             * internally for performance reasons.\n             */\n            get: function () {\n                return {\n                    keys: cloneArray(this.keys),\n                    size: this.size,\n                    values: cloneArray(this.values),\n                };\n            },\n            enumerable: false,\n            configurable: true\n        });\n        /**\n         * Gets the matching key index when a custom key matcher is used.\n         */\n        Cache.prototype._getKeyIndexFromMatchingKey = function (keyToMatch) {\n            var _a = this.options, isMatchingKey = _a.isMatchingKey, maxSize = _a.maxSize;\n            var keys = this.keys;\n            var keysLength = keys.length;\n            if (!keysLength) {\n                return -1;\n            }\n            if (isMatchingKey(keys[0], keyToMatch)) {\n                return 0;\n            }\n            if (maxSize > 1) {\n                for (var index = 1; index < keysLength; index++) {\n                    if (isMatchingKey(keys[index], keyToMatch)) {\n                        return index;\n                    }\n                }\n            }\n            return -1;\n        };\n        /**\n         * Gets the matching key index when multiple keys are used.\n         */\n        Cache.prototype._getKeyIndexForMany = function (keyToMatch) {\n            var isEqual = this.options.isEqual;\n            var keys = this.keys;\n            var keysLength = keys.length;\n            if (!keysLength) {\n                return -1;\n            }\n            if (keysLength === 1) {\n                return this._getKeyIndexForSingle(keyToMatch);\n            }\n            var keyLength = keyToMatch.length;\n            var existingKey;\n            var argIndex;\n            if (keyLength > 1) {\n                for (var index = 0; index < keysLength; index++) {\n                    existingKey = keys[index];\n                    if (existingKey.length === keyLength) {\n                        argIndex = 0;\n                        for (; argIndex < keyLength; argIndex++) {\n                            if (!isEqual(existingKey[argIndex], keyToMatch[argIndex])) {\n                                break;\n                            }\n                        }\n                        if (argIndex === keyLength) {\n                            return index;\n                        }\n                    }\n                }\n            }\n            else {\n                for (var index = 0; index < keysLength; index++) {\n                    existingKey = keys[index];\n                    if (existingKey.length === keyLength &&\n                        isEqual(existingKey[0], keyToMatch[0])) {\n                        return index;\n                    }\n                }\n            }\n            return -1;\n        };\n        /**\n         * Gets the matching key index when a single key is used.\n         */\n        Cache.prototype._getKeyIndexForSingle = function (keyToMatch) {\n            var keys = this.keys;\n            if (!keys.length) {\n                return -1;\n            }\n            var existingKey = keys[0];\n            var length = existingKey.length;\n            if (keyToMatch.length !== length) {\n                return -1;\n            }\n            var isEqual = this.options.isEqual;\n            if (length > 1) {\n                for (var index = 0; index < length; index++) {\n                    if (!isEqual(existingKey[index], keyToMatch[index])) {\n                        return -1;\n                    }\n                }\n                return 0;\n            }\n            return isEqual(existingKey[0], keyToMatch[0]) ? 0 : -1;\n        };\n        /**\n         * Order the array based on a Least-Recently-Used basis.\n         */\n        Cache.prototype.orderByLru = function (key, value, startingIndex) {\n            var keys = this.keys;\n            var values = this.values;\n            var currentLength = keys.length;\n            var index = startingIndex;\n            while (index--) {\n                keys[index + 1] = keys[index];\n                values[index + 1] = values[index];\n            }\n            keys[0] = key;\n            values[0] = value;\n            var maxSize = this.options.maxSize;\n            if (currentLength === maxSize && startingIndex === currentLength) {\n                keys.pop();\n                values.pop();\n            }\n            else if (startingIndex >= maxSize) {\n                // eslint-disable-next-line no-multi-assign\n                keys.length = values.length = maxSize;\n            }\n        };\n        /**\n         * Update the promise method to auto-remove from cache if rejected, and\n         * if resolved then fire cache hit / changed.\n         */\n        Cache.prototype.updateAsyncCache = function (memoized) {\n            var _this = this;\n            var _a = this.options, onCacheChange = _a.onCacheChange, onCacheHit = _a.onCacheHit;\n            var firstKey = this.keys[0];\n            var firstValue = this.values[0];\n            this.values[0] = firstValue.then(function (value) {\n                if (_this.shouldUpdateOnHit) {\n                    onCacheHit(_this, _this.options, memoized);\n                }\n                if (_this.shouldUpdateOnChange) {\n                    onCacheChange(_this, _this.options, memoized);\n                }\n                return value;\n            }, function (error) {\n                var keyIndex = _this.getKeyIndex(firstKey);\n                if (keyIndex !== -1) {\n                    _this.keys.splice(keyIndex, 1);\n                    _this.values.splice(keyIndex, 1);\n                }\n                throw error;\n            });\n        };\n        return Cache;\n    }());\n\n    function createMemoizedFunction(fn, options) {\n        if (options === void 0) { options = {}; }\n        if (isMemoized(fn)) {\n            return createMemoizedFunction(fn.fn, mergeOptions(fn.options, options));\n        }\n        if (typeof fn !== 'function') {\n            throw new TypeError('You must pass a function to `memoize`.');\n        }\n        var _a = options.isEqual, isEqual = _a === void 0 ? isSameValueZero : _a, isMatchingKey = options.isMatchingKey, _b = options.isPromise, isPromise = _b === void 0 ? false : _b, _c = options.maxSize, maxSize = _c === void 0 ? 1 : _c, onCacheAdd = options.onCacheAdd, onCacheChange = options.onCacheChange, onCacheHit = options.onCacheHit, transformKey = options.transformKey;\n        var normalizedOptions = mergeOptions({\n            isEqual: isEqual,\n            isMatchingKey: isMatchingKey,\n            isPromise: isPromise,\n            maxSize: maxSize,\n            onCacheAdd: onCacheAdd,\n            onCacheChange: onCacheChange,\n            onCacheHit: onCacheHit,\n            transformKey: transformKey,\n        }, getCustomOptions(options));\n        var cache = new Cache(normalizedOptions);\n        var keys = cache.keys, values = cache.values, canTransformKey = cache.canTransformKey, shouldCloneArguments = cache.shouldCloneArguments, shouldUpdateOnAdd = cache.shouldUpdateOnAdd, shouldUpdateOnChange = cache.shouldUpdateOnChange, shouldUpdateOnHit = cache.shouldUpdateOnHit;\n        var memoized = function () {\n            var key = shouldCloneArguments\n                ? cloneArray(arguments)\n                : arguments;\n            if (canTransformKey) {\n                key = transformKey(key);\n            }\n            var keyIndex = keys.length ? cache.getKeyIndex(key) : -1;\n            if (keyIndex !== -1) {\n                if (shouldUpdateOnHit) {\n                    onCacheHit(cache, normalizedOptions, memoized);\n                }\n                if (keyIndex) {\n                    cache.orderByLru(keys[keyIndex], values[keyIndex], keyIndex);\n                    if (shouldUpdateOnChange) {\n                        onCacheChange(cache, normalizedOptions, memoized);\n                    }\n                }\n            }\n            else {\n                var newValue = fn.apply(this, arguments);\n                var newKey = shouldCloneArguments\n                    ? key\n                    : cloneArray(arguments);\n                cache.orderByLru(newKey, newValue, keys.length);\n                if (isPromise) {\n                    cache.updateAsyncCache(memoized);\n                }\n                if (shouldUpdateOnAdd) {\n                    onCacheAdd(cache, normalizedOptions, memoized);\n                }\n                if (shouldUpdateOnChange) {\n                    onCacheChange(cache, normalizedOptions, memoized);\n                }\n            }\n            return values[0];\n        };\n        memoized.cache = cache;\n        memoized.fn = fn;\n        memoized.isMemoized = true;\n        memoized.options = normalizedOptions;\n        return memoized;\n    }\n\n    return createMemoizedFunction;\n\n}));\n//# sourceMappingURL=micro-memoize.js.map\n","'use strict';\n\nfunction nullthrows(x, message) {\n  if (x != null) {\n    return x;\n  }\n  var error = new Error(message !== undefined ? message : 'Got unexpected ' + x);\n  error.framesToPop = 1; // Skip nullthrows's own stack frame.\n  throw error;\n}\n\nmodule.exports = nullthrows;\nmodule.exports.default = nullthrows;\n\nObject.defineProperty(module.exports, '__esModule', {value: true});\n","/* @license\nPapa Parse\nv5.4.1\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n!function(e,t){\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof module&&\"undefined\"!=typeof exports?module.exports=t():e.Papa=t()}(this,function s(){\"use strict\";var f=\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:void 0!==f?f:{};var n=!f.document&&!!f.postMessage,o=f.IS_PAPA_WORKER||!1,a={},u=0,b={parse:function(e,t){var r=(t=t||{}).dynamicTyping||!1;J(r)&&(t.dynamicTypingFunction=r,r={});if(t.dynamicTyping=r,t.transform=!!J(t.transform)&&t.transform,t.worker&&b.WORKERS_SUPPORTED){var i=function(){if(!b.WORKERS_SUPPORTED)return!1;var e=(r=f.URL||f.webkitURL||null,i=s.toString(),b.BLOB_URL||(b.BLOB_URL=r.createObjectURL(new Blob([\"var global = (function() { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } return {}; })(); global.IS_PAPA_WORKER=true; \",\"(\",i,\")();\"],{type:\"text/javascript\"})))),t=new f.Worker(e);var r,i;return t.onmessage=_,t.id=u++,a[t.id]=t}();return i.userStep=t.step,i.userChunk=t.chunk,i.userComplete=t.complete,i.userError=t.error,t.step=J(t.step),t.chunk=J(t.chunk),t.complete=J(t.complete),t.error=J(t.error),delete t.worker,void i.postMessage({input:e,config:t,workerId:i.id})}var n=null;b.NODE_STREAM_INPUT,\"string\"==typeof e?(e=function(e){if(65279===e.charCodeAt(0))return e.slice(1);return e}(e),n=t.download?new l(t):new p(t)):!0===e.readable&&J(e.read)&&J(e.on)?n=new g(t):(f.File&&e instanceof File||e instanceof Object)&&(n=new c(t));return n.stream(e)},unparse:function(e,t){var n=!1,_=!0,m=\",\",y=\"\\r\\n\",s='\"',a=s+s,r=!1,i=null,o=!1;!function(){if(\"object\"!=typeof t)return;\"string\"!=typeof t.delimiter||b.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter);(\"boolean\"==typeof t.quotes||\"function\"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes);\"boolean\"!=typeof t.skipEmptyLines&&\"string\"!=typeof t.skipEmptyLines||(r=t.skipEmptyLines);\"string\"==typeof t.newline&&(y=t.newline);\"string\"==typeof t.quoteChar&&(s=t.quoteChar);\"boolean\"==typeof t.header&&(_=t.header);if(Array.isArray(t.columns)){if(0===t.columns.length)throw new Error(\"Option columns is empty\");i=t.columns}void 0!==t.escapeChar&&(a=t.escapeChar+s);(\"boolean\"==typeof t.escapeFormulae||t.escapeFormulae instanceof RegExp)&&(o=t.escapeFormulae instanceof RegExp?t.escapeFormulae:/^[=+\\-@\\t\\r].*$/)}();var u=new RegExp(Q(s),\"g\");\"string\"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return h(null,e,r);if(\"object\"==typeof e[0])return h(i||Object.keys(e[0]),e,r)}else if(\"object\"==typeof e)return\"string\"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||i),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:\"object\"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||\"object\"==typeof e.data[0]||(e.data=[e.data])),h(e.fields||[],e.data||[],r);throw new Error(\"Unable to serialize unrecognized input\");function h(e,t,r){var i=\"\";\"string\"==typeof e&&(e=JSON.parse(e)),\"string\"==typeof t&&(t=JSON.parse(t));var n=Array.isArray(e)&&0<e.length,s=!Array.isArray(t[0]);if(n&&_){for(var a=0;a<e.length;a++)0<a&&(i+=m),i+=v(e[a],a);0<t.length&&(i+=y)}for(var o=0;o<t.length;o++){var u=n?e.length:t[o].length,h=!1,f=n?0===Object.keys(t[o]).length:0===t[o].length;if(r&&!n&&(h=\"greedy\"===r?\"\"===t[o].join(\"\").trim():1===t[o].length&&0===t[o][0].length),\"greedy\"===r&&n){for(var d=[],l=0;l<u;l++){var c=s?e[l]:l;d.push(t[o][c])}h=\"\"===d.join(\"\").trim()}if(!h){for(var p=0;p<u;p++){0<p&&!f&&(i+=m);var g=n&&s?e[p]:p;i+=v(t[o][g],p)}o<t.length-1&&(!r||0<u&&!f)&&(i+=y)}}return i}function v(e,t){if(null==e)return\"\";if(e.constructor===Date)return JSON.stringify(e).slice(1,25);var r=!1;o&&\"string\"==typeof e&&o.test(e)&&(e=\"'\"+e,r=!0);var i=e.toString().replace(u,a);return(r=r||!0===n||\"function\"==typeof n&&n(e,t)||Array.isArray(n)&&n[t]||function(e,t){for(var r=0;r<t.length;r++)if(-1<e.indexOf(t[r]))return!0;return!1}(i,b.BAD_DELIMITERS)||-1<i.indexOf(m)||\" \"===i.charAt(0)||\" \"===i.charAt(i.length-1))?s+i+s:i}}};if(b.RECORD_SEP=String.fromCharCode(30),b.UNIT_SEP=String.fromCharCode(31),b.BYTE_ORDER_MARK=\"\\ufeff\",b.BAD_DELIMITERS=[\"\\r\",\"\\n\",'\"',b.BYTE_ORDER_MARK],b.WORKERS_SUPPORTED=!n&&!!f.Worker,b.NODE_STREAM_INPUT=1,b.LocalChunkSize=10485760,b.RemoteChunkSize=5242880,b.DefaultDelimiter=\",\",b.Parser=E,b.ParserHandle=r,b.NetworkStreamer=l,b.FileStreamer=c,b.StringStreamer=p,b.ReadableStreamStreamer=g,f.jQuery){var d=f.jQuery;d.fn.parse=function(o){var r=o.config||{},u=[];return this.each(function(e){if(!(\"INPUT\"===d(this).prop(\"tagName\").toUpperCase()&&\"file\"===d(this).attr(\"type\").toLowerCase()&&f.FileReader)||!this.files||0===this.files.length)return!0;for(var t=0;t<this.files.length;t++)u.push({file:this.files[t],inputElem:this,instanceConfig:d.extend({},r)})}),e(),this;function e(){if(0!==u.length){var e,t,r,i,n=u[0];if(J(o.before)){var s=o.before(n.file,n.inputElem);if(\"object\"==typeof s){if(\"abort\"===s.action)return e=\"AbortError\",t=n.file,r=n.inputElem,i=s.reason,void(J(o.error)&&o.error({name:e},t,r,i));if(\"skip\"===s.action)return void h();\"object\"==typeof s.config&&(n.instanceConfig=d.extend(n.instanceConfig,s.config))}else if(\"skip\"===s)return void h()}var a=n.instanceConfig.complete;n.instanceConfig.complete=function(e){J(a)&&a(e,n.file,n.inputElem),h()},b.parse(n.file,n.instanceConfig)}else J(o.complete)&&o.complete()}function h(){u.splice(0,1),e()}}}function h(e){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine=\"\",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},function(e){var t=w(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null);this._handle=new r(t),(this._handle.streamer=this)._config=t}.call(this,e),this.parseChunk=function(e,t){if(this.isFirstChunk&&J(this._config.beforeFirstChunk)){var r=this._config.beforeFirstChunk(e);void 0!==r&&(e=r)}this.isFirstChunk=!1,this._halted=!1;var i=this._partialLine+e;this._partialLine=\"\";var n=this._handle.parse(i,this._baseIndex,!this._finished);if(!this._handle.paused()&&!this._handle.aborted()){var s=n.meta.cursor;this._finished||(this._partialLine=i.substring(s-this._baseIndex),this._baseIndex=s),n&&n.data&&(this._rowCount+=n.data.length);var a=this._finished||this._config.preview&&this._rowCount>=this._config.preview;if(o)f.postMessage({results:n,workerId:b.WORKER_ID,finished:a});else if(J(this._config.chunk)&&!t){if(this._config.chunk(n,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);n=void 0,this._completeResults=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(n.data),this._completeResults.errors=this._completeResults.errors.concat(n.errors),this._completeResults.meta=n.meta),this._completed||!a||!J(this._config.complete)||n&&n.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),a||n&&n.meta.paused||this._nextChunk(),n}this._halted=!0},this._sendError=function(e){J(this._config.error)?this._config.error(e):o&&this._config.error&&f.postMessage({workerId:b.WORKER_ID,error:e,finished:!1})}}function l(e){var i;(e=e||{}).chunkSize||(e.chunkSize=b.RemoteChunkSize),h.call(this,e),this._nextChunk=n?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(i=new XMLHttpRequest,this._config.withCredentials&&(i.withCredentials=this._config.withCredentials),n||(i.onload=v(this._chunkLoaded,this),i.onerror=v(this._chunkError,this)),i.open(this._config.downloadRequestBody?\"POST\":\"GET\",this._input,!n),this._config.downloadRequestHeaders){var e=this._config.downloadRequestHeaders;for(var t in e)i.setRequestHeader(t,e[t])}if(this._config.chunkSize){var r=this._start+this._config.chunkSize-1;i.setRequestHeader(\"Range\",\"bytes=\"+this._start+\"-\"+r)}try{i.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}n&&0===i.status&&this._chunkError()}},this._chunkLoaded=function(){4===i.readyState&&(i.status<200||400<=i.status?this._chunkError():(this._start+=this._config.chunkSize?this._config.chunkSize:i.responseText.length,this._finished=!this._config.chunkSize||this._start>=function(e){var t=e.getResponseHeader(\"Content-Range\");if(null===t)return-1;return parseInt(t.substring(t.lastIndexOf(\"/\")+1))}(i),this.parseChunk(i.responseText)))},this._chunkError=function(e){var t=i.statusText||e;this._sendError(new Error(t))}}function c(e){var i,n;(e=e||{}).chunkSize||(e.chunkSize=b.LocalChunkSize),h.call(this,e);var s=\"undefined\"!=typeof FileReader;this.stream=function(e){this._input=e,n=e.slice||e.webkitSlice||e.mozSlice,s?((i=new FileReader).onload=v(this._chunkLoaded,this),i.onerror=v(this._chunkError,this)):i=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount<this._config.preview)||this._readChunk()},this._readChunk=function(){var e=this._input;if(this._config.chunkSize){var t=Math.min(this._start+this._config.chunkSize,this._input.size);e=n.call(e,this._start,t)}var r=i.readAsText(e,this._config.encoding);s||this._chunkLoaded({target:{result:r}})},this._chunkLoaded=function(e){this._start+=this._config.chunkSize,this._finished=!this._config.chunkSize||this._start>=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(i.error)}}function p(e){var r;h.call(this,e=e||{}),this.stream=function(e){return r=e,this._nextChunk()},this._nextChunk=function(){if(!this._finished){var e,t=this._config.chunkSize;return t?(e=r.substring(0,t),r=r.substring(t)):(e=r,r=\"\"),this._finished=!r,this.parseChunk(e)}}}function g(e){h.call(this,e=e||{});var t=[],r=!0,i=!1;this.pause=function(){h.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){h.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on(\"data\",this._streamData),this._input.on(\"end\",this._streamEnd),this._input.on(\"error\",this._streamError)},this._checkIsFinished=function(){i&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):r=!0},this._streamData=v(function(e){try{t.push(\"string\"==typeof e?e:e.toString(this._config.encoding)),r&&(r=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=v(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=v(function(){this._streamCleanUp(),i=!0,this._streamData(\"\")},this),this._streamCleanUp=v(function(){this._input.removeListener(\"data\",this._streamData),this._input.removeListener(\"end\",this._streamEnd),this._input.removeListener(\"error\",this._streamError)},this)}function r(m){var a,o,u,i=Math.pow(2,53),n=-i,s=/^\\s*-?(\\d+\\.?|\\.\\d+|\\d+\\.\\d+)([eE][-+]?\\d+)?\\s*$/,h=/^((\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z)))$/,t=this,r=0,f=0,d=!1,e=!1,l=[],c={data:[],errors:[],meta:{}};if(J(m.step)){var p=m.step;m.step=function(e){if(c=e,_())g();else{if(g(),0===c.data.length)return;r+=e.data.length,m.preview&&r>m.preview?o.abort():(c.data=c.data[0],p(c,t))}}}function y(e){return\"greedy\"===m.skipEmptyLines?\"\"===e.join(\"\").trim():1===e.length&&0===e[0].length}function g(){return c&&u&&(k(\"Delimiter\",\"UndetectableDelimiter\",\"Unable to auto-detect delimiting character; defaulted to '\"+b.DefaultDelimiter+\"'\"),u=!1),m.skipEmptyLines&&(c.data=c.data.filter(function(e){return!y(e)})),_()&&function(){if(!c)return;function e(e,t){J(m.transformHeader)&&(e=m.transformHeader(e,t)),l.push(e)}if(Array.isArray(c.data[0])){for(var t=0;_()&&t<c.data.length;t++)c.data[t].forEach(e);c.data.splice(0,1)}else c.data.forEach(e)}(),function(){if(!c||!m.header&&!m.dynamicTyping&&!m.transform)return c;function e(e,t){var r,i=m.header?{}:[];for(r=0;r<e.length;r++){var n=r,s=e[r];m.header&&(n=r>=l.length?\"__parsed_extra\":l[r]),m.transform&&(s=m.transform(s,n)),s=v(n,s),\"__parsed_extra\"===n?(i[n]=i[n]||[],i[n].push(s)):i[n]=s}return m.header&&(r>l.length?k(\"FieldMismatch\",\"TooManyFields\",\"Too many fields: expected \"+l.length+\" fields but parsed \"+r,f+t):r<l.length&&k(\"FieldMismatch\",\"TooFewFields\",\"Too few fields: expected \"+l.length+\" fields but parsed \"+r,f+t)),i}var t=1;!c.data.length||Array.isArray(c.data[0])?(c.data=c.data.map(e),t=c.data.length):c.data=e(c.data,0);m.header&&c.meta&&(c.meta.fields=l);return f+=t,c}()}function _(){return m.header&&0===l.length}function v(e,t){return r=e,m.dynamicTypingFunction&&void 0===m.dynamicTyping[r]&&(m.dynamicTyping[r]=m.dynamicTypingFunction(r)),!0===(m.dynamicTyping[r]||m.dynamicTyping)?\"true\"===t||\"TRUE\"===t||\"false\"!==t&&\"FALSE\"!==t&&(function(e){if(s.test(e)){var t=parseFloat(e);if(n<t&&t<i)return!0}return!1}(t)?parseFloat(t):h.test(t)?new Date(t):\"\"===t?null:t):t;var r}function k(e,t,r,i){var n={type:e,code:t,message:r};void 0!==i&&(n.row=i),c.errors.push(n)}this.parse=function(e,t,r){var i=m.quoteChar||'\"';if(m.newline||(m.newline=function(e,t){e=e.substring(0,1048576);var r=new RegExp(Q(t)+\"([^]*?)\"+Q(t),\"gm\"),i=(e=e.replace(r,\"\")).split(\"\\r\"),n=e.split(\"\\n\"),s=1<n.length&&n[0].length<i[0].length;if(1===i.length||s)return\"\\n\";for(var a=0,o=0;o<i.length;o++)\"\\n\"===i[o][0]&&a++;return a>=i.length/2?\"\\r\\n\":\"\\r\"}(e,i)),u=!1,m.delimiter)J(m.delimiter)&&(m.delimiter=m.delimiter(e),c.meta.delimiter=m.delimiter);else{var n=function(e,t,r,i,n){var s,a,o,u;n=n||[\",\",\"\\t\",\"|\",\";\",b.RECORD_SEP,b.UNIT_SEP];for(var h=0;h<n.length;h++){var f=n[h],d=0,l=0,c=0;o=void 0;for(var p=new E({comments:i,delimiter:f,newline:t,preview:10}).parse(e),g=0;g<p.data.length;g++)if(r&&y(p.data[g]))c++;else{var _=p.data[g].length;l+=_,void 0!==o?0<_&&(d+=Math.abs(_-o),o=_):o=_}0<p.data.length&&(l/=p.data.length-c),(void 0===a||d<=a)&&(void 0===u||u<l)&&1.99<l&&(a=d,s=f,u=l)}return{successful:!!(m.delimiter=s),bestDelimiter:s}}(e,m.newline,m.skipEmptyLines,m.comments,m.delimitersToGuess);n.successful?m.delimiter=n.bestDelimiter:(u=!0,m.delimiter=b.DefaultDelimiter),c.meta.delimiter=m.delimiter}var s=w(m);return m.preview&&m.header&&s.preview++,a=e,o=new E(s),c=o.parse(a,t,r),g(),d?{meta:{paused:!0}}:c||{meta:{paused:!1}}},this.paused=function(){return d},this.pause=function(){d=!0,o.abort(),a=J(m.chunk)?\"\":a.substring(o.getCharIndex())},this.resume=function(){t.streamer._halted?(d=!1,t.streamer.parseChunk(a,!0)):setTimeout(t.resume,3)},this.aborted=function(){return e},this.abort=function(){e=!0,o.abort(),c.meta.aborted=!0,J(m.complete)&&m.complete(c),a=\"\"}}function Q(e){return e.replace(/[.*+?^${}()|[\\]\\\\]/g,\"\\\\$&\")}function E(j){var z,M=(j=j||{}).delimiter,P=j.newline,U=j.comments,q=j.step,N=j.preview,B=j.fastMode,K=z=void 0===j.quoteChar||null===j.quoteChar?'\"':j.quoteChar;if(void 0!==j.escapeChar&&(K=j.escapeChar),(\"string\"!=typeof M||-1<b.BAD_DELIMITERS.indexOf(M))&&(M=\",\"),U===M)throw new Error(\"Comment character same as delimiter\");!0===U?U=\"#\":(\"string\"!=typeof U||-1<b.BAD_DELIMITERS.indexOf(U))&&(U=!1),\"\\n\"!==P&&\"\\r\"!==P&&\"\\r\\n\"!==P&&(P=\"\\n\");var W=0,H=!1;this.parse=function(i,t,r){if(\"string\"!=typeof i)throw new Error(\"Input must be a string\");var n=i.length,e=M.length,s=P.length,a=U.length,o=J(q),u=[],h=[],f=[],d=W=0;if(!i)return L();if(j.header&&!t){var l=i.split(P)[0].split(M),c=[],p={},g=!1;for(var _ in l){var m=l[_];J(j.transformHeader)&&(m=j.transformHeader(m,_));var y=m,v=p[m]||0;for(0<v&&(g=!0,y=m+\"_\"+v),p[m]=v+1;c.includes(y);)y=y+\"_\"+v;c.push(y)}if(g){var k=i.split(P);k[0]=c.join(M),i=k.join(P)}}if(B||!1!==B&&-1===i.indexOf(z)){for(var b=i.split(P),E=0;E<b.length;E++){if(f=b[E],W+=f.length,E!==b.length-1)W+=P.length;else if(r)return L();if(!U||f.substring(0,a)!==U){if(o){if(u=[],I(f.split(M)),F(),H)return L()}else I(f.split(M));if(N&&N<=E)return u=u.slice(0,N),L(!0)}}return L()}for(var w=i.indexOf(M,W),R=i.indexOf(P,W),C=new RegExp(Q(K)+Q(z),\"g\"),S=i.indexOf(z,W);;)if(i[W]!==z)if(U&&0===f.length&&i.substring(W,W+a)===U){if(-1===R)return L();W=R+s,R=i.indexOf(P,W),w=i.indexOf(M,W)}else if(-1!==w&&(w<R||-1===R))f.push(i.substring(W,w)),W=w+e,w=i.indexOf(M,W);else{if(-1===R)break;if(f.push(i.substring(W,R)),D(R+s),o&&(F(),H))return L();if(N&&u.length>=N)return L(!0)}else for(S=W,W++;;){if(-1===(S=i.indexOf(z,S+1)))return r||h.push({type:\"Quotes\",code:\"MissingQuotes\",message:\"Quoted field unterminated\",row:u.length,index:W}),T();if(S===n-1)return T(i.substring(W,S).replace(C,z));if(z!==K||i[S+1]!==K){if(z===K||0===S||i[S-1]!==K){-1!==w&&w<S+1&&(w=i.indexOf(M,S+1)),-1!==R&&R<S+1&&(R=i.indexOf(P,S+1));var O=A(-1===R?w:Math.min(w,R));if(i.substr(S+1+O,e)===M){f.push(i.substring(W,S).replace(C,z)),i[W=S+1+O+e]!==z&&(S=i.indexOf(z,W)),w=i.indexOf(M,W),R=i.indexOf(P,W);break}var x=A(R);if(i.substring(S+1+x,S+1+x+s)===P){if(f.push(i.substring(W,S).replace(C,z)),D(S+1+x+s),w=i.indexOf(M,W),S=i.indexOf(z,W),o&&(F(),H))return L();if(N&&u.length>=N)return L(!0);break}h.push({type:\"Quotes\",code:\"InvalidQuotes\",message:\"Trailing quote on quoted field is malformed\",row:u.length,index:W}),S++}}else S++}return T();function I(e){u.push(e),d=W}function A(e){var t=0;if(-1!==e){var r=i.substring(S+1,e);r&&\"\"===r.trim()&&(t=r.length)}return t}function T(e){return r||(void 0===e&&(e=i.substring(W)),f.push(e),W=n,I(f),o&&F()),L()}function D(e){W=e,I(f),f=[],R=i.indexOf(P,W)}function L(e){return{data:u,errors:h,meta:{delimiter:M,linebreak:P,aborted:H,truncated:!!e,cursor:d+(t||0)}}}function F(){q(L()),u=[],h=[]}},this.abort=function(){H=!0},this.getCharIndex=function(){return W}}function _(e){var t=e.data,r=a[t.workerId],i=!1;if(t.error)r.userError(t.error,t.file);else if(t.results&&t.results.data){var n={abort:function(){i=!0,m(t.workerId,{data:[],errors:[],meta:{aborted:!0}})},pause:y,resume:y};if(J(r.userStep)){for(var s=0;s<t.results.data.length&&(r.userStep({data:t.results.data[s],errors:t.results.errors,meta:t.results.meta},n),!i);s++);delete t.results}else J(r.userChunk)&&(r.userChunk(t.results,n,t.file),delete t.results)}t.finished&&!i&&m(t.workerId,t.results)}function m(e,t){var r=a[e];J(r.userComplete)&&r.userComplete(t),r.terminate(),delete a[e]}function y(){throw new Error(\"Not implemented.\")}function w(e){if(\"object\"!=typeof e||null===e)return e;var t=Array.isArray(e)?[]:{};for(var r in e)t[r]=w(e[r]);return t}function v(e,t){return function(){e.apply(t,arguments)}}function J(e){return\"function\"==typeof e}return o&&(f.onmessage=function(e){var t=e.data;void 0===b.WORKER_ID&&t&&(b.WORKER_ID=t.workerId);if(\"string\"==typeof t.input)f.postMessage({workerId:b.WORKER_ID,results:b.parse(t.input,t.config),finished:!0});else if(f.File&&t.input instanceof File||t.input instanceof Object){var r=b.parse(t.input,t.config);r&&f.postMessage({workerId:b.WORKER_ID,results:r,finished:!0})}}),(l.prototype=Object.create(h.prototype)).constructor=l,(c.prototype=Object.create(h.prototype)).constructor=c,(p.prototype=Object.create(p.prototype)).constructor=p,(g.prototype=Object.create(h.prototype)).constructor=g,b});","/**\n * @license React\n * react-dom-client.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n  React = require(\"react\"),\n  ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction isValidContainer(node) {\n  return !(\n    !node ||\n    (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n  );\n}\nfunction getNearestMountedFiber(fiber) {\n  var node = fiber,\n    nearestMounted = fiber;\n  if (fiber.alternate) for (; node.return; ) node = node.return;\n  else {\n    fiber = node;\n    do\n      (node = fiber),\n        0 !== (node.flags & 4098) && (nearestMounted = node.return),\n        (fiber = node.return);\n    while (fiber);\n  }\n  return 3 === node.tag ? nearestMounted : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n  if (13 === fiber.tag) {\n    var suspenseState = fiber.memoizedState;\n    null === suspenseState &&\n      ((fiber = fiber.alternate),\n      null !== fiber && (suspenseState = fiber.memoizedState));\n    if (null !== suspenseState) return suspenseState.dehydrated;\n  }\n  return null;\n}\nfunction getActivityInstanceFromFiber(fiber) {\n  if (31 === fiber.tag) {\n    var activityState = fiber.memoizedState;\n    null === activityState &&\n      ((fiber = fiber.alternate),\n      null !== fiber && (activityState = fiber.memoizedState));\n    if (null !== activityState) return activityState.dehydrated;\n  }\n  return null;\n}\nfunction assertIsMounted(fiber) {\n  if (getNearestMountedFiber(fiber) !== fiber)\n    throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n  var alternate = fiber.alternate;\n  if (!alternate) {\n    alternate = getNearestMountedFiber(fiber);\n    if (null === alternate) throw Error(formatProdErrorMessage(188));\n    return alternate !== fiber ? null : fiber;\n  }\n  for (var a = fiber, b = alternate; ; ) {\n    var parentA = a.return;\n    if (null === parentA) break;\n    var parentB = parentA.alternate;\n    if (null === parentB) {\n      b = parentA.return;\n      if (null !== b) {\n        a = b;\n        continue;\n      }\n      break;\n    }\n    if (parentA.child === parentB.child) {\n      for (parentB = parentA.child; parentB; ) {\n        if (parentB === a) return assertIsMounted(parentA), fiber;\n        if (parentB === b) return assertIsMounted(parentA), alternate;\n        parentB = parentB.sibling;\n      }\n      throw Error(formatProdErrorMessage(188));\n    }\n    if (a.return !== b.return) (a = parentA), (b = parentB);\n    else {\n      for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n        if (child$0 === a) {\n          didFindChild = !0;\n          a = parentA;\n          b = parentB;\n          break;\n        }\n        if (child$0 === b) {\n          didFindChild = !0;\n          b = parentA;\n          a = parentB;\n          break;\n        }\n        child$0 = child$0.sibling;\n      }\n      if (!didFindChild) {\n        for (child$0 = parentB.child; child$0; ) {\n          if (child$0 === a) {\n            didFindChild = !0;\n            a = parentB;\n            b = parentA;\n            break;\n          }\n          if (child$0 === b) {\n            didFindChild = !0;\n            b = parentB;\n            a = parentA;\n            break;\n          }\n          child$0 = child$0.sibling;\n        }\n        if (!didFindChild) throw Error(formatProdErrorMessage(189));\n      }\n    }\n    if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n  }\n  if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n  return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n  var tag = node.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n  for (node = node.child; null !== node; ) {\n    tag = findCurrentHostFiberImpl(node);\n    if (null !== tag) return tag;\n    node = node.sibling;\n  }\n  return null;\n}\nvar assign = Object.assign,\n  REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n  REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\nSymbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\nSymbol.for(\"react.view_transition\");\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n  if (null == type) return null;\n  if (\"function\" === typeof type)\n    return type.$$typeof === REACT_CLIENT_REFERENCE\n      ? null\n      : type.displayName || type.name || null;\n  if (\"string\" === typeof type) return type;\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return \"Fragment\";\n    case REACT_PROFILER_TYPE:\n      return \"Profiler\";\n    case REACT_STRICT_MODE_TYPE:\n      return \"StrictMode\";\n    case REACT_SUSPENSE_TYPE:\n      return \"Suspense\";\n    case REACT_SUSPENSE_LIST_TYPE:\n      return \"SuspenseList\";\n    case REACT_ACTIVITY_TYPE:\n      return \"Activity\";\n  }\n  if (\"object\" === typeof type)\n    switch (type.$$typeof) {\n      case REACT_PORTAL_TYPE:\n        return \"Portal\";\n      case REACT_CONTEXT_TYPE:\n        return type.displayName || \"Context\";\n      case REACT_CONSUMER_TYPE:\n        return (type._context.displayName || \"Context\") + \".Consumer\";\n      case REACT_FORWARD_REF_TYPE:\n        var innerType = type.render;\n        type = type.displayName;\n        type ||\n          ((type = innerType.displayName || innerType.name || \"\"),\n          (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n        return type;\n      case REACT_MEMO_TYPE:\n        return (\n          (innerType = type.displayName || null),\n          null !== innerType\n            ? innerType\n            : getComponentNameFromType(type.type) || \"Memo\"\n        );\n      case REACT_LAZY_TYPE:\n        innerType = type._payload;\n        type = type._init;\n        try {\n          return getComponentNameFromType(type(innerType));\n        } catch (x) {}\n    }\n  return null;\n}\nvar isArrayImpl = Array.isArray,\n  ReactSharedInternals =\n    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  ReactDOMSharedInternals =\n    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  sharedNotPendingObject = {\n    pending: !1,\n    data: null,\n    method: null,\n    action: null\n  },\n  valueStack = [],\n  index = -1;\nfunction createCursor(defaultValue) {\n  return { current: defaultValue };\n}\nfunction pop(cursor) {\n  0 > index ||\n    ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n  index++;\n  valueStack[index] = cursor.current;\n  cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n  contextFiberStackCursor = createCursor(null),\n  rootInstanceStackCursor = createCursor(null),\n  hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n  push(rootInstanceStackCursor, nextRootInstance);\n  push(contextFiberStackCursor, fiber);\n  push(contextStackCursor, null);\n  switch (nextRootInstance.nodeType) {\n    case 9:\n    case 11:\n      fiber = (fiber = nextRootInstance.documentElement)\n        ? (fiber = fiber.namespaceURI)\n          ? getOwnHostContext(fiber)\n          : 0\n        : 0;\n      break;\n    default:\n      if (\n        ((fiber = nextRootInstance.tagName),\n        (nextRootInstance = nextRootInstance.namespaceURI))\n      )\n        (nextRootInstance = getOwnHostContext(nextRootInstance)),\n          (fiber = getChildHostContextProd(nextRootInstance, fiber));\n      else\n        switch (fiber) {\n          case \"svg\":\n            fiber = 1;\n            break;\n          case \"math\":\n            fiber = 2;\n            break;\n          default:\n            fiber = 0;\n        }\n  }\n  pop(contextStackCursor);\n  push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n  pop(contextStackCursor);\n  pop(contextFiberStackCursor);\n  pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n  null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);\n  var context = contextStackCursor.current;\n  var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);\n  context !== JSCompiler_inline_result &&\n    (push(contextFiberStackCursor, fiber),\n    push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n  contextFiberStackCursor.current === fiber &&\n    (pop(contextStackCursor), pop(contextFiberStackCursor));\n  hostTransitionProviderCursor.current === fiber &&\n    (pop(hostTransitionProviderCursor),\n    (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n  if (void 0 === prefix)\n    try {\n      throw Error();\n    } catch (x) {\n      var match = x.stack.trim().match(/\\n( *(at )?)/);\n      prefix = (match && match[1]) || \"\";\n      suffix =\n        -1 < x.stack.indexOf(\"\\n    at\")\n          ? \" (<anonymous>)\"\n          : -1 < x.stack.indexOf(\"@\")\n            ? \"@unknown:0:0\"\n            : \"\";\n    }\n  return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n  if (!fn || reentry) return \"\";\n  reentry = !0;\n  var previousPrepareStackTrace = Error.prepareStackTrace;\n  Error.prepareStackTrace = void 0;\n  try {\n    var RunInRootFrame = {\n      DetermineComponentFrameRoot: function () {\n        try {\n          if (construct) {\n            var Fake = function () {\n              throw Error();\n            };\n            Object.defineProperty(Fake.prototype, \"props\", {\n              set: function () {\n                throw Error();\n              }\n            });\n            if (\"object\" === typeof Reflect && Reflect.construct) {\n              try {\n                Reflect.construct(Fake, []);\n              } catch (x) {\n                var control = x;\n              }\n              Reflect.construct(fn, [], Fake);\n            } else {\n              try {\n                Fake.call();\n              } catch (x$1) {\n                control = x$1;\n              }\n              fn.call(Fake.prototype);\n            }\n          } else {\n            try {\n              throw Error();\n            } catch (x$2) {\n              control = x$2;\n            }\n            (Fake = fn()) &&\n              \"function\" === typeof Fake.catch &&\n              Fake.catch(function () {});\n          }\n        } catch (sample) {\n          if (sample && control && \"string\" === typeof sample.stack)\n            return [sample.stack, control.stack];\n        }\n        return [null, null];\n      }\n    };\n    RunInRootFrame.DetermineComponentFrameRoot.displayName =\n      \"DetermineComponentFrameRoot\";\n    var namePropDescriptor = Object.getOwnPropertyDescriptor(\n      RunInRootFrame.DetermineComponentFrameRoot,\n      \"name\"\n    );\n    namePropDescriptor &&\n      namePropDescriptor.configurable &&\n      Object.defineProperty(\n        RunInRootFrame.DetermineComponentFrameRoot,\n        \"name\",\n        { value: \"DetermineComponentFrameRoot\" }\n      );\n    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n      sampleStack = _RunInRootFrame$Deter[0],\n      controlStack = _RunInRootFrame$Deter[1];\n    if (sampleStack && controlStack) {\n      var sampleLines = sampleStack.split(\"\\n\"),\n        controlLines = controlStack.split(\"\\n\");\n      for (\n        namePropDescriptor = RunInRootFrame = 0;\n        RunInRootFrame < sampleLines.length &&\n        !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n      )\n        RunInRootFrame++;\n      for (\n        ;\n        namePropDescriptor < controlLines.length &&\n        !controlLines[namePropDescriptor].includes(\n          \"DetermineComponentFrameRoot\"\n        );\n\n      )\n        namePropDescriptor++;\n      if (\n        RunInRootFrame === sampleLines.length ||\n        namePropDescriptor === controlLines.length\n      )\n        for (\n          RunInRootFrame = sampleLines.length - 1,\n            namePropDescriptor = controlLines.length - 1;\n          1 <= RunInRootFrame &&\n          0 <= namePropDescriptor &&\n          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n        )\n          namePropDescriptor--;\n      for (\n        ;\n        1 <= RunInRootFrame && 0 <= namePropDescriptor;\n        RunInRootFrame--, namePropDescriptor--\n      )\n        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n            do\n              if (\n                (RunInRootFrame--,\n                namePropDescriptor--,\n                0 > namePropDescriptor ||\n                  sampleLines[RunInRootFrame] !==\n                    controlLines[namePropDescriptor])\n              ) {\n                var frame =\n                  \"\\n\" +\n                  sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n                fn.displayName &&\n                  frame.includes(\"<anonymous>\") &&\n                  (frame = frame.replace(\"<anonymous>\", fn.displayName));\n                return frame;\n              }\n            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n          }\n          break;\n        }\n    }\n  } finally {\n    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n  }\n  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n    ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n    : \"\";\n}\nfunction describeFiber(fiber, childFiber) {\n  switch (fiber.tag) {\n    case 26:\n    case 27:\n    case 5:\n      return describeBuiltInComponentFrame(fiber.type);\n    case 16:\n      return describeBuiltInComponentFrame(\"Lazy\");\n    case 13:\n      return fiber.child !== childFiber && null !== childFiber\n        ? describeBuiltInComponentFrame(\"Suspense Fallback\")\n        : describeBuiltInComponentFrame(\"Suspense\");\n    case 19:\n      return describeBuiltInComponentFrame(\"SuspenseList\");\n    case 0:\n    case 15:\n      return describeNativeComponentFrame(fiber.type, !1);\n    case 11:\n      return describeNativeComponentFrame(fiber.type.render, !1);\n    case 1:\n      return describeNativeComponentFrame(fiber.type, !0);\n    case 31:\n      return describeBuiltInComponentFrame(\"Activity\");\n    default:\n      return \"\";\n  }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n  try {\n    var info = \"\",\n      previous = null;\n    do\n      (info += describeFiber(workInProgress, previous)),\n        (previous = workInProgress),\n        (workInProgress = workInProgress.return);\n    while (workInProgress);\n    return info;\n  } catch (x) {\n    return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n  }\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n  scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n  cancelCallback$1 = Scheduler.unstable_cancelCallback,\n  shouldYield = Scheduler.unstable_shouldYield,\n  requestPaint = Scheduler.unstable_requestPaint,\n  now = Scheduler.unstable_now,\n  getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n  ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n  UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n  NormalPriority$1 = Scheduler.unstable_NormalPriority,\n  LowPriority = Scheduler.unstable_LowPriority,\n  IdlePriority = Scheduler.unstable_IdlePriority,\n  log$1 = Scheduler.log,\n  unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n  rendererID = null,\n  injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n  \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n  if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n    try {\n      injectedHook.setStrictMode(rendererID, newIsStrictMode);\n    } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n  log = Math.log,\n  LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n  x >>>= 0;\n  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionUpdateLane = 256,\n  nextTransitionDeferredLane = 262144,\n  nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n  var pendingSyncLanes = lanes & 42;\n  if (0 !== pendingSyncLanes) return pendingSyncLanes;\n  switch (lanes & -lanes) {\n    case 1:\n      return 1;\n    case 2:\n      return 2;\n    case 4:\n      return 4;\n    case 8:\n      return 8;\n    case 16:\n      return 16;\n    case 32:\n      return 32;\n    case 64:\n      return 64;\n    case 128:\n      return 128;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n      return lanes & 261888;\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return lanes & 3932160;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return lanes & 62914560;\n    case 67108864:\n      return 67108864;\n    case 134217728:\n      return 134217728;\n    case 268435456:\n      return 268435456;\n    case 536870912:\n      return 536870912;\n    case 1073741824:\n      return 0;\n    default:\n      return lanes;\n  }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n  var pendingLanes = root.pendingLanes;\n  if (0 === pendingLanes) return 0;\n  var nextLanes = 0,\n    suspendedLanes = root.suspendedLanes,\n    pingedLanes = root.pingedLanes;\n  root = root.warmLanes;\n  var nonIdlePendingLanes = pendingLanes & 134217727;\n  0 !== nonIdlePendingLanes\n    ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n      0 !== pendingLanes\n        ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n        : ((pingedLanes &= nonIdlePendingLanes),\n          0 !== pingedLanes\n            ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n            : rootHasPendingCommit ||\n              ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n              0 !== rootHasPendingCommit &&\n                (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n    : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n      0 !== nonIdlePendingLanes\n        ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n        : 0 !== pingedLanes\n          ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n          : rootHasPendingCommit ||\n            ((rootHasPendingCommit = pendingLanes & ~root),\n            0 !== rootHasPendingCommit &&\n              (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n  return 0 === nextLanes\n    ? 0\n    : 0 !== wipLanes &&\n        wipLanes !== nextLanes &&\n        0 === (wipLanes & suspendedLanes) &&\n        ((suspendedLanes = nextLanes & -nextLanes),\n        (rootHasPendingCommit = wipLanes & -wipLanes),\n        suspendedLanes >= rootHasPendingCommit ||\n          (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n      ? wipLanes\n      : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n  return (\n    0 ===\n    (root.pendingLanes &\n      ~(root.suspendedLanes & ~root.pingedLanes) &\n      renderLanes)\n  );\n}\nfunction computeExpirationTime(lane, currentTime) {\n  switch (lane) {\n    case 1:\n    case 2:\n    case 4:\n    case 8:\n    case 64:\n      return currentTime + 250;\n    case 16:\n    case 32:\n    case 128:\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return currentTime + 5e3;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return -1;\n    case 67108864:\n    case 134217728:\n    case 268435456:\n    case 536870912:\n    case 1073741824:\n      return -1;\n    default:\n      return -1;\n  }\n}\nfunction claimNextRetryLane() {\n  var lane = nextRetryLane;\n  nextRetryLane <<= 1;\n  0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n  return lane;\n}\nfunction createLaneMap(initial) {\n  for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n  return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n  root.pendingLanes |= updateLane;\n  268435456 !== updateLane &&\n    ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n  root,\n  finishedLanes,\n  remainingLanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  var previouslyPendingLanes = root.pendingLanes;\n  root.pendingLanes = remainingLanes;\n  root.suspendedLanes = 0;\n  root.pingedLanes = 0;\n  root.warmLanes = 0;\n  root.expiredLanes &= remainingLanes;\n  root.entangledLanes &= remainingLanes;\n  root.errorRecoveryDisabledLanes &= remainingLanes;\n  root.shellSuspendCounter = 0;\n  var entanglements = root.entanglements,\n    expirationTimes = root.expirationTimes,\n    hiddenUpdates = root.hiddenUpdates;\n  for (\n    remainingLanes = previouslyPendingLanes & ~remainingLanes;\n    0 < remainingLanes;\n\n  ) {\n    var index$7 = 31 - clz32(remainingLanes),\n      lane = 1 << index$7;\n    entanglements[index$7] = 0;\n    expirationTimes[index$7] = -1;\n    var hiddenUpdatesForLane = hiddenUpdates[index$7];\n    if (null !== hiddenUpdatesForLane)\n      for (\n        hiddenUpdates[index$7] = null, index$7 = 0;\n        index$7 < hiddenUpdatesForLane.length;\n        index$7++\n      ) {\n        var update = hiddenUpdatesForLane[index$7];\n        null !== update && (update.lane &= -536870913);\n      }\n    remainingLanes &= ~lane;\n  }\n  0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n  0 !== suspendedRetryLanes &&\n    0 === updatedLanes &&\n    0 !== root.tag &&\n    (root.suspendedLanes |=\n      suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n  root.pendingLanes |= spawnedLane;\n  root.suspendedLanes &= ~spawnedLane;\n  var spawnedLaneIndex = 31 - clz32(spawnedLane);\n  root.entangledLanes |= spawnedLane;\n  root.entanglements[spawnedLaneIndex] =\n    root.entanglements[spawnedLaneIndex] |\n    1073741824 |\n    (entangledLanes & 261930);\n}\nfunction markRootEntangled(root, entangledLanes) {\n  var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n  for (root = root.entanglements; rootEntangledLanes; ) {\n    var index$8 = 31 - clz32(rootEntangledLanes),\n      lane = 1 << index$8;\n    (lane & entangledLanes) | (root[index$8] & entangledLanes) &&\n      (root[index$8] |= entangledLanes);\n    rootEntangledLanes &= ~lane;\n  }\n}\nfunction getBumpedLaneForHydration(root, renderLanes) {\n  var renderLane = renderLanes & -renderLanes;\n  renderLane =\n    0 !== (renderLane & 42) ? 1 : getBumpedLaneForHydrationByLane(renderLane);\n  return 0 !== (renderLane & (root.suspendedLanes | renderLanes))\n    ? 0\n    : renderLane;\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n  switch (lane) {\n    case 2:\n      lane = 1;\n      break;\n    case 8:\n      lane = 4;\n      break;\n    case 32:\n      lane = 16;\n      break;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      lane = 128;\n      break;\n    case 268435456:\n      lane = 134217728;\n      break;\n    default:\n      lane = 0;\n  }\n  return lane;\n}\nfunction lanesToEventPriority(lanes) {\n  lanes &= -lanes;\n  return 2 < lanes\n    ? 8 < lanes\n      ? 0 !== (lanes & 134217727)\n        ? 32\n        : 268435456\n      : 8\n    : 2;\n}\nfunction resolveUpdatePriority() {\n  var updatePriority = ReactDOMSharedInternals.p;\n  if (0 !== updatePriority) return updatePriority;\n  updatePriority = window.event;\n  return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    return (ReactDOMSharedInternals.p = priority), fn();\n  } finally {\n    ReactDOMSharedInternals.p = previousPriority;\n  }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n  internalInstanceKey = \"__reactFiber$\" + randomKey,\n  internalPropsKey = \"__reactProps$\" + randomKey,\n  internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n  internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n  internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n  internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n  internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n  internalHoistableMarker = \"__reactMarker$\" + randomKey;\nfunction detachDeletedInstance(node) {\n  delete node[internalInstanceKey];\n  delete node[internalPropsKey];\n  delete node[internalEventHandlersKey];\n  delete node[internalEventHandlerListenersKey];\n  delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n  var targetInst = targetNode[internalInstanceKey];\n  if (targetInst) return targetInst;\n  for (var parentNode = targetNode.parentNode; parentNode; ) {\n    if (\n      (targetInst =\n        parentNode[internalContainerInstanceKey] ||\n        parentNode[internalInstanceKey])\n    ) {\n      parentNode = targetInst.alternate;\n      if (\n        null !== targetInst.child ||\n        (null !== parentNode && null !== parentNode.child)\n      )\n        for (\n          targetNode = getParentHydrationBoundary(targetNode);\n          null !== targetNode;\n\n        ) {\n          if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n          targetNode = getParentHydrationBoundary(targetNode);\n        }\n      return targetInst;\n    }\n    targetNode = parentNode;\n    parentNode = targetNode.parentNode;\n  }\n  return null;\n}\nfunction getInstanceFromNode(node) {\n  if (\n    (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n  ) {\n    var tag = node.tag;\n    if (\n      5 === tag ||\n      6 === tag ||\n      13 === tag ||\n      31 === tag ||\n      26 === tag ||\n      27 === tag ||\n      3 === tag\n    )\n      return node;\n  }\n  return null;\n}\nfunction getNodeFromInstance(inst) {\n  var tag = inst.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n  throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n  var resources = root[internalRootNodeResourcesKey];\n  resources ||\n    (resources = root[internalRootNodeResourcesKey] =\n      { hoistableStyles: new Map(), hoistableScripts: new Map() });\n  return resources;\n}\nfunction markNodeAsHoistable(node) {\n  node[internalHoistableMarker] = !0;\n}\nvar allNativeEvents = new Set(),\n  registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n  registerDirectEvent(registrationName, dependencies);\n  registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n  registrationNameDependencies[registrationName] = dependencies;\n  for (\n    registrationName = 0;\n    registrationName < dependencies.length;\n    registrationName++\n  )\n    allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n    \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n  ),\n  illegalAttributeNameCache = {},\n  validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n    return !0;\n  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n    return (validatedAttributeNameCache[attributeName] = !0);\n  illegalAttributeNameCache[attributeName] = !0;\n  return !1;\n}\nfunction setValueForAttribute(node, name, value) {\n  if (isAttributeNameSafe(name))\n    if (null === value) node.removeAttribute(name);\n    else {\n      switch (typeof value) {\n        case \"undefined\":\n        case \"function\":\n        case \"symbol\":\n          node.removeAttribute(name);\n          return;\n        case \"boolean\":\n          var prefix$10 = name.toLowerCase().slice(0, 5);\n          if (\"data-\" !== prefix$10 && \"aria-\" !== prefix$10) {\n            node.removeAttribute(name);\n            return;\n          }\n      }\n      node.setAttribute(name, \"\" + value);\n    }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttribute(name, \"\" + value);\n  }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttributeNS(namespace, name, \"\" + value);\n  }\n}\nfunction getToStringValue(value) {\n  switch (typeof value) {\n    case \"bigint\":\n    case \"boolean\":\n    case \"number\":\n    case \"string\":\n    case \"undefined\":\n      return value;\n    case \"object\":\n      return value;\n    default:\n      return \"\";\n  }\n}\nfunction isCheckable(elem) {\n  var type = elem.type;\n  return (\n    (elem = elem.nodeName) &&\n    \"input\" === elem.toLowerCase() &&\n    (\"checkbox\" === type || \"radio\" === type)\n  );\n}\nfunction trackValueOnNode(node, valueField, currentValue) {\n  var descriptor = Object.getOwnPropertyDescriptor(\n    node.constructor.prototype,\n    valueField\n  );\n  if (\n    !node.hasOwnProperty(valueField) &&\n    \"undefined\" !== typeof descriptor &&\n    \"function\" === typeof descriptor.get &&\n    \"function\" === typeof descriptor.set\n  ) {\n    var get = descriptor.get,\n      set = descriptor.set;\n    Object.defineProperty(node, valueField, {\n      configurable: !0,\n      get: function () {\n        return get.call(this);\n      },\n      set: function (value) {\n        currentValue = \"\" + value;\n        set.call(this, value);\n      }\n    });\n    Object.defineProperty(node, valueField, {\n      enumerable: descriptor.enumerable\n    });\n    return {\n      getValue: function () {\n        return currentValue;\n      },\n      setValue: function (value) {\n        currentValue = \"\" + value;\n      },\n      stopTracking: function () {\n        node._valueTracker = null;\n        delete node[valueField];\n      }\n    };\n  }\n}\nfunction track(node) {\n  if (!node._valueTracker) {\n    var valueField = isCheckable(node) ? \"checked\" : \"value\";\n    node._valueTracker = trackValueOnNode(\n      node,\n      valueField,\n      \"\" + node[valueField]\n    );\n  }\n}\nfunction updateValueIfChanged(node) {\n  if (!node) return !1;\n  var tracker = node._valueTracker;\n  if (!tracker) return !0;\n  var lastValue = tracker.getValue();\n  var value = \"\";\n  node &&\n    (value = isCheckable(node)\n      ? node.checked\n        ? \"true\"\n        : \"false\"\n      : node.value);\n  node = value;\n  return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nfunction getActiveElement(doc) {\n  doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n  if (\"undefined\" === typeof doc) return null;\n  try {\n    return doc.activeElement || doc.body;\n  } catch (e) {\n    return doc.body;\n  }\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n  return value.replace(\n    escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n    function (ch) {\n      return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n    }\n  );\n}\nfunction updateInput(\n  element,\n  value,\n  defaultValue,\n  lastDefaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name\n) {\n  element.name = \"\";\n  null != type &&\n  \"function\" !== typeof type &&\n  \"symbol\" !== typeof type &&\n  \"boolean\" !== typeof type\n    ? (element.type = type)\n    : element.removeAttribute(\"type\");\n  if (null != value)\n    if (\"number\" === type) {\n      if ((0 === value && \"\" === element.value) || element.value != value)\n        element.value = \"\" + getToStringValue(value);\n    } else\n      element.value !== \"\" + getToStringValue(value) &&\n        (element.value = \"\" + getToStringValue(value));\n  else\n    (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n  null != value\n    ? setDefaultValue(element, type, getToStringValue(value))\n    : null != defaultValue\n      ? setDefaultValue(element, type, getToStringValue(defaultValue))\n      : null != lastDefaultValue && element.removeAttribute(\"value\");\n  null == checked &&\n    null != defaultChecked &&\n    (element.defaultChecked = !!defaultChecked);\n  null != checked &&\n    (element.checked =\n      checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n  null != name &&\n  \"function\" !== typeof name &&\n  \"symbol\" !== typeof name &&\n  \"boolean\" !== typeof name\n    ? (element.name = \"\" + getToStringValue(name))\n    : element.removeAttribute(\"name\");\n}\nfunction initInput(\n  element,\n  value,\n  defaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name,\n  isHydrating\n) {\n  null != type &&\n    \"function\" !== typeof type &&\n    \"symbol\" !== typeof type &&\n    \"boolean\" !== typeof type &&\n    (element.type = type);\n  if (null != value || null != defaultValue) {\n    if (\n      !(\n        (\"submit\" !== type && \"reset\" !== type) ||\n        (void 0 !== value && null !== value)\n      )\n    ) {\n      track(element);\n      return;\n    }\n    defaultValue =\n      null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n    value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n    isHydrating || value === element.value || (element.value = value);\n    element.defaultValue = value;\n  }\n  checked = null != checked ? checked : defaultChecked;\n  checked =\n    \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n  element.checked = isHydrating ? element.checked : !!checked;\n  element.defaultChecked = !!checked;\n  null != name &&\n    \"function\" !== typeof name &&\n    \"symbol\" !== typeof name &&\n    \"boolean\" !== typeof name &&\n    (element.name = name);\n  track(element);\n}\nfunction setDefaultValue(node, type, value) {\n  (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n    node.defaultValue === \"\" + value ||\n    (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n  node = node.options;\n  if (multiple) {\n    multiple = {};\n    for (var i = 0; i < propValue.length; i++)\n      multiple[\"$\" + propValue[i]] = !0;\n    for (propValue = 0; propValue < node.length; propValue++)\n      (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n        node[propValue].selected !== i && (node[propValue].selected = i),\n        i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n  } else {\n    propValue = \"\" + getToStringValue(propValue);\n    multiple = null;\n    for (i = 0; i < node.length; i++) {\n      if (node[i].value === propValue) {\n        node[i].selected = !0;\n        setDefaultSelected && (node[i].defaultSelected = !0);\n        return;\n      }\n      null !== multiple || node[i].disabled || (multiple = node[i]);\n    }\n    null !== multiple && (multiple.selected = !0);\n  }\n}\nfunction updateTextarea(element, value, defaultValue) {\n  if (\n    null != value &&\n    ((value = \"\" + getToStringValue(value)),\n    value !== element.value && (element.value = value),\n    null == defaultValue)\n  ) {\n    element.defaultValue !== value && (element.defaultValue = value);\n    return;\n  }\n  element.defaultValue =\n    null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n  if (null == value) {\n    if (null != children) {\n      if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n      if (isArrayImpl(children)) {\n        if (1 < children.length) throw Error(formatProdErrorMessage(93));\n        children = children[0];\n      }\n      defaultValue = children;\n    }\n    null == defaultValue && (defaultValue = \"\");\n    value = defaultValue;\n  }\n  defaultValue = getToStringValue(value);\n  element.defaultValue = defaultValue;\n  children = element.textContent;\n  children === defaultValue &&\n    \"\" !== children &&\n    null !== children &&\n    (element.value = children);\n  track(element);\n}\nfunction setTextContent(node, text) {\n  if (text) {\n    var firstChild = node.firstChild;\n    if (\n      firstChild &&\n      firstChild === node.lastChild &&\n      3 === firstChild.nodeType\n    ) {\n      firstChild.nodeValue = text;\n      return;\n    }\n  }\n  node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n  \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n    \" \"\n  )\n);\nfunction setValueForStyle(style, styleName, value) {\n  var isCustomProperty = 0 === styleName.indexOf(\"--\");\n  null == value || \"boolean\" === typeof value || \"\" === value\n    ? isCustomProperty\n      ? style.setProperty(styleName, \"\")\n      : \"float\" === styleName\n        ? (style.cssFloat = \"\")\n        : (style[styleName] = \"\")\n    : isCustomProperty\n      ? style.setProperty(styleName, value)\n      : \"number\" !== typeof value ||\n          0 === value ||\n          unitlessNumbers.has(styleName)\n        ? \"float\" === styleName\n          ? (style.cssFloat = value)\n          : (style[styleName] = (\"\" + value).trim())\n        : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n  if (null != styles && \"object\" !== typeof styles)\n    throw Error(formatProdErrorMessage(62));\n  node = node.style;\n  if (null != prevStyles) {\n    for (var styleName in prevStyles)\n      !prevStyles.hasOwnProperty(styleName) ||\n        (null != styles && styles.hasOwnProperty(styleName)) ||\n        (0 === styleName.indexOf(\"--\")\n          ? node.setProperty(styleName, \"\")\n          : \"float\" === styleName\n            ? (node.cssFloat = \"\")\n            : (node[styleName] = \"\"));\n    for (var styleName$16 in styles)\n      (styleName = styles[styleName$16]),\n        styles.hasOwnProperty(styleName$16) &&\n          prevStyles[styleName$16] !== styleName &&\n          setValueForStyle(node, styleName$16, styleName);\n  } else\n    for (var styleName$17 in styles)\n      styles.hasOwnProperty(styleName$17) &&\n        setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n  if (-1 === tagName.indexOf(\"-\")) return !1;\n  switch (tagName) {\n    case \"annotation-xml\":\n    case \"color-profile\":\n    case \"font-face\":\n    case \"font-face-src\":\n    case \"font-face-uri\":\n    case \"font-face-format\":\n    case \"font-face-name\":\n    case \"missing-glyph\":\n      return !1;\n    default:\n      return !0;\n  }\n}\nvar aliases = new Map([\n    [\"acceptCharset\", \"accept-charset\"],\n    [\"htmlFor\", \"for\"],\n    [\"httpEquiv\", \"http-equiv\"],\n    [\"crossOrigin\", \"crossorigin\"],\n    [\"accentHeight\", \"accent-height\"],\n    [\"alignmentBaseline\", \"alignment-baseline\"],\n    [\"arabicForm\", \"arabic-form\"],\n    [\"baselineShift\", \"baseline-shift\"],\n    [\"capHeight\", \"cap-height\"],\n    [\"clipPath\", \"clip-path\"],\n    [\"clipRule\", \"clip-rule\"],\n    [\"colorInterpolation\", \"color-interpolation\"],\n    [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n    [\"colorProfile\", \"color-profile\"],\n    [\"colorRendering\", \"color-rendering\"],\n    [\"dominantBaseline\", \"dominant-baseline\"],\n    [\"enableBackground\", \"enable-background\"],\n    [\"fillOpacity\", \"fill-opacity\"],\n    [\"fillRule\", \"fill-rule\"],\n    [\"floodColor\", \"flood-color\"],\n    [\"floodOpacity\", \"flood-opacity\"],\n    [\"fontFamily\", \"font-family\"],\n    [\"fontSize\", \"font-size\"],\n    [\"fontSizeAdjust\", \"font-size-adjust\"],\n    [\"fontStretch\", \"font-stretch\"],\n    [\"fontStyle\", \"font-style\"],\n    [\"fontVariant\", \"font-variant\"],\n    [\"fontWeight\", \"font-weight\"],\n    [\"glyphName\", \"glyph-name\"],\n    [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n    [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n    [\"horizAdvX\", \"horiz-adv-x\"],\n    [\"horizOriginX\", \"horiz-origin-x\"],\n    [\"imageRendering\", \"image-rendering\"],\n    [\"letterSpacing\", \"letter-spacing\"],\n    [\"lightingColor\", \"lighting-color\"],\n    [\"markerEnd\", \"marker-end\"],\n    [\"markerMid\", \"marker-mid\"],\n    [\"markerStart\", \"marker-start\"],\n    [\"overlinePosition\", \"overline-position\"],\n    [\"overlineThickness\", \"overline-thickness\"],\n    [\"paintOrder\", \"paint-order\"],\n    [\"panose-1\", \"panose-1\"],\n    [\"pointerEvents\", \"pointer-events\"],\n    [\"renderingIntent\", \"rendering-intent\"],\n    [\"shapeRendering\", \"shape-rendering\"],\n    [\"stopColor\", \"stop-color\"],\n    [\"stopOpacity\", \"stop-opacity\"],\n    [\"strikethroughPosition\", \"strikethrough-position\"],\n    [\"strikethroughThickness\", \"strikethrough-thickness\"],\n    [\"strokeDasharray\", \"stroke-dasharray\"],\n    [\"strokeDashoffset\", \"stroke-dashoffset\"],\n    [\"strokeLinecap\", \"stroke-linecap\"],\n    [\"strokeLinejoin\", \"stroke-linejoin\"],\n    [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n    [\"strokeOpacity\", \"stroke-opacity\"],\n    [\"strokeWidth\", \"stroke-width\"],\n    [\"textAnchor\", \"text-anchor\"],\n    [\"textDecoration\", \"text-decoration\"],\n    [\"textRendering\", \"text-rendering\"],\n    [\"transformOrigin\", \"transform-origin\"],\n    [\"underlinePosition\", \"underline-position\"],\n    [\"underlineThickness\", \"underline-thickness\"],\n    [\"unicodeBidi\", \"unicode-bidi\"],\n    [\"unicodeRange\", \"unicode-range\"],\n    [\"unitsPerEm\", \"units-per-em\"],\n    [\"vAlphabetic\", \"v-alphabetic\"],\n    [\"vHanging\", \"v-hanging\"],\n    [\"vIdeographic\", \"v-ideographic\"],\n    [\"vMathematical\", \"v-mathematical\"],\n    [\"vectorEffect\", \"vector-effect\"],\n    [\"vertAdvY\", \"vert-adv-y\"],\n    [\"vertOriginX\", \"vert-origin-x\"],\n    [\"vertOriginY\", \"vert-origin-y\"],\n    [\"wordSpacing\", \"word-spacing\"],\n    [\"writingMode\", \"writing-mode\"],\n    [\"xmlnsXlink\", \"xmlns:xlink\"],\n    [\"xHeight\", \"x-height\"]\n  ]),\n  isJavaScriptProtocol =\n    /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n  return isJavaScriptProtocol.test(\"\" + url)\n    ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n    : url;\n}\nfunction noop$1() {}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n  nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n  nativeEvent.correspondingUseElement &&\n    (nativeEvent = nativeEvent.correspondingUseElement);\n  return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n  restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n  var internalInstance = getInstanceFromNode(target);\n  if (internalInstance && (target = internalInstance.stateNode)) {\n    var props = target[internalPropsKey] || null;\n    a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n      case \"input\":\n        updateInput(\n          target,\n          props.value,\n          props.defaultValue,\n          props.defaultValue,\n          props.checked,\n          props.defaultChecked,\n          props.type,\n          props.name\n        );\n        internalInstance = props.name;\n        if (\"radio\" === props.type && null != internalInstance) {\n          for (props = target; props.parentNode; ) props = props.parentNode;\n          props = props.querySelectorAll(\n            'input[name=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                \"\" + internalInstance\n              ) +\n              '\"][type=\"radio\"]'\n          );\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          ) {\n            var otherNode = props[internalInstance];\n            if (otherNode !== target && otherNode.form === target.form) {\n              var otherProps = otherNode[internalPropsKey] || null;\n              if (!otherProps) throw Error(formatProdErrorMessage(90));\n              updateInput(\n                otherNode,\n                otherProps.value,\n                otherProps.defaultValue,\n                otherProps.defaultValue,\n                otherProps.checked,\n                otherProps.defaultChecked,\n                otherProps.type,\n                otherProps.name\n              );\n            }\n          }\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          )\n            (otherNode = props[internalInstance]),\n              otherNode.form === target.form && updateValueIfChanged(otherNode);\n        }\n        break a;\n      case \"textarea\":\n        updateTextarea(target, props.value, props.defaultValue);\n        break a;\n      case \"select\":\n        (internalInstance = props.value),\n          null != internalInstance &&\n            updateOptions(target, !!props.multiple, internalInstance, !1);\n    }\n  }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n  if (isInsideEventHandler) return fn(a, b);\n  isInsideEventHandler = !0;\n  try {\n    var JSCompiler_inline_result = fn(a);\n    return JSCompiler_inline_result;\n  } finally {\n    if (\n      ((isInsideEventHandler = !1),\n      null !== restoreTarget || null !== restoreQueue)\n    )\n      if (\n        (flushSyncWork$1(),\n        restoreTarget &&\n          ((a = restoreTarget),\n          (fn = restoreQueue),\n          (restoreQueue = restoreTarget = null),\n          restoreStateOfTarget(a),\n          fn))\n      )\n        for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n  }\n}\nfunction getListener(inst, registrationName) {\n  var stateNode = inst.stateNode;\n  if (null === stateNode) return null;\n  var props = stateNode[internalPropsKey] || null;\n  if (null === props) return null;\n  stateNode = props[registrationName];\n  a: switch (registrationName) {\n    case \"onClick\":\n    case \"onClickCapture\":\n    case \"onDoubleClick\":\n    case \"onDoubleClickCapture\":\n    case \"onMouseDown\":\n    case \"onMouseDownCapture\":\n    case \"onMouseMove\":\n    case \"onMouseMoveCapture\":\n    case \"onMouseUp\":\n    case \"onMouseUpCapture\":\n    case \"onMouseEnter\":\n      (props = !props.disabled) ||\n        ((inst = inst.type),\n        (props = !(\n          \"button\" === inst ||\n          \"input\" === inst ||\n          \"select\" === inst ||\n          \"textarea\" === inst\n        )));\n      inst = !props;\n      break a;\n    default:\n      inst = !1;\n  }\n  if (inst) return null;\n  if (stateNode && \"function\" !== typeof stateNode)\n    throw Error(\n      formatProdErrorMessage(231, registrationName, typeof stateNode)\n    );\n  return stateNode;\n}\nvar canUseDOM = !(\n    \"undefined\" === typeof window ||\n    \"undefined\" === typeof window.document ||\n    \"undefined\" === typeof window.document.createElement\n  ),\n  passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n  try {\n    var options = {};\n    Object.defineProperty(options, \"passive\", {\n      get: function () {\n        passiveBrowserEventsSupported = !0;\n      }\n    });\n    window.addEventListener(\"test\", options, options);\n    window.removeEventListener(\"test\", options, options);\n  } catch (e) {\n    passiveBrowserEventsSupported = !1;\n  }\nvar root = null,\n  startText = null,\n  fallbackText = null;\nfunction getData() {\n  if (fallbackText) return fallbackText;\n  var start,\n    startValue = startText,\n    startLength = startValue.length,\n    end,\n    endValue = \"value\" in root ? root.value : root.textContent,\n    endLength = endValue.length;\n  for (\n    start = 0;\n    start < startLength && startValue[start] === endValue[start];\n    start++\n  );\n  var minEnd = startLength - start;\n  for (\n    end = 1;\n    end <= minEnd &&\n    startValue[startLength - end] === endValue[endLength - end];\n    end++\n  );\n  return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n  var keyCode = nativeEvent.keyCode;\n  \"charCode\" in nativeEvent\n    ? ((nativeEvent = nativeEvent.charCode),\n      0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n    : (nativeEvent = keyCode);\n  10 === nativeEvent && (nativeEvent = 13);\n  return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n  return !0;\n}\nfunction functionThatReturnsFalse() {\n  return !1;\n}\nfunction createSyntheticEvent(Interface) {\n  function SyntheticBaseEvent(\n    reactName,\n    reactEventType,\n    targetInst,\n    nativeEvent,\n    nativeEventTarget\n  ) {\n    this._reactName = reactName;\n    this._targetInst = targetInst;\n    this.type = reactEventType;\n    this.nativeEvent = nativeEvent;\n    this.target = nativeEventTarget;\n    this.currentTarget = null;\n    for (var propName in Interface)\n      Interface.hasOwnProperty(propName) &&\n        ((reactName = Interface[propName]),\n        (this[propName] = reactName\n          ? reactName(nativeEvent)\n          : nativeEvent[propName]));\n    this.isDefaultPrevented = (\n      null != nativeEvent.defaultPrevented\n        ? nativeEvent.defaultPrevented\n        : !1 === nativeEvent.returnValue\n    )\n      ? functionThatReturnsTrue\n      : functionThatReturnsFalse;\n    this.isPropagationStopped = functionThatReturnsFalse;\n    return this;\n  }\n  assign(SyntheticBaseEvent.prototype, {\n    preventDefault: function () {\n      this.defaultPrevented = !0;\n      var event = this.nativeEvent;\n      event &&\n        (event.preventDefault\n          ? event.preventDefault()\n          : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n        (this.isDefaultPrevented = functionThatReturnsTrue));\n    },\n    stopPropagation: function () {\n      var event = this.nativeEvent;\n      event &&\n        (event.stopPropagation\n          ? event.stopPropagation()\n          : \"unknown\" !== typeof event.cancelBubble &&\n            (event.cancelBubble = !0),\n        (this.isPropagationStopped = functionThatReturnsTrue));\n    },\n    persist: function () {},\n    isPersistent: functionThatReturnsTrue\n  });\n  return SyntheticBaseEvent;\n}\nvar EventInterface = {\n    eventPhase: 0,\n    bubbles: 0,\n    cancelable: 0,\n    timeStamp: function (event) {\n      return event.timeStamp || Date.now();\n    },\n    defaultPrevented: 0,\n    isTrusted: 0\n  },\n  SyntheticEvent = createSyntheticEvent(EventInterface),\n  UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n  SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n  lastMovementX,\n  lastMovementY,\n  lastMouseEvent,\n  MouseEventInterface = assign({}, UIEventInterface, {\n    screenX: 0,\n    screenY: 0,\n    clientX: 0,\n    clientY: 0,\n    pageX: 0,\n    pageY: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    getModifierState: getEventModifierState,\n    button: 0,\n    buttons: 0,\n    relatedTarget: function (event) {\n      return void 0 === event.relatedTarget\n        ? event.fromElement === event.srcElement\n          ? event.toElement\n          : event.fromElement\n        : event.relatedTarget;\n    },\n    movementX: function (event) {\n      if (\"movementX\" in event) return event.movementX;\n      event !== lastMouseEvent &&\n        (lastMouseEvent && \"mousemove\" === event.type\n          ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n            (lastMovementY = event.screenY - lastMouseEvent.screenY))\n          : (lastMovementY = lastMovementX = 0),\n        (lastMouseEvent = event));\n      return lastMovementX;\n    },\n    movementY: function (event) {\n      return \"movementY\" in event ? event.movementY : lastMovementY;\n    }\n  }),\n  SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n  DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n  SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n  FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n  SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n  AnimationEventInterface = assign({}, EventInterface, {\n    animationName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n  ClipboardEventInterface = assign({}, EventInterface, {\n    clipboardData: function (event) {\n      return \"clipboardData\" in event\n        ? event.clipboardData\n        : window.clipboardData;\n    }\n  }),\n  SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n  CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n  SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n  normalizeKey = {\n    Esc: \"Escape\",\n    Spacebar: \" \",\n    Left: \"ArrowLeft\",\n    Up: \"ArrowUp\",\n    Right: \"ArrowRight\",\n    Down: \"ArrowDown\",\n    Del: \"Delete\",\n    Win: \"OS\",\n    Menu: \"ContextMenu\",\n    Apps: \"ContextMenu\",\n    Scroll: \"ScrollLock\",\n    MozPrintableKey: \"Unidentified\"\n  },\n  translateToKey = {\n    8: \"Backspace\",\n    9: \"Tab\",\n    12: \"Clear\",\n    13: \"Enter\",\n    16: \"Shift\",\n    17: \"Control\",\n    18: \"Alt\",\n    19: \"Pause\",\n    20: \"CapsLock\",\n    27: \"Escape\",\n    32: \" \",\n    33: \"PageUp\",\n    34: \"PageDown\",\n    35: \"End\",\n    36: \"Home\",\n    37: \"ArrowLeft\",\n    38: \"ArrowUp\",\n    39: \"ArrowRight\",\n    40: \"ArrowDown\",\n    45: \"Insert\",\n    46: \"Delete\",\n    112: \"F1\",\n    113: \"F2\",\n    114: \"F3\",\n    115: \"F4\",\n    116: \"F5\",\n    117: \"F6\",\n    118: \"F7\",\n    119: \"F8\",\n    120: \"F9\",\n    121: \"F10\",\n    122: \"F11\",\n    123: \"F12\",\n    144: \"NumLock\",\n    145: \"ScrollLock\",\n    224: \"Meta\"\n  },\n  modifierKeyToProp = {\n    Alt: \"altKey\",\n    Control: \"ctrlKey\",\n    Meta: \"metaKey\",\n    Shift: \"shiftKey\"\n  };\nfunction modifierStateGetter(keyArg) {\n  var nativeEvent = this.nativeEvent;\n  return nativeEvent.getModifierState\n    ? nativeEvent.getModifierState(keyArg)\n    : (keyArg = modifierKeyToProp[keyArg])\n      ? !!nativeEvent[keyArg]\n      : !1;\n}\nfunction getEventModifierState() {\n  return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n    key: function (nativeEvent) {\n      if (nativeEvent.key) {\n        var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n        if (\"Unidentified\" !== key) return key;\n      }\n      return \"keypress\" === nativeEvent.type\n        ? ((nativeEvent = getEventCharCode(nativeEvent)),\n          13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n        : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n          ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n          : \"\";\n    },\n    code: 0,\n    location: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    repeat: 0,\n    locale: 0,\n    getModifierState: getEventModifierState,\n    charCode: function (event) {\n      return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n    },\n    keyCode: function (event) {\n      return \"keydown\" === event.type || \"keyup\" === event.type\n        ? event.keyCode\n        : 0;\n    },\n    which: function (event) {\n      return \"keypress\" === event.type\n        ? getEventCharCode(event)\n        : \"keydown\" === event.type || \"keyup\" === event.type\n          ? event.keyCode\n          : 0;\n    }\n  }),\n  SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n  PointerEventInterface = assign({}, MouseEventInterface, {\n    pointerId: 0,\n    width: 0,\n    height: 0,\n    pressure: 0,\n    tangentialPressure: 0,\n    tiltX: 0,\n    tiltY: 0,\n    twist: 0,\n    pointerType: 0,\n    isPrimary: 0\n  }),\n  SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n  TouchEventInterface = assign({}, UIEventInterface, {\n    touches: 0,\n    targetTouches: 0,\n    changedTouches: 0,\n    altKey: 0,\n    metaKey: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    getModifierState: getEventModifierState\n  }),\n  SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n  TransitionEventInterface = assign({}, EventInterface, {\n    propertyName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n  WheelEventInterface = assign({}, MouseEventInterface, {\n    deltaX: function (event) {\n      return \"deltaX\" in event\n        ? event.deltaX\n        : \"wheelDeltaX\" in event\n          ? -event.wheelDeltaX\n          : 0;\n    },\n    deltaY: function (event) {\n      return \"deltaY\" in event\n        ? event.deltaY\n        : \"wheelDeltaY\" in event\n          ? -event.wheelDeltaY\n          : \"wheelDelta\" in event\n            ? -event.wheelDelta\n            : 0;\n    },\n    deltaZ: 0,\n    deltaMode: 0\n  }),\n  SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n  ToggleEventInterface = assign({}, EventInterface, {\n    newState: 0,\n    oldState: 0\n  }),\n  SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n  END_KEYCODES = [9, 13, 27, 32],\n  canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n  documentMode = null;\ncanUseDOM &&\n  \"documentMode\" in document &&\n  (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n  useFallbackCompositionData =\n    canUseDOM &&\n    (!canUseCompositionEvent ||\n      (documentMode && 8 < documentMode && 11 >= documentMode)),\n  SPACEBAR_CHAR = String.fromCharCode(32),\n  hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"keyup\":\n      return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n    case \"keydown\":\n      return 229 !== nativeEvent.keyCode;\n    case \"keypress\":\n    case \"mousedown\":\n    case \"focusout\":\n      return !0;\n    default:\n      return !1;\n  }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n  nativeEvent = nativeEvent.detail;\n  return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n    ? nativeEvent.data\n    : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"compositionend\":\n      return getDataFromCustomEvent(nativeEvent);\n    case \"keypress\":\n      if (32 !== nativeEvent.which) return null;\n      hasSpaceKeypress = !0;\n      return SPACEBAR_CHAR;\n    case \"textInput\":\n      return (\n        (domEventName = nativeEvent.data),\n        domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n      );\n    default:\n      return null;\n  }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n  if (isComposing)\n    return \"compositionend\" === domEventName ||\n      (!canUseCompositionEvent &&\n        isFallbackCompositionEnd(domEventName, nativeEvent))\n      ? ((domEventName = getData()),\n        (fallbackText = startText = root = null),\n        (isComposing = !1),\n        domEventName)\n      : null;\n  switch (domEventName) {\n    case \"paste\":\n      return null;\n    case \"keypress\":\n      if (\n        !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n        (nativeEvent.ctrlKey && nativeEvent.altKey)\n      ) {\n        if (nativeEvent.char && 1 < nativeEvent.char.length)\n          return nativeEvent.char;\n        if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n      }\n      return null;\n    case \"compositionend\":\n      return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n        ? null\n        : nativeEvent.data;\n    default:\n      return null;\n  }\n}\nvar supportedInputTypes = {\n  color: !0,\n  date: !0,\n  datetime: !0,\n  \"datetime-local\": !0,\n  email: !0,\n  month: !0,\n  number: !0,\n  password: !0,\n  range: !0,\n  search: !0,\n  tel: !0,\n  text: !0,\n  time: !0,\n  url: !0,\n  week: !0\n};\nfunction isTextInputElement(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return \"input\" === nodeName\n    ? !!supportedInputTypes[elem.type]\n    : \"textarea\" === nodeName\n      ? !0\n      : !1;\n}\nfunction createAndAccumulateChangeEvent(\n  dispatchQueue,\n  inst,\n  nativeEvent,\n  target\n) {\n  restoreTarget\n    ? restoreQueue\n      ? restoreQueue.push(target)\n      : (restoreQueue = [target])\n    : (restoreTarget = target);\n  inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n  0 < inst.length &&\n    ((nativeEvent = new SyntheticEvent(\n      \"onChange\",\n      \"change\",\n      null,\n      nativeEvent,\n      target\n    )),\n    dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n  activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n  processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n  var targetNode = getNodeFromInstance(targetInst);\n  if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n  if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n  var JSCompiler_inline_result$jscomp$286;\n  if (canUseDOM) {\n    var isSupported$jscomp$inline_427 = \"oninput\" in document;\n    if (!isSupported$jscomp$inline_427) {\n      var element$jscomp$inline_428 = document.createElement(\"div\");\n      element$jscomp$inline_428.setAttribute(\"oninput\", \"return;\");\n      isSupported$jscomp$inline_427 =\n        \"function\" === typeof element$jscomp$inline_428.oninput;\n    }\n    JSCompiler_inline_result$jscomp$286 = isSupported$jscomp$inline_427;\n  } else JSCompiler_inline_result$jscomp$286 = !1;\n  isInputEventSupported =\n    JSCompiler_inline_result$jscomp$286 &&\n    (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n  activeElement$1 &&\n    (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n    (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n  if (\n    \"value\" === nativeEvent.propertyName &&\n    getInstIfValueChanged(activeElementInst$1)\n  ) {\n    var dispatchQueue = [];\n    createAndAccumulateChangeEvent(\n      dispatchQueue,\n      activeElementInst$1,\n      nativeEvent,\n      getEventTarget(nativeEvent)\n    );\n    batchedUpdates$1(runEventInBatch, dispatchQueue);\n  }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n  \"focusin\" === domEventName\n    ? (stopWatchingForValueChange(),\n      (activeElement$1 = target),\n      (activeElementInst$1 = targetInst),\n      activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n    : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n  if (\n    \"selectionchange\" === domEventName ||\n    \"keyup\" === domEventName ||\n    \"keydown\" === domEventName\n  )\n    return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n  if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n  if (\"input\" === domEventName || \"change\" === domEventName)\n    return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n  if (objectIs(objA, objB)) return !0;\n  if (\n    \"object\" !== typeof objA ||\n    null === objA ||\n    \"object\" !== typeof objB ||\n    null === objB\n  )\n    return !1;\n  var keysA = Object.keys(objA),\n    keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return !1;\n  for (keysB = 0; keysB < keysA.length; keysB++) {\n    var currentKey = keysA[keysB];\n    if (\n      !hasOwnProperty.call(objB, currentKey) ||\n      !objectIs(objA[currentKey], objB[currentKey])\n    )\n      return !1;\n  }\n  return !0;\n}\nfunction getLeafNode(node) {\n  for (; node && node.firstChild; ) node = node.firstChild;\n  return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n  var node = getLeafNode(root);\n  root = 0;\n  for (var nodeEnd; node; ) {\n    if (3 === node.nodeType) {\n      nodeEnd = root + node.textContent.length;\n      if (root <= offset && nodeEnd >= offset)\n        return { node: node, offset: offset - root };\n      root = nodeEnd;\n    }\n    a: {\n      for (; node; ) {\n        if (node.nextSibling) {\n          node = node.nextSibling;\n          break a;\n        }\n        node = node.parentNode;\n      }\n      node = void 0;\n    }\n    node = getLeafNode(node);\n  }\n}\nfunction containsNode(outerNode, innerNode) {\n  return outerNode && innerNode\n    ? outerNode === innerNode\n      ? !0\n      : outerNode && 3 === outerNode.nodeType\n        ? !1\n        : innerNode && 3 === innerNode.nodeType\n          ? containsNode(outerNode, innerNode.parentNode)\n          : \"contains\" in outerNode\n            ? outerNode.contains(innerNode)\n            : outerNode.compareDocumentPosition\n              ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n              : !1\n    : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n  containerInfo =\n    null != containerInfo &&\n    null != containerInfo.ownerDocument &&\n    null != containerInfo.ownerDocument.defaultView\n      ? containerInfo.ownerDocument.defaultView\n      : window;\n  for (\n    var element = getActiveElement(containerInfo.document);\n    element instanceof containerInfo.HTMLIFrameElement;\n\n  ) {\n    try {\n      var JSCompiler_inline_result =\n        \"string\" === typeof element.contentWindow.location.href;\n    } catch (err) {\n      JSCompiler_inline_result = !1;\n    }\n    if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n    else break;\n    element = getActiveElement(containerInfo.document);\n  }\n  return element;\n}\nfunction hasSelectionCapabilities(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return (\n    nodeName &&\n    ((\"input\" === nodeName &&\n      (\"text\" === elem.type ||\n        \"search\" === elem.type ||\n        \"tel\" === elem.type ||\n        \"url\" === elem.type ||\n        \"password\" === elem.type)) ||\n      \"textarea\" === nodeName ||\n      \"true\" === elem.contentEditable)\n  );\n}\nvar skipSelectionChangeEvent =\n    canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n  activeElement = null,\n  activeElementInst = null,\n  lastSelection = null,\n  mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n  var doc =\n    nativeEventTarget.window === nativeEventTarget\n      ? nativeEventTarget.document\n      : 9 === nativeEventTarget.nodeType\n        ? nativeEventTarget\n        : nativeEventTarget.ownerDocument;\n  mouseDown ||\n    null == activeElement ||\n    activeElement !== getActiveElement(doc) ||\n    ((doc = activeElement),\n    \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n      ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n      : ((doc = (\n          (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n          window\n        ).getSelection()),\n        (doc = {\n          anchorNode: doc.anchorNode,\n          anchorOffset: doc.anchorOffset,\n          focusNode: doc.focusNode,\n          focusOffset: doc.focusOffset\n        })),\n    (lastSelection && shallowEqual(lastSelection, doc)) ||\n      ((lastSelection = doc),\n      (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n      0 < doc.length &&\n        ((nativeEvent = new SyntheticEvent(\n          \"onSelect\",\n          \"select\",\n          null,\n          nativeEvent,\n          nativeEventTarget\n        )),\n        dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n        (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n  prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n  return prefixes;\n}\nvar vendorPrefixes = {\n    animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n    animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n    animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n    transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n    transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n    transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n    transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n  },\n  prefixedEventNames = {},\n  style = {};\ncanUseDOM &&\n  ((style = document.createElement(\"div\").style),\n  \"AnimationEvent\" in window ||\n    (delete vendorPrefixes.animationend.animation,\n    delete vendorPrefixes.animationiteration.animation,\n    delete vendorPrefixes.animationstart.animation),\n  \"TransitionEvent\" in window ||\n    delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n  if (!vendorPrefixes[eventName]) return eventName;\n  var prefixMap = vendorPrefixes[eventName],\n    styleProp;\n  for (styleProp in prefixMap)\n    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n      return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n  return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n  ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n  ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n  TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n  TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n  TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n  TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n  topLevelEventsToReactNames = new Map(),\n  simpleEventPluginEvents =\n    \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n      \" \"\n    );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n  topLevelEventsToReactNames.set(domEventName, reactName);\n  registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar reportGlobalError =\n    \"function\" === typeof reportError\n      ? reportError\n      : function (error) {\n          if (\n            \"object\" === typeof window &&\n            \"function\" === typeof window.ErrorEvent\n          ) {\n            var event = new window.ErrorEvent(\"error\", {\n              bubbles: !0,\n              cancelable: !0,\n              message:\n                \"object\" === typeof error &&\n                null !== error &&\n                \"string\" === typeof error.message\n                  ? String(error.message)\n                  : String(error),\n              error: error\n            });\n            if (!window.dispatchEvent(event)) return;\n          } else if (\n            \"object\" === typeof process &&\n            \"function\" === typeof process.emit\n          ) {\n            process.emit(\"uncaughtException\", error);\n            return;\n          }\n          console.error(error);\n        },\n  concurrentQueues = [],\n  concurrentQueuesIndex = 0,\n  concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n  for (\n    var endIndex = concurrentQueuesIndex,\n      i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n    i < endIndex;\n\n  ) {\n    var fiber = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var queue = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var update = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var lane = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    if (null !== queue && null !== update) {\n      var pending = queue.pending;\n      null === pending\n        ? (update.next = update)\n        : ((update.next = pending.next), (pending.next = update));\n      queue.pending = update;\n    }\n    0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n  }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n  concurrentQueues[concurrentQueuesIndex++] = fiber;\n  concurrentQueues[concurrentQueuesIndex++] = queue;\n  concurrentQueues[concurrentQueuesIndex++] = update;\n  concurrentQueues[concurrentQueuesIndex++] = lane;\n  concurrentlyUpdatedLanes |= lane;\n  fiber.lanes |= lane;\n  fiber = fiber.alternate;\n  null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n  enqueueUpdate$1(fiber, queue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n  enqueueUpdate$1(fiber, null, null, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n  sourceFiber.lanes |= lane;\n  var alternate = sourceFiber.alternate;\n  null !== alternate && (alternate.lanes |= lane);\n  for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n    (parent.childLanes |= lane),\n      (alternate = parent.alternate),\n      null !== alternate && (alternate.childLanes |= lane),\n      22 === parent.tag &&\n        ((sourceFiber = parent.stateNode),\n        null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n      (sourceFiber = parent),\n      (parent = parent.return);\n  return 3 === sourceFiber.tag\n    ? ((parent = sourceFiber.stateNode),\n      isHidden &&\n        null !== update &&\n        ((isHidden = 31 - clz32(lane)),\n        (sourceFiber = parent.hiddenUpdates),\n        (alternate = sourceFiber[isHidden]),\n        null === alternate\n          ? (sourceFiber[isHidden] = [update])\n          : alternate.push(update),\n        (update.lane = lane | 536870912)),\n      parent)\n    : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n  if (50 < nestedUpdateCount)\n    throw (\n      ((nestedUpdateCount = 0),\n      (rootWithNestedUpdates = null),\n      Error(formatProdErrorMessage(185)))\n    );\n  for (var parent = sourceFiber.return; null !== parent; )\n    (sourceFiber = parent), (parent = sourceFiber.return);\n  return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n  this.tag = tag;\n  this.key = key;\n  this.sibling =\n    this.child =\n    this.return =\n    this.stateNode =\n    this.type =\n    this.elementType =\n      null;\n  this.index = 0;\n  this.refCleanup = this.ref = null;\n  this.pendingProps = pendingProps;\n  this.dependencies =\n    this.memoizedState =\n    this.updateQueue =\n    this.memoizedProps =\n      null;\n  this.mode = mode;\n  this.subtreeFlags = this.flags = 0;\n  this.deletions = null;\n  this.childLanes = this.lanes = 0;\n  this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n  return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n  Component = Component.prototype;\n  return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n  var workInProgress = current.alternate;\n  null === workInProgress\n    ? ((workInProgress = createFiberImplClass(\n        current.tag,\n        pendingProps,\n        current.key,\n        current.mode\n      )),\n      (workInProgress.elementType = current.elementType),\n      (workInProgress.type = current.type),\n      (workInProgress.stateNode = current.stateNode),\n      (workInProgress.alternate = current),\n      (current.alternate = workInProgress))\n    : ((workInProgress.pendingProps = pendingProps),\n      (workInProgress.type = current.type),\n      (workInProgress.flags = 0),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null));\n  workInProgress.flags = current.flags & 65011712;\n  workInProgress.childLanes = current.childLanes;\n  workInProgress.lanes = current.lanes;\n  workInProgress.child = current.child;\n  workInProgress.memoizedProps = current.memoizedProps;\n  workInProgress.memoizedState = current.memoizedState;\n  workInProgress.updateQueue = current.updateQueue;\n  pendingProps = current.dependencies;\n  workInProgress.dependencies =\n    null === pendingProps\n      ? null\n      : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n  workInProgress.sibling = current.sibling;\n  workInProgress.index = current.index;\n  workInProgress.ref = current.ref;\n  workInProgress.refCleanup = current.refCleanup;\n  return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n  workInProgress.flags &= 65011714;\n  var current = workInProgress.alternate;\n  null === current\n    ? ((workInProgress.childLanes = 0),\n      (workInProgress.lanes = renderLanes),\n      (workInProgress.child = null),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.memoizedProps = null),\n      (workInProgress.memoizedState = null),\n      (workInProgress.updateQueue = null),\n      (workInProgress.dependencies = null),\n      (workInProgress.stateNode = null))\n    : ((workInProgress.childLanes = current.childLanes),\n      (workInProgress.lanes = current.lanes),\n      (workInProgress.child = current.child),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null),\n      (workInProgress.memoizedProps = current.memoizedProps),\n      (workInProgress.memoizedState = current.memoizedState),\n      (workInProgress.updateQueue = current.updateQueue),\n      (workInProgress.type = current.type),\n      (renderLanes = current.dependencies),\n      (workInProgress.dependencies =\n        null === renderLanes\n          ? null\n          : {\n              lanes: renderLanes.lanes,\n              firstContext: renderLanes.firstContext\n            }));\n  return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n  type,\n  key,\n  pendingProps,\n  owner,\n  mode,\n  lanes\n) {\n  var fiberTag = 0;\n  owner = type;\n  if (\"function\" === typeof type) shouldConstruct(type) && (fiberTag = 1);\n  else if (\"string\" === typeof type)\n    fiberTag = isHostHoistableType(\n      type,\n      pendingProps,\n      contextStackCursor.current\n    )\n      ? 26\n      : \"html\" === type || \"head\" === type || \"body\" === type\n        ? 27\n        : 5;\n  else\n    a: switch (type) {\n      case REACT_ACTIVITY_TYPE:\n        return (\n          (type = createFiberImplClass(31, pendingProps, key, mode)),\n          (type.elementType = REACT_ACTIVITY_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_FRAGMENT_TYPE:\n        return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n      case REACT_STRICT_MODE_TYPE:\n        fiberTag = 8;\n        mode |= 24;\n        break;\n      case REACT_PROFILER_TYPE:\n        return (\n          (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n          (type.elementType = REACT_PROFILER_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_TYPE:\n        return (\n          (type = createFiberImplClass(13, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_LIST_TYPE:\n        return (\n          (type = createFiberImplClass(19, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      default:\n        if (\"object\" === typeof type && null !== type)\n          switch (type.$$typeof) {\n            case REACT_CONTEXT_TYPE:\n              fiberTag = 10;\n              break a;\n            case REACT_CONSUMER_TYPE:\n              fiberTag = 9;\n              break a;\n            case REACT_FORWARD_REF_TYPE:\n              fiberTag = 11;\n              break a;\n            case REACT_MEMO_TYPE:\n              fiberTag = 14;\n              break a;\n            case REACT_LAZY_TYPE:\n              fiberTag = 16;\n              owner = null;\n              break a;\n          }\n        fiberTag = 29;\n        pendingProps = Error(\n          formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n        );\n        owner = null;\n    }\n  key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n  key.elementType = type;\n  key.type = owner;\n  key.lanes = lanes;\n  return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n  elements = createFiberImplClass(7, elements, key, mode);\n  elements.lanes = lanes;\n  return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n  content = createFiberImplClass(6, content, null, mode);\n  content.lanes = lanes;\n  return content;\n}\nfunction createFiberFromDehydratedFragment(dehydratedNode) {\n  var fiber = createFiberImplClass(18, null, null, 0);\n  fiber.stateNode = dehydratedNode;\n  return fiber;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n  mode = createFiberImplClass(\n    4,\n    null !== portal.children ? portal.children : [],\n    portal.key,\n    mode\n  );\n  mode.lanes = lanes;\n  mode.stateNode = {\n    containerInfo: portal.containerInfo,\n    pendingChildren: null,\n    implementation: portal.implementation\n  };\n  return mode;\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n  if (\"object\" === typeof value && null !== value) {\n    var existing = CapturedStacks.get(value);\n    if (void 0 !== existing) return existing;\n    source = {\n      value: value,\n      source: source,\n      stack: getStackByFiberInDevAndProd(source)\n    };\n    CapturedStacks.set(value, source);\n    return source;\n  }\n  return {\n    value: value,\n    source: source,\n    stack: getStackByFiberInDevAndProd(source)\n  };\n}\nvar forkStack = [],\n  forkStackIndex = 0,\n  treeForkProvider = null,\n  treeForkCount = 0,\n  idStack = [],\n  idStackIndex = 0,\n  treeContextProvider = null,\n  treeContextId = 1,\n  treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n  forkStack[forkStackIndex++] = treeForkCount;\n  forkStack[forkStackIndex++] = treeForkProvider;\n  treeForkProvider = workInProgress;\n  treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextProvider = workInProgress;\n  var baseIdWithLeadingBit = treeContextId;\n  workInProgress = treeContextOverflow;\n  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n  baseIdWithLeadingBit &= ~(1 << baseLength);\n  index += 1;\n  var length = 32 - clz32(totalChildren) + baseLength;\n  if (30 < length) {\n    var numberOfOverflowBits = baseLength - (baseLength % 5);\n    length = (\n      baseIdWithLeadingBit &\n      ((1 << numberOfOverflowBits) - 1)\n    ).toString(32);\n    baseIdWithLeadingBit >>= numberOfOverflowBits;\n    baseLength -= numberOfOverflowBits;\n    treeContextId =\n      (1 << (32 - clz32(totalChildren) + baseLength)) |\n      (index << baseLength) |\n      baseIdWithLeadingBit;\n    treeContextOverflow = length + workInProgress;\n  } else\n    (treeContextId =\n      (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n      (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n  null !== workInProgress.return &&\n    (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n  for (; workInProgress === treeForkProvider; )\n    (treeForkProvider = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null),\n      (treeForkCount = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null);\n  for (; workInProgress === treeContextProvider; )\n    (treeContextProvider = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextOverflow = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextId = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null);\n}\nfunction restoreSuspendedTreeContext(workInProgress, suspendedContext) {\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextId = suspendedContext.id;\n  treeContextOverflow = suspendedContext.overflow;\n  treeContextProvider = workInProgress;\n}\nvar hydrationParentFiber = null,\n  nextHydratableInstance = null,\n  isHydrating = !1,\n  hydrationErrors = null,\n  rootOrSingletonContext = !1,\n  HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n  var error = Error(\n    formatProdErrorMessage(\n      418,\n      1 < arguments.length && void 0 !== arguments[1] && arguments[1]\n        ? \"text\"\n        : \"HTML\",\n      \"\"\n    )\n  );\n  queueHydrationError(createCapturedValueAtFiber(error, fiber));\n  throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n  var instance = fiber.stateNode,\n    type = fiber.type,\n    props = fiber.memoizedProps;\n  instance[internalInstanceKey] = fiber;\n  instance[internalPropsKey] = props;\n  switch (type) {\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"cancel\", instance);\n      listenToNonDelegatedEvent(\"close\", instance);\n      break;\n    case \"iframe\":\n    case \"object\":\n    case \"embed\":\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (type = 0; type < mediaEventTypes.length; type++)\n        listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n      break;\n    case \"source\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      break;\n    case \"img\":\n    case \"image\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", instance);\n      break;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      initInput(\n        instance,\n        props.value,\n        props.defaultValue,\n        props.checked,\n        props.defaultChecked,\n        props.type,\n        props.name,\n        !0\n      );\n      break;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      break;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", instance),\n        initTextarea(instance, props.value, props.defaultValue, props.children);\n  }\n  type = props.children;\n  (\"string\" !== typeof type &&\n    \"number\" !== typeof type &&\n    \"bigint\" !== typeof type) ||\n  instance.textContent === \"\" + type ||\n  !0 === props.suppressHydrationWarning ||\n  checkForUnmatchedText(instance.textContent, type)\n    ? (null != props.popover &&\n        (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n        listenToNonDelegatedEvent(\"toggle\", instance)),\n      null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n      null != props.onScrollEnd &&\n        listenToNonDelegatedEvent(\"scrollend\", instance),\n      null != props.onClick && (instance.onclick = noop$1),\n      (instance = !0))\n    : (instance = !1);\n  instance || throwOnHydrationMismatch(fiber, !0);\n}\nfunction popToNextHostParent(fiber) {\n  for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n    switch (hydrationParentFiber.tag) {\n      case 5:\n      case 31:\n      case 13:\n        rootOrSingletonContext = !1;\n        return;\n      case 27:\n      case 3:\n        rootOrSingletonContext = !0;\n        return;\n      default:\n        hydrationParentFiber = hydrationParentFiber.return;\n    }\n}\nfunction popHydrationState(fiber) {\n  if (fiber !== hydrationParentFiber) return !1;\n  if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n  var tag = fiber.tag,\n    JSCompiler_temp;\n  if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n    if ((JSCompiler_temp = 5 === tag))\n      (JSCompiler_temp = fiber.type),\n        (JSCompiler_temp =\n          !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n          shouldSetTextContent(fiber.type, fiber.memoizedProps));\n    JSCompiler_temp = !JSCompiler_temp;\n  }\n  JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n  popToNextHostParent(fiber);\n  if (13 === tag) {\n    fiber = fiber.memoizedState;\n    fiber = null !== fiber ? fiber.dehydrated : null;\n    if (!fiber) throw Error(formatProdErrorMessage(317));\n    nextHydratableInstance =\n      getNextHydratableInstanceAfterHydrationBoundary(fiber);\n  } else if (31 === tag) {\n    fiber = fiber.memoizedState;\n    fiber = null !== fiber ? fiber.dehydrated : null;\n    if (!fiber) throw Error(formatProdErrorMessage(317));\n    nextHydratableInstance =\n      getNextHydratableInstanceAfterHydrationBoundary(fiber);\n  } else\n    27 === tag\n      ? ((tag = nextHydratableInstance),\n        isSingletonScope(fiber.type)\n          ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n            (previousHydratableOnEnteringScopedSingleton = null),\n            (nextHydratableInstance = fiber))\n          : (nextHydratableInstance = tag))\n      : (nextHydratableInstance = hydrationParentFiber\n          ? getNextHydratable(fiber.stateNode.nextSibling)\n          : null);\n  return !0;\n}\nfunction resetHydrationState() {\n  nextHydratableInstance = hydrationParentFiber = null;\n  isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n  var queuedErrors = hydrationErrors;\n  null !== queuedErrors &&\n    (null === workInProgressRootRecoverableErrors\n      ? (workInProgressRootRecoverableErrors = queuedErrors)\n      : workInProgressRootRecoverableErrors.push.apply(\n          workInProgressRootRecoverableErrors,\n          queuedErrors\n        ),\n    (hydrationErrors = null));\n  return queuedErrors;\n}\nfunction queueHydrationError(error) {\n  null === hydrationErrors\n    ? (hydrationErrors = [error])\n    : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n  currentlyRenderingFiber$1 = null,\n  lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n  push(valueCursor, context._currentValue);\n  context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n  context._currentValue = valueCursor.current;\n  pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n  for (; null !== parent; ) {\n    var alternate = parent.alternate;\n    (parent.childLanes & renderLanes) !== renderLanes\n      ? ((parent.childLanes |= renderLanes),\n        null !== alternate && (alternate.childLanes |= renderLanes))\n      : null !== alternate &&\n        (alternate.childLanes & renderLanes) !== renderLanes &&\n        (alternate.childLanes |= renderLanes);\n    if (parent === propagationRoot) break;\n    parent = parent.return;\n  }\n}\nfunction propagateContextChanges(\n  workInProgress,\n  contexts,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  var fiber = workInProgress.child;\n  null !== fiber && (fiber.return = workInProgress);\n  for (; null !== fiber; ) {\n    var list = fiber.dependencies;\n    if (null !== list) {\n      var nextFiber = fiber.child;\n      list = list.firstContext;\n      a: for (; null !== list; ) {\n        var dependency = list;\n        list = fiber;\n        for (var i = 0; i < contexts.length; i++)\n          if (dependency.context === contexts[i]) {\n            list.lanes |= renderLanes;\n            dependency = list.alternate;\n            null !== dependency && (dependency.lanes |= renderLanes);\n            scheduleContextWorkOnParentPath(\n              list.return,\n              renderLanes,\n              workInProgress\n            );\n            forcePropagateEntireTree || (nextFiber = null);\n            break a;\n          }\n        list = dependency.next;\n      }\n    } else if (18 === fiber.tag) {\n      nextFiber = fiber.return;\n      if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n      nextFiber.lanes |= renderLanes;\n      list = nextFiber.alternate;\n      null !== list && (list.lanes |= renderLanes);\n      scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n      nextFiber = null;\n    } else nextFiber = fiber.child;\n    if (null !== nextFiber) nextFiber.return = fiber;\n    else\n      for (nextFiber = fiber; null !== nextFiber; ) {\n        if (nextFiber === workInProgress) {\n          nextFiber = null;\n          break;\n        }\n        fiber = nextFiber.sibling;\n        if (null !== fiber) {\n          fiber.return = nextFiber.return;\n          nextFiber = fiber;\n          break;\n        }\n        nextFiber = nextFiber.return;\n      }\n    fiber = nextFiber;\n  }\n}\nfunction propagateParentContextChanges(\n  current,\n  workInProgress,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  current = null;\n  for (\n    var parent = workInProgress, isInsidePropagationBailout = !1;\n    null !== parent;\n\n  ) {\n    if (!isInsidePropagationBailout)\n      if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n      else if (0 !== (parent.flags & 262144)) break;\n    if (10 === parent.tag) {\n      var currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent = currentParent.memoizedProps;\n      if (null !== currentParent) {\n        var context = parent.type;\n        objectIs(parent.pendingProps.value, currentParent.value) ||\n          (null !== current ? current.push(context) : (current = [context]));\n      }\n    } else if (parent === hostTransitionProviderCursor.current) {\n      currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent.memoizedState.memoizedState !==\n        parent.memoizedState.memoizedState &&\n        (null !== current\n          ? current.push(HostTransitionContext)\n          : (current = [HostTransitionContext]));\n    }\n    parent = parent.return;\n  }\n  null !== current &&\n    propagateContextChanges(\n      workInProgress,\n      current,\n      renderLanes,\n      forcePropagateEntireTree\n    );\n  workInProgress.flags |= 262144;\n}\nfunction checkIfContextChanged(currentDependencies) {\n  for (\n    currentDependencies = currentDependencies.firstContext;\n    null !== currentDependencies;\n\n  ) {\n    if (\n      !objectIs(\n        currentDependencies.context._currentValue,\n        currentDependencies.memoizedValue\n      )\n    )\n      return !0;\n    currentDependencies = currentDependencies.next;\n  }\n  return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n  currentlyRenderingFiber$1 = workInProgress;\n  lastContextDependency = null;\n  workInProgress = workInProgress.dependencies;\n  null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n  return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n  null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n  return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n  var value = context._currentValue;\n  context = { context: context, memoizedValue: value, next: null };\n  if (null === lastContextDependency) {\n    if (null === consumer) throw Error(formatProdErrorMessage(308));\n    lastContextDependency = context;\n    consumer.dependencies = { lanes: 0, firstContext: context };\n    consumer.flags |= 524288;\n  } else lastContextDependency = lastContextDependency.next = context;\n  return value;\n}\nvar AbortControllerLocal =\n    \"undefined\" !== typeof AbortController\n      ? AbortController\n      : function () {\n          var listeners = [],\n            signal = (this.signal = {\n              aborted: !1,\n              addEventListener: function (type, listener) {\n                listeners.push(listener);\n              }\n            });\n          this.abort = function () {\n            signal.aborted = !0;\n            listeners.forEach(function (listener) {\n              return listener();\n            });\n          };\n        },\n  scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n  NormalPriority = Scheduler.unstable_NormalPriority,\n  CacheContext = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    Consumer: null,\n    Provider: null,\n    _currentValue: null,\n    _currentValue2: null,\n    _threadCount: 0\n  };\nfunction createCache() {\n  return {\n    controller: new AbortControllerLocal(),\n    data: new Map(),\n    refCount: 0\n  };\n}\nfunction releaseCache(cache) {\n  cache.refCount--;\n  0 === cache.refCount &&\n    scheduleCallback$2(NormalPriority, function () {\n      cache.controller.abort();\n    });\n}\nvar currentEntangledListeners = null,\n  currentEntangledPendingCount = 0,\n  currentEntangledLane = 0,\n  currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n  if (null === currentEntangledListeners) {\n    var entangledListeners = (currentEntangledListeners = []);\n    currentEntangledPendingCount = 0;\n    currentEntangledLane = requestTransitionLane();\n    currentEntangledActionThenable = {\n      status: \"pending\",\n      value: void 0,\n      then: function (resolve) {\n        entangledListeners.push(resolve);\n      }\n    };\n  }\n  currentEntangledPendingCount++;\n  thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n  return thenable;\n}\nfunction pingEngtangledActionScope() {\n  if (\n    0 === --currentEntangledPendingCount &&\n    null !== currentEntangledListeners\n  ) {\n    null !== currentEntangledActionThenable &&\n      (currentEntangledActionThenable.status = \"fulfilled\");\n    var listeners = currentEntangledListeners;\n    currentEntangledListeners = null;\n    currentEntangledLane = 0;\n    currentEntangledActionThenable = null;\n    for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n  }\n}\nfunction chainThenableValue(thenable, result) {\n  var listeners = [],\n    thenableWithOverride = {\n      status: \"pending\",\n      value: null,\n      reason: null,\n      then: function (resolve) {\n        listeners.push(resolve);\n      }\n    };\n  thenable.then(\n    function () {\n      thenableWithOverride.status = \"fulfilled\";\n      thenableWithOverride.value = result;\n      for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n    },\n    function (error) {\n      thenableWithOverride.status = \"rejected\";\n      thenableWithOverride.reason = error;\n      for (error = 0; error < listeners.length; error++)\n        (0, listeners[error])(void 0);\n    }\n  );\n  return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n  globalMostRecentTransitionTime = now();\n  \"object\" === typeof returnValue &&\n    null !== returnValue &&\n    \"function\" === typeof returnValue.then &&\n    entangleAsyncAction(transition, returnValue);\n  null !== prevOnStartTransitionFinish &&\n    prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n  var cacheResumedFromPreviousRender = resumedCache.current;\n  return null !== cacheResumedFromPreviousRender\n    ? cacheResumedFromPreviousRender\n    : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n  null === prevCachePool\n    ? push(resumedCache, resumedCache.current)\n    : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n  var cacheFromPool = peekCacheFromPool();\n  return null === cacheFromPool\n    ? null\n    : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n  SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n  SuspenseActionException = Error(formatProdErrorMessage(542)),\n  noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n  thenable = thenable.status;\n  return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction trackUsedThenable(thenableState, thenable, index) {\n  index = thenableState[index];\n  void 0 === index\n    ? thenableState.push(thenable)\n    : index !== thenable && (thenable.then(noop$1, noop$1), (thenable = index));\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw (\n        ((thenableState = thenable.reason),\n        checkIfUseWrappedInAsyncCatch(thenableState),\n        thenableState)\n      );\n    default:\n      if (\"string\" === typeof thenable.status) thenable.then(noop$1, noop$1);\n      else {\n        thenableState = workInProgressRoot;\n        if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n          throw Error(formatProdErrorMessage(482));\n        thenableState = thenable;\n        thenableState.status = \"pending\";\n        thenableState.then(\n          function (fulfilledValue) {\n            if (\"pending\" === thenable.status) {\n              var fulfilledThenable = thenable;\n              fulfilledThenable.status = \"fulfilled\";\n              fulfilledThenable.value = fulfilledValue;\n            }\n          },\n          function (error) {\n            if (\"pending\" === thenable.status) {\n              var rejectedThenable = thenable;\n              rejectedThenable.status = \"rejected\";\n              rejectedThenable.reason = error;\n            }\n          }\n        );\n      }\n      switch (thenable.status) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw (\n            ((thenableState = thenable.reason),\n            checkIfUseWrappedInAsyncCatch(thenableState),\n            thenableState)\n          );\n      }\n      suspendedThenable = thenable;\n      throw SuspenseException;\n  }\n}\nfunction resolveLazy(lazyType) {\n  try {\n    var init = lazyType._init;\n    return init(lazyType._payload);\n  } catch (x) {\n    if (null !== x && \"object\" === typeof x && \"function\" === typeof x.then)\n      throw ((suspendedThenable = x), SuspenseException);\n    throw x;\n  }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n  if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n  var thenable = suspendedThenable;\n  suspendedThenable = null;\n  return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n  if (\n    rejectedReason === SuspenseException ||\n    rejectedReason === SuspenseActionException\n  )\n    throw Error(formatProdErrorMessage(483));\n}\nvar thenableState$1 = null,\n  thenableIndexCounter$1 = 0;\nfunction unwrapThenable(thenable) {\n  var index = thenableIndexCounter$1;\n  thenableIndexCounter$1 += 1;\n  null === thenableState$1 && (thenableState$1 = []);\n  return trackUsedThenable(thenableState$1, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n  element = element.props.ref;\n  workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectTypeImpl(returnFiber, newChild) {\n  if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n    throw Error(formatProdErrorMessage(525));\n  returnFiber = Object.prototype.toString.call(newChild);\n  throw Error(\n    formatProdErrorMessage(\n      31,\n      \"[object Object]\" === returnFiber\n        ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n        : returnFiber\n    )\n  );\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n  function deleteChild(returnFiber, childToDelete) {\n    if (shouldTrackSideEffects) {\n      var deletions = returnFiber.deletions;\n      null === deletions\n        ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n        : deletions.push(childToDelete);\n    }\n  }\n  function deleteRemainingChildren(returnFiber, currentFirstChild) {\n    if (!shouldTrackSideEffects) return null;\n    for (; null !== currentFirstChild; )\n      deleteChild(returnFiber, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return null;\n  }\n  function mapRemainingChildren(currentFirstChild) {\n    for (var existingChildren = new Map(); null !== currentFirstChild; )\n      null !== currentFirstChild.key\n        ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n        : existingChildren.set(currentFirstChild.index, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return existingChildren;\n  }\n  function useFiber(fiber, pendingProps) {\n    fiber = createWorkInProgress(fiber, pendingProps);\n    fiber.index = 0;\n    fiber.sibling = null;\n    return fiber;\n  }\n  function placeChild(newFiber, lastPlacedIndex, newIndex) {\n    newFiber.index = newIndex;\n    if (!shouldTrackSideEffects)\n      return (newFiber.flags |= 1048576), lastPlacedIndex;\n    newIndex = newFiber.alternate;\n    if (null !== newIndex)\n      return (\n        (newIndex = newIndex.index),\n        newIndex < lastPlacedIndex\n          ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n          : newIndex\n      );\n    newFiber.flags |= 67108866;\n    return lastPlacedIndex;\n  }\n  function placeSingleChild(newFiber) {\n    shouldTrackSideEffects &&\n      null === newFiber.alternate &&\n      (newFiber.flags |= 67108866);\n    return newFiber;\n  }\n  function updateTextNode(returnFiber, current, textContent, lanes) {\n    if (null === current || 6 !== current.tag)\n      return (\n        (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, textContent);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateElement(returnFiber, current, element, lanes) {\n    var elementType = element.type;\n    if (elementType === REACT_FRAGMENT_TYPE)\n      return updateFragment(\n        returnFiber,\n        current,\n        element.props.children,\n        lanes,\n        element.key\n      );\n    if (\n      null !== current &&\n      (current.elementType === elementType ||\n        (\"object\" === typeof elementType &&\n          null !== elementType &&\n          elementType.$$typeof === REACT_LAZY_TYPE &&\n          resolveLazy(elementType) === current.type))\n    )\n      return (\n        (current = useFiber(current, element.props)),\n        coerceRef(current, element),\n        (current.return = returnFiber),\n        current\n      );\n    current = createFiberFromTypeAndProps(\n      element.type,\n      element.key,\n      element.props,\n      null,\n      returnFiber.mode,\n      lanes\n    );\n    coerceRef(current, element);\n    current.return = returnFiber;\n    return current;\n  }\n  function updatePortal(returnFiber, current, portal, lanes) {\n    if (\n      null === current ||\n      4 !== current.tag ||\n      current.stateNode.containerInfo !== portal.containerInfo ||\n      current.stateNode.implementation !== portal.implementation\n    )\n      return (\n        (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, portal.children || []);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateFragment(returnFiber, current, fragment, lanes, key) {\n    if (null === current || 7 !== current.tag)\n      return (\n        (current = createFiberFromFragment(\n          fragment,\n          returnFiber.mode,\n          lanes,\n          key\n        )),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, fragment);\n    current.return = returnFiber;\n    return current;\n  }\n  function createChild(returnFiber, newChild, lanes) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (newChild = createFiberFromText(\n          \"\" + newChild,\n          returnFiber.mode,\n          lanes\n        )),\n        (newChild.return = returnFiber),\n        newChild\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (lanes = createFiberFromTypeAndProps(\n              newChild.type,\n              newChild.key,\n              newChild.props,\n              null,\n              returnFiber.mode,\n              lanes\n            )),\n            coerceRef(lanes, newChild),\n            (lanes.return = returnFiber),\n            lanes\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (newChild = createFiberFromPortal(\n              newChild,\n              returnFiber.mode,\n              lanes\n            )),\n            (newChild.return = returnFiber),\n            newChild\n          );\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            createChild(returnFiber, newChild, lanes)\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (newChild = createFiberFromFragment(\n            newChild,\n            returnFiber.mode,\n            lanes,\n            null\n          )),\n          (newChild.return = returnFiber),\n          newChild\n        );\n      if (\"function\" === typeof newChild.then)\n        return createChild(returnFiber, unwrapThenable(newChild), lanes);\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return createChild(\n          returnFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n    var key = null !== oldFiber ? oldFiber.key : null;\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return null !== key\n        ? null\n        : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return newChild.key === key\n            ? updateElement(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_PORTAL_TYPE:\n          return newChild.key === key\n            ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            updateSlot(returnFiber, oldFiber, newChild, lanes)\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return null !== key\n          ? null\n          : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n      if (\"function\" === typeof newChild.then)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateFromMap(\n    existingChildren,\n    returnFiber,\n    newIdx,\n    newChild,\n    lanes\n  ) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (existingChildren = existingChildren.get(newIdx) || null),\n        updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updateElement(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updatePortal(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            updateFromMap(\n              existingChildren,\n              returnFiber,\n              newIdx,\n              newChild,\n              lanes\n            )\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (existingChildren = existingChildren.get(newIdx) || null),\n          updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n        );\n      if (\"function\" === typeof newChild.then)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return null;\n  }\n  function reconcileChildrenArray(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null;\n      null !== oldFiber && newIdx < newChildren.length;\n      newIdx++\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(\n        returnFiber,\n        oldFiber,\n        newChildren[newIdx],\n        lanes\n      );\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (newIdx === newChildren.length)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; newIdx < newChildren.length; newIdx++)\n        (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n          null !== oldFiber &&\n            ((currentFirstChild = placeChild(\n              oldFiber,\n              currentFirstChild,\n              newIdx\n            )),\n            null === previousNewFiber\n              ? (resultingFirstChild = oldFiber)\n              : (previousNewFiber.sibling = oldFiber),\n            (previousNewFiber = oldFiber));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      newIdx < newChildren.length;\n      newIdx++\n    )\n      (nextOldFiber = updateFromMap(\n        oldFiber,\n        returnFiber,\n        newIdx,\n        newChildren[newIdx],\n        lanes\n      )),\n        null !== nextOldFiber &&\n          (shouldTrackSideEffects &&\n            null !== nextOldFiber.alternate &&\n            oldFiber.delete(\n              null === nextOldFiber.key ? newIdx : nextOldFiber.key\n            ),\n          (currentFirstChild = placeChild(\n            nextOldFiber,\n            currentFirstChild,\n            newIdx\n          )),\n          null === previousNewFiber\n            ? (resultingFirstChild = nextOldFiber)\n            : (previousNewFiber.sibling = nextOldFiber),\n          (previousNewFiber = nextOldFiber));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildrenIterator(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    if (null == newChildren) throw Error(formatProdErrorMessage(151));\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null,\n        step = newChildren.next();\n      null !== oldFiber && !step.done;\n      newIdx++, step = newChildren.next()\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (step.done)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; !step.done; newIdx++, step = newChildren.next())\n        (step = createChild(returnFiber, step.value, lanes)),\n          null !== step &&\n            ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n            null === previousNewFiber\n              ? (resultingFirstChild = step)\n              : (previousNewFiber.sibling = step),\n            (previousNewFiber = step));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      !step.done;\n      newIdx++, step = newChildren.next()\n    )\n      (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n        null !== step &&\n          (shouldTrackSideEffects &&\n            null !== step.alternate &&\n            oldFiber.delete(null === step.key ? newIdx : step.key),\n          (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n          null === previousNewFiber\n            ? (resultingFirstChild = step)\n            : (previousNewFiber.sibling = step),\n          (previousNewFiber = step));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildFibersImpl(\n    returnFiber,\n    currentFirstChild,\n    newChild,\n    lanes\n  ) {\n    \"object\" === typeof newChild &&\n      null !== newChild &&\n      newChild.type === REACT_FRAGMENT_TYPE &&\n      null === newChild.key &&\n      (newChild = newChild.props.children);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          a: {\n            for (var key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key) {\n                key = newChild.type;\n                if (key === REACT_FRAGMENT_TYPE) {\n                  if (7 === currentFirstChild.tag) {\n                    deleteRemainingChildren(\n                      returnFiber,\n                      currentFirstChild.sibling\n                    );\n                    lanes = useFiber(\n                      currentFirstChild,\n                      newChild.props.children\n                    );\n                    lanes.return = returnFiber;\n                    returnFiber = lanes;\n                    break a;\n                  }\n                } else if (\n                  currentFirstChild.elementType === key ||\n                  (\"object\" === typeof key &&\n                    null !== key &&\n                    key.$$typeof === REACT_LAZY_TYPE &&\n                    resolveLazy(key) === currentFirstChild.type)\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.props);\n                  coerceRef(lanes, newChild);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                }\n                deleteRemainingChildren(returnFiber, currentFirstChild);\n                break;\n              } else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            newChild.type === REACT_FRAGMENT_TYPE\n              ? ((lanes = createFiberFromFragment(\n                  newChild.props.children,\n                  returnFiber.mode,\n                  lanes,\n                  newChild.key\n                )),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes))\n              : ((lanes = createFiberFromTypeAndProps(\n                  newChild.type,\n                  newChild.key,\n                  newChild.props,\n                  null,\n                  returnFiber.mode,\n                  lanes\n                )),\n                coerceRef(lanes, newChild),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes));\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_PORTAL_TYPE:\n          a: {\n            for (key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key)\n                if (\n                  4 === currentFirstChild.tag &&\n                  currentFirstChild.stateNode.containerInfo ===\n                    newChild.containerInfo &&\n                  currentFirstChild.stateNode.implementation ===\n                    newChild.implementation\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.children || []);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                } else {\n                  deleteRemainingChildren(returnFiber, currentFirstChild);\n                  break;\n                }\n              else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n            lanes.return = returnFiber;\n            returnFiber = lanes;\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_LAZY_TYPE:\n          return (\n            (newChild = resolveLazy(newChild)),\n            reconcileChildFibersImpl(\n              returnFiber,\n              currentFirstChild,\n              newChild,\n              lanes\n            )\n          );\n      }\n      if (isArrayImpl(newChild))\n        return reconcileChildrenArray(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      if (getIteratorFn(newChild)) {\n        key = getIteratorFn(newChild);\n        if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n        newChild = key.call(newChild);\n        return reconcileChildrenIterator(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      }\n      if (\"function\" === typeof newChild.then)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectTypeImpl(returnFiber, newChild);\n    }\n    return (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n      ? ((newChild = \"\" + newChild),\n        null !== currentFirstChild && 6 === currentFirstChild.tag\n          ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n            (lanes = useFiber(currentFirstChild, newChild)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes))\n          : (deleteRemainingChildren(returnFiber, currentFirstChild),\n            (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes)),\n        placeSingleChild(returnFiber))\n      : deleteRemainingChildren(returnFiber, currentFirstChild);\n  }\n  return function (returnFiber, currentFirstChild, newChild, lanes) {\n    try {\n      thenableIndexCounter$1 = 0;\n      var firstChildFiber = reconcileChildFibersImpl(\n        returnFiber,\n        currentFirstChild,\n        newChild,\n        lanes\n      );\n      thenableState$1 = null;\n      return firstChildFiber;\n    } catch (x) {\n      if (x === SuspenseException || x === SuspenseActionException) throw x;\n      var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n      fiber.lanes = lanes;\n      fiber.return = returnFiber;\n      return fiber;\n    } finally {\n    }\n  };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n  mountChildFibers = createChildReconciler(!1),\n  hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n  fiber.updateQueue = {\n    baseState: fiber.memoizedState,\n    firstBaseUpdate: null,\n    lastBaseUpdate: null,\n    shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n    callbacks: null\n  };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n  current = current.updateQueue;\n  workInProgress.updateQueue === current &&\n    (workInProgress.updateQueue = {\n      baseState: current.baseState,\n      firstBaseUpdate: current.firstBaseUpdate,\n      lastBaseUpdate: current.lastBaseUpdate,\n      shared: current.shared,\n      callbacks: null\n    });\n}\nfunction createUpdate(lane) {\n  return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n  var updateQueue = fiber.updateQueue;\n  if (null === updateQueue) return null;\n  updateQueue = updateQueue.shared;\n  if (0 !== (executionContext & 2)) {\n    var pending = updateQueue.pending;\n    null === pending\n      ? (update.next = update)\n      : ((update.next = pending.next), (pending.next = update));\n    updateQueue.pending = update;\n    update = getRootForUpdatedFiber(fiber);\n    markUpdateLaneFromFiberToRoot(fiber, null, lane);\n    return update;\n  }\n  enqueueUpdate$1(fiber, updateQueue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n  fiber = fiber.updateQueue;\n  if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n    var queueLanes = fiber.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    fiber.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n  var queue = workInProgress.updateQueue,\n    current = workInProgress.alternate;\n  if (\n    null !== current &&\n    ((current = current.updateQueue), queue === current)\n  ) {\n    var newFirst = null,\n      newLast = null;\n    queue = queue.firstBaseUpdate;\n    if (null !== queue) {\n      do {\n        var clone = {\n          lane: queue.lane,\n          tag: queue.tag,\n          payload: queue.payload,\n          callback: null,\n          next: null\n        };\n        null === newLast\n          ? (newFirst = newLast = clone)\n          : (newLast = newLast.next = clone);\n        queue = queue.next;\n      } while (null !== queue);\n      null === newLast\n        ? (newFirst = newLast = capturedUpdate)\n        : (newLast = newLast.next = capturedUpdate);\n    } else newFirst = newLast = capturedUpdate;\n    queue = {\n      baseState: current.baseState,\n      firstBaseUpdate: newFirst,\n      lastBaseUpdate: newLast,\n      shared: current.shared,\n      callbacks: current.callbacks\n    };\n    workInProgress.updateQueue = queue;\n    return;\n  }\n  workInProgress = queue.lastBaseUpdate;\n  null === workInProgress\n    ? (queue.firstBaseUpdate = capturedUpdate)\n    : (workInProgress.next = capturedUpdate);\n  queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n  if (didReadFromEntangledAsyncAction) {\n    var entangledActionThenable = currentEntangledActionThenable;\n    if (null !== entangledActionThenable) throw entangledActionThenable;\n  }\n}\nfunction processUpdateQueue(\n  workInProgress$jscomp$0,\n  props,\n  instance$jscomp$0,\n  renderLanes\n) {\n  didReadFromEntangledAsyncAction = !1;\n  var queue = workInProgress$jscomp$0.updateQueue;\n  hasForceUpdate = !1;\n  var firstBaseUpdate = queue.firstBaseUpdate,\n    lastBaseUpdate = queue.lastBaseUpdate,\n    pendingQueue = queue.shared.pending;\n  if (null !== pendingQueue) {\n    queue.shared.pending = null;\n    var lastPendingUpdate = pendingQueue,\n      firstPendingUpdate = lastPendingUpdate.next;\n    lastPendingUpdate.next = null;\n    null === lastBaseUpdate\n      ? (firstBaseUpdate = firstPendingUpdate)\n      : (lastBaseUpdate.next = firstPendingUpdate);\n    lastBaseUpdate = lastPendingUpdate;\n    var current = workInProgress$jscomp$0.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      (pendingQueue = current.lastBaseUpdate),\n      pendingQueue !== lastBaseUpdate &&\n        (null === pendingQueue\n          ? (current.firstBaseUpdate = firstPendingUpdate)\n          : (pendingQueue.next = firstPendingUpdate),\n        (current.lastBaseUpdate = lastPendingUpdate)));\n  }\n  if (null !== firstBaseUpdate) {\n    var newState = queue.baseState;\n    lastBaseUpdate = 0;\n    current = firstPendingUpdate = lastPendingUpdate = null;\n    pendingQueue = firstBaseUpdate;\n    do {\n      var updateLane = pendingQueue.lane & -536870913,\n        isHiddenUpdate = updateLane !== pendingQueue.lane;\n      if (\n        isHiddenUpdate\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        0 !== updateLane &&\n          updateLane === currentEntangledLane &&\n          (didReadFromEntangledAsyncAction = !0);\n        null !== current &&\n          (current = current.next =\n            {\n              lane: 0,\n              tag: pendingQueue.tag,\n              payload: pendingQueue.payload,\n              callback: null,\n              next: null\n            });\n        a: {\n          var workInProgress = workInProgress$jscomp$0,\n            update = pendingQueue;\n          updateLane = props;\n          var instance = instance$jscomp$0;\n          switch (update.tag) {\n            case 1:\n              workInProgress = update.payload;\n              if (\"function\" === typeof workInProgress) {\n                newState = workInProgress.call(instance, newState, updateLane);\n                break a;\n              }\n              newState = workInProgress;\n              break a;\n            case 3:\n              workInProgress.flags = (workInProgress.flags & -65537) | 128;\n            case 0:\n              workInProgress = update.payload;\n              updateLane =\n                \"function\" === typeof workInProgress\n                  ? workInProgress.call(instance, newState, updateLane)\n                  : workInProgress;\n              if (null === updateLane || void 0 === updateLane) break a;\n              newState = assign({}, newState, updateLane);\n              break a;\n            case 2:\n              hasForceUpdate = !0;\n          }\n        }\n        updateLane = pendingQueue.callback;\n        null !== updateLane &&\n          ((workInProgress$jscomp$0.flags |= 64),\n          isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n          (isHiddenUpdate = queue.callbacks),\n          null === isHiddenUpdate\n            ? (queue.callbacks = [updateLane])\n            : isHiddenUpdate.push(updateLane));\n      } else\n        (isHiddenUpdate = {\n          lane: updateLane,\n          tag: pendingQueue.tag,\n          payload: pendingQueue.payload,\n          callback: pendingQueue.callback,\n          next: null\n        }),\n          null === current\n            ? ((firstPendingUpdate = current = isHiddenUpdate),\n              (lastPendingUpdate = newState))\n            : (current = current.next = isHiddenUpdate),\n          (lastBaseUpdate |= updateLane);\n      pendingQueue = pendingQueue.next;\n      if (null === pendingQueue)\n        if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n          break;\n        else\n          (isHiddenUpdate = pendingQueue),\n            (pendingQueue = isHiddenUpdate.next),\n            (isHiddenUpdate.next = null),\n            (queue.lastBaseUpdate = isHiddenUpdate),\n            (queue.shared.pending = null);\n    } while (1);\n    null === current && (lastPendingUpdate = newState);\n    queue.baseState = lastPendingUpdate;\n    queue.firstBaseUpdate = firstPendingUpdate;\n    queue.lastBaseUpdate = current;\n    null === firstBaseUpdate && (queue.shared.lanes = 0);\n    workInProgressRootSkippedLanes |= lastBaseUpdate;\n    workInProgress$jscomp$0.lanes = lastBaseUpdate;\n    workInProgress$jscomp$0.memoizedState = newState;\n  }\n}\nfunction callCallback(callback, context) {\n  if (\"function\" !== typeof callback)\n    throw Error(formatProdErrorMessage(191, callback));\n  callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n  var callbacks = updateQueue.callbacks;\n  if (null !== callbacks)\n    for (\n      updateQueue.callbacks = null, updateQueue = 0;\n      updateQueue < callbacks.length;\n      updateQueue++\n    )\n      callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n  prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n  fiber = entangledRenderLanes;\n  push(prevEntangledRenderLanesCursor, fiber);\n  push(currentTreeHiddenStackCursor, context);\n  entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n  push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n  push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n  entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n  pop(currentTreeHiddenStackCursor);\n  pop(prevEntangledRenderLanesCursor);\n}\nvar suspenseHandlerStackCursor = createCursor(null),\n  shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n  var current = handler.alternate;\n  push(suspenseStackCursor, suspenseStackCursor.current & 1);\n  push(suspenseHandlerStackCursor, handler);\n  null === shellBoundary &&\n    (null === current || null !== currentTreeHiddenStackCursor.current\n      ? (shellBoundary = handler)\n      : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushDehydratedActivitySuspenseHandler(fiber) {\n  push(suspenseStackCursor, suspenseStackCursor.current);\n  push(suspenseHandlerStackCursor, fiber);\n  null === shellBoundary && (shellBoundary = fiber);\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n  22 === fiber.tag\n    ? (push(suspenseStackCursor, suspenseStackCursor.current),\n      push(suspenseHandlerStackCursor, fiber),\n      null === shellBoundary && (shellBoundary = fiber))\n    : reuseSuspenseHandlerOnStack(fiber);\n}\nfunction reuseSuspenseHandlerOnStack() {\n  push(suspenseStackCursor, suspenseStackCursor.current);\n  push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n  pop(suspenseHandlerStackCursor);\n  shellBoundary === fiber && (shellBoundary = null);\n  pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction findFirstSuspended(row) {\n  for (var node = row; null !== node; ) {\n    if (13 === node.tag) {\n      var state = node.memoizedState;\n      if (\n        null !== state &&\n        ((state = state.dehydrated),\n        null === state ||\n          isSuspenseInstancePending(state) ||\n          isSuspenseInstanceFallback(state))\n      )\n        return node;\n    } else if (\n      19 === node.tag &&\n      (\"forwards\" === node.memoizedProps.revealOrder ||\n        \"backwards\" === node.memoizedProps.revealOrder ||\n        \"unstable_legacy-backwards\" === node.memoizedProps.revealOrder ||\n        \"together\" === node.memoizedProps.revealOrder)\n    ) {\n      if (0 !== (node.flags & 128)) return node;\n    } else if (null !== node.child) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n    if (node === row) break;\n    for (; null === node.sibling; ) {\n      if (null === node.return || node.return === row) return null;\n      node = node.return;\n    }\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n  return null;\n}\nvar renderLanes = 0,\n  currentlyRenderingFiber = null,\n  currentHook = null,\n  workInProgressHook = null,\n  didScheduleRenderPhaseUpdate = !1,\n  didScheduleRenderPhaseUpdateDuringThisPass = !1,\n  shouldDoubleInvokeUserFnsInHooksDEV = !1,\n  localIdCounter = 0,\n  thenableIndexCounter = 0,\n  thenableState = null,\n  globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n  throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n  if (null === prevDeps) return !1;\n  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n    if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n  return !0;\n}\nfunction renderWithHooks(\n  current,\n  workInProgress,\n  Component,\n  props,\n  secondArg,\n  nextRenderLanes\n) {\n  renderLanes = nextRenderLanes;\n  currentlyRenderingFiber = workInProgress;\n  workInProgress.memoizedState = null;\n  workInProgress.updateQueue = null;\n  workInProgress.lanes = 0;\n  ReactSharedInternals.H =\n    null === current || null === current.memoizedState\n      ? HooksDispatcherOnMount\n      : HooksDispatcherOnUpdate;\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  nextRenderLanes = Component(props, secondArg);\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  didScheduleRenderPhaseUpdateDuringThisPass &&\n    (nextRenderLanes = renderWithHooksAgain(\n      workInProgress,\n      Component,\n      props,\n      secondArg\n    ));\n  finishRenderingHooks(current);\n  return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdate = !1;\n  thenableIndexCounter = 0;\n  thenableState = null;\n  if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n  null === current ||\n    didReceiveUpdate ||\n    ((current = current.dependencies),\n    null !== current &&\n      checkIfContextChanged(current) &&\n      (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n  currentlyRenderingFiber = workInProgress;\n  var numberOfReRenders = 0;\n  do {\n    didScheduleRenderPhaseUpdateDuringThisPass && (thenableState = null);\n    thenableIndexCounter = 0;\n    didScheduleRenderPhaseUpdateDuringThisPass = !1;\n    if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n    numberOfReRenders += 1;\n    workInProgressHook = currentHook = null;\n    if (null != workInProgress.updateQueue) {\n      var children = workInProgress.updateQueue;\n      children.lastEffect = null;\n      children.events = null;\n      children.stores = null;\n      null != children.memoCache && (children.memoCache.index = 0);\n    }\n    ReactSharedInternals.H = HooksDispatcherOnRerender;\n    children = Component(props, secondArg);\n  } while (didScheduleRenderPhaseUpdateDuringThisPass);\n  return children;\n}\nfunction TransitionAwareHostComponent() {\n  var dispatcher = ReactSharedInternals.H,\n    maybeThenable = dispatcher.useState()[0];\n  maybeThenable =\n    \"function\" === typeof maybeThenable.then\n      ? useThenable(maybeThenable)\n      : maybeThenable;\n  dispatcher = dispatcher.useState()[0];\n  (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n    (currentlyRenderingFiber.flags |= 1024);\n  return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n  var didRenderIdHook = 0 !== localIdCounter;\n  localIdCounter = 0;\n  return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n  workInProgress.updateQueue = current.updateQueue;\n  workInProgress.flags &= -2053;\n  current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n  if (didScheduleRenderPhaseUpdate) {\n    for (\n      workInProgress = workInProgress.memoizedState;\n      null !== workInProgress;\n\n    ) {\n      var queue = workInProgress.queue;\n      null !== queue && (queue.pending = null);\n      workInProgress = workInProgress.next;\n    }\n    didScheduleRenderPhaseUpdate = !1;\n  }\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdateDuringThisPass = !1;\n  thenableIndexCounter = localIdCounter = 0;\n  thenableState = null;\n}\nfunction mountWorkInProgressHook() {\n  var hook = {\n    memoizedState: null,\n    baseState: null,\n    baseQueue: null,\n    queue: null,\n    next: null\n  };\n  null === workInProgressHook\n    ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n    : (workInProgressHook = workInProgressHook.next = hook);\n  return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n  if (null === currentHook) {\n    var nextCurrentHook = currentlyRenderingFiber.alternate;\n    nextCurrentHook =\n      null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n  } else nextCurrentHook = currentHook.next;\n  var nextWorkInProgressHook =\n    null === workInProgressHook\n      ? currentlyRenderingFiber.memoizedState\n      : workInProgressHook.next;\n  if (null !== nextWorkInProgressHook)\n    (workInProgressHook = nextWorkInProgressHook),\n      (currentHook = nextCurrentHook);\n  else {\n    if (null === nextCurrentHook) {\n      if (null === currentlyRenderingFiber.alternate)\n        throw Error(formatProdErrorMessage(467));\n      throw Error(formatProdErrorMessage(310));\n    }\n    currentHook = nextCurrentHook;\n    nextCurrentHook = {\n      memoizedState: currentHook.memoizedState,\n      baseState: currentHook.baseState,\n      baseQueue: currentHook.baseQueue,\n      queue: currentHook.queue,\n      next: null\n    };\n    null === workInProgressHook\n      ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n          nextCurrentHook)\n      : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n  }\n  return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n  return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n  var index = thenableIndexCounter;\n  thenableIndexCounter += 1;\n  null === thenableState && (thenableState = []);\n  thenable = trackUsedThenable(thenableState, thenable, index);\n  index = currentlyRenderingFiber;\n  null ===\n    (null === workInProgressHook\n      ? index.memoizedState\n      : workInProgressHook.next) &&\n    ((index = index.alternate),\n    (ReactSharedInternals.H =\n      null === index || null === index.memoizedState\n        ? HooksDispatcherOnMount\n        : HooksDispatcherOnUpdate));\n  return thenable;\n}\nfunction use(usable) {\n  if (null !== usable && \"object\" === typeof usable) {\n    if (\"function\" === typeof usable.then) return useThenable(usable);\n    if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n  }\n  throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n  var memoCache = null,\n    updateQueue = currentlyRenderingFiber.updateQueue;\n  null !== updateQueue && (memoCache = updateQueue.memoCache);\n  if (null == memoCache) {\n    var current = currentlyRenderingFiber.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      null !== current &&\n        ((current = current.memoCache),\n        null != current &&\n          (memoCache = {\n            data: current.data.map(function (array) {\n              return array.slice();\n            }),\n            index: 0\n          })));\n  }\n  null == memoCache && (memoCache = { data: [], index: 0 });\n  null === updateQueue &&\n    ((updateQueue = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = updateQueue));\n  updateQueue.memoCache = memoCache;\n  updateQueue = memoCache.data[memoCache.index];\n  if (void 0 === updateQueue)\n    for (\n      updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n      current < size;\n      current++\n    )\n      updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n  memoCache.index++;\n  return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n  return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n  var hook = updateWorkInProgressHook();\n  return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n  var queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var baseQueue = hook.baseQueue,\n    pendingQueue = queue.pending;\n  if (null !== pendingQueue) {\n    if (null !== baseQueue) {\n      var baseFirst = baseQueue.next;\n      baseQueue.next = pendingQueue.next;\n      pendingQueue.next = baseFirst;\n    }\n    current.baseQueue = baseQueue = pendingQueue;\n    queue.pending = null;\n  }\n  pendingQueue = hook.baseState;\n  if (null === baseQueue) hook.memoizedState = pendingQueue;\n  else {\n    current = baseQueue.next;\n    var newBaseQueueFirst = (baseFirst = null),\n      newBaseQueueLast = null,\n      update = current,\n      didReadFromEntangledAsyncAction$60 = !1;\n    do {\n      var updateLane = update.lane & -536870913;\n      if (\n        updateLane !== update.lane\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        var revertLane = update.revertLane;\n        if (0 === revertLane)\n          null !== newBaseQueueLast &&\n            (newBaseQueueLast = newBaseQueueLast.next =\n              {\n                lane: 0,\n                revertLane: 0,\n                gesture: null,\n                action: update.action,\n                hasEagerState: update.hasEagerState,\n                eagerState: update.eagerState,\n                next: null\n              }),\n            updateLane === currentEntangledLane &&\n              (didReadFromEntangledAsyncAction$60 = !0);\n        else if ((renderLanes & revertLane) === revertLane) {\n          update = update.next;\n          revertLane === currentEntangledLane &&\n            (didReadFromEntangledAsyncAction$60 = !0);\n          continue;\n        } else\n          (updateLane = {\n            lane: 0,\n            revertLane: update.revertLane,\n            gesture: null,\n            action: update.action,\n            hasEagerState: update.hasEagerState,\n            eagerState: update.eagerState,\n            next: null\n          }),\n            null === newBaseQueueLast\n              ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n                (baseFirst = pendingQueue))\n              : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n            (currentlyRenderingFiber.lanes |= revertLane),\n            (workInProgressRootSkippedLanes |= revertLane);\n        updateLane = update.action;\n        shouldDoubleInvokeUserFnsInHooksDEV &&\n          reducer(pendingQueue, updateLane);\n        pendingQueue = update.hasEagerState\n          ? update.eagerState\n          : reducer(pendingQueue, updateLane);\n      } else\n        (revertLane = {\n          lane: updateLane,\n          revertLane: update.revertLane,\n          gesture: update.gesture,\n          action: update.action,\n          hasEagerState: update.hasEagerState,\n          eagerState: update.eagerState,\n          next: null\n        }),\n          null === newBaseQueueLast\n            ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n              (baseFirst = pendingQueue))\n            : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n          (currentlyRenderingFiber.lanes |= updateLane),\n          (workInProgressRootSkippedLanes |= updateLane);\n      update = update.next;\n    } while (null !== update && update !== current);\n    null === newBaseQueueLast\n      ? (baseFirst = pendingQueue)\n      : (newBaseQueueLast.next = newBaseQueueFirst);\n    if (\n      !objectIs(pendingQueue, hook.memoizedState) &&\n      ((didReceiveUpdate = !0),\n      didReadFromEntangledAsyncAction$60 &&\n        ((reducer = currentEntangledActionThenable), null !== reducer))\n    )\n      throw reducer;\n    hook.memoizedState = pendingQueue;\n    hook.baseState = baseFirst;\n    hook.baseQueue = newBaseQueueLast;\n    queue.lastRenderedState = pendingQueue;\n  }\n  null === baseQueue && (queue.lanes = 0);\n  return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n  var hook = updateWorkInProgressHook(),\n    queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var dispatch = queue.dispatch,\n    lastRenderPhaseUpdate = queue.pending,\n    newState = hook.memoizedState;\n  if (null !== lastRenderPhaseUpdate) {\n    queue.pending = null;\n    var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n    do (newState = reducer(newState, update.action)), (update = update.next);\n    while (update !== lastRenderPhaseUpdate);\n    objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n    hook.memoizedState = newState;\n    null === hook.baseQueue && (hook.baseState = newState);\n    queue.lastRenderedState = newState;\n  }\n  return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n  var fiber = currentlyRenderingFiber,\n    hook = updateWorkInProgressHook(),\n    isHydrating$jscomp$0 = isHydrating;\n  if (isHydrating$jscomp$0) {\n    if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n    getServerSnapshot = getServerSnapshot();\n  } else getServerSnapshot = getSnapshot();\n  var snapshotChanged = !objectIs(\n    (currentHook || hook).memoizedState,\n    getServerSnapshot\n  );\n  snapshotChanged &&\n    ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n  hook = hook.queue;\n  updateEffect(subscribeToStore.bind(null, fiber, hook, subscribe), [\n    subscribe\n  ]);\n  if (\n    hook.getSnapshot !== getSnapshot ||\n    snapshotChanged ||\n    (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)\n  ) {\n    fiber.flags |= 2048;\n    pushSimpleEffect(\n      9,\n      { destroy: void 0 },\n      updateStoreInstance.bind(\n        null,\n        fiber,\n        hook,\n        getServerSnapshot,\n        getSnapshot\n      ),\n      null\n    );\n    if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n    isHydrating$jscomp$0 ||\n      0 !== (renderLanes & 127) ||\n      pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n  }\n  return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n  fiber.flags |= 16384;\n  fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n  getSnapshot = currentlyRenderingFiber.updateQueue;\n  null === getSnapshot\n    ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n      (currentlyRenderingFiber.updateQueue = getSnapshot),\n      (getSnapshot.stores = [fiber]))\n    : ((renderedSnapshot = getSnapshot.stores),\n      null === renderedSnapshot\n        ? (getSnapshot.stores = [fiber])\n        : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n  inst.value = nextSnapshot;\n  inst.getSnapshot = getSnapshot;\n  checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n  return subscribe(function () {\n    checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n  });\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction forceStoreRerender(fiber) {\n  var root = enqueueConcurrentRenderForLane(fiber, 2);\n  null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n  var hook = mountWorkInProgressHook();\n  if (\"function\" === typeof initialState) {\n    var initialStateInitializer = initialState;\n    initialState = initialStateInitializer();\n    if (shouldDoubleInvokeUserFnsInHooksDEV) {\n      setIsStrictModeForDevtools(!0);\n      try {\n        initialStateInitializer();\n      } finally {\n        setIsStrictModeForDevtools(!1);\n      }\n    }\n  }\n  hook.memoizedState = hook.baseState = initialState;\n  hook.queue = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: basicStateReducer,\n    lastRenderedState: initialState\n  };\n  return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n  hook.baseState = passthrough;\n  return updateReducerImpl(\n    hook,\n    currentHook,\n    \"function\" === typeof reducer ? reducer : basicStateReducer\n  );\n}\nfunction dispatchActionState(\n  fiber,\n  actionQueue,\n  setPendingState,\n  setState,\n  payload\n) {\n  if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n  fiber = actionQueue.action;\n  if (null !== fiber) {\n    var actionNode = {\n      payload: payload,\n      action: fiber,\n      next: null,\n      isTransition: !0,\n      status: \"pending\",\n      value: null,\n      reason: null,\n      listeners: [],\n      then: function (listener) {\n        actionNode.listeners.push(listener);\n      }\n    };\n    null !== ReactSharedInternals.T\n      ? setPendingState(!0)\n      : (actionNode.isTransition = !1);\n    setState(actionNode);\n    setPendingState = actionQueue.pending;\n    null === setPendingState\n      ? ((actionNode.next = actionQueue.pending = actionNode),\n        runActionStateAction(actionQueue, actionNode))\n      : ((actionNode.next = setPendingState.next),\n        (actionQueue.pending = setPendingState.next = actionNode));\n  }\n}\nfunction runActionStateAction(actionQueue, node) {\n  var action = node.action,\n    payload = node.payload,\n    prevState = actionQueue.state;\n  if (node.isTransition) {\n    var prevTransition = ReactSharedInternals.T,\n      currentTransition = {};\n    ReactSharedInternals.T = currentTransition;\n    try {\n      var returnValue = action(prevState, payload),\n        onStartTransitionFinish = ReactSharedInternals.S;\n      null !== onStartTransitionFinish &&\n        onStartTransitionFinish(currentTransition, returnValue);\n      handleActionReturnValue(actionQueue, node, returnValue);\n    } catch (error) {\n      onActionError(actionQueue, node, error);\n    } finally {\n      null !== prevTransition &&\n        null !== currentTransition.types &&\n        (prevTransition.types = currentTransition.types),\n        (ReactSharedInternals.T = prevTransition);\n    }\n  } else\n    try {\n      (prevTransition = action(prevState, payload)),\n        handleActionReturnValue(actionQueue, node, prevTransition);\n    } catch (error$66) {\n      onActionError(actionQueue, node, error$66);\n    }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n  null !== returnValue &&\n  \"object\" === typeof returnValue &&\n  \"function\" === typeof returnValue.then\n    ? returnValue.then(\n        function (nextState) {\n          onActionSuccess(actionQueue, node, nextState);\n        },\n        function (error) {\n          return onActionError(actionQueue, node, error);\n        }\n      )\n    : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n  actionNode.status = \"fulfilled\";\n  actionNode.value = nextState;\n  notifyActionListeners(actionNode);\n  actionQueue.state = nextState;\n  actionNode = actionQueue.pending;\n  null !== actionNode &&\n    ((nextState = actionNode.next),\n    nextState === actionNode\n      ? (actionQueue.pending = null)\n      : ((nextState = nextState.next),\n        (actionNode.next = nextState),\n        runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n  var last = actionQueue.pending;\n  actionQueue.pending = null;\n  if (null !== last) {\n    last = last.next;\n    do\n      (actionNode.status = \"rejected\"),\n        (actionNode.reason = error),\n        notifyActionListeners(actionNode),\n        (actionNode = actionNode.next);\n    while (actionNode !== last);\n  }\n  actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n  actionNode = actionNode.listeners;\n  for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n  return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n  if (isHydrating) {\n    var ssrFormState = workInProgressRoot.formState;\n    if (null !== ssrFormState) {\n      a: {\n        var JSCompiler_inline_result = currentlyRenderingFiber;\n        if (isHydrating) {\n          if (nextHydratableInstance) {\n            b: {\n              var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n              for (\n                var inRootOrSingleton = rootOrSingletonContext;\n                8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n              ) {\n                if (!inRootOrSingleton) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n                JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n                  JSCompiler_inline_result$jscomp$0.nextSibling\n                );\n                if (null === JSCompiler_inline_result$jscomp$0) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n              }\n              inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n              JSCompiler_inline_result$jscomp$0 =\n                \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n                  ? JSCompiler_inline_result$jscomp$0\n                  : null;\n            }\n            if (JSCompiler_inline_result$jscomp$0) {\n              nextHydratableInstance = getNextHydratable(\n                JSCompiler_inline_result$jscomp$0.nextSibling\n              );\n              JSCompiler_inline_result =\n                \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n              break a;\n            }\n          }\n          throwOnHydrationMismatch(JSCompiler_inline_result);\n        }\n        JSCompiler_inline_result = !1;\n      }\n      JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n    }\n  }\n  ssrFormState = mountWorkInProgressHook();\n  ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n  JSCompiler_inline_result = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: actionStateReducer,\n    lastRenderedState: initialStateProp\n  };\n  ssrFormState.queue = JSCompiler_inline_result;\n  ssrFormState = dispatchSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result\n  );\n  JSCompiler_inline_result.dispatch = ssrFormState;\n  JSCompiler_inline_result = mountStateImpl(!1);\n  inRootOrSingleton = dispatchOptimisticSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    !1,\n    JSCompiler_inline_result.queue\n  );\n  JSCompiler_inline_result = mountWorkInProgressHook();\n  JSCompiler_inline_result$jscomp$0 = {\n    state: initialStateProp,\n    dispatch: null,\n    action: action,\n    pending: null\n  };\n  JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n  ssrFormState = dispatchActionState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result$jscomp$0,\n    inRootOrSingleton,\n    ssrFormState\n  );\n  JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n  JSCompiler_inline_result.memoizedState = action;\n  return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n  var stateHook = updateWorkInProgressHook();\n  return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n  currentStateHook = updateReducerImpl(\n    stateHook,\n    currentStateHook,\n    actionStateReducer\n  )[0];\n  stateHook = updateReducer(basicStateReducer)[0];\n  if (\n    \"object\" === typeof currentStateHook &&\n    null !== currentStateHook &&\n    \"function\" === typeof currentStateHook.then\n  )\n    try {\n      var state = useThenable(currentStateHook);\n    } catch (x) {\n      if (x === SuspenseException) throw SuspenseActionException;\n      throw x;\n    }\n  else state = currentStateHook;\n  currentStateHook = updateWorkInProgressHook();\n  var actionQueue = currentStateHook.queue,\n    dispatch = actionQueue.dispatch;\n  action !== currentStateHook.memoizedState &&\n    ((currentlyRenderingFiber.flags |= 2048),\n    pushSimpleEffect(\n      9,\n      { destroy: void 0 },\n      actionStateActionEffect.bind(null, actionQueue, action),\n      null\n    ));\n  return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n  actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n  var stateHook = updateWorkInProgressHook(),\n    currentStateHook = currentHook;\n  if (null !== currentStateHook)\n    return updateActionStateImpl(stateHook, currentStateHook, action);\n  updateWorkInProgressHook();\n  stateHook = stateHook.memoizedState;\n  currentStateHook = updateWorkInProgressHook();\n  var dispatch = currentStateHook.queue.dispatch;\n  currentStateHook.memoizedState = action;\n  return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, deps) {\n  tag = { tag: tag, create: create, deps: deps, inst: inst, next: null };\n  inst = currentlyRenderingFiber.updateQueue;\n  null === inst &&\n    ((inst = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = inst));\n  create = inst.lastEffect;\n  null === create\n    ? (inst.lastEffect = tag.next = tag)\n    : ((deps = create.next),\n      (create.next = tag),\n      (tag.next = deps),\n      (inst.lastEffect = tag));\n  return tag;\n}\nfunction updateRef() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = mountWorkInProgressHook();\n  currentlyRenderingFiber.flags |= fiberFlags;\n  hook.memoizedState = pushSimpleEffect(\n    1 | hookFlags,\n    { destroy: void 0 },\n    create,\n    void 0 === deps ? null : deps\n  );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var inst = hook.memoizedState.inst;\n  null !== currentHook &&\n  null !== deps &&\n  areHookInputsEqual(deps, currentHook.memoizedState.deps)\n    ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n    : ((currentlyRenderingFiber.flags |= fiberFlags),\n      (hook.memoizedState = pushSimpleEffect(\n        1 | hookFlags,\n        inst,\n        create,\n        deps\n      )));\n}\nfunction mountEffect(create, deps) {\n  mountEffectImpl(8390656, 8, create, deps);\n}\nfunction updateEffect(create, deps) {\n  updateEffectImpl(2048, 8, create, deps);\n}\nfunction useEffectEventImpl(payload) {\n  currentlyRenderingFiber.flags |= 4;\n  var componentUpdateQueue = currentlyRenderingFiber.updateQueue;\n  if (null === componentUpdateQueue)\n    (componentUpdateQueue = createFunctionComponentUpdateQueue()),\n      (currentlyRenderingFiber.updateQueue = componentUpdateQueue),\n      (componentUpdateQueue.events = [payload]);\n  else {\n    var events = componentUpdateQueue.events;\n    null === events\n      ? (componentUpdateQueue.events = [payload])\n      : events.push(payload);\n  }\n}\nfunction updateEvent(callback) {\n  var ref = updateWorkInProgressHook().memoizedState;\n  useEffectEventImpl({ ref: ref, nextImpl: callback });\n  return function () {\n    if (0 !== (executionContext & 2)) throw Error(formatProdErrorMessage(440));\n    return ref.impl.apply(void 0, arguments);\n  };\n}\nfunction updateInsertionEffect(create, deps) {\n  return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n  return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n  if (\"function\" === typeof ref) {\n    create = create();\n    var refCleanup = ref(create);\n    return function () {\n      \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n    };\n  }\n  if (null !== ref && void 0 !== ref)\n    return (\n      (create = create()),\n      (ref.current = create),\n      function () {\n        ref.current = null;\n      }\n    );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n  deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n  updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  hook.memoizedState = [callback, deps];\n  return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  prevState = nextCreate();\n  if (shouldDoubleInvokeUserFnsInHooksDEV) {\n    setIsStrictModeForDevtools(!0);\n    try {\n      nextCreate();\n    } finally {\n      setIsStrictModeForDevtools(!1);\n    }\n  }\n  hook.memoizedState = [prevState, deps];\n  return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n  if (\n    void 0 === initialValue ||\n    (0 !== (renderLanes & 1073741824) &&\n      0 === (workInProgressRootRenderLanes & 261930))\n  )\n    return (hook.memoizedState = value);\n  hook.memoizedState = initialValue;\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n  if (objectIs(value, prevValue)) return value;\n  if (null !== currentTreeHiddenStackCursor.current)\n    return (\n      (hook = mountDeferredValueImpl(hook, value, initialValue)),\n      objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n      hook\n    );\n  if (\n    0 === (renderLanes & 42) ||\n    (0 !== (renderLanes & 1073741824) &&\n      0 === (workInProgressRootRenderLanes & 261930))\n  )\n    return (didReceiveUpdate = !0), (hook.memoizedState = value);\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  ReactDOMSharedInternals.p =\n    0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n  try {\n    var returnValue = callback(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    if (\n      null !== returnValue &&\n      \"object\" === typeof returnValue &&\n      \"function\" === typeof returnValue.then\n    ) {\n      var thenableForFinishedState = chainThenableValue(\n        returnValue,\n        finishedState\n      );\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        thenableForFinishedState,\n        requestUpdateLane(fiber)\n      );\n    } else\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        finishedState,\n        requestUpdateLane(fiber)\n      );\n  } catch (error) {\n    dispatchSetStateInternal(\n      fiber,\n      queue,\n      { then: function () {}, status: \"rejected\", reason: error },\n      requestUpdateLane()\n    );\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      null !== prevTransition &&\n        null !== currentTransition.types &&\n        (prevTransition.types = currentTransition.types),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction noop() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n  if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n  var queue = ensureFormComponentIsStateful(formFiber).queue;\n  startTransition(\n    formFiber,\n    queue,\n    pendingState,\n    sharedNotPendingObject,\n    null === action\n      ? noop\n      : function () {\n          requestFormReset$1(formFiber);\n          return action(formData);\n        }\n  );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n  var existingStateHook = formFiber.memoizedState;\n  if (null !== existingStateHook) return existingStateHook;\n  existingStateHook = {\n    memoizedState: sharedNotPendingObject,\n    baseState: sharedNotPendingObject,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: sharedNotPendingObject\n    },\n    next: null\n  };\n  var initialResetState = {};\n  existingStateHook.next = {\n    memoizedState: initialResetState,\n    baseState: initialResetState,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: initialResetState\n    },\n    next: null\n  };\n  formFiber.memoizedState = existingStateHook;\n  formFiber = formFiber.alternate;\n  null !== formFiber && (formFiber.memoizedState = existingStateHook);\n  return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n  var stateHook = ensureFormComponentIsStateful(formFiber);\n  null === stateHook.next && (stateHook = formFiber.alternate.memoizedState);\n  dispatchSetStateInternal(\n    formFiber,\n    stateHook.next.queue,\n    {},\n    requestUpdateLane()\n  );\n}\nfunction useHostTransitionStatus() {\n  return readContext(HostTransitionContext);\n}\nfunction updateId() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n  for (var provider = fiber.return; null !== provider; ) {\n    switch (provider.tag) {\n      case 24:\n      case 3:\n        var lane = requestUpdateLane();\n        fiber = createUpdate(lane);\n        var root$69 = enqueueUpdate(provider, fiber, lane);\n        null !== root$69 &&\n          (scheduleUpdateOnFiber(root$69, provider, lane),\n          entangleTransitions(root$69, provider, lane));\n        provider = { cache: createCache() };\n        fiber.payload = provider;\n        return;\n    }\n    provider = provider.return;\n  }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  action = {\n    lane: lane,\n    revertLane: 0,\n    gesture: null,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  isRenderPhaseUpdate(fiber)\n    ? enqueueRenderPhaseUpdate(queue, action)\n    : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n      null !== action &&\n        (scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n  var update = {\n    lane: lane,\n    revertLane: 0,\n    gesture: null,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n  else {\n    var alternate = fiber.alternate;\n    if (\n      0 === fiber.lanes &&\n      (null === alternate || 0 === alternate.lanes) &&\n      ((alternate = queue.lastRenderedReducer), null !== alternate)\n    )\n      try {\n        var currentState = queue.lastRenderedState,\n          eagerState = alternate(currentState, action);\n        update.hasEagerState = !0;\n        update.eagerState = eagerState;\n        if (objectIs(eagerState, currentState))\n          return (\n            enqueueUpdate$1(fiber, queue, update, 0),\n            null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n            !1\n          );\n      } catch (error) {\n      } finally {\n      }\n    action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n    if (null !== action)\n      return (\n        scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane),\n        !0\n      );\n  }\n  return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n  action = {\n    lane: 2,\n    revertLane: requestTransitionLane(),\n    gesture: null,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) {\n    if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n  } else\n    (throwIfDuringRender = enqueueConcurrentHookUpdate(\n      fiber,\n      queue,\n      action,\n      2\n    )),\n      null !== throwIfDuringRender &&\n        scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n  var alternate = fiber.alternate;\n  return (\n    fiber === currentlyRenderingFiber ||\n    (null !== alternate && alternate === currentlyRenderingFiber)\n  );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n  didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n    !0;\n  var pending = queue.pending;\n  null === pending\n    ? (update.next = update)\n    : ((update.next = pending.next), (pending.next = update));\n  queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n  if (0 !== (lane & 4194048)) {\n    var queueLanes = queue.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    queue.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nvar ContextOnlyDispatcher = {\n  readContext: readContext,\n  use: use,\n  useCallback: throwInvalidHookError,\n  useContext: throwInvalidHookError,\n  useEffect: throwInvalidHookError,\n  useImperativeHandle: throwInvalidHookError,\n  useLayoutEffect: throwInvalidHookError,\n  useInsertionEffect: throwInvalidHookError,\n  useMemo: throwInvalidHookError,\n  useReducer: throwInvalidHookError,\n  useRef: throwInvalidHookError,\n  useState: throwInvalidHookError,\n  useDebugValue: throwInvalidHookError,\n  useDeferredValue: throwInvalidHookError,\n  useTransition: throwInvalidHookError,\n  useSyncExternalStore: throwInvalidHookError,\n  useId: throwInvalidHookError,\n  useHostTransitionStatus: throwInvalidHookError,\n  useFormState: throwInvalidHookError,\n  useActionState: throwInvalidHookError,\n  useOptimistic: throwInvalidHookError,\n  useMemoCache: throwInvalidHookError,\n  useCacheRefresh: throwInvalidHookError\n};\nContextOnlyDispatcher.useEffectEvent = throwInvalidHookError;\nvar HooksDispatcherOnMount = {\n    readContext: readContext,\n    use: use,\n    useCallback: function (callback, deps) {\n      mountWorkInProgressHook().memoizedState = [\n        callback,\n        void 0 === deps ? null : deps\n      ];\n      return callback;\n    },\n    useContext: readContext,\n    useEffect: mountEffect,\n    useImperativeHandle: function (ref, create, deps) {\n      deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n      mountEffectImpl(\n        4194308,\n        4,\n        imperativeHandleEffect.bind(null, create, ref),\n        deps\n      );\n    },\n    useLayoutEffect: function (create, deps) {\n      return mountEffectImpl(4194308, 4, create, deps);\n    },\n    useInsertionEffect: function (create, deps) {\n      mountEffectImpl(4, 2, create, deps);\n    },\n    useMemo: function (nextCreate, deps) {\n      var hook = mountWorkInProgressHook();\n      deps = void 0 === deps ? null : deps;\n      var nextValue = nextCreate();\n      if (shouldDoubleInvokeUserFnsInHooksDEV) {\n        setIsStrictModeForDevtools(!0);\n        try {\n          nextCreate();\n        } finally {\n          setIsStrictModeForDevtools(!1);\n        }\n      }\n      hook.memoizedState = [nextValue, deps];\n      return nextValue;\n    },\n    useReducer: function (reducer, initialArg, init) {\n      var hook = mountWorkInProgressHook();\n      if (void 0 !== init) {\n        var initialState = init(initialArg);\n        if (shouldDoubleInvokeUserFnsInHooksDEV) {\n          setIsStrictModeForDevtools(!0);\n          try {\n            init(initialArg);\n          } finally {\n            setIsStrictModeForDevtools(!1);\n          }\n        }\n      } else initialState = initialArg;\n      hook.memoizedState = hook.baseState = initialState;\n      reducer = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: reducer,\n        lastRenderedState: initialState\n      };\n      hook.queue = reducer;\n      reducer = reducer.dispatch = dispatchReducerAction.bind(\n        null,\n        currentlyRenderingFiber,\n        reducer\n      );\n      return [hook.memoizedState, reducer];\n    },\n    useRef: function (initialValue) {\n      var hook = mountWorkInProgressHook();\n      initialValue = { current: initialValue };\n      return (hook.memoizedState = initialValue);\n    },\n    useState: function (initialState) {\n      initialState = mountStateImpl(initialState);\n      var queue = initialState.queue,\n        dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n      queue.dispatch = dispatch;\n      return [initialState.memoizedState, dispatch];\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = mountWorkInProgressHook();\n      return mountDeferredValueImpl(hook, value, initialValue);\n    },\n    useTransition: function () {\n      var stateHook = mountStateImpl(!1);\n      stateHook = startTransition.bind(\n        null,\n        currentlyRenderingFiber,\n        stateHook.queue,\n        !0,\n        !1\n      );\n      mountWorkInProgressHook().memoizedState = stateHook;\n      return [!1, stateHook];\n    },\n    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n      var fiber = currentlyRenderingFiber,\n        hook = mountWorkInProgressHook();\n      if (isHydrating) {\n        if (void 0 === getServerSnapshot)\n          throw Error(formatProdErrorMessage(407));\n        getServerSnapshot = getServerSnapshot();\n      } else {\n        getServerSnapshot = getSnapshot();\n        if (null === workInProgressRoot)\n          throw Error(formatProdErrorMessage(349));\n        0 !== (workInProgressRootRenderLanes & 127) ||\n          pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n      }\n      hook.memoizedState = getServerSnapshot;\n      var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n      hook.queue = inst;\n      mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n        subscribe\n      ]);\n      fiber.flags |= 2048;\n      pushSimpleEffect(\n        9,\n        { destroy: void 0 },\n        updateStoreInstance.bind(\n          null,\n          fiber,\n          inst,\n          getServerSnapshot,\n          getSnapshot\n        ),\n        null\n      );\n      return getServerSnapshot;\n    },\n    useId: function () {\n      var hook = mountWorkInProgressHook(),\n        identifierPrefix = workInProgressRoot.identifierPrefix;\n      if (isHydrating) {\n        var JSCompiler_inline_result = treeContextOverflow;\n        var idWithLeadingBit = treeContextId;\n        JSCompiler_inline_result =\n          (\n            idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n          ).toString(32) + JSCompiler_inline_result;\n        identifierPrefix =\n          \"_\" + identifierPrefix + \"R_\" + JSCompiler_inline_result;\n        JSCompiler_inline_result = localIdCounter++;\n        0 < JSCompiler_inline_result &&\n          (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n        identifierPrefix += \"_\";\n      } else\n        (JSCompiler_inline_result = globalClientIdCounter++),\n          (identifierPrefix =\n            \"_\" +\n            identifierPrefix +\n            \"r_\" +\n            JSCompiler_inline_result.toString(32) +\n            \"_\");\n      return (hook.memoizedState = identifierPrefix);\n    },\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: mountActionState,\n    useActionState: mountActionState,\n    useOptimistic: function (passthrough) {\n      var hook = mountWorkInProgressHook();\n      hook.memoizedState = hook.baseState = passthrough;\n      var queue = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: null,\n        lastRenderedState: null\n      };\n      hook.queue = queue;\n      hook = dispatchOptimisticSetState.bind(\n        null,\n        currentlyRenderingFiber,\n        !0,\n        queue\n      );\n      queue.dispatch = hook;\n      return [passthrough, hook];\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: function () {\n      return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n        null,\n        currentlyRenderingFiber\n      ));\n    },\n    useEffectEvent: function (callback) {\n      var hook = mountWorkInProgressHook(),\n        ref = { impl: callback };\n      hook.memoizedState = ref;\n      return function () {\n        if (0 !== (executionContext & 2))\n          throw Error(formatProdErrorMessage(440));\n        return ref.impl.apply(void 0, arguments);\n      };\n    }\n  },\n  HooksDispatcherOnUpdate = {\n    readContext: readContext,\n    use: use,\n    useCallback: updateCallback,\n    useContext: readContext,\n    useEffect: updateEffect,\n    useImperativeHandle: updateImperativeHandle,\n    useInsertionEffect: updateInsertionEffect,\n    useLayoutEffect: updateLayoutEffect,\n    useMemo: updateMemo,\n    useReducer: updateReducer,\n    useRef: updateRef,\n    useState: function () {\n      return updateReducer(basicStateReducer);\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = updateWorkInProgressHook();\n      return updateDeferredValueImpl(\n        hook,\n        currentHook.memoizedState,\n        value,\n        initialValue\n      );\n    },\n    useTransition: function () {\n      var booleanOrThenable = updateReducer(basicStateReducer)[0],\n        start = updateWorkInProgressHook().memoizedState;\n      return [\n        \"boolean\" === typeof booleanOrThenable\n          ? booleanOrThenable\n          : useThenable(booleanOrThenable),\n        start\n      ];\n    },\n    useSyncExternalStore: updateSyncExternalStore,\n    useId: updateId,\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: updateActionState,\n    useActionState: updateActionState,\n    useOptimistic: function (passthrough, reducer) {\n      var hook = updateWorkInProgressHook();\n      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: updateRefresh\n  };\nHooksDispatcherOnUpdate.useEffectEvent = updateEvent;\nvar HooksDispatcherOnRerender = {\n  readContext: readContext,\n  use: use,\n  useCallback: updateCallback,\n  useContext: readContext,\n  useEffect: updateEffect,\n  useImperativeHandle: updateImperativeHandle,\n  useInsertionEffect: updateInsertionEffect,\n  useLayoutEffect: updateLayoutEffect,\n  useMemo: updateMemo,\n  useReducer: rerenderReducer,\n  useRef: updateRef,\n  useState: function () {\n    return rerenderReducer(basicStateReducer);\n  },\n  useDebugValue: mountDebugValue,\n  useDeferredValue: function (value, initialValue) {\n    var hook = updateWorkInProgressHook();\n    return null === currentHook\n      ? mountDeferredValueImpl(hook, value, initialValue)\n      : updateDeferredValueImpl(\n          hook,\n          currentHook.memoizedState,\n          value,\n          initialValue\n        );\n  },\n  useTransition: function () {\n    var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n      start = updateWorkInProgressHook().memoizedState;\n    return [\n      \"boolean\" === typeof booleanOrThenable\n        ? booleanOrThenable\n        : useThenable(booleanOrThenable),\n      start\n    ];\n  },\n  useSyncExternalStore: updateSyncExternalStore,\n  useId: updateId,\n  useHostTransitionStatus: useHostTransitionStatus,\n  useFormState: rerenderActionState,\n  useActionState: rerenderActionState,\n  useOptimistic: function (passthrough, reducer) {\n    var hook = updateWorkInProgressHook();\n    if (null !== currentHook)\n      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n    hook.baseState = passthrough;\n    return [passthrough, hook.queue.dispatch];\n  },\n  useMemoCache: useMemoCache,\n  useCacheRefresh: updateRefresh\n};\nHooksDispatcherOnRerender.useEffectEvent = updateEvent;\nfunction applyDerivedStateFromProps(\n  workInProgress,\n  ctor,\n  getDerivedStateFromProps,\n  nextProps\n) {\n  ctor = workInProgress.memoizedState;\n  getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n  getDerivedStateFromProps =\n    null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n      ? ctor\n      : assign({}, ctor, getDerivedStateFromProps);\n  workInProgress.memoizedState = getDerivedStateFromProps;\n  0 === workInProgress.lanes &&\n    (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n  enqueueSetState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueReplaceState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 1;\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueForceUpdate: function (inst, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 2;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    callback = enqueueUpdate(inst, update, lane);\n    null !== callback &&\n      (scheduleUpdateOnFiber(callback, inst, lane),\n      entangleTransitions(callback, inst, lane));\n  }\n};\nfunction checkShouldComponentUpdate(\n  workInProgress,\n  ctor,\n  oldProps,\n  newProps,\n  oldState,\n  newState,\n  nextContext\n) {\n  workInProgress = workInProgress.stateNode;\n  return \"function\" === typeof workInProgress.shouldComponentUpdate\n    ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n    : ctor.prototype && ctor.prototype.isPureReactComponent\n      ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n      : !0;\n}\nfunction callComponentWillReceiveProps(\n  workInProgress,\n  instance,\n  newProps,\n  nextContext\n) {\n  workInProgress = instance.state;\n  \"function\" === typeof instance.componentWillReceiveProps &&\n    instance.componentWillReceiveProps(newProps, nextContext);\n  \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n    instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n  instance.state !== workInProgress &&\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n  var newProps = baseProps;\n  if (\"ref\" in baseProps) {\n    newProps = {};\n    for (var propName in baseProps)\n      \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n  }\n  if ((Component = Component.defaultProps)) {\n    newProps === baseProps && (newProps = assign({}, newProps));\n    for (var propName$73 in Component)\n      void 0 === newProps[propName$73] &&\n        (newProps[propName$73] = Component[propName$73]);\n  }\n  return newProps;\n}\nfunction defaultOnUncaughtError(error) {\n  reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n  console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n  reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n  try {\n    var onUncaughtError = root.onUncaughtError;\n    onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n  } catch (e$74) {\n    setTimeout(function () {\n      throw e$74;\n    });\n  }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n  try {\n    var onCaughtError = root.onCaughtError;\n    onCaughtError(errorInfo.value, {\n      componentStack: errorInfo.stack,\n      errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n    });\n  } catch (e$75) {\n    setTimeout(function () {\n      throw e$75;\n    });\n  }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  lane.payload = { element: null };\n  lane.callback = function () {\n    logUncaughtError(root, errorInfo);\n  };\n  return lane;\n}\nfunction createClassErrorUpdate(lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n  var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n  if (\"function\" === typeof getDerivedStateFromError) {\n    var error = errorInfo.value;\n    update.payload = function () {\n      return getDerivedStateFromError(error);\n    };\n    update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n    };\n  }\n  var inst = fiber.stateNode;\n  null !== inst &&\n    \"function\" === typeof inst.componentDidCatch &&\n    (update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n      \"function\" !== typeof getDerivedStateFromError &&\n        (null === legacyErrorBoundariesThatAlreadyFailed\n          ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n          : legacyErrorBoundariesThatAlreadyFailed.add(this));\n      var stack = errorInfo.stack;\n      this.componentDidCatch(errorInfo.value, {\n        componentStack: null !== stack ? stack : \"\"\n      });\n    });\n}\nfunction throwException(\n  root,\n  returnFiber,\n  sourceFiber,\n  value,\n  rootRenderLanes\n) {\n  sourceFiber.flags |= 32768;\n  if (\n    null !== value &&\n    \"object\" === typeof value &&\n    \"function\" === typeof value.then\n  ) {\n    returnFiber = sourceFiber.alternate;\n    null !== returnFiber &&\n      propagateParentContextChanges(\n        returnFiber,\n        sourceFiber,\n        rootRenderLanes,\n        !0\n      );\n    sourceFiber = suspenseHandlerStackCursor.current;\n    if (null !== sourceFiber) {\n      switch (sourceFiber.tag) {\n        case 31:\n        case 13:\n          return (\n            null === shellBoundary\n              ? renderDidSuspendDelayIfPossible()\n              : null === sourceFiber.alternate &&\n                0 === workInProgressRootExitStatus &&\n                (workInProgressRootExitStatus = 3),\n            (sourceFiber.flags &= -257),\n            (sourceFiber.flags |= 65536),\n            (sourceFiber.lanes = rootRenderLanes),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? (sourceFiber.updateQueue = new Set([value]))\n                  : returnFiber.add(value),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n        case 22:\n          return (\n            (sourceFiber.flags |= 65536),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? ((returnFiber = {\n                      transitions: null,\n                      markerInstances: null,\n                      retryQueue: new Set([value])\n                    }),\n                    (sourceFiber.updateQueue = returnFiber))\n                  : ((sourceFiber = returnFiber.retryQueue),\n                    null === sourceFiber\n                      ? (returnFiber.retryQueue = new Set([value]))\n                      : sourceFiber.add(value)),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n      }\n      throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n    }\n    attachPingListener(root, value, rootRenderLanes);\n    renderDidSuspendDelayIfPossible();\n    return !1;\n  }\n  if (isHydrating)\n    return (\n      (returnFiber = suspenseHandlerStackCursor.current),\n      null !== returnFiber\n        ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n          (returnFiber.flags |= 65536),\n          (returnFiber.lanes = rootRenderLanes),\n          value !== HydrationMismatchException &&\n            ((root = Error(formatProdErrorMessage(422), { cause: value })),\n            queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n        : (value !== HydrationMismatchException &&\n            ((returnFiber = Error(formatProdErrorMessage(423), {\n              cause: value\n            })),\n            queueHydrationError(\n              createCapturedValueAtFiber(returnFiber, sourceFiber)\n            )),\n          (root = root.current.alternate),\n          (root.flags |= 65536),\n          (rootRenderLanes &= -rootRenderLanes),\n          (root.lanes |= rootRenderLanes),\n          (value = createCapturedValueAtFiber(value, sourceFiber)),\n          (rootRenderLanes = createRootErrorUpdate(\n            root.stateNode,\n            value,\n            rootRenderLanes\n          )),\n          enqueueCapturedUpdate(root, rootRenderLanes),\n          4 !== workInProgressRootExitStatus &&\n            (workInProgressRootExitStatus = 2)),\n      !1\n    );\n  var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n  wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n  null === workInProgressRootConcurrentErrors\n    ? (workInProgressRootConcurrentErrors = [wrapperError])\n    : workInProgressRootConcurrentErrors.push(wrapperError);\n  4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n  if (null === returnFiber) return !0;\n  value = createCapturedValueAtFiber(value, sourceFiber);\n  sourceFiber = returnFiber;\n  do {\n    switch (sourceFiber.tag) {\n      case 3:\n        return (\n          (sourceFiber.flags |= 65536),\n          (root = rootRenderLanes & -rootRenderLanes),\n          (sourceFiber.lanes |= root),\n          (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n          enqueueCapturedUpdate(sourceFiber, root),\n          !1\n        );\n      case 1:\n        if (\n          ((returnFiber = sourceFiber.type),\n          (wrapperError = sourceFiber.stateNode),\n          0 === (sourceFiber.flags & 128) &&\n            (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n              (null !== wrapperError &&\n                \"function\" === typeof wrapperError.componentDidCatch &&\n                (null === legacyErrorBoundariesThatAlreadyFailed ||\n                  !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError)))))\n        )\n          return (\n            (sourceFiber.flags |= 65536),\n            (rootRenderLanes &= -rootRenderLanes),\n            (sourceFiber.lanes |= rootRenderLanes),\n            (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n            initializeClassErrorUpdate(\n              rootRenderLanes,\n              root,\n              sourceFiber,\n              value\n            ),\n            enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n            !1\n          );\n    }\n    sourceFiber = sourceFiber.return;\n  } while (null !== sourceFiber);\n  return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n  didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n  workInProgress.child =\n    null === current\n      ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n      : reconcileChildFibers(\n          workInProgress,\n          current.child,\n          nextChildren,\n          renderLanes\n        );\n}\nfunction updateForwardRef(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  Component = Component.render;\n  var ref = workInProgress.ref;\n  if (\"ref\" in nextProps) {\n    var propsWithoutRef = {};\n    for (var key in nextProps)\n      \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n  } else propsWithoutRef = nextProps;\n  prepareToReadContext(workInProgress);\n  nextProps = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    propsWithoutRef,\n    ref,\n    renderLanes\n  );\n  key = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && key && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null === current) {\n    var type = Component.type;\n    if (\n      \"function\" === typeof type &&\n      !shouldConstruct(type) &&\n      void 0 === type.defaultProps &&\n      null === Component.compare\n    )\n      return (\n        (workInProgress.tag = 15),\n        (workInProgress.type = type),\n        updateSimpleMemoComponent(\n          current,\n          workInProgress,\n          type,\n          nextProps,\n          renderLanes\n        )\n      );\n    current = createFiberFromTypeAndProps(\n      Component.type,\n      null,\n      nextProps,\n      workInProgress,\n      workInProgress.mode,\n      renderLanes\n    );\n    current.ref = workInProgress.ref;\n    current.return = workInProgress;\n    return (workInProgress.child = current);\n  }\n  type = current.child;\n  if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n    var prevProps = type.memoizedProps;\n    Component = Component.compare;\n    Component = null !== Component ? Component : shallowEqual;\n    if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n  }\n  workInProgress.flags |= 1;\n  current = createWorkInProgress(type, nextProps);\n  current.ref = workInProgress.ref;\n  current.return = workInProgress;\n  return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null !== current) {\n    var prevProps = current.memoizedProps;\n    if (\n      shallowEqual(prevProps, nextProps) &&\n      current.ref === workInProgress.ref\n    )\n      if (\n        ((didReceiveUpdate = !1),\n        (workInProgress.pendingProps = nextProps = prevProps),\n        checkScheduledUpdateOrContext(current, renderLanes))\n      )\n        0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n      else\n        return (\n          (workInProgress.lanes = current.lanes),\n          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n        );\n  }\n  return updateFunctionComponent(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    renderLanes\n  );\n}\nfunction updateOffscreenComponent(\n  current,\n  workInProgress,\n  renderLanes,\n  nextProps\n) {\n  var nextChildren = nextProps.children,\n    prevState = null !== current ? current.memoizedState : null;\n  null === current &&\n    null === workInProgress.stateNode &&\n    (workInProgress.stateNode = {\n      _visibility: 1,\n      _pendingMarkers: null,\n      _retryCache: null,\n      _transitions: null\n    });\n  if (\"hidden\" === nextProps.mode) {\n    if (0 !== (workInProgress.flags & 128)) {\n      prevState =\n        null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n      if (null !== current) {\n        nextProps = workInProgress.child = current.child;\n        for (nextChildren = 0; null !== nextProps; )\n          (nextChildren =\n            nextChildren | nextProps.lanes | nextProps.childLanes),\n            (nextProps = nextProps.sibling);\n        nextProps = nextChildren & ~prevState;\n      } else (nextProps = 0), (workInProgress.child = null);\n      return deferHiddenOffscreenComponent(\n        current,\n        workInProgress,\n        prevState,\n        renderLanes,\n        nextProps\n      );\n    }\n    if (0 !== (renderLanes & 536870912))\n      (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n        null !== current &&\n          pushTransition(\n            workInProgress,\n            null !== prevState ? prevState.cachePool : null\n          ),\n        null !== prevState\n          ? pushHiddenContext(workInProgress, prevState)\n          : reuseHiddenContextOnStack(),\n        pushOffscreenSuspenseHandler(workInProgress);\n    else\n      return (\n        (nextProps = workInProgress.lanes = 536870912),\n        deferHiddenOffscreenComponent(\n          current,\n          workInProgress,\n          null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n          renderLanes,\n          nextProps\n        )\n      );\n  } else\n    null !== prevState\n      ? (pushTransition(workInProgress, prevState.cachePool),\n        pushHiddenContext(workInProgress, prevState),\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (workInProgress.memoizedState = null))\n      : (null !== current && pushTransition(workInProgress, null),\n        reuseHiddenContextOnStack(),\n        reuseSuspenseHandlerOnStack(workInProgress));\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nfunction bailoutOffscreenComponent(current, workInProgress) {\n  (null !== current && 22 === current.tag) ||\n    null !== workInProgress.stateNode ||\n    (workInProgress.stateNode = {\n      _visibility: 1,\n      _pendingMarkers: null,\n      _retryCache: null,\n      _transitions: null\n    });\n  return workInProgress.sibling;\n}\nfunction deferHiddenOffscreenComponent(\n  current,\n  workInProgress,\n  nextBaseLanes,\n  renderLanes,\n  remainingChildLanes\n) {\n  var JSCompiler_inline_result = peekCacheFromPool();\n  JSCompiler_inline_result =\n    null === JSCompiler_inline_result\n      ? null\n      : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n  workInProgress.memoizedState = {\n    baseLanes: nextBaseLanes,\n    cachePool: JSCompiler_inline_result\n  };\n  null !== current && pushTransition(workInProgress, null);\n  reuseHiddenContextOnStack();\n  pushOffscreenSuspenseHandler(workInProgress);\n  null !== current &&\n    propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n  workInProgress.childLanes = remainingChildLanes;\n  return null;\n}\nfunction mountActivityChildren(workInProgress, nextProps) {\n  nextProps = mountWorkInProgressOffscreenFiber(\n    { mode: nextProps.mode, children: nextProps.children },\n    workInProgress.mode\n  );\n  nextProps.ref = workInProgress.ref;\n  workInProgress.child = nextProps;\n  nextProps.return = workInProgress;\n  return nextProps;\n}\nfunction retryActivityComponentWithoutHydrating(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n  current = mountActivityChildren(workInProgress, workInProgress.pendingProps);\n  current.flags |= 2;\n  popSuspenseHandler(workInProgress);\n  workInProgress.memoizedState = null;\n  return current;\n}\nfunction updateActivityComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    didSuspend = 0 !== (workInProgress.flags & 128);\n  workInProgress.flags &= -129;\n  if (null === current) {\n    if (isHydrating) {\n      if (\"hidden\" === nextProps.mode)\n        return (\n          (current = mountActivityChildren(workInProgress, nextProps)),\n          (workInProgress.lanes = 536870912),\n          bailoutOffscreenComponent(null, current)\n        );\n      pushDehydratedActivitySuspenseHandler(workInProgress);\n      (current = nextHydratableInstance)\n        ? ((current = canHydrateHydrationBoundary(\n            current,\n            rootOrSingletonContext\n          )),\n          (current = null !== current && \"&\" === current.data ? current : null),\n          null !== current &&\n            ((workInProgress.memoizedState = {\n              dehydrated: current,\n              treeContext:\n                null !== treeContextProvider\n                  ? { id: treeContextId, overflow: treeContextOverflow }\n                  : null,\n              retryLane: 536870912,\n              hydrationErrors: null\n            }),\n            (renderLanes = createFiberFromDehydratedFragment(current)),\n            (renderLanes.return = workInProgress),\n            (workInProgress.child = renderLanes),\n            (hydrationParentFiber = workInProgress),\n            (nextHydratableInstance = null)))\n        : (current = null);\n      if (null === current) throw throwOnHydrationMismatch(workInProgress);\n      workInProgress.lanes = 536870912;\n      return null;\n    }\n    return mountActivityChildren(workInProgress, nextProps);\n  }\n  var prevState = current.memoizedState;\n  if (null !== prevState) {\n    var dehydrated = prevState.dehydrated;\n    pushDehydratedActivitySuspenseHandler(workInProgress);\n    if (didSuspend)\n      if (workInProgress.flags & 256)\n        (workInProgress.flags &= -257),\n          (workInProgress = retryActivityComponentWithoutHydrating(\n            current,\n            workInProgress,\n            renderLanes\n          ));\n      else if (null !== workInProgress.memoizedState)\n        (workInProgress.child = current.child),\n          (workInProgress.flags |= 128),\n          (workInProgress = null);\n      else throw Error(formatProdErrorMessage(558));\n    else if (\n      (didReceiveUpdate ||\n        propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n      (didSuspend = 0 !== (renderLanes & current.childLanes)),\n      didReceiveUpdate || didSuspend)\n    ) {\n      nextProps = workInProgressRoot;\n      if (\n        null !== nextProps &&\n        ((dehydrated = getBumpedLaneForHydration(nextProps, renderLanes)),\n        0 !== dehydrated && dehydrated !== prevState.retryLane)\n      )\n        throw (\n          ((prevState.retryLane = dehydrated),\n          enqueueConcurrentRenderForLane(current, dehydrated),\n          scheduleUpdateOnFiber(nextProps, current, dehydrated),\n          SelectiveHydrationException)\n        );\n      renderDidSuspendDelayIfPossible();\n      workInProgress = retryActivityComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else\n      (current = prevState.treeContext),\n        (nextHydratableInstance = getNextHydratable(dehydrated.nextSibling)),\n        (hydrationParentFiber = workInProgress),\n        (isHydrating = !0),\n        (hydrationErrors = null),\n        (rootOrSingletonContext = !1),\n        null !== current &&\n          restoreSuspendedTreeContext(workInProgress, current),\n        (workInProgress = mountActivityChildren(workInProgress, nextProps)),\n        (workInProgress.flags |= 4096);\n    return workInProgress;\n  }\n  current = createWorkInProgress(current.child, {\n    mode: nextProps.mode,\n    children: nextProps.children\n  });\n  current.ref = workInProgress.ref;\n  workInProgress.child = current;\n  current.return = workInProgress;\n  return current;\n}\nfunction markRef(current, workInProgress) {\n  var ref = workInProgress.ref;\n  if (null === ref)\n    null !== current &&\n      null !== current.ref &&\n      (workInProgress.flags |= 4194816);\n  else {\n    if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n      throw Error(formatProdErrorMessage(284));\n    if (null === current || current.ref !== ref)\n      workInProgress.flags |= 4194816;\n  }\n}\nfunction updateFunctionComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  Component = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    void 0,\n    renderLanes\n  );\n  nextProps = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, Component, renderLanes);\n  return workInProgress.child;\n}\nfunction replayFunctionComponent(\n  current,\n  workInProgress,\n  nextProps,\n  Component,\n  secondArg,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  workInProgress.updateQueue = null;\n  nextProps = renderWithHooksAgain(\n    workInProgress,\n    Component,\n    nextProps,\n    secondArg\n  );\n  finishRenderingHooks(current);\n  Component = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && Component && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateClassComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  if (null === workInProgress.stateNode) {\n    var context = emptyContextObject,\n      contextType = Component.contextType;\n    \"object\" === typeof contextType &&\n      null !== contextType &&\n      (context = readContext(contextType));\n    context = new Component(nextProps, context);\n    workInProgress.memoizedState =\n      null !== context.state && void 0 !== context.state ? context.state : null;\n    context.updater = classComponentUpdater;\n    workInProgress.stateNode = context;\n    context._reactInternals = workInProgress;\n    context = workInProgress.stateNode;\n    context.props = nextProps;\n    context.state = workInProgress.memoizedState;\n    context.refs = {};\n    initializeUpdateQueue(workInProgress);\n    contextType = Component.contextType;\n    context.context =\n      \"object\" === typeof contextType && null !== contextType\n        ? readContext(contextType)\n        : emptyContextObject;\n    context.state = workInProgress.memoizedState;\n    contextType = Component.getDerivedStateFromProps;\n    \"function\" === typeof contextType &&\n      (applyDerivedStateFromProps(\n        workInProgress,\n        Component,\n        contextType,\n        nextProps\n      ),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof Component.getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate ||\n      (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n        \"function\" !== typeof context.componentWillMount) ||\n      ((contextType = context.state),\n      \"function\" === typeof context.componentWillMount &&\n        context.componentWillMount(),\n      \"function\" === typeof context.UNSAFE_componentWillMount &&\n        context.UNSAFE_componentWillMount(),\n      contextType !== context.state &&\n        classComponentUpdater.enqueueReplaceState(context, context.state, null),\n      processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n      suspendIfUpdateReadFromEntangledAsyncAction(),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof context.componentDidMount &&\n      (workInProgress.flags |= 4194308);\n    nextProps = !0;\n  } else if (null === current) {\n    context = workInProgress.stateNode;\n    var unresolvedOldProps = workInProgress.memoizedProps,\n      oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n    context.props = oldProps;\n    var oldContext = context.context,\n      contextType$jscomp$0 = Component.contextType;\n    contextType = emptyContextObject;\n    \"object\" === typeof contextType$jscomp$0 &&\n      null !== contextType$jscomp$0 &&\n      (contextType = readContext(contextType$jscomp$0));\n    var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n    contextType$jscomp$0 =\n      \"function\" === typeof getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate;\n    unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n    contextType$jscomp$0 ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((unresolvedOldProps || oldContext !== contextType) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          contextType\n        ));\n    hasForceUpdate = !1;\n    var oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    oldContext = workInProgress.memoizedState;\n    unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n      ? (\"function\" === typeof getDerivedStateFromProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            getDerivedStateFromProps,\n            nextProps\n          ),\n          (oldContext = workInProgress.memoizedState)),\n        (oldProps =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            oldProps,\n            nextProps,\n            oldState,\n            oldContext,\n            contextType\n          ))\n          ? (contextType$jscomp$0 ||\n              (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n                \"function\" !== typeof context.componentWillMount) ||\n              (\"function\" === typeof context.componentWillMount &&\n                context.componentWillMount(),\n              \"function\" === typeof context.UNSAFE_componentWillMount &&\n                context.UNSAFE_componentWillMount()),\n            \"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308))\n          : (\"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = oldContext)),\n        (context.props = nextProps),\n        (context.state = oldContext),\n        (context.context = contextType),\n        (nextProps = oldProps))\n      : (\"function\" === typeof context.componentDidMount &&\n          (workInProgress.flags |= 4194308),\n        (nextProps = !1));\n  } else {\n    context = workInProgress.stateNode;\n    cloneUpdateQueue(current, workInProgress);\n    contextType = workInProgress.memoizedProps;\n    contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n    context.props = contextType$jscomp$0;\n    getDerivedStateFromProps = workInProgress.pendingProps;\n    oldState = context.context;\n    oldContext = Component.contextType;\n    oldProps = emptyContextObject;\n    \"object\" === typeof oldContext &&\n      null !== oldContext &&\n      (oldProps = readContext(oldContext));\n    unresolvedOldProps = Component.getDerivedStateFromProps;\n    (oldContext =\n      \"function\" === typeof unresolvedOldProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          oldProps\n        ));\n    hasForceUpdate = !1;\n    oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    var newState = workInProgress.memoizedState;\n    contextType !== getDerivedStateFromProps ||\n    oldState !== newState ||\n    hasForceUpdate ||\n    (null !== current &&\n      null !== current.dependencies &&\n      checkIfContextChanged(current.dependencies))\n      ? (\"function\" === typeof unresolvedOldProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            unresolvedOldProps,\n            nextProps\n          ),\n          (newState = workInProgress.memoizedState)),\n        (contextType$jscomp$0 =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            contextType$jscomp$0,\n            nextProps,\n            oldState,\n            newState,\n            oldProps\n          ) ||\n          (null !== current &&\n            null !== current.dependencies &&\n            checkIfContextChanged(current.dependencies)))\n          ? (oldContext ||\n              (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n                \"function\" !== typeof context.componentWillUpdate) ||\n              (\"function\" === typeof context.componentWillUpdate &&\n                context.componentWillUpdate(nextProps, newState, oldProps),\n              \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n                context.UNSAFE_componentWillUpdate(\n                  nextProps,\n                  newState,\n                  oldProps\n                )),\n            \"function\" === typeof context.componentDidUpdate &&\n              (workInProgress.flags |= 4),\n            \"function\" === typeof context.getSnapshotBeforeUpdate &&\n              (workInProgress.flags |= 1024))\n          : (\"function\" !== typeof context.componentDidUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 4),\n            \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 1024),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = newState)),\n        (context.props = nextProps),\n        (context.state = newState),\n        (context.context = oldProps),\n        (nextProps = contextType$jscomp$0))\n      : (\"function\" !== typeof context.componentDidUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 4),\n        \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 1024),\n        (nextProps = !1));\n  }\n  context = nextProps;\n  markRef(current, workInProgress);\n  nextProps = 0 !== (workInProgress.flags & 128);\n  context || nextProps\n    ? ((context = workInProgress.stateNode),\n      (Component =\n        nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n          ? null\n          : context.render()),\n      (workInProgress.flags |= 1),\n      null !== current && nextProps\n        ? ((workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            current.child,\n            null,\n            renderLanes\n          )),\n          (workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            null,\n            Component,\n            renderLanes\n          )))\n        : reconcileChildren(current, workInProgress, Component, renderLanes),\n      (workInProgress.memoizedState = context.state),\n      (current = workInProgress.child))\n    : (current = bailoutOnAlreadyFinishedWork(\n        current,\n        workInProgress,\n        renderLanes\n      ));\n  return current;\n}\nfunction mountHostRootWithoutHydrating(\n  current,\n  workInProgress,\n  nextChildren,\n  renderLanes\n) {\n  resetHydrationState();\n  workInProgress.flags |= 256;\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n  dehydrated: null,\n  treeContext: null,\n  retryLane: 0,\n  hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n  return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n  current,\n  primaryTreeDidDefer,\n  renderLanes\n) {\n  current = null !== current ? current.childLanes & ~renderLanes : 0;\n  primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n  return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    showFallback = !1,\n    didSuspend = 0 !== (workInProgress.flags & 128),\n    JSCompiler_temp;\n  (JSCompiler_temp = didSuspend) ||\n    (JSCompiler_temp =\n      null !== current && null === current.memoizedState\n        ? !1\n        : 0 !== (suspenseStackCursor.current & 2));\n  JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n  JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n  workInProgress.flags &= -33;\n  if (null === current) {\n    if (isHydrating) {\n      showFallback\n        ? pushPrimaryTreeSuspenseHandler(workInProgress)\n        : reuseSuspenseHandlerOnStack(workInProgress);\n      (current = nextHydratableInstance)\n        ? ((current = canHydrateHydrationBoundary(\n            current,\n            rootOrSingletonContext\n          )),\n          (current = null !== current && \"&\" !== current.data ? current : null),\n          null !== current &&\n            ((workInProgress.memoizedState = {\n              dehydrated: current,\n              treeContext:\n                null !== treeContextProvider\n                  ? { id: treeContextId, overflow: treeContextOverflow }\n                  : null,\n              retryLane: 536870912,\n              hydrationErrors: null\n            }),\n            (renderLanes = createFiberFromDehydratedFragment(current)),\n            (renderLanes.return = workInProgress),\n            (workInProgress.child = renderLanes),\n            (hydrationParentFiber = workInProgress),\n            (nextHydratableInstance = null)))\n        : (current = null);\n      if (null === current) throw throwOnHydrationMismatch(workInProgress);\n      isSuspenseInstanceFallback(current)\n        ? (workInProgress.lanes = 32)\n        : (workInProgress.lanes = 536870912);\n      return null;\n    }\n    var nextPrimaryChildren = nextProps.children;\n    nextProps = nextProps.fallback;\n    if (showFallback)\n      return (\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (showFallback = workInProgress.mode),\n        (nextPrimaryChildren = mountWorkInProgressOffscreenFiber(\n          { mode: \"hidden\", children: nextPrimaryChildren },\n          showFallback\n        )),\n        (nextProps = createFiberFromFragment(\n          nextProps,\n          showFallback,\n          renderLanes,\n          null\n        )),\n        (nextPrimaryChildren.return = workInProgress),\n        (nextProps.return = workInProgress),\n        (nextPrimaryChildren.sibling = nextProps),\n        (workInProgress.child = nextPrimaryChildren),\n        (nextProps = workInProgress.child),\n        (nextProps.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n        (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n          current,\n          JSCompiler_temp,\n          renderLanes\n        )),\n        (workInProgress.memoizedState = SUSPENDED_MARKER),\n        bailoutOffscreenComponent(null, nextProps)\n      );\n    pushPrimaryTreeSuspenseHandler(workInProgress);\n    return mountSuspensePrimaryChildren(workInProgress, nextPrimaryChildren);\n  }\n  var prevState = current.memoizedState;\n  if (\n    null !== prevState &&\n    ((nextPrimaryChildren = prevState.dehydrated), null !== nextPrimaryChildren)\n  ) {\n    if (didSuspend)\n      workInProgress.flags & 256\n        ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n          (workInProgress.flags &= -257),\n          (workInProgress = retrySuspenseComponentWithoutHydrating(\n            current,\n            workInProgress,\n            renderLanes\n          )))\n        : null !== workInProgress.memoizedState\n          ? (reuseSuspenseHandlerOnStack(workInProgress),\n            (workInProgress.child = current.child),\n            (workInProgress.flags |= 128),\n            (workInProgress = null))\n          : (reuseSuspenseHandlerOnStack(workInProgress),\n            (nextPrimaryChildren = nextProps.fallback),\n            (showFallback = workInProgress.mode),\n            (nextProps = mountWorkInProgressOffscreenFiber(\n              { mode: \"visible\", children: nextProps.children },\n              showFallback\n            )),\n            (nextPrimaryChildren = createFiberFromFragment(\n              nextPrimaryChildren,\n              showFallback,\n              renderLanes,\n              null\n            )),\n            (nextPrimaryChildren.flags |= 2),\n            (nextProps.return = workInProgress),\n            (nextPrimaryChildren.return = workInProgress),\n            (nextProps.sibling = nextPrimaryChildren),\n            (workInProgress.child = nextProps),\n            reconcileChildFibers(\n              workInProgress,\n              current.child,\n              null,\n              renderLanes\n            ),\n            (nextProps = workInProgress.child),\n            (nextProps.memoizedState =\n              mountSuspenseOffscreenState(renderLanes)),\n            (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n              current,\n              JSCompiler_temp,\n              renderLanes\n            )),\n            (workInProgress.memoizedState = SUSPENDED_MARKER),\n            (workInProgress = bailoutOffscreenComponent(null, nextProps)));\n    else if (\n      (pushPrimaryTreeSuspenseHandler(workInProgress),\n      isSuspenseInstanceFallback(nextPrimaryChildren))\n    ) {\n      JSCompiler_temp =\n        nextPrimaryChildren.nextSibling &&\n        nextPrimaryChildren.nextSibling.dataset;\n      if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;\n      JSCompiler_temp = digest;\n      nextProps = Error(formatProdErrorMessage(419));\n      nextProps.stack = \"\";\n      nextProps.digest = JSCompiler_temp;\n      queueHydrationError({ value: nextProps, source: null, stack: null });\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else if (\n      (didReceiveUpdate ||\n        propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n      (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),\n      didReceiveUpdate || JSCompiler_temp)\n    ) {\n      JSCompiler_temp = workInProgressRoot;\n      if (\n        null !== JSCompiler_temp &&\n        ((nextProps = getBumpedLaneForHydration(JSCompiler_temp, renderLanes)),\n        0 !== nextProps && nextProps !== prevState.retryLane)\n      )\n        throw (\n          ((prevState.retryLane = nextProps),\n          enqueueConcurrentRenderForLane(current, nextProps),\n          scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),\n          SelectiveHydrationException)\n        );\n      isSuspenseInstancePending(nextPrimaryChildren) ||\n        renderDidSuspendDelayIfPossible();\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else\n      isSuspenseInstancePending(nextPrimaryChildren)\n        ? ((workInProgress.flags |= 192),\n          (workInProgress.child = current.child),\n          (workInProgress = null))\n        : ((current = prevState.treeContext),\n          (nextHydratableInstance = getNextHydratable(\n            nextPrimaryChildren.nextSibling\n          )),\n          (hydrationParentFiber = workInProgress),\n          (isHydrating = !0),\n          (hydrationErrors = null),\n          (rootOrSingletonContext = !1),\n          null !== current &&\n            restoreSuspendedTreeContext(workInProgress, current),\n          (workInProgress = mountSuspensePrimaryChildren(\n            workInProgress,\n            nextProps.children\n          )),\n          (workInProgress.flags |= 4096));\n    return workInProgress;\n  }\n  if (showFallback)\n    return (\n      reuseSuspenseHandlerOnStack(workInProgress),\n      (nextPrimaryChildren = nextProps.fallback),\n      (showFallback = workInProgress.mode),\n      (prevState = current.child),\n      (digest = prevState.sibling),\n      (nextProps = createWorkInProgress(prevState, {\n        mode: \"hidden\",\n        children: nextProps.children\n      })),\n      (nextProps.subtreeFlags = prevState.subtreeFlags & 65011712),\n      null !== digest\n        ? (nextPrimaryChildren = createWorkInProgress(\n            digest,\n            nextPrimaryChildren\n          ))\n        : ((nextPrimaryChildren = createFiberFromFragment(\n            nextPrimaryChildren,\n            showFallback,\n            renderLanes,\n            null\n          )),\n          (nextPrimaryChildren.flags |= 2)),\n      (nextPrimaryChildren.return = workInProgress),\n      (nextProps.return = workInProgress),\n      (nextProps.sibling = nextPrimaryChildren),\n      (workInProgress.child = nextProps),\n      bailoutOffscreenComponent(null, nextProps),\n      (nextProps = workInProgress.child),\n      (nextPrimaryChildren = current.child.memoizedState),\n      null === nextPrimaryChildren\n        ? (nextPrimaryChildren = mountSuspenseOffscreenState(renderLanes))\n        : ((showFallback = nextPrimaryChildren.cachePool),\n          null !== showFallback\n            ? ((prevState = CacheContext._currentValue),\n              (showFallback =\n                showFallback.parent !== prevState\n                  ? { parent: prevState, pool: prevState }\n                  : showFallback))\n            : (showFallback = getSuspendedCache()),\n          (nextPrimaryChildren = {\n            baseLanes: nextPrimaryChildren.baseLanes | renderLanes,\n            cachePool: showFallback\n          })),\n      (nextProps.memoizedState = nextPrimaryChildren),\n      (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n        current,\n        JSCompiler_temp,\n        renderLanes\n      )),\n      (workInProgress.memoizedState = SUSPENDED_MARKER),\n      bailoutOffscreenComponent(current.child, nextProps)\n    );\n  pushPrimaryTreeSuspenseHandler(workInProgress);\n  renderLanes = current.child;\n  current = renderLanes.sibling;\n  renderLanes = createWorkInProgress(renderLanes, {\n    mode: \"visible\",\n    children: nextProps.children\n  });\n  renderLanes.return = workInProgress;\n  renderLanes.sibling = null;\n  null !== current &&\n    ((JSCompiler_temp = workInProgress.deletions),\n    null === JSCompiler_temp\n      ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n      : JSCompiler_temp.push(current));\n  workInProgress.child = renderLanes;\n  workInProgress.memoizedState = null;\n  return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n  primaryChildren = mountWorkInProgressOffscreenFiber(\n    { mode: \"visible\", children: primaryChildren },\n    workInProgress.mode\n  );\n  primaryChildren.return = workInProgress;\n  return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n  offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n  offscreenProps.lanes = 0;\n  return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n  current = mountSuspensePrimaryChildren(\n    workInProgress,\n    workInProgress.pendingProps.children\n  );\n  current.flags |= 2;\n  workInProgress.memoizedState = null;\n  return current;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n  fiber.lanes |= renderLanes;\n  var alternate = fiber.alternate;\n  null !== alternate && (alternate.lanes |= renderLanes);\n  scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction initSuspenseListRenderState(\n  workInProgress,\n  isBackwards,\n  tail,\n  lastContentRow,\n  tailMode,\n  treeForkCount\n) {\n  var renderState = workInProgress.memoizedState;\n  null === renderState\n    ? (workInProgress.memoizedState = {\n        isBackwards: isBackwards,\n        rendering: null,\n        renderingStartTime: 0,\n        last: lastContentRow,\n        tail: tail,\n        tailMode: tailMode,\n        treeForkCount: treeForkCount\n      })\n    : ((renderState.isBackwards = isBackwards),\n      (renderState.rendering = null),\n      (renderState.renderingStartTime = 0),\n      (renderState.last = lastContentRow),\n      (renderState.tail = tail),\n      (renderState.tailMode = tailMode),\n      (renderState.treeForkCount = treeForkCount));\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    revealOrder = nextProps.revealOrder,\n    tailMode = nextProps.tail;\n  nextProps = nextProps.children;\n  var suspenseContext = suspenseStackCursor.current,\n    shouldForceFallback = 0 !== (suspenseContext & 2);\n  shouldForceFallback\n    ? ((suspenseContext = (suspenseContext & 1) | 2),\n      (workInProgress.flags |= 128))\n    : (suspenseContext &= 1);\n  push(suspenseStackCursor, suspenseContext);\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  nextProps = isHydrating ? treeForkCount : 0;\n  if (!shouldForceFallback && null !== current && 0 !== (current.flags & 128))\n    a: for (current = workInProgress.child; null !== current; ) {\n      if (13 === current.tag)\n        null !== current.memoizedState &&\n          scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n      else if (19 === current.tag)\n        scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n      else if (null !== current.child) {\n        current.child.return = current;\n        current = current.child;\n        continue;\n      }\n      if (current === workInProgress) break a;\n      for (; null === current.sibling; ) {\n        if (null === current.return || current.return === workInProgress)\n          break a;\n        current = current.return;\n      }\n      current.sibling.return = current.return;\n      current = current.sibling;\n    }\n  switch (revealOrder) {\n    case \"forwards\":\n      renderLanes = workInProgress.child;\n      for (revealOrder = null; null !== renderLanes; )\n        (current = renderLanes.alternate),\n          null !== current &&\n            null === findFirstSuspended(current) &&\n            (revealOrder = renderLanes),\n          (renderLanes = renderLanes.sibling);\n      renderLanes = revealOrder;\n      null === renderLanes\n        ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n        : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));\n      initSuspenseListRenderState(\n        workInProgress,\n        !1,\n        revealOrder,\n        renderLanes,\n        tailMode,\n        nextProps\n      );\n      break;\n    case \"backwards\":\n    case \"unstable_legacy-backwards\":\n      renderLanes = null;\n      revealOrder = workInProgress.child;\n      for (workInProgress.child = null; null !== revealOrder; ) {\n        current = revealOrder.alternate;\n        if (null !== current && null === findFirstSuspended(current)) {\n          workInProgress.child = revealOrder;\n          break;\n        }\n        current = revealOrder.sibling;\n        revealOrder.sibling = renderLanes;\n        renderLanes = revealOrder;\n        revealOrder = current;\n      }\n      initSuspenseListRenderState(\n        workInProgress,\n        !0,\n        renderLanes,\n        null,\n        tailMode,\n        nextProps\n      );\n      break;\n    case \"together\":\n      initSuspenseListRenderState(\n        workInProgress,\n        !1,\n        null,\n        null,\n        void 0,\n        nextProps\n      );\n      break;\n    default:\n      workInProgress.memoizedState = null;\n  }\n  return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n  null !== current && (workInProgress.dependencies = current.dependencies);\n  workInProgressRootSkippedLanes |= workInProgress.lanes;\n  if (0 === (renderLanes & workInProgress.childLanes))\n    if (null !== current) {\n      if (\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        0 === (renderLanes & workInProgress.childLanes))\n      )\n        return null;\n    } else return null;\n  if (null !== current && workInProgress.child !== current.child)\n    throw Error(formatProdErrorMessage(153));\n  if (null !== workInProgress.child) {\n    current = workInProgress.child;\n    renderLanes = createWorkInProgress(current, current.pendingProps);\n    workInProgress.child = renderLanes;\n    for (renderLanes.return = workInProgress; null !== current.sibling; )\n      (current = current.sibling),\n        (renderLanes = renderLanes.sibling =\n          createWorkInProgress(current, current.pendingProps)),\n        (renderLanes.return = workInProgress);\n    renderLanes.sibling = null;\n  }\n  return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n  if (0 !== (current.lanes & renderLanes)) return !0;\n  current = current.dependencies;\n  return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  switch (workInProgress.tag) {\n    case 3:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n      resetHydrationState();\n      break;\n    case 27:\n    case 5:\n      pushHostContext(workInProgress);\n      break;\n    case 4:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      break;\n    case 10:\n      pushProvider(\n        workInProgress,\n        workInProgress.type,\n        workInProgress.memoizedProps.value\n      );\n      break;\n    case 31:\n      if (null !== workInProgress.memoizedState)\n        return (\n          (workInProgress.flags |= 128),\n          pushDehydratedActivitySuspenseHandler(workInProgress),\n          null\n        );\n      break;\n    case 13:\n      var state$102 = workInProgress.memoizedState;\n      if (null !== state$102) {\n        if (null !== state$102.dehydrated)\n          return (\n            pushPrimaryTreeSuspenseHandler(workInProgress),\n            (workInProgress.flags |= 128),\n            null\n          );\n        if (0 !== (renderLanes & workInProgress.child.childLanes))\n          return updateSuspenseComponent(current, workInProgress, renderLanes);\n        pushPrimaryTreeSuspenseHandler(workInProgress);\n        current = bailoutOnAlreadyFinishedWork(\n          current,\n          workInProgress,\n          renderLanes\n        );\n        return null !== current ? current.sibling : null;\n      }\n      pushPrimaryTreeSuspenseHandler(workInProgress);\n      break;\n    case 19:\n      var didSuspendBefore = 0 !== (current.flags & 128);\n      state$102 = 0 !== (renderLanes & workInProgress.childLanes);\n      state$102 ||\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        (state$102 = 0 !== (renderLanes & workInProgress.childLanes)));\n      if (didSuspendBefore) {\n        if (state$102)\n          return updateSuspenseListComponent(\n            current,\n            workInProgress,\n            renderLanes\n          );\n        workInProgress.flags |= 128;\n      }\n      didSuspendBefore = workInProgress.memoizedState;\n      null !== didSuspendBefore &&\n        ((didSuspendBefore.rendering = null),\n        (didSuspendBefore.tail = null),\n        (didSuspendBefore.lastEffect = null));\n      push(suspenseStackCursor, suspenseStackCursor.current);\n      if (state$102) break;\n      else return null;\n    case 22:\n      return (\n        (workInProgress.lanes = 0),\n        updateOffscreenComponent(\n          current,\n          workInProgress,\n          renderLanes,\n          workInProgress.pendingProps\n        )\n      );\n    case 24:\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n  }\n  return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n  if (null !== current)\n    if (current.memoizedProps !== workInProgress.pendingProps)\n      didReceiveUpdate = !0;\n    else {\n      if (\n        !checkScheduledUpdateOrContext(current, renderLanes) &&\n        0 === (workInProgress.flags & 128)\n      )\n        return (\n          (didReceiveUpdate = !1),\n          attemptEarlyBailoutIfNoScheduledUpdate(\n            current,\n            workInProgress,\n            renderLanes\n          )\n        );\n      didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n    }\n  else\n    (didReceiveUpdate = !1),\n      isHydrating &&\n        0 !== (workInProgress.flags & 1048576) &&\n        pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n  workInProgress.lanes = 0;\n  switch (workInProgress.tag) {\n    case 16:\n      a: {\n        var props = workInProgress.pendingProps;\n        current = resolveLazy(workInProgress.elementType);\n        workInProgress.type = current;\n        if (\"function\" === typeof current)\n          shouldConstruct(current)\n            ? ((props = resolveClassComponentProps(current, props)),\n              (workInProgress.tag = 1),\n              (workInProgress = updateClassComponent(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              )))\n            : ((workInProgress.tag = 0),\n              (workInProgress = updateFunctionComponent(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              )));\n        else {\n          if (void 0 !== current && null !== current) {\n            var $$typeof = current.$$typeof;\n            if ($$typeof === REACT_FORWARD_REF_TYPE) {\n              workInProgress.tag = 11;\n              workInProgress = updateForwardRef(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              );\n              break a;\n            } else if ($$typeof === REACT_MEMO_TYPE) {\n              workInProgress.tag = 14;\n              workInProgress = updateMemoComponent(\n                null,\n                workInProgress,\n                current,\n                props,\n                renderLanes\n              );\n              break a;\n            }\n          }\n          workInProgress = getComponentNameFromType(current) || current;\n          throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n        }\n      }\n      return workInProgress;\n    case 0:\n      return updateFunctionComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 1:\n      return (\n        (props = workInProgress.type),\n        ($$typeof = resolveClassComponentProps(\n          props,\n          workInProgress.pendingProps\n        )),\n        updateClassComponent(\n          current,\n          workInProgress,\n          props,\n          $$typeof,\n          renderLanes\n        )\n      );\n    case 3:\n      a: {\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        );\n        if (null === current) throw Error(formatProdErrorMessage(387));\n        props = workInProgress.pendingProps;\n        var prevState = workInProgress.memoizedState;\n        $$typeof = prevState.element;\n        cloneUpdateQueue(current, workInProgress);\n        processUpdateQueue(workInProgress, props, null, renderLanes);\n        var nextState = workInProgress.memoizedState;\n        props = nextState.cache;\n        pushProvider(workInProgress, CacheContext, props);\n        props !== prevState.cache &&\n          propagateContextChanges(\n            workInProgress,\n            [CacheContext],\n            renderLanes,\n            !0\n          );\n        suspendIfUpdateReadFromEntangledAsyncAction();\n        props = nextState.element;\n        if (prevState.isDehydrated)\n          if (\n            ((prevState = {\n              element: props,\n              isDehydrated: !1,\n              cache: nextState.cache\n            }),\n            (workInProgress.updateQueue.baseState = prevState),\n            (workInProgress.memoizedState = prevState),\n            workInProgress.flags & 256)\n          ) {\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              props,\n              renderLanes\n            );\n            break a;\n          } else if (props !== $$typeof) {\n            $$typeof = createCapturedValueAtFiber(\n              Error(formatProdErrorMessage(424)),\n              workInProgress\n            );\n            queueHydrationError($$typeof);\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              props,\n              renderLanes\n            );\n            break a;\n          } else {\n            current = workInProgress.stateNode.containerInfo;\n            switch (current.nodeType) {\n              case 9:\n                current = current.body;\n                break;\n              default:\n                current =\n                  \"HTML\" === current.nodeName\n                    ? current.ownerDocument.body\n                    : current;\n            }\n            nextHydratableInstance = getNextHydratable(current.firstChild);\n            hydrationParentFiber = workInProgress;\n            isHydrating = !0;\n            hydrationErrors = null;\n            rootOrSingletonContext = !0;\n            renderLanes = mountChildFibers(\n              workInProgress,\n              null,\n              props,\n              renderLanes\n            );\n            for (workInProgress.child = renderLanes; renderLanes; )\n              (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n                (renderLanes = renderLanes.sibling);\n          }\n        else {\n          resetHydrationState();\n          if (props === $$typeof) {\n            workInProgress = bailoutOnAlreadyFinishedWork(\n              current,\n              workInProgress,\n              renderLanes\n            );\n            break a;\n          }\n          reconcileChildren(current, workInProgress, props, renderLanes);\n        }\n        workInProgress = workInProgress.child;\n      }\n      return workInProgress;\n    case 26:\n      return (\n        markRef(current, workInProgress),\n        null === current\n          ? (renderLanes = getResource(\n              workInProgress.type,\n              null,\n              workInProgress.pendingProps,\n              null\n            ))\n            ? (workInProgress.memoizedState = renderLanes)\n            : isHydrating ||\n              ((renderLanes = workInProgress.type),\n              (current = workInProgress.pendingProps),\n              (props = getOwnerDocumentFromRootContainer(\n                rootInstanceStackCursor.current\n              ).createElement(renderLanes)),\n              (props[internalInstanceKey] = workInProgress),\n              (props[internalPropsKey] = current),\n              setInitialProperties(props, renderLanes, current),\n              markNodeAsHoistable(props),\n              (workInProgress.stateNode = props))\n          : (workInProgress.memoizedState = getResource(\n              workInProgress.type,\n              current.memoizedProps,\n              workInProgress.pendingProps,\n              current.memoizedState\n            )),\n        null\n      );\n    case 27:\n      return (\n        pushHostContext(workInProgress),\n        null === current &&\n          isHydrating &&\n          ((props = workInProgress.stateNode =\n            resolveSingletonInstance(\n              workInProgress.type,\n              workInProgress.pendingProps,\n              rootInstanceStackCursor.current\n            )),\n          (hydrationParentFiber = workInProgress),\n          (rootOrSingletonContext = !0),\n          ($$typeof = nextHydratableInstance),\n          isSingletonScope(workInProgress.type)\n            ? ((previousHydratableOnEnteringScopedSingleton = $$typeof),\n              (nextHydratableInstance = getNextHydratable(props.firstChild)))\n            : (nextHydratableInstance = $$typeof)),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        markRef(current, workInProgress),\n        null === current && (workInProgress.flags |= 4194304),\n        workInProgress.child\n      );\n    case 5:\n      if (null === current && isHydrating) {\n        if (($$typeof = props = nextHydratableInstance))\n          (props = canHydrateInstance(\n            props,\n            workInProgress.type,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== props\n              ? ((workInProgress.stateNode = props),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = getNextHydratable(props.firstChild)),\n                (rootOrSingletonContext = !1),\n                ($$typeof = !0))\n              : ($$typeof = !1);\n        $$typeof || throwOnHydrationMismatch(workInProgress);\n      }\n      pushHostContext(workInProgress);\n      $$typeof = workInProgress.type;\n      prevState = workInProgress.pendingProps;\n      nextState = null !== current ? current.memoizedProps : null;\n      props = prevState.children;\n      shouldSetTextContent($$typeof, prevState)\n        ? (props = null)\n        : null !== nextState &&\n          shouldSetTextContent($$typeof, nextState) &&\n          (workInProgress.flags |= 32);\n      null !== workInProgress.memoizedState &&\n        (($$typeof = renderWithHooks(\n          current,\n          workInProgress,\n          TransitionAwareHostComponent,\n          null,\n          null,\n          renderLanes\n        )),\n        (HostTransitionContext._currentValue = $$typeof));\n      markRef(current, workInProgress);\n      reconcileChildren(current, workInProgress, props, renderLanes);\n      return workInProgress.child;\n    case 6:\n      if (null === current && isHydrating) {\n        if ((current = renderLanes = nextHydratableInstance))\n          (renderLanes = canHydrateTextInstance(\n            renderLanes,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== renderLanes\n              ? ((workInProgress.stateNode = renderLanes),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = null),\n                (current = !0))\n              : (current = !1);\n        current || throwOnHydrationMismatch(workInProgress);\n      }\n      return null;\n    case 13:\n      return updateSuspenseComponent(current, workInProgress, renderLanes);\n    case 4:\n      return (\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        ),\n        (props = workInProgress.pendingProps),\n        null === current\n          ? (workInProgress.child = reconcileChildFibers(\n              workInProgress,\n              null,\n              props,\n              renderLanes\n            ))\n          : reconcileChildren(current, workInProgress, props, renderLanes),\n        workInProgress.child\n      );\n    case 11:\n      return updateForwardRef(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 7:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 8:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 12:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 10:\n      return (\n        (props = workInProgress.pendingProps),\n        pushProvider(workInProgress, workInProgress.type, props.value),\n        reconcileChildren(current, workInProgress, props.children, renderLanes),\n        workInProgress.child\n      );\n    case 9:\n      return (\n        ($$typeof = workInProgress.type._context),\n        (props = workInProgress.pendingProps.children),\n        prepareToReadContext(workInProgress),\n        ($$typeof = readContext($$typeof)),\n        (props = props($$typeof)),\n        (workInProgress.flags |= 1),\n        reconcileChildren(current, workInProgress, props, renderLanes),\n        workInProgress.child\n      );\n    case 14:\n      return updateMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 15:\n      return updateSimpleMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 19:\n      return updateSuspenseListComponent(current, workInProgress, renderLanes);\n    case 31:\n      return updateActivityComponent(current, workInProgress, renderLanes);\n    case 22:\n      return updateOffscreenComponent(\n        current,\n        workInProgress,\n        renderLanes,\n        workInProgress.pendingProps\n      );\n    case 24:\n      return (\n        prepareToReadContext(workInProgress),\n        (props = readContext(CacheContext)),\n        null === current\n          ? (($$typeof = peekCacheFromPool()),\n            null === $$typeof &&\n              (($$typeof = workInProgressRoot),\n              (prevState = createCache()),\n              ($$typeof.pooledCache = prevState),\n              prevState.refCount++,\n              null !== prevState && ($$typeof.pooledCacheLanes |= renderLanes),\n              ($$typeof = prevState)),\n            (workInProgress.memoizedState = { parent: props, cache: $$typeof }),\n            initializeUpdateQueue(workInProgress),\n            pushProvider(workInProgress, CacheContext, $$typeof))\n          : (0 !== (current.lanes & renderLanes) &&\n              (cloneUpdateQueue(current, workInProgress),\n              processUpdateQueue(workInProgress, null, null, renderLanes),\n              suspendIfUpdateReadFromEntangledAsyncAction()),\n            ($$typeof = current.memoizedState),\n            (prevState = workInProgress.memoizedState),\n            $$typeof.parent !== props\n              ? (($$typeof = { parent: props, cache: props }),\n                (workInProgress.memoizedState = $$typeof),\n                0 === workInProgress.lanes &&\n                  (workInProgress.memoizedState =\n                    workInProgress.updateQueue.baseState =\n                      $$typeof),\n                pushProvider(workInProgress, CacheContext, props))\n              : ((props = prevState.cache),\n                pushProvider(workInProgress, CacheContext, props),\n                props !== $$typeof.cache &&\n                  propagateContextChanges(\n                    workInProgress,\n                    [CacheContext],\n                    renderLanes,\n                    !0\n                  ))),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 29:\n      throw workInProgress.pendingProps;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n  workInProgress.flags |= 4;\n}\nfunction preloadInstanceAndSuspendIfNeeded(\n  workInProgress,\n  type,\n  oldProps,\n  newProps,\n  renderLanes\n) {\n  if ((type = 0 !== (workInProgress.mode & 32))) type = !1;\n  if (type) {\n    if (\n      ((workInProgress.flags |= 16777216),\n      (renderLanes & 335544128) === renderLanes)\n    )\n      if (workInProgress.stateNode.complete) workInProgress.flags |= 8192;\n      else if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n      else\n        throw (\n          ((suspendedThenable = noopSuspenseyCommitThenable),\n          SuspenseyCommitException)\n        );\n  } else workInProgress.flags &= -16777217;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n  if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n    workInProgress.flags &= -16777217;\n  else if (((workInProgress.flags |= 16777216), !preloadResource(resource)))\n    if (shouldRemainOnPreviousScreen()) workInProgress.flags |= 8192;\n    else\n      throw (\n        ((suspendedThenable = noopSuspenseyCommitThenable),\n        SuspenseyCommitException)\n      );\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n  null !== retryQueue && (workInProgress.flags |= 4);\n  workInProgress.flags & 16384 &&\n    ((retryQueue =\n      22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n    (workInProgress.lanes |= retryQueue),\n    (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n  if (!isHydrating)\n    switch (renderState.tailMode) {\n      case \"hidden\":\n        hasRenderedATailFallback = renderState.tail;\n        for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n          null !== hasRenderedATailFallback.alternate &&\n            (lastTailNode = hasRenderedATailFallback),\n            (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n        null === lastTailNode\n          ? (renderState.tail = null)\n          : (lastTailNode.sibling = null);\n        break;\n      case \"collapsed\":\n        lastTailNode = renderState.tail;\n        for (var lastTailNode$106 = null; null !== lastTailNode; )\n          null !== lastTailNode.alternate && (lastTailNode$106 = lastTailNode),\n            (lastTailNode = lastTailNode.sibling);\n        null === lastTailNode$106\n          ? hasRenderedATailFallback || null === renderState.tail\n            ? (renderState.tail = null)\n            : (renderState.tail.sibling = null)\n          : (lastTailNode$106.sibling = null);\n    }\n}\nfunction bubbleProperties(completedWork) {\n  var didBailout =\n      null !== completedWork.alternate &&\n      completedWork.alternate.child === completedWork.child,\n    newChildLanes = 0,\n    subtreeFlags = 0;\n  if (didBailout)\n    for (var child$107 = completedWork.child; null !== child$107; )\n      (newChildLanes |= child$107.lanes | child$107.childLanes),\n        (subtreeFlags |= child$107.subtreeFlags & 65011712),\n        (subtreeFlags |= child$107.flags & 65011712),\n        (child$107.return = completedWork),\n        (child$107 = child$107.sibling);\n  else\n    for (child$107 = completedWork.child; null !== child$107; )\n      (newChildLanes |= child$107.lanes | child$107.childLanes),\n        (subtreeFlags |= child$107.subtreeFlags),\n        (subtreeFlags |= child$107.flags),\n        (child$107.return = completedWork),\n        (child$107 = child$107.sibling);\n  completedWork.subtreeFlags |= subtreeFlags;\n  completedWork.childLanes = newChildLanes;\n  return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n  var newProps = workInProgress.pendingProps;\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 16:\n    case 15:\n    case 0:\n    case 11:\n    case 7:\n    case 8:\n    case 12:\n    case 9:\n    case 14:\n      return bubbleProperties(workInProgress), null;\n    case 1:\n      return bubbleProperties(workInProgress), null;\n    case 3:\n      renderLanes = workInProgress.stateNode;\n      newProps = null;\n      null !== current && (newProps = current.memoizedState.cache);\n      workInProgress.memoizedState.cache !== newProps &&\n        (workInProgress.flags |= 2048);\n      popProvider(CacheContext);\n      popHostContainer();\n      renderLanes.pendingContext &&\n        ((renderLanes.context = renderLanes.pendingContext),\n        (renderLanes.pendingContext = null));\n      if (null === current || null === current.child)\n        popHydrationState(workInProgress)\n          ? markUpdate(workInProgress)\n          : null === current ||\n            (current.memoizedState.isDehydrated &&\n              0 === (workInProgress.flags & 256)) ||\n            ((workInProgress.flags |= 1024),\n            upgradeHydrationErrorsToRecoverable());\n      bubbleProperties(workInProgress);\n      return null;\n    case 26:\n      var type = workInProgress.type,\n        nextResource = workInProgress.memoizedState;\n      null === current\n        ? (markUpdate(workInProgress),\n          null !== nextResource\n            ? (bubbleProperties(workInProgress),\n              preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n            : (bubbleProperties(workInProgress),\n              preloadInstanceAndSuspendIfNeeded(\n                workInProgress,\n                type,\n                null,\n                newProps,\n                renderLanes\n              )))\n        : nextResource\n          ? nextResource !== current.memoizedState\n            ? (markUpdate(workInProgress),\n              bubbleProperties(workInProgress),\n              preloadResourceAndSuspendIfNeeded(workInProgress, nextResource))\n            : (bubbleProperties(workInProgress),\n              (workInProgress.flags &= -16777217))\n          : ((current = current.memoizedProps),\n            current !== newProps && markUpdate(workInProgress),\n            bubbleProperties(workInProgress),\n            preloadInstanceAndSuspendIfNeeded(\n              workInProgress,\n              type,\n              current,\n              newProps,\n              renderLanes\n            ));\n      return null;\n    case 27:\n      popHostContext(workInProgress);\n      renderLanes = rootInstanceStackCursor.current;\n      type = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        current = contextStackCursor.current;\n        popHydrationState(workInProgress)\n          ? prepareToHydrateHostInstance(workInProgress, current)\n          : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n            (workInProgress.stateNode = current),\n            markUpdate(workInProgress));\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 5:\n      popHostContext(workInProgress);\n      type = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        nextResource = contextStackCursor.current;\n        if (popHydrationState(workInProgress))\n          prepareToHydrateHostInstance(workInProgress, nextResource);\n        else {\n          var ownerDocument = getOwnerDocumentFromRootContainer(\n            rootInstanceStackCursor.current\n          );\n          switch (nextResource) {\n            case 1:\n              nextResource = ownerDocument.createElementNS(\n                \"http://www.w3.org/2000/svg\",\n                type\n              );\n              break;\n            case 2:\n              nextResource = ownerDocument.createElementNS(\n                \"http://www.w3.org/1998/Math/MathML\",\n                type\n              );\n              break;\n            default:\n              switch (type) {\n                case \"svg\":\n                  nextResource = ownerDocument.createElementNS(\n                    \"http://www.w3.org/2000/svg\",\n                    type\n                  );\n                  break;\n                case \"math\":\n                  nextResource = ownerDocument.createElementNS(\n                    \"http://www.w3.org/1998/Math/MathML\",\n                    type\n                  );\n                  break;\n                case \"script\":\n                  nextResource = ownerDocument.createElement(\"div\");\n                  nextResource.innerHTML = \"<script>\\x3c/script>\";\n                  nextResource = nextResource.removeChild(\n                    nextResource.firstChild\n                  );\n                  break;\n                case \"select\":\n                  nextResource =\n                    \"string\" === typeof newProps.is\n                      ? ownerDocument.createElement(\"select\", {\n                          is: newProps.is\n                        })\n                      : ownerDocument.createElement(\"select\");\n                  newProps.multiple\n                    ? (nextResource.multiple = !0)\n                    : newProps.size && (nextResource.size = newProps.size);\n                  break;\n                default:\n                  nextResource =\n                    \"string\" === typeof newProps.is\n                      ? ownerDocument.createElement(type, { is: newProps.is })\n                      : ownerDocument.createElement(type);\n              }\n          }\n          nextResource[internalInstanceKey] = workInProgress;\n          nextResource[internalPropsKey] = newProps;\n          a: for (\n            ownerDocument = workInProgress.child;\n            null !== ownerDocument;\n\n          ) {\n            if (5 === ownerDocument.tag || 6 === ownerDocument.tag)\n              nextResource.appendChild(ownerDocument.stateNode);\n            else if (\n              4 !== ownerDocument.tag &&\n              27 !== ownerDocument.tag &&\n              null !== ownerDocument.child\n            ) {\n              ownerDocument.child.return = ownerDocument;\n              ownerDocument = ownerDocument.child;\n              continue;\n            }\n            if (ownerDocument === workInProgress) break a;\n            for (; null === ownerDocument.sibling; ) {\n              if (\n                null === ownerDocument.return ||\n                ownerDocument.return === workInProgress\n              )\n                break a;\n              ownerDocument = ownerDocument.return;\n            }\n            ownerDocument.sibling.return = ownerDocument.return;\n            ownerDocument = ownerDocument.sibling;\n          }\n          workInProgress.stateNode = nextResource;\n          a: switch (\n            (setInitialProperties(nextResource, type, newProps), type)\n          ) {\n            case \"button\":\n            case \"input\":\n            case \"select\":\n            case \"textarea\":\n              newProps = !!newProps.autoFocus;\n              break a;\n            case \"img\":\n              newProps = !0;\n              break a;\n            default:\n              newProps = !1;\n          }\n          newProps && markUpdate(workInProgress);\n        }\n      }\n      bubbleProperties(workInProgress);\n      preloadInstanceAndSuspendIfNeeded(\n        workInProgress,\n        workInProgress.type,\n        null === current ? null : current.memoizedProps,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n      return null;\n    case 6:\n      if (current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (\"string\" !== typeof newProps && null === workInProgress.stateNode)\n          throw Error(formatProdErrorMessage(166));\n        current = rootInstanceStackCursor.current;\n        if (popHydrationState(workInProgress)) {\n          current = workInProgress.stateNode;\n          renderLanes = workInProgress.memoizedProps;\n          newProps = null;\n          type = hydrationParentFiber;\n          if (null !== type)\n            switch (type.tag) {\n              case 27:\n              case 5:\n                newProps = type.memoizedProps;\n            }\n          current[internalInstanceKey] = workInProgress;\n          current =\n            current.nodeValue === renderLanes ||\n            (null !== newProps && !0 === newProps.suppressHydrationWarning) ||\n            checkForUnmatchedText(current.nodeValue, renderLanes)\n              ? !0\n              : !1;\n          current || throwOnHydrationMismatch(workInProgress, !0);\n        } else\n          (current =\n            getOwnerDocumentFromRootContainer(current).createTextNode(\n              newProps\n            )),\n            (current[internalInstanceKey] = workInProgress),\n            (workInProgress.stateNode = current);\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 31:\n      renderLanes = workInProgress.memoizedState;\n      if (null === current || null !== current.memoizedState) {\n        newProps = popHydrationState(workInProgress);\n        if (null !== renderLanes) {\n          if (null === current) {\n            if (!newProps) throw Error(formatProdErrorMessage(318));\n            current = workInProgress.memoizedState;\n            current = null !== current ? current.dehydrated : null;\n            if (!current) throw Error(formatProdErrorMessage(557));\n            current[internalInstanceKey] = workInProgress;\n          } else\n            resetHydrationState(),\n              0 === (workInProgress.flags & 128) &&\n                (workInProgress.memoizedState = null),\n              (workInProgress.flags |= 4);\n          bubbleProperties(workInProgress);\n          current = !1;\n        } else\n          (renderLanes = upgradeHydrationErrorsToRecoverable()),\n            null !== current &&\n              null !== current.memoizedState &&\n              (current.memoizedState.hydrationErrors = renderLanes),\n            (current = !0);\n        if (!current) {\n          if (workInProgress.flags & 256)\n            return popSuspenseHandler(workInProgress), workInProgress;\n          popSuspenseHandler(workInProgress);\n          return null;\n        }\n        if (0 !== (workInProgress.flags & 128))\n          throw Error(formatProdErrorMessage(558));\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 13:\n      newProps = workInProgress.memoizedState;\n      if (\n        null === current ||\n        (null !== current.memoizedState &&\n          null !== current.memoizedState.dehydrated)\n      ) {\n        type = popHydrationState(workInProgress);\n        if (null !== newProps && null !== newProps.dehydrated) {\n          if (null === current) {\n            if (!type) throw Error(formatProdErrorMessage(318));\n            type = workInProgress.memoizedState;\n            type = null !== type ? type.dehydrated : null;\n            if (!type) throw Error(formatProdErrorMessage(317));\n            type[internalInstanceKey] = workInProgress;\n          } else\n            resetHydrationState(),\n              0 === (workInProgress.flags & 128) &&\n                (workInProgress.memoizedState = null),\n              (workInProgress.flags |= 4);\n          bubbleProperties(workInProgress);\n          type = !1;\n        } else\n          (type = upgradeHydrationErrorsToRecoverable()),\n            null !== current &&\n              null !== current.memoizedState &&\n              (current.memoizedState.hydrationErrors = type),\n            (type = !0);\n        if (!type) {\n          if (workInProgress.flags & 256)\n            return popSuspenseHandler(workInProgress), workInProgress;\n          popSuspenseHandler(workInProgress);\n          return null;\n        }\n      }\n      popSuspenseHandler(workInProgress);\n      if (0 !== (workInProgress.flags & 128))\n        return (workInProgress.lanes = renderLanes), workInProgress;\n      renderLanes = null !== newProps;\n      current = null !== current && null !== current.memoizedState;\n      renderLanes &&\n        ((newProps = workInProgress.child),\n        (type = null),\n        null !== newProps.alternate &&\n          null !== newProps.alternate.memoizedState &&\n          null !== newProps.alternate.memoizedState.cachePool &&\n          (type = newProps.alternate.memoizedState.cachePool.pool),\n        (nextResource = null),\n        null !== newProps.memoizedState &&\n          null !== newProps.memoizedState.cachePool &&\n          (nextResource = newProps.memoizedState.cachePool.pool),\n        nextResource !== type && (newProps.flags |= 2048));\n      renderLanes !== current &&\n        renderLanes &&\n        (workInProgress.child.flags |= 8192);\n      scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n      bubbleProperties(workInProgress);\n      return null;\n    case 4:\n      return (\n        popHostContainer(),\n        null === current &&\n          listenToAllSupportedEvents(workInProgress.stateNode.containerInfo),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 10:\n      return (\n        popProvider(workInProgress.type), bubbleProperties(workInProgress), null\n      );\n    case 19:\n      pop(suspenseStackCursor);\n      newProps = workInProgress.memoizedState;\n      if (null === newProps) return bubbleProperties(workInProgress), null;\n      type = 0 !== (workInProgress.flags & 128);\n      nextResource = newProps.rendering;\n      if (null === nextResource)\n        if (type) cutOffTailIfNeeded(newProps, !1);\n        else {\n          if (\n            0 !== workInProgressRootExitStatus ||\n            (null !== current && 0 !== (current.flags & 128))\n          )\n            for (current = workInProgress.child; null !== current; ) {\n              nextResource = findFirstSuspended(current);\n              if (null !== nextResource) {\n                workInProgress.flags |= 128;\n                cutOffTailIfNeeded(newProps, !1);\n                current = nextResource.updateQueue;\n                workInProgress.updateQueue = current;\n                scheduleRetryEffect(workInProgress, current);\n                workInProgress.subtreeFlags = 0;\n                current = renderLanes;\n                for (renderLanes = workInProgress.child; null !== renderLanes; )\n                  resetWorkInProgress(renderLanes, current),\n                    (renderLanes = renderLanes.sibling);\n                push(\n                  suspenseStackCursor,\n                  (suspenseStackCursor.current & 1) | 2\n                );\n                isHydrating &&\n                  pushTreeFork(workInProgress, newProps.treeForkCount);\n                return workInProgress.child;\n              }\n              current = current.sibling;\n            }\n          null !== newProps.tail &&\n            now() > workInProgressRootRenderTargetTime &&\n            ((workInProgress.flags |= 128),\n            (type = !0),\n            cutOffTailIfNeeded(newProps, !1),\n            (workInProgress.lanes = 4194304));\n        }\n      else {\n        if (!type)\n          if (\n            ((current = findFirstSuspended(nextResource)), null !== current)\n          ) {\n            if (\n              ((workInProgress.flags |= 128),\n              (type = !0),\n              (current = current.updateQueue),\n              (workInProgress.updateQueue = current),\n              scheduleRetryEffect(workInProgress, current),\n              cutOffTailIfNeeded(newProps, !0),\n              null === newProps.tail &&\n                \"hidden\" === newProps.tailMode &&\n                !nextResource.alternate &&\n                !isHydrating)\n            )\n              return bubbleProperties(workInProgress), null;\n          } else\n            2 * now() - newProps.renderingStartTime >\n              workInProgressRootRenderTargetTime &&\n              536870912 !== renderLanes &&\n              ((workInProgress.flags |= 128),\n              (type = !0),\n              cutOffTailIfNeeded(newProps, !1),\n              (workInProgress.lanes = 4194304));\n        newProps.isBackwards\n          ? ((nextResource.sibling = workInProgress.child),\n            (workInProgress.child = nextResource))\n          : ((current = newProps.last),\n            null !== current\n              ? (current.sibling = nextResource)\n              : (workInProgress.child = nextResource),\n            (newProps.last = nextResource));\n      }\n      if (null !== newProps.tail)\n        return (\n          (current = newProps.tail),\n          (newProps.rendering = current),\n          (newProps.tail = current.sibling),\n          (newProps.renderingStartTime = now()),\n          (current.sibling = null),\n          (renderLanes = suspenseStackCursor.current),\n          push(\n            suspenseStackCursor,\n            type ? (renderLanes & 1) | 2 : renderLanes & 1\n          ),\n          isHydrating && pushTreeFork(workInProgress, newProps.treeForkCount),\n          current\n        );\n      bubbleProperties(workInProgress);\n      return null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        (newProps = null !== workInProgress.memoizedState),\n        null !== current\n          ? (null !== current.memoizedState) !== newProps &&\n            (workInProgress.flags |= 8192)\n          : newProps && (workInProgress.flags |= 8192),\n        newProps\n          ? 0 !== (renderLanes & 536870912) &&\n            0 === (workInProgress.flags & 128) &&\n            (bubbleProperties(workInProgress),\n            workInProgress.subtreeFlags & 6 && (workInProgress.flags |= 8192))\n          : bubbleProperties(workInProgress),\n        (renderLanes = workInProgress.updateQueue),\n        null !== renderLanes &&\n          scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n        (renderLanes = null),\n        null !== current &&\n          null !== current.memoizedState &&\n          null !== current.memoizedState.cachePool &&\n          (renderLanes = current.memoizedState.cachePool.pool),\n        (newProps = null),\n        null !== workInProgress.memoizedState &&\n          null !== workInProgress.memoizedState.cachePool &&\n          (newProps = workInProgress.memoizedState.cachePool.pool),\n        newProps !== renderLanes && (workInProgress.flags |= 2048),\n        null !== current && pop(resumedCache),\n        null\n      );\n    case 24:\n      return (\n        (renderLanes = null),\n        null !== current && (renderLanes = current.memoizedState.cache),\n        workInProgress.memoizedState.cache !== renderLanes &&\n          (workInProgress.flags |= 2048),\n        popProvider(CacheContext),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 25:\n      return null;\n    case 30:\n      return null;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction unwindWork(current, workInProgress) {\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 1:\n      return (\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 3:\n      return (\n        popProvider(CacheContext),\n        popHostContainer(),\n        (current = workInProgress.flags),\n        0 !== (current & 65536) && 0 === (current & 128)\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 26:\n    case 27:\n    case 5:\n      return popHostContext(workInProgress), null;\n    case 31:\n      if (null !== workInProgress.memoizedState) {\n        popSuspenseHandler(workInProgress);\n        if (null === workInProgress.alternate)\n          throw Error(formatProdErrorMessage(340));\n        resetHydrationState();\n      }\n      current = workInProgress.flags;\n      return current & 65536\n        ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n        : null;\n    case 13:\n      popSuspenseHandler(workInProgress);\n      current = workInProgress.memoizedState;\n      if (null !== current && null !== current.dehydrated) {\n        if (null === workInProgress.alternate)\n          throw Error(formatProdErrorMessage(340));\n        resetHydrationState();\n      }\n      current = workInProgress.flags;\n      return current & 65536\n        ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n        : null;\n    case 19:\n      return pop(suspenseStackCursor), null;\n    case 4:\n      return popHostContainer(), null;\n    case 10:\n      return popProvider(workInProgress.type), null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        null !== current && pop(resumedCache),\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 24:\n      return popProvider(CacheContext), null;\n    case 25:\n      return null;\n    default:\n      return null;\n  }\n}\nfunction unwindInterruptedWork(current, interruptedWork) {\n  popTreeContext(interruptedWork);\n  switch (interruptedWork.tag) {\n    case 3:\n      popProvider(CacheContext);\n      popHostContainer();\n      break;\n    case 26:\n    case 27:\n    case 5:\n      popHostContext(interruptedWork);\n      break;\n    case 4:\n      popHostContainer();\n      break;\n    case 31:\n      null !== interruptedWork.memoizedState &&\n        popSuspenseHandler(interruptedWork);\n      break;\n    case 13:\n      popSuspenseHandler(interruptedWork);\n      break;\n    case 19:\n      pop(suspenseStackCursor);\n      break;\n    case 10:\n      popProvider(interruptedWork.type);\n      break;\n    case 22:\n    case 23:\n      popSuspenseHandler(interruptedWork);\n      popHiddenContext();\n      null !== current && pop(resumedCache);\n      break;\n    case 24:\n      popProvider(CacheContext);\n  }\n}\nfunction commitHookEffectListMount(flags, finishedWork) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          lastEffect = void 0;\n          var create = updateQueue.create,\n            inst = updateQueue.inst;\n          lastEffect = create();\n          inst.destroy = lastEffect;\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHookEffectListUnmount(\n  flags,\n  finishedWork,\n  nearestMountedAncestor$jscomp$0\n) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          var inst = updateQueue.inst,\n            destroy = inst.destroy;\n          if (void 0 !== destroy) {\n            inst.destroy = void 0;\n            lastEffect = finishedWork;\n            var nearestMountedAncestor = nearestMountedAncestor$jscomp$0,\n              destroy_ = destroy;\n            try {\n              destroy_();\n            } catch (error) {\n              captureCommitPhaseError(\n                lastEffect,\n                nearestMountedAncestor,\n                error\n              );\n            }\n          }\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitClassCallbacks(finishedWork) {\n  var updateQueue = finishedWork.updateQueue;\n  if (null !== updateQueue) {\n    var instance = finishedWork.stateNode;\n    try {\n      commitCallbacks(updateQueue, instance);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n  }\n}\nfunction safelyCallComponentWillUnmount(\n  current,\n  nearestMountedAncestor,\n  instance\n) {\n  instance.props = resolveClassComponentProps(\n    current.type,\n    current.memoizedProps\n  );\n  instance.state = current.memoizedState;\n  try {\n    instance.componentWillUnmount();\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyAttachRef(current, nearestMountedAncestor) {\n  try {\n    var ref = current.ref;\n    if (null !== ref) {\n      switch (current.tag) {\n        case 26:\n        case 27:\n        case 5:\n          var instanceToUse = current.stateNode;\n          break;\n        case 30:\n          instanceToUse = current.stateNode;\n          break;\n        default:\n          instanceToUse = current.stateNode;\n      }\n      \"function\" === typeof ref\n        ? (current.refCleanup = ref(instanceToUse))\n        : (ref.current = instanceToUse);\n    }\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n  var ref = current.ref,\n    refCleanup = current.refCleanup;\n  if (null !== ref)\n    if (\"function\" === typeof refCleanup)\n      try {\n        refCleanup();\n      } catch (error) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error);\n      } finally {\n        (current.refCleanup = null),\n          (current = current.alternate),\n          null != current && (current.refCleanup = null);\n      }\n    else if (\"function\" === typeof ref)\n      try {\n        ref(null);\n      } catch (error$140) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error$140);\n      }\n    else ref.current = null;\n}\nfunction commitHostMount(finishedWork) {\n  var type = finishedWork.type,\n    props = finishedWork.memoizedProps,\n    instance = finishedWork.stateNode;\n  try {\n    a: switch (type) {\n      case \"button\":\n      case \"input\":\n      case \"select\":\n      case \"textarea\":\n        props.autoFocus && instance.focus();\n        break a;\n      case \"img\":\n        props.src\n          ? (instance.src = props.src)\n          : props.srcSet && (instance.srcset = props.srcSet);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHostUpdate(finishedWork, newProps, oldProps) {\n  try {\n    var domElement = finishedWork.stateNode;\n    updateProperties(domElement, finishedWork.type, oldProps, newProps);\n    domElement[internalPropsKey] = newProps;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction isHostParent(fiber) {\n  return (\n    5 === fiber.tag ||\n    3 === fiber.tag ||\n    26 === fiber.tag ||\n    (27 === fiber.tag && isSingletonScope(fiber.type)) ||\n    4 === fiber.tag\n  );\n}\nfunction getHostSibling(fiber) {\n  a: for (;;) {\n    for (; null === fiber.sibling; ) {\n      if (null === fiber.return || isHostParent(fiber.return)) return null;\n      fiber = fiber.return;\n    }\n    fiber.sibling.return = fiber.return;\n    for (\n      fiber = fiber.sibling;\n      5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;\n\n    ) {\n      if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;\n      if (fiber.flags & 2) continue a;\n      if (null === fiber.child || 4 === fiber.tag) continue a;\n      else (fiber.child.return = fiber), (fiber = fiber.child);\n    }\n    if (!(fiber.flags & 2)) return fiber.stateNode;\n  }\n}\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before\n        ? (9 === parent.nodeType\n            ? parent.body\n            : \"HTML\" === parent.nodeName\n              ? parent.ownerDocument.body\n              : parent\n          ).insertBefore(node, before)\n        : ((before =\n            9 === parent.nodeType\n              ? parent.body\n              : \"HTML\" === parent.nodeName\n                ? parent.ownerDocument.body\n                : parent),\n          before.appendChild(node),\n          (parent = parent._reactRootContainer),\n          (null !== parent && void 0 !== parent) ||\n            null !== before.onclick ||\n            (before.onclick = noop$1));\n  else if (\n    4 !== tag &&\n    (27 === tag &&\n      isSingletonScope(node.type) &&\n      ((parent = node.stateNode), (before = null)),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        (node = node.sibling);\n}\nfunction insertOrAppendPlacementNode(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before ? parent.insertBefore(node, before) : parent.appendChild(node);\n  else if (\n    4 !== tag &&\n    (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNode(node, before, parent), node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNode(node, before, parent), (node = node.sibling);\n}\nfunction commitHostSingletonAcquisition(finishedWork) {\n  var singleton = finishedWork.stateNode,\n    props = finishedWork.memoizedProps;\n  try {\n    for (\n      var type = finishedWork.type, attributes = singleton.attributes;\n      attributes.length;\n\n    )\n      singleton.removeAttributeNode(attributes[0]);\n    setInitialProperties(singleton, type, props);\n    singleton[internalInstanceKey] = finishedWork;\n    singleton[internalPropsKey] = props;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nvar offscreenSubtreeIsHidden = !1,\n  offscreenSubtreeWasHidden = !1,\n  needsFormReset = !1,\n  PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n  nextEffect = null;\nfunction commitBeforeMutationEffects(root, firstChild) {\n  root = root.containerInfo;\n  eventsEnabled = _enabled;\n  root = getActiveElementDeep(root);\n  if (hasSelectionCapabilities(root)) {\n    if (\"selectionStart\" in root)\n      var JSCompiler_temp = {\n        start: root.selectionStart,\n        end: root.selectionEnd\n      };\n    else\n      a: {\n        JSCompiler_temp =\n          ((JSCompiler_temp = root.ownerDocument) &&\n            JSCompiler_temp.defaultView) ||\n          window;\n        var selection =\n          JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n        if (selection && 0 !== selection.rangeCount) {\n          JSCompiler_temp = selection.anchorNode;\n          var anchorOffset = selection.anchorOffset,\n            focusNode = selection.focusNode;\n          selection = selection.focusOffset;\n          try {\n            JSCompiler_temp.nodeType, focusNode.nodeType;\n          } catch (e$20) {\n            JSCompiler_temp = null;\n            break a;\n          }\n          var length = 0,\n            start = -1,\n            end = -1,\n            indexWithinAnchor = 0,\n            indexWithinFocus = 0,\n            node = root,\n            parentNode = null;\n          b: for (;;) {\n            for (var next; ; ) {\n              node !== JSCompiler_temp ||\n                (0 !== anchorOffset && 3 !== node.nodeType) ||\n                (start = length + anchorOffset);\n              node !== focusNode ||\n                (0 !== selection && 3 !== node.nodeType) ||\n                (end = length + selection);\n              3 === node.nodeType && (length += node.nodeValue.length);\n              if (null === (next = node.firstChild)) break;\n              parentNode = node;\n              node = next;\n            }\n            for (;;) {\n              if (node === root) break b;\n              parentNode === JSCompiler_temp &&\n                ++indexWithinAnchor === anchorOffset &&\n                (start = length);\n              parentNode === focusNode &&\n                ++indexWithinFocus === selection &&\n                (end = length);\n              if (null !== (next = node.nextSibling)) break;\n              node = parentNode;\n              parentNode = node.parentNode;\n            }\n            node = next;\n          }\n          JSCompiler_temp =\n            -1 === start || -1 === end ? null : { start: start, end: end };\n        } else JSCompiler_temp = null;\n      }\n    JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n  } else JSCompiler_temp = null;\n  selectionInformation = { focusedElem: root, selectionRange: JSCompiler_temp };\n  _enabled = !1;\n  for (nextEffect = firstChild; null !== nextEffect; )\n    if (\n      ((firstChild = nextEffect),\n      (root = firstChild.child),\n      0 !== (firstChild.subtreeFlags & 1028) && null !== root)\n    )\n      (root.return = firstChild), (nextEffect = root);\n    else\n      for (; null !== nextEffect; ) {\n        firstChild = nextEffect;\n        focusNode = firstChild.alternate;\n        root = firstChild.flags;\n        switch (firstChild.tag) {\n          case 0:\n            if (\n              0 !== (root & 4) &&\n              ((root = firstChild.updateQueue),\n              (root = null !== root ? root.events : null),\n              null !== root)\n            )\n              for (\n                JSCompiler_temp = 0;\n                JSCompiler_temp < root.length;\n                JSCompiler_temp++\n              )\n                (anchorOffset = root[JSCompiler_temp]),\n                  (anchorOffset.ref.impl = anchorOffset.nextImpl);\n            break;\n          case 11:\n          case 15:\n            break;\n          case 1:\n            if (0 !== (root & 1024) && null !== focusNode) {\n              root = void 0;\n              JSCompiler_temp = firstChild;\n              anchorOffset = focusNode.memoizedProps;\n              focusNode = focusNode.memoizedState;\n              selection = JSCompiler_temp.stateNode;\n              try {\n                var resolvedPrevProps = resolveClassComponentProps(\n                  JSCompiler_temp.type,\n                  anchorOffset\n                );\n                root = selection.getSnapshotBeforeUpdate(\n                  resolvedPrevProps,\n                  focusNode\n                );\n                selection.__reactInternalSnapshotBeforeUpdate = root;\n              } catch (error) {\n                captureCommitPhaseError(\n                  JSCompiler_temp,\n                  JSCompiler_temp.return,\n                  error\n                );\n              }\n            }\n            break;\n          case 3:\n            if (0 !== (root & 1024))\n              if (\n                ((root = firstChild.stateNode.containerInfo),\n                (JSCompiler_temp = root.nodeType),\n                9 === JSCompiler_temp)\n              )\n                clearContainerSparingly(root);\n              else if (1 === JSCompiler_temp)\n                switch (root.nodeName) {\n                  case \"HEAD\":\n                  case \"HTML\":\n                  case \"BODY\":\n                    clearContainerSparingly(root);\n                    break;\n                  default:\n                    root.textContent = \"\";\n                }\n            break;\n          case 5:\n          case 26:\n          case 27:\n          case 6:\n          case 4:\n          case 17:\n            break;\n          default:\n            if (0 !== (root & 1024)) throw Error(formatProdErrorMessage(163));\n        }\n        root = firstChild.sibling;\n        if (null !== root) {\n          root.return = firstChild.return;\n          nextEffect = root;\n          break;\n        }\n        nextEffect = firstChild.return;\n      }\n}\nfunction commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitHookEffectListMount(5, finishedWork);\n      break;\n    case 1:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (flags & 4)\n        if (((finishedRoot = finishedWork.stateNode), null === current))\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(finishedWork, finishedWork.return, error);\n          }\n        else {\n          var prevProps = resolveClassComponentProps(\n            finishedWork.type,\n            current.memoizedProps\n          );\n          current = current.memoizedState;\n          try {\n            finishedRoot.componentDidUpdate(\n              prevProps,\n              current,\n              finishedRoot.__reactInternalSnapshotBeforeUpdate\n            );\n          } catch (error$139) {\n            captureCommitPhaseError(\n              finishedWork,\n              finishedWork.return,\n              error$139\n            );\n          }\n        }\n      flags & 64 && commitClassCallbacks(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (\n        flags & 64 &&\n        ((finishedRoot = finishedWork.updateQueue), null !== finishedRoot)\n      ) {\n        current = null;\n        if (null !== finishedWork.child)\n          switch (finishedWork.child.tag) {\n            case 27:\n            case 5:\n              current = finishedWork.child.stateNode;\n              break;\n            case 1:\n              current = finishedWork.child.stateNode;\n          }\n        try {\n          commitCallbacks(finishedRoot, current);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 27:\n      null === current &&\n        flags & 4 &&\n        commitHostSingletonAcquisition(finishedWork);\n    case 26:\n    case 5:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      null === current && flags & 4 && commitHostMount(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 12:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      break;\n    case 31:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n      break;\n    case 13:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n      flags & 64 &&\n        ((finishedRoot = finishedWork.memoizedState),\n        null !== finishedRoot &&\n          ((finishedRoot = finishedRoot.dehydrated),\n          null !== finishedRoot &&\n            ((finishedWork = retryDehydratedSuspenseBoundary.bind(\n              null,\n              finishedWork\n            )),\n            registerSuspenseInstanceRetry(finishedRoot, finishedWork))));\n      break;\n    case 22:\n      flags = null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n      if (!flags) {\n        current =\n          (null !== current && null !== current.memoizedState) ||\n          offscreenSubtreeWasHidden;\n        prevProps = offscreenSubtreeIsHidden;\n        var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n        offscreenSubtreeIsHidden = flags;\n        (offscreenSubtreeWasHidden = current) && !prevOffscreenSubtreeWasHidden\n          ? recursivelyTraverseReappearLayoutEffects(\n              finishedRoot,\n              finishedWork,\n              0 !== (finishedWork.subtreeFlags & 8772)\n            )\n          : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n        offscreenSubtreeIsHidden = prevProps;\n        offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      }\n      break;\n    case 30:\n      break;\n    default:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n  }\n}\nfunction detachFiberAfterEffects(fiber) {\n  var alternate = fiber.alternate;\n  null !== alternate &&\n    ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n  fiber.child = null;\n  fiber.deletions = null;\n  fiber.sibling = null;\n  5 === fiber.tag &&\n    ((alternate = fiber.stateNode),\n    null !== alternate && detachDeletedInstance(alternate));\n  fiber.stateNode = null;\n  fiber.return = null;\n  fiber.dependencies = null;\n  fiber.memoizedProps = null;\n  fiber.memoizedState = null;\n  fiber.pendingProps = null;\n  fiber.stateNode = null;\n  fiber.updateQueue = null;\n}\nvar hostParent = null,\n  hostParentIsContainer = !1;\nfunction recursivelyTraverseDeletionEffects(\n  finishedRoot,\n  nearestMountedAncestor,\n  parent\n) {\n  for (parent = parent.child; null !== parent; )\n    commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, parent),\n      (parent = parent.sibling);\n}\nfunction commitDeletionEffectsOnFiber(\n  finishedRoot,\n  nearestMountedAncestor,\n  deletedFiber\n) {\n  if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberUnmount)\n    try {\n      injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n    } catch (err) {}\n  switch (deletedFiber.tag) {\n    case 26:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      deletedFiber.memoizedState\n        ? deletedFiber.memoizedState.count--\n        : deletedFiber.stateNode &&\n          ((deletedFiber = deletedFiber.stateNode),\n          deletedFiber.parentNode.removeChild(deletedFiber));\n      break;\n    case 27:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      var prevHostParent = hostParent,\n        prevHostParentIsContainer = hostParentIsContainer;\n      isSingletonScope(deletedFiber.type) &&\n        ((hostParent = deletedFiber.stateNode), (hostParentIsContainer = !1));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      releaseSingletonInstance(deletedFiber.stateNode);\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 5:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n    case 6:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = null;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      if (null !== hostParent)\n        if (hostParentIsContainer)\n          try {\n            (9 === hostParent.nodeType\n              ? hostParent.body\n              : \"HTML\" === hostParent.nodeName\n                ? hostParent.ownerDocument.body\n                : hostParent\n            ).removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n        else\n          try {\n            hostParent.removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n      break;\n    case 18:\n      null !== hostParent &&\n        (hostParentIsContainer\n          ? ((finishedRoot = hostParent),\n            clearHydrationBoundary(\n              9 === finishedRoot.nodeType\n                ? finishedRoot.body\n                : \"HTML\" === finishedRoot.nodeName\n                  ? finishedRoot.ownerDocument.body\n                  : finishedRoot,\n              deletedFiber.stateNode\n            ),\n            retryIfBlockedOn(finishedRoot))\n          : clearHydrationBoundary(hostParent, deletedFiber.stateNode));\n      break;\n    case 4:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = deletedFiber.stateNode.containerInfo;\n      hostParentIsContainer = !0;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      commitHookEffectListUnmount(2, deletedFiber, nearestMountedAncestor);\n      offscreenSubtreeWasHidden ||\n        commitHookEffectListUnmount(4, deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 1:\n      offscreenSubtreeWasHidden ||\n        (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n        (prevHostParent = deletedFiber.stateNode),\n        \"function\" === typeof prevHostParent.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            deletedFiber,\n            nearestMountedAncestor,\n            prevHostParent\n          ));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 21:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 22:\n      offscreenSubtreeWasHidden =\n        (prevHostParent = offscreenSubtreeWasHidden) ||\n        null !== deletedFiber.memoizedState;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      offscreenSubtreeWasHidden = prevHostParent;\n      break;\n    default:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n  }\n}\nfunction commitActivityHydrationCallbacks(finishedRoot, finishedWork) {\n  if (\n    null === finishedWork.memoizedState &&\n    ((finishedRoot = finishedWork.alternate),\n    null !== finishedRoot &&\n      ((finishedRoot = finishedRoot.memoizedState), null !== finishedRoot))\n  ) {\n    finishedRoot = finishedRoot.dehydrated;\n    try {\n      retryIfBlockedOn(finishedRoot);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n  }\n}\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n  if (\n    null === finishedWork.memoizedState &&\n    ((finishedRoot = finishedWork.alternate),\n    null !== finishedRoot &&\n      ((finishedRoot = finishedRoot.memoizedState),\n      null !== finishedRoot &&\n        ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n  )\n    try {\n      retryIfBlockedOn(finishedRoot);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n}\nfunction getRetryCache(finishedWork) {\n  switch (finishedWork.tag) {\n    case 31:\n    case 13:\n    case 19:\n      var retryCache = finishedWork.stateNode;\n      null === retryCache &&\n        (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n      return retryCache;\n    case 22:\n      return (\n        (finishedWork = finishedWork.stateNode),\n        (retryCache = finishedWork._retryCache),\n        null === retryCache &&\n          (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n        retryCache\n      );\n    default:\n      throw Error(formatProdErrorMessage(435, finishedWork.tag));\n  }\n}\nfunction attachSuspenseRetryListeners(finishedWork, wakeables) {\n  var retryCache = getRetryCache(finishedWork);\n  wakeables.forEach(function (wakeable) {\n    if (!retryCache.has(wakeable)) {\n      retryCache.add(wakeable);\n      var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n      wakeable.then(retry, retry);\n    }\n  });\n}\nfunction recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (null !== deletions)\n    for (var i = 0; i < deletions.length; i++) {\n      var childToDelete = deletions[i],\n        root = root$jscomp$0,\n        returnFiber = parentFiber,\n        parent = returnFiber;\n      a: for (; null !== parent; ) {\n        switch (parent.tag) {\n          case 27:\n            if (isSingletonScope(parent.type)) {\n              hostParent = parent.stateNode;\n              hostParentIsContainer = !1;\n              break a;\n            }\n            break;\n          case 5:\n            hostParent = parent.stateNode;\n            hostParentIsContainer = !1;\n            break a;\n          case 3:\n          case 4:\n            hostParent = parent.stateNode.containerInfo;\n            hostParentIsContainer = !0;\n            break a;\n        }\n        parent = parent.return;\n      }\n      if (null === hostParent) throw Error(formatProdErrorMessage(160));\n      commitDeletionEffectsOnFiber(root, returnFiber, childToDelete);\n      hostParent = null;\n      hostParentIsContainer = !1;\n      root = childToDelete.alternate;\n      null !== root && (root.return = null);\n      childToDelete.return = null;\n    }\n  if (parentFiber.subtreeFlags & 13886)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),\n        (parentFiber = parentFiber.sibling);\n}\nvar currentHoistableRoot = null;\nfunction commitMutationEffectsOnFiber(finishedWork, root) {\n  var current = finishedWork.alternate,\n    flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        (commitHookEffectListUnmount(3, finishedWork, finishedWork.return),\n        commitHookEffectListMount(3, finishedWork),\n        commitHookEffectListUnmount(5, finishedWork, finishedWork.return));\n      break;\n    case 1:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      flags & 64 &&\n        offscreenSubtreeIsHidden &&\n        ((finishedWork = finishedWork.updateQueue),\n        null !== finishedWork &&\n          ((flags = finishedWork.callbacks),\n          null !== flags &&\n            ((current = finishedWork.shared.hiddenCallbacks),\n            (finishedWork.shared.hiddenCallbacks =\n              null === current ? flags : current.concat(flags)))));\n      break;\n    case 26:\n      var hoistableRoot = currentHoistableRoot;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (flags & 4) {\n        var currentResource = null !== current ? current.memoizedState : null;\n        flags = finishedWork.memoizedState;\n        if (null === current)\n          if (null === flags)\n            if (null === finishedWork.stateNode) {\n              a: {\n                flags = finishedWork.type;\n                current = finishedWork.memoizedProps;\n                hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n                b: switch (flags) {\n                  case \"title\":\n                    currentResource =\n                      hoistableRoot.getElementsByTagName(\"title\")[0];\n                    if (\n                      !currentResource ||\n                      currentResource[internalHoistableMarker] ||\n                      currentResource[internalInstanceKey] ||\n                      \"http://www.w3.org/2000/svg\" ===\n                        currentResource.namespaceURI ||\n                      currentResource.hasAttribute(\"itemprop\")\n                    )\n                      (currentResource = hoistableRoot.createElement(flags)),\n                        hoistableRoot.head.insertBefore(\n                          currentResource,\n                          hoistableRoot.querySelector(\"head > title\")\n                        );\n                    setInitialProperties(currentResource, flags, current);\n                    currentResource[internalInstanceKey] = finishedWork;\n                    markNodeAsHoistable(currentResource);\n                    flags = currentResource;\n                    break a;\n                  case \"link\":\n                    var maybeNodes = getHydratableHoistableCache(\n                      \"link\",\n                      \"href\",\n                      hoistableRoot\n                    ).get(flags + (current.href || \"\"));\n                    if (maybeNodes)\n                      for (var i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"href\") ===\n                            (null == current.href || \"\" === current.href\n                              ? null\n                              : current.href) &&\n                            currentResource.getAttribute(\"rel\") ===\n                              (null == current.rel ? null : current.rel) &&\n                            currentResource.getAttribute(\"title\") ===\n                              (null == current.title ? null : current.title) &&\n                            currentResource.getAttribute(\"crossorigin\") ===\n                              (null == current.crossOrigin\n                                ? null\n                                : current.crossOrigin))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  case \"meta\":\n                    if (\n                      (maybeNodes = getHydratableHoistableCache(\n                        \"meta\",\n                        \"content\",\n                        hoistableRoot\n                      ).get(flags + (current.content || \"\")))\n                    )\n                      for (i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"content\") ===\n                            (null == current.content\n                              ? null\n                              : \"\" + current.content) &&\n                            currentResource.getAttribute(\"name\") ===\n                              (null == current.name ? null : current.name) &&\n                            currentResource.getAttribute(\"property\") ===\n                              (null == current.property\n                                ? null\n                                : current.property) &&\n                            currentResource.getAttribute(\"http-equiv\") ===\n                              (null == current.httpEquiv\n                                ? null\n                                : current.httpEquiv) &&\n                            currentResource.getAttribute(\"charset\") ===\n                              (null == current.charSet\n                                ? null\n                                : current.charSet))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  default:\n                    throw Error(formatProdErrorMessage(468, flags));\n                }\n                currentResource[internalInstanceKey] = finishedWork;\n                markNodeAsHoistable(currentResource);\n                flags = currentResource;\n              }\n              finishedWork.stateNode = flags;\n            } else\n              mountHoistable(\n                hoistableRoot,\n                finishedWork.type,\n                finishedWork.stateNode\n              );\n          else\n            finishedWork.stateNode = acquireResource(\n              hoistableRoot,\n              flags,\n              finishedWork.memoizedProps\n            );\n        else\n          currentResource !== flags\n            ? (null === currentResource\n                ? null !== current.stateNode &&\n                  ((current = current.stateNode),\n                  current.parentNode.removeChild(current))\n                : currentResource.count--,\n              null === flags\n                ? mountHoistable(\n                    hoistableRoot,\n                    finishedWork.type,\n                    finishedWork.stateNode\n                  )\n                : acquireResource(\n                    hoistableRoot,\n                    flags,\n                    finishedWork.memoizedProps\n                  ))\n            : null === flags &&\n              null !== finishedWork.stateNode &&\n              commitHostUpdate(\n                finishedWork,\n                finishedWork.memoizedProps,\n                current.memoizedProps\n              );\n      }\n      break;\n    case 27:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      null !== current &&\n        flags & 4 &&\n        commitHostUpdate(\n          finishedWork,\n          finishedWork.memoizedProps,\n          current.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (finishedWork.flags & 32) {\n        hoistableRoot = finishedWork.stateNode;\n        try {\n          setTextContent(hoistableRoot, \"\");\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      flags & 4 &&\n        null != finishedWork.stateNode &&\n        ((hoistableRoot = finishedWork.memoizedProps),\n        commitHostUpdate(\n          finishedWork,\n          hoistableRoot,\n          null !== current ? current.memoizedProps : hoistableRoot\n        ));\n      flags & 1024 && (needsFormReset = !0);\n      break;\n    case 6:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4) {\n        if (null === finishedWork.stateNode)\n          throw Error(formatProdErrorMessage(162));\n        flags = finishedWork.memoizedProps;\n        current = finishedWork.stateNode;\n        try {\n          current.nodeValue = flags;\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 3:\n      tagCaches = null;\n      hoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(root.containerInfo);\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      currentHoistableRoot = hoistableRoot;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4 && null !== current && current.memoizedState.isDehydrated)\n        try {\n          retryIfBlockedOn(root.containerInfo);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      needsFormReset &&\n        ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n      break;\n    case 4:\n      flags = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(\n        finishedWork.stateNode.containerInfo\n      );\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      currentHoistableRoot = flags;\n      break;\n    case 12:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      break;\n    case 31:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 13:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      finishedWork.child.flags & 8192 &&\n        (null !== finishedWork.memoizedState) !==\n          (null !== current && null !== current.memoizedState) &&\n        (globalMostRecentFallbackTime = now());\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 22:\n      hoistableRoot = null !== finishedWork.memoizedState;\n      var wasHidden = null !== current && null !== current.memoizedState,\n        prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n        prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || hoistableRoot;\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || wasHidden;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 8192)\n        a: for (\n          root = finishedWork.stateNode,\n            root._visibility = hoistableRoot\n              ? root._visibility & -2\n              : root._visibility | 1,\n            hoistableRoot &&\n              (null === current ||\n                wasHidden ||\n                offscreenSubtreeIsHidden ||\n                offscreenSubtreeWasHidden ||\n                recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n            current = null,\n            root = finishedWork;\n          ;\n\n        ) {\n          if (5 === root.tag || 26 === root.tag) {\n            if (null === current) {\n              wasHidden = current = root;\n              try {\n                if (((currentResource = wasHidden.stateNode), hoistableRoot))\n                  (maybeNodes = currentResource.style),\n                    \"function\" === typeof maybeNodes.setProperty\n                      ? maybeNodes.setProperty(\"display\", \"none\", \"important\")\n                      : (maybeNodes.display = \"none\");\n                else {\n                  i = wasHidden.stateNode;\n                  var styleProp = wasHidden.memoizedProps.style,\n                    display =\n                      void 0 !== styleProp &&\n                      null !== styleProp &&\n                      styleProp.hasOwnProperty(\"display\")\n                        ? styleProp.display\n                        : null;\n                  i.style.display =\n                    null == display || \"boolean\" === typeof display\n                      ? \"\"\n                      : (\"\" + display).trim();\n                }\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (6 === root.tag) {\n            if (null === current) {\n              wasHidden = root;\n              try {\n                wasHidden.stateNode.nodeValue = hoistableRoot\n                  ? \"\"\n                  : wasHidden.memoizedProps;\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (18 === root.tag) {\n            if (null === current) {\n              wasHidden = root;\n              try {\n                var instance = wasHidden.stateNode;\n                hoistableRoot\n                  ? hideOrUnhideDehydratedBoundary(instance, !0)\n                  : hideOrUnhideDehydratedBoundary(wasHidden.stateNode, !1);\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (\n            ((22 !== root.tag && 23 !== root.tag) ||\n              null === root.memoizedState ||\n              root === finishedWork) &&\n            null !== root.child\n          ) {\n            root.child.return = root;\n            root = root.child;\n            continue;\n          }\n          if (root === finishedWork) break a;\n          for (; null === root.sibling; ) {\n            if (null === root.return || root.return === finishedWork) break a;\n            current === root && (current = null);\n            root = root.return;\n          }\n          current === root && (current = null);\n          root.sibling.return = root.return;\n          root = root.sibling;\n        }\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((current = flags.retryQueue),\n          null !== current &&\n            ((flags.retryQueue = null),\n            attachSuspenseRetryListeners(finishedWork, current))));\n      break;\n    case 19:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 30:\n      break;\n    case 21:\n      break;\n    default:\n      recursivelyTraverseMutationEffects(root, finishedWork),\n        commitReconciliationEffects(finishedWork);\n  }\n}\nfunction commitReconciliationEffects(finishedWork) {\n  var flags = finishedWork.flags;\n  if (flags & 2) {\n    try {\n      for (\n        var hostParentFiber, parentFiber = finishedWork.return;\n        null !== parentFiber;\n\n      ) {\n        if (isHostParent(parentFiber)) {\n          hostParentFiber = parentFiber;\n          break;\n        }\n        parentFiber = parentFiber.return;\n      }\n      if (null == hostParentFiber) throw Error(formatProdErrorMessage(160));\n      switch (hostParentFiber.tag) {\n        case 27:\n          var parent = hostParentFiber.stateNode,\n            before = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before, parent);\n          break;\n        case 5:\n          var parent$141 = hostParentFiber.stateNode;\n          hostParentFiber.flags & 32 &&\n            (setTextContent(parent$141, \"\"), (hostParentFiber.flags &= -33));\n          var before$142 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before$142, parent$141);\n          break;\n        case 3:\n        case 4:\n          var parent$143 = hostParentFiber.stateNode.containerInfo,\n            before$144 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNodeIntoContainer(\n            finishedWork,\n            before$144,\n            parent$143\n          );\n          break;\n        default:\n          throw Error(formatProdErrorMessage(161));\n      }\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n    finishedWork.flags &= -3;\n  }\n  flags & 4096 && (finishedWork.flags &= -4097);\n}\nfunction recursivelyResetForms(parentFiber) {\n  if (parentFiber.subtreeFlags & 1024)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var fiber = parentFiber;\n      recursivelyResetForms(fiber);\n      5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();\n      parentFiber = parentFiber.sibling;\n    }\n}\nfunction recursivelyTraverseLayoutEffects(root, parentFiber) {\n  if (parentFiber.subtreeFlags & 8772)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedWork = parentFiber;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 14:\n      case 15:\n        commitHookEffectListUnmount(4, finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 1:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        var instance = finishedWork.stateNode;\n        \"function\" === typeof instance.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            finishedWork,\n            finishedWork.return,\n            instance\n          );\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 27:\n        releaseSingletonInstance(finishedWork.stateNode);\n      case 26:\n      case 5:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 30:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      default:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseReappearLayoutEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var current = parentFiber.alternate,\n      finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(4, finishedWork);\n        break;\n      case 1:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        current = finishedWork;\n        finishedRoot = current.stateNode;\n        if (\"function\" === typeof finishedRoot.componentDidMount)\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        current = finishedWork;\n        finishedRoot = current.updateQueue;\n        if (null !== finishedRoot) {\n          var instance = current.stateNode;\n          try {\n            var hiddenCallbacks = finishedRoot.shared.hiddenCallbacks;\n            if (null !== hiddenCallbacks)\n              for (\n                finishedRoot.shared.hiddenCallbacks = null, finishedRoot = 0;\n                finishedRoot < hiddenCallbacks.length;\n                finishedRoot++\n              )\n                callCallback(hiddenCallbacks[finishedRoot], instance);\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        }\n        includeWorkInProgressEffects &&\n          flags & 64 &&\n          commitClassCallbacks(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 27:\n        commitHostSingletonAcquisition(finishedWork);\n      case 26:\n      case 5:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          null === current &&\n          flags & 4 &&\n          commitHostMount(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 12:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        break;\n      case 31:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 4 &&\n          commitActivityHydrationCallbacks(finishedRoot, finishedWork);\n        break;\n      case 13:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 4 &&\n          commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseReappearLayoutEffects(\n            finishedRoot,\n            finishedWork,\n            includeWorkInProgressEffects\n          );\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 30:\n        break;\n      default:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitOffscreenPassiveMountEffects(current, finishedWork) {\n  var previousCache = null;\n  null !== current &&\n    null !== current.memoizedState &&\n    null !== current.memoizedState.cachePool &&\n    (previousCache = current.memoizedState.cachePool.pool);\n  current = null;\n  null !== finishedWork.memoizedState &&\n    null !== finishedWork.memoizedState.cachePool &&\n    (current = finishedWork.memoizedState.cachePool.pool);\n  current !== previousCache &&\n    (null != current && current.refCount++,\n    null != previousCache && releaseCache(previousCache));\n}\nfunction commitCachePassiveMountEffect(current, finishedWork) {\n  current = null;\n  null !== finishedWork.alternate &&\n    (current = finishedWork.alternate.memoizedState.cache);\n  finishedWork = finishedWork.memoizedState.cache;\n  finishedWork !== current &&\n    (finishedWork.refCount++, null != current && releaseCache(current));\n}\nfunction recursivelyTraversePassiveMountEffects(\n  root,\n  parentFiber,\n  committedLanes,\n  committedTransitions\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveMountOnFiber(\n        root,\n        parentFiber,\n        committedLanes,\n        committedTransitions\n      ),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveMountOnFiber(\n  finishedRoot,\n  finishedWork,\n  committedLanes,\n  committedTransitions\n) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 && commitHookEffectListMount(9, finishedWork);\n      break;\n    case 1:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 3:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        ((finishedRoot = null),\n        null !== finishedWork.alternate &&\n          (finishedRoot = finishedWork.alternate.memoizedState.cache),\n        (finishedWork = finishedWork.memoizedState.cache),\n        finishedWork !== finishedRoot &&\n          (finishedWork.refCount++,\n          null != finishedRoot && releaseCache(finishedRoot)));\n      break;\n    case 12:\n      if (flags & 2048) {\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n        finishedRoot = finishedWork.stateNode;\n        try {\n          var _finishedWork$memoize2 = finishedWork.memoizedProps,\n            id = _finishedWork$memoize2.id,\n            onPostCommit = _finishedWork$memoize2.onPostCommit;\n          \"function\" === typeof onPostCommit &&\n            onPostCommit(\n              id,\n              null === finishedWork.alternate ? \"mount\" : \"update\",\n              finishedRoot.passiveEffectDuration,\n              -0\n            );\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      } else\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n      break;\n    case 31:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 13:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 23:\n      break;\n    case 22:\n      _finishedWork$memoize2 = finishedWork.stateNode;\n      id = finishedWork.alternate;\n      null !== finishedWork.memoizedState\n        ? _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork)\n        : _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : ((_finishedWork$memoize2._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              0 !== (finishedWork.subtreeFlags & 10256) || !1\n            ));\n      flags & 2048 && commitOffscreenPassiveMountEffects(id, finishedWork);\n      break;\n    case 24:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n  }\n}\nfunction recursivelyTraverseReconnectPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  committedLanes$jscomp$0,\n  committedTransitions$jscomp$0,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects &&\n    (0 !== (parentFiber.subtreeFlags & 10256) || !1);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      committedLanes = committedLanes$jscomp$0,\n      committedTransitions = committedTransitions$jscomp$0,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(8, finishedWork);\n        break;\n      case 23:\n        break;\n      case 22:\n        var instance = finishedWork.stateNode;\n        null !== finishedWork.memoizedState\n          ? instance._visibility & 2\n            ? recursivelyTraverseReconnectPassiveEffects(\n                finishedRoot,\n                finishedWork,\n                committedLanes,\n                committedTransitions,\n                includeWorkInProgressEffects\n              )\n            : recursivelyTraverseAtomicPassiveEffects(\n                finishedRoot,\n                finishedWork\n              )\n          : ((instance._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              includeWorkInProgressEffects\n            ));\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitOffscreenPassiveMountEffects(\n            finishedWork.alternate,\n            finishedWork\n          );\n        break;\n      case 24:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n        break;\n      default:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseAtomicPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var finishedRoot = finishedRoot$jscomp$0,\n        finishedWork = parentFiber,\n        flags = finishedWork.flags;\n      switch (finishedWork.tag) {\n        case 22:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitOffscreenPassiveMountEffects(\n              finishedWork.alternate,\n              finishedWork\n            );\n          break;\n        case 24:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n          break;\n        default:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n      }\n      parentFiber = parentFiber.sibling;\n    }\n}\nvar suspenseyCommitFlag = 8192;\nfunction recursivelyAccumulateSuspenseyCommit(\n  parentFiber,\n  committedLanes,\n  suspendedState\n) {\n  if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      accumulateSuspenseyCommitOnFiber(\n        parentFiber,\n        committedLanes,\n        suspendedState\n      ),\n        (parentFiber = parentFiber.sibling);\n}\nfunction accumulateSuspenseyCommitOnFiber(\n  fiber,\n  committedLanes,\n  suspendedState\n) {\n  switch (fiber.tag) {\n    case 26:\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n      fiber.flags & suspenseyCommitFlag &&\n        null !== fiber.memoizedState &&\n        suspendResource(\n          suspendedState,\n          currentHoistableRoot,\n          fiber.memoizedState,\n          fiber.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n      break;\n    case 3:\n    case 4:\n      var previousHoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(fiber.stateNode.containerInfo);\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n      currentHoistableRoot = previousHoistableRoot;\n      break;\n    case 22:\n      null === fiber.memoizedState &&\n        ((previousHoistableRoot = fiber.alternate),\n        null !== previousHoistableRoot &&\n        null !== previousHoistableRoot.memoizedState\n          ? ((previousHoistableRoot = suspenseyCommitFlag),\n            (suspenseyCommitFlag = 16777216),\n            recursivelyAccumulateSuspenseyCommit(\n              fiber,\n              committedLanes,\n              suspendedState\n            ),\n            (suspenseyCommitFlag = previousHoistableRoot))\n          : recursivelyAccumulateSuspenseyCommit(\n              fiber,\n              committedLanes,\n              suspendedState\n            ));\n      break;\n    default:\n      recursivelyAccumulateSuspenseyCommit(\n        fiber,\n        committedLanes,\n        suspendedState\n      );\n  }\n}\nfunction detachAlternateSiblings(parentFiber) {\n  var previousFiber = parentFiber.alternate;\n  if (\n    null !== previousFiber &&\n    ((parentFiber = previousFiber.child), null !== parentFiber)\n  ) {\n    previousFiber.child = null;\n    do\n      (previousFiber = parentFiber.sibling),\n        (parentFiber.sibling = null),\n        (parentFiber = previousFiber);\n    while (null !== parentFiber);\n  }\n}\nfunction recursivelyTraversePassiveUnmountEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveUnmountOnFiber(parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveUnmountOnFiber(finishedWork) {\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      finishedWork.flags & 2048 &&\n        commitHookEffectListUnmount(9, finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 12:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 22:\n      var instance = finishedWork.stateNode;\n      null !== finishedWork.memoizedState &&\n      instance._visibility & 2 &&\n      (null === finishedWork.return || 13 !== finishedWork.return.tag)\n        ? ((instance._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n        : recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n  }\n}\nfunction recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    deletions = parentFiber;\n    switch (deletions.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, deletions, deletions.return);\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n        break;\n      case 22:\n        i = deletions.stateNode;\n        i._visibility & 2 &&\n          ((i._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(deletions));\n        break;\n      default:\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n  deletedSubtreeRoot,\n  nearestMountedAncestor\n) {\n  for (; null !== nextEffect; ) {\n    var fiber = nextEffect;\n    switch (fiber.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, fiber, nearestMountedAncestor);\n        break;\n      case 23:\n      case 22:\n        if (\n          null !== fiber.memoizedState &&\n          null !== fiber.memoizedState.cachePool\n        ) {\n          var cache = fiber.memoizedState.cachePool.pool;\n          null != cache && cache.refCount++;\n        }\n        break;\n      case 24:\n        releaseCache(fiber.memoizedState.cache);\n    }\n    cache = fiber.child;\n    if (null !== cache) (cache.return = fiber), (nextEffect = cache);\n    else\n      a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n        cache = nextEffect;\n        var sibling = cache.sibling,\n          returnFiber = cache.return;\n        detachFiberAfterEffects(cache);\n        if (cache === fiber) {\n          nextEffect = null;\n          break a;\n        }\n        if (null !== sibling) {\n          sibling.return = returnFiber;\n          nextEffect = sibling;\n          break a;\n        }\n        nextEffect = returnFiber;\n      }\n  }\n}\nvar DefaultAsyncDispatcher = {\n    getCacheForType: function (resourceType) {\n      var cache = readContext(CacheContext),\n        cacheForType = cache.data.get(resourceType);\n      void 0 === cacheForType &&\n        ((cacheForType = resourceType()),\n        cache.data.set(resourceType, cacheForType));\n      return cacheForType;\n    },\n    cacheSignal: function () {\n      return readContext(CacheContext).controller.signal;\n    }\n  },\n  PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n  executionContext = 0,\n  workInProgressRoot = null,\n  workInProgress = null,\n  workInProgressRootRenderLanes = 0,\n  workInProgressSuspendedReason = 0,\n  workInProgressThrownValue = null,\n  workInProgressRootDidSkipSuspendedSiblings = !1,\n  workInProgressRootIsPrerendering = !1,\n  workInProgressRootDidAttachPingListener = !1,\n  entangledRenderLanes = 0,\n  workInProgressRootExitStatus = 0,\n  workInProgressRootSkippedLanes = 0,\n  workInProgressRootInterleavedUpdatedLanes = 0,\n  workInProgressRootPingedLanes = 0,\n  workInProgressDeferredLane = 0,\n  workInProgressSuspendedRetryLanes = 0,\n  workInProgressRootConcurrentErrors = null,\n  workInProgressRootRecoverableErrors = null,\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n  globalMostRecentFallbackTime = 0,\n  globalMostRecentTransitionTime = 0,\n  workInProgressRootRenderTargetTime = Infinity,\n  workInProgressTransitions = null,\n  legacyErrorBoundariesThatAlreadyFailed = null,\n  pendingEffectsStatus = 0,\n  pendingEffectsRoot = null,\n  pendingFinishedWork = null,\n  pendingEffectsLanes = 0,\n  pendingEffectsRemainingLanes = 0,\n  pendingPassiveTransitions = null,\n  pendingRecoverableErrors = null,\n  nestedUpdateCount = 0,\n  rootWithNestedUpdates = null;\nfunction requestUpdateLane() {\n  return 0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes\n    ? workInProgressRootRenderLanes & -workInProgressRootRenderLanes\n    : null !== ReactSharedInternals.T\n      ? requestTransitionLane()\n      : resolveUpdatePriority();\n}\nfunction requestDeferredLane() {\n  if (0 === workInProgressDeferredLane)\n    if (0 === (workInProgressRootRenderLanes & 536870912) || isHydrating) {\n      var lane = nextTransitionDeferredLane;\n      nextTransitionDeferredLane <<= 1;\n      0 === (nextTransitionDeferredLane & 3932160) &&\n        (nextTransitionDeferredLane = 262144);\n      workInProgressDeferredLane = lane;\n    } else workInProgressDeferredLane = 536870912;\n  lane = suspenseHandlerStackCursor.current;\n  null !== lane && (lane.flags |= 32);\n  return workInProgressDeferredLane;\n}\nfunction scheduleUpdateOnFiber(root, fiber, lane) {\n  if (\n    (root === workInProgressRoot &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    prepareFreshStack(root, 0),\n      markRootSuspended(\n        root,\n        workInProgressRootRenderLanes,\n        workInProgressDeferredLane,\n        !1\n      );\n  markRootUpdated$1(root, lane);\n  if (0 === (executionContext & 2) || root !== workInProgressRoot)\n    root === workInProgressRoot &&\n      (0 === (executionContext & 2) &&\n        (workInProgressRootInterleavedUpdatedLanes |= lane),\n      4 === workInProgressRootExitStatus &&\n        markRootSuspended(\n          root,\n          workInProgressRootRenderLanes,\n          workInProgressDeferredLane,\n          !1\n        )),\n      ensureRootIsScheduled(root);\n}\nfunction performWorkOnRoot(root$jscomp$0, lanes, forceSync) {\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  var shouldTimeSlice =\n      (!forceSync &&\n        0 === (lanes & 127) &&\n        0 === (lanes & root$jscomp$0.expiredLanes)) ||\n      checkIfRootIsPrerendering(root$jscomp$0, lanes),\n    exitStatus = shouldTimeSlice\n      ? renderRootConcurrent(root$jscomp$0, lanes)\n      : renderRootSync(root$jscomp$0, lanes, !0),\n    renderWasConcurrent = shouldTimeSlice;\n  do {\n    if (0 === exitStatus) {\n      workInProgressRootIsPrerendering &&\n        !shouldTimeSlice &&\n        markRootSuspended(root$jscomp$0, lanes, 0, !1);\n      break;\n    } else {\n      forceSync = root$jscomp$0.current.alternate;\n      if (\n        renderWasConcurrent &&\n        !isRenderConsistentWithExternalStores(forceSync)\n      ) {\n        exitStatus = renderRootSync(root$jscomp$0, lanes, !1);\n        renderWasConcurrent = !1;\n        continue;\n      }\n      if (2 === exitStatus) {\n        renderWasConcurrent = lanes;\n        if (root$jscomp$0.errorRecoveryDisabledLanes & renderWasConcurrent)\n          var JSCompiler_inline_result = 0;\n        else\n          (JSCompiler_inline_result = root$jscomp$0.pendingLanes & -536870913),\n            (JSCompiler_inline_result =\n              0 !== JSCompiler_inline_result\n                ? JSCompiler_inline_result\n                : JSCompiler_inline_result & 536870912\n                  ? 536870912\n                  : 0);\n        if (0 !== JSCompiler_inline_result) {\n          lanes = JSCompiler_inline_result;\n          a: {\n            var root = root$jscomp$0;\n            exitStatus = workInProgressRootConcurrentErrors;\n            var wasRootDehydrated = root.current.memoizedState.isDehydrated;\n            wasRootDehydrated &&\n              (prepareFreshStack(root, JSCompiler_inline_result).flags |= 256);\n            JSCompiler_inline_result = renderRootSync(\n              root,\n              JSCompiler_inline_result,\n              !1\n            );\n            if (2 !== JSCompiler_inline_result) {\n              if (\n                workInProgressRootDidAttachPingListener &&\n                !wasRootDehydrated\n              ) {\n                root.errorRecoveryDisabledLanes |= renderWasConcurrent;\n                workInProgressRootInterleavedUpdatedLanes |=\n                  renderWasConcurrent;\n                exitStatus = 4;\n                break a;\n              }\n              renderWasConcurrent = workInProgressRootRecoverableErrors;\n              workInProgressRootRecoverableErrors = exitStatus;\n              null !== renderWasConcurrent &&\n                (null === workInProgressRootRecoverableErrors\n                  ? (workInProgressRootRecoverableErrors = renderWasConcurrent)\n                  : workInProgressRootRecoverableErrors.push.apply(\n                      workInProgressRootRecoverableErrors,\n                      renderWasConcurrent\n                    ));\n            }\n            exitStatus = JSCompiler_inline_result;\n          }\n          renderWasConcurrent = !1;\n          if (2 !== exitStatus) continue;\n        }\n      }\n      if (1 === exitStatus) {\n        prepareFreshStack(root$jscomp$0, 0);\n        markRootSuspended(root$jscomp$0, lanes, 0, !0);\n        break;\n      }\n      a: {\n        shouldTimeSlice = root$jscomp$0;\n        renderWasConcurrent = exitStatus;\n        switch (renderWasConcurrent) {\n          case 0:\n          case 1:\n            throw Error(formatProdErrorMessage(345));\n          case 4:\n            if ((lanes & 4194048) !== lanes) break;\n          case 6:\n            markRootSuspended(\n              shouldTimeSlice,\n              lanes,\n              workInProgressDeferredLane,\n              !workInProgressRootDidSkipSuspendedSiblings\n            );\n            break a;\n          case 2:\n            workInProgressRootRecoverableErrors = null;\n            break;\n          case 3:\n          case 5:\n            break;\n          default:\n            throw Error(formatProdErrorMessage(329));\n        }\n        if (\n          (lanes & 62914560) === lanes &&\n          ((exitStatus = globalMostRecentFallbackTime + 300 - now()),\n          10 < exitStatus)\n        ) {\n          markRootSuspended(\n            shouldTimeSlice,\n            lanes,\n            workInProgressDeferredLane,\n            !workInProgressRootDidSkipSuspendedSiblings\n          );\n          if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;\n          pendingEffectsLanes = lanes;\n          shouldTimeSlice.timeoutHandle = scheduleTimeout(\n            commitRootWhenReady.bind(\n              null,\n              shouldTimeSlice,\n              forceSync,\n              workInProgressRootRecoverableErrors,\n              workInProgressTransitions,\n              workInProgressRootDidIncludeRecursiveRenderUpdate,\n              lanes,\n              workInProgressDeferredLane,\n              workInProgressRootInterleavedUpdatedLanes,\n              workInProgressSuspendedRetryLanes,\n              workInProgressRootDidSkipSuspendedSiblings,\n              renderWasConcurrent,\n              \"Throttled\",\n              -0,\n              0\n            ),\n            exitStatus\n          );\n          break a;\n        }\n        commitRootWhenReady(\n          shouldTimeSlice,\n          forceSync,\n          workInProgressRootRecoverableErrors,\n          workInProgressTransitions,\n          workInProgressRootDidIncludeRecursiveRenderUpdate,\n          lanes,\n          workInProgressDeferredLane,\n          workInProgressRootInterleavedUpdatedLanes,\n          workInProgressSuspendedRetryLanes,\n          workInProgressRootDidSkipSuspendedSiblings,\n          renderWasConcurrent,\n          null,\n          -0,\n          0\n        );\n      }\n    }\n    break;\n  } while (1);\n  ensureRootIsScheduled(root$jscomp$0);\n}\nfunction commitRootWhenReady(\n  root,\n  finishedWork,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  lanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes,\n  didSkipSuspendedSiblings,\n  exitStatus,\n  suspendedCommitReason,\n  completedRenderStartTime,\n  completedRenderEndTime\n) {\n  root.timeoutHandle = -1;\n  suspendedCommitReason = finishedWork.subtreeFlags;\n  if (\n    suspendedCommitReason & 8192 ||\n    16785408 === (suspendedCommitReason & 16785408)\n  ) {\n    suspendedCommitReason = {\n      stylesheets: null,\n      count: 0,\n      imgCount: 0,\n      imgBytes: 0,\n      suspenseyImages: [],\n      waitingForImages: !0,\n      waitingForViewTransition: !1,\n      unsuspend: noop$1\n    };\n    accumulateSuspenseyCommitOnFiber(\n      finishedWork,\n      lanes,\n      suspendedCommitReason\n    );\n    var timeoutOffset =\n      (lanes & 62914560) === lanes\n        ? globalMostRecentFallbackTime - now()\n        : (lanes & 4194048) === lanes\n          ? globalMostRecentTransitionTime - now()\n          : 0;\n    timeoutOffset = waitForCommitToBeReady(\n      suspendedCommitReason,\n      timeoutOffset\n    );\n    if (null !== timeoutOffset) {\n      pendingEffectsLanes = lanes;\n      root.cancelPendingCommit = timeoutOffset(\n        commitRoot.bind(\n          null,\n          root,\n          finishedWork,\n          lanes,\n          recoverableErrors,\n          transitions,\n          didIncludeRenderPhaseUpdate,\n          spawnedLane,\n          updatedLanes,\n          suspendedRetryLanes,\n          exitStatus,\n          suspendedCommitReason,\n          null,\n          completedRenderStartTime,\n          completedRenderEndTime\n        )\n      );\n      markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);\n      return;\n    }\n  }\n  commitRoot(\n    root,\n    finishedWork,\n    lanes,\n    recoverableErrors,\n    transitions,\n    didIncludeRenderPhaseUpdate,\n    spawnedLane,\n    updatedLanes,\n    suspendedRetryLanes\n  );\n}\nfunction isRenderConsistentWithExternalStores(finishedWork) {\n  for (var node = finishedWork; ; ) {\n    var tag = node.tag;\n    if (\n      (0 === tag || 11 === tag || 15 === tag) &&\n      node.flags & 16384 &&\n      ((tag = node.updateQueue),\n      null !== tag && ((tag = tag.stores), null !== tag))\n    )\n      for (var i = 0; i < tag.length; i++) {\n        var check = tag[i],\n          getSnapshot = check.getSnapshot;\n        check = check.value;\n        try {\n          if (!objectIs(getSnapshot(), check)) return !1;\n        } catch (error) {\n          return !1;\n        }\n      }\n    tag = node.child;\n    if (node.subtreeFlags & 16384 && null !== tag)\n      (tag.return = node), (node = tag);\n    else {\n      if (node === finishedWork) break;\n      for (; null === node.sibling; ) {\n        if (null === node.return || node.return === finishedWork) return !0;\n        node = node.return;\n      }\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  }\n  return !0;\n}\nfunction markRootSuspended(\n  root,\n  suspendedLanes,\n  spawnedLane,\n  didAttemptEntireTree\n) {\n  suspendedLanes &= ~workInProgressRootPingedLanes;\n  suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n  root.suspendedLanes |= suspendedLanes;\n  root.pingedLanes &= ~suspendedLanes;\n  didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n  didAttemptEntireTree = root.expirationTimes;\n  for (var lanes = suspendedLanes; 0 < lanes; ) {\n    var index$6 = 31 - clz32(lanes),\n      lane = 1 << index$6;\n    didAttemptEntireTree[index$6] = -1;\n    lanes &= ~lane;\n  }\n  0 !== spawnedLane &&\n    markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n}\nfunction flushSyncWork$1() {\n  return 0 === (executionContext & 6)\n    ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n    : !0;\n}\nfunction resetWorkInProgressStack() {\n  if (null !== workInProgress) {\n    if (0 === workInProgressSuspendedReason)\n      var interruptedWork = workInProgress.return;\n    else\n      (interruptedWork = workInProgress),\n        (lastContextDependency = currentlyRenderingFiber$1 = null),\n        resetHooksOnUnwind(interruptedWork),\n        (thenableState$1 = null),\n        (thenableIndexCounter$1 = 0),\n        (interruptedWork = workInProgress);\n    for (; null !== interruptedWork; )\n      unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n        (interruptedWork = interruptedWork.return);\n    workInProgress = null;\n  }\n}\nfunction prepareFreshStack(root, lanes) {\n  var timeoutHandle = root.timeoutHandle;\n  -1 !== timeoutHandle &&\n    ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));\n  timeoutHandle = root.cancelPendingCommit;\n  null !== timeoutHandle &&\n    ((root.cancelPendingCommit = null), timeoutHandle());\n  pendingEffectsLanes = 0;\n  resetWorkInProgressStack();\n  workInProgressRoot = root;\n  workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n  workInProgressRootRenderLanes = lanes;\n  workInProgressSuspendedReason = 0;\n  workInProgressThrownValue = null;\n  workInProgressRootDidSkipSuspendedSiblings = !1;\n  workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n  workInProgressRootDidAttachPingListener = !1;\n  workInProgressSuspendedRetryLanes =\n    workInProgressDeferredLane =\n    workInProgressRootPingedLanes =\n    workInProgressRootInterleavedUpdatedLanes =\n    workInProgressRootSkippedLanes =\n    workInProgressRootExitStatus =\n      0;\n  workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n    null;\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n  0 !== (lanes & 8) && (lanes |= lanes & 32);\n  var allEntangledLanes = root.entangledLanes;\n  if (0 !== allEntangledLanes)\n    for (\n      root = root.entanglements, allEntangledLanes &= lanes;\n      0 < allEntangledLanes;\n\n    ) {\n      var index$4 = 31 - clz32(allEntangledLanes),\n        lane = 1 << index$4;\n      lanes |= root[index$4];\n      allEntangledLanes &= ~lane;\n    }\n  entangledRenderLanes = lanes;\n  finishQueueingConcurrentUpdates();\n  return timeoutHandle;\n}\nfunction handleThrow(root, thrownValue) {\n  currentlyRenderingFiber = null;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  thrownValue === SuspenseException || thrownValue === SuspenseActionException\n    ? ((thrownValue = getSuspendedThenable()),\n      (workInProgressSuspendedReason = 3))\n    : thrownValue === SuspenseyCommitException\n      ? ((thrownValue = getSuspendedThenable()),\n        (workInProgressSuspendedReason = 4))\n      : (workInProgressSuspendedReason =\n          thrownValue === SelectiveHydrationException\n            ? 8\n            : null !== thrownValue &&\n                \"object\" === typeof thrownValue &&\n                \"function\" === typeof thrownValue.then\n              ? 6\n              : 1);\n  workInProgressThrownValue = thrownValue;\n  null === workInProgress &&\n    ((workInProgressRootExitStatus = 1),\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    ));\n}\nfunction shouldRemainOnPreviousScreen() {\n  var handler = suspenseHandlerStackCursor.current;\n  return null === handler\n    ? !0\n    : (workInProgressRootRenderLanes & 4194048) ===\n        workInProgressRootRenderLanes\n      ? null === shellBoundary\n        ? !0\n        : !1\n      : (workInProgressRootRenderLanes & 62914560) ===\n            workInProgressRootRenderLanes ||\n          0 !== (workInProgressRootRenderLanes & 536870912)\n        ? handler === shellBoundary\n        : !1;\n}\nfunction pushDispatcher() {\n  var prevDispatcher = ReactSharedInternals.H;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n}\nfunction pushAsyncDispatcher() {\n  var prevAsyncDispatcher = ReactSharedInternals.A;\n  ReactSharedInternals.A = DefaultAsyncDispatcher;\n  return prevAsyncDispatcher;\n}\nfunction renderDidSuspendDelayIfPossible() {\n  workInProgressRootExitStatus = 4;\n  workInProgressRootDidSkipSuspendedSiblings ||\n    ((workInProgressRootRenderLanes & 4194048) !==\n      workInProgressRootRenderLanes &&\n      null !== suspenseHandlerStackCursor.current) ||\n    (workInProgressRootIsPrerendering = !0);\n  (0 === (workInProgressRootSkippedLanes & 134217727) &&\n    0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n    null === workInProgressRoot ||\n    markRootSuspended(\n      workInProgressRoot,\n      workInProgressRootRenderLanes,\n      workInProgressDeferredLane,\n      !1\n    );\n}\nfunction renderRootSync(root, lanes, shouldYieldForPrerendering) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes)\n    (workInProgressTransitions = null), prepareFreshStack(root, lanes);\n  lanes = !1;\n  var exitStatus = workInProgressRootExitStatus;\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        var unitOfWork = workInProgress,\n          thrownValue = workInProgressThrownValue;\n        switch (workInProgressSuspendedReason) {\n          case 8:\n            resetWorkInProgressStack();\n            exitStatus = 6;\n            break a;\n          case 3:\n          case 2:\n          case 9:\n          case 6:\n            null === suspenseHandlerStackCursor.current && (lanes = !0);\n            var reason = workInProgressSuspendedReason;\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n            if (\n              shouldYieldForPrerendering &&\n              workInProgressRootIsPrerendering\n            ) {\n              exitStatus = 0;\n              break a;\n            }\n            break;\n          default:\n            (reason = workInProgressSuspendedReason),\n              (workInProgressSuspendedReason = 0),\n              (workInProgressThrownValue = null),\n              throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n        }\n      }\n      workLoopSync();\n      exitStatus = workInProgressRootExitStatus;\n      break;\n    } catch (thrownValue$165) {\n      handleThrow(root, thrownValue$165);\n    }\n  while (1);\n  lanes && root.shellSuspendCounter++;\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  executionContext = prevExecutionContext;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  null === workInProgress &&\n    ((workInProgressRoot = null),\n    (workInProgressRootRenderLanes = 0),\n    finishQueueingConcurrentUpdates());\n  return exitStatus;\n}\nfunction workLoopSync() {\n  for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n}\nfunction renderRootConcurrent(root, lanes) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes\n    ? ((workInProgressTransitions = null),\n      (workInProgressRootRenderTargetTime = now() + 500),\n      prepareFreshStack(root, lanes))\n    : (workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n        root,\n        lanes\n      ));\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        lanes = workInProgress;\n        var thrownValue = workInProgressThrownValue;\n        b: switch (workInProgressSuspendedReason) {\n          case 1:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 1);\n            break;\n          case 2:\n          case 9:\n            if (isThenableResolved(thrownValue)) {\n              workInProgressSuspendedReason = 0;\n              workInProgressThrownValue = null;\n              replaySuspendedUnitOfWork(lanes);\n              break;\n            }\n            lanes = function () {\n              (2 !== workInProgressSuspendedReason &&\n                9 !== workInProgressSuspendedReason) ||\n                workInProgressRoot !== root ||\n                (workInProgressSuspendedReason = 7);\n              ensureRootIsScheduled(root);\n            };\n            thrownValue.then(lanes, lanes);\n            break a;\n          case 3:\n            workInProgressSuspendedReason = 7;\n            break a;\n          case 4:\n            workInProgressSuspendedReason = 5;\n            break a;\n          case 7:\n            isThenableResolved(thrownValue)\n              ? ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                replaySuspendedUnitOfWork(lanes))\n              : ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                throwAndUnwindWorkLoop(root, lanes, thrownValue, 7));\n            break;\n          case 5:\n            var resource = null;\n            switch (workInProgress.tag) {\n              case 26:\n                resource = workInProgress.memoizedState;\n              case 5:\n              case 27:\n                var hostFiber = workInProgress;\n                if (\n                  resource\n                    ? preloadResource(resource)\n                    : hostFiber.stateNode.complete\n                ) {\n                  workInProgressSuspendedReason = 0;\n                  workInProgressThrownValue = null;\n                  var sibling = hostFiber.sibling;\n                  if (null !== sibling) workInProgress = sibling;\n                  else {\n                    var returnFiber = hostFiber.return;\n                    null !== returnFiber\n                      ? ((workInProgress = returnFiber),\n                        completeUnitOfWork(returnFiber))\n                      : (workInProgress = null);\n                  }\n                  break b;\n                }\n            }\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 5);\n            break;\n          case 6:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 6);\n            break;\n          case 8:\n            resetWorkInProgressStack();\n            workInProgressRootExitStatus = 6;\n            break a;\n          default:\n            throw Error(formatProdErrorMessage(462));\n        }\n      }\n      workLoopConcurrentByScheduler();\n      break;\n    } catch (thrownValue$167) {\n      handleThrow(root, thrownValue$167);\n    }\n  while (1);\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  executionContext = prevExecutionContext;\n  if (null !== workInProgress) return 0;\n  workInProgressRoot = null;\n  workInProgressRootRenderLanes = 0;\n  finishQueueingConcurrentUpdates();\n  return workInProgressRootExitStatus;\n}\nfunction workLoopConcurrentByScheduler() {\n  for (; null !== workInProgress && !shouldYield(); )\n    performUnitOfWork(workInProgress);\n}\nfunction performUnitOfWork(unitOfWork) {\n  var next = beginWork(unitOfWork.alternate, unitOfWork, entangledRenderLanes);\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction replaySuspendedUnitOfWork(unitOfWork) {\n  var next = unitOfWork;\n  var current = next.alternate;\n  switch (next.tag) {\n    case 15:\n    case 0:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type,\n        void 0,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 11:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type.render,\n        next.ref,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 5:\n      resetHooksOnUnwind(next);\n    default:\n      unwindInterruptedWork(current, next),\n        (next = workInProgress =\n          resetWorkInProgress(next, entangledRenderLanes)),\n        (next = beginWork(current, next, entangledRenderLanes));\n  }\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction throwAndUnwindWorkLoop(\n  root,\n  unitOfWork,\n  thrownValue,\n  suspendedReason\n) {\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  resetHooksOnUnwind(unitOfWork);\n  thenableState$1 = null;\n  thenableIndexCounter$1 = 0;\n  var returnFiber = unitOfWork.return;\n  try {\n    if (\n      throwException(\n        root,\n        returnFiber,\n        unitOfWork,\n        thrownValue,\n        workInProgressRootRenderLanes\n      )\n    ) {\n      workInProgressRootExitStatus = 1;\n      logUncaughtError(\n        root,\n        createCapturedValueAtFiber(thrownValue, root.current)\n      );\n      workInProgress = null;\n      return;\n    }\n  } catch (error) {\n    if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n    workInProgressRootExitStatus = 1;\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    );\n    workInProgress = null;\n    return;\n  }\n  if (unitOfWork.flags & 32768) {\n    if (isHydrating || 1 === suspendedReason) root = !0;\n    else if (\n      workInProgressRootIsPrerendering ||\n      0 !== (workInProgressRootRenderLanes & 536870912)\n    )\n      root = !1;\n    else if (\n      ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n      2 === suspendedReason ||\n        9 === suspendedReason ||\n        3 === suspendedReason ||\n        6 === suspendedReason)\n    )\n      (suspendedReason = suspenseHandlerStackCursor.current),\n        null !== suspendedReason &&\n          13 === suspendedReason.tag &&\n          (suspendedReason.flags |= 16384);\n    unwindUnitOfWork(unitOfWork, root);\n  } else completeUnitOfWork(unitOfWork);\n}\nfunction completeUnitOfWork(unitOfWork) {\n  var completedWork = unitOfWork;\n  do {\n    if (0 !== (completedWork.flags & 32768)) {\n      unwindUnitOfWork(\n        completedWork,\n        workInProgressRootDidSkipSuspendedSiblings\n      );\n      return;\n    }\n    unitOfWork = completedWork.return;\n    var next = completeWork(\n      completedWork.alternate,\n      completedWork,\n      entangledRenderLanes\n    );\n    if (null !== next) {\n      workInProgress = next;\n      return;\n    }\n    completedWork = completedWork.sibling;\n    if (null !== completedWork) {\n      workInProgress = completedWork;\n      return;\n    }\n    workInProgress = completedWork = unitOfWork;\n  } while (null !== completedWork);\n  0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);\n}\nfunction unwindUnitOfWork(unitOfWork, skipSiblings) {\n  do {\n    var next = unwindWork(unitOfWork.alternate, unitOfWork);\n    if (null !== next) {\n      next.flags &= 32767;\n      workInProgress = next;\n      return;\n    }\n    next = unitOfWork.return;\n    null !== next &&\n      ((next.flags |= 32768), (next.subtreeFlags = 0), (next.deletions = null));\n    if (\n      !skipSiblings &&\n      ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n    ) {\n      workInProgress = unitOfWork;\n      return;\n    }\n    workInProgress = unitOfWork = next;\n  } while (null !== unitOfWork);\n  workInProgressRootExitStatus = 6;\n  workInProgress = null;\n}\nfunction commitRoot(\n  root,\n  finishedWork,\n  lanes,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  root.cancelPendingCommit = null;\n  do flushPendingEffects();\n  while (0 !== pendingEffectsStatus);\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  if (null !== finishedWork) {\n    if (finishedWork === root.current) throw Error(formatProdErrorMessage(177));\n    didIncludeRenderPhaseUpdate = finishedWork.lanes | finishedWork.childLanes;\n    didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;\n    markRootFinished(\n      root,\n      lanes,\n      didIncludeRenderPhaseUpdate,\n      spawnedLane,\n      updatedLanes,\n      suspendedRetryLanes\n    );\n    root === workInProgressRoot &&\n      ((workInProgress = workInProgressRoot = null),\n      (workInProgressRootRenderLanes = 0));\n    pendingFinishedWork = finishedWork;\n    pendingEffectsRoot = root;\n    pendingEffectsLanes = lanes;\n    pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;\n    pendingPassiveTransitions = transitions;\n    pendingRecoverableErrors = recoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? ((root.callbackNode = null),\n        (root.callbackPriority = 0),\n        scheduleCallback$1(NormalPriority$1, function () {\n          flushPassiveEffects();\n          return null;\n        }))\n      : ((root.callbackNode = null), (root.callbackPriority = 0));\n    recoverableErrors = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {\n      recoverableErrors = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      transitions = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      spawnedLane = executionContext;\n      executionContext |= 4;\n      try {\n        commitBeforeMutationEffects(root, finishedWork, lanes);\n      } finally {\n        (executionContext = spawnedLane),\n          (ReactDOMSharedInternals.p = transitions),\n          (ReactSharedInternals.T = recoverableErrors);\n      }\n    }\n    pendingEffectsStatus = 1;\n    flushMutationEffects();\n    flushLayoutEffects();\n    flushSpawnedWork();\n  }\n}\nfunction flushMutationEffects() {\n  if (1 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || rootMutationHasEffect) {\n      rootMutationHasEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitMutationEffectsOnFiber(finishedWork, root);\n        var priorSelectionInformation = selectionInformation,\n          curFocusedElem = getActiveElementDeep(root.containerInfo),\n          priorFocusedElem = priorSelectionInformation.focusedElem,\n          priorSelectionRange = priorSelectionInformation.selectionRange;\n        if (\n          curFocusedElem !== priorFocusedElem &&\n          priorFocusedElem &&\n          priorFocusedElem.ownerDocument &&\n          containsNode(\n            priorFocusedElem.ownerDocument.documentElement,\n            priorFocusedElem\n          )\n        ) {\n          if (\n            null !== priorSelectionRange &&\n            hasSelectionCapabilities(priorFocusedElem)\n          ) {\n            var start = priorSelectionRange.start,\n              end = priorSelectionRange.end;\n            void 0 === end && (end = start);\n            if (\"selectionStart\" in priorFocusedElem)\n              (priorFocusedElem.selectionStart = start),\n                (priorFocusedElem.selectionEnd = Math.min(\n                  end,\n                  priorFocusedElem.value.length\n                ));\n            else {\n              var doc = priorFocusedElem.ownerDocument || document,\n                win = (doc && doc.defaultView) || window;\n              if (win.getSelection) {\n                var selection = win.getSelection(),\n                  length = priorFocusedElem.textContent.length,\n                  start$jscomp$0 = Math.min(priorSelectionRange.start, length),\n                  end$jscomp$0 =\n                    void 0 === priorSelectionRange.end\n                      ? start$jscomp$0\n                      : Math.min(priorSelectionRange.end, length);\n                !selection.extend &&\n                  start$jscomp$0 > end$jscomp$0 &&\n                  ((curFocusedElem = end$jscomp$0),\n                  (end$jscomp$0 = start$jscomp$0),\n                  (start$jscomp$0 = curFocusedElem));\n                var startMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    start$jscomp$0\n                  ),\n                  endMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    end$jscomp$0\n                  );\n                if (\n                  startMarker &&\n                  endMarker &&\n                  (1 !== selection.rangeCount ||\n                    selection.anchorNode !== startMarker.node ||\n                    selection.anchorOffset !== startMarker.offset ||\n                    selection.focusNode !== endMarker.node ||\n                    selection.focusOffset !== endMarker.offset)\n                ) {\n                  var range = doc.createRange();\n                  range.setStart(startMarker.node, startMarker.offset);\n                  selection.removeAllRanges();\n                  start$jscomp$0 > end$jscomp$0\n                    ? (selection.addRange(range),\n                      selection.extend(endMarker.node, endMarker.offset))\n                    : (range.setEnd(endMarker.node, endMarker.offset),\n                      selection.addRange(range));\n                }\n              }\n            }\n          }\n          doc = [];\n          for (\n            selection = priorFocusedElem;\n            (selection = selection.parentNode);\n\n          )\n            1 === selection.nodeType &&\n              doc.push({\n                element: selection,\n                left: selection.scrollLeft,\n                top: selection.scrollTop\n              });\n          \"function\" === typeof priorFocusedElem.focus &&\n            priorFocusedElem.focus();\n          for (\n            priorFocusedElem = 0;\n            priorFocusedElem < doc.length;\n            priorFocusedElem++\n          ) {\n            var info = doc[priorFocusedElem];\n            info.element.scrollLeft = info.left;\n            info.element.scrollTop = info.top;\n          }\n        }\n        _enabled = !!eventsEnabled;\n        selectionInformation = eventsEnabled = null;\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootMutationHasEffect);\n      }\n    }\n    root.current = finishedWork;\n    pendingEffectsStatus = 2;\n  }\n}\nfunction flushLayoutEffects() {\n  if (2 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);\n    if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {\n      rootHasLayoutEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork);\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootHasLayoutEffect);\n      }\n    }\n    pendingEffectsStatus = 3;\n  }\n}\nfunction flushSpawnedWork() {\n  if (4 === pendingEffectsStatus || 3 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    requestPaint();\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      lanes = pendingEffectsLanes,\n      recoverableErrors = pendingRecoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? (pendingEffectsStatus = 5)\n      : ((pendingEffectsStatus = 0),\n        (pendingFinishedWork = pendingEffectsRoot = null),\n        releaseRootPooledCache(root, root.pendingLanes));\n    var remainingLanes = root.pendingLanes;\n    0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n    lanesToEventPriority(lanes);\n    finishedWork = finishedWork.stateNode;\n    if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n      try {\n        injectedHook.onCommitFiberRoot(\n          rendererID,\n          finishedWork,\n          void 0,\n          128 === (finishedWork.current.flags & 128)\n        );\n      } catch (err) {}\n    if (null !== recoverableErrors) {\n      finishedWork = ReactSharedInternals.T;\n      remainingLanes = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      ReactSharedInternals.T = null;\n      try {\n        for (\n          var onRecoverableError = root.onRecoverableError, i = 0;\n          i < recoverableErrors.length;\n          i++\n        ) {\n          var recoverableError = recoverableErrors[i];\n          onRecoverableError(recoverableError.value, {\n            componentStack: recoverableError.stack\n          });\n        }\n      } finally {\n        (ReactSharedInternals.T = finishedWork),\n          (ReactDOMSharedInternals.p = remainingLanes);\n      }\n    }\n    0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n    ensureRootIsScheduled(root);\n    remainingLanes = root.pendingLanes;\n    0 !== (lanes & 261930) && 0 !== (remainingLanes & 42)\n      ? root === rootWithNestedUpdates\n        ? nestedUpdateCount++\n        : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n      : (nestedUpdateCount = 0);\n    flushSyncWorkAcrossRoots_impl(0, !1);\n  }\n}\nfunction releaseRootPooledCache(root, remainingLanes) {\n  0 === (root.pooledCacheLanes &= remainingLanes) &&\n    ((remainingLanes = root.pooledCache),\n    null != remainingLanes &&\n      ((root.pooledCache = null), releaseCache(remainingLanes)));\n}\nfunction flushPendingEffects() {\n  flushMutationEffects();\n  flushLayoutEffects();\n  flushSpawnedWork();\n  return flushPassiveEffects();\n}\nfunction flushPassiveEffects() {\n  if (5 !== pendingEffectsStatus) return !1;\n  var root = pendingEffectsRoot,\n    remainingLanes = pendingEffectsRemainingLanes;\n  pendingEffectsRemainingLanes = 0;\n  var renderPriority = lanesToEventPriority(pendingEffectsLanes),\n    prevTransition = ReactSharedInternals.T,\n    previousPriority = ReactDOMSharedInternals.p;\n  try {\n    ReactDOMSharedInternals.p = 32 > renderPriority ? 32 : renderPriority;\n    ReactSharedInternals.T = null;\n    renderPriority = pendingPassiveTransitions;\n    pendingPassiveTransitions = null;\n    var root$jscomp$0 = pendingEffectsRoot,\n      lanes = pendingEffectsLanes;\n    pendingEffectsStatus = 0;\n    pendingFinishedWork = pendingEffectsRoot = null;\n    pendingEffectsLanes = 0;\n    if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(331));\n    var prevExecutionContext = executionContext;\n    executionContext |= 4;\n    commitPassiveUnmountOnFiber(root$jscomp$0.current);\n    commitPassiveMountOnFiber(\n      root$jscomp$0,\n      root$jscomp$0.current,\n      lanes,\n      renderPriority\n    );\n    executionContext = prevExecutionContext;\n    flushSyncWorkAcrossRoots_impl(0, !1);\n    if (\n      injectedHook &&\n      \"function\" === typeof injectedHook.onPostCommitFiberRoot\n    )\n      try {\n        injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n      } catch (err) {}\n    return !0;\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition),\n      releaseRootPooledCache(root, remainingLanes);\n  }\n}\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n  sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n  sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n  rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n  null !== rootFiber &&\n    (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n}\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {\n  if (3 === sourceFiber.tag)\n    captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n  else\n    for (; null !== nearestMountedAncestor; ) {\n      if (3 === nearestMountedAncestor.tag) {\n        captureCommitPhaseErrorOnRoot(\n          nearestMountedAncestor,\n          sourceFiber,\n          error\n        );\n        break;\n      } else if (1 === nearestMountedAncestor.tag) {\n        var instance = nearestMountedAncestor.stateNode;\n        if (\n          \"function\" ===\n            typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n          (\"function\" === typeof instance.componentDidCatch &&\n            (null === legacyErrorBoundariesThatAlreadyFailed ||\n              !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n        ) {\n          sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n          error = createClassErrorUpdate(2);\n          instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n          null !== instance &&\n            (initializeClassErrorUpdate(\n              error,\n              instance,\n              nearestMountedAncestor,\n              sourceFiber\n            ),\n            markRootUpdated$1(instance, 2),\n            ensureRootIsScheduled(instance));\n          break;\n        }\n      }\n      nearestMountedAncestor = nearestMountedAncestor.return;\n    }\n}\nfunction attachPingListener(root, wakeable, lanes) {\n  var pingCache = root.pingCache;\n  if (null === pingCache) {\n    pingCache = root.pingCache = new PossiblyWeakMap();\n    var threadIDs = new Set();\n    pingCache.set(wakeable, threadIDs);\n  } else\n    (threadIDs = pingCache.get(wakeable)),\n      void 0 === threadIDs &&\n        ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n  threadIDs.has(lanes) ||\n    ((workInProgressRootDidAttachPingListener = !0),\n    threadIDs.add(lanes),\n    (root = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n    wakeable.then(root, root));\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n  var pingCache = root.pingCache;\n  null !== pingCache && pingCache.delete(wakeable);\n  root.pingedLanes |= root.suspendedLanes & pingedLanes;\n  root.warmLanes &= ~pingedLanes;\n  workInProgressRoot === root &&\n    (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n    (4 === workInProgressRootExitStatus ||\n    (3 === workInProgressRootExitStatus &&\n      (workInProgressRootRenderLanes & 62914560) ===\n        workInProgressRootRenderLanes &&\n      300 > now() - globalMostRecentFallbackTime)\n      ? 0 === (executionContext & 2) && prepareFreshStack(root, 0)\n      : (workInProgressRootPingedLanes |= pingedLanes),\n    workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n      (workInProgressSuspendedRetryLanes = 0));\n  ensureRootIsScheduled(root);\n}\nfunction retryTimedOutBoundary(boundaryFiber, retryLane) {\n  0 === retryLane && (retryLane = claimNextRetryLane());\n  boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n  null !== boundaryFiber &&\n    (markRootUpdated$1(boundaryFiber, retryLane),\n    ensureRootIsScheduled(boundaryFiber));\n}\nfunction retryDehydratedSuspenseBoundary(boundaryFiber) {\n  var suspenseState = boundaryFiber.memoizedState,\n    retryLane = 0;\n  null !== suspenseState && (retryLane = suspenseState.retryLane);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n  var retryLane = 0;\n  switch (boundaryFiber.tag) {\n    case 31:\n    case 13:\n      var retryCache = boundaryFiber.stateNode;\n      var suspenseState = boundaryFiber.memoizedState;\n      null !== suspenseState && (retryLane = suspenseState.retryLane);\n      break;\n    case 19:\n      retryCache = boundaryFiber.stateNode;\n      break;\n    case 22:\n      retryCache = boundaryFiber.stateNode._retryCache;\n      break;\n    default:\n      throw Error(formatProdErrorMessage(314));\n  }\n  null !== retryCache && retryCache.delete(wakeable);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction scheduleCallback$1(priorityLevel, callback) {\n  return scheduleCallback$3(priorityLevel, callback);\n}\nvar firstScheduledRoot = null,\n  lastScheduledRoot = null,\n  didScheduleMicrotask = !1,\n  mightHavePendingSyncWork = !1,\n  isFlushingWork = !1,\n  currentEventTransitionLane = 0;\nfunction ensureRootIsScheduled(root) {\n  root !== lastScheduledRoot &&\n    null === root.next &&\n    (null === lastScheduledRoot\n      ? (firstScheduledRoot = lastScheduledRoot = root)\n      : (lastScheduledRoot = lastScheduledRoot.next = root));\n  mightHavePendingSyncWork = !0;\n  didScheduleMicrotask ||\n    ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());\n}\nfunction flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n  if (!isFlushingWork && mightHavePendingSyncWork) {\n    isFlushingWork = !0;\n    do {\n      var didPerformSomeWork = !1;\n      for (var root$170 = firstScheduledRoot; null !== root$170; ) {\n        if (!onlyLegacy)\n          if (0 !== syncTransitionLanes) {\n            var pendingLanes = root$170.pendingLanes;\n            if (0 === pendingLanes) var JSCompiler_inline_result = 0;\n            else {\n              var suspendedLanes = root$170.suspendedLanes,\n                pingedLanes = root$170.pingedLanes;\n              JSCompiler_inline_result =\n                (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n              JSCompiler_inline_result &=\n                pendingLanes & ~(suspendedLanes & ~pingedLanes);\n              JSCompiler_inline_result =\n                JSCompiler_inline_result & 201326741\n                  ? (JSCompiler_inline_result & 201326741) | 1\n                  : JSCompiler_inline_result\n                    ? JSCompiler_inline_result | 2\n                    : 0;\n            }\n            0 !== JSCompiler_inline_result &&\n              ((didPerformSomeWork = !0),\n              performSyncWorkOnRoot(root$170, JSCompiler_inline_result));\n          } else\n            (JSCompiler_inline_result = workInProgressRootRenderLanes),\n              (JSCompiler_inline_result = getNextLanes(\n                root$170,\n                root$170 === workInProgressRoot ? JSCompiler_inline_result : 0,\n                null !== root$170.cancelPendingCommit ||\n                  -1 !== root$170.timeoutHandle\n              )),\n              0 === (JSCompiler_inline_result & 3) ||\n                checkIfRootIsPrerendering(root$170, JSCompiler_inline_result) ||\n                ((didPerformSomeWork = !0),\n                performSyncWorkOnRoot(root$170, JSCompiler_inline_result));\n        root$170 = root$170.next;\n      }\n    } while (didPerformSomeWork);\n    isFlushingWork = !1;\n  }\n}\nfunction processRootScheduleInImmediateTask() {\n  processRootScheduleInMicrotask();\n}\nfunction processRootScheduleInMicrotask() {\n  mightHavePendingSyncWork = didScheduleMicrotask = !1;\n  var syncTransitionLanes = 0;\n  0 !== currentEventTransitionLane &&\n    shouldAttemptEagerTransition() &&\n    (syncTransitionLanes = currentEventTransitionLane);\n  for (\n    var currentTime = now(), prev = null, root = firstScheduledRoot;\n    null !== root;\n\n  ) {\n    var next = root.next,\n      nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n    if (0 === nextLanes)\n      (root.next = null),\n        null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n        null === next && (lastScheduledRoot = prev);\n    else if (\n      ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n    )\n      mightHavePendingSyncWork = !0;\n    root = next;\n  }\n  (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus) ||\n    flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n  0 !== currentEventTransitionLane && (currentEventTransitionLane = 0);\n}\nfunction scheduleTaskForRootDuringMicrotask(root, currentTime) {\n  for (\n    var suspendedLanes = root.suspendedLanes,\n      pingedLanes = root.pingedLanes,\n      expirationTimes = root.expirationTimes,\n      lanes = root.pendingLanes & -62914561;\n    0 < lanes;\n\n  ) {\n    var index$5 = 31 - clz32(lanes),\n      lane = 1 << index$5,\n      expirationTime = expirationTimes[index$5];\n    if (-1 === expirationTime) {\n      if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n        expirationTimes[index$5] = computeExpirationTime(lane, currentTime);\n    } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n    lanes &= ~lane;\n  }\n  currentTime = workInProgressRoot;\n  suspendedLanes = workInProgressRootRenderLanes;\n  suspendedLanes = getNextLanes(\n    root,\n    root === currentTime ? suspendedLanes : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  pingedLanes = root.callbackNode;\n  if (\n    0 === suspendedLanes ||\n    (root === currentTime &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    return (\n      null !== pingedLanes &&\n        null !== pingedLanes &&\n        cancelCallback$1(pingedLanes),\n      (root.callbackNode = null),\n      (root.callbackPriority = 0)\n    );\n  if (\n    0 === (suspendedLanes & 3) ||\n    checkIfRootIsPrerendering(root, suspendedLanes)\n  ) {\n    currentTime = suspendedLanes & -suspendedLanes;\n    if (currentTime === root.callbackPriority) return currentTime;\n    null !== pingedLanes && cancelCallback$1(pingedLanes);\n    switch (lanesToEventPriority(suspendedLanes)) {\n      case 2:\n      case 8:\n        suspendedLanes = UserBlockingPriority;\n        break;\n      case 32:\n        suspendedLanes = NormalPriority$1;\n        break;\n      case 268435456:\n        suspendedLanes = IdlePriority;\n        break;\n      default:\n        suspendedLanes = NormalPriority$1;\n    }\n    pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n    suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes);\n    root.callbackPriority = currentTime;\n    root.callbackNode = suspendedLanes;\n    return currentTime;\n  }\n  null !== pingedLanes && null !== pingedLanes && cancelCallback$1(pingedLanes);\n  root.callbackPriority = 2;\n  root.callbackNode = null;\n  return 2;\n}\nfunction performWorkOnRootViaSchedulerTask(root, didTimeout) {\n  if (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus)\n    return (root.callbackNode = null), (root.callbackPriority = 0), null;\n  var originalCallbackNode = root.callbackNode;\n  if (flushPendingEffects() && root.callbackNode !== originalCallbackNode)\n    return null;\n  var workInProgressRootRenderLanes$jscomp$0 = workInProgressRootRenderLanes;\n  workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n    root,\n    root === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n  performWorkOnRoot(root, workInProgressRootRenderLanes$jscomp$0, didTimeout);\n  scheduleTaskForRootDuringMicrotask(root, now());\n  return null != root.callbackNode && root.callbackNode === originalCallbackNode\n    ? performWorkOnRootViaSchedulerTask.bind(null, root)\n    : null;\n}\nfunction performSyncWorkOnRoot(root, lanes) {\n  if (flushPendingEffects()) return null;\n  performWorkOnRoot(root, lanes, !0);\n}\nfunction scheduleImmediateRootScheduleTask() {\n  scheduleMicrotask(function () {\n    0 !== (executionContext & 6)\n      ? scheduleCallback$3(\n          ImmediatePriority,\n          processRootScheduleInImmediateTask\n        )\n      : processRootScheduleInMicrotask();\n  });\n}\nfunction requestTransitionLane() {\n  if (0 === currentEventTransitionLane) {\n    var actionScopeLane = currentEntangledLane;\n    0 === actionScopeLane &&\n      ((actionScopeLane = nextTransitionUpdateLane),\n      (nextTransitionUpdateLane <<= 1),\n      0 === (nextTransitionUpdateLane & 261888) &&\n        (nextTransitionUpdateLane = 256));\n    currentEventTransitionLane = actionScopeLane;\n  }\n  return currentEventTransitionLane;\n}\nfunction coerceFormActionProp(actionProp) {\n  return null == actionProp ||\n    \"symbol\" === typeof actionProp ||\n    \"boolean\" === typeof actionProp\n    ? null\n    : \"function\" === typeof actionProp\n      ? actionProp\n      : sanitizeURL(\"\" + actionProp);\n}\nfunction createFormDataWithSubmitter(form, submitter) {\n  var temp = submitter.ownerDocument.createElement(\"input\");\n  temp.name = submitter.name;\n  temp.value = submitter.value;\n  form.id && temp.setAttribute(\"form\", form.id);\n  submitter.parentNode.insertBefore(temp, submitter);\n  form = new FormData(form);\n  temp.parentNode.removeChild(temp);\n  return form;\n}\nfunction extractEvents$1(\n  dispatchQueue,\n  domEventName,\n  maybeTargetInst,\n  nativeEvent,\n  nativeEventTarget\n) {\n  if (\n    \"submit\" === domEventName &&\n    maybeTargetInst &&\n    maybeTargetInst.stateNode === nativeEventTarget\n  ) {\n    var action = coerceFormActionProp(\n        (nativeEventTarget[internalPropsKey] || null).action\n      ),\n      submitter = nativeEvent.submitter;\n    submitter &&\n      ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n        ? coerceFormActionProp(domEventName.formAction)\n        : submitter.getAttribute(\"formAction\")),\n      null !== domEventName && ((action = domEventName), (submitter = null)));\n    var event = new SyntheticEvent(\n      \"action\",\n      \"action\",\n      null,\n      nativeEvent,\n      nativeEventTarget\n    );\n    dispatchQueue.push({\n      event: event,\n      listeners: [\n        {\n          instance: null,\n          listener: function () {\n            if (nativeEvent.defaultPrevented) {\n              if (0 !== currentEventTransitionLane) {\n                var formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget);\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  null,\n                  formData\n                );\n              }\n            } else\n              \"function\" === typeof action &&\n                (event.preventDefault(),\n                (formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget)),\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  action,\n                  formData\n                ));\n          },\n          currentTarget: nativeEventTarget\n        }\n      ]\n    });\n  }\n}\nfor (\n  var i$jscomp$inline_1577 = 0;\n  i$jscomp$inline_1577 < simpleEventPluginEvents.length;\n  i$jscomp$inline_1577++\n) {\n  var eventName$jscomp$inline_1578 =\n      simpleEventPluginEvents[i$jscomp$inline_1577],\n    domEventName$jscomp$inline_1579 =\n      eventName$jscomp$inline_1578.toLowerCase(),\n    capitalizedEvent$jscomp$inline_1580 =\n      eventName$jscomp$inline_1578[0].toUpperCase() +\n      eventName$jscomp$inline_1578.slice(1);\n  registerSimpleEvent(\n    domEventName$jscomp$inline_1579,\n    \"on\" + capitalizedEvent$jscomp$inline_1580\n  );\n}\nregisterSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\nregisterSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\nregisterSimpleEvent(ANIMATION_START, \"onAnimationStart\");\nregisterSimpleEvent(\"dblclick\", \"onDoubleClick\");\nregisterSimpleEvent(\"focusin\", \"onFocus\");\nregisterSimpleEvent(\"focusout\", \"onBlur\");\nregisterSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\nregisterSimpleEvent(TRANSITION_START, \"onTransitionStart\");\nregisterSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\nregisterSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\nregisterDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\nregisterDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\nregisterTwoPhaseEvent(\n  \"onChange\",\n  \"change click focusin focusout input keydown keyup selectionchange\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onSelect\",\n  \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n    \" \"\n  )\n);\nregisterTwoPhaseEvent(\"onBeforeInput\", [\n  \"compositionend\",\n  \"keypress\",\n  \"textInput\",\n  \"paste\"\n]);\nregisterTwoPhaseEvent(\n  \"onCompositionEnd\",\n  \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionStart\",\n  \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionUpdate\",\n  \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n);\nvar mediaEventTypes =\n    \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\n      \" \"\n    ),\n  nonDelegatedEvents = new Set(\n    \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n      .split(\" \")\n      .concat(mediaEventTypes)\n  );\nfunction processDispatchQueue(dispatchQueue, eventSystemFlags) {\n  eventSystemFlags = 0 !== (eventSystemFlags & 4);\n  for (var i = 0; i < dispatchQueue.length; i++) {\n    var _dispatchQueue$i = dispatchQueue[i],\n      event = _dispatchQueue$i.event;\n    _dispatchQueue$i = _dispatchQueue$i.listeners;\n    a: {\n      var previousInstance = void 0;\n      if (eventSystemFlags)\n        for (\n          var i$jscomp$0 = _dispatchQueue$i.length - 1;\n          0 <= i$jscomp$0;\n          i$jscomp$0--\n        ) {\n          var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n            instance = _dispatchListeners$i.instance,\n            currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n      else\n        for (\n          i$jscomp$0 = 0;\n          i$jscomp$0 < _dispatchQueue$i.length;\n          i$jscomp$0++\n        ) {\n          _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n          instance = _dispatchListeners$i.instance;\n          currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n    }\n  }\n}\nfunction listenToNonDelegatedEvent(domEventName, targetElement) {\n  var JSCompiler_inline_result = targetElement[internalEventHandlersKey];\n  void 0 === JSCompiler_inline_result &&\n    (JSCompiler_inline_result = targetElement[internalEventHandlersKey] =\n      new Set());\n  var listenerSetKey = domEventName + \"__bubble\";\n  JSCompiler_inline_result.has(listenerSetKey) ||\n    (addTrappedEventListener(targetElement, domEventName, 2, !1),\n    JSCompiler_inline_result.add(listenerSetKey));\n}\nfunction listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n  var eventSystemFlags = 0;\n  isCapturePhaseListener && (eventSystemFlags |= 4);\n  addTrappedEventListener(\n    target,\n    domEventName,\n    eventSystemFlags,\n    isCapturePhaseListener\n  );\n}\nvar listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2);\nfunction listenToAllSupportedEvents(rootContainerElement) {\n  if (!rootContainerElement[listeningMarker]) {\n    rootContainerElement[listeningMarker] = !0;\n    allNativeEvents.forEach(function (domEventName) {\n      \"selectionchange\" !== domEventName &&\n        (nonDelegatedEvents.has(domEventName) ||\n          listenToNativeEvent(domEventName, !1, rootContainerElement),\n        listenToNativeEvent(domEventName, !0, rootContainerElement));\n    });\n    var ownerDocument =\n      9 === rootContainerElement.nodeType\n        ? rootContainerElement\n        : rootContainerElement.ownerDocument;\n    null === ownerDocument ||\n      ownerDocument[listeningMarker] ||\n      ((ownerDocument[listeningMarker] = !0),\n      listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n  }\n}\nfunction addTrappedEventListener(\n  targetContainer,\n  domEventName,\n  eventSystemFlags,\n  isCapturePhaseListener\n) {\n  switch (getEventPriority(domEventName)) {\n    case 2:\n      var listenerWrapper = dispatchDiscreteEvent;\n      break;\n    case 8:\n      listenerWrapper = dispatchContinuousEvent;\n      break;\n    default:\n      listenerWrapper = dispatchEvent;\n  }\n  eventSystemFlags = listenerWrapper.bind(\n    null,\n    domEventName,\n    eventSystemFlags,\n    targetContainer\n  );\n  listenerWrapper = void 0;\n  !passiveBrowserEventsSupported ||\n    (\"touchstart\" !== domEventName &&\n      \"touchmove\" !== domEventName &&\n      \"wheel\" !== domEventName) ||\n    (listenerWrapper = !0);\n  isCapturePhaseListener\n    ? void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          capture: !0,\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n    : void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !1);\n}\nfunction dispatchEventForPluginEventSystem(\n  domEventName,\n  eventSystemFlags,\n  nativeEvent,\n  targetInst$jscomp$0,\n  targetContainer\n) {\n  var ancestorInst = targetInst$jscomp$0;\n  if (\n    0 === (eventSystemFlags & 1) &&\n    0 === (eventSystemFlags & 2) &&\n    null !== targetInst$jscomp$0\n  )\n    a: for (;;) {\n      if (null === targetInst$jscomp$0) return;\n      var nodeTag = targetInst$jscomp$0.tag;\n      if (3 === nodeTag || 4 === nodeTag) {\n        var container = targetInst$jscomp$0.stateNode.containerInfo;\n        if (container === targetContainer) break;\n        if (4 === nodeTag)\n          for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n            var grandTag = nodeTag.tag;\n            if (\n              (3 === grandTag || 4 === grandTag) &&\n              nodeTag.stateNode.containerInfo === targetContainer\n            )\n              return;\n            nodeTag = nodeTag.return;\n          }\n        for (; null !== container; ) {\n          nodeTag = getClosestInstanceFromNode(container);\n          if (null === nodeTag) return;\n          grandTag = nodeTag.tag;\n          if (\n            5 === grandTag ||\n            6 === grandTag ||\n            26 === grandTag ||\n            27 === grandTag\n          ) {\n            targetInst$jscomp$0 = ancestorInst = nodeTag;\n            continue a;\n          }\n          container = container.parentNode;\n        }\n      }\n      targetInst$jscomp$0 = targetInst$jscomp$0.return;\n    }\n  batchedUpdates$1(function () {\n    var targetInst = ancestorInst,\n      nativeEventTarget = getEventTarget(nativeEvent),\n      dispatchQueue = [];\n    a: {\n      var reactName = topLevelEventsToReactNames.get(domEventName);\n      if (void 0 !== reactName) {\n        var SyntheticEventCtor = SyntheticEvent,\n          reactEventType = domEventName;\n        switch (domEventName) {\n          case \"keypress\":\n            if (0 === getEventCharCode(nativeEvent)) break a;\n          case \"keydown\":\n          case \"keyup\":\n            SyntheticEventCtor = SyntheticKeyboardEvent;\n            break;\n          case \"focusin\":\n            reactEventType = \"focus\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"focusout\":\n            reactEventType = \"blur\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"beforeblur\":\n          case \"afterblur\":\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"click\":\n            if (2 === nativeEvent.button) break a;\n          case \"auxclick\":\n          case \"dblclick\":\n          case \"mousedown\":\n          case \"mousemove\":\n          case \"mouseup\":\n          case \"mouseout\":\n          case \"mouseover\":\n          case \"contextmenu\":\n            SyntheticEventCtor = SyntheticMouseEvent;\n            break;\n          case \"drag\":\n          case \"dragend\":\n          case \"dragenter\":\n          case \"dragexit\":\n          case \"dragleave\":\n          case \"dragover\":\n          case \"dragstart\":\n          case \"drop\":\n            SyntheticEventCtor = SyntheticDragEvent;\n            break;\n          case \"touchcancel\":\n          case \"touchend\":\n          case \"touchmove\":\n          case \"touchstart\":\n            SyntheticEventCtor = SyntheticTouchEvent;\n            break;\n          case ANIMATION_END:\n          case ANIMATION_ITERATION:\n          case ANIMATION_START:\n            SyntheticEventCtor = SyntheticAnimationEvent;\n            break;\n          case TRANSITION_END:\n            SyntheticEventCtor = SyntheticTransitionEvent;\n            break;\n          case \"scroll\":\n          case \"scrollend\":\n            SyntheticEventCtor = SyntheticUIEvent;\n            break;\n          case \"wheel\":\n            SyntheticEventCtor = SyntheticWheelEvent;\n            break;\n          case \"copy\":\n          case \"cut\":\n          case \"paste\":\n            SyntheticEventCtor = SyntheticClipboardEvent;\n            break;\n          case \"gotpointercapture\":\n          case \"lostpointercapture\":\n          case \"pointercancel\":\n          case \"pointerdown\":\n          case \"pointermove\":\n          case \"pointerout\":\n          case \"pointerover\":\n          case \"pointerup\":\n            SyntheticEventCtor = SyntheticPointerEvent;\n            break;\n          case \"toggle\":\n          case \"beforetoggle\":\n            SyntheticEventCtor = SyntheticToggleEvent;\n        }\n        var inCapturePhase = 0 !== (eventSystemFlags & 4),\n          accumulateTargetOnly =\n            !inCapturePhase &&\n            (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n          reactEventName = inCapturePhase\n            ? null !== reactName\n              ? reactName + \"Capture\"\n              : null\n            : reactName;\n        inCapturePhase = [];\n        for (\n          var instance = targetInst, lastHostComponent;\n          null !== instance;\n\n        ) {\n          var _instance = instance;\n          lastHostComponent = _instance.stateNode;\n          _instance = _instance.tag;\n          (5 !== _instance && 26 !== _instance && 27 !== _instance) ||\n            null === lastHostComponent ||\n            null === reactEventName ||\n            ((_instance = getListener(instance, reactEventName)),\n            null != _instance &&\n              inCapturePhase.push(\n                createDispatchListener(instance, _instance, lastHostComponent)\n              ));\n          if (accumulateTargetOnly) break;\n          instance = instance.return;\n        }\n        0 < inCapturePhase.length &&\n          ((reactName = new SyntheticEventCtor(\n            reactName,\n            reactEventType,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: reactName, listeners: inCapturePhase }));\n      }\n    }\n    if (0 === (eventSystemFlags & 7)) {\n      a: {\n        reactName =\n          \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n        SyntheticEventCtor =\n          \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n        if (\n          reactName &&\n          nativeEvent !== currentReplayingEvent &&\n          (reactEventType =\n            nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n          (getClosestInstanceFromNode(reactEventType) ||\n            reactEventType[internalContainerInstanceKey])\n        )\n          break a;\n        if (SyntheticEventCtor || reactName) {\n          reactName =\n            nativeEventTarget.window === nativeEventTarget\n              ? nativeEventTarget\n              : (reactName = nativeEventTarget.ownerDocument)\n                ? reactName.defaultView || reactName.parentWindow\n                : window;\n          if (SyntheticEventCtor) {\n            if (\n              ((reactEventType =\n                nativeEvent.relatedTarget || nativeEvent.toElement),\n              (SyntheticEventCtor = targetInst),\n              (reactEventType = reactEventType\n                ? getClosestInstanceFromNode(reactEventType)\n                : null),\n              null !== reactEventType &&\n                ((accumulateTargetOnly =\n                  getNearestMountedFiber(reactEventType)),\n                (inCapturePhase = reactEventType.tag),\n                reactEventType !== accumulateTargetOnly ||\n                  (5 !== inCapturePhase &&\n                    27 !== inCapturePhase &&\n                    6 !== inCapturePhase)))\n            )\n              reactEventType = null;\n          } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n          if (SyntheticEventCtor !== reactEventType) {\n            inCapturePhase = SyntheticMouseEvent;\n            _instance = \"onMouseLeave\";\n            reactEventName = \"onMouseEnter\";\n            instance = \"mouse\";\n            if (\"pointerout\" === domEventName || \"pointerover\" === domEventName)\n              (inCapturePhase = SyntheticPointerEvent),\n                (_instance = \"onPointerLeave\"),\n                (reactEventName = \"onPointerEnter\"),\n                (instance = \"pointer\");\n            accumulateTargetOnly =\n              null == SyntheticEventCtor\n                ? reactName\n                : getNodeFromInstance(SyntheticEventCtor);\n            lastHostComponent =\n              null == reactEventType\n                ? reactName\n                : getNodeFromInstance(reactEventType);\n            reactName = new inCapturePhase(\n              _instance,\n              instance + \"leave\",\n              SyntheticEventCtor,\n              nativeEvent,\n              nativeEventTarget\n            );\n            reactName.target = accumulateTargetOnly;\n            reactName.relatedTarget = lastHostComponent;\n            _instance = null;\n            getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n              ((inCapturePhase = new inCapturePhase(\n                reactEventName,\n                instance + \"enter\",\n                reactEventType,\n                nativeEvent,\n                nativeEventTarget\n              )),\n              (inCapturePhase.target = lastHostComponent),\n              (inCapturePhase.relatedTarget = accumulateTargetOnly),\n              (_instance = inCapturePhase));\n            accumulateTargetOnly = _instance;\n            if (SyntheticEventCtor && reactEventType)\n              b: {\n                inCapturePhase = getParent;\n                reactEventName = SyntheticEventCtor;\n                instance = reactEventType;\n                lastHostComponent = 0;\n                for (\n                  _instance = reactEventName;\n                  _instance;\n                  _instance = inCapturePhase(_instance)\n                )\n                  lastHostComponent++;\n                _instance = 0;\n                for (var tempB = instance; tempB; tempB = inCapturePhase(tempB))\n                  _instance++;\n                for (; 0 < lastHostComponent - _instance; )\n                  (reactEventName = inCapturePhase(reactEventName)),\n                    lastHostComponent--;\n                for (; 0 < _instance - lastHostComponent; )\n                  (instance = inCapturePhase(instance)), _instance--;\n                for (; lastHostComponent--; ) {\n                  if (\n                    reactEventName === instance ||\n                    (null !== instance && reactEventName === instance.alternate)\n                  ) {\n                    inCapturePhase = reactEventName;\n                    break b;\n                  }\n                  reactEventName = inCapturePhase(reactEventName);\n                  instance = inCapturePhase(instance);\n                }\n                inCapturePhase = null;\n              }\n            else inCapturePhase = null;\n            null !== SyntheticEventCtor &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                reactName,\n                SyntheticEventCtor,\n                inCapturePhase,\n                !1\n              );\n            null !== reactEventType &&\n              null !== accumulateTargetOnly &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                accumulateTargetOnly,\n                reactEventType,\n                inCapturePhase,\n                !0\n              );\n          }\n        }\n      }\n      a: {\n        reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n        SyntheticEventCtor =\n          reactName.nodeName && reactName.nodeName.toLowerCase();\n        if (\n          \"select\" === SyntheticEventCtor ||\n          (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n        )\n          var getTargetInstFunc = getTargetInstForChangeEvent;\n        else if (isTextInputElement(reactName))\n          if (isInputEventSupported)\n            getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n          else {\n            getTargetInstFunc = getTargetInstForInputEventPolyfill;\n            var handleEventFunc = handleEventsForInputEventPolyfill;\n          }\n        else\n          (SyntheticEventCtor = reactName.nodeName),\n            !SyntheticEventCtor ||\n            \"input\" !== SyntheticEventCtor.toLowerCase() ||\n            (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n              ? targetInst &&\n                isCustomElement(targetInst.elementType) &&\n                (getTargetInstFunc = getTargetInstForChangeEvent)\n              : (getTargetInstFunc = getTargetInstForClickEvent);\n        if (\n          getTargetInstFunc &&\n          (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n        ) {\n          createAndAccumulateChangeEvent(\n            dispatchQueue,\n            getTargetInstFunc,\n            nativeEvent,\n            nativeEventTarget\n          );\n          break a;\n        }\n        handleEventFunc && handleEventFunc(domEventName, reactName, targetInst);\n        \"focusout\" === domEventName &&\n          targetInst &&\n          \"number\" === reactName.type &&\n          null != targetInst.memoizedProps.value &&\n          setDefaultValue(reactName, \"number\", reactName.value);\n      }\n      handleEventFunc = targetInst ? getNodeFromInstance(targetInst) : window;\n      switch (domEventName) {\n        case \"focusin\":\n          if (\n            isTextInputElement(handleEventFunc) ||\n            \"true\" === handleEventFunc.contentEditable\n          )\n            (activeElement = handleEventFunc),\n              (activeElementInst = targetInst),\n              (lastSelection = null);\n          break;\n        case \"focusout\":\n          lastSelection = activeElementInst = activeElement = null;\n          break;\n        case \"mousedown\":\n          mouseDown = !0;\n          break;\n        case \"contextmenu\":\n        case \"mouseup\":\n        case \"dragend\":\n          mouseDown = !1;\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n          break;\n        case \"selectionchange\":\n          if (skipSelectionChangeEvent) break;\n        case \"keydown\":\n        case \"keyup\":\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n      }\n      var fallbackData;\n      if (canUseCompositionEvent)\n        b: {\n          switch (domEventName) {\n            case \"compositionstart\":\n              var eventType = \"onCompositionStart\";\n              break b;\n            case \"compositionend\":\n              eventType = \"onCompositionEnd\";\n              break b;\n            case \"compositionupdate\":\n              eventType = \"onCompositionUpdate\";\n              break b;\n          }\n          eventType = void 0;\n        }\n      else\n        isComposing\n          ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n            (eventType = \"onCompositionEnd\")\n          : \"keydown\" === domEventName &&\n            229 === nativeEvent.keyCode &&\n            (eventType = \"onCompositionStart\");\n      eventType &&\n        (useFallbackCompositionData &&\n          \"ko\" !== nativeEvent.locale &&\n          (isComposing || \"onCompositionStart\" !== eventType\n            ? \"onCompositionEnd\" === eventType &&\n              isComposing &&\n              (fallbackData = getData())\n            : ((root = nativeEventTarget),\n              (startText = \"value\" in root ? root.value : root.textContent),\n              (isComposing = !0))),\n        (handleEventFunc = accumulateTwoPhaseListeners(targetInst, eventType)),\n        0 < handleEventFunc.length &&\n          ((eventType = new SyntheticCompositionEvent(\n            eventType,\n            domEventName,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: eventType, listeners: handleEventFunc }),\n          fallbackData\n            ? (eventType.data = fallbackData)\n            : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n              null !== fallbackData && (eventType.data = fallbackData))));\n      if (\n        (fallbackData = canUseTextInputEvent\n          ? getNativeBeforeInputChars(domEventName, nativeEvent)\n          : getFallbackBeforeInputChars(domEventName, nativeEvent))\n      )\n        (eventType = accumulateTwoPhaseListeners(targetInst, \"onBeforeInput\")),\n          0 < eventType.length &&\n            ((handleEventFunc = new SyntheticCompositionEvent(\n              \"onBeforeInput\",\n              \"beforeinput\",\n              null,\n              nativeEvent,\n              nativeEventTarget\n            )),\n            dispatchQueue.push({\n              event: handleEventFunc,\n              listeners: eventType\n            }),\n            (handleEventFunc.data = fallbackData));\n      extractEvents$1(\n        dispatchQueue,\n        domEventName,\n        targetInst,\n        nativeEvent,\n        nativeEventTarget\n      );\n    }\n    processDispatchQueue(dispatchQueue, eventSystemFlags);\n  });\n}\nfunction createDispatchListener(instance, listener, currentTarget) {\n  return {\n    instance: instance,\n    listener: listener,\n    currentTarget: currentTarget\n  };\n}\nfunction accumulateTwoPhaseListeners(targetFiber, reactName) {\n  for (\n    var captureName = reactName + \"Capture\", listeners = [];\n    null !== targetFiber;\n\n  ) {\n    var _instance2 = targetFiber,\n      stateNode = _instance2.stateNode;\n    _instance2 = _instance2.tag;\n    (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n      null === stateNode ||\n      ((_instance2 = getListener(targetFiber, captureName)),\n      null != _instance2 &&\n        listeners.unshift(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ),\n      (_instance2 = getListener(targetFiber, reactName)),\n      null != _instance2 &&\n        listeners.push(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ));\n    if (3 === targetFiber.tag) return listeners;\n    targetFiber = targetFiber.return;\n  }\n  return [];\n}\nfunction getParent(inst) {\n  if (null === inst) return null;\n  do inst = inst.return;\n  while (inst && 5 !== inst.tag && 27 !== inst.tag);\n  return inst ? inst : null;\n}\nfunction accumulateEnterLeaveListenersForEvent(\n  dispatchQueue,\n  event,\n  target,\n  common,\n  inCapturePhase\n) {\n  for (\n    var registrationName = event._reactName, listeners = [];\n    null !== target && target !== common;\n\n  ) {\n    var _instance3 = target,\n      alternate = _instance3.alternate,\n      stateNode = _instance3.stateNode;\n    _instance3 = _instance3.tag;\n    if (null !== alternate && alternate === common) break;\n    (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n      null === stateNode ||\n      ((alternate = stateNode),\n      inCapturePhase\n        ? ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.unshift(\n              createDispatchListener(target, stateNode, alternate)\n            ))\n        : inCapturePhase ||\n          ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.push(\n              createDispatchListener(target, stateNode, alternate)\n            )));\n    target = target.return;\n  }\n  0 !== listeners.length &&\n    dispatchQueue.push({ event: event, listeners: listeners });\n}\nvar NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n  NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\nfunction normalizeMarkupForTextOrAttribute(markup) {\n  return (\"string\" === typeof markup ? markup : \"\" + markup)\n    .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n    .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n}\nfunction checkForUnmatchedText(serverText, clientText) {\n  clientText = normalizeMarkupForTextOrAttribute(clientText);\n  return normalizeMarkupForTextOrAttribute(serverText) === clientText ? !0 : !1;\n}\nfunction setProp(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"children\":\n      \"string\" === typeof value\n        ? \"body\" === tag ||\n          (\"textarea\" === tag && \"\" === value) ||\n          setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          \"body\" !== tag &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"className\":\n      setValueForKnownAttribute(domElement, \"class\", value);\n      break;\n    case \"tabIndex\":\n      setValueForKnownAttribute(domElement, \"tabindex\", value);\n      break;\n    case \"dir\":\n    case \"role\":\n    case \"viewBox\":\n    case \"width\":\n    case \"height\":\n      setValueForKnownAttribute(domElement, key, value);\n      break;\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"data\":\n      if (\"object\" !== tag) {\n        setValueForKnownAttribute(domElement, \"data\", value);\n        break;\n      }\n    case \"src\":\n    case \"href\":\n      if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"action\":\n    case \"formAction\":\n      if (\"function\" === typeof value) {\n        domElement.setAttribute(\n          key,\n          \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n        );\n        break;\n      } else\n        \"function\" === typeof prevValue &&\n          (\"formAction\" === key\n            ? (\"input\" !== tag &&\n                setProp(domElement, tag, \"name\", props.name, props, null),\n              setProp(\n                domElement,\n                tag,\n                \"formEncType\",\n                props.formEncType,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formMethod\",\n                props.formMethod,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formTarget\",\n                props.formTarget,\n                props,\n                null\n              ))\n            : (setProp(domElement, tag, \"encType\", props.encType, props, null),\n              setProp(domElement, tag, \"method\", props.method, props, null),\n              setProp(domElement, tag, \"target\", props.target, props, null)));\n      if (\n        null == value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"multiple\":\n      domElement.multiple =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"muted\":\n      domElement.muted =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"defaultValue\":\n    case \"defaultChecked\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"autoFocus\":\n      break;\n    case \"xlinkHref\":\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"boolean\" === typeof value ||\n        \"symbol\" === typeof value\n      ) {\n        domElement.removeAttribute(\"xlink:href\");\n        break;\n      }\n      key = sanitizeURL(\"\" + value);\n      domElement.setAttributeNS(\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:href\",\n        key\n      );\n      break;\n    case \"contentEditable\":\n    case \"spellCheck\":\n    case \"draggable\":\n    case \"value\":\n    case \"autoReverse\":\n    case \"externalResourcesRequired\":\n    case \"focusable\":\n    case \"preserveAlpha\":\n      null != value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\" + value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"inert\":\n    case \"allowFullScreen\":\n    case \"async\":\n    case \"autoPlay\":\n    case \"controls\":\n    case \"default\":\n    case \"defer\":\n    case \"disabled\":\n    case \"disablePictureInPicture\":\n    case \"disableRemotePlayback\":\n    case \"formNoValidate\":\n    case \"hidden\":\n    case \"loop\":\n    case \"noModule\":\n    case \"noValidate\":\n    case \"open\":\n    case \"playsInline\":\n    case \"readOnly\":\n    case \"required\":\n    case \"reversed\":\n    case \"scoped\":\n    case \"seamless\":\n    case \"itemScope\":\n      value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\")\n        : domElement.removeAttribute(key);\n      break;\n    case \"capture\":\n    case \"download\":\n      !0 === value\n        ? domElement.setAttribute(key, \"\")\n        : !1 !== value &&\n            null != value &&\n            \"function\" !== typeof value &&\n            \"symbol\" !== typeof value\n          ? domElement.setAttribute(key, value)\n          : domElement.removeAttribute(key);\n      break;\n    case \"cols\":\n    case \"rows\":\n    case \"size\":\n    case \"span\":\n      null != value &&\n      \"function\" !== typeof value &&\n      \"symbol\" !== typeof value &&\n      !isNaN(value) &&\n      1 <= value\n        ? domElement.setAttribute(key, value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"rowSpan\":\n    case \"start\":\n      null == value ||\n      \"function\" === typeof value ||\n      \"symbol\" === typeof value ||\n      isNaN(value)\n        ? domElement.removeAttribute(key)\n        : domElement.setAttribute(key, value);\n      break;\n    case \"popover\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      setValueForAttribute(domElement, \"popover\", value);\n      break;\n    case \"xlinkActuate\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:actuate\",\n        value\n      );\n      break;\n    case \"xlinkArcrole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:arcrole\",\n        value\n      );\n      break;\n    case \"xlinkRole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:role\",\n        value\n      );\n      break;\n    case \"xlinkShow\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:show\",\n        value\n      );\n      break;\n    case \"xlinkTitle\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:title\",\n        value\n      );\n      break;\n    case \"xlinkType\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:type\",\n        value\n      );\n      break;\n    case \"xmlBase\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:base\",\n        value\n      );\n      break;\n    case \"xmlLang\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:lang\",\n        value\n      );\n      break;\n    case \"xmlSpace\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:space\",\n        value\n      );\n      break;\n    case \"is\":\n      setValueForAttribute(domElement, \"is\", value);\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (\n        !(2 < key.length) ||\n        (\"o\" !== key[0] && \"O\" !== key[0]) ||\n        (\"n\" !== key[1] && \"N\" !== key[1])\n      )\n        (key = aliases.get(key) || key),\n          setValueForAttribute(domElement, key, value);\n  }\n}\nfunction setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"children\":\n      \"string\" === typeof value\n        ? setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (!registrationNameDependencies.hasOwnProperty(key))\n        a: {\n          if (\n            \"o\" === key[0] &&\n            \"n\" === key[1] &&\n            ((props = key.endsWith(\"Capture\")),\n            (tag = key.slice(2, props ? key.length - 7 : void 0)),\n            (prevValue = domElement[internalPropsKey] || null),\n            (prevValue = null != prevValue ? prevValue[key] : null),\n            \"function\" === typeof prevValue &&\n              domElement.removeEventListener(tag, prevValue, props),\n            \"function\" === typeof value)\n          ) {\n            \"function\" !== typeof prevValue &&\n              null !== prevValue &&\n              (key in domElement\n                ? (domElement[key] = null)\n                : domElement.hasAttribute(key) &&\n                  domElement.removeAttribute(key));\n            domElement.addEventListener(tag, value, props);\n            break a;\n          }\n          key in domElement\n            ? (domElement[key] = value)\n            : !0 === value\n              ? domElement.setAttribute(key, \"\")\n              : setValueForAttribute(domElement, key, value);\n        }\n  }\n}\nfunction setInitialProperties(domElement, tag, props) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"img\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      var hasSrc = !1,\n        hasSrcSet = !1,\n        propKey;\n      for (propKey in props)\n        if (props.hasOwnProperty(propKey)) {\n          var propValue = props[propKey];\n          if (null != propValue)\n            switch (propKey) {\n              case \"src\":\n                hasSrc = !0;\n                break;\n              case \"srcSet\":\n                hasSrcSet = !0;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                throw Error(formatProdErrorMessage(137, tag));\n              default:\n                setProp(domElement, tag, propKey, propValue, props, null);\n            }\n        }\n      hasSrcSet &&\n        setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n      hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n      return;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      var defaultValue = (propKey = propValue = hasSrcSet = null),\n        checked = null,\n        defaultChecked = null;\n      for (hasSrc in props)\n        if (props.hasOwnProperty(hasSrc)) {\n          var propValue$184 = props[hasSrc];\n          if (null != propValue$184)\n            switch (hasSrc) {\n              case \"name\":\n                hasSrcSet = propValue$184;\n                break;\n              case \"type\":\n                propValue = propValue$184;\n                break;\n              case \"checked\":\n                checked = propValue$184;\n                break;\n              case \"defaultChecked\":\n                defaultChecked = propValue$184;\n                break;\n              case \"value\":\n                propKey = propValue$184;\n                break;\n              case \"defaultValue\":\n                defaultValue = propValue$184;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                if (null != propValue$184)\n                  throw Error(formatProdErrorMessage(137, tag));\n                break;\n              default:\n                setProp(domElement, tag, hasSrc, propValue$184, props, null);\n            }\n        }\n      initInput(\n        domElement,\n        propKey,\n        defaultValue,\n        checked,\n        defaultChecked,\n        propValue,\n        hasSrcSet,\n        !1\n      );\n      return;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      hasSrc = propValue = propKey = null;\n      for (hasSrcSet in props)\n        if (\n          props.hasOwnProperty(hasSrcSet) &&\n          ((defaultValue = props[hasSrcSet]), null != defaultValue)\n        )\n          switch (hasSrcSet) {\n            case \"value\":\n              propKey = defaultValue;\n              break;\n            case \"defaultValue\":\n              propValue = defaultValue;\n              break;\n            case \"multiple\":\n              hasSrc = defaultValue;\n            default:\n              setProp(domElement, tag, hasSrcSet, defaultValue, props, null);\n          }\n      tag = propKey;\n      props = propValue;\n      domElement.multiple = !!hasSrc;\n      null != tag\n        ? updateOptions(domElement, !!hasSrc, tag, !1)\n        : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n      return;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      propKey = hasSrcSet = hasSrc = null;\n      for (propValue in props)\n        if (\n          props.hasOwnProperty(propValue) &&\n          ((defaultValue = props[propValue]), null != defaultValue)\n        )\n          switch (propValue) {\n            case \"value\":\n              hasSrc = defaultValue;\n              break;\n            case \"defaultValue\":\n              hasSrcSet = defaultValue;\n              break;\n            case \"children\":\n              propKey = defaultValue;\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != defaultValue) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              setProp(domElement, tag, propValue, defaultValue, props, null);\n          }\n      initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n      return;\n    case \"option\":\n      for (checked in props)\n        if (\n          props.hasOwnProperty(checked) &&\n          ((hasSrc = props[checked]), null != hasSrc)\n        )\n          switch (checked) {\n            case \"selected\":\n              domElement.selected =\n                hasSrc &&\n                \"function\" !== typeof hasSrc &&\n                \"symbol\" !== typeof hasSrc;\n              break;\n            default:\n              setProp(domElement, tag, checked, hasSrc, props, null);\n          }\n      return;\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      listenToNonDelegatedEvent(\"cancel\", domElement);\n      listenToNonDelegatedEvent(\"close\", domElement);\n      break;\n    case \"iframe\":\n    case \"object\":\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n        listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n      break;\n    case \"image\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      break;\n    case \"embed\":\n    case \"source\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", domElement),\n        listenToNonDelegatedEvent(\"load\", domElement);\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (defaultChecked in props)\n        if (\n          props.hasOwnProperty(defaultChecked) &&\n          ((hasSrc = props[defaultChecked]), null != hasSrc)\n        )\n          switch (defaultChecked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              throw Error(formatProdErrorMessage(137, tag));\n            default:\n              setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (propValue$184 in props)\n          props.hasOwnProperty(propValue$184) &&\n            ((hasSrc = props[propValue$184]),\n            void 0 !== hasSrc &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propValue$184,\n                hasSrc,\n                props,\n                void 0\n              ));\n        return;\n      }\n  }\n  for (defaultValue in props)\n    props.hasOwnProperty(defaultValue) &&\n      ((hasSrc = props[defaultValue]),\n      null != hasSrc &&\n        setProp(domElement, tag, defaultValue, hasSrc, props, null));\n}\nfunction updateProperties(domElement, tag, lastProps, nextProps) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"input\":\n      var name = null,\n        type = null,\n        value = null,\n        defaultValue = null,\n        lastDefaultValue = null,\n        checked = null,\n        defaultChecked = null;\n      for (propKey in lastProps) {\n        var lastProp = lastProps[propKey];\n        if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n          switch (propKey) {\n            case \"checked\":\n              break;\n            case \"value\":\n              break;\n            case \"defaultValue\":\n              lastDefaultValue = lastProp;\n            default:\n              nextProps.hasOwnProperty(propKey) ||\n                setProp(domElement, tag, propKey, null, nextProps, lastProp);\n          }\n      }\n      for (var propKey$201 in nextProps) {\n        var propKey = nextProps[propKey$201];\n        lastProp = lastProps[propKey$201];\n        if (\n          nextProps.hasOwnProperty(propKey$201) &&\n          (null != propKey || null != lastProp)\n        )\n          switch (propKey$201) {\n            case \"type\":\n              type = propKey;\n              break;\n            case \"name\":\n              name = propKey;\n              break;\n            case \"checked\":\n              checked = propKey;\n              break;\n            case \"defaultChecked\":\n              defaultChecked = propKey;\n              break;\n            case \"value\":\n              value = propKey;\n              break;\n            case \"defaultValue\":\n              defaultValue = propKey;\n              break;\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              propKey !== lastProp &&\n                setProp(\n                  domElement,\n                  tag,\n                  propKey$201,\n                  propKey,\n                  nextProps,\n                  lastProp\n                );\n          }\n      }\n      updateInput(\n        domElement,\n        value,\n        defaultValue,\n        lastDefaultValue,\n        checked,\n        defaultChecked,\n        type,\n        name\n      );\n      return;\n    case \"select\":\n      propKey = value = defaultValue = propKey$201 = null;\n      for (type in lastProps)\n        if (\n          ((lastDefaultValue = lastProps[type]),\n          lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n        )\n          switch (type) {\n            case \"value\":\n              break;\n            case \"multiple\":\n              propKey = lastDefaultValue;\n            default:\n              nextProps.hasOwnProperty(type) ||\n                setProp(\n                  domElement,\n                  tag,\n                  type,\n                  null,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      for (name in nextProps)\n        if (\n          ((type = nextProps[name]),\n          (lastDefaultValue = lastProps[name]),\n          nextProps.hasOwnProperty(name) &&\n            (null != type || null != lastDefaultValue))\n        )\n          switch (name) {\n            case \"value\":\n              propKey$201 = type;\n              break;\n            case \"defaultValue\":\n              defaultValue = type;\n              break;\n            case \"multiple\":\n              value = type;\n            default:\n              type !== lastDefaultValue &&\n                setProp(\n                  domElement,\n                  tag,\n                  name,\n                  type,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      tag = defaultValue;\n      lastProps = value;\n      nextProps = propKey;\n      null != propKey$201\n        ? updateOptions(domElement, !!lastProps, propKey$201, !1)\n        : !!nextProps !== !!lastProps &&\n          (null != tag\n            ? updateOptions(domElement, !!lastProps, tag, !0)\n            : updateOptions(domElement, !!lastProps, lastProps ? [] : \"\", !1));\n      return;\n    case \"textarea\":\n      propKey = propKey$201 = null;\n      for (defaultValue in lastProps)\n        if (\n          ((name = lastProps[defaultValue]),\n          lastProps.hasOwnProperty(defaultValue) &&\n            null != name &&\n            !nextProps.hasOwnProperty(defaultValue))\n        )\n          switch (defaultValue) {\n            case \"value\":\n              break;\n            case \"children\":\n              break;\n            default:\n              setProp(domElement, tag, defaultValue, null, nextProps, name);\n          }\n      for (value in nextProps)\n        if (\n          ((name = nextProps[value]),\n          (type = lastProps[value]),\n          nextProps.hasOwnProperty(value) && (null != name || null != type))\n        )\n          switch (value) {\n            case \"value\":\n              propKey$201 = name;\n              break;\n            case \"defaultValue\":\n              propKey = name;\n              break;\n            case \"children\":\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != name) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              name !== type &&\n                setProp(domElement, tag, value, name, nextProps, type);\n          }\n      updateTextarea(domElement, propKey$201, propKey);\n      return;\n    case \"option\":\n      for (var propKey$217 in lastProps)\n        if (\n          ((propKey$201 = lastProps[propKey$217]),\n          lastProps.hasOwnProperty(propKey$217) &&\n            null != propKey$201 &&\n            !nextProps.hasOwnProperty(propKey$217))\n        )\n          switch (propKey$217) {\n            case \"selected\":\n              domElement.selected = !1;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                propKey$217,\n                null,\n                nextProps,\n                propKey$201\n              );\n          }\n      for (lastDefaultValue in nextProps)\n        if (\n          ((propKey$201 = nextProps[lastDefaultValue]),\n          (propKey = lastProps[lastDefaultValue]),\n          nextProps.hasOwnProperty(lastDefaultValue) &&\n            propKey$201 !== propKey &&\n            (null != propKey$201 || null != propKey))\n        )\n          switch (lastDefaultValue) {\n            case \"selected\":\n              domElement.selected =\n                propKey$201 &&\n                \"function\" !== typeof propKey$201 &&\n                \"symbol\" !== typeof propKey$201;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                lastDefaultValue,\n                propKey$201,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    case \"img\":\n    case \"link\":\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"embed\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"source\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (var propKey$222 in lastProps)\n        (propKey$201 = lastProps[propKey$222]),\n          lastProps.hasOwnProperty(propKey$222) &&\n            null != propKey$201 &&\n            !nextProps.hasOwnProperty(propKey$222) &&\n            setProp(domElement, tag, propKey$222, null, nextProps, propKey$201);\n      for (checked in nextProps)\n        if (\n          ((propKey$201 = nextProps[checked]),\n          (propKey = lastProps[checked]),\n          nextProps.hasOwnProperty(checked) &&\n            propKey$201 !== propKey &&\n            (null != propKey$201 || null != propKey))\n        )\n          switch (checked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey$201)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                checked,\n                propKey$201,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (var propKey$227 in lastProps)\n          (propKey$201 = lastProps[propKey$227]),\n            lastProps.hasOwnProperty(propKey$227) &&\n              void 0 !== propKey$201 &&\n              !nextProps.hasOwnProperty(propKey$227) &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propKey$227,\n                void 0,\n                nextProps,\n                propKey$201\n              );\n        for (defaultChecked in nextProps)\n          (propKey$201 = nextProps[defaultChecked]),\n            (propKey = lastProps[defaultChecked]),\n            !nextProps.hasOwnProperty(defaultChecked) ||\n              propKey$201 === propKey ||\n              (void 0 === propKey$201 && void 0 === propKey) ||\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                defaultChecked,\n                propKey$201,\n                nextProps,\n                propKey\n              );\n        return;\n      }\n  }\n  for (var propKey$232 in lastProps)\n    (propKey$201 = lastProps[propKey$232]),\n      lastProps.hasOwnProperty(propKey$232) &&\n        null != propKey$201 &&\n        !nextProps.hasOwnProperty(propKey$232) &&\n        setProp(domElement, tag, propKey$232, null, nextProps, propKey$201);\n  for (lastProp in nextProps)\n    (propKey$201 = nextProps[lastProp]),\n      (propKey = lastProps[lastProp]),\n      !nextProps.hasOwnProperty(lastProp) ||\n        propKey$201 === propKey ||\n        (null == propKey$201 && null == propKey) ||\n        setProp(domElement, tag, lastProp, propKey$201, nextProps, propKey);\n}\nfunction isLikelyStaticResource(initiatorType) {\n  switch (initiatorType) {\n    case \"css\":\n    case \"script\":\n    case \"font\":\n    case \"img\":\n    case \"image\":\n    case \"input\":\n    case \"link\":\n      return !0;\n    default:\n      return !1;\n  }\n}\nfunction estimateBandwidth() {\n  if (\"function\" === typeof performance.getEntriesByType) {\n    for (\n      var count = 0,\n        bits = 0,\n        resourceEntries = performance.getEntriesByType(\"resource\"),\n        i = 0;\n      i < resourceEntries.length;\n      i++\n    ) {\n      var entry = resourceEntries[i],\n        transferSize = entry.transferSize,\n        initiatorType = entry.initiatorType,\n        duration = entry.duration;\n      if (transferSize && duration && isLikelyStaticResource(initiatorType)) {\n        initiatorType = 0;\n        duration = entry.responseEnd;\n        for (i += 1; i < resourceEntries.length; i++) {\n          var overlapEntry = resourceEntries[i],\n            overlapStartTime = overlapEntry.startTime;\n          if (overlapStartTime > duration) break;\n          var overlapTransferSize = overlapEntry.transferSize,\n            overlapInitiatorType = overlapEntry.initiatorType;\n          overlapTransferSize &&\n            isLikelyStaticResource(overlapInitiatorType) &&\n            ((overlapEntry = overlapEntry.responseEnd),\n            (initiatorType +=\n              overlapTransferSize *\n              (overlapEntry < duration\n                ? 1\n                : (duration - overlapStartTime) /\n                  (overlapEntry - overlapStartTime))));\n        }\n        --i;\n        bits += (8 * (transferSize + initiatorType)) / (entry.duration / 1e3);\n        count++;\n        if (10 < count) break;\n      }\n    }\n    if (0 < count) return bits / count / 1e6;\n  }\n  return navigator.connection &&\n    ((count = navigator.connection.downlink), \"number\" === typeof count)\n    ? count\n    : 5;\n}\nvar eventsEnabled = null,\n  selectionInformation = null;\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n  return 9 === rootContainerElement.nodeType\n    ? rootContainerElement\n    : rootContainerElement.ownerDocument;\n}\nfunction getOwnHostContext(namespaceURI) {\n  switch (namespaceURI) {\n    case \"http://www.w3.org/2000/svg\":\n      return 1;\n    case \"http://www.w3.org/1998/Math/MathML\":\n      return 2;\n    default:\n      return 0;\n  }\n}\nfunction getChildHostContextProd(parentNamespace, type) {\n  if (0 === parentNamespace)\n    switch (type) {\n      case \"svg\":\n        return 1;\n      case \"math\":\n        return 2;\n      default:\n        return 0;\n    }\n  return 1 === parentNamespace && \"foreignObject\" === type\n    ? 0\n    : parentNamespace;\n}\nfunction shouldSetTextContent(type, props) {\n  return (\n    \"textarea\" === type ||\n    \"noscript\" === type ||\n    \"string\" === typeof props.children ||\n    \"number\" === typeof props.children ||\n    \"bigint\" === typeof props.children ||\n    (\"object\" === typeof props.dangerouslySetInnerHTML &&\n      null !== props.dangerouslySetInnerHTML &&\n      null != props.dangerouslySetInnerHTML.__html)\n  );\n}\nvar currentPopstateTransitionEvent = null;\nfunction shouldAttemptEagerTransition() {\n  var event = window.event;\n  if (event && \"popstate\" === event.type) {\n    if (event === currentPopstateTransitionEvent) return !1;\n    currentPopstateTransitionEvent = event;\n    return !0;\n  }\n  currentPopstateTransitionEvent = null;\n  return !1;\n}\nvar scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n  cancelTimeout = \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n  localPromise = \"function\" === typeof Promise ? Promise : void 0,\n  scheduleMicrotask =\n    \"function\" === typeof queueMicrotask\n      ? queueMicrotask\n      : \"undefined\" !== typeof localPromise\n        ? function (callback) {\n            return localPromise\n              .resolve(null)\n              .then(callback)\n              .catch(handleErrorInNextTick);\n          }\n        : scheduleTimeout;\nfunction handleErrorInNextTick(error) {\n  setTimeout(function () {\n    throw error;\n  });\n}\nfunction isSingletonScope(type) {\n  return \"head\" === type;\n}\nfunction clearHydrationBoundary(parentInstance, hydrationInstance) {\n  var node = hydrationInstance,\n    depth = 0;\n  do {\n    var nextNode = node.nextSibling;\n    parentInstance.removeChild(node);\n    if (nextNode && 8 === nextNode.nodeType)\n      if (((node = nextNode.data), \"/$\" === node || \"/&\" === node)) {\n        if (0 === depth) {\n          parentInstance.removeChild(nextNode);\n          retryIfBlockedOn(hydrationInstance);\n          return;\n        }\n        depth--;\n      } else if (\n        \"$\" === node ||\n        \"$?\" === node ||\n        \"$~\" === node ||\n        \"$!\" === node ||\n        \"&\" === node\n      )\n        depth++;\n      else if (\"html\" === node)\n        releaseSingletonInstance(parentInstance.ownerDocument.documentElement);\n      else if (\"head\" === node) {\n        node = parentInstance.ownerDocument.head;\n        releaseSingletonInstance(node);\n        for (var node$jscomp$0 = node.firstChild; node$jscomp$0; ) {\n          var nextNode$jscomp$0 = node$jscomp$0.nextSibling,\n            nodeName = node$jscomp$0.nodeName;\n          node$jscomp$0[internalHoistableMarker] ||\n            \"SCRIPT\" === nodeName ||\n            \"STYLE\" === nodeName ||\n            (\"LINK\" === nodeName &&\n              \"stylesheet\" === node$jscomp$0.rel.toLowerCase()) ||\n            node.removeChild(node$jscomp$0);\n          node$jscomp$0 = nextNode$jscomp$0;\n        }\n      } else\n        \"body\" === node &&\n          releaseSingletonInstance(parentInstance.ownerDocument.body);\n    node = nextNode;\n  } while (node);\n  retryIfBlockedOn(hydrationInstance);\n}\nfunction hideOrUnhideDehydratedBoundary(suspenseInstance, isHidden) {\n  var node = suspenseInstance;\n  suspenseInstance = 0;\n  do {\n    var nextNode = node.nextSibling;\n    1 === node.nodeType\n      ? isHidden\n        ? ((node._stashedDisplay = node.style.display),\n          (node.style.display = \"none\"))\n        : ((node.style.display = node._stashedDisplay || \"\"),\n          \"\" === node.getAttribute(\"style\") && node.removeAttribute(\"style\"))\n      : 3 === node.nodeType &&\n        (isHidden\n          ? ((node._stashedText = node.nodeValue), (node.nodeValue = \"\"))\n          : (node.nodeValue = node._stashedText || \"\"));\n    if (nextNode && 8 === nextNode.nodeType)\n      if (((node = nextNode.data), \"/$\" === node))\n        if (0 === suspenseInstance) break;\n        else suspenseInstance--;\n      else\n        (\"$\" !== node && \"$?\" !== node && \"$~\" !== node && \"$!\" !== node) ||\n          suspenseInstance++;\n    node = nextNode;\n  } while (node);\n}\nfunction clearContainerSparingly(container) {\n  var nextNode = container.firstChild;\n  nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n  for (; nextNode; ) {\n    var node = nextNode;\n    nextNode = nextNode.nextSibling;\n    switch (node.nodeName) {\n      case \"HTML\":\n      case \"HEAD\":\n      case \"BODY\":\n        clearContainerSparingly(node);\n        detachDeletedInstance(node);\n        continue;\n      case \"SCRIPT\":\n      case \"STYLE\":\n        continue;\n      case \"LINK\":\n        if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n    }\n    container.removeChild(node);\n  }\n}\nfunction canHydrateInstance(instance, type, props, inRootOrSingleton) {\n  for (; 1 === instance.nodeType; ) {\n    var anyProps = props;\n    if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n      if (\n        !inRootOrSingleton &&\n        (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n      )\n        break;\n    } else if (!inRootOrSingleton)\n      if (\"input\" === type && \"hidden\" === instance.type) {\n        var name = null == anyProps.name ? null : \"\" + anyProps.name;\n        if (\n          \"hidden\" === anyProps.type &&\n          instance.getAttribute(\"name\") === name\n        )\n          return instance;\n      } else return instance;\n    else if (!instance[internalHoistableMarker])\n      switch (type) {\n        case \"meta\":\n          if (!instance.hasAttribute(\"itemprop\")) break;\n          return instance;\n        case \"link\":\n          name = instance.getAttribute(\"rel\");\n          if (\"stylesheet\" === name && instance.hasAttribute(\"data-precedence\"))\n            break;\n          else if (\n            name !== anyProps.rel ||\n            instance.getAttribute(\"href\") !==\n              (null == anyProps.href || \"\" === anyProps.href\n                ? null\n                : anyProps.href) ||\n            instance.getAttribute(\"crossorigin\") !==\n              (null == anyProps.crossOrigin ? null : anyProps.crossOrigin) ||\n            instance.getAttribute(\"title\") !==\n              (null == anyProps.title ? null : anyProps.title)\n          )\n            break;\n          return instance;\n        case \"style\":\n          if (instance.hasAttribute(\"data-precedence\")) break;\n          return instance;\n        case \"script\":\n          name = instance.getAttribute(\"src\");\n          if (\n            (name !== (null == anyProps.src ? null : anyProps.src) ||\n              instance.getAttribute(\"type\") !==\n                (null == anyProps.type ? null : anyProps.type) ||\n              instance.getAttribute(\"crossorigin\") !==\n                (null == anyProps.crossOrigin ? null : anyProps.crossOrigin)) &&\n            name &&\n            instance.hasAttribute(\"async\") &&\n            !instance.hasAttribute(\"itemprop\")\n          )\n            break;\n          return instance;\n        default:\n          return instance;\n      }\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) break;\n  }\n  return null;\n}\nfunction canHydrateTextInstance(instance, text, inRootOrSingleton) {\n  if (\"\" === text) return null;\n  for (; 3 !== instance.nodeType; ) {\n    if (\n      (1 !== instance.nodeType ||\n        \"INPUT\" !== instance.nodeName ||\n        \"hidden\" !== instance.type) &&\n      !inRootOrSingleton\n    )\n      return null;\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) return null;\n  }\n  return instance;\n}\nfunction canHydrateHydrationBoundary(instance, inRootOrSingleton) {\n  for (; 8 !== instance.nodeType; ) {\n    if (\n      (1 !== instance.nodeType ||\n        \"INPUT\" !== instance.nodeName ||\n        \"hidden\" !== instance.type) &&\n      !inRootOrSingleton\n    )\n      return null;\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) return null;\n  }\n  return instance;\n}\nfunction isSuspenseInstancePending(instance) {\n  return \"$?\" === instance.data || \"$~\" === instance.data;\n}\nfunction isSuspenseInstanceFallback(instance) {\n  return (\n    \"$!\" === instance.data ||\n    (\"$?\" === instance.data && \"loading\" !== instance.ownerDocument.readyState)\n  );\n}\nfunction registerSuspenseInstanceRetry(instance, callback) {\n  var ownerDocument = instance.ownerDocument;\n  if (\"$~\" === instance.data) instance._reactRetry = callback;\n  else if (\"$?\" !== instance.data || \"loading\" !== ownerDocument.readyState)\n    callback();\n  else {\n    var listener = function () {\n      callback();\n      ownerDocument.removeEventListener(\"DOMContentLoaded\", listener);\n    };\n    ownerDocument.addEventListener(\"DOMContentLoaded\", listener);\n    instance._reactRetry = listener;\n  }\n}\nfunction getNextHydratable(node) {\n  for (; null != node; node = node.nextSibling) {\n    var nodeType = node.nodeType;\n    if (1 === nodeType || 3 === nodeType) break;\n    if (8 === nodeType) {\n      nodeType = node.data;\n      if (\n        \"$\" === nodeType ||\n        \"$!\" === nodeType ||\n        \"$?\" === nodeType ||\n        \"$~\" === nodeType ||\n        \"&\" === nodeType ||\n        \"F!\" === nodeType ||\n        \"F\" === nodeType\n      )\n        break;\n      if (\"/$\" === nodeType || \"/&\" === nodeType) return null;\n    }\n  }\n  return node;\n}\nvar previousHydratableOnEnteringScopedSingleton = null;\nfunction getNextHydratableInstanceAfterHydrationBoundary(hydrationInstance) {\n  hydrationInstance = hydrationInstance.nextSibling;\n  for (var depth = 0; hydrationInstance; ) {\n    if (8 === hydrationInstance.nodeType) {\n      var data = hydrationInstance.data;\n      if (\"/$\" === data || \"/&\" === data) {\n        if (0 === depth)\n          return getNextHydratable(hydrationInstance.nextSibling);\n        depth--;\n      } else\n        (\"$\" !== data &&\n          \"$!\" !== data &&\n          \"$?\" !== data &&\n          \"$~\" !== data &&\n          \"&\" !== data) ||\n          depth++;\n    }\n    hydrationInstance = hydrationInstance.nextSibling;\n  }\n  return null;\n}\nfunction getParentHydrationBoundary(targetInstance) {\n  targetInstance = targetInstance.previousSibling;\n  for (var depth = 0; targetInstance; ) {\n    if (8 === targetInstance.nodeType) {\n      var data = targetInstance.data;\n      if (\n        \"$\" === data ||\n        \"$!\" === data ||\n        \"$?\" === data ||\n        \"$~\" === data ||\n        \"&\" === data\n      ) {\n        if (0 === depth) return targetInstance;\n        depth--;\n      } else (\"/$\" !== data && \"/&\" !== data) || depth++;\n    }\n    targetInstance = targetInstance.previousSibling;\n  }\n  return null;\n}\nfunction resolveSingletonInstance(type, props, rootContainerInstance) {\n  props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n  switch (type) {\n    case \"html\":\n      type = props.documentElement;\n      if (!type) throw Error(formatProdErrorMessage(452));\n      return type;\n    case \"head\":\n      type = props.head;\n      if (!type) throw Error(formatProdErrorMessage(453));\n      return type;\n    case \"body\":\n      type = props.body;\n      if (!type) throw Error(formatProdErrorMessage(454));\n      return type;\n    default:\n      throw Error(formatProdErrorMessage(451));\n  }\n}\nfunction releaseSingletonInstance(instance) {\n  for (var attributes = instance.attributes; attributes.length; )\n    instance.removeAttributeNode(attributes[0]);\n  detachDeletedInstance(instance);\n}\nvar preloadPropsMap = new Map(),\n  preconnectsSet = new Set();\nfunction getHoistableRoot(container) {\n  return \"function\" === typeof container.getRootNode\n    ? container.getRootNode()\n    : 9 === container.nodeType\n      ? container\n      : container.ownerDocument;\n}\nvar previousDispatcher = ReactDOMSharedInternals.d;\nReactDOMSharedInternals.d = {\n  f: flushSyncWork,\n  r: requestFormReset,\n  D: prefetchDNS,\n  C: preconnect,\n  L: preload,\n  m: preloadModule,\n  X: preinitScript,\n  S: preinitStyle,\n  M: preinitModuleScript\n};\nfunction flushSyncWork() {\n  var previousWasRendering = previousDispatcher.f(),\n    wasRendering = flushSyncWork$1();\n  return previousWasRendering || wasRendering;\n}\nfunction requestFormReset(form) {\n  var formInst = getInstanceFromNode(form);\n  null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n    ? requestFormReset$1(formInst)\n    : previousDispatcher.r(form);\n}\nvar globalDocument = \"undefined\" === typeof document ? null : document;\nfunction preconnectAs(rel, href, crossOrigin) {\n  var ownerDocument = globalDocument;\n  if (ownerDocument && \"string\" === typeof href && href) {\n    var limitedEscapedHref =\n      escapeSelectorAttributeValueInsideDoubleQuotes(href);\n    limitedEscapedHref =\n      'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n    \"string\" === typeof crossOrigin &&\n      (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n    preconnectsSet.has(limitedEscapedHref) ||\n      (preconnectsSet.add(limitedEscapedHref),\n      (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n      null === ownerDocument.querySelector(limitedEscapedHref) &&\n        ((href = ownerDocument.createElement(\"link\")),\n        setInitialProperties(href, \"link\", rel),\n        markNodeAsHoistable(href),\n        ownerDocument.head.appendChild(href)));\n  }\n}\nfunction prefetchDNS(href) {\n  previousDispatcher.D(href);\n  preconnectAs(\"dns-prefetch\", href, null);\n}\nfunction preconnect(href, crossOrigin) {\n  previousDispatcher.C(href, crossOrigin);\n  preconnectAs(\"preconnect\", href, crossOrigin);\n}\nfunction preload(href, as, options) {\n  previousDispatcher.L(href, as, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href && as) {\n    var preloadSelector =\n      'link[rel=\"preload\"][as=\"' +\n      escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n      '\"]';\n    \"image\" === as\n      ? options && options.imageSrcSet\n        ? ((preloadSelector +=\n            '[imagesrcset=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(\n              options.imageSrcSet\n            ) +\n            '\"]'),\n          \"string\" === typeof options.imageSizes &&\n            (preloadSelector +=\n              '[imagesizes=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                options.imageSizes\n              ) +\n              '\"]'))\n        : (preloadSelector +=\n            '[href=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n            '\"]')\n      : (preloadSelector +=\n          '[href=\"' +\n          escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n          '\"]');\n    var key = preloadSelector;\n    switch (as) {\n      case \"style\":\n        key = getStyleKey(href);\n        break;\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    preloadPropsMap.has(key) ||\n      ((href = assign(\n        {\n          rel: \"preload\",\n          href:\n            \"image\" === as && options && options.imageSrcSet ? void 0 : href,\n          as: as\n        },\n        options\n      )),\n      preloadPropsMap.set(key, href),\n      null !== ownerDocument.querySelector(preloadSelector) ||\n        (\"style\" === as &&\n          ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) ||\n        (\"script\" === as &&\n          ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||\n        ((as = ownerDocument.createElement(\"link\")),\n        setInitialProperties(as, \"link\", href),\n        markNodeAsHoistable(as),\n        ownerDocument.head.appendChild(as)));\n  }\n}\nfunction preloadModule(href, options) {\n  previousDispatcher.m(href, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var as = options && \"string\" === typeof options.as ? options.as : \"script\",\n      preloadSelector =\n        'link[rel=\"modulepreload\"][as=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n        '\"][href=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n        '\"]',\n      key = preloadSelector;\n    switch (as) {\n      case \"audioworklet\":\n      case \"paintworklet\":\n      case \"serviceworker\":\n      case \"sharedworker\":\n      case \"worker\":\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    if (\n      !preloadPropsMap.has(key) &&\n      ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n      preloadPropsMap.set(key, href),\n      null === ownerDocument.querySelector(preloadSelector))\n    ) {\n      switch (as) {\n        case \"audioworklet\":\n        case \"paintworklet\":\n        case \"serviceworker\":\n        case \"sharedworker\":\n        case \"worker\":\n        case \"script\":\n          if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n            return;\n      }\n      as = ownerDocument.createElement(\"link\");\n      setInitialProperties(as, \"link\", href);\n      markNodeAsHoistable(as);\n      ownerDocument.head.appendChild(as);\n    }\n  }\n}\nfunction preinitStyle(href, precedence, options) {\n  previousDispatcher.S(href, precedence, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n      key = getStyleKey(href);\n    precedence = precedence || \"default\";\n    var resource = styles.get(key);\n    if (!resource) {\n      var state = { loading: 0, preload: null };\n      if (\n        (resource = ownerDocument.querySelector(\n          getStylesheetSelectorFromKey(key)\n        ))\n      )\n        state.loading = 5;\n      else {\n        href = assign(\n          { rel: \"stylesheet\", href: href, \"data-precedence\": precedence },\n          options\n        );\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForStylesheet(href, options);\n        var link = (resource = ownerDocument.createElement(\"link\"));\n        markNodeAsHoistable(link);\n        setInitialProperties(link, \"link\", href);\n        link._p = new Promise(function (resolve, reject) {\n          link.onload = resolve;\n          link.onerror = reject;\n        });\n        link.addEventListener(\"load\", function () {\n          state.loading |= 1;\n        });\n        link.addEventListener(\"error\", function () {\n          state.loading |= 2;\n        });\n        state.loading |= 4;\n        insertStylesheet(resource, precedence, ownerDocument);\n      }\n      resource = {\n        type: \"stylesheet\",\n        instance: resource,\n        count: 1,\n        state: state\n      };\n      styles.set(key, resource);\n    }\n  }\n}\nfunction preinitScript(src, options) {\n  previousDispatcher.X(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0 }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction preinitModuleScript(src, options) {\n  previousDispatcher.M(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction getResource(type, currentProps, pendingProps, currentResource) {\n  var JSCompiler_inline_result = (JSCompiler_inline_result =\n    rootInstanceStackCursor.current)\n    ? getHoistableRoot(JSCompiler_inline_result)\n    : null;\n  if (!JSCompiler_inline_result) throw Error(formatProdErrorMessage(446));\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return null;\n    case \"style\":\n      return \"string\" === typeof pendingProps.precedence &&\n        \"string\" === typeof pendingProps.href\n        ? ((currentProps = getStyleKey(pendingProps.href)),\n          (pendingProps = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles),\n          (currentResource = pendingProps.get(currentProps)),\n          currentResource ||\n            ((currentResource = {\n              type: \"style\",\n              instance: null,\n              count: 0,\n              state: null\n            }),\n            pendingProps.set(currentProps, currentResource)),\n          currentResource)\n        : { type: \"void\", instance: null, count: 0, state: null };\n    case \"link\":\n      if (\n        \"stylesheet\" === pendingProps.rel &&\n        \"string\" === typeof pendingProps.href &&\n        \"string\" === typeof pendingProps.precedence\n      ) {\n        type = getStyleKey(pendingProps.href);\n        var styles$243 = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles,\n          resource$244 = styles$243.get(type);\n        resource$244 ||\n          ((JSCompiler_inline_result =\n            JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),\n          (resource$244 = {\n            type: \"stylesheet\",\n            instance: null,\n            count: 0,\n            state: { loading: 0, preload: null }\n          }),\n          styles$243.set(type, resource$244),\n          (styles$243 = JSCompiler_inline_result.querySelector(\n            getStylesheetSelectorFromKey(type)\n          )) &&\n            !styles$243._p &&\n            ((resource$244.instance = styles$243),\n            (resource$244.state.loading = 5)),\n          preloadPropsMap.has(type) ||\n            ((pendingProps = {\n              rel: \"preload\",\n              as: \"style\",\n              href: pendingProps.href,\n              crossOrigin: pendingProps.crossOrigin,\n              integrity: pendingProps.integrity,\n              media: pendingProps.media,\n              hrefLang: pendingProps.hrefLang,\n              referrerPolicy: pendingProps.referrerPolicy\n            }),\n            preloadPropsMap.set(type, pendingProps),\n            styles$243 ||\n              preloadStylesheet(\n                JSCompiler_inline_result,\n                type,\n                pendingProps,\n                resource$244.state\n              )));\n        if (currentProps && null === currentResource)\n          throw Error(formatProdErrorMessage(528, \"\"));\n        return resource$244;\n      }\n      if (currentProps && null !== currentResource)\n        throw Error(formatProdErrorMessage(529, \"\"));\n      return null;\n    case \"script\":\n      return (\n        (currentProps = pendingProps.async),\n        (pendingProps = pendingProps.src),\n        \"string\" === typeof pendingProps &&\n        currentProps &&\n        \"function\" !== typeof currentProps &&\n        \"symbol\" !== typeof currentProps\n          ? ((currentProps = getScriptKey(pendingProps)),\n            (pendingProps = getResourcesFromRoot(\n              JSCompiler_inline_result\n            ).hoistableScripts),\n            (currentResource = pendingProps.get(currentProps)),\n            currentResource ||\n              ((currentResource = {\n                type: \"script\",\n                instance: null,\n                count: 0,\n                state: null\n              }),\n              pendingProps.set(currentProps, currentResource)),\n            currentResource)\n          : { type: \"void\", instance: null, count: 0, state: null }\n      );\n    default:\n      throw Error(formatProdErrorMessage(444, type));\n  }\n}\nfunction getStyleKey(href) {\n  return 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"';\n}\nfunction getStylesheetSelectorFromKey(key) {\n  return 'link[rel=\"stylesheet\"][' + key + \"]\";\n}\nfunction stylesheetPropsFromRawProps(rawProps) {\n  return assign({}, rawProps, {\n    \"data-precedence\": rawProps.precedence,\n    precedence: null\n  });\n}\nfunction preloadStylesheet(ownerDocument, key, preloadProps, state) {\n  ownerDocument.querySelector('link[rel=\"preload\"][as=\"style\"][' + key + \"]\")\n    ? (state.loading = 1)\n    : ((key = ownerDocument.createElement(\"link\")),\n      (state.preload = key),\n      key.addEventListener(\"load\", function () {\n        return (state.loading |= 1);\n      }),\n      key.addEventListener(\"error\", function () {\n        return (state.loading |= 2);\n      }),\n      setInitialProperties(key, \"link\", preloadProps),\n      markNodeAsHoistable(key),\n      ownerDocument.head.appendChild(key));\n}\nfunction getScriptKey(src) {\n  return '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]';\n}\nfunction getScriptSelectorFromKey(key) {\n  return \"script[async]\" + key;\n}\nfunction acquireResource(hoistableRoot, resource, props) {\n  resource.count++;\n  if (null === resource.instance)\n    switch (resource.type) {\n      case \"style\":\n        var instance = hoistableRoot.querySelector(\n          'style[data-href~=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n            '\"]'\n        );\n        if (instance)\n          return (\n            (resource.instance = instance),\n            markNodeAsHoistable(instance),\n            instance\n          );\n        var styleProps = assign({}, props, {\n          \"data-href\": props.href,\n          \"data-precedence\": props.precedence,\n          href: null,\n          precedence: null\n        });\n        instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement(\n          \"style\"\n        );\n        markNodeAsHoistable(instance);\n        setInitialProperties(instance, \"style\", styleProps);\n        insertStylesheet(instance, props.precedence, hoistableRoot);\n        return (resource.instance = instance);\n      case \"stylesheet\":\n        styleProps = getStyleKey(props.href);\n        var instance$249 = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(styleProps)\n        );\n        if (instance$249)\n          return (\n            (resource.state.loading |= 4),\n            (resource.instance = instance$249),\n            markNodeAsHoistable(instance$249),\n            instance$249\n          );\n        instance = stylesheetPropsFromRawProps(props);\n        (styleProps = preloadPropsMap.get(styleProps)) &&\n          adoptPreloadPropsForStylesheet(instance, styleProps);\n        instance$249 = (\n          hoistableRoot.ownerDocument || hoistableRoot\n        ).createElement(\"link\");\n        markNodeAsHoistable(instance$249);\n        var linkInstance = instance$249;\n        linkInstance._p = new Promise(function (resolve, reject) {\n          linkInstance.onload = resolve;\n          linkInstance.onerror = reject;\n        });\n        setInitialProperties(instance$249, \"link\", instance);\n        resource.state.loading |= 4;\n        insertStylesheet(instance$249, props.precedence, hoistableRoot);\n        return (resource.instance = instance$249);\n      case \"script\":\n        instance$249 = getScriptKey(props.src);\n        if (\n          (styleProps = hoistableRoot.querySelector(\n            getScriptSelectorFromKey(instance$249)\n          ))\n        )\n          return (\n            (resource.instance = styleProps),\n            markNodeAsHoistable(styleProps),\n            styleProps\n          );\n        instance = props;\n        if ((styleProps = preloadPropsMap.get(instance$249)))\n          (instance = assign({}, props)),\n            adoptPreloadPropsForScript(instance, styleProps);\n        hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n        styleProps = hoistableRoot.createElement(\"script\");\n        markNodeAsHoistable(styleProps);\n        setInitialProperties(styleProps, \"link\", instance);\n        hoistableRoot.head.appendChild(styleProps);\n        return (resource.instance = styleProps);\n      case \"void\":\n        return null;\n      default:\n        throw Error(formatProdErrorMessage(443, resource.type));\n    }\n  else\n    \"stylesheet\" === resource.type &&\n      0 === (resource.state.loading & 4) &&\n      ((instance = resource.instance),\n      (resource.state.loading |= 4),\n      insertStylesheet(instance, props.precedence, hoistableRoot));\n  return resource.instance;\n}\nfunction insertStylesheet(instance, precedence, root) {\n  for (\n    var nodes = root.querySelectorAll(\n        'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n      ),\n      last = nodes.length ? nodes[nodes.length - 1] : null,\n      prior = last,\n      i = 0;\n    i < nodes.length;\n    i++\n  ) {\n    var node = nodes[i];\n    if (node.dataset.precedence === precedence) prior = node;\n    else if (prior !== last) break;\n  }\n  prior\n    ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n    : ((precedence = 9 === root.nodeType ? root.head : root),\n      precedence.insertBefore(instance, precedence.firstChild));\n}\nfunction adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n  null == stylesheetProps.crossOrigin &&\n    (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n  null == stylesheetProps.referrerPolicy &&\n    (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == stylesheetProps.title && (stylesheetProps.title = preloadProps.title);\n}\nfunction adoptPreloadPropsForScript(scriptProps, preloadProps) {\n  null == scriptProps.crossOrigin &&\n    (scriptProps.crossOrigin = preloadProps.crossOrigin);\n  null == scriptProps.referrerPolicy &&\n    (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == scriptProps.integrity &&\n    (scriptProps.integrity = preloadProps.integrity);\n}\nvar tagCaches = null;\nfunction getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n  if (null === tagCaches) {\n    var cache = new Map();\n    var caches = (tagCaches = new Map());\n    caches.set(ownerDocument, cache);\n  } else\n    (caches = tagCaches),\n      (cache = caches.get(ownerDocument)),\n      cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n  if (cache.has(type)) return cache;\n  cache.set(type, null);\n  ownerDocument = ownerDocument.getElementsByTagName(type);\n  for (caches = 0; caches < ownerDocument.length; caches++) {\n    var node = ownerDocument[caches];\n    if (\n      !(\n        node[internalHoistableMarker] ||\n        node[internalInstanceKey] ||\n        (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n      ) &&\n      \"http://www.w3.org/2000/svg\" !== node.namespaceURI\n    ) {\n      var nodeKey = node.getAttribute(keyAttribute) || \"\";\n      nodeKey = type + nodeKey;\n      var existing = cache.get(nodeKey);\n      existing ? existing.push(node) : cache.set(nodeKey, [node]);\n    }\n  }\n  return cache;\n}\nfunction mountHoistable(hoistableRoot, type, instance) {\n  hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n  hoistableRoot.head.insertBefore(\n    instance,\n    \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n  );\n}\nfunction isHostHoistableType(type, props, hostContext) {\n  if (1 === hostContext || null != props.itemProp) return !1;\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return !0;\n    case \"style\":\n      if (\n        \"string\" !== typeof props.precedence ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href\n      )\n        break;\n      return !0;\n    case \"link\":\n      if (\n        \"string\" !== typeof props.rel ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href ||\n        props.onLoad ||\n        props.onError\n      )\n        break;\n      switch (props.rel) {\n        case \"stylesheet\":\n          return (\n            (type = props.disabled),\n            \"string\" === typeof props.precedence && null == type\n          );\n        default:\n          return !0;\n      }\n    case \"script\":\n      if (\n        props.async &&\n        \"function\" !== typeof props.async &&\n        \"symbol\" !== typeof props.async &&\n        !props.onLoad &&\n        !props.onError &&\n        props.src &&\n        \"string\" === typeof props.src\n      )\n        return !0;\n  }\n  return !1;\n}\nfunction preloadResource(resource) {\n  return \"stylesheet\" === resource.type && 0 === (resource.state.loading & 3)\n    ? !1\n    : !0;\n}\nfunction suspendResource(state, hoistableRoot, resource, props) {\n  if (\n    \"stylesheet\" === resource.type &&\n    (\"string\" !== typeof props.media ||\n      !1 !== matchMedia(props.media).matches) &&\n    0 === (resource.state.loading & 4)\n  ) {\n    if (null === resource.instance) {\n      var key = getStyleKey(props.href),\n        instance = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(key)\n        );\n      if (instance) {\n        hoistableRoot = instance._p;\n        null !== hoistableRoot &&\n          \"object\" === typeof hoistableRoot &&\n          \"function\" === typeof hoistableRoot.then &&\n          (state.count++,\n          (state = onUnsuspend.bind(state)),\n          hoistableRoot.then(state, state));\n        resource.state.loading |= 4;\n        resource.instance = instance;\n        markNodeAsHoistable(instance);\n        return;\n      }\n      instance = hoistableRoot.ownerDocument || hoistableRoot;\n      props = stylesheetPropsFromRawProps(props);\n      (key = preloadPropsMap.get(key)) &&\n        adoptPreloadPropsForStylesheet(props, key);\n      instance = instance.createElement(\"link\");\n      markNodeAsHoistable(instance);\n      var linkInstance = instance;\n      linkInstance._p = new Promise(function (resolve, reject) {\n        linkInstance.onload = resolve;\n        linkInstance.onerror = reject;\n      });\n      setInitialProperties(instance, \"link\", props);\n      resource.instance = instance;\n    }\n    null === state.stylesheets && (state.stylesheets = new Map());\n    state.stylesheets.set(resource, hoistableRoot);\n    (hoistableRoot = resource.state.preload) &&\n      0 === (resource.state.loading & 3) &&\n      (state.count++,\n      (resource = onUnsuspend.bind(state)),\n      hoistableRoot.addEventListener(\"load\", resource),\n      hoistableRoot.addEventListener(\"error\", resource));\n  }\n}\nvar estimatedBytesWithinLimit = 0;\nfunction waitForCommitToBeReady(state, timeoutOffset) {\n  state.stylesheets &&\n    0 === state.count &&\n    insertSuspendedStylesheets(state, state.stylesheets);\n  return 0 < state.count || 0 < state.imgCount\n    ? function (commit) {\n        var stylesheetTimer = setTimeout(function () {\n          state.stylesheets &&\n            insertSuspendedStylesheets(state, state.stylesheets);\n          if (state.unsuspend) {\n            var unsuspend = state.unsuspend;\n            state.unsuspend = null;\n            unsuspend();\n          }\n        }, 6e4 + timeoutOffset);\n        0 < state.imgBytes &&\n          0 === estimatedBytesWithinLimit &&\n          (estimatedBytesWithinLimit = 62500 * estimateBandwidth());\n        var imgTimer = setTimeout(\n          function () {\n            state.waitingForImages = !1;\n            if (\n              0 === state.count &&\n              (state.stylesheets &&\n                insertSuspendedStylesheets(state, state.stylesheets),\n              state.unsuspend)\n            ) {\n              var unsuspend = state.unsuspend;\n              state.unsuspend = null;\n              unsuspend();\n            }\n          },\n          (state.imgBytes > estimatedBytesWithinLimit ? 50 : 800) +\n            timeoutOffset\n        );\n        state.unsuspend = commit;\n        return function () {\n          state.unsuspend = null;\n          clearTimeout(stylesheetTimer);\n          clearTimeout(imgTimer);\n        };\n      }\n    : null;\n}\nfunction onUnsuspend() {\n  this.count--;\n  if (0 === this.count && (0 === this.imgCount || !this.waitingForImages))\n    if (this.stylesheets) insertSuspendedStylesheets(this, this.stylesheets);\n    else if (this.unsuspend) {\n      var unsuspend = this.unsuspend;\n      this.unsuspend = null;\n      unsuspend();\n    }\n}\nvar precedencesByRoot = null;\nfunction insertSuspendedStylesheets(state, resources) {\n  state.stylesheets = null;\n  null !== state.unsuspend &&\n    (state.count++,\n    (precedencesByRoot = new Map()),\n    resources.forEach(insertStylesheetIntoRoot, state),\n    (precedencesByRoot = null),\n    onUnsuspend.call(state));\n}\nfunction insertStylesheetIntoRoot(root, resource) {\n  if (!(resource.state.loading & 4)) {\n    var precedences = precedencesByRoot.get(root);\n    if (precedences) var last = precedences.get(null);\n    else {\n      precedences = new Map();\n      precedencesByRoot.set(root, precedences);\n      for (\n        var nodes = root.querySelectorAll(\n            \"link[data-precedence],style[data-precedence]\"\n          ),\n          i = 0;\n        i < nodes.length;\n        i++\n      ) {\n        var node = nodes[i];\n        if (\n          \"LINK\" === node.nodeName ||\n          \"not all\" !== node.getAttribute(\"media\")\n        )\n          precedences.set(node.dataset.precedence, node), (last = node);\n      }\n      last && precedences.set(null, last);\n    }\n    nodes = resource.instance;\n    node = nodes.getAttribute(\"data-precedence\");\n    i = precedences.get(node) || last;\n    i === last && precedences.set(null, nodes);\n    precedences.set(node, nodes);\n    this.count++;\n    last = onUnsuspend.bind(this);\n    nodes.addEventListener(\"load\", last);\n    nodes.addEventListener(\"error\", last);\n    i\n      ? i.parentNode.insertBefore(nodes, i.nextSibling)\n      : ((root = 9 === root.nodeType ? root.head : root),\n        root.insertBefore(nodes, root.firstChild));\n    resource.state.loading |= 4;\n  }\n}\nvar HostTransitionContext = {\n  $$typeof: REACT_CONTEXT_TYPE,\n  Provider: null,\n  Consumer: null,\n  _currentValue: sharedNotPendingObject,\n  _currentValue2: sharedNotPendingObject,\n  _threadCount: 0\n};\nfunction FiberRootNode(\n  containerInfo,\n  tag,\n  hydrate,\n  identifierPrefix,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  onDefaultTransitionIndicator,\n  formState\n) {\n  this.tag = 1;\n  this.containerInfo = containerInfo;\n  this.pingCache = this.current = this.pendingChildren = null;\n  this.timeoutHandle = -1;\n  this.callbackNode =\n    this.next =\n    this.pendingContext =\n    this.context =\n    this.cancelPendingCommit =\n      null;\n  this.callbackPriority = 0;\n  this.expirationTimes = createLaneMap(-1);\n  this.entangledLanes =\n    this.shellSuspendCounter =\n    this.errorRecoveryDisabledLanes =\n    this.expiredLanes =\n    this.warmLanes =\n    this.pingedLanes =\n    this.suspendedLanes =\n    this.pendingLanes =\n      0;\n  this.entanglements = createLaneMap(0);\n  this.hiddenUpdates = createLaneMap(null);\n  this.identifierPrefix = identifierPrefix;\n  this.onUncaughtError = onUncaughtError;\n  this.onCaughtError = onCaughtError;\n  this.onRecoverableError = onRecoverableError;\n  this.pooledCache = null;\n  this.pooledCacheLanes = 0;\n  this.formState = formState;\n  this.incompleteTransitions = new Map();\n}\nfunction createFiberRoot(\n  containerInfo,\n  tag,\n  hydrate,\n  initialChildren,\n  hydrationCallbacks,\n  isStrictMode,\n  identifierPrefix,\n  formState,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  onDefaultTransitionIndicator\n) {\n  containerInfo = new FiberRootNode(\n    containerInfo,\n    tag,\n    hydrate,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    onDefaultTransitionIndicator,\n    formState\n  );\n  tag = 1;\n  !0 === isStrictMode && (tag |= 24);\n  isStrictMode = createFiberImplClass(3, null, null, tag);\n  containerInfo.current = isStrictMode;\n  isStrictMode.stateNode = containerInfo;\n  tag = createCache();\n  tag.refCount++;\n  containerInfo.pooledCache = tag;\n  tag.refCount++;\n  isStrictMode.memoizedState = {\n    element: initialChildren,\n    isDehydrated: hydrate,\n    cache: tag\n  };\n  initializeUpdateQueue(isStrictMode);\n  return containerInfo;\n}\nfunction getContextForSubtree(parentComponent) {\n  if (!parentComponent) return emptyContextObject;\n  parentComponent = emptyContextObject;\n  return parentComponent;\n}\nfunction updateContainerImpl(\n  rootFiber,\n  lane,\n  element,\n  container,\n  parentComponent,\n  callback\n) {\n  parentComponent = getContextForSubtree(parentComponent);\n  null === container.context\n    ? (container.context = parentComponent)\n    : (container.pendingContext = parentComponent);\n  container = createUpdate(lane);\n  container.payload = { element: element };\n  callback = void 0 === callback ? null : callback;\n  null !== callback && (container.callback = callback);\n  element = enqueueUpdate(rootFiber, container, lane);\n  null !== element &&\n    (scheduleUpdateOnFiber(element, rootFiber, lane),\n    entangleTransitions(element, rootFiber, lane));\n}\nfunction markRetryLaneImpl(fiber, retryLane) {\n  fiber = fiber.memoizedState;\n  if (null !== fiber && null !== fiber.dehydrated) {\n    var a = fiber.retryLane;\n    fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n  }\n}\nfunction markRetryLaneIfNotHydrated(fiber, retryLane) {\n  markRetryLaneImpl(fiber, retryLane);\n  (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n}\nfunction attemptContinuousHydration(fiber) {\n  if (13 === fiber.tag || 31 === fiber.tag) {\n    var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n    null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n    markRetryLaneIfNotHydrated(fiber, 67108864);\n  }\n}\nfunction attemptHydrationAtCurrentPriority(fiber) {\n  if (13 === fiber.tag || 31 === fiber.tag) {\n    var lane = requestUpdateLane();\n    lane = getBumpedLaneForHydrationByLane(lane);\n    var root = enqueueConcurrentRenderForLane(fiber, lane);\n    null !== root && scheduleUpdateOnFiber(root, fiber, lane);\n    markRetryLaneIfNotHydrated(fiber, lane);\n  }\n}\nvar _enabled = !0;\nfunction dispatchDiscreteEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 2),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchContinuousEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 8),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchEvent(\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (_enabled) {\n    var blockedOn = findInstanceBlockingEvent(nativeEvent);\n    if (null === blockedOn)\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        return_targetInst,\n        targetContainer\n      ),\n        clearIfContinuousEvent(domEventName, nativeEvent);\n    else if (\n      queueIfContinuousEvent(\n        blockedOn,\n        domEventName,\n        eventSystemFlags,\n        targetContainer,\n        nativeEvent\n      )\n    )\n      nativeEvent.stopPropagation();\n    else if (\n      (clearIfContinuousEvent(domEventName, nativeEvent),\n      eventSystemFlags & 4 &&\n        -1 < discreteReplayableEvents.indexOf(domEventName))\n    ) {\n      for (; null !== blockedOn; ) {\n        var fiber = getInstanceFromNode(blockedOn);\n        if (null !== fiber)\n          switch (fiber.tag) {\n            case 3:\n              fiber = fiber.stateNode;\n              if (fiber.current.memoizedState.isDehydrated) {\n                var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n                if (0 !== lanes) {\n                  var root = fiber;\n                  root.pendingLanes |= 2;\n                  for (root.entangledLanes |= 2; lanes; ) {\n                    var lane = 1 << (31 - clz32(lanes));\n                    root.entanglements[1] |= lane;\n                    lanes &= ~lane;\n                  }\n                  ensureRootIsScheduled(fiber);\n                  0 === (executionContext & 6) &&\n                    ((workInProgressRootRenderTargetTime = now() + 500),\n                    flushSyncWorkAcrossRoots_impl(0, !1));\n                }\n              }\n              break;\n            case 31:\n            case 13:\n              (root = enqueueConcurrentRenderForLane(fiber, 2)),\n                null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n                flushSyncWork$1(),\n                markRetryLaneIfNotHydrated(fiber, 2);\n          }\n        fiber = findInstanceBlockingEvent(nativeEvent);\n        null === fiber &&\n          dispatchEventForPluginEventSystem(\n            domEventName,\n            eventSystemFlags,\n            nativeEvent,\n            return_targetInst,\n            targetContainer\n          );\n        if (fiber === blockedOn) break;\n        blockedOn = fiber;\n      }\n      null !== blockedOn && nativeEvent.stopPropagation();\n    } else\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        null,\n        targetContainer\n      );\n  }\n}\nfunction findInstanceBlockingEvent(nativeEvent) {\n  nativeEvent = getEventTarget(nativeEvent);\n  return findInstanceBlockingTarget(nativeEvent);\n}\nvar return_targetInst = null;\nfunction findInstanceBlockingTarget(targetNode) {\n  return_targetInst = null;\n  targetNode = getClosestInstanceFromNode(targetNode);\n  if (null !== targetNode) {\n    var nearestMounted = getNearestMountedFiber(targetNode);\n    if (null === nearestMounted) targetNode = null;\n    else {\n      var tag = nearestMounted.tag;\n      if (13 === tag) {\n        targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n        if (null !== targetNode) return targetNode;\n        targetNode = null;\n      } else if (31 === tag) {\n        targetNode = getActivityInstanceFromFiber(nearestMounted);\n        if (null !== targetNode) return targetNode;\n        targetNode = null;\n      } else if (3 === tag) {\n        if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n          return 3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        targetNode = null;\n      } else nearestMounted !== targetNode && (targetNode = null);\n    }\n  }\n  return_targetInst = targetNode;\n  return null;\n}\nfunction getEventPriority(domEventName) {\n  switch (domEventName) {\n    case \"beforetoggle\":\n    case \"cancel\":\n    case \"click\":\n    case \"close\":\n    case \"contextmenu\":\n    case \"copy\":\n    case \"cut\":\n    case \"auxclick\":\n    case \"dblclick\":\n    case \"dragend\":\n    case \"dragstart\":\n    case \"drop\":\n    case \"focusin\":\n    case \"focusout\":\n    case \"input\":\n    case \"invalid\":\n    case \"keydown\":\n    case \"keypress\":\n    case \"keyup\":\n    case \"mousedown\":\n    case \"mouseup\":\n    case \"paste\":\n    case \"pause\":\n    case \"play\":\n    case \"pointercancel\":\n    case \"pointerdown\":\n    case \"pointerup\":\n    case \"ratechange\":\n    case \"reset\":\n    case \"resize\":\n    case \"seeked\":\n    case \"submit\":\n    case \"toggle\":\n    case \"touchcancel\":\n    case \"touchend\":\n    case \"touchstart\":\n    case \"volumechange\":\n    case \"change\":\n    case \"selectionchange\":\n    case \"textInput\":\n    case \"compositionstart\":\n    case \"compositionend\":\n    case \"compositionupdate\":\n    case \"beforeblur\":\n    case \"afterblur\":\n    case \"beforeinput\":\n    case \"blur\":\n    case \"fullscreenchange\":\n    case \"focus\":\n    case \"hashchange\":\n    case \"popstate\":\n    case \"select\":\n    case \"selectstart\":\n      return 2;\n    case \"drag\":\n    case \"dragenter\":\n    case \"dragexit\":\n    case \"dragleave\":\n    case \"dragover\":\n    case \"mousemove\":\n    case \"mouseout\":\n    case \"mouseover\":\n    case \"pointermove\":\n    case \"pointerout\":\n    case \"pointerover\":\n    case \"scroll\":\n    case \"touchmove\":\n    case \"wheel\":\n    case \"mouseenter\":\n    case \"mouseleave\":\n    case \"pointerenter\":\n    case \"pointerleave\":\n      return 8;\n    case \"message\":\n      switch (getCurrentPriorityLevel()) {\n        case ImmediatePriority:\n          return 2;\n        case UserBlockingPriority:\n          return 8;\n        case NormalPriority$1:\n        case LowPriority:\n          return 32;\n        case IdlePriority:\n          return 268435456;\n        default:\n          return 32;\n      }\n    default:\n      return 32;\n  }\n}\nvar hasScheduledReplayAttempt = !1,\n  queuedFocus = null,\n  queuedDrag = null,\n  queuedMouse = null,\n  queuedPointers = new Map(),\n  queuedPointerCaptures = new Map(),\n  queuedExplicitHydrationTargets = [],\n  discreteReplayableEvents =\n    \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\n      \" \"\n    );\nfunction clearIfContinuousEvent(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"focusin\":\n    case \"focusout\":\n      queuedFocus = null;\n      break;\n    case \"dragenter\":\n    case \"dragleave\":\n      queuedDrag = null;\n      break;\n    case \"mouseover\":\n    case \"mouseout\":\n      queuedMouse = null;\n      break;\n    case \"pointerover\":\n    case \"pointerout\":\n      queuedPointers.delete(nativeEvent.pointerId);\n      break;\n    case \"gotpointercapture\":\n    case \"lostpointercapture\":\n      queuedPointerCaptures.delete(nativeEvent.pointerId);\n  }\n}\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(\n  existingQueuedEvent,\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (\n    null === existingQueuedEvent ||\n    existingQueuedEvent.nativeEvent !== nativeEvent\n  )\n    return (\n      (existingQueuedEvent = {\n        blockedOn: blockedOn,\n        domEventName: domEventName,\n        eventSystemFlags: eventSystemFlags,\n        nativeEvent: nativeEvent,\n        targetContainers: [targetContainer]\n      }),\n      null !== blockedOn &&\n        ((blockedOn = getInstanceFromNode(blockedOn)),\n        null !== blockedOn && attemptContinuousHydration(blockedOn)),\n      existingQueuedEvent\n    );\n  existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n  blockedOn = existingQueuedEvent.targetContainers;\n  null !== targetContainer &&\n    -1 === blockedOn.indexOf(targetContainer) &&\n    blockedOn.push(targetContainer);\n  return existingQueuedEvent;\n}\nfunction queueIfContinuousEvent(\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  switch (domEventName) {\n    case \"focusin\":\n      return (\n        (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedFocus,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"dragenter\":\n      return (\n        (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedDrag,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"mouseover\":\n      return (\n        (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedMouse,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"pointerover\":\n      var pointerId = nativeEvent.pointerId;\n      queuedPointers.set(\n        pointerId,\n        accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedPointers.get(pointerId) || null,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )\n      );\n      return !0;\n    case \"gotpointercapture\":\n      return (\n        (pointerId = nativeEvent.pointerId),\n        queuedPointerCaptures.set(\n          pointerId,\n          accumulateOrCreateContinuousQueuedReplayableEvent(\n            queuedPointerCaptures.get(pointerId) || null,\n            blockedOn,\n            domEventName,\n            eventSystemFlags,\n            targetContainer,\n            nativeEvent\n          )\n        ),\n        !0\n      );\n  }\n  return !1;\n}\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n  var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n  if (null !== targetInst) {\n    var nearestMounted = getNearestMountedFiber(targetInst);\n    if (null !== nearestMounted)\n      if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n        if (\n          ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n          null !== targetInst)\n        ) {\n          queuedTarget.blockedOn = targetInst;\n          runWithPriority(queuedTarget.priority, function () {\n            attemptHydrationAtCurrentPriority(nearestMounted);\n          });\n          return;\n        }\n      } else if (31 === targetInst) {\n        if (\n          ((targetInst = getActivityInstanceFromFiber(nearestMounted)),\n          null !== targetInst)\n        ) {\n          queuedTarget.blockedOn = targetInst;\n          runWithPriority(queuedTarget.priority, function () {\n            attemptHydrationAtCurrentPriority(nearestMounted);\n          });\n          return;\n        }\n      } else if (\n        3 === targetInst &&\n        nearestMounted.stateNode.current.memoizedState.isDehydrated\n      ) {\n        queuedTarget.blockedOn =\n          3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        return;\n      }\n  }\n  queuedTarget.blockedOn = null;\n}\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n  if (null !== queuedEvent.blockedOn) return !1;\n  for (\n    var targetContainers = queuedEvent.targetContainers;\n    0 < targetContainers.length;\n\n  ) {\n    var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n    if (null === nextBlockedOn) {\n      nextBlockedOn = queuedEvent.nativeEvent;\n      var nativeEventClone = new nextBlockedOn.constructor(\n        nextBlockedOn.type,\n        nextBlockedOn\n      );\n      currentReplayingEvent = nativeEventClone;\n      nextBlockedOn.target.dispatchEvent(nativeEventClone);\n      currentReplayingEvent = null;\n    } else\n      return (\n        (targetContainers = getInstanceFromNode(nextBlockedOn)),\n        null !== targetContainers &&\n          attemptContinuousHydration(targetContainers),\n        (queuedEvent.blockedOn = nextBlockedOn),\n        !1\n      );\n    targetContainers.shift();\n  }\n  return !0;\n}\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n  attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n}\nfunction replayUnblockedEvents() {\n  hasScheduledReplayAttempt = !1;\n  null !== queuedFocus &&\n    attemptReplayContinuousQueuedEvent(queuedFocus) &&\n    (queuedFocus = null);\n  null !== queuedDrag &&\n    attemptReplayContinuousQueuedEvent(queuedDrag) &&\n    (queuedDrag = null);\n  null !== queuedMouse &&\n    attemptReplayContinuousQueuedEvent(queuedMouse) &&\n    (queuedMouse = null);\n  queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n  queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n  queuedEvent.blockedOn === unblocked &&\n    ((queuedEvent.blockedOn = null),\n    hasScheduledReplayAttempt ||\n      ((hasScheduledReplayAttempt = !0),\n      Scheduler.unstable_scheduleCallback(\n        Scheduler.unstable_NormalPriority,\n        replayUnblockedEvents\n      )));\n}\nvar lastScheduledReplayQueue = null;\nfunction scheduleReplayQueueIfNeeded(formReplayingQueue) {\n  lastScheduledReplayQueue !== formReplayingQueue &&\n    ((lastScheduledReplayQueue = formReplayingQueue),\n    Scheduler.unstable_scheduleCallback(\n      Scheduler.unstable_NormalPriority,\n      function () {\n        lastScheduledReplayQueue === formReplayingQueue &&\n          (lastScheduledReplayQueue = null);\n        for (var i = 0; i < formReplayingQueue.length; i += 3) {\n          var form = formReplayingQueue[i],\n            submitterOrAction = formReplayingQueue[i + 1],\n            formData = formReplayingQueue[i + 2];\n          if (\"function\" !== typeof submitterOrAction)\n            if (null === findInstanceBlockingTarget(submitterOrAction || form))\n              continue;\n            else break;\n          var formInst = getInstanceFromNode(form);\n          null !== formInst &&\n            (formReplayingQueue.splice(i, 3),\n            (i -= 3),\n            startHostTransition(\n              formInst,\n              {\n                pending: !0,\n                data: formData,\n                method: form.method,\n                action: submitterOrAction\n              },\n              submitterOrAction,\n              formData\n            ));\n        }\n      }\n    ));\n}\nfunction retryIfBlockedOn(unblocked) {\n  function unblock(queuedEvent) {\n    return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n  }\n  null !== queuedFocus && scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n  null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n  null !== queuedMouse && scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n  queuedPointers.forEach(unblock);\n  queuedPointerCaptures.forEach(unblock);\n  for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n    var queuedTarget = queuedExplicitHydrationTargets[i];\n    queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n  }\n  for (\n    ;\n    0 < queuedExplicitHydrationTargets.length &&\n    ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n  )\n    attemptExplicitHydrationTarget(i),\n      null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n  i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n  if (null != i)\n    for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n      var form = i[queuedTarget],\n        submitterOrAction = i[queuedTarget + 1],\n        formProps = form[internalPropsKey] || null;\n      if (\"function\" === typeof submitterOrAction)\n        formProps || scheduleReplayQueueIfNeeded(i);\n      else if (formProps) {\n        var action = null;\n        if (submitterOrAction && submitterOrAction.hasAttribute(\"formAction\"))\n          if (\n            ((form = submitterOrAction),\n            (formProps = submitterOrAction[internalPropsKey] || null))\n          )\n            action = formProps.formAction;\n          else {\n            if (null !== findInstanceBlockingTarget(form)) continue;\n          }\n        else action = formProps.action;\n        \"function\" === typeof action\n          ? (i[queuedTarget + 1] = action)\n          : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n        scheduleReplayQueueIfNeeded(i);\n      }\n    }\n}\nfunction defaultOnDefaultTransitionIndicator() {\n  function handleNavigate(event) {\n    event.canIntercept &&\n      \"react-transition\" === event.info &&\n      event.intercept({\n        handler: function () {\n          return new Promise(function (resolve) {\n            return (pendingResolve = resolve);\n          });\n        },\n        focusReset: \"manual\",\n        scroll: \"manual\"\n      });\n  }\n  function handleNavigateComplete() {\n    null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n    isCancelled || setTimeout(startFakeNavigation, 20);\n  }\n  function startFakeNavigation() {\n    if (!isCancelled && !navigation.transition) {\n      var currentEntry = navigation.currentEntry;\n      currentEntry &&\n        null != currentEntry.url &&\n        navigation.navigate(currentEntry.url, {\n          state: currentEntry.getState(),\n          info: \"react-transition\",\n          history: \"replace\"\n        });\n    }\n  }\n  if (\"object\" === typeof navigation) {\n    var isCancelled = !1,\n      pendingResolve = null;\n    navigation.addEventListener(\"navigate\", handleNavigate);\n    navigation.addEventListener(\"navigatesuccess\", handleNavigateComplete);\n    navigation.addEventListener(\"navigateerror\", handleNavigateComplete);\n    setTimeout(startFakeNavigation, 100);\n    return function () {\n      isCancelled = !0;\n      navigation.removeEventListener(\"navigate\", handleNavigate);\n      navigation.removeEventListener(\"navigatesuccess\", handleNavigateComplete);\n      navigation.removeEventListener(\"navigateerror\", handleNavigateComplete);\n      null !== pendingResolve && (pendingResolve(), (pendingResolve = null));\n    };\n  }\n}\nfunction ReactDOMRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n  function (children) {\n    var root = this._internalRoot;\n    if (null === root) throw Error(formatProdErrorMessage(409));\n    var current = root.current,\n      lane = requestUpdateLane();\n    updateContainerImpl(current, lane, children, root, null, null);\n  };\nReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n  function () {\n    var root = this._internalRoot;\n    if (null !== root) {\n      this._internalRoot = null;\n      var container = root.containerInfo;\n      updateContainerImpl(root.current, 2, null, root, null, null);\n      flushSyncWork$1();\n      container[internalContainerInstanceKey] = null;\n    }\n  };\nfunction ReactDOMHydrationRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {\n  if (target) {\n    var updatePriority = resolveUpdatePriority();\n    target = { blockedOn: null, target: target, priority: updatePriority };\n    for (\n      var i = 0;\n      i < queuedExplicitHydrationTargets.length &&\n      0 !== updatePriority &&\n      updatePriority < queuedExplicitHydrationTargets[i].priority;\n      i++\n    );\n    queuedExplicitHydrationTargets.splice(i, 0, target);\n    0 === i && attemptExplicitHydrationTarget(target);\n  }\n};\nvar isomorphicReactPackageVersion$jscomp$inline_1840 = React.version;\nif (\n  \"19.2.3\" !==\n  isomorphicReactPackageVersion$jscomp$inline_1840\n)\n  throw Error(\n    formatProdErrorMessage(\n      527,\n      isomorphicReactPackageVersion$jscomp$inline_1840,\n      \"19.2.3\"\n    )\n  );\nReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n  var fiber = componentOrElement._reactInternals;\n  if (void 0 === fiber) {\n    if (\"function\" === typeof componentOrElement.render)\n      throw Error(formatProdErrorMessage(188));\n    componentOrElement = Object.keys(componentOrElement).join(\",\");\n    throw Error(formatProdErrorMessage(268, componentOrElement));\n  }\n  componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n  componentOrElement =\n    null !== componentOrElement\n      ? findCurrentHostFiberImpl(componentOrElement)\n      : null;\n  componentOrElement =\n    null === componentOrElement ? null : componentOrElement.stateNode;\n  return componentOrElement;\n};\nvar internals$jscomp$inline_2347 = {\n  bundleType: 0,\n  version: \"19.2.3\",\n  rendererPackageName: \"react-dom\",\n  currentDispatcherRef: ReactSharedInternals,\n  reconcilerVersion: \"19.2.3\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n  var hook$jscomp$inline_2348 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n  if (\n    !hook$jscomp$inline_2348.isDisabled &&\n    hook$jscomp$inline_2348.supportsFiber\n  )\n    try {\n      (rendererID = hook$jscomp$inline_2348.inject(\n        internals$jscomp$inline_2347\n      )),\n        (injectedHook = hook$jscomp$inline_2348);\n    } catch (err) {}\n}\nexports.createRoot = function (container, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError));\n  options = createFiberRoot(\n    container,\n    1,\n    !1,\n    null,\n    null,\n    isStrictMode,\n    identifierPrefix,\n    null,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    defaultOnDefaultTransitionIndicator\n  );\n  container[internalContainerInstanceKey] = options.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMRoot(options);\n};\nexports.hydrateRoot = function (container, initialChildren, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError,\n    formState = null;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError),\n    void 0 !== options.formState && (formState = options.formState));\n  initialChildren = createFiberRoot(\n    container,\n    1,\n    !0,\n    initialChildren,\n    null != options ? options : null,\n    isStrictMode,\n    identifierPrefix,\n    formState,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    defaultOnDefaultTransitionIndicator\n  );\n  initialChildren.context = getContextForSubtree(null);\n  options = initialChildren.current;\n  isStrictMode = requestUpdateLane();\n  isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);\n  identifierPrefix = createUpdate(isStrictMode);\n  identifierPrefix.callback = null;\n  enqueueUpdate(options, identifierPrefix, isStrictMode);\n  options = isStrictMode;\n  initialChildren.current.lanes = options;\n  markRootUpdated$1(initialChildren, options);\n  ensureRootIsScheduled(initialChildren);\n  container[internalContainerInstanceKey] = initialChildren.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMHydrationRoot(initialChildren);\n};\nexports.version = \"19.2.3\";\n","/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction noop() {}\nvar Internals = {\n    d: {\n      f: noop,\n      r: function () {\n        throw Error(formatProdErrorMessage(522));\n      },\n      D: noop,\n      C: noop,\n      L: noop,\n      m: noop,\n      X: noop,\n      S: noop,\n      M: noop\n    },\n    p: 0,\n    findDOMNode: null\n  },\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\nfunction createPortal$1(children, containerInfo, implementation) {\n  var key =\n    3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n  return {\n    $$typeof: REACT_PORTAL_TYPE,\n    key: null == key ? null : \"\" + key,\n    children: children,\n    containerInfo: containerInfo,\n    implementation: implementation\n  };\n}\nvar ReactSharedInternals =\n  React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n  if (\"font\" === as) return \"\";\n  if (\"string\" === typeof input)\n    return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  Internals;\nexports.createPortal = function (children, container) {\n  var key =\n    2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n  if (\n    !container ||\n    (1 !== container.nodeType &&\n      9 !== container.nodeType &&\n      11 !== container.nodeType)\n  )\n    throw Error(formatProdErrorMessage(299));\n  return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n  var previousTransition = ReactSharedInternals.T,\n    previousUpdatePriority = Internals.p;\n  try {\n    if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n  } finally {\n    (ReactSharedInternals.T = previousTransition),\n      (Internals.p = previousUpdatePriority),\n      Internals.d.f();\n  }\n};\nexports.preconnect = function (href, options) {\n  \"string\" === typeof href &&\n    (options\n      ? ((options = options.crossOrigin),\n        (options =\n          \"string\" === typeof options\n            ? \"use-credentials\" === options\n              ? options\n              : \"\"\n            : void 0))\n      : (options = null),\n    Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n  \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n  if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n      integrity =\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      fetchPriority =\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0;\n    \"style\" === as\n      ? Internals.d.S(\n          href,\n          \"string\" === typeof options.precedence ? options.precedence : void 0,\n          {\n            crossOrigin: crossOrigin,\n            integrity: integrity,\n            fetchPriority: fetchPriority\n          }\n        )\n      : \"script\" === as &&\n        Internals.d.X(href, {\n          crossOrigin: crossOrigin,\n          integrity: integrity,\n          fetchPriority: fetchPriority,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n  }\n};\nexports.preinitModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (\"object\" === typeof options && null !== options) {\n      if (null == options.as || \"script\" === options.as) {\n        var crossOrigin = getCrossOriginStringAs(\n          options.as,\n          options.crossOrigin\n        );\n        Internals.d.M(href, {\n          crossOrigin: crossOrigin,\n          integrity:\n            \"string\" === typeof options.integrity ? options.integrity : void 0,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n      }\n    } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n  if (\n    \"string\" === typeof href &&\n    \"object\" === typeof options &&\n    null !== options &&\n    \"string\" === typeof options.as\n  ) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n    Internals.d.L(href, as, {\n      crossOrigin: crossOrigin,\n      integrity:\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n      type: \"string\" === typeof options.type ? options.type : void 0,\n      fetchPriority:\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0,\n      referrerPolicy:\n        \"string\" === typeof options.referrerPolicy\n          ? options.referrerPolicy\n          : void 0,\n      imageSrcSet:\n        \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n      imageSizes:\n        \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n      media: \"string\" === typeof options.media ? options.media : void 0\n    });\n  }\n};\nexports.preloadModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (options) {\n      var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n      Internals.d.m(href, {\n        as:\n          \"string\" === typeof options.as && \"script\" !== options.as\n            ? options.as\n            : void 0,\n        crossOrigin: crossOrigin,\n        integrity:\n          \"string\" === typeof options.integrity ? options.integrity : void 0\n      });\n    } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n  Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n  return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n  return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.2.3\";\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom-client.production.js');\n} else {\n  module.exports = require('./cjs/react-dom-client.development.js');\n}\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport canUseDOM from '../../modules/canUseDom';\nfunction getQuery() {\n  return canUseDOM && window.matchMedia != null ? window.matchMedia('(prefers-color-scheme: dark)') : null;\n}\nvar query = getQuery();\nvar listenerMapping = new WeakMap();\nvar Appearance = {\n  getColorScheme() {\n    return query && query.matches ? 'dark' : 'light';\n  },\n  addChangeListener(listener) {\n    var mappedListener = listenerMapping.get(listener);\n    if (!mappedListener) {\n      mappedListener = _ref => {\n        var matches = _ref.matches;\n        listener({\n          colorScheme: matches ? 'dark' : 'light'\n        });\n      };\n      listenerMapping.set(listener, mappedListener);\n    }\n    if (query) {\n      query.addListener(mappedListener);\n    }\n    function remove() {\n      var mappedListener = listenerMapping.get(listener);\n      if (query && mappedListener) {\n        query.removeListener(mappedListener);\n      }\n      listenerMapping.delete(listener);\n    }\n    return {\n      remove\n    };\n  }\n};\nexport default Appearance;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction emptyFunction() {}\nvar BackHandler = {\n  exitApp: emptyFunction,\n  addEventListener() {\n    console.error('BackHandler is not supported on web and should not be used.');\n    return {\n      remove: emptyFunction\n    };\n  },\n  removeEventListener: emptyFunction\n};\nexport default BackHandler;","import RCTDeviceEventEmitter from '../../vendor/react-native/EventEmitter/RCTDeviceEventEmitter';\nexport default RCTDeviceEventEmitter;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport invariant from 'fbjs/lib/invariant';\nimport canUseDOM from '../../modules/canUseDom';\nvar dimensions = {\n  window: {\n    fontScale: 1,\n    height: 0,\n    scale: 1,\n    width: 0\n  },\n  screen: {\n    fontScale: 1,\n    height: 0,\n    scale: 1,\n    width: 0\n  }\n};\nvar listeners = {};\nvar shouldInit = canUseDOM;\nfunction update() {\n  if (!canUseDOM) {\n    return;\n  }\n  var win = window;\n  var height;\n  var width;\n\n  /**\n   * iOS does not update viewport dimensions on keyboard open/close.\n   * window.visualViewport(https://developer.mozilla.org/en-US/docs/Web/API/VisualViewport)\n   * is used instead of document.documentElement.clientHeight (which remains as a fallback)\n   */\n  if (win.visualViewport) {\n    var visualViewport = win.visualViewport;\n    /**\n     * We are multiplying by scale because height and width from visual viewport\n     * also react to pinch zoom, and become smaller when zoomed. But it is not desired\n     * behaviour, since originally documentElement client height and width were used,\n     * and they do not react to pinch zoom.\n     */\n    height = Math.round(visualViewport.height * visualViewport.scale);\n    width = Math.round(visualViewport.width * visualViewport.scale);\n  } else {\n    var docEl = win.document.documentElement;\n    height = docEl.clientHeight;\n    width = docEl.clientWidth;\n  }\n  dimensions.window = {\n    fontScale: 1,\n    height,\n    scale: win.devicePixelRatio || 1,\n    width\n  };\n  dimensions.screen = {\n    fontScale: 1,\n    height: win.screen.height,\n    scale: win.devicePixelRatio || 1,\n    width: win.screen.width\n  };\n}\nfunction handleResize() {\n  update();\n  if (Array.isArray(listeners['change'])) {\n    listeners['change'].forEach(handler => handler(dimensions));\n  }\n}\nexport default class Dimensions {\n  static get(dimension) {\n    if (shouldInit) {\n      shouldInit = false;\n      update();\n    }\n    invariant(dimensions[dimension], \"No dimension set for key \" + dimension);\n    return dimensions[dimension];\n  }\n  static set(initialDimensions) {\n    if (initialDimensions) {\n      if (canUseDOM) {\n        invariant(false, 'Dimensions cannot be set in the browser');\n      } else {\n        if (initialDimensions.screen != null) {\n          dimensions.screen = initialDimensions.screen;\n        }\n        if (initialDimensions.window != null) {\n          dimensions.window = initialDimensions.window;\n        }\n      }\n    }\n  }\n  static addEventListener(type, handler) {\n    listeners[type] = listeners[type] || [];\n    listeners[type].push(handler);\n    return {\n      remove: () => {\n        this.removeEventListener(type, handler);\n      }\n    };\n  }\n  static removeEventListener(type, handler) {\n    if (Array.isArray(listeners[type])) {\n      listeners[type] = listeners[type].filter(_handler => _handler !== handler);\n    }\n  }\n}\nif (canUseDOM) {\n  if (window.visualViewport) {\n    window.visualViewport.addEventListener('resize', handleResize, false);\n  } else {\n    window.addEventListener('resize', handleResize, false);\n  }\n}","/**\n * Portions Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n/**\n * BezierEasing - use bezier curve for transition easing function\n * https://github.com/gre/bezier-easing\n * @copyright 2014-2015 Gaëtan Renaudeau. MIT License.\n */\n\n'use strict';\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nvar NEWTON_ITERATIONS = 4;\nvar NEWTON_MIN_SLOPE = 0.001;\nvar SUBDIVISION_PRECISION = 0.0000001;\nvar SUBDIVISION_MAX_ITERATIONS = 10;\nvar kSplineTableSize = 11;\nvar kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\nvar float32ArraySupported = typeof Float32Array === 'function';\nfunction A(aA1, aA2) {\n  return 1.0 - 3.0 * aA2 + 3.0 * aA1;\n}\nfunction B(aA1, aA2) {\n  return 3.0 * aA2 - 6.0 * aA1;\n}\nfunction C(aA1) {\n  return 3.0 * aA1;\n}\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier(aT, aA1, aA2) {\n  return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n}\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope(aT, aA1, aA2) {\n  return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);\n}\nfunction binarySubdivide(aX, _aA, _aB, mX1, mX2) {\n  var currentX,\n    currentT,\n    i = 0,\n    aA = _aA,\n    aB = _aB;\n  do {\n    currentT = aA + (aB - aA) / 2.0;\n    currentX = calcBezier(currentT, mX1, mX2) - aX;\n    if (currentX > 0.0) {\n      aB = currentT;\n    } else {\n      aA = currentT;\n    }\n  } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n  return currentT;\n}\nfunction newtonRaphsonIterate(aX, _aGuessT, mX1, mX2) {\n  var aGuessT = _aGuessT;\n  for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n    var currentSlope = getSlope(aGuessT, mX1, mX2);\n    if (currentSlope === 0.0) {\n      return aGuessT;\n    }\n    var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n    aGuessT -= currentX / currentSlope;\n  }\n  return aGuessT;\n}\nexport default function bezier(mX1, mY1, mX2, mY2) {\n  if (!(mX1 >= 0 && mX1 <= 1 && mX2 >= 0 && mX2 <= 1)) {\n    throw new Error('bezier x values must be in [0, 1] range');\n  }\n\n  // Precompute samples table\n  var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n  if (mX1 !== mY1 || mX2 !== mY2) {\n    for (var i = 0; i < kSplineTableSize; ++i) {\n      sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n    }\n  }\n  function getTForX(aX) {\n    var intervalStart = 0.0;\n    var currentSample = 1;\n    var lastSample = kSplineTableSize - 1;\n    for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n      intervalStart += kSampleStepSize;\n    }\n    --currentSample;\n\n    // Interpolate to provide an initial guess for t\n    var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n    var guessForT = intervalStart + dist * kSampleStepSize;\n    var initialSlope = getSlope(guessForT, mX1, mX2);\n    if (initialSlope >= NEWTON_MIN_SLOPE) {\n      return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n    } else if (initialSlope === 0.0) {\n      return guessForT;\n    } else {\n      return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n    }\n  }\n  return function BezierEasing(x) {\n    if (mX1 === mY1 && mX2 === mY2) {\n      return x; // linear\n    }\n    // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n    if (x === 0) {\n      return 0;\n    }\n    if (x === 1) {\n      return 1;\n    }\n    return calcBezier(getTForX(x), mY1, mY2);\n  };\n}\n;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\nimport _bezier from './bezier';\nvar ease;\n\n/**\n * The `Easing` module implements common easing functions. This module is used\n * by [Animate.timing()](docs/animate.html#timing) to convey physically\n * believable motion in animations.\n *\n * You can find a visualization of some common easing functions at\n * http://easings.net/\n *\n * ### Predefined animations\n *\n * The `Easing` module provides several predefined animations through the\n * following methods:\n *\n * - [`back`](docs/easing.html#back) provides a simple animation where the\n *   object goes slightly back before moving forward\n * - [`bounce`](docs/easing.html#bounce) provides a bouncing animation\n * - [`ease`](docs/easing.html#ease) provides a simple inertial animation\n * - [`elastic`](docs/easing.html#elastic) provides a simple spring interaction\n *\n * ### Standard functions\n *\n * Three standard easing functions are provided:\n *\n * - [`linear`](docs/easing.html#linear)\n * - [`quad`](docs/easing.html#quad)\n * - [`cubic`](docs/easing.html#cubic)\n *\n * The [`poly`](docs/easing.html#poly) function can be used to implement\n * quartic, quintic, and other higher power functions.\n *\n * ### Additional functions\n *\n * Additional mathematical functions are provided by the following methods:\n *\n * - [`bezier`](docs/easing.html#bezier) provides a cubic bezier curve\n * - [`circle`](docs/easing.html#circle) provides a circular function\n * - [`sin`](docs/easing.html#sin) provides a sinusoidal function\n * - [`exp`](docs/easing.html#exp) provides an exponential function\n *\n * The following helpers are used to modify other easing functions.\n *\n * - [`in`](docs/easing.html#in) runs an easing function forwards\n * - [`inOut`](docs/easing.html#inout) makes any easing function symmetrical\n * - [`out`](docs/easing.html#out) runs an easing function backwards\n */\nclass Easing {\n  /**\n   * A stepping function, returns 1 for any positive value of `n`.\n   */\n  static step0(n) {\n    return n > 0 ? 1 : 0;\n  }\n\n  /**\n   * A stepping function, returns 1 if `n` is greater than or equal to 1.\n   */\n  static step1(n) {\n    return n >= 1 ? 1 : 0;\n  }\n\n  /**\n   * A linear function, `f(t) = t`. Position correlates to elapsed time one to\n   * one.\n   *\n   * http://cubic-bezier.com/#0,0,1,1\n   */\n  static linear(t) {\n    return t;\n  }\n\n  /**\n   * A simple inertial interaction, similar to an object slowly accelerating to\n   * speed.\n   *\n   * http://cubic-bezier.com/#.42,0,1,1\n   */\n  static ease(t) {\n    if (!ease) {\n      ease = Easing.bezier(0.42, 0, 1, 1);\n    }\n    return ease(t);\n  }\n\n  /**\n   * A quadratic function, `f(t) = t * t`. Position equals the square of elapsed\n   * time.\n   *\n   * http://easings.net/#easeInQuad\n   */\n  static quad(t) {\n    return t * t;\n  }\n\n  /**\n   * A cubic function, `f(t) = t * t * t`. Position equals the cube of elapsed\n   * time.\n   *\n   * http://easings.net/#easeInCubic\n   */\n  static cubic(t) {\n    return t * t * t;\n  }\n\n  /**\n   * A power function. Position is equal to the Nth power of elapsed time.\n   *\n   * n = 4: http://easings.net/#easeInQuart\n   * n = 5: http://easings.net/#easeInQuint\n   */\n  static poly(n) {\n    return t => Math.pow(t, n);\n  }\n\n  /**\n   * A sinusoidal function.\n   *\n   * http://easings.net/#easeInSine\n   */\n  static sin(t) {\n    return 1 - Math.cos(t * Math.PI / 2);\n  }\n\n  /**\n   * A circular function.\n   *\n   * http://easings.net/#easeInCirc\n   */\n  static circle(t) {\n    return 1 - Math.sqrt(1 - t * t);\n  }\n\n  /**\n   * An exponential function.\n   *\n   * http://easings.net/#easeInExpo\n   */\n  static exp(t) {\n    return Math.pow(2, 10 * (t - 1));\n  }\n\n  /**\n   * A simple elastic interaction, similar to a spring oscillating back and\n   * forth.\n   *\n   * Default bounciness is 1, which overshoots a little bit once. 0 bounciness\n   * doesn't overshoot at all, and bounciness of N > 1 will overshoot about N\n   * times.\n   *\n   * http://easings.net/#easeInElastic\n   */\n  static elastic(bounciness) {\n    if (bounciness === void 0) {\n      bounciness = 1;\n    }\n    var p = bounciness * Math.PI;\n    return t => 1 - Math.pow(Math.cos(t * Math.PI / 2), 3) * Math.cos(t * p);\n  }\n\n  /**\n   * Use with `Animated.parallel()` to create a simple effect where the object\n   * animates back slightly as the animation starts.\n   *\n   * Wolfram Plot:\n   *\n   * - http://tiny.cc/back_default (s = 1.70158, default)\n   */\n  static back(s) {\n    if (s === void 0) {\n      s = 1.70158;\n    }\n    return t => t * t * ((s + 1) * t - s);\n  }\n\n  /**\n   * Provides a simple bouncing effect.\n   *\n   * http://easings.net/#easeInBounce\n   */\n  static bounce(t) {\n    if (t < 1 / 2.75) {\n      return 7.5625 * t * t;\n    }\n    if (t < 2 / 2.75) {\n      var _t = t - 1.5 / 2.75;\n      return 7.5625 * _t * _t + 0.75;\n    }\n    if (t < 2.5 / 2.75) {\n      var _t2 = t - 2.25 / 2.75;\n      return 7.5625 * _t2 * _t2 + 0.9375;\n    }\n    var t2 = t - 2.625 / 2.75;\n    return 7.5625 * t2 * t2 + 0.984375;\n  }\n\n  /**\n   * Provides a cubic bezier curve, equivalent to CSS Transitions'\n   * `transition-timing-function`.\n   *\n   * A useful tool to visualize cubic bezier curves can be found at\n   * http://cubic-bezier.com/\n   */\n  static bezier(x1, y1, x2, y2) {\n    return _bezier(x1, y1, x2, y2);\n  }\n\n  /**\n   * Runs an easing function forwards.\n   */\n  static in(easing) {\n    return easing;\n  }\n\n  /**\n   * Runs an easing function backwards.\n   */\n  static out(easing) {\n    return t => 1 - easing(1 - t);\n  }\n\n  /**\n   * Makes any easing function symmetrical. The easing function will run\n   * forwards for half of the duration, then backwards for the rest of the\n   * duration.\n   */\n  static inOut(easing) {\n    return t => {\n      if (t < 0.5) {\n        return easing(t * 2) / 2;\n      }\n      return 1 - easing((1 - t) * 2) / 2;\n    };\n  }\n}\nexport default Easing;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport Easing from '../../vendor/react-native/Animated/Easing';\nexport default Easing;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\n/*\n * @returns {bool} true if different, false if equal\n */\nvar deepDiffer = function deepDiffer(one, two, maxDepth) {\n  if (maxDepth === void 0) {\n    maxDepth = -1;\n  }\n  if (maxDepth === 0) {\n    return true;\n  }\n  if (one === two) {\n    // Short circuit on identical object references instead of traversing them.\n    return false;\n  }\n  if (typeof one === 'function' && typeof two === 'function') {\n    // We consider all functions equal\n    return false;\n  }\n  if (typeof one !== 'object' || one === null) {\n    // Primitives can be directly compared\n    return one !== two;\n  }\n  if (typeof two !== 'object' || two === null) {\n    // We know they are different because the previous case would have triggered\n    // otherwise.\n    return true;\n  }\n  if (one.constructor !== two.constructor) {\n    return true;\n  }\n  if (Array.isArray(one)) {\n    // We know two is also an array because the constructors are equal\n    var len = one.length;\n    if (two.length !== len) {\n      return true;\n    }\n    for (var ii = 0; ii < len; ii++) {\n      if (deepDiffer(one[ii], two[ii], maxDepth - 1)) {\n        return true;\n      }\n    }\n  } else {\n    for (var key in one) {\n      if (deepDiffer(one[key], two[key], maxDepth - 1)) {\n        return true;\n      }\n    }\n    for (var twoKey in two) {\n      // The only case we haven't checked yet is keys that are in two but aren't\n      // in one, which means they are different.\n      if (one[twoKey] === undefined && two[twoKey] !== undefined) {\n        return true;\n      }\n    }\n  }\n  return false;\n};\nexport default deepDiffer;","var safeIsNaN = Number.isNaN ||\n    function ponyfill(value) {\n        return typeof value === 'number' && value !== value;\n    };\nfunction isEqual(first, second) {\n    if (first === second) {\n        return true;\n    }\n    if (safeIsNaN(first) && safeIsNaN(second)) {\n        return true;\n    }\n    return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n    if (newInputs.length !== lastInputs.length) {\n        return false;\n    }\n    for (var i = 0; i < newInputs.length; i++) {\n        if (!isEqual(newInputs[i], lastInputs[i])) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n    if (isEqual === void 0) { isEqual = areInputsEqual; }\n    var cache = null;\n    function memoized() {\n        var newArgs = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            newArgs[_i] = arguments[_i];\n        }\n        if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) {\n            return cache.lastResult;\n        }\n        var lastResult = resultFn.apply(this, newArgs);\n        cache = {\n            lastResult: lastResult,\n            lastArgs: newArgs,\n            lastThis: this,\n        };\n        return lastResult;\n    }\n    memoized.clear = function clear() {\n        cache = null;\n    };\n    return memoized;\n}\n\nexport { memoizeOne as default };\n","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nvar _excluded = [\"numColumns\", \"columnWrapperStyle\", \"removeClippedSubviews\", \"strictMode\"];\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport View from '../../../exports/View';\nimport StyleSheet from '../../../exports/StyleSheet';\nimport deepDiffer from '../deepDiffer';\nimport Platform from '../../../exports/Platform';\nimport invariant from 'fbjs/lib/invariant';\nimport * as React from 'react';\nimport VirtualizedList from '../VirtualizedList';\nimport { keyExtractor as defaultKeyExtractor } from '../VirtualizeUtils';\nimport memoizeOne from 'memoize-one';\n/**\n * Default Props Helper Functions\n * Use the following helper functions for default values\n */\n\n// removeClippedSubviewsOrDefault(this.props.removeClippedSubviews)\nfunction removeClippedSubviewsOrDefault(removeClippedSubviews) {\n  return removeClippedSubviews !== null && removeClippedSubviews !== void 0 ? removeClippedSubviews : Platform.OS === 'android';\n}\n\n// numColumnsOrDefault(this.props.numColumns)\nfunction numColumnsOrDefault(numColumns) {\n  return numColumns !== null && numColumns !== void 0 ? numColumns : 1;\n}\nfunction isArrayLike(data) {\n  // $FlowExpectedError[incompatible-use]\n  return typeof Object(data).length === 'number';\n}\n/**\n * A performant interface for rendering simple, flat lists, supporting the most handy features:\n *\n *  - Fully cross-platform.\n *  - Optional horizontal mode.\n *  - Configurable viewability callbacks.\n *  - Header support.\n *  - Footer support.\n *  - Separator support.\n *  - Pull to Refresh.\n *  - Scroll loading.\n *  - ScrollToIndex support.\n *\n * If you need section support, use [`<SectionList>`](docs/sectionlist.html).\n *\n * Minimal Example:\n *\n *     <FlatList\n *       data={[{key: 'a'}, {key: 'b'}]}\n *       renderItem={({item}) => <Text>{item.key}</Text>}\n *     />\n *\n * More complex, multi-select example demonstrating `PureComponent` usage for perf optimization and avoiding bugs.\n *\n * - By binding the `onPressItem` handler, the props will remain `===` and `PureComponent` will\n *   prevent wasteful re-renders unless the actual `id`, `selected`, or `title` props change, even\n *   if the components rendered in `MyListItem` did not have such optimizations.\n * - By passing `extraData={this.state}` to `FlatList` we make sure `FlatList` itself will re-render\n *   when the `state.selected` changes. Without setting this prop, `FlatList` would not know it\n *   needs to re-render any items because it is also a `PureComponent` and the prop comparison will\n *   not show any changes.\n * - `keyExtractor` tells the list to use the `id`s for the react keys instead of the default `key` property.\n *\n *\n *     class MyListItem extends React.PureComponent {\n *       _onPress = () => {\n *         this.props.onPressItem(this.props.id);\n *       };\n *\n *       render() {\n *         const textColor = this.props.selected ? \"red\" : \"black\";\n *         return (\n *           <TouchableOpacity onPress={this._onPress}>\n *             <View>\n *               <Text style={{ color: textColor }}>\n *                 {this.props.title}\n *               </Text>\n *             </View>\n *           </TouchableOpacity>\n *         );\n *       }\n *     }\n *\n *     class MultiSelectList extends React.PureComponent {\n *       state = {selected: (new Map(): Map<string, boolean>)};\n *\n *       _keyExtractor = (item, index) => item.id;\n *\n *       _onPressItem = (id: string) => {\n *         // updater functions are preferred for transactional updates\n *         this.setState((state) => {\n *           // copy the map rather than modifying state.\n *           const selected = new Map(state.selected);\n *           selected.set(id, !selected.get(id)); // toggle\n *           return {selected};\n *         });\n *       };\n *\n *       _renderItem = ({item}) => (\n *         <MyListItem\n *           id={item.id}\n *           onPressItem={this._onPressItem}\n *           selected={!!this.state.selected.get(item.id)}\n *           title={item.title}\n *         />\n *       );\n *\n *       render() {\n *         return (\n *           <FlatList\n *             data={this.props.data}\n *             extraData={this.state}\n *             keyExtractor={this._keyExtractor}\n *             renderItem={this._renderItem}\n *           />\n *         );\n *       }\n *     }\n *\n * This is a convenience wrapper around [`<VirtualizedList>`](docs/virtualizedlist.html),\n * and thus inherits its props (as well as those of `ScrollView`) that aren't explicitly listed\n * here, along with the following caveats:\n *\n * - Internal state is not preserved when content scrolls out of the render window. Make sure all\n *   your data is captured in the item data or external stores like Flux, Redux, or Relay.\n * - This is a `PureComponent` which means that it will not re-render if `props` remain shallow-\n *   equal. Make sure that everything your `renderItem` function depends on is passed as a prop\n *   (e.g. `extraData`) that is not `===` after updates, otherwise your UI may not update on\n *   changes. This includes the `data` prop and parent component state.\n * - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously\n *   offscreen. This means it's possible to scroll faster than the fill rate ands momentarily see\n *   blank content. This is a tradeoff that can be adjusted to suit the needs of each application,\n *   and we are working on improving it behind the scenes.\n * - By default, the list looks for a `key` prop on each item and uses that for the React key.\n *   Alternatively, you can provide a custom `keyExtractor` prop.\n *\n * Also inherits [ScrollView Props](docs/scrollview.html#props), unless it is nested in another FlatList of same orientation.\n */\nclass FlatList extends React.PureComponent {\n  /**\n   * Scrolls to the end of the content. May be janky without `getItemLayout` prop.\n   */\n  scrollToEnd(params) {\n    if (this._listRef) {\n      this._listRef.scrollToEnd(params);\n    }\n  }\n\n  /**\n   * Scrolls to the item at the specified index such that it is positioned in the viewable area\n   * such that `viewPosition` 0 places it at the top, 1 at the bottom, and 0.5 centered in the\n   * middle. `viewOffset` is a fixed number of pixels to offset the final target position.\n   *\n   * Note: cannot scroll to locations outside the render window without specifying the\n   * `getItemLayout` prop.\n   */\n  scrollToIndex(params) {\n    if (this._listRef) {\n      this._listRef.scrollToIndex(params);\n    }\n  }\n\n  /**\n   * Requires linear scan through data - use `scrollToIndex` instead if possible.\n   *\n   * Note: cannot scroll to locations outside the render window without specifying the\n   * `getItemLayout` prop.\n   */\n  scrollToItem(params) {\n    if (this._listRef) {\n      this._listRef.scrollToItem(params);\n    }\n  }\n\n  /**\n   * Scroll to a specific content pixel offset in the list.\n   *\n   * Check out [scrollToOffset](docs/virtualizedlist.html#scrolltooffset) of VirtualizedList\n   */\n  scrollToOffset(params) {\n    if (this._listRef) {\n      this._listRef.scrollToOffset(params);\n    }\n  }\n\n  /**\n   * Tells the list an interaction has occurred, which should trigger viewability calculations, e.g.\n   * if `waitForInteractions` is true and the user has not scrolled. This is typically called by\n   * taps on items or by navigation actions.\n   */\n  recordInteraction() {\n    if (this._listRef) {\n      this._listRef.recordInteraction();\n    }\n  }\n\n  /**\n   * Displays the scroll indicators momentarily.\n   *\n   * @platform ios\n   */\n  flashScrollIndicators() {\n    if (this._listRef) {\n      this._listRef.flashScrollIndicators();\n    }\n  }\n\n  /**\n   * Provides a handle to the underlying scroll responder.\n   */\n  getScrollResponder() {\n    if (this._listRef) {\n      return this._listRef.getScrollResponder();\n    }\n  }\n\n  /**\n   * Provides a reference to the underlying host component\n   */\n  getNativeScrollRef() {\n    if (this._listRef) {\n      /* $FlowFixMe[incompatible-return] Suppresses errors found when fixing\n       * TextInput typing */\n      return this._listRef.getScrollRef();\n    }\n  }\n  getScrollableNode() {\n    if (this._listRef) {\n      return this._listRef.getScrollableNode();\n    }\n  }\n  constructor(_props) {\n    super(_props);\n    this._virtualizedListPairs = [];\n    this._captureRef = ref => {\n      this._listRef = ref;\n    };\n    this._getItem = (data, index) => {\n      var numColumns = numColumnsOrDefault(this.props.numColumns);\n      if (numColumns > 1) {\n        var ret = [];\n        for (var kk = 0; kk < numColumns; kk++) {\n          var itemIndex = index * numColumns + kk;\n          if (itemIndex < data.length) {\n            var _item = data[itemIndex];\n            ret.push(_item);\n          }\n        }\n        return ret;\n      } else {\n        return data[index];\n      }\n    };\n    this._getItemCount = data => {\n      // Legacy behavior of FlatList was to forward \"undefined\" length if invalid\n      // data like a non-arraylike object is passed. VirtualizedList would then\n      // coerce this, and the math would work out to no-op. For compatibility, if\n      // invalid data is passed, we tell VirtualizedList there are zero items\n      // available to prevent it from trying to read from the invalid data\n      // (without propagating invalidly typed data).\n      if (data != null && isArrayLike(data)) {\n        var numColumns = numColumnsOrDefault(this.props.numColumns);\n        return numColumns > 1 ? Math.ceil(data.length / numColumns) : data.length;\n      } else {\n        return 0;\n      }\n    };\n    this._keyExtractor = (items, index) => {\n      var _this$props$keyExtrac;\n      var numColumns = numColumnsOrDefault(this.props.numColumns);\n      var keyExtractor = (_this$props$keyExtrac = this.props.keyExtractor) !== null && _this$props$keyExtrac !== void 0 ? _this$props$keyExtrac : defaultKeyExtractor;\n      if (numColumns > 1) {\n        invariant(Array.isArray(items), 'FlatList: Encountered internal consistency error, expected each item to consist of an ' + 'array with 1-%s columns; instead, received a single item.', numColumns);\n        return items.map((item, kk) => keyExtractor(item, index * numColumns + kk)).join(':');\n      }\n\n      // $FlowFixMe[incompatible-call] Can't call keyExtractor with an array\n      return keyExtractor(items, index);\n    };\n    this._renderer = (ListItemComponent, renderItem, columnWrapperStyle, numColumns, extraData\n    // $FlowFixMe[missing-local-annot]\n    ) => {\n      var cols = numColumnsOrDefault(numColumns);\n      var render = props => {\n        if (ListItemComponent) {\n          // $FlowFixMe[not-a-component] Component isn't valid\n          // $FlowFixMe[incompatible-type-arg] Component isn't valid\n          // $FlowFixMe[incompatible-return] Component isn't valid\n          return /*#__PURE__*/React.createElement(ListItemComponent, props);\n        } else if (renderItem) {\n          // $FlowFixMe[incompatible-call]\n          return renderItem(props);\n        } else {\n          return null;\n        }\n      };\n      var renderProp = info => {\n        if (cols > 1) {\n          var _item2 = info.item,\n            _index = info.index;\n          invariant(Array.isArray(_item2), 'Expected array of items with numColumns > 1');\n          return /*#__PURE__*/React.createElement(View, {\n            style: [styles.row, columnWrapperStyle]\n          }, _item2.map((it, kk) => {\n            var element = render({\n              // $FlowFixMe[incompatible-call]\n              item: it,\n              index: _index * cols + kk,\n              separators: info.separators\n            });\n            return element != null ? /*#__PURE__*/React.createElement(React.Fragment, {\n              key: kk\n            }, element) : null;\n          }));\n        } else {\n          return render(info);\n        }\n      };\n      return ListItemComponent ? {\n        ListItemComponent: renderProp\n      } : {\n        renderItem: renderProp\n      };\n    };\n    this._memoizedRenderer = memoizeOne(this._renderer);\n    this._checkProps(this.props);\n    if (this.props.viewabilityConfigCallbackPairs) {\n      this._virtualizedListPairs = this.props.viewabilityConfigCallbackPairs.map(pair => ({\n        viewabilityConfig: pair.viewabilityConfig,\n        onViewableItemsChanged: this._createOnViewableItemsChanged(pair.onViewableItemsChanged)\n      }));\n    } else if (this.props.onViewableItemsChanged) {\n      this._virtualizedListPairs.push({\n        /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n         * comment suppresses an error found when Flow v0.63 was deployed. To\n         * see the error delete this comment and run Flow. */\n        viewabilityConfig: this.props.viewabilityConfig,\n        onViewableItemsChanged: this._createOnViewableItemsChanged(this.props.onViewableItemsChanged)\n      });\n    }\n  }\n\n  // $FlowFixMe[missing-local-annot]\n  componentDidUpdate(prevProps) {\n    invariant(prevProps.numColumns === this.props.numColumns, 'Changing numColumns on the fly is not supported. Change the key prop on FlatList when ' + 'changing the number of columns to force a fresh render of the component.');\n    invariant(prevProps.onViewableItemsChanged === this.props.onViewableItemsChanged, 'Changing onViewableItemsChanged on the fly is not supported');\n    invariant(!deepDiffer(prevProps.viewabilityConfig, this.props.viewabilityConfig), 'Changing viewabilityConfig on the fly is not supported');\n    invariant(prevProps.viewabilityConfigCallbackPairs === this.props.viewabilityConfigCallbackPairs, 'Changing viewabilityConfigCallbackPairs on the fly is not supported');\n    this._checkProps(this.props);\n  }\n  // $FlowFixMe[missing-local-annot]\n  _checkProps(props) {\n    var getItem = props.getItem,\n      getItemCount = props.getItemCount,\n      horizontal = props.horizontal,\n      columnWrapperStyle = props.columnWrapperStyle,\n      onViewableItemsChanged = props.onViewableItemsChanged,\n      viewabilityConfigCallbackPairs = props.viewabilityConfigCallbackPairs;\n    var numColumns = numColumnsOrDefault(this.props.numColumns);\n    invariant(!getItem && !getItemCount, 'FlatList does not support custom data formats.');\n    if (numColumns > 1) {\n      invariant(!horizontal, 'numColumns does not support horizontal.');\n    } else {\n      invariant(!columnWrapperStyle, 'columnWrapperStyle not supported for single column lists');\n    }\n    invariant(!(onViewableItemsChanged && viewabilityConfigCallbackPairs), 'FlatList does not support setting both onViewableItemsChanged and ' + 'viewabilityConfigCallbackPairs.');\n  }\n  _pushMultiColumnViewable(arr, v) {\n    var _this$props$keyExtrac2;\n    var numColumns = numColumnsOrDefault(this.props.numColumns);\n    var keyExtractor = (_this$props$keyExtrac2 = this.props.keyExtractor) !== null && _this$props$keyExtrac2 !== void 0 ? _this$props$keyExtrac2 : defaultKeyExtractor;\n    v.item.forEach((item, ii) => {\n      invariant(v.index != null, 'Missing index!');\n      var index = v.index * numColumns + ii;\n      arr.push(_objectSpread(_objectSpread({}, v), {}, {\n        item,\n        key: keyExtractor(item, index),\n        index\n      }));\n    });\n  }\n  _createOnViewableItemsChanged(onViewableItemsChanged\n  // $FlowFixMe[missing-local-annot]\n  ) {\n    return info => {\n      var numColumns = numColumnsOrDefault(this.props.numColumns);\n      if (onViewableItemsChanged) {\n        if (numColumns > 1) {\n          var changed = [];\n          var viewableItems = [];\n          info.viewableItems.forEach(v => this._pushMultiColumnViewable(viewableItems, v));\n          info.changed.forEach(v => this._pushMultiColumnViewable(changed, v));\n          onViewableItemsChanged({\n            viewableItems,\n            changed\n          });\n        } else {\n          onViewableItemsChanged(info);\n        }\n      }\n    };\n  }\n\n  // $FlowFixMe[missing-local-annot]\n\n  render() {\n    var _this$props = this.props,\n      numColumns = _this$props.numColumns,\n      columnWrapperStyle = _this$props.columnWrapperStyle,\n      _removeClippedSubviews = _this$props.removeClippedSubviews,\n      _this$props$strictMod = _this$props.strictMode,\n      strictMode = _this$props$strictMod === void 0 ? false : _this$props$strictMod,\n      restProps = _objectWithoutPropertiesLoose(_this$props, _excluded);\n    var renderer = strictMode ? this._memoizedRenderer : this._renderer;\n    return (\n      /*#__PURE__*/\n      // $FlowFixMe[incompatible-exact] - `restProps` (`Props`) is inexact.\n      React.createElement(VirtualizedList, _extends({}, restProps, {\n        getItem: this._getItem,\n        getItemCount: this._getItemCount,\n        keyExtractor: this._keyExtractor,\n        ref: this._captureRef,\n        viewabilityConfigCallbackPairs: this._virtualizedListPairs,\n        removeClippedSubviews: removeClippedSubviewsOrDefault(_removeClippedSubviews)\n      }, renderer(this.props.ListItemComponent, this.props.renderItem, columnWrapperStyle, numColumns, this.props.extraData)))\n    );\n  }\n}\nvar styles = StyleSheet.create({\n  row: {\n    flexDirection: 'row'\n  }\n});\nexport default FlatList;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport FlatList from '../../vendor/react-native/FlatList';\nexport default FlatList;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar I18nManager = {\n  allowRTL() {\n    return;\n  },\n  forceRTL() {\n    return;\n  },\n  getConstants() {\n    return {\n      isRTL: false\n    };\n  }\n};\nexport default I18nManager;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar assets = [];\nexport function registerAsset(asset) {\n  // `push` returns new array length, so the first asset will\n  // get id 1 (not 0) to make the value truthy\n  return assets.push(asset);\n}\nexport function getAssetByID(assetId) {\n  return assets[assetId - 1];\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar dataUriPattern = /^data:/;\nexport class ImageUriCache {\n  static has(uri) {\n    var entries = ImageUriCache._entries;\n    var isDataUri = dataUriPattern.test(uri);\n    return isDataUri || Boolean(entries[uri]);\n  }\n  static add(uri) {\n    var entries = ImageUriCache._entries;\n    var lastUsedTimestamp = Date.now();\n    if (entries[uri]) {\n      entries[uri].lastUsedTimestamp = lastUsedTimestamp;\n      entries[uri].refCount += 1;\n    } else {\n      entries[uri] = {\n        lastUsedTimestamp,\n        refCount: 1\n      };\n    }\n  }\n  static remove(uri) {\n    var entries = ImageUriCache._entries;\n    if (entries[uri]) {\n      entries[uri].refCount -= 1;\n    }\n    // Free up entries when the cache is \"full\"\n    ImageUriCache._cleanUpIfNeeded();\n  }\n  static _cleanUpIfNeeded() {\n    var entries = ImageUriCache._entries;\n    var imageUris = Object.keys(entries);\n    if (imageUris.length + 1 > ImageUriCache._maximumEntries) {\n      var leastRecentlyUsedKey;\n      var leastRecentlyUsedEntry;\n      imageUris.forEach(uri => {\n        var entry = entries[uri];\n        if ((!leastRecentlyUsedEntry || entry.lastUsedTimestamp < leastRecentlyUsedEntry.lastUsedTimestamp) && entry.refCount === 0) {\n          leastRecentlyUsedKey = uri;\n          leastRecentlyUsedEntry = entry;\n        }\n      });\n      if (leastRecentlyUsedKey) {\n        delete entries[leastRecentlyUsedKey];\n      }\n    }\n  }\n}\nImageUriCache._maximumEntries = 256;\nImageUriCache._entries = {};\nvar id = 0;\nvar requests = {};\nvar ImageLoader = {\n  abort(requestId) {\n    var image = requests[\"\" + requestId];\n    if (image) {\n      image.onerror = null;\n      image.onload = null;\n      image = null;\n      delete requests[\"\" + requestId];\n    }\n  },\n  getSize(uri, success, failure) {\n    var complete = false;\n    var interval = setInterval(callback, 16);\n    var requestId = ImageLoader.load(uri, callback, errorCallback);\n    function callback() {\n      var image = requests[\"\" + requestId];\n      if (image) {\n        var naturalHeight = image.naturalHeight,\n          naturalWidth = image.naturalWidth;\n        if (naturalHeight && naturalWidth) {\n          success(naturalWidth, naturalHeight);\n          complete = true;\n        }\n      }\n      if (complete) {\n        ImageLoader.abort(requestId);\n        clearInterval(interval);\n      }\n    }\n    function errorCallback() {\n      if (typeof failure === 'function') {\n        failure();\n      }\n      ImageLoader.abort(requestId);\n      clearInterval(interval);\n    }\n  },\n  has(uri) {\n    return ImageUriCache.has(uri);\n  },\n  load(uri, onLoad, onError) {\n    id += 1;\n    var image = new window.Image();\n    image.onerror = onError;\n    image.onload = e => {\n      // avoid blocking the main thread\n      var onDecode = () => onLoad({\n        nativeEvent: e\n      });\n      if (typeof image.decode === 'function') {\n        // Safari currently throws exceptions when decoding svgs.\n        // We want to catch that error and allow the load handler\n        // to be forwarded to the onLoad handler in this case\n        image.decode().then(onDecode, onDecode);\n      } else {\n        setTimeout(onDecode, 0);\n      }\n    };\n    image.src = uri;\n    requests[\"\" + id] = image;\n    return id;\n  },\n  prefetch(uri) {\n    return new Promise((resolve, reject) => {\n      ImageLoader.load(uri, () => {\n        // Add the uri to the cache so it can be immediately displayed when used\n        // but also immediately remove it to correctly reflect that it has no active references\n        ImageUriCache.add(uri);\n        ImageUriCache.remove(uri);\n        resolve();\n      }, reject);\n    });\n  },\n  queryCache(uris) {\n    var result = {};\n    uris.forEach(u => {\n      if (ImageUriCache.has(u)) {\n        result[u] = 'disk/memory';\n      }\n    });\n    return Promise.resolve(result);\n  }\n};\nexport default ImageLoader;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"aria-label\", \"accessibilityLabel\", \"blurRadius\", \"defaultSource\", \"draggable\", \"onError\", \"onLayout\", \"onLoad\", \"onLoadEnd\", \"onLoadStart\", \"pointerEvents\", \"source\", \"style\"];\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport { getAssetByID } from '../../modules/AssetRegistry';\nimport { createBoxShadowValue } from '../StyleSheet/preprocess';\nimport ImageLoader from '../../modules/ImageLoader';\nimport PixelRatio from '../PixelRatio';\nimport StyleSheet from '../StyleSheet';\nimport TextAncestorContext from '../Text/TextAncestorContext';\nimport View from '../View';\nimport { warnOnce } from '../../modules/warnOnce';\nvar ERRORED = 'ERRORED';\nvar LOADED = 'LOADED';\nvar LOADING = 'LOADING';\nvar IDLE = 'IDLE';\nvar _filterId = 0;\nvar svgDataUriPattern = /^(data:image\\/svg\\+xml;utf8,)(.*)/;\nfunction createTintColorSVG(tintColor, id) {\n  return tintColor && id != null ? /*#__PURE__*/React.createElement(\"svg\", {\n    style: {\n      position: 'absolute',\n      height: 0,\n      visibility: 'hidden',\n      width: 0\n    }\n  }, /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n    id: \"tint-\" + id,\n    suppressHydrationWarning: true\n  }, /*#__PURE__*/React.createElement(\"feFlood\", {\n    floodColor: \"\" + tintColor,\n    key: tintColor\n  }), /*#__PURE__*/React.createElement(\"feComposite\", {\n    in2: \"SourceAlpha\",\n    operator: \"in\"\n  })))) : null;\n}\nfunction extractNonStandardStyleProps(style, blurRadius, filterId, tintColorProp) {\n  var flatStyle = StyleSheet.flatten(style);\n  var filter = flatStyle.filter,\n    resizeMode = flatStyle.resizeMode,\n    shadowOffset = flatStyle.shadowOffset,\n    tintColor = flatStyle.tintColor;\n  if (flatStyle.resizeMode) {\n    warnOnce('Image.style.resizeMode', 'Image: style.resizeMode is deprecated. Please use props.resizeMode.');\n  }\n  if (flatStyle.tintColor) {\n    warnOnce('Image.style.tintColor', 'Image: style.tintColor is deprecated. Please use props.tintColor.');\n  }\n\n  // Add CSS filters\n  // React Native exposes these features as props and proprietary styles\n  var filters = [];\n  var _filter = null;\n  if (filter) {\n    filters.push(filter);\n  }\n  if (blurRadius) {\n    filters.push(\"blur(\" + blurRadius + \"px)\");\n  }\n  if (shadowOffset) {\n    var shadowString = createBoxShadowValue(flatStyle);\n    if (shadowString) {\n      filters.push(\"drop-shadow(\" + shadowString + \")\");\n    }\n  }\n  if ((tintColorProp || tintColor) && filterId != null) {\n    filters.push(\"url(#tint-\" + filterId + \")\");\n  }\n  if (filters.length > 0) {\n    _filter = filters.join(' ');\n  }\n  return [resizeMode, _filter, tintColor];\n}\nfunction resolveAssetDimensions(source) {\n  if (typeof source === 'number') {\n    var _getAssetByID = getAssetByID(source),\n      _height = _getAssetByID.height,\n      _width = _getAssetByID.width;\n    return {\n      height: _height,\n      width: _width\n    };\n  } else if (source != null && !Array.isArray(source) && typeof source === 'object') {\n    var _height2 = source.height,\n      _width2 = source.width;\n    return {\n      height: _height2,\n      width: _width2\n    };\n  }\n}\nfunction resolveAssetUri(source) {\n  var uri = null;\n  if (typeof source === 'number') {\n    // get the URI from the packager\n    var asset = getAssetByID(source);\n    if (asset == null) {\n      throw new Error(\"Image: asset with ID \\\"\" + source + \"\\\" could not be found. Please check the image source or packager.\");\n    }\n    var scale = asset.scales[0];\n    if (asset.scales.length > 1) {\n      var preferredScale = PixelRatio.get();\n      // Get the scale which is closest to the preferred scale\n      scale = asset.scales.reduce((prev, curr) => Math.abs(curr - preferredScale) < Math.abs(prev - preferredScale) ? curr : prev);\n    }\n    var scaleSuffix = scale !== 1 ? \"@\" + scale + \"x\" : '';\n    uri = asset ? asset.httpServerLocation + \"/\" + asset.name + scaleSuffix + \".\" + asset.type : '';\n  } else if (typeof source === 'string') {\n    uri = source;\n  } else if (source && typeof source.uri === 'string') {\n    uri = source.uri;\n  }\n  if (uri) {\n    var match = uri.match(svgDataUriPattern);\n    // inline SVG markup may contain characters (e.g., #, \") that need to be escaped\n    if (match) {\n      var prefix = match[1],\n        svg = match[2];\n      var encodedSvg = encodeURIComponent(svg);\n      return \"\" + prefix + encodedSvg;\n    }\n  }\n  return uri;\n}\nvar Image = /*#__PURE__*/React.forwardRef((props, ref) => {\n  var _ariaLabel = props['aria-label'],\n    accessibilityLabel = props.accessibilityLabel,\n    blurRadius = props.blurRadius,\n    defaultSource = props.defaultSource,\n    draggable = props.draggable,\n    onError = props.onError,\n    onLayout = props.onLayout,\n    onLoad = props.onLoad,\n    onLoadEnd = props.onLoadEnd,\n    onLoadStart = props.onLoadStart,\n    pointerEvents = props.pointerEvents,\n    source = props.source,\n    style = props.style,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  var ariaLabel = _ariaLabel || accessibilityLabel;\n  if (process.env.NODE_ENV !== 'production') {\n    if (props.children) {\n      throw new Error('The <Image> component cannot contain children. If you want to render content on top of the image, consider using the <ImageBackground> component or absolute positioning.');\n    }\n  }\n  var _React$useState = React.useState(() => {\n      var uri = resolveAssetUri(source);\n      if (uri != null) {\n        var isLoaded = ImageLoader.has(uri);\n        if (isLoaded) {\n          return LOADED;\n        }\n      }\n      return IDLE;\n    }),\n    state = _React$useState[0],\n    updateState = _React$useState[1];\n  var _React$useState2 = React.useState({}),\n    layout = _React$useState2[0],\n    updateLayout = _React$useState2[1];\n  var hasTextAncestor = React.useContext(TextAncestorContext);\n  var hiddenImageRef = React.useRef(null);\n  var filterRef = React.useRef(_filterId++);\n  var requestRef = React.useRef(null);\n  var shouldDisplaySource = state === LOADED || state === LOADING && defaultSource == null;\n  var _extractNonStandardSt = extractNonStandardStyleProps(style, blurRadius, filterRef.current, props.tintColor),\n    _resizeMode = _extractNonStandardSt[0],\n    filter = _extractNonStandardSt[1],\n    _tintColor = _extractNonStandardSt[2];\n  var resizeMode = props.resizeMode || _resizeMode || 'cover';\n  var tintColor = props.tintColor || _tintColor;\n  var selectedSource = shouldDisplaySource ? source : defaultSource;\n  var displayImageUri = resolveAssetUri(selectedSource);\n  var imageSizeStyle = resolveAssetDimensions(selectedSource);\n  var backgroundImage = displayImageUri ? \"url(\\\"\" + displayImageUri + \"\\\")\" : null;\n  var backgroundSize = getBackgroundSize();\n\n  // Accessibility image allows users to trigger the browser's image context menu\n  var hiddenImage = displayImageUri ? createElement('img', {\n    alt: ariaLabel || '',\n    style: styles.accessibilityImage$raw,\n    draggable: draggable || false,\n    ref: hiddenImageRef,\n    src: displayImageUri\n  }) : null;\n  function getBackgroundSize() {\n    if (hiddenImageRef.current != null && (resizeMode === 'center' || resizeMode === 'repeat')) {\n      var _hiddenImageRef$curre = hiddenImageRef.current,\n        naturalHeight = _hiddenImageRef$curre.naturalHeight,\n        naturalWidth = _hiddenImageRef$curre.naturalWidth;\n      var _height3 = layout.height,\n        _width3 = layout.width;\n      if (naturalHeight && naturalWidth && _height3 && _width3) {\n        var scaleFactor = Math.min(1, _width3 / naturalWidth, _height3 / naturalHeight);\n        var x = Math.ceil(scaleFactor * naturalWidth);\n        var y = Math.ceil(scaleFactor * naturalHeight);\n        return x + \"px \" + y + \"px\";\n      }\n    }\n  }\n  function handleLayout(e) {\n    if (resizeMode === 'center' || resizeMode === 'repeat' || onLayout) {\n      var _layout = e.nativeEvent.layout;\n      onLayout && onLayout(e);\n      updateLayout(_layout);\n    }\n  }\n\n  // Image loading\n  var uri = resolveAssetUri(source);\n  React.useEffect(() => {\n    abortPendingRequest();\n    if (uri != null) {\n      updateState(LOADING);\n      if (onLoadStart) {\n        onLoadStart();\n      }\n      requestRef.current = ImageLoader.load(uri, function load(e) {\n        updateState(LOADED);\n        if (onLoad) {\n          onLoad(e);\n        }\n        if (onLoadEnd) {\n          onLoadEnd();\n        }\n      }, function error() {\n        updateState(ERRORED);\n        if (onError) {\n          onError({\n            nativeEvent: {\n              error: \"Failed to load resource \" + uri\n            }\n          });\n        }\n        if (onLoadEnd) {\n          onLoadEnd();\n        }\n      });\n    }\n    function abortPendingRequest() {\n      if (requestRef.current != null) {\n        ImageLoader.abort(requestRef.current);\n        requestRef.current = null;\n      }\n    }\n    return abortPendingRequest;\n  }, [uri, requestRef, updateState, onError, onLoad, onLoadEnd, onLoadStart]);\n  return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n    \"aria-label\": ariaLabel,\n    onLayout: handleLayout,\n    pointerEvents: pointerEvents,\n    ref: ref,\n    style: [styles.root, hasTextAncestor && styles.inline, imageSizeStyle, style, styles.undo,\n    // TEMP: avoid deprecated shadow props regression\n    // until Image refactored to use createElement.\n    {\n      boxShadow: null\n    }]\n  }), /*#__PURE__*/React.createElement(View, {\n    style: [styles.image, resizeModeStyles[resizeMode], {\n      backgroundImage,\n      filter\n    }, backgroundSize != null && {\n      backgroundSize\n    }],\n    suppressHydrationWarning: true\n  }), hiddenImage, createTintColorSVG(tintColor, filterRef.current));\n});\nImage.displayName = 'Image';\n\n// $FlowIgnore: This is the correct type, but casting makes it unhappy since the variables aren't defined yet\nvar ImageWithStatics = Image;\nImageWithStatics.getSize = function (uri, success, failure) {\n  ImageLoader.getSize(uri, success, failure);\n};\nImageWithStatics.prefetch = function (uri) {\n  return ImageLoader.prefetch(uri);\n};\nImageWithStatics.queryCache = function (uris) {\n  return ImageLoader.queryCache(uris);\n};\nvar styles = StyleSheet.create({\n  root: {\n    flexBasis: 'auto',\n    overflow: 'hidden',\n    zIndex: 0\n  },\n  inline: {\n    display: 'inline-flex'\n  },\n  undo: {\n    // These styles are converted to CSS filters applied to the\n    // element displaying the background image.\n    blurRadius: null,\n    shadowColor: null,\n    shadowOpacity: null,\n    shadowOffset: null,\n    shadowRadius: null,\n    tintColor: null,\n    // These styles are not supported\n    overlayColor: null,\n    resizeMode: null\n  },\n  image: _objectSpread(_objectSpread({}, StyleSheet.absoluteFillObject), {}, {\n    backgroundColor: 'transparent',\n    backgroundPosition: 'center',\n    backgroundRepeat: 'no-repeat',\n    backgroundSize: 'cover',\n    height: '100%',\n    width: '100%',\n    zIndex: -1\n  }),\n  accessibilityImage$raw: _objectSpread(_objectSpread({}, StyleSheet.absoluteFillObject), {}, {\n    height: '100%',\n    opacity: 0,\n    width: '100%',\n    zIndex: -1\n  })\n});\nvar resizeModeStyles = StyleSheet.create({\n  center: {\n    backgroundSize: 'auto'\n  },\n  contain: {\n    backgroundSize: 'contain'\n  },\n  cover: {\n    backgroundSize: 'cover'\n  },\n  none: {\n    backgroundPosition: '0',\n    backgroundSize: 'auto'\n  },\n  repeat: {\n    backgroundPosition: '0',\n    backgroundRepeat: 'repeat',\n    backgroundSize: 'auto'\n  },\n  stretch: {\n    backgroundSize: '100% 100%'\n  }\n});\nexport default ImageWithStatics;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\nimport canUseDOM from '../canUseDom';\nvar _requestIdleCallback = function _requestIdleCallback(cb, options) {\n  return setTimeout(() => {\n    var start = Date.now();\n    cb({\n      didTimeout: false,\n      timeRemaining() {\n        return Math.max(0, 50 - (Date.now() - start));\n      }\n    });\n  }, 1);\n};\nvar _cancelIdleCallback = function _cancelIdleCallback(id) {\n  clearTimeout(id);\n};\nvar isSupported = canUseDOM && typeof window.requestIdleCallback !== 'undefined';\nvar requestIdleCallback = isSupported ? window.requestIdleCallback : _requestIdleCallback;\nvar cancelIdleCallback = isSupported ? window.cancelIdleCallback : _cancelIdleCallback;\nexport default requestIdleCallback;\nexport { cancelIdleCallback };","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from 'fbjs/lib/invariant';\nimport TaskQueue from './TaskQueue';\nimport EventEmitter from '../../vendor/react-native/vendor/emitter/EventEmitter';\nimport requestIdleCallback from '../../modules/requestIdleCallback';\nvar _emitter = new EventEmitter();\nvar InteractionManager = {\n  Events: {\n    interactionStart: 'interactionStart',\n    interactionComplete: 'interactionComplete'\n  },\n  /**\n   * Schedule a function to run after all interactions have completed.\n   */\n  runAfterInteractions(task) {\n    var tasks = [];\n    var promise = new Promise(resolve => {\n      _scheduleUpdate();\n      if (task) {\n        tasks.push(task);\n      }\n      tasks.push({\n        run: resolve,\n        name: 'resolve ' + (task && task.name || '?')\n      });\n      _taskQueue.enqueueTasks(tasks);\n    });\n    return {\n      then: promise.then.bind(promise),\n      done: promise.then.bind(promise),\n      cancel: () => {\n        _taskQueue.cancelTasks(tasks);\n      }\n    };\n  },\n  /**\n   * Notify manager that an interaction has started.\n   */\n  createInteractionHandle() {\n    _scheduleUpdate();\n    var handle = ++_inc;\n    _addInteractionSet.add(handle);\n    return handle;\n  },\n  /**\n   * Notify manager that an interaction has completed.\n   */\n  clearInteractionHandle(handle) {\n    invariant(!!handle, 'Must provide a handle to clear.');\n    _scheduleUpdate();\n    _addInteractionSet.delete(handle);\n    _deleteInteractionSet.add(handle);\n  },\n  addListener: _emitter.addListener.bind(_emitter),\n  /**\n   *\n   * @param deadline\n   */\n  setDeadline(deadline) {\n    _deadline = deadline;\n  }\n};\nvar _interactionSet = new Set();\nvar _addInteractionSet = new Set();\nvar _deleteInteractionSet = new Set();\nvar _taskQueue = new TaskQueue({\n  onMoreTasks: _scheduleUpdate\n});\nvar _nextUpdateHandle = 0;\nvar _inc = 0;\nvar _deadline = -1;\n\n/**\n * Schedule an asynchronous update to the interaction state.\n */\nfunction _scheduleUpdate() {\n  if (!_nextUpdateHandle) {\n    if (_deadline > 0) {\n      _nextUpdateHandle = setTimeout(_processUpdate);\n    } else {\n      _nextUpdateHandle = requestIdleCallback(_processUpdate);\n    }\n  }\n}\n\n/**\n * Notify listeners, process queue, etc\n */\nfunction _processUpdate() {\n  _nextUpdateHandle = 0;\n  var interactionCount = _interactionSet.size;\n  _addInteractionSet.forEach(handle => _interactionSet.add(handle));\n  _deleteInteractionSet.forEach(handle => _interactionSet.delete(handle));\n  var nextInteractionCount = _interactionSet.size;\n  if (interactionCount !== 0 && nextInteractionCount === 0) {\n    _emitter.emit(InteractionManager.Events.interactionComplete);\n  } else if (interactionCount === 0 && nextInteractionCount !== 0) {\n    _emitter.emit(InteractionManager.Events.interactionStart);\n  }\n  if (nextInteractionCount === 0) {\n    // It seems that we can't know the running time of the current event loop,\n    // we can only calculate the running time of the current task queue.\n    var begin = Date.now();\n    while (_taskQueue.hasTasksToProcess()) {\n      _taskQueue.processNext();\n      if (_deadline > 0 && Date.now() - begin >= _deadline) {\n        _scheduleUpdate();\n        break;\n      }\n    }\n  }\n  _addInteractionSet.clear();\n  _deleteInteractionSet.clear();\n}\nexport default InteractionManager;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from 'fbjs/lib/invariant';\nclass TaskQueue {\n  constructor(_ref) {\n    var onMoreTasks = _ref.onMoreTasks;\n    this._onMoreTasks = onMoreTasks;\n    this._queueStack = [{\n      tasks: [],\n      popable: true\n    }];\n  }\n  enqueue(task) {\n    this._getCurrentQueue().push(task);\n  }\n  enqueueTasks(tasks) {\n    tasks.forEach(task => this.enqueue(task));\n  }\n  cancelTasks(tasksToCancel) {\n    this._queueStack = this._queueStack.map(queue => _objectSpread(_objectSpread({}, queue), {}, {\n      tasks: queue.tasks.filter(task => tasksToCancel.indexOf(task) === -1)\n    })).filter((queue, idx) => queue.tasks.length > 0 || idx === 0);\n  }\n  hasTasksToProcess() {\n    return this._getCurrentQueue().length > 0;\n  }\n\n  /**\n   * Executes the next task in the queue.\n   */\n  processNext() {\n    var queue = this._getCurrentQueue();\n    if (queue.length) {\n      var task = queue.shift();\n      try {\n        if (typeof task === 'object' && task.gen) {\n          this._genPromise(task);\n        } else if (typeof task === 'object' && task.run) {\n          task.run();\n        } else {\n          invariant(typeof task === 'function', 'Expected Function, SimpleTask, or PromiseTask, but got:\\n' + JSON.stringify(task, null, 2));\n          task();\n        }\n      } catch (e) {\n        e.message = 'TaskQueue: Error with task ' + (task.name || '') + ': ' + e.message;\n        throw e;\n      }\n    }\n  }\n  _getCurrentQueue() {\n    var stackIdx = this._queueStack.length - 1;\n    var queue = this._queueStack[stackIdx];\n    if (queue.popable && queue.tasks.length === 0 && stackIdx > 0) {\n      this._queueStack.pop();\n      return this._getCurrentQueue();\n    } else {\n      return queue.tasks;\n    }\n  }\n  _genPromise(task) {\n    var length = this._queueStack.push({\n      tasks: [],\n      popable: false\n    });\n    var stackIdx = length - 1;\n    var stackItem = this._queueStack[stackIdx];\n    task.gen().then(() => {\n      stackItem.popable = true;\n      this.hasTasksToProcess() && this._onMoreTasks();\n    }).catch(ex => {\n      setTimeout(() => {\n        ex.message = \"TaskQueue: Error resolving Promise in task \" + task.name + \": \" + ex.message;\n        throw ex;\n      }, 0);\n    });\n  }\n}\nexport default TaskQueue;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport dismissKeyboard from '../../modules/dismissKeyboard';\n\n// in the future we can use https://github.com/w3c/virtual-keyboard\nvar Keyboard = {\n  isVisible() {\n    return false;\n  },\n  addListener() {\n    return {\n      remove: () => {}\n    };\n  },\n  dismiss() {\n    dismissKeyboard();\n  },\n  removeAllListeners() {},\n  removeListener() {}\n};\nexport default Keyboard;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport Dimensions from '../Dimensions';\n\n/**\n * PixelRatio gives access to the device pixel density.\n */\nexport default class PixelRatio {\n  /**\n   * Returns the device pixel density.\n   */\n  static get() {\n    return Dimensions.get('window').scale;\n  }\n\n  /**\n   * No equivalent for Web\n   */\n  static getFontScale() {\n    return Dimensions.get('window').fontScale || PixelRatio.get();\n  }\n\n  /**\n   * Converts a layout size (dp) to pixel size (px).\n   * Guaranteed to return an integer number.\n   */\n  static getPixelSizeForLayoutSize(layoutSize) {\n    return Math.round(layoutSize * PixelRatio.get());\n  }\n\n  /**\n   * Rounds a layout size (dp) to the nearest layout size that corresponds to\n   * an integer number of pixels. For example, on a device with a PixelRatio\n   * of 3, `PixelRatio.roundToNearestPixel(8.4) = 8.33`, which corresponds to\n   * exactly (8.33 * 3) = 25 pixels.\n   */\n  static roundToNearestPixel(layoutSize) {\n    var ratio = PixelRatio.get();\n    return Math.round(layoutSize * ratio) / ratio;\n  }\n}","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar Platform = {\n  OS: 'web',\n  select: obj => 'web' in obj ? obj.web : obj.default,\n  get isTesting() {\n    if (process.env.NODE_ENV === 'test') {\n      return true;\n    }\n    return false;\n  },\n  get Version() {\n    return '0.0.0';\n  }\n};\nexport default Platform;","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"colors\", \"enabled\", \"onRefresh\", \"progressBackgroundColor\", \"progressViewOffset\", \"refreshing\", \"size\", \"tintColor\", \"title\", \"titleColor\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport View from '../View';\nimport React from 'react';\nfunction RefreshControl(props) {\n  var colors = props.colors,\n    enabled = props.enabled,\n    onRefresh = props.onRefresh,\n    progressBackgroundColor = props.progressBackgroundColor,\n    progressViewOffset = props.progressViewOffset,\n    refreshing = props.refreshing,\n    size = props.size,\n    tintColor = props.tintColor,\n    title = props.title,\n    titleColor = props.titleColor,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  return /*#__PURE__*/React.createElement(View, rest);\n}\nexport default RefreshControl;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"onScroll\", \"onTouchMove\", \"onWheel\", \"scrollEnabled\", \"scrollEventThrottle\", \"showsHorizontalScrollIndicator\", \"showsVerticalScrollIndicator\", \"style\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nimport useMergeRefs from '../../modules/useMergeRefs';\nfunction normalizeScrollEvent(e) {\n  return {\n    nativeEvent: {\n      contentOffset: {\n        get x() {\n          return e.target.scrollLeft;\n        },\n        get y() {\n          return e.target.scrollTop;\n        }\n      },\n      contentSize: {\n        get height() {\n          return e.target.scrollHeight;\n        },\n        get width() {\n          return e.target.scrollWidth;\n        }\n      },\n      layoutMeasurement: {\n        get height() {\n          return e.target.offsetHeight;\n        },\n        get width() {\n          return e.target.offsetWidth;\n        }\n      }\n    },\n    timeStamp: Date.now()\n  };\n}\nfunction shouldEmitScrollEvent(lastTick, eventThrottle) {\n  var timeSinceLastTick = Date.now() - lastTick;\n  return eventThrottle > 0 && timeSinceLastTick >= eventThrottle;\n}\n\n/**\n * Encapsulates the Web-specific scroll throttling and disabling logic\n */\nvar ScrollViewBase = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var onScroll = props.onScroll,\n    onTouchMove = props.onTouchMove,\n    onWheel = props.onWheel,\n    _props$scrollEnabled = props.scrollEnabled,\n    scrollEnabled = _props$scrollEnabled === void 0 ? true : _props$scrollEnabled,\n    _props$scrollEventThr = props.scrollEventThrottle,\n    scrollEventThrottle = _props$scrollEventThr === void 0 ? 0 : _props$scrollEventThr,\n    showsHorizontalScrollIndicator = props.showsHorizontalScrollIndicator,\n    showsVerticalScrollIndicator = props.showsVerticalScrollIndicator,\n    style = props.style,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  var scrollState = React.useRef({\n    isScrolling: false,\n    scrollLastTick: 0\n  });\n  var scrollTimeout = React.useRef(null);\n  var scrollRef = React.useRef(null);\n  function createPreventableScrollHandler(handler) {\n    return e => {\n      if (scrollEnabled) {\n        if (handler) {\n          handler(e);\n        }\n      }\n    };\n  }\n  function handleScroll(e) {\n    e.stopPropagation();\n    if (e.target === scrollRef.current) {\n      e.persist();\n      // A scroll happened, so the scroll resets the scrollend timeout.\n      if (scrollTimeout.current != null) {\n        clearTimeout(scrollTimeout.current);\n      }\n      scrollTimeout.current = setTimeout(() => {\n        handleScrollEnd(e);\n      }, 100);\n      if (scrollState.current.isScrolling) {\n        // Scroll last tick may have changed, check if we need to notify\n        if (shouldEmitScrollEvent(scrollState.current.scrollLastTick, scrollEventThrottle)) {\n          handleScrollTick(e);\n        }\n      } else {\n        // Weren't scrolling, so we must have just started\n        handleScrollStart(e);\n      }\n    }\n  }\n  function handleScrollStart(e) {\n    scrollState.current.isScrolling = true;\n    handleScrollTick(e);\n  }\n  function handleScrollTick(e) {\n    scrollState.current.scrollLastTick = Date.now();\n    if (onScroll) {\n      onScroll(normalizeScrollEvent(e));\n    }\n  }\n  function handleScrollEnd(e) {\n    scrollState.current.isScrolling = false;\n    if (onScroll) {\n      onScroll(normalizeScrollEvent(e));\n    }\n  }\n  var hideScrollbar = showsHorizontalScrollIndicator === false || showsVerticalScrollIndicator === false;\n  return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n    onScroll: handleScroll,\n    onTouchMove: createPreventableScrollHandler(onTouchMove),\n    onWheel: createPreventableScrollHandler(onWheel),\n    ref: useMergeRefs(scrollRef, forwardedRef),\n    style: [style, !scrollEnabled && styles.scrollDisabled, hideScrollbar && styles.hideScrollbar]\n  }));\n});\n\n// Chrome doesn't support e.preventDefault in this case; touch-action must be\n// used to disable scrolling.\n// https://developers.google.com/web/updates/2017/01/scrolling-intervention\nvar styles = StyleSheet.create({\n  scrollDisabled: {\n    overflowX: 'hidden',\n    overflowY: 'hidden',\n    touchAction: 'none'\n  },\n  hideScrollbar: {\n    scrollbarWidth: 'none'\n  }\n});\nexport default ScrollViewBase;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"contentContainerStyle\", \"horizontal\", \"onContentSizeChange\", \"refreshControl\", \"stickyHeaderIndices\", \"pagingEnabled\", \"forwardedRef\", \"keyboardDismissMode\", \"onScroll\", \"centerContent\"];\nimport Dimensions from '../Dimensions';\nimport dismissKeyboard from '../../modules/dismissKeyboard';\nimport invariant from 'fbjs/lib/invariant';\nimport mergeRefs from '../../modules/mergeRefs';\nimport Platform from '../Platform';\nimport ScrollViewBase from './ScrollViewBase';\nimport StyleSheet from '../StyleSheet';\nimport TextInputState from '../../modules/TextInputState';\nimport UIManager from '../UIManager';\nimport View from '../View';\nimport React from 'react';\nimport warning from 'fbjs/lib/warning';\nvar emptyObject = {};\nvar IS_ANIMATING_TOUCH_START_THRESHOLD_MS = 16;\nclass ScrollView extends React.Component {\n  constructor() {\n    super(...arguments);\n    this._scrollNodeRef = null;\n    this._innerViewRef = null;\n    this.isTouching = false;\n    this.lastMomentumScrollBeginTime = 0;\n    this.lastMomentumScrollEndTime = 0;\n    this.observedScrollSinceBecomingResponder = false;\n    this.becameResponderWhileAnimating = false;\n    this.scrollResponderHandleScrollShouldSetResponder = () => {\n      return this.isTouching;\n    };\n    this.scrollResponderHandleStartShouldSetResponderCapture = e => {\n      // First see if we want to eat taps while the keyboard is up\n      // var currentlyFocusedTextInput = TextInputState.currentlyFocusedField();\n      // if (!this.props.keyboardShouldPersistTaps &&\n      //   currentlyFocusedTextInput != null &&\n      //   e.target !== currentlyFocusedTextInput) {\n      //   return true;\n      // }\n      return this.scrollResponderIsAnimating();\n    };\n    this.scrollResponderHandleTerminationRequest = () => {\n      return !this.observedScrollSinceBecomingResponder;\n    };\n    this.scrollResponderHandleTouchEnd = e => {\n      var nativeEvent = e.nativeEvent;\n      this.isTouching = nativeEvent.touches.length !== 0;\n      this.props.onTouchEnd && this.props.onTouchEnd(e);\n    };\n    this.scrollResponderHandleResponderRelease = e => {\n      this.props.onResponderRelease && this.props.onResponderRelease(e);\n\n      // By default scroll views will unfocus a textField\n      // if another touch occurs outside of it\n      var currentlyFocusedTextInput = TextInputState.currentlyFocusedField();\n      if (!this.props.keyboardShouldPersistTaps && currentlyFocusedTextInput != null && e.target !== currentlyFocusedTextInput && !this.observedScrollSinceBecomingResponder && !this.becameResponderWhileAnimating) {\n        this.props.onScrollResponderKeyboardDismissed && this.props.onScrollResponderKeyboardDismissed(e);\n        TextInputState.blurTextInput(currentlyFocusedTextInput);\n      }\n    };\n    this.scrollResponderHandleScroll = e => {\n      this.observedScrollSinceBecomingResponder = true;\n      this.props.onScroll && this.props.onScroll(e);\n    };\n    this.scrollResponderHandleResponderGrant = e => {\n      this.observedScrollSinceBecomingResponder = false;\n      this.props.onResponderGrant && this.props.onResponderGrant(e);\n      this.becameResponderWhileAnimating = this.scrollResponderIsAnimating();\n    };\n    this.scrollResponderHandleScrollBeginDrag = e => {\n      this.props.onScrollBeginDrag && this.props.onScrollBeginDrag(e);\n    };\n    this.scrollResponderHandleScrollEndDrag = e => {\n      this.props.onScrollEndDrag && this.props.onScrollEndDrag(e);\n    };\n    this.scrollResponderHandleMomentumScrollBegin = e => {\n      this.lastMomentumScrollBeginTime = Date.now();\n      this.props.onMomentumScrollBegin && this.props.onMomentumScrollBegin(e);\n    };\n    this.scrollResponderHandleMomentumScrollEnd = e => {\n      this.lastMomentumScrollEndTime = Date.now();\n      this.props.onMomentumScrollEnd && this.props.onMomentumScrollEnd(e);\n    };\n    this.scrollResponderHandleTouchStart = e => {\n      this.isTouching = true;\n      this.props.onTouchStart && this.props.onTouchStart(e);\n    };\n    this.scrollResponderHandleTouchMove = e => {\n      this.props.onTouchMove && this.props.onTouchMove(e);\n    };\n    this.scrollResponderIsAnimating = () => {\n      var now = Date.now();\n      var timeSinceLastMomentumScrollEnd = now - this.lastMomentumScrollEndTime;\n      var isAnimating = timeSinceLastMomentumScrollEnd < IS_ANIMATING_TOUCH_START_THRESHOLD_MS || this.lastMomentumScrollEndTime < this.lastMomentumScrollBeginTime;\n      return isAnimating;\n    };\n    this.scrollResponderScrollTo = (x, y, animated) => {\n      if (typeof x === 'number') {\n        console.warn('`scrollResponderScrollTo(x, y, animated)` is deprecated. Use `scrollResponderScrollTo({x: 5, y: 5, animated: true})` instead.');\n      } else {\n        var _ref = x || emptyObject;\n        x = _ref.x;\n        y = _ref.y;\n        animated = _ref.animated;\n      }\n      var node = this.getScrollableNode();\n      var left = x || 0;\n      var top = y || 0;\n      if (node != null) {\n        if (typeof node.scroll === 'function') {\n          node.scroll({\n            top,\n            left,\n            behavior: !animated ? 'auto' : 'smooth'\n          });\n        } else {\n          node.scrollLeft = left;\n          node.scrollTop = top;\n        }\n      }\n    };\n    this.scrollResponderZoomTo = (rect, animated) => {\n      if (Platform.OS !== 'ios') {\n        invariant('zoomToRect is not implemented');\n      }\n    };\n    this.scrollResponderScrollNativeHandleToKeyboard = (nodeHandle, additionalOffset, preventNegativeScrollOffset) => {\n      this.additionalScrollOffset = additionalOffset || 0;\n      this.preventNegativeScrollOffset = !!preventNegativeScrollOffset;\n      UIManager.measureLayout(nodeHandle, this.getInnerViewNode(), this.scrollResponderTextInputFocusError, this.scrollResponderInputMeasureAndScrollToKeyboard);\n    };\n    this.scrollResponderInputMeasureAndScrollToKeyboard = (left, top, width, height) => {\n      var keyboardScreenY = Dimensions.get('window').height;\n      if (this.keyboardWillOpenTo) {\n        keyboardScreenY = this.keyboardWillOpenTo.endCoordinates.screenY;\n      }\n      var scrollOffsetY = top - keyboardScreenY + height + this.additionalScrollOffset;\n\n      // By default, this can scroll with negative offset, pulling the content\n      // down so that the target component's bottom meets the keyboard's top.\n      // If requested otherwise, cap the offset at 0 minimum to avoid content\n      // shifting down.\n      if (this.preventNegativeScrollOffset) {\n        scrollOffsetY = Math.max(0, scrollOffsetY);\n      }\n      this.scrollResponderScrollTo({\n        x: 0,\n        y: scrollOffsetY,\n        animated: true\n      });\n      this.additionalOffset = 0;\n      this.preventNegativeScrollOffset = false;\n    };\n    this.scrollResponderKeyboardWillShow = e => {\n      this.keyboardWillOpenTo = e;\n      this.props.onKeyboardWillShow && this.props.onKeyboardWillShow(e);\n    };\n    this.scrollResponderKeyboardWillHide = e => {\n      this.keyboardWillOpenTo = null;\n      this.props.onKeyboardWillHide && this.props.onKeyboardWillHide(e);\n    };\n    this.scrollResponderKeyboardDidShow = e => {\n      // TODO(7693961): The event for DidShow is not available on iOS yet.\n      // Use the one from WillShow and do not assign.\n      if (e) {\n        this.keyboardWillOpenTo = e;\n      }\n      this.props.onKeyboardDidShow && this.props.onKeyboardDidShow(e);\n    };\n    this.scrollResponderKeyboardDidHide = e => {\n      this.keyboardWillOpenTo = null;\n      this.props.onKeyboardDidHide && this.props.onKeyboardDidHide(e);\n    };\n    this.flashScrollIndicators = () => {\n      this.scrollResponderFlashScrollIndicators();\n    };\n    this.getScrollResponder = () => {\n      return this;\n    };\n    this.getScrollableNode = () => {\n      return this._scrollNodeRef;\n    };\n    this.getInnerViewRef = () => {\n      return this._innerViewRef;\n    };\n    this.getInnerViewNode = () => {\n      return this._innerViewRef;\n    };\n    this.getNativeScrollRef = () => {\n      return this._scrollNodeRef;\n    };\n    this.scrollTo = (y, x, animated) => {\n      if (typeof y === 'number') {\n        console.warn('`scrollTo(y, x, animated)` is deprecated. Use `scrollTo({x: 5, y: 5, animated: true})` instead.');\n      } else {\n        var _ref2 = y || emptyObject;\n        x = _ref2.x;\n        y = _ref2.y;\n        animated = _ref2.animated;\n      }\n      this.scrollResponderScrollTo({\n        x: x || 0,\n        y: y || 0,\n        animated: animated !== false\n      });\n    };\n    this.scrollToEnd = options => {\n      // Default to true\n      var animated = (options && options.animated) !== false;\n      var horizontal = this.props.horizontal;\n      var scrollResponderNode = this.getScrollableNode();\n      var x = horizontal ? scrollResponderNode.scrollWidth : 0;\n      var y = horizontal ? 0 : scrollResponderNode.scrollHeight;\n      this.scrollResponderScrollTo({\n        x,\n        y,\n        animated\n      });\n    };\n    this._handleContentOnLayout = e => {\n      var _e$nativeEvent$layout = e.nativeEvent.layout,\n        width = _e$nativeEvent$layout.width,\n        height = _e$nativeEvent$layout.height;\n      this.props.onContentSizeChange(width, height);\n    };\n    this._handleScroll = e => {\n      if (process.env.NODE_ENV !== 'production') {\n        if (this.props.onScroll && this.props.scrollEventThrottle == null) {\n          console.log('You specified `onScroll` on a <ScrollView> but not ' + '`scrollEventThrottle`. You will only receive one event. ' + 'Using `16` you get all the events but be aware that it may ' + \"cause frame drops, use a bigger number if you don't need as \" + 'much precision.');\n        }\n      }\n      if (this.props.keyboardDismissMode === 'on-drag') {\n        dismissKeyboard();\n      }\n      this.scrollResponderHandleScroll(e);\n    };\n    this._setInnerViewRef = node => {\n      this._innerViewRef = node;\n    };\n    this._setScrollNodeRef = node => {\n      this._scrollNodeRef = node;\n      // ScrollView needs to add more methods to the hostNode in addition to those\n      // added by `usePlatformMethods`. This is temporarily until an API like\n      // `ScrollView.scrollTo(hostNode, { x, y })` is added to React Native.\n      if (node != null) {\n        node.getScrollResponder = this.getScrollResponder;\n        node.getInnerViewNode = this.getInnerViewNode;\n        node.getInnerViewRef = this.getInnerViewRef;\n        node.getNativeScrollRef = this.getNativeScrollRef;\n        node.getScrollableNode = this.getScrollableNode;\n        node.scrollTo = this.scrollTo;\n        node.scrollToEnd = this.scrollToEnd;\n        node.flashScrollIndicators = this.flashScrollIndicators;\n        node.scrollResponderZoomTo = this.scrollResponderZoomTo;\n        node.scrollResponderScrollNativeHandleToKeyboard = this.scrollResponderScrollNativeHandleToKeyboard;\n      }\n      var ref = mergeRefs(this.props.forwardedRef);\n      ref(node);\n    };\n  }\n  /**\n   * ------------------------------------------------------\n   * START SCROLLRESPONDER\n   * ------------------------------------------------------\n   */\n  // Reset to false every time becomes responder. This is used to:\n  // - Determine if the scroll view has been scrolled and therefore should\n  // refuse to give up its responder lock.\n  // - Determine if releasing should dismiss the keyboard when we are in\n  // tap-to-dismiss mode (!this.props.keyboardShouldPersistTaps).\n  /**\n   * Invoke this from an `onScroll` event.\n   */\n  /**\n   * Merely touch starting is not sufficient for a scroll view to become the\n   * responder. Being the \"responder\" means that the very next touch move/end\n   * event will result in an action/movement.\n   *\n   * Invoke this from an `onStartShouldSetResponder` event.\n   *\n   * `onStartShouldSetResponder` is used when the next move/end will trigger\n   * some UI movement/action, but when you want to yield priority to views\n   * nested inside of the view.\n   *\n   * There may be some cases where scroll views actually should return `true`\n   * from `onStartShouldSetResponder`: Any time we are detecting a standard tap\n   * that gives priority to nested views.\n   *\n   * - If a single tap on the scroll view triggers an action such as\n   *   recentering a map style view yet wants to give priority to interaction\n   *   views inside (such as dropped pins or labels), then we would return true\n   *   from this method when there is a single touch.\n   *\n   * - Similar to the previous case, if a two finger \"tap\" should trigger a\n   *   zoom, we would check the `touches` count, and if `>= 2`, we would return\n   *   true.\n   *\n   */\n  scrollResponderHandleStartShouldSetResponder() {\n    return false;\n  }\n\n  /**\n   * There are times when the scroll view wants to become the responder\n   * (meaning respond to the next immediate `touchStart/touchEnd`), in a way\n   * that *doesn't* give priority to nested views (hence the capture phase):\n   *\n   * - Currently animating.\n   * - Tapping anywhere that is not the focused input, while the keyboard is\n   *   up (which should dismiss the keyboard).\n   *\n   * Invoke this from an `onStartShouldSetResponderCapture` event.\n   */\n\n  /**\n   * Invoke this from an `onResponderReject` event.\n   *\n   * Some other element is not yielding its role as responder. Normally, we'd\n   * just disable the `UIScrollView`, but a touch has already began on it, the\n   * `UIScrollView` will not accept being disabled after that. The easiest\n   * solution for now is to accept the limitation of disallowing this\n   * altogether. To improve this, find a way to disable the `UIScrollView` after\n   * a touch has already started.\n   */\n  scrollResponderHandleResponderReject() {\n    warning(false, \"ScrollView doesn't take rejection well - scrolls anyway\");\n  }\n\n  /**\n   * We will allow the scroll view to give up its lock iff it acquired the lock\n   * during an animation. This is a very useful default that happens to satisfy\n   * many common user experiences.\n   *\n   * - Stop a scroll on the left edge, then turn that into an outer view's\n   *   backswipe.\n   * - Stop a scroll mid-bounce at the top, continue pulling to have the outer\n   *   view dismiss.\n   * - However, without catching the scroll view mid-bounce (while it is\n   *   motionless), if you drag far enough for the scroll view to become\n   *   responder (and therefore drag the scroll view a bit), any backswipe\n   *   navigation of a swipe gesture higher in the view hierarchy, should be\n   *   rejected.\n   */\n\n  /**\n   * Invoke this from an `onTouchEnd` event.\n   *\n   * @param {SyntheticEvent} e Event.\n   */\n\n  /**\n   * Invoke this from an `onResponderRelease` event.\n   */\n\n  /**\n   * Invoke this from an `onResponderGrant` event.\n   */\n\n  /**\n   * Unfortunately, `onScrollBeginDrag` also fires when *stopping* the scroll\n   * animation, and there's not an easy way to distinguish a drag vs. stopping\n   * momentum.\n   *\n   * Invoke this from an `onScrollBeginDrag` event.\n   */\n\n  /**\n   * Invoke this from an `onScrollEndDrag` event.\n   */\n\n  /**\n   * Invoke this from an `onMomentumScrollBegin` event.\n   */\n\n  /**\n   * Invoke this from an `onMomentumScrollEnd` event.\n   */\n\n  /**\n   * Invoke this from an `onTouchStart` event.\n   *\n   * Since we know that the `SimpleEventPlugin` occurs later in the plugin\n   * order, after `ResponderEventPlugin`, we can detect that we were *not*\n   * permitted to be the responder (presumably because a contained view became\n   * responder). The `onResponderReject` won't fire in that case - it only\n   * fires when a *current* responder rejects our request.\n   *\n   * @param {SyntheticEvent} e Touch Start event.\n   */\n\n  /**\n   * Invoke this from an `onTouchMove` event.\n   *\n   * Since we know that the `SimpleEventPlugin` occurs later in the plugin\n   * order, after `ResponderEventPlugin`, we can detect that we were *not*\n   * permitted to be the responder (presumably because a contained view became\n   * responder). The `onResponderReject` won't fire in that case - it only\n   * fires when a *current* responder rejects our request.\n   *\n   * @param {SyntheticEvent} e Touch Start event.\n   */\n\n  /**\n   * A helper function for this class that lets us quickly determine if the\n   * view is currently animating. This is particularly useful to know when\n   * a touch has just started or ended.\n   */\n\n  /**\n   * A helper function to scroll to a specific point in the scrollview.\n   * This is currently used to help focus on child textviews, but can also\n   * be used to quickly scroll to any element we want to focus. Syntax:\n   *\n   * scrollResponderScrollTo(options: {x: number = 0; y: number = 0; animated: boolean = true})\n   *\n   * Note: The weird argument signature is due to the fact that, for historical reasons,\n   * the function also accepts separate arguments as as alternative to the options object.\n   * This is deprecated due to ambiguity (y before x), and SHOULD NOT BE USED.\n   */\n\n  /**\n   * A helper function to zoom to a specific rect in the scrollview. The argument has the shape\n   * {x: number; y: number; width: number; height: number; animated: boolean = true}\n   *\n   * @platform ios\n   */\n\n  /**\n   * Displays the scroll indicators momentarily.\n   */\n  scrollResponderFlashScrollIndicators() {}\n\n  /**\n   * This method should be used as the callback to onFocus in a TextInputs'\n   * parent view. Note that any module using this mixin needs to return\n   * the parent view's ref in getScrollViewRef() in order to use this method.\n   * @param {any} nodeHandle The TextInput node handle\n   * @param {number} additionalOffset The scroll view's top \"contentInset\".\n   *        Default is 0.\n   * @param {bool} preventNegativeScrolling Whether to allow pulling the content\n   *        down to make it meet the keyboard's top. Default is false.\n   */\n\n  /**\n   * The calculations performed here assume the scroll view takes up the entire\n   * screen - even if has some content inset. We then measure the offsets of the\n   * keyboard, and compensate both for the scroll view's \"contentInset\".\n   *\n   * @param {number} left Position of input w.r.t. table view.\n   * @param {number} top Position of input w.r.t. table view.\n   * @param {number} width Width of the text input.\n   * @param {number} height Height of the text input.\n   */\n\n  scrollResponderTextInputFocusError(e) {\n    console.error('Error measuring text field: ', e);\n  }\n\n  /**\n   * Warning, this may be called several times for a single keyboard opening.\n   * It's best to store the information in this method and then take any action\n   * at a later point (either in `keyboardDidShow` or other).\n   *\n   * Here's the order that events occur in:\n   * - focus\n   * - willShow {startCoordinates, endCoordinates} several times\n   * - didShow several times\n   * - blur\n   * - willHide {startCoordinates, endCoordinates} several times\n   * - didHide several times\n   *\n   * The `ScrollResponder` providesModule callbacks for each of these events.\n   * Even though any user could have easily listened to keyboard events\n   * themselves, using these `props` callbacks ensures that ordering of events\n   * is consistent - and not dependent on the order that the keyboard events are\n   * subscribed to. This matters when telling the scroll view to scroll to where\n   * the keyboard is headed - the scroll responder better have been notified of\n   * the keyboard destination before being instructed to scroll to where the\n   * keyboard will be. Stick to the `ScrollResponder` callbacks, and everything\n   * will work.\n   *\n   * WARNING: These callbacks will fire even if a keyboard is displayed in a\n   * different navigation pane. Filter out the events to determine if they are\n   * relevant to you. (For example, only if you receive these callbacks after\n   * you had explicitly focused a node etc).\n   */\n\n  /**\n   * ------------------------------------------------------\n   * END SCROLLRESPONDER\n   * ------------------------------------------------------\n   */\n\n  /**\n   * Returns a reference to the underlying scroll responder, which supports\n   * operations like `scrollTo`. All ScrollView-like components should\n   * implement this method so that they can be composed while providing access\n   * to the underlying scroll responder's methods.\n   */\n\n  /**\n   * Scrolls to a given x, y offset, either immediately or with a smooth animation.\n   * Syntax:\n   *\n   * scrollTo(options: {x: number = 0; y: number = 0; animated: boolean = true})\n   *\n   * Note: The weird argument signature is due to the fact that, for historical reasons,\n   * the function also accepts separate arguments as as alternative to the options object.\n   * This is deprecated due to ambiguity (y before x), and SHOULD NOT BE USED.\n   */\n\n  /**\n   * If this is a vertical ScrollView scrolls to the bottom.\n   * If this is a horizontal ScrollView scrolls to the right.\n   *\n   * Use `scrollToEnd({ animated: true })` for smooth animated scrolling,\n   * `scrollToEnd({ animated: false })` for immediate scrolling.\n   * If no options are passed, `animated` defaults to true.\n   */\n\n  render() {\n    var _this$props = this.props,\n      contentContainerStyle = _this$props.contentContainerStyle,\n      horizontal = _this$props.horizontal,\n      onContentSizeChange = _this$props.onContentSizeChange,\n      refreshControl = _this$props.refreshControl,\n      stickyHeaderIndices = _this$props.stickyHeaderIndices,\n      pagingEnabled = _this$props.pagingEnabled,\n      forwardedRef = _this$props.forwardedRef,\n      keyboardDismissMode = _this$props.keyboardDismissMode,\n      onScroll = _this$props.onScroll,\n      centerContent = _this$props.centerContent,\n      other = _objectWithoutPropertiesLoose(_this$props, _excluded);\n    if (process.env.NODE_ENV !== 'production' && this.props.style) {\n      var style = StyleSheet.flatten(this.props.style);\n      var childLayoutProps = ['alignItems', 'justifyContent'].filter(prop => style && style[prop] !== undefined);\n      invariant(childLayoutProps.length === 0, \"ScrollView child layout (\" + JSON.stringify(childLayoutProps) + \") \" + 'must be applied through the contentContainerStyle prop.');\n    }\n    var contentSizeChangeProps = {};\n    if (onContentSizeChange) {\n      contentSizeChangeProps = {\n        onLayout: this._handleContentOnLayout\n      };\n    }\n    var hasStickyHeaderIndices = !horizontal && Array.isArray(stickyHeaderIndices);\n    var children = hasStickyHeaderIndices || pagingEnabled ? React.Children.map(this.props.children, (child, i) => {\n      var isSticky = hasStickyHeaderIndices && stickyHeaderIndices.indexOf(i) > -1;\n      if (child != null && (isSticky || pagingEnabled)) {\n        return /*#__PURE__*/React.createElement(View, {\n          style: [isSticky && styles.stickyHeader, pagingEnabled && styles.pagingEnabledChild]\n        }, child);\n      } else {\n        return child;\n      }\n    }) : this.props.children;\n    var contentContainer = /*#__PURE__*/React.createElement(View, _extends({}, contentSizeChangeProps, {\n      children: children,\n      collapsable: false,\n      ref: this._setInnerViewRef,\n      style: [horizontal && styles.contentContainerHorizontal, centerContent && styles.contentContainerCenterContent, contentContainerStyle]\n    }));\n    var baseStyle = horizontal ? styles.baseHorizontal : styles.baseVertical;\n    var pagingEnabledStyle = horizontal ? styles.pagingEnabledHorizontal : styles.pagingEnabledVertical;\n    var props = _objectSpread(_objectSpread({}, other), {}, {\n      style: [baseStyle, pagingEnabled && pagingEnabledStyle, this.props.style],\n      onTouchStart: this.scrollResponderHandleTouchStart,\n      onTouchMove: this.scrollResponderHandleTouchMove,\n      onTouchEnd: this.scrollResponderHandleTouchEnd,\n      onScrollBeginDrag: this.scrollResponderHandleScrollBeginDrag,\n      onScrollEndDrag: this.scrollResponderHandleScrollEndDrag,\n      onMomentumScrollBegin: this.scrollResponderHandleMomentumScrollBegin,\n      onMomentumScrollEnd: this.scrollResponderHandleMomentumScrollEnd,\n      onStartShouldSetResponder: this.scrollResponderHandleStartShouldSetResponder,\n      onStartShouldSetResponderCapture: this.scrollResponderHandleStartShouldSetResponderCapture,\n      onScrollShouldSetResponder: this.scrollResponderHandleScrollShouldSetResponder,\n      onScroll: this._handleScroll,\n      onResponderGrant: this.scrollResponderHandleResponderGrant,\n      onResponderTerminationRequest: this.scrollResponderHandleTerminationRequest,\n      onResponderTerminate: this.scrollResponderHandleTerminate,\n      onResponderRelease: this.scrollResponderHandleResponderRelease,\n      onResponderReject: this.scrollResponderHandleResponderReject\n    });\n    var ScrollViewClass = ScrollViewBase;\n    invariant(ScrollViewClass !== undefined, 'ScrollViewClass must not be undefined');\n    var scrollView = /*#__PURE__*/React.createElement(ScrollViewClass, _extends({}, props, {\n      ref: this._setScrollNodeRef\n    }), contentContainer);\n    if (refreshControl) {\n      return /*#__PURE__*/React.cloneElement(refreshControl, {\n        style: props.style\n      }, scrollView);\n    }\n    return scrollView;\n  }\n}\nvar commonStyle = {\n  flexGrow: 1,\n  flexShrink: 1,\n  // Enable hardware compositing in modern browsers.\n  // Creates a new layer with its own backing surface that can significantly\n  // improve scroll performance.\n  transform: 'translateZ(0)',\n  // iOS native scrolling\n  WebkitOverflowScrolling: 'touch'\n};\nvar styles = StyleSheet.create({\n  baseVertical: _objectSpread(_objectSpread({}, commonStyle), {}, {\n    flexDirection: 'column',\n    overflowX: 'hidden',\n    overflowY: 'auto'\n  }),\n  baseHorizontal: _objectSpread(_objectSpread({}, commonStyle), {}, {\n    flexDirection: 'row',\n    overflowX: 'auto',\n    overflowY: 'hidden'\n  }),\n  contentContainerHorizontal: {\n    flexDirection: 'row'\n  },\n  contentContainerCenterContent: {\n    justifyContent: 'center',\n    flexGrow: 1\n  },\n  stickyHeader: {\n    position: 'sticky',\n    top: 0,\n    zIndex: 10\n  },\n  pagingEnabledHorizontal: {\n    scrollSnapType: 'x mandatory'\n  },\n  pagingEnabledVertical: {\n    scrollSnapType: 'y mandatory'\n  },\n  pagingEnabledChild: {\n    scrollSnapAlign: 'start'\n  }\n});\nvar ForwardedScrollView = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  return /*#__PURE__*/React.createElement(ScrollView, _extends({}, props, {\n    forwardedRef: forwardedRef\n  }));\n});\nForwardedScrollView.displayName = 'ScrollView';\nexport default ForwardedScrollView;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nvar _excluded = [\"ItemSeparatorComponent\", \"SectionSeparatorComponent\", \"renderItem\", \"renderSectionFooter\", \"renderSectionHeader\", \"sections\", \"stickySectionHeadersEnabled\"];\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport View from '../../../exports/View';\nimport VirtualizedList from '../VirtualizedList';\nimport { keyExtractor as defaultKeyExtractor } from '../VirtualizeUtils';\nimport invariant from 'fbjs/lib/invariant';\nimport * as React from 'react';\n/**\n * Right now this just flattens everything into one list and uses VirtualizedList under the\n * hood. The only operation that might not scale well is concatting the data arrays of all the\n * sections when new props are received, which should be plenty fast for up to ~10,000 items.\n */\nclass VirtualizedSectionList extends React.PureComponent {\n  constructor() {\n    super(...arguments);\n    this._keyExtractor = (item, index) => {\n      var info = this._subExtractor(index);\n      return info && info.key || String(index);\n    };\n    this._convertViewable = viewable => {\n      var _info$index;\n      invariant(viewable.index != null, 'Received a broken ViewToken');\n      var info = this._subExtractor(viewable.index);\n      if (!info) {\n        return null;\n      }\n      var keyExtractorWithNullableIndex = info.section.keyExtractor;\n      var keyExtractorWithNonNullableIndex = this.props.keyExtractor || defaultKeyExtractor;\n      var key = keyExtractorWithNullableIndex != null ? keyExtractorWithNullableIndex(viewable.item, info.index) : keyExtractorWithNonNullableIndex(viewable.item, (_info$index = info.index) !== null && _info$index !== void 0 ? _info$index : 0);\n      return _objectSpread(_objectSpread({}, viewable), {}, {\n        index: info.index,\n        key,\n        section: info.section\n      });\n    };\n    this._onViewableItemsChanged = _ref => {\n      var viewableItems = _ref.viewableItems,\n        changed = _ref.changed;\n      var onViewableItemsChanged = this.props.onViewableItemsChanged;\n      if (onViewableItemsChanged != null) {\n        onViewableItemsChanged({\n          viewableItems: viewableItems.map(this._convertViewable, this).filter(Boolean),\n          changed: changed.map(this._convertViewable, this).filter(Boolean)\n        });\n      }\n    };\n    this._renderItem = listItemCount =>\n    // eslint-disable-next-line react/no-unstable-nested-components\n    _ref2 => {\n      var item = _ref2.item,\n        index = _ref2.index;\n      var info = this._subExtractor(index);\n      if (!info) {\n        return null;\n      }\n      var infoIndex = info.index;\n      if (infoIndex == null) {\n        var section = info.section;\n        if (info.header === true) {\n          var renderSectionHeader = this.props.renderSectionHeader;\n          return renderSectionHeader ? renderSectionHeader({\n            section\n          }) : null;\n        } else {\n          var renderSectionFooter = this.props.renderSectionFooter;\n          return renderSectionFooter ? renderSectionFooter({\n            section\n          }) : null;\n        }\n      } else {\n        var renderItem = info.section.renderItem || this.props.renderItem;\n        var SeparatorComponent = this._getSeparatorComponent(index, info, listItemCount);\n        invariant(renderItem, 'no renderItem!');\n        return /*#__PURE__*/React.createElement(ItemWithSeparator, {\n          SeparatorComponent: SeparatorComponent,\n          LeadingSeparatorComponent: infoIndex === 0 ? this.props.SectionSeparatorComponent : undefined,\n          cellKey: info.key,\n          index: infoIndex,\n          item: item,\n          leadingItem: info.leadingItem,\n          leadingSection: info.leadingSection,\n          prevCellKey: (this._subExtractor(index - 1) || {}).key\n          // Callback to provide updateHighlight for this item\n          ,\n          setSelfHighlightCallback: this._setUpdateHighlightFor,\n          setSelfUpdatePropsCallback: this._setUpdatePropsFor\n          // Provide child ability to set highlight/updateProps for previous item using prevCellKey\n          ,\n          updateHighlightFor: this._updateHighlightFor,\n          updatePropsFor: this._updatePropsFor,\n          renderItem: renderItem,\n          section: info.section,\n          trailingItem: info.trailingItem,\n          trailingSection: info.trailingSection,\n          inverted: !!this.props.inverted\n        });\n      }\n    };\n    this._updatePropsFor = (cellKey, value) => {\n      var updateProps = this._updatePropsMap[cellKey];\n      if (updateProps != null) {\n        updateProps(value);\n      }\n    };\n    this._updateHighlightFor = (cellKey, value) => {\n      var updateHighlight = this._updateHighlightMap[cellKey];\n      if (updateHighlight != null) {\n        updateHighlight(value);\n      }\n    };\n    this._setUpdateHighlightFor = (cellKey, updateHighlightFn) => {\n      if (updateHighlightFn != null) {\n        this._updateHighlightMap[cellKey] = updateHighlightFn;\n      } else {\n        // $FlowFixMe[prop-missing]\n        delete this._updateHighlightFor[cellKey];\n      }\n    };\n    this._setUpdatePropsFor = (cellKey, updatePropsFn) => {\n      if (updatePropsFn != null) {\n        this._updatePropsMap[cellKey] = updatePropsFn;\n      } else {\n        delete this._updatePropsMap[cellKey];\n      }\n    };\n    this._updateHighlightMap = {};\n    this._updatePropsMap = {};\n    this._captureRef = ref => {\n      this._listRef = ref;\n    };\n  }\n  scrollToLocation(params) {\n    var index = params.itemIndex;\n    for (var i = 0; i < params.sectionIndex; i++) {\n      index += this.props.getItemCount(this.props.sections[i].data) + 2;\n    }\n    var viewOffset = params.viewOffset || 0;\n    if (this._listRef == null) {\n      return;\n    }\n    if (params.itemIndex > 0 && this.props.stickySectionHeadersEnabled) {\n      var frame = this._listRef.__getFrameMetricsApprox(index - params.itemIndex, this._listRef.props);\n      viewOffset += frame.length;\n    }\n    var toIndexParams = _objectSpread(_objectSpread({}, params), {}, {\n      viewOffset,\n      index\n    });\n    // $FlowFixMe[incompatible-use]\n    this._listRef.scrollToIndex(toIndexParams);\n  }\n  getListRef() {\n    return this._listRef;\n  }\n  render() {\n    var _this$props = this.props,\n      ItemSeparatorComponent = _this$props.ItemSeparatorComponent,\n      SectionSeparatorComponent = _this$props.SectionSeparatorComponent,\n      _renderItem = _this$props.renderItem,\n      renderSectionFooter = _this$props.renderSectionFooter,\n      renderSectionHeader = _this$props.renderSectionHeader,\n      _sections = _this$props.sections,\n      stickySectionHeadersEnabled = _this$props.stickySectionHeadersEnabled,\n      passThroughProps = _objectWithoutPropertiesLoose(_this$props, _excluded);\n    var listHeaderOffset = this.props.ListHeaderComponent ? 1 : 0;\n    var stickyHeaderIndices = this.props.stickySectionHeadersEnabled ? [] : undefined;\n    var itemCount = 0;\n    for (var _iterator = _createForOfIteratorHelperLoose(this.props.sections), _step; !(_step = _iterator()).done;) {\n      var section = _step.value;\n      // Track the section header indices\n      if (stickyHeaderIndices != null) {\n        stickyHeaderIndices.push(itemCount + listHeaderOffset);\n      }\n\n      // Add two for the section header and footer.\n      itemCount += 2;\n      itemCount += this.props.getItemCount(section.data);\n    }\n    var renderItem = this._renderItem(itemCount);\n    return /*#__PURE__*/React.createElement(VirtualizedList, _extends({}, passThroughProps, {\n      keyExtractor: this._keyExtractor,\n      stickyHeaderIndices: stickyHeaderIndices,\n      renderItem: renderItem,\n      data: this.props.sections,\n      getItem: (sections, index) => this._getItem(this.props, sections, index),\n      getItemCount: () => itemCount,\n      onViewableItemsChanged: this.props.onViewableItemsChanged ? this._onViewableItemsChanged : undefined,\n      ref: this._captureRef\n    }));\n  }\n  _getItem(props, sections, index) {\n    if (!sections) {\n      return null;\n    }\n    var itemIdx = index - 1;\n    for (var i = 0; i < sections.length; i++) {\n      var section = sections[i];\n      var sectionData = section.data;\n      var itemCount = props.getItemCount(sectionData);\n      if (itemIdx === -1 || itemIdx === itemCount) {\n        // We intend for there to be overflow by one on both ends of the list.\n        // This will be for headers and footers. When returning a header or footer\n        // item the section itself is the item.\n        return section;\n      } else if (itemIdx < itemCount) {\n        // If we are in the bounds of the list's data then return the item.\n        return props.getItem(sectionData, itemIdx);\n      } else {\n        itemIdx -= itemCount + 2; // Add two for the header and footer\n      }\n    }\n    return null;\n  }\n\n  // $FlowFixMe[missing-local-annot]\n\n  _subExtractor(index) {\n    var itemIndex = index;\n    var _this$props2 = this.props,\n      getItem = _this$props2.getItem,\n      getItemCount = _this$props2.getItemCount,\n      keyExtractor = _this$props2.keyExtractor,\n      sections = _this$props2.sections;\n    for (var i = 0; i < sections.length; i++) {\n      var section = sections[i];\n      var sectionData = section.data;\n      var key = section.key || String(i);\n      itemIndex -= 1; // The section adds an item for the header\n      if (itemIndex >= getItemCount(sectionData) + 1) {\n        itemIndex -= getItemCount(sectionData) + 1; // The section adds an item for the footer.\n      } else if (itemIndex === -1) {\n        return {\n          section,\n          key: key + ':header',\n          index: null,\n          header: true,\n          trailingSection: sections[i + 1]\n        };\n      } else if (itemIndex === getItemCount(sectionData)) {\n        return {\n          section,\n          key: key + ':footer',\n          index: null,\n          header: false,\n          trailingSection: sections[i + 1]\n        };\n      } else {\n        var extractor = section.keyExtractor || keyExtractor || defaultKeyExtractor;\n        return {\n          section,\n          key: key + ':' + extractor(getItem(sectionData, itemIndex), itemIndex),\n          index: itemIndex,\n          leadingItem: getItem(sectionData, itemIndex - 1),\n          leadingSection: sections[i - 1],\n          trailingItem: getItem(sectionData, itemIndex + 1),\n          trailingSection: sections[i + 1]\n        };\n      }\n    }\n  }\n  _getSeparatorComponent(index, info, listItemCount) {\n    info = info || this._subExtractor(index);\n    if (!info) {\n      return null;\n    }\n    var ItemSeparatorComponent = info.section.ItemSeparatorComponent || this.props.ItemSeparatorComponent;\n    var SectionSeparatorComponent = this.props.SectionSeparatorComponent;\n    var isLastItemInList = index === listItemCount - 1;\n    var isLastItemInSection = info.index === this.props.getItemCount(info.section.data) - 1;\n    if (SectionSeparatorComponent && isLastItemInSection) {\n      return SectionSeparatorComponent;\n    }\n    if (ItemSeparatorComponent && !isLastItemInSection && !isLastItemInList) {\n      return ItemSeparatorComponent;\n    }\n    return null;\n  }\n}\nfunction ItemWithSeparator(props) {\n  var LeadingSeparatorComponent = props.LeadingSeparatorComponent,\n    SeparatorComponent = props.SeparatorComponent,\n    cellKey = props.cellKey,\n    prevCellKey = props.prevCellKey,\n    setSelfHighlightCallback = props.setSelfHighlightCallback,\n    updateHighlightFor = props.updateHighlightFor,\n    setSelfUpdatePropsCallback = props.setSelfUpdatePropsCallback,\n    updatePropsFor = props.updatePropsFor,\n    item = props.item,\n    index = props.index,\n    section = props.section,\n    inverted = props.inverted;\n  var _React$useState = React.useState(false),\n    leadingSeparatorHiglighted = _React$useState[0],\n    setLeadingSeparatorHighlighted = _React$useState[1];\n  var _React$useState2 = React.useState(false),\n    separatorHighlighted = _React$useState2[0],\n    setSeparatorHighlighted = _React$useState2[1];\n  var _React$useState3 = React.useState({\n      leadingItem: props.leadingItem,\n      leadingSection: props.leadingSection,\n      section: props.section,\n      trailingItem: props.item,\n      trailingSection: props.trailingSection\n    }),\n    leadingSeparatorProps = _React$useState3[0],\n    setLeadingSeparatorProps = _React$useState3[1];\n  var _React$useState4 = React.useState({\n      leadingItem: props.item,\n      leadingSection: props.leadingSection,\n      section: props.section,\n      trailingItem: props.trailingItem,\n      trailingSection: props.trailingSection\n    }),\n    separatorProps = _React$useState4[0],\n    setSeparatorProps = _React$useState4[1];\n  React.useEffect(() => {\n    setSelfHighlightCallback(cellKey, setSeparatorHighlighted);\n    // $FlowFixMe[incompatible-call]\n    setSelfUpdatePropsCallback(cellKey, setSeparatorProps);\n    return () => {\n      setSelfUpdatePropsCallback(cellKey, null);\n      setSelfHighlightCallback(cellKey, null);\n    };\n  }, [cellKey, setSelfHighlightCallback, setSeparatorProps, setSelfUpdatePropsCallback]);\n  var separators = {\n    highlight: () => {\n      setLeadingSeparatorHighlighted(true);\n      setSeparatorHighlighted(true);\n      if (prevCellKey != null) {\n        updateHighlightFor(prevCellKey, true);\n      }\n    },\n    unhighlight: () => {\n      setLeadingSeparatorHighlighted(false);\n      setSeparatorHighlighted(false);\n      if (prevCellKey != null) {\n        updateHighlightFor(prevCellKey, false);\n      }\n    },\n    updateProps: (select, newProps) => {\n      if (select === 'leading') {\n        if (LeadingSeparatorComponent != null) {\n          setLeadingSeparatorProps(_objectSpread(_objectSpread({}, leadingSeparatorProps), newProps));\n        } else if (prevCellKey != null) {\n          // update the previous item's separator\n          updatePropsFor(prevCellKey, _objectSpread(_objectSpread({}, leadingSeparatorProps), newProps));\n        }\n      } else if (select === 'trailing' && SeparatorComponent != null) {\n        setSeparatorProps(_objectSpread(_objectSpread({}, separatorProps), newProps));\n      }\n    }\n  };\n  var element = props.renderItem({\n    item,\n    index,\n    section,\n    separators\n  });\n  var leadingSeparator = LeadingSeparatorComponent != null && /*#__PURE__*/React.createElement(LeadingSeparatorComponent, _extends({\n    highlighted: leadingSeparatorHiglighted\n  }, leadingSeparatorProps));\n  var separator = SeparatorComponent != null && /*#__PURE__*/React.createElement(SeparatorComponent, _extends({\n    highlighted: separatorHighlighted\n  }, separatorProps));\n  return leadingSeparator || separator ? /*#__PURE__*/React.createElement(View, null, inverted === false ? leadingSeparator : separator, element, inverted === false ? separator : leadingSeparator) : element;\n}\n\n/* $FlowFixMe[class-object-subtyping] added when improving typing for this\n * parameters */\n// $FlowFixMe[method-unbinding]\nexport default VirtualizedSectionList;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"stickySectionHeadersEnabled\"];\nimport Platform from '../../../exports/Platform';\nimport * as React from 'react';\nimport VirtualizedSectionList from '../VirtualizedSectionList';\n/**\n * A performant interface for rendering sectioned lists, supporting the most handy features:\n *\n *  - Fully cross-platform.\n *  - Configurable viewability callbacks.\n *  - List header support.\n *  - List footer support.\n *  - Item separator support.\n *  - Section header support.\n *  - Section separator support.\n *  - Heterogeneous data and item rendering support.\n *  - Pull to Refresh.\n *  - Scroll loading.\n *\n * If you don't need section support and want a simpler interface, use\n * [`<FlatList>`](https://reactnative.dev/docs/flatlist).\n *\n * Simple Examples:\n *\n *     <SectionList\n *       renderItem={({item}) => <ListItem title={item} />}\n *       renderSectionHeader={({section}) => <Header title={section.title} />}\n *       sections={[ // homogeneous rendering between sections\n *         {data: [...], title: ...},\n *         {data: [...], title: ...},\n *         {data: [...], title: ...},\n *       ]}\n *     />\n *\n *     <SectionList\n *       sections={[ // heterogeneous rendering between sections\n *         {data: [...], renderItem: ...},\n *         {data: [...], renderItem: ...},\n *         {data: [...], renderItem: ...},\n *       ]}\n *     />\n *\n * This is a convenience wrapper around [`<VirtualizedList>`](docs/virtualizedlist),\n * and thus inherits its props (as well as those of `ScrollView`) that aren't explicitly listed\n * here, along with the following caveats:\n *\n * - Internal state is not preserved when content scrolls out of the render window. Make sure all\n *   your data is captured in the item data or external stores like Flux, Redux, or Relay.\n * - This is a `PureComponent` which means that it will not re-render if `props` remain shallow-\n *   equal. Make sure that everything your `renderItem` function depends on is passed as a prop\n *   (e.g. `extraData`) that is not `===` after updates, otherwise your UI may not update on\n *   changes. This includes the `data` prop and parent component state.\n * - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously\n *   offscreen. This means it's possible to scroll faster than the fill rate and momentarily see\n *   blank content. This is a tradeoff that can be adjusted to suit the needs of each application,\n *   and we are working on improving it behind the scenes.\n * - By default, the list looks for a `key` prop on each item and uses that for the React key.\n *   Alternatively, you can provide a custom `keyExtractor` prop.\n *\n */\nexport default class SectionList extends React.PureComponent {\n  constructor() {\n    super(...arguments);\n    this._captureRef = ref => {\n      this._wrapperListRef = ref;\n    };\n  }\n  /**\n   * Scrolls to the item at the specified `sectionIndex` and `itemIndex` (within the section)\n   * positioned in the viewable area such that `viewPosition` 0 places it at the top (and may be\n   * covered by a sticky header), 1 at the bottom, and 0.5 centered in the middle. `viewOffset` is a\n   * fixed number of pixels to offset the final target position, e.g. to compensate for sticky\n   * headers.\n   *\n   * Note: cannot scroll to locations outside the render window without specifying the\n   * `getItemLayout` prop.\n   */\n  scrollToLocation(params) {\n    if (this._wrapperListRef != null) {\n      this._wrapperListRef.scrollToLocation(params);\n    }\n  }\n\n  /**\n   * Tells the list an interaction has occurred, which should trigger viewability calculations, e.g.\n   * if `waitForInteractions` is true and the user has not scrolled. This is typically called by\n   * taps on items or by navigation actions.\n   */\n  recordInteraction() {\n    var listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n    listRef && listRef.recordInteraction();\n  }\n\n  /**\n   * Displays the scroll indicators momentarily.\n   *\n   * @platform ios\n   */\n  flashScrollIndicators() {\n    var listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n    listRef && listRef.flashScrollIndicators();\n  }\n\n  /**\n   * Provides a handle to the underlying scroll responder.\n   */\n  getScrollResponder() {\n    var listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n    if (listRef) {\n      return listRef.getScrollResponder();\n    }\n  }\n  getScrollableNode() {\n    var listRef = this._wrapperListRef && this._wrapperListRef.getListRef();\n    if (listRef) {\n      return listRef.getScrollableNode();\n    }\n  }\n  render() {\n    var _this$props = this.props,\n      _stickySectionHeadersEnabled = _this$props.stickySectionHeadersEnabled,\n      restProps = _objectWithoutPropertiesLoose(_this$props, _excluded);\n    var stickySectionHeadersEnabled = _stickySectionHeadersEnabled !== null && _stickySectionHeadersEnabled !== void 0 ? _stickySectionHeadersEnabled : Platform.OS === 'ios';\n    return /*#__PURE__*/React.createElement(VirtualizedSectionList, _extends({}, restProps, {\n      stickySectionHeadersEnabled: stickySectionHeadersEnabled,\n      ref: this._captureRef,\n      getItemCount: items => items.length,\n      getItem: (items, index) => items[index]\n    }));\n  }\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport SectionList from '../../vendor/react-native/SectionList';\nexport default SectionList;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar emptyFunction = () => {};\nfunction StatusBar() {\n  return null;\n}\nStatusBar.setBackgroundColor = emptyFunction;\nStatusBar.setBarStyle = emptyFunction;\nStatusBar.setHidden = emptyFunction;\nStatusBar.setNetworkActivityIndicatorVisible = emptyFunction;\nStatusBar.setTranslucent = emptyFunction;\nexport default StatusBar;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport normalizeValueWithProperty from './normalizeValueWithProperty';\nimport canUseDOM from '../../../modules/canUseDom';\n/**\n * The browser implements the CSS cascade, where the order of properties is a\n * factor in determining which styles to paint. React Native is different. It\n * gives giving precedence to the more specific style property. For example,\n * the value of `paddingTop` takes precedence over that of `padding`.\n *\n * This module creates mutally exclusive style declarations by expanding all of\n * React Native's supported shortform properties (e.g. `padding`) to their\n * longfrom equivalents.\n */\n\nvar emptyObject = {};\nvar supportsCSS3TextDecoration = !canUseDOM || window.CSS != null && window.CSS.supports != null && (window.CSS.supports('text-decoration-line', 'none') || window.CSS.supports('-webkit-text-decoration-line', 'none'));\nvar MONOSPACE_FONT_STACK = 'monospace,monospace';\nvar SYSTEM_FONT_STACK = '-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif';\nvar STYLE_SHORT_FORM_EXPANSIONS = {\n  borderColor: ['borderTopColor', 'borderRightColor', 'borderBottomColor', 'borderLeftColor'],\n  borderBlockColor: ['borderTopColor', 'borderBottomColor'],\n  borderInlineColor: ['borderRightColor', 'borderLeftColor'],\n  borderRadius: ['borderTopLeftRadius', 'borderTopRightRadius', 'borderBottomRightRadius', 'borderBottomLeftRadius'],\n  borderStyle: ['borderTopStyle', 'borderRightStyle', 'borderBottomStyle', 'borderLeftStyle'],\n  borderBlockStyle: ['borderTopStyle', 'borderBottomStyle'],\n  borderInlineStyle: ['borderRightStyle', 'borderLeftStyle'],\n  borderWidth: ['borderTopWidth', 'borderRightWidth', 'borderBottomWidth', 'borderLeftWidth'],\n  borderBlockWidth: ['borderTopWidth', 'borderBottomWidth'],\n  borderInlineWidth: ['borderRightWidth', 'borderLeftWidth'],\n  insetBlock: ['top', 'bottom'],\n  insetInline: ['left', 'right'],\n  marginBlock: ['marginTop', 'marginBottom'],\n  marginInline: ['marginRight', 'marginLeft'],\n  paddingBlock: ['paddingTop', 'paddingBottom'],\n  paddingInline: ['paddingRight', 'paddingLeft'],\n  overflow: ['overflowX', 'overflowY'],\n  overscrollBehavior: ['overscrollBehaviorX', 'overscrollBehaviorY'],\n  borderBlockStartColor: ['borderTopColor'],\n  borderBlockStartStyle: ['borderTopStyle'],\n  borderBlockStartWidth: ['borderTopWidth'],\n  borderBlockEndColor: ['borderBottomColor'],\n  borderBlockEndStyle: ['borderBottomStyle'],\n  borderBlockEndWidth: ['borderBottomWidth'],\n  //borderInlineStartColor: ['borderLeftColor'],\n  //borderInlineStartStyle: ['borderLeftStyle'],\n  //borderInlineStartWidth: ['borderLeftWidth'],\n  //borderInlineEndColor: ['borderRightColor'],\n  //borderInlineEndStyle: ['borderRightStyle'],\n  //borderInlineEndWidth: ['borderRightWidth'],\n  borderEndStartRadius: ['borderBottomLeftRadius'],\n  borderEndEndRadius: ['borderBottomRightRadius'],\n  borderStartStartRadius: ['borderTopLeftRadius'],\n  borderStartEndRadius: ['borderTopRightRadius'],\n  insetBlockEnd: ['bottom'],\n  insetBlockStart: ['top'],\n  //insetInlineEnd: ['right'],\n  //insetInlineStart: ['left'],\n  marginBlockStart: ['marginTop'],\n  marginBlockEnd: ['marginBottom'],\n  //marginInlineStart: ['marginLeft'],\n  //marginInlineEnd: ['marginRight'],\n  paddingBlockStart: ['paddingTop'],\n  paddingBlockEnd: ['paddingBottom']\n  //paddingInlineStart: ['marginLeft'],\n  //paddingInlineEnd: ['marginRight'],\n};\n\n/**\n * Reducer\n */\n\nvar createReactDOMStyle = (style, isInline) => {\n  if (!style) {\n    return emptyObject;\n  }\n  var resolvedStyle = {};\n  var _loop = function _loop() {\n    var value = style[prop];\n    if (\n    // Ignore everything with a null value\n    value == null) {\n      return \"continue\";\n    }\n    if (prop === 'backgroundClip') {\n      // TODO: remove once this issue is fixed\n      // https://github.com/rofrischmann/inline-style-prefixer/issues/159\n      if (value === 'text') {\n        resolvedStyle.backgroundClip = value;\n        resolvedStyle.WebkitBackgroundClip = value;\n      }\n    } else if (prop === 'flex') {\n      if (value === -1) {\n        resolvedStyle.flexGrow = 0;\n        resolvedStyle.flexShrink = 1;\n        resolvedStyle.flexBasis = 'auto';\n      } else {\n        resolvedStyle.flex = value;\n      }\n    } else if (prop === 'font') {\n      resolvedStyle[prop] = value.replace('System', SYSTEM_FONT_STACK);\n    } else if (prop === 'fontFamily') {\n      if (value.indexOf('System') > -1) {\n        var stack = value.split(/,\\s*/);\n        stack[stack.indexOf('System')] = SYSTEM_FONT_STACK;\n        resolvedStyle[prop] = stack.join(',');\n      } else if (value === 'monospace') {\n        resolvedStyle[prop] = MONOSPACE_FONT_STACK;\n      } else {\n        resolvedStyle[prop] = value;\n      }\n    } else if (prop === 'textDecorationLine') {\n      // use 'text-decoration' for browsers that only support CSS2\n      // text-decoration (e.g., IE, Edge)\n      if (!supportsCSS3TextDecoration) {\n        resolvedStyle.textDecoration = value;\n      } else {\n        resolvedStyle.textDecorationLine = value;\n      }\n    } else if (prop === 'writingDirection') {\n      resolvedStyle.direction = value;\n    } else {\n      var _value = normalizeValueWithProperty(style[prop], prop);\n      var longFormProperties = STYLE_SHORT_FORM_EXPANSIONS[prop];\n      if (isInline && prop === 'inset') {\n        if (style.insetInline == null) {\n          resolvedStyle.left = _value;\n          resolvedStyle.right = _value;\n        }\n        if (style.insetBlock == null) {\n          resolvedStyle.top = _value;\n          resolvedStyle.bottom = _value;\n        }\n      } else if (isInline && prop === 'margin') {\n        if (style.marginInline == null) {\n          resolvedStyle.marginLeft = _value;\n          resolvedStyle.marginRight = _value;\n        }\n        if (style.marginBlock == null) {\n          resolvedStyle.marginTop = _value;\n          resolvedStyle.marginBottom = _value;\n        }\n      } else if (isInline && prop === 'padding') {\n        if (style.paddingInline == null) {\n          resolvedStyle.paddingLeft = _value;\n          resolvedStyle.paddingRight = _value;\n        }\n        if (style.paddingBlock == null) {\n          resolvedStyle.paddingTop = _value;\n          resolvedStyle.paddingBottom = _value;\n        }\n      } else if (longFormProperties) {\n        longFormProperties.forEach((longForm, i) => {\n          // The value of any longform property in the original styles takes\n          // precedence over the shortform's value.\n          if (style[longForm] == null) {\n            resolvedStyle[longForm] = _value;\n          }\n        });\n      } else {\n        resolvedStyle[prop] = _value;\n      }\n    }\n  };\n  for (var prop in style) {\n    var _ret = _loop();\n    if (_ret === \"continue\") continue;\n  }\n  return resolvedStyle;\n};\nexport default createReactDOMStyle;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport isWebColor from '../../../modules/isWebColor';\nimport processColor from '../../../exports/processColor';\nvar normalizeColor = function normalizeColor(color, opacity) {\n  if (opacity === void 0) {\n    opacity = 1;\n  }\n  if (color == null) return;\n  if (typeof color === 'string' && isWebColor(color)) {\n    return color;\n  }\n  var colorInt = processColor(color);\n  if (colorInt != null) {\n    var r = colorInt >> 16 & 255;\n    var g = colorInt >> 8 & 255;\n    var b = colorInt & 255;\n    var a = (colorInt >> 24 & 255) / 255;\n    var alpha = (a * opacity).toFixed(2);\n    return \"rgba(\" + r + \",\" + g + \",\" + b + \",\" + alpha + \")\";\n  }\n};\nexport default normalizeColor;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar isWebColor = color => color === 'currentcolor' || color === 'currentColor' || color === 'inherit' || color.indexOf('var(') === 0;\nexport default isWebColor;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar unitlessNumbers = {\n  animationIterationCount: true,\n  aspectRatio: true,\n  borderImageOutset: true,\n  borderImageSlice: true,\n  borderImageWidth: true,\n  boxFlex: true,\n  boxFlexGroup: true,\n  boxOrdinalGroup: true,\n  columnCount: true,\n  flex: true,\n  flexGrow: true,\n  flexOrder: true,\n  flexPositive: true,\n  flexShrink: true,\n  flexNegative: true,\n  fontWeight: true,\n  gridRow: true,\n  gridRowEnd: true,\n  gridRowGap: true,\n  gridRowStart: true,\n  gridColumn: true,\n  gridColumnEnd: true,\n  gridColumnGap: true,\n  gridColumnStart: true,\n  lineClamp: true,\n  opacity: true,\n  order: true,\n  orphans: true,\n  tabSize: true,\n  widows: true,\n  zIndex: true,\n  zoom: true,\n  // SVG-related\n  fillOpacity: true,\n  floodOpacity: true,\n  stopOpacity: true,\n  strokeDasharray: true,\n  strokeDashoffset: true,\n  strokeMiterlimit: true,\n  strokeOpacity: true,\n  strokeWidth: true,\n  // transform types\n  scale: true,\n  scaleX: true,\n  scaleY: true,\n  scaleZ: true,\n  // RN properties\n  shadowOpacity: true\n};\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['ms', 'Moz', 'O', 'Webkit'];\nvar prefixKey = (prefix, key) => {\n  return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n};\nObject.keys(unitlessNumbers).forEach(prop => {\n  prefixes.forEach(prefix => {\n    unitlessNumbers[prefixKey(prefix, prop)] = unitlessNumbers[prop];\n  });\n});\nexport default unitlessNumbers;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport unitlessNumbers from './unitlessNumbers';\nimport normalizeColor from './normalizeColor';\nvar colorProps = {\n  backgroundColor: true,\n  borderColor: true,\n  borderTopColor: true,\n  borderRightColor: true,\n  borderBottomColor: true,\n  borderLeftColor: true,\n  color: true,\n  shadowColor: true,\n  textDecorationColor: true,\n  textShadowColor: true\n};\nexport default function normalizeValueWithProperty(value, property) {\n  var returnValue = value;\n  if ((property == null || !unitlessNumbers[property]) && typeof value === 'number') {\n    returnValue = value + \"px\";\n  } else if (property != null && colorProps[property]) {\n    returnValue = normalizeColor(value);\n  }\n  return returnValue;\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\nimport canUseDOM from '../../../modules/canUseDom';\n\n// $FlowFixMe: HTMLStyleElement is incorrectly typed - https://github.com/facebook/flow/issues/2696\nexport default function createCSSStyleSheet(id, rootNode, textContent) {\n  if (canUseDOM) {\n    var root = rootNode != null ? rootNode : document;\n    var element = root.getElementById(id);\n    if (element == null) {\n      element = document.createElement('style');\n      element.setAttribute('id', id);\n      if (typeof textContent === 'string') {\n        element.appendChild(document.createTextNode(textContent));\n      }\n      if (root instanceof ShadowRoot) {\n        root.insertBefore(element, root.firstChild);\n      } else {\n        var head = root.head;\n        if (head) {\n          head.insertBefore(element, head.firstChild);\n        }\n      }\n    }\n    // $FlowFixMe: HTMLElement is incorrectly typed\n    return element.sheet;\n  } else {\n    return null;\n  }\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar slice = Array.prototype.slice;\n\n/**\n * Order-based insertion of CSS.\n *\n * Each rule is associated with a numerically defined group.\n * Groups are ordered within the style sheet according to their number, with the\n * lowest first.\n *\n * Groups are implemented using marker rules. The selector of the first rule of\n * each group is used only to encode the group number for hydration. An\n * alternative implementation could rely on CSSMediaRule, allowing groups to be\n * treated as a sub-sheet, but the Edge implementation of CSSMediaRule is\n * broken.\n * https://developer.mozilla.org/en-US/docs/Web/API/CSSMediaRule\n * https://gist.github.com/necolas/aa0c37846ad6bd3b05b727b959e82674\n */\nexport default function createOrderedCSSStyleSheet(sheet) {\n  var groups = {};\n  var selectors = {};\n\n  /**\n   * Hydrate approximate record from any existing rules in the sheet.\n   */\n  if (sheet != null) {\n    var group;\n    slice.call(sheet.cssRules).forEach((cssRule, i) => {\n      var cssText = cssRule.cssText;\n      // Create record of existing selectors and rules\n      if (cssText.indexOf('stylesheet-group') > -1) {\n        group = decodeGroupRule(cssRule);\n        groups[group] = {\n          start: i,\n          rules: [cssText]\n        };\n      } else {\n        var selectorText = getSelectorText(cssText);\n        if (selectorText != null) {\n          selectors[selectorText] = true;\n          groups[group].rules.push(cssText);\n        }\n      }\n    });\n  }\n  function sheetInsert(sheet, group, text) {\n    var orderedGroups = getOrderedGroups(groups);\n    var groupIndex = orderedGroups.indexOf(group);\n    var nextGroupIndex = groupIndex + 1;\n    var nextGroup = orderedGroups[nextGroupIndex];\n    // Insert rule before the next group, or at the end of the stylesheet\n    var position = nextGroup != null && groups[nextGroup].start != null ? groups[nextGroup].start : sheet.cssRules.length;\n    var isInserted = insertRuleAt(sheet, text, position);\n    if (isInserted) {\n      // Set the starting index of the new group\n      if (groups[group].start == null) {\n        groups[group].start = position;\n      }\n      // Increment the starting index of all subsequent groups\n      for (var i = nextGroupIndex; i < orderedGroups.length; i += 1) {\n        var groupNumber = orderedGroups[i];\n        var previousStart = groups[groupNumber].start || 0;\n        groups[groupNumber].start = previousStart + 1;\n      }\n    }\n    return isInserted;\n  }\n  var OrderedCSSStyleSheet = {\n    /**\n     * The textContent of the style sheet.\n     */\n    getTextContent() {\n      return getOrderedGroups(groups).map(group => {\n        var rules = groups[group].rules;\n        // Sorting provides deterministic order of styles in group for\n        // build-time extraction of the style sheet.\n        var marker = rules.shift();\n        rules.sort();\n        rules.unshift(marker);\n        return rules.join('\\n');\n      }).join('\\n');\n    },\n    /**\n     * Insert a rule into the style sheet\n     */\n    insert(cssText, groupValue) {\n      var group = Number(groupValue);\n\n      // Create a new group.\n      if (groups[group] == null) {\n        var markerRule = encodeGroupRule(group);\n        // Create the internal record.\n        groups[group] = {\n          start: null,\n          rules: [markerRule]\n        };\n        // Update CSSOM.\n        if (sheet != null) {\n          sheetInsert(sheet, group, markerRule);\n        }\n      }\n\n      // selectorText is more reliable than cssText for insertion checks. The\n      // browser excludes vendor-prefixed properties and rewrites certain values\n      // making cssText more likely to be different from what was inserted.\n      var selectorText = getSelectorText(cssText);\n      if (selectorText != null && selectors[selectorText] == null) {\n        // Update the internal records.\n        selectors[selectorText] = true;\n        groups[group].rules.push(cssText);\n        // Update CSSOM.\n        if (sheet != null) {\n          var isInserted = sheetInsert(sheet, group, cssText);\n          if (!isInserted) {\n            // Revert internal record change if a rule was rejected (e.g.,\n            // unrecognized pseudo-selector)\n            groups[group].rules.pop();\n          }\n        }\n      }\n    }\n  };\n  return OrderedCSSStyleSheet;\n}\n\n/**\n * Helper functions\n */\n\nfunction encodeGroupRule(group) {\n  return \"[stylesheet-group=\\\"\" + group + \"\\\"]{}\";\n}\nvar groupPattern = /[\"']/g;\nfunction decodeGroupRule(cssRule) {\n  return Number(cssRule.selectorText.split(groupPattern)[1]);\n}\nfunction getOrderedGroups(obj) {\n  return Object.keys(obj).map(Number).sort((a, b) => a > b ? 1 : -1);\n}\nvar selectorPattern = /\\s*([,])\\s*/g;\nfunction getSelectorText(cssText) {\n  var selector = cssText.split('{')[0].trim();\n  return selector !== '' ? selector.replace(selectorPattern, '$1') : null;\n}\nfunction insertRuleAt(root, cssText, position) {\n  try {\n    // $FlowFixMe: Flow is missing CSSOM types needed to type 'root'.\n    root.insertRule(cssText, position);\n    return true;\n  } catch (e) {\n    // JSDOM doesn't support `CSSSMediaRule#insertRule`.\n    // Also ignore errors that occur from attempting to insert vendor-prefixed selectors.\n    return false;\n  }\n}","import originalCreateOrderedCSSStyleSheet from \"react-native-web/dist/exports/StyleSheet/dom/createOrderedCSSStyleSheet\";\nconst createOrderedCSSStyleSheet = (sheet) => {\n  let layerRule = null;\n  let fakeSheet = null;\n  if (sheet !== null) {\n    if (typeof CSSLayerBlockRule !== \"undefined\" && sheet.cssRules[0] instanceof CSSLayerBlockRule) {\n      layerRule = sheet.cssRules[0];\n    } else {\n      const layerIndex = sheet.insertRule(\"@layer rnw {}\", 0);\n      layerRule = sheet.cssRules[layerIndex];\n    }\n    fakeSheet = {\n      // Increment index by 1 to skip the layer rule\n      insertRule: (text, index) => sheet.insertRule(text, index === void 0 ? 1 : index + 1),\n      get cssRules() {\n        return Array.from(sheet.cssRules).slice(1);\n      }\n    };\n  }\n  const originalLayered = originalCreateOrderedCSSStyleSheet(layerRule);\n  const original = originalCreateOrderedCSSStyleSheet(fakeSheet);\n  return {\n    getTextContent: () => {\n      return `@layer rnw { ${originalLayered.getTextContent()} }\n${original.getTextContent()}`;\n    },\n    insert: (cssText, groupValue) => {\n      if (groupValue <= 1) {\n        originalLayered.insert(cssText, groupValue);\n        return;\n      }\n      original.insert(cssText, groupValue);\n    }\n  };\n};\nexport default createOrderedCSSStyleSheet;\n","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport canUseDOM from '../../../modules/canUseDom';\nimport createCSSStyleSheet from './createCSSStyleSheet';\nimport createOrderedCSSStyleSheet from './createOrderedCSSStyleSheet';\nvar defaultId = 'react-native-stylesheet';\nvar roots = new WeakMap();\nvar sheets = [];\nvar initialRules = [\n// minimal top-level reset\n'html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0);}', 'body{margin:0;}',\n// minimal form pseudo-element reset\n'button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;}', 'input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-webkit-search-results-button,input::-webkit-search-results-decoration{display:none;}'];\nexport function createSheet(root, id) {\n  if (id === void 0) {\n    id = defaultId;\n  }\n  var sheet;\n  if (canUseDOM) {\n    var rootNode = root != null ? root.getRootNode() : document;\n    // Create the initial style sheet\n    if (sheets.length === 0) {\n      sheet = createOrderedCSSStyleSheet(createCSSStyleSheet(id));\n      initialRules.forEach(rule => {\n        sheet.insert(rule, 0);\n      });\n      roots.set(rootNode, sheets.length);\n      sheets.push(sheet);\n    } else {\n      var index = roots.get(rootNode);\n      if (index == null) {\n        var initialSheet = sheets[0];\n        // If we're creating a new sheet, populate it with existing styles\n        var textContent = initialSheet != null ? initialSheet.getTextContent() : '';\n        // Cast rootNode to 'any' because Flow types for getRootNode are wrong\n        sheet = createOrderedCSSStyleSheet(createCSSStyleSheet(id, rootNode, textContent));\n        roots.set(rootNode, sheets.length);\n        sheets.push(sheet);\n      } else {\n        sheet = sheets[index];\n      }\n    }\n  } else {\n    // Create the initial style sheet\n    if (sheets.length === 0) {\n      sheet = createOrderedCSSStyleSheet(createCSSStyleSheet(id));\n      initialRules.forEach(rule => {\n        sheet.insert(rule, 0);\n      });\n      sheets.push(sheet);\n    } else {\n      sheet = sheets[0];\n    }\n  }\n  return {\n    getTextContent() {\n      return sheet.getTextContent();\n    },\n    id,\n    insert(cssText, groupValue) {\n      sheets.forEach(s => {\n        s.insert(cssText, groupValue);\n      });\n    }\n  };\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar uppercasePattern = /[A-Z]/g;\nvar msPattern = /^ms-/;\nvar cache = {};\nfunction toHyphenLower(match) {\n  return '-' + match.toLowerCase();\n}\nfunction hyphenateStyleName(name) {\n  if (name in cache) {\n    return cache[name];\n  }\n  var hName = name.replace(uppercasePattern, toHyphenLower);\n  return cache[name] = msPattern.test(hName) ? '-' + hName : hName;\n}\nexport default hyphenateStyleName;","import crossFade from 'inline-style-prefixer/lib/plugins/crossFade';\nimport imageSet from 'inline-style-prefixer/lib/plugins/imageSet';\nimport logical from 'inline-style-prefixer/lib/plugins/logical';\nimport position from 'inline-style-prefixer/lib/plugins/position';\nimport sizing from 'inline-style-prefixer/lib/plugins/sizing';\nimport transition from 'inline-style-prefixer/lib/plugins/transition';\nvar w = ['Webkit'];\nvar m = ['Moz'];\nvar wm = ['Webkit', 'Moz'];\nvar wms = ['Webkit', 'ms'];\nvar wmms = ['Webkit', 'Moz', 'ms'];\nexport default {\n  plugins: [crossFade, imageSet, logical, position, sizing, transition],\n  prefixMap: {\n    appearance: wmms,\n    userSelect: wm,\n    textEmphasisPosition: wms,\n    textEmphasis: wms,\n    textEmphasisStyle: wms,\n    textEmphasisColor: wms,\n    boxDecorationBreak: wms,\n    clipPath: w,\n    maskImage: wms,\n    maskMode: wms,\n    maskRepeat: wms,\n    maskPosition: wms,\n    maskClip: wms,\n    maskOrigin: wms,\n    maskSize: wms,\n    maskComposite: wms,\n    mask: wms,\n    maskBorderSource: wms,\n    maskBorderMode: wms,\n    maskBorderSlice: wms,\n    maskBorderWidth: wms,\n    maskBorderOutset: wms,\n    maskBorderRepeat: wms,\n    maskBorder: wms,\n    maskType: wms,\n    textDecorationStyle: w,\n    textDecorationSkip: w,\n    textDecorationLine: w,\n    textDecorationColor: w,\n    filter: w,\n    breakAfter: w,\n    breakBefore: w,\n    breakInside: w,\n    columnCount: w,\n    columnFill: w,\n    columnGap: w,\n    columnRule: w,\n    columnRuleColor: w,\n    columnRuleStyle: w,\n    columnRuleWidth: w,\n    columns: w,\n    columnSpan: w,\n    columnWidth: w,\n    backdropFilter: w,\n    hyphens: w,\n    flowInto: w,\n    flowFrom: w,\n    regionFragment: w,\n    textOrientation: w,\n    tabSize: m,\n    fontKerning: w,\n    textSizeAdjust: w\n  }\n};","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport createPrefixer from 'inline-style-prefixer/lib/createPrefixer';\nimport staticData from './static';\nvar prefixAll = createPrefixer(staticData);\nexport default prefixAll;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"animationKeyframes\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport createReactDOMStyle from './createReactDOMStyle';\nimport hash from './hash';\nimport hyphenateStyleName from './hyphenateStyleName';\nimport normalizeValueWithProperty from './normalizeValueWithProperty';\nimport prefixStyles from '../../../modules/prefixStyles';\nvar cache = new Map();\nvar emptyObject = {};\nvar classicGroup = 1;\nvar atomicGroup = 3;\nvar customGroup = {\n  borderColor: 2,\n  borderRadius: 2,\n  borderStyle: 2,\n  borderWidth: 2,\n  display: 2,\n  flex: 2,\n  inset: 2,\n  margin: 2,\n  overflow: 2,\n  overscrollBehavior: 2,\n  padding: 2,\n  insetBlock: 2.1,\n  insetInline: 2.1,\n  marginInline: 2.1,\n  marginBlock: 2.1,\n  paddingInline: 2.1,\n  paddingBlock: 2.1,\n  borderBlockStartColor: 2.2,\n  borderBlockStartStyle: 2.2,\n  borderBlockStartWidth: 2.2,\n  borderBlockEndColor: 2.2,\n  borderBlockEndStyle: 2.2,\n  borderBlockEndWidth: 2.2,\n  borderInlineStartColor: 2.2,\n  borderInlineStartStyle: 2.2,\n  borderInlineStartWidth: 2.2,\n  borderInlineEndColor: 2.2,\n  borderInlineEndStyle: 2.2,\n  borderInlineEndWidth: 2.2,\n  borderEndStartRadius: 2.2,\n  borderEndEndRadius: 2.2,\n  borderStartStartRadius: 2.2,\n  borderStartEndRadius: 2.2,\n  insetBlockEnd: 2.2,\n  insetBlockStart: 2.2,\n  insetInlineEnd: 2.2,\n  insetInlineStart: 2.2,\n  marginBlockStart: 2.2,\n  marginBlockEnd: 2.2,\n  marginInlineStart: 2.2,\n  marginInlineEnd: 2.2,\n  paddingBlockStart: 2.2,\n  paddingBlockEnd: 2.2,\n  paddingInlineStart: 2.2,\n  paddingInlineEnd: 2.2\n};\nvar borderTopLeftRadius = 'borderTopLeftRadius';\nvar borderTopRightRadius = 'borderTopRightRadius';\nvar borderBottomLeftRadius = 'borderBottomLeftRadius';\nvar borderBottomRightRadius = 'borderBottomRightRadius';\nvar borderLeftColor = 'borderLeftColor';\nvar borderLeftStyle = 'borderLeftStyle';\nvar borderLeftWidth = 'borderLeftWidth';\nvar borderRightColor = 'borderRightColor';\nvar borderRightStyle = 'borderRightStyle';\nvar borderRightWidth = 'borderRightWidth';\nvar right = 'right';\nvar marginLeft = 'marginLeft';\nvar marginRight = 'marginRight';\nvar paddingLeft = 'paddingLeft';\nvar paddingRight = 'paddingRight';\nvar left = 'left';\n\n// Map of LTR property names to their BiDi equivalent.\nvar PROPERTIES_FLIP = {\n  [borderTopLeftRadius]: borderTopRightRadius,\n  [borderTopRightRadius]: borderTopLeftRadius,\n  [borderBottomLeftRadius]: borderBottomRightRadius,\n  [borderBottomRightRadius]: borderBottomLeftRadius,\n  [borderLeftColor]: borderRightColor,\n  [borderLeftStyle]: borderRightStyle,\n  [borderLeftWidth]: borderRightWidth,\n  [borderRightColor]: borderLeftColor,\n  [borderRightStyle]: borderLeftStyle,\n  [borderRightWidth]: borderLeftWidth,\n  [left]: right,\n  [marginLeft]: marginRight,\n  [marginRight]: marginLeft,\n  [paddingLeft]: paddingRight,\n  [paddingRight]: paddingLeft,\n  [right]: left\n};\n\n// Map of I18N property names to their LTR equivalent.\nvar PROPERTIES_I18N = {\n  borderStartStartRadius: borderTopLeftRadius,\n  borderStartEndRadius: borderTopRightRadius,\n  borderEndStartRadius: borderBottomLeftRadius,\n  borderEndEndRadius: borderBottomRightRadius,\n  borderInlineStartColor: borderLeftColor,\n  borderInlineStartStyle: borderLeftStyle,\n  borderInlineStartWidth: borderLeftWidth,\n  borderInlineEndColor: borderRightColor,\n  borderInlineEndStyle: borderRightStyle,\n  borderInlineEndWidth: borderRightWidth,\n  insetInlineEnd: right,\n  insetInlineStart: left,\n  marginInlineStart: marginLeft,\n  marginInlineEnd: marginRight,\n  paddingInlineStart: paddingLeft,\n  paddingInlineEnd: paddingRight\n};\nvar PROPERTIES_VALUE = ['clear', 'float', 'textAlign'];\nexport function atomic(style) {\n  var compiledStyle = {\n    $$css: true\n  };\n  var compiledRules = [];\n  function atomicCompile(srcProp, prop, value) {\n    var valueString = stringifyValueWithProperty(value, prop);\n    var cacheKey = prop + valueString;\n    var cachedResult = cache.get(cacheKey);\n    var identifier;\n    if (cachedResult != null) {\n      identifier = cachedResult[0];\n      compiledRules.push(cachedResult[1]);\n    } else {\n      var v = srcProp !== prop ? cacheKey : valueString;\n      identifier = createIdentifier('r', srcProp, v);\n      var order = customGroup[srcProp] || atomicGroup;\n      var rules = createAtomicRules(identifier, prop, value);\n      var orderedRules = [rules, order];\n      compiledRules.push(orderedRules);\n      cache.set(cacheKey, [identifier, orderedRules]);\n    }\n    return identifier;\n  }\n  Object.keys(style).sort().forEach(srcProp => {\n    var value = style[srcProp];\n    if (value != null) {\n      var localizeableValue;\n      // BiDi flip values\n      if (PROPERTIES_VALUE.indexOf(srcProp) > -1) {\n        var _left = atomicCompile(srcProp, srcProp, 'left');\n        var _right = atomicCompile(srcProp, srcProp, 'right');\n        if (value === 'start') {\n          localizeableValue = [_left, _right];\n        } else if (value === 'end') {\n          localizeableValue = [_right, _left];\n        }\n      }\n      // BiDi flip properties\n      var propPolyfill = PROPERTIES_I18N[srcProp];\n      if (propPolyfill != null) {\n        var ltr = atomicCompile(srcProp, propPolyfill, value);\n        var rtl = atomicCompile(srcProp, PROPERTIES_FLIP[propPolyfill], value);\n        localizeableValue = [ltr, rtl];\n      }\n      // BiDi flip transitionProperty value\n      if (srcProp === 'transitionProperty') {\n        var values = Array.isArray(value) ? value : [value];\n        var polyfillIndices = [];\n        for (var i = 0; i < values.length; i++) {\n          var val = values[i];\n          if (typeof val === 'string' && PROPERTIES_I18N[val] != null) {\n            polyfillIndices.push(i);\n          }\n        }\n        if (polyfillIndices.length > 0) {\n          var ltrPolyfillValues = [...values];\n          var rtlPolyfillValues = [...values];\n          polyfillIndices.forEach(i => {\n            var ltrVal = ltrPolyfillValues[i];\n            if (typeof ltrVal === 'string') {\n              var ltrPolyfill = PROPERTIES_I18N[ltrVal];\n              var rtlPolyfill = PROPERTIES_FLIP[ltrPolyfill];\n              ltrPolyfillValues[i] = ltrPolyfill;\n              rtlPolyfillValues[i] = rtlPolyfill;\n              var _ltr = atomicCompile(srcProp, srcProp, ltrPolyfillValues);\n              var _rtl = atomicCompile(srcProp, srcProp, rtlPolyfillValues);\n              localizeableValue = [_ltr, _rtl];\n            }\n          });\n        }\n      }\n      if (localizeableValue == null) {\n        localizeableValue = atomicCompile(srcProp, srcProp, value);\n      } else {\n        compiledStyle['$$css$localize'] = true;\n      }\n      compiledStyle[srcProp] = localizeableValue;\n    }\n  });\n  return [compiledStyle, compiledRules];\n}\n\n/**\n * Compile simple style object to classic CSS rules.\n * No support for 'placeholderTextColor', 'scrollbarWidth', or 'pointerEvents'.\n */\nexport function classic(style, name) {\n  var compiledStyle = {\n    $$css: true\n  };\n  var compiledRules = [];\n  var animationKeyframes = style.animationKeyframes,\n    rest = _objectWithoutPropertiesLoose(style, _excluded);\n  var identifier = createIdentifier('css', name, JSON.stringify(style));\n  var selector = \".\" + identifier;\n  var animationName;\n  if (animationKeyframes != null) {\n    var _processKeyframesValu = processKeyframesValue(animationKeyframes),\n      animationNames = _processKeyframesValu[0],\n      keyframesRules = _processKeyframesValu[1];\n    animationName = animationNames.join(',');\n    compiledRules.push(...keyframesRules);\n  }\n  var block = createDeclarationBlock(_objectSpread(_objectSpread({}, rest), {}, {\n    animationName\n  }));\n  compiledRules.push(\"\" + selector + block);\n  compiledStyle[identifier] = identifier;\n  return [compiledStyle, [[compiledRules, classicGroup]]];\n}\n\n/**\n * Compile simple style object to inline DOM styles.\n * No support for 'animationKeyframes', 'placeholderTextColor', 'scrollbarWidth', or 'pointerEvents'.\n */\nexport function inline(originalStyle, isRTL) {\n  var style = originalStyle || emptyObject;\n  var frozenProps = {};\n  var nextStyle = {};\n  var _loop = function _loop() {\n    var originalValue = style[originalProp];\n    var prop = originalProp;\n    var value = originalValue;\n    if (!Object.prototype.hasOwnProperty.call(style, originalProp) || originalValue == null) {\n      return \"continue\";\n    }\n\n    // BiDi flip values\n    if (PROPERTIES_VALUE.indexOf(originalProp) > -1) {\n      if (originalValue === 'start') {\n        value = isRTL ? 'right' : 'left';\n      } else if (originalValue === 'end') {\n        value = isRTL ? 'left' : 'right';\n      }\n    }\n    // BiDi flip properties\n    var propPolyfill = PROPERTIES_I18N[originalProp];\n    if (propPolyfill != null) {\n      prop = isRTL ? PROPERTIES_FLIP[propPolyfill] : propPolyfill;\n    }\n    // BiDi flip transitionProperty value\n    if (originalProp === 'transitionProperty') {\n      // $FlowFixMe\n      var originalValues = Array.isArray(originalValue) ? originalValue : [originalValue];\n      originalValues.forEach((val, i) => {\n        if (typeof val === 'string') {\n          var valuePolyfill = PROPERTIES_I18N[val];\n          if (valuePolyfill != null) {\n            originalValues[i] = isRTL ? PROPERTIES_FLIP[valuePolyfill] : valuePolyfill;\n            value = originalValues.join(' ');\n          }\n        }\n      });\n    }\n\n    // Create finalized style\n    if (!frozenProps[prop]) {\n      nextStyle[prop] = value;\n    }\n    if (prop === originalProp) {\n      frozenProps[prop] = true;\n    }\n\n    //    if (PROPERTIES_I18N.hasOwnProperty(originalProp)) {\n    //    frozenProps[prop] = true;\n    //}\n  };\n  for (var originalProp in style) {\n    var _ret = _loop();\n    if (_ret === \"continue\") continue;\n  }\n  return createReactDOMStyle(nextStyle, true);\n}\n\n/**\n * Create a value string that normalizes different input values with a common\n * output.\n */\nexport function stringifyValueWithProperty(value, property) {\n  // e.g., 0 => '0px', 'black' => 'rgba(0,0,0,1)'\n  var normalizedValue = normalizeValueWithProperty(value, property);\n  return typeof normalizedValue !== 'string' ? JSON.stringify(normalizedValue || '') : normalizedValue;\n}\n\n/**\n * Create the Atomic CSS rules needed for a given StyleSheet rule.\n * Translates StyleSheet declarations to CSS.\n */\nfunction createAtomicRules(identifier, property, value) {\n  var rules = [];\n  var selector = \".\" + identifier;\n\n  // Handle non-standard properties and object values that require multiple\n  // CSS rules to be created.\n  switch (property) {\n    case 'animationKeyframes':\n      {\n        var _processKeyframesValu2 = processKeyframesValue(value),\n          animationNames = _processKeyframesValu2[0],\n          keyframesRules = _processKeyframesValu2[1];\n        var block = createDeclarationBlock({\n          animationName: animationNames.join(',')\n        });\n        rules.push(\"\" + selector + block, ...keyframesRules);\n        break;\n      }\n\n    // Equivalent to using '::placeholder'\n    case 'placeholderTextColor':\n      {\n        var _block = createDeclarationBlock({\n          color: value,\n          opacity: 1\n        });\n        rules.push(selector + \"::-webkit-input-placeholder\" + _block, selector + \"::-moz-placeholder\" + _block, selector + \":-ms-input-placeholder\" + _block, selector + \"::placeholder\" + _block);\n        break;\n      }\n\n    // Polyfill for additional 'pointer-events' values\n    // See d13f78622b233a0afc0c7a200c0a0792c8ca9e58\n    // See https://reactnative.dev/docs/view#pointerevents\n    case 'pointerEvents':\n      {\n        var finalValue = value;\n        if (value === 'auto') {\n          finalValue = 'auto!important';\n        } else if (value === 'none') {\n          finalValue = 'none!important';\n          var _block2 = createDeclarationBlock({\n            pointerEvents: 'none'\n          });\n          rules.push(selector + \">* \" + _block2);\n        } else if (value === 'box-none') {\n          finalValue = 'none!important';\n          var _block3 = createDeclarationBlock({\n            pointerEvents: 'auto'\n          });\n          rules.push(selector + \">* \" + _block3);\n        } else if (value === 'box-only') {\n          finalValue = 'auto!important';\n          var _block4 = createDeclarationBlock({\n            pointerEvents: 'none'\n          });\n          rules.push(selector + \">* \" + _block4);\n        }\n        var _block5 = createDeclarationBlock({\n          pointerEvents: finalValue\n        });\n        rules.push(\"\" + selector + _block5);\n        break;\n      }\n\n    // Polyfill for draft spec\n    // https://drafts.csswg.org/css-scrollbars-1/\n    case 'scrollbarWidth':\n      {\n        if (value === 'none') {\n          rules.push(selector + \"::-webkit-scrollbar{display:none}\");\n        }\n        var _block6 = createDeclarationBlock({\n          scrollbarWidth: value\n        });\n        rules.push(\"\" + selector + _block6);\n        break;\n      }\n    default:\n      {\n        var _block7 = createDeclarationBlock({\n          [property]: value\n        });\n        rules.push(\"\" + selector + _block7);\n        break;\n      }\n  }\n  return rules;\n}\n\n/**\n * Creates a CSS declaration block from a StyleSheet object.\n */\nfunction createDeclarationBlock(style) {\n  var domStyle = prefixStyles(createReactDOMStyle(style));\n  var declarationsString = Object.keys(domStyle).map(property => {\n    var value = domStyle[property];\n    var prop = hyphenateStyleName(property);\n    // The prefixer may return an array of values:\n    // { display: [ '-webkit-flex', 'flex' ] }\n    // to represent \"fallback\" declarations\n    // { display: -webkit-flex; display: flex; }\n    if (Array.isArray(value)) {\n      return value.map(v => prop + \":\" + v).join(';');\n    } else {\n      return prop + \":\" + value;\n    }\n  })\n  // Once properties are hyphenated, this will put the vendor\n  // prefixed and short-form properties first in the list.\n  .sort().join(';');\n  return \"{\" + declarationsString + \";}\";\n}\n\n/**\n * An identifier is associated with a unique set of styles.\n */\nfunction createIdentifier(prefix, name, key) {\n  var hashedString = hash(name + key);\n  return process.env.NODE_ENV !== 'production' ? prefix + \"-\" + name + \"-\" + hashedString : prefix + \"-\" + hashedString;\n}\n\n/**\n * Create individual CSS keyframes rules.\n */\nfunction createKeyframes(keyframes) {\n  var prefixes = ['-webkit-', ''];\n  var identifier = createIdentifier('r', 'animation', JSON.stringify(keyframes));\n  var steps = '{' + Object.keys(keyframes).map(stepName => {\n    var rule = keyframes[stepName];\n    var block = createDeclarationBlock(rule);\n    return \"\" + stepName + block;\n  }).join('') + '}';\n  var rules = prefixes.map(prefix => {\n    return \"@\" + prefix + \"keyframes \" + identifier + steps;\n  });\n  return [identifier, rules];\n}\n\n/**\n * Create CSS keyframes rules and names from a StyleSheet keyframes object.\n */\nfunction processKeyframesValue(keyframesValue) {\n  if (typeof keyframesValue === 'number') {\n    throw new Error(\"Invalid CSS keyframes type: \" + typeof keyframesValue);\n  }\n  var animationNames = [];\n  var rules = [];\n  var value = Array.isArray(keyframesValue) ? keyframesValue : [keyframesValue];\n  value.forEach(keyframes => {\n    if (typeof keyframes === 'string') {\n      // Support external animation libraries (identifiers only)\n      animationNames.push(keyframes);\n    } else {\n      // Create rules for each of the keyframes\n      var _createKeyframes = createKeyframes(keyframes),\n        identifier = _createKeyframes[0],\n        keyframesRules = _createKeyframes[1];\n      animationNames.push(identifier);\n      rules.push(...keyframesRules);\n    }\n  });\n  return [animationNames, rules];\n}","/* eslint-disable */\n\n/**\n * JS Implementation of MurmurHash2\n *\n * @author <a href=\"mailto:gary.court@gmail.com\">Gary Court</a>\n * @see http://github.com/garycourt/murmurhash-js\n * @author <a href=\"mailto:aappleby@gmail.com\">Austin Appleby</a>\n * @see http://sites.google.com/site/murmurhash/\n *\n * @param {string} str ASCII only\n * @param {number} seed Positive integer only\n * @return {number} 32-bit positive integer hash\n *\n * \n */\n\nfunction murmurhash2_32_gc(str, seed) {\n  var l = str.length,\n    h = seed ^ l,\n    i = 0,\n    k;\n  while (l >= 4) {\n    k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n    k = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n    k ^= k >>> 24;\n    k = (k & 0xffff) * 0x5bd1e995 + (((k >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n    h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16) ^ k;\n    l -= 4;\n    ++i;\n  }\n  switch (l) {\n    case 3:\n      h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n    case 2:\n      h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n    case 1:\n      h ^= str.charCodeAt(i) & 0xff;\n      h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n  }\n  h ^= h >>> 13;\n  h = (h & 0xffff) * 0x5bd1e995 + (((h >>> 16) * 0x5bd1e995 & 0xffff) << 16);\n  h ^= h >>> 15;\n  return h >>> 0;\n}\nvar hash = str => murmurhash2_32_gc(str, 1).toString(36);\nexport default hash;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"writingDirection\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { atomic, classic, inline } from './compiler';\nimport { createSheet } from './dom';\nimport { localizeStyle } from 'styleq/transform-localize-style';\nimport { preprocess } from './preprocess';\nimport { styleq } from 'styleq';\nimport { validate } from './validate';\nimport canUseDOM from '../../modules/canUseDom';\nvar staticStyleMap = new WeakMap();\nvar sheet = createSheet();\nvar defaultPreprocessOptions = {\n  shadow: true,\n  textShadow: true\n};\nfunction customStyleq(styles, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  var _options = options,\n    writingDirection = _options.writingDirection,\n    preprocessOptions = _objectWithoutPropertiesLoose(_options, _excluded);\n  var isRTL = writingDirection === 'rtl';\n  return styleq.factory({\n    transform(style) {\n      var compiledStyle = staticStyleMap.get(style);\n      if (compiledStyle != null) {\n        return localizeStyle(compiledStyle, isRTL);\n      }\n      return preprocess(style, _objectSpread(_objectSpread({}, defaultPreprocessOptions), preprocessOptions));\n    }\n  })(styles);\n}\nfunction insertRules(compiledOrderedRules) {\n  compiledOrderedRules.forEach(_ref => {\n    var rules = _ref[0],\n      order = _ref[1];\n    if (sheet != null) {\n      rules.forEach(rule => {\n        sheet.insert(rule, order);\n      });\n    }\n  });\n}\nfunction compileAndInsertAtomic(style) {\n  var _atomic = atomic(preprocess(style, defaultPreprocessOptions)),\n    compiledStyle = _atomic[0],\n    compiledOrderedRules = _atomic[1];\n  insertRules(compiledOrderedRules);\n  return compiledStyle;\n}\nfunction compileAndInsertReset(style, key) {\n  var _classic = classic(style, key),\n    compiledStyle = _classic[0],\n    compiledOrderedRules = _classic[1];\n  insertRules(compiledOrderedRules);\n  return compiledStyle;\n}\n\n/* ----- API ----- */\n\nvar absoluteFillObject = {\n  position: 'absolute',\n  left: 0,\n  right: 0,\n  top: 0,\n  bottom: 0\n};\nvar absoluteFill = create({\n  x: _objectSpread({}, absoluteFillObject)\n}).x;\n\n/**\n * create\n */\nfunction create(styles) {\n  Object.keys(styles).forEach(key => {\n    var styleObj = styles[key];\n    // Only compile at runtime if the style is not already compiled\n    if (styleObj != null && styleObj.$$css !== true) {\n      var compiledStyles;\n      if (key.indexOf('$raw') > -1) {\n        compiledStyles = compileAndInsertReset(styleObj, key.split('$raw')[0]);\n      } else {\n        if (process.env.NODE_ENV !== 'production') {\n          validate(styleObj);\n          styles[key] = Object.freeze(styleObj);\n        }\n        compiledStyles = compileAndInsertAtomic(styleObj);\n      }\n      staticStyleMap.set(styleObj, compiledStyles);\n    }\n  });\n  return styles;\n}\n\n/**\n * compose\n */\nfunction compose(style1, style2) {\n  if (process.env.NODE_ENV !== 'production') {\n    /* eslint-disable prefer-rest-params */\n    var len = arguments.length;\n    if (len > 2) {\n      var readableStyles = [...arguments].map(a => flatten(a));\n      throw new Error(\"StyleSheet.compose() only accepts 2 arguments, received \" + len + \": \" + JSON.stringify(readableStyles));\n    }\n    /* eslint-enable prefer-rest-params */\n    /*\n    console.warn(\n      'StyleSheet.compose(a, b) is deprecated; use array syntax, i.e., [a,b].'\n    );\n    */\n  }\n  return [style1, style2];\n}\n\n/**\n * flatten\n */\nfunction flatten() {\n  for (var _len = arguments.length, styles = new Array(_len), _key = 0; _key < _len; _key++) {\n    styles[_key] = arguments[_key];\n  }\n  var flatArray = styles.flat(Infinity);\n  var result = {};\n  for (var i = 0; i < flatArray.length; i++) {\n    var style = flatArray[i];\n    if (style != null && typeof style === 'object') {\n      // $FlowFixMe\n      Object.assign(result, style);\n    }\n  }\n  return result;\n}\n\n/**\n * getSheet\n */\nfunction getSheet() {\n  return {\n    id: sheet.id,\n    textContent: sheet.getTextContent()\n  };\n}\n\n/**\n * resolve\n */\n\nfunction StyleSheet(styles, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  var isRTL = options.writingDirection === 'rtl';\n  var styleProps = customStyleq(styles, options);\n  if (Array.isArray(styleProps) && styleProps[1] != null) {\n    styleProps[1] = inline(styleProps[1], isRTL);\n  }\n  return styleProps;\n}\nStyleSheet.absoluteFill = absoluteFill;\nStyleSheet.absoluteFillObject = absoluteFillObject;\nStyleSheet.create = create;\nStyleSheet.compose = compose;\nStyleSheet.flatten = flatten;\nStyleSheet.getSheet = getSheet;\n// `hairlineWidth` is not implemented using screen density as browsers may\n// round sub-pixel values down to `0`, causing the line not to be rendered.\nStyleSheet.hairlineWidth = 1;\nif (canUseDOM && window.__REACT_DEVTOOLS_GLOBAL_HOOK__) {\n  window.__REACT_DEVTOOLS_GLOBAL_HOOK__.resolveRNStyle = StyleSheet.flatten;\n}\nvar stylesheet = StyleSheet;\nexport default stylesheet;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport normalizeColor from './compiler/normalizeColor';\nimport normalizeValueWithProperty from './compiler/normalizeValueWithProperty';\nimport { warnOnce } from '../../modules/warnOnce';\nvar emptyObject = {};\n\n/**\n * Shadows\n */\n\nvar defaultOffset = {\n  height: 0,\n  width: 0\n};\nexport var createBoxShadowValue = style => {\n  var shadowColor = style.shadowColor,\n    shadowOffset = style.shadowOffset,\n    shadowOpacity = style.shadowOpacity,\n    shadowRadius = style.shadowRadius;\n  var _ref = shadowOffset || defaultOffset,\n    height = _ref.height,\n    width = _ref.width;\n  var offsetX = normalizeValueWithProperty(width);\n  var offsetY = normalizeValueWithProperty(height);\n  var blurRadius = normalizeValueWithProperty(shadowRadius || 0);\n  var color = normalizeColor(shadowColor || 'black', shadowOpacity);\n  if (color != null && offsetX != null && offsetY != null && blurRadius != null) {\n    return offsetX + \" \" + offsetY + \" \" + blurRadius + \" \" + color;\n  }\n};\nexport var createTextShadowValue = style => {\n  var textShadowColor = style.textShadowColor,\n    textShadowOffset = style.textShadowOffset,\n    textShadowRadius = style.textShadowRadius;\n  var _ref2 = textShadowOffset || defaultOffset,\n    height = _ref2.height,\n    width = _ref2.width;\n  var radius = textShadowRadius || 0;\n  var offsetX = normalizeValueWithProperty(width);\n  var offsetY = normalizeValueWithProperty(height);\n  var blurRadius = normalizeValueWithProperty(radius);\n  var color = normalizeValueWithProperty(textShadowColor, 'textShadowColor');\n  if (color && (height !== 0 || width !== 0 || radius !== 0) && offsetX != null && offsetY != null && blurRadius != null) {\n    return offsetX + \" \" + offsetY + \" \" + blurRadius + \" \" + color;\n  }\n};\n\n// { offsetX: 1, offsetY: 2, blurRadius: 3, spreadDistance: 4, color: 'rgba(255, 0, 0)', inset: true }\n// => 'rgba(255, 0, 0) 1px 2px 3px 4px inset'\nvar mapBoxShadow = boxShadow => {\n  if (typeof boxShadow === 'string') {\n    return boxShadow;\n  }\n  var offsetX = normalizeValueWithProperty(boxShadow.offsetX) || 0;\n  var offsetY = normalizeValueWithProperty(boxShadow.offsetY) || 0;\n  var blurRadius = normalizeValueWithProperty(boxShadow.blurRadius) || 0;\n  var spreadDistance = normalizeValueWithProperty(boxShadow.spreadDistance) || 0;\n  var color = normalizeColor(boxShadow.color) || 'black';\n  var position = boxShadow.inset ? 'inset ' : '';\n  return \"\" + position + offsetX + \" \" + offsetY + \" \" + blurRadius + \" \" + spreadDistance + \" \" + color;\n};\nexport var createBoxShadowArrayValue = value => {\n  return value.map(mapBoxShadow).join(', ');\n};\n\n// { scale: 2 } => 'scale(2)'\n// { translateX: 20 } => 'translateX(20px)'\n// { matrix: [1,2,3,4,5,6] } => 'matrix(1,2,3,4,5,6)'\nvar mapTransform = transform => {\n  var type = Object.keys(transform)[0];\n  var value = transform[type];\n  if (type === 'matrix' || type === 'matrix3d') {\n    return type + \"(\" + value.join(',') + \")\";\n  } else {\n    var normalizedValue = normalizeValueWithProperty(value, type);\n    return type + \"(\" + normalizedValue + \")\";\n  }\n};\nexport var createTransformValue = value => {\n  return value.map(mapTransform).join(' ');\n};\n\n// [2, '30%', 10] => '2px 30% 10px'\nexport var createTransformOriginValue = value => {\n  return value.map(v => normalizeValueWithProperty(v)).join(' ');\n};\nvar PROPERTIES_STANDARD = {\n  borderBottomEndRadius: 'borderEndEndRadius',\n  borderBottomStartRadius: 'borderEndStartRadius',\n  borderTopEndRadius: 'borderStartEndRadius',\n  borderTopStartRadius: 'borderStartStartRadius',\n  borderEndColor: 'borderInlineEndColor',\n  borderEndStyle: 'borderInlineEndStyle',\n  borderEndWidth: 'borderInlineEndWidth',\n  borderStartColor: 'borderInlineStartColor',\n  borderStartStyle: 'borderInlineStartStyle',\n  borderStartWidth: 'borderInlineStartWidth',\n  end: 'insetInlineEnd',\n  marginEnd: 'marginInlineEnd',\n  marginHorizontal: 'marginInline',\n  marginStart: 'marginInlineStart',\n  marginVertical: 'marginBlock',\n  paddingEnd: 'paddingInlineEnd',\n  paddingHorizontal: 'paddingInline',\n  paddingStart: 'paddingInlineStart',\n  paddingVertical: 'paddingBlock',\n  start: 'insetInlineStart'\n};\nvar ignoredProps = {\n  elevation: true,\n  overlayColor: true,\n  resizeMode: true,\n  tintColor: true\n};\n\n/**\n * Preprocess styles\n */\nexport var preprocess = function preprocess(originalStyle, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  var style = originalStyle || emptyObject;\n  var nextStyle = {};\n\n  // Convert shadow styles\n  if (options.shadow === true, style.shadowColor != null || style.shadowOffset != null || style.shadowOpacity != null || style.shadowRadius != null) {\n    warnOnce('shadowStyles', \"\\\"shadow*\\\" style props are deprecated. Use \\\"boxShadow\\\".\");\n    var boxShadowValue = createBoxShadowValue(style);\n    if (boxShadowValue != null) {\n      nextStyle.boxShadow = boxShadowValue;\n    }\n  }\n\n  // Convert text shadow styles\n  if (options.textShadow === true, style.textShadowColor != null || style.textShadowOffset != null || style.textShadowRadius != null) {\n    warnOnce('textShadowStyles', \"\\\"textShadow*\\\" style props are deprecated. Use \\\"textShadow\\\".\");\n    var textShadowValue = createTextShadowValue(style);\n    if (textShadowValue != null && nextStyle.textShadow == null) {\n      var textShadow = style.textShadow;\n      var value = textShadow ? textShadow + \", \" + textShadowValue : textShadowValue;\n      nextStyle.textShadow = value;\n    }\n  }\n  for (var originalProp in style) {\n    if (\n    // Ignore some React Native styles\n    ignoredProps[originalProp] != null || originalProp === 'shadowColor' || originalProp === 'shadowOffset' || originalProp === 'shadowOpacity' || originalProp === 'shadowRadius' || originalProp === 'textShadowColor' || originalProp === 'textShadowOffset' || originalProp === 'textShadowRadius') {\n      continue;\n    }\n    var originalValue = style[originalProp];\n    var prop = PROPERTIES_STANDARD[originalProp] || originalProp;\n    var _value = originalValue;\n    if (!Object.prototype.hasOwnProperty.call(style, originalProp) || prop !== originalProp && style[prop] != null) {\n      continue;\n    }\n    if (prop === 'aspectRatio' && typeof _value === 'number') {\n      nextStyle[prop] = _value.toString();\n    } else if (prop === 'boxShadow') {\n      if (Array.isArray(_value)) {\n        _value = createBoxShadowArrayValue(_value);\n      }\n      var boxShadow = nextStyle.boxShadow;\n      nextStyle.boxShadow = boxShadow ? _value + \", \" + boxShadow : _value;\n    } else if (prop === 'fontVariant') {\n      if (Array.isArray(_value) && _value.length > 0) {\n        /*\n        warnOnce(\n          'fontVariant',\n          '\"fontVariant\" style array value is deprecated. Use space-separated values.'\n        );\n        */\n        _value = _value.join(' ');\n      }\n      nextStyle[prop] = _value;\n    } else if (prop === 'textAlignVertical') {\n      /*\n      warnOnce(\n        'textAlignVertical',\n        '\"textAlignVertical\" style is deprecated. Use \"verticalAlign\".'\n      );\n      */\n      if (style.verticalAlign == null) {\n        nextStyle.verticalAlign = _value === 'center' ? 'middle' : _value;\n      }\n    } else if (prop === 'transform') {\n      if (Array.isArray(_value)) {\n        _value = createTransformValue(_value);\n      }\n      nextStyle.transform = _value;\n    } else if (prop === 'transformOrigin') {\n      if (Array.isArray(_value)) {\n        _value = createTransformOriginValue(_value);\n      }\n      nextStyle.transformOrigin = _value;\n    } else {\n      nextStyle[prop] = _value;\n    }\n  }\n\n  // $FlowIgnore\n  return nextStyle;\n};\nexport default preprocess;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport { createContext } from 'react';\nvar TextAncestorContext = /*#__PURE__*/createContext(false);\nexport default TextAncestorContext;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"hrefAttrs\", \"numberOfLines\", \"onClick\", \"onLayout\", \"onPress\", \"onMoveShouldSetResponder\", \"onMoveShouldSetResponderCapture\", \"onResponderEnd\", \"onResponderGrant\", \"onResponderMove\", \"onResponderReject\", \"onResponderRelease\", \"onResponderStart\", \"onResponderTerminate\", \"onResponderTerminationRequest\", \"onScrollShouldSetResponder\", \"onScrollShouldSetResponderCapture\", \"onSelectionChangeShouldSetResponder\", \"onSelectionChangeShouldSetResponderCapture\", \"onStartShouldSetResponder\", \"onStartShouldSetResponderCapture\", \"selectable\"];\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport * as forwardedProps from '../../modules/forwardedProps';\nimport pick from '../../modules/pick';\nimport useElementLayout from '../../modules/useElementLayout';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePlatformMethods from '../../modules/usePlatformMethods';\nimport useResponderEvents from '../../modules/useResponderEvents';\nimport StyleSheet from '../StyleSheet';\nimport TextAncestorContext from './TextAncestorContext';\nimport { useLocaleContext, getLocaleDirection } from '../../modules/useLocale';\n//import { warnOnce } from '../../modules/warnOnce';\n\nvar forwardPropsList = Object.assign({}, forwardedProps.defaultProps, forwardedProps.accessibilityProps, forwardedProps.clickProps, forwardedProps.focusProps, forwardedProps.keyboardProps, forwardedProps.mouseProps, forwardedProps.touchProps, forwardedProps.styleProps, {\n  href: true,\n  lang: true,\n  pointerEvents: true\n});\nvar pickProps = props => pick(props, forwardPropsList);\nvar Text = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var hrefAttrs = props.hrefAttrs,\n    numberOfLines = props.numberOfLines,\n    onClick = props.onClick,\n    onLayout = props.onLayout,\n    onPress = props.onPress,\n    onMoveShouldSetResponder = props.onMoveShouldSetResponder,\n    onMoveShouldSetResponderCapture = props.onMoveShouldSetResponderCapture,\n    onResponderEnd = props.onResponderEnd,\n    onResponderGrant = props.onResponderGrant,\n    onResponderMove = props.onResponderMove,\n    onResponderReject = props.onResponderReject,\n    onResponderRelease = props.onResponderRelease,\n    onResponderStart = props.onResponderStart,\n    onResponderTerminate = props.onResponderTerminate,\n    onResponderTerminationRequest = props.onResponderTerminationRequest,\n    onScrollShouldSetResponder = props.onScrollShouldSetResponder,\n    onScrollShouldSetResponderCapture = props.onScrollShouldSetResponderCapture,\n    onSelectionChangeShouldSetResponder = props.onSelectionChangeShouldSetResponder,\n    onSelectionChangeShouldSetResponderCapture = props.onSelectionChangeShouldSetResponderCapture,\n    onStartShouldSetResponder = props.onStartShouldSetResponder,\n    onStartShouldSetResponderCapture = props.onStartShouldSetResponderCapture,\n    selectable = props.selectable,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n\n  /*\n  if (selectable != null) {\n    warnOnce(\n      'selectable',\n      'selectable prop is deprecated. Use styles.userSelect.'\n    );\n  }\n  */\n\n  var hasTextAncestor = React.useContext(TextAncestorContext);\n  var hostRef = React.useRef(null);\n  var _useLocaleContext = useLocaleContext(),\n    contextDirection = _useLocaleContext.direction;\n  useElementLayout(hostRef, onLayout);\n  useResponderEvents(hostRef, {\n    onMoveShouldSetResponder,\n    onMoveShouldSetResponderCapture,\n    onResponderEnd,\n    onResponderGrant,\n    onResponderMove,\n    onResponderReject,\n    onResponderRelease,\n    onResponderStart,\n    onResponderTerminate,\n    onResponderTerminationRequest,\n    onScrollShouldSetResponder,\n    onScrollShouldSetResponderCapture,\n    onSelectionChangeShouldSetResponder,\n    onSelectionChangeShouldSetResponderCapture,\n    onStartShouldSetResponder,\n    onStartShouldSetResponderCapture\n  });\n  var handleClick = React.useCallback(e => {\n    if (onClick != null) {\n      onClick(e);\n    } else if (onPress != null) {\n      e.stopPropagation();\n      onPress(e);\n    }\n  }, [onClick, onPress]);\n  var component = hasTextAncestor ? 'span' : 'div';\n  var langDirection = props.lang != null ? getLocaleDirection(props.lang) : null;\n  var componentDirection = props.dir || langDirection;\n  var writingDirection = componentDirection || contextDirection;\n  var supportedProps = pickProps(rest);\n  supportedProps.dir = componentDirection;\n  // 'auto' by default allows browsers to infer writing direction (root elements only)\n  if (!hasTextAncestor) {\n    supportedProps.dir = componentDirection != null ? componentDirection : 'auto';\n  }\n  if (onClick || onPress) {\n    supportedProps.onClick = handleClick;\n  }\n  supportedProps.style = [numberOfLines != null && numberOfLines > 1 && {\n    WebkitLineClamp: numberOfLines\n  }, hasTextAncestor === true ? styles.textHasAncestor$raw : styles.text$raw, numberOfLines === 1 && styles.textOneLine, numberOfLines != null && numberOfLines > 1 && styles.textMultiLine, props.style, selectable === true && styles.selectable, selectable === false && styles.notSelectable, onPress && styles.pressable];\n  if (props.href != null) {\n    component = 'a';\n    if (hrefAttrs != null) {\n      var download = hrefAttrs.download,\n        rel = hrefAttrs.rel,\n        target = hrefAttrs.target;\n      if (download != null) {\n        supportedProps.download = download;\n      }\n      if (rel != null) {\n        supportedProps.rel = rel;\n      }\n      if (typeof target === 'string') {\n        supportedProps.target = target.charAt(0) !== '_' ? '_' + target : target;\n      }\n    }\n  }\n  var platformMethodsRef = usePlatformMethods(supportedProps);\n  var setRef = useMergeRefs(hostRef, platformMethodsRef, forwardedRef);\n  supportedProps.ref = setRef;\n  var element = createElement(component, supportedProps, {\n    writingDirection\n  });\n  return hasTextAncestor ? element : /*#__PURE__*/React.createElement(TextAncestorContext.Provider, {\n    value: true\n  }, element);\n});\nText.displayName = 'Text';\nvar textStyle = {\n  backgroundColor: 'transparent',\n  border: '0 solid black',\n  boxSizing: 'border-box',\n  color: 'black',\n  display: 'inline',\n  font: '14px System',\n  listStyle: 'none',\n  margin: 0,\n  padding: 0,\n  position: 'relative',\n  textAlign: 'start',\n  textDecoration: 'none',\n  whiteSpace: 'pre-wrap',\n  wordWrap: 'break-word'\n};\nvar styles = StyleSheet.create({\n  text$raw: textStyle,\n  textHasAncestor$raw: _objectSpread(_objectSpread({}, textStyle), {}, {\n    color: 'inherit',\n    font: 'inherit',\n    textAlign: 'inherit',\n    whiteSpace: 'inherit'\n  }),\n  textOneLine: {\n    maxWidth: '100%',\n    overflow: 'hidden',\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap',\n    wordWrap: 'normal'\n  },\n  // See #13\n  textMultiLine: {\n    display: '-webkit-box',\n    maxWidth: '100%',\n    overflow: 'clip',\n    textOverflow: 'ellipsis',\n    WebkitBoxOrient: 'vertical'\n  },\n  notSelectable: {\n    userSelect: 'none'\n  },\n  selectable: {\n    userSelect: 'text'\n  },\n  pressable: {\n    cursor: 'pointer'\n  }\n});\nexport default Text;","/* eslint-disable */\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * From React 16.0.0\n */\n\nimport invariant from 'fbjs/lib/invariant';\nvar twoArgumentPooler = function twoArgumentPooler(a1, a2) {\n  var Klass = this;\n  if (Klass.instancePool.length) {\n    var instance = Klass.instancePool.pop();\n    Klass.call(instance, a1, a2);\n    return instance;\n  } else {\n    return new Klass(a1, a2);\n  }\n};\nvar standardReleaser = function standardReleaser(instance) {\n  var Klass = this;\n  instance.destructor();\n  if (Klass.instancePool.length < Klass.poolSize) {\n    Klass.instancePool.push(instance);\n  }\n};\nvar DEFAULT_POOL_SIZE = 10;\nvar DEFAULT_POOLER = twoArgumentPooler;\n\n/**\n * Augments `CopyConstructor` to be a poolable class, augmenting only the class\n * itself (statically) not adding any prototypical fields. Any CopyConstructor\n * you give this may have a `poolSize` property, and will look for a\n * prototypical `destructor` on instances.\n *\n * @param {Function} CopyConstructor Constructor that can be used to reset.\n * @param {Function} pooler Customizable pooler.\n */\nvar addPoolingTo = function addPoolingTo(CopyConstructor, pooler) {\n  // Casting as any so that flow ignores the actual implementation and trusts\n  // it to match the type we declared\n  var NewKlass = CopyConstructor;\n  NewKlass.instancePool = [];\n  NewKlass.getPooled = pooler || DEFAULT_POOLER;\n  if (!NewKlass.poolSize) {\n    NewKlass.poolSize = DEFAULT_POOL_SIZE;\n  }\n  NewKlass.release = standardReleaser;\n  return NewKlass;\n};\nvar PooledClass = {\n  addPoolingTo: addPoolingTo,\n  twoArgumentPooler: twoArgumentPooler\n};\nexport default PooledClass;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport PooledClass from '../../vendor/react-native/PooledClass';\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\n\n/**\n * PooledClass representing the bounding rectangle of a region.\n */\nfunction BoundingDimensions(width, height) {\n  this.width = width;\n  this.height = height;\n}\nBoundingDimensions.prototype.destructor = function () {\n  this.width = null;\n  this.height = null;\n};\nBoundingDimensions.getPooledFromElement = function (element) {\n  return BoundingDimensions.getPooled(element.offsetWidth, element.offsetHeight);\n};\nPooledClass.addPoolingTo(BoundingDimensions, twoArgumentPooler);\nexport default BoundingDimensions;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport PooledClass from '../../vendor/react-native/PooledClass';\nvar twoArgumentPooler = PooledClass.twoArgumentPooler;\nfunction Position(left, top) {\n  this.left = left;\n  this.top = top;\n}\nPosition.prototype.destructor = function () {\n  this.left = null;\n  this.top = null;\n};\nPooledClass.addPoolingTo(Position, twoArgumentPooler);\nexport default Position;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport AccessibilityUtil from '../../modules/AccessibilityUtil';\nimport BoundingDimensions from './BoundingDimensions';\nimport normalizeColor from '@react-native/normalize-colors';\nimport Position from './Position';\nimport React from 'react';\nimport UIManager from '../UIManager';\nimport View from '../View';\nimport { warnOnce } from '../../modules/warnOnce';\nvar extractSingleTouch = nativeEvent => {\n  var touches = nativeEvent.touches;\n  var changedTouches = nativeEvent.changedTouches;\n  var hasTouches = touches && touches.length > 0;\n  var hasChangedTouches = changedTouches && changedTouches.length > 0;\n  return !hasTouches && hasChangedTouches ? changedTouches[0] : hasTouches ? touches[0] : nativeEvent;\n};\n\n/**\n * `Touchable`: Taps done right.\n *\n * You hook your `ResponderEventPlugin` events into `Touchable`. `Touchable`\n * will measure time/geometry and tells you when to give feedback to the user.\n *\n * ====================== Touchable Tutorial ===============================\n * The `Touchable` mixin helps you handle the \"press\" interaction. It analyzes\n * the geometry of elements, and observes when another responder (scroll view\n * etc) has stolen the touch lock. It notifies your component when it should\n * give feedback to the user. (bouncing/highlighting/unhighlighting).\n *\n * - When a touch was activated (typically you highlight)\n * - When a touch was deactivated (typically you unhighlight)\n * - When a touch was \"pressed\" - a touch ended while still within the geometry\n *   of the element, and no other element (like scroller) has \"stolen\" touch\n *   lock (\"responder\") (Typically you bounce the element).\n *\n * A good tap interaction isn't as simple as you might think. There should be a\n * slight delay before showing a highlight when starting a touch. If a\n * subsequent touch move exceeds the boundary of the element, it should\n * unhighlight, but if that same touch is brought back within the boundary, it\n * should rehighlight again. A touch can move in and out of that boundary\n * several times, each time toggling highlighting, but a \"press\" is only\n * triggered if that touch ends while within the element's boundary and no\n * scroller (or anything else) has stolen the lock on touches.\n *\n * To create a new type of component that handles interaction using the\n * `Touchable` mixin, do the following:\n *\n * - Initialize the `Touchable` state.\n *\n *   getInitialState: function() {\n *     return merge(this.touchableGetInitialState(), yourComponentState);\n *   }\n *\n * - Add a method to get your touchable component's node.\n *   getTouchableNode: function() {\n *     return this.touchableRef.current\n *   }\n *\n * - Choose the rendered component who's touches should start the interactive\n *   sequence. On that rendered node, forward all `Touchable` responder\n *   handlers. You can choose any rendered node you like. Choose a node whose\n *   hit target you'd like to instigate the interaction sequence:\n *\n *   // In render function:\n *   return (\n *     <View\n *       ref={this.touchableRef}\n *       onStartShouldSetResponder={this.touchableHandleStartShouldSetResponder}\n *       onResponderTerminationRequest={this.touchableHandleResponderTerminationRequest}\n *       onResponderGrant={this.touchableHandleResponderGrant}\n *       onResponderMove={this.touchableHandleResponderMove}\n *       onResponderRelease={this.touchableHandleResponderRelease}\n *       onResponderTerminate={this.touchableHandleResponderTerminate}>\n *       <View>\n *         Even though the hit detection/interactions are triggered by the\n *         wrapping (typically larger) node, we usually end up implementing\n *         custom logic that highlights this inner one.\n *       </View>\n *     </View>\n *   );\n *\n * - You may set up your own handlers for each of these events, so long as you\n *   also invoke the `touchable*` handlers inside of your custom handler.\n *\n * - Implement the handlers on your component class in order to provide\n *   feedback to the user. See documentation for each of these class methods\n *   that you should implement.\n *\n *   touchableHandlePress: function() {\n *      this.performBounceAnimation();  // or whatever you want to do.\n *   },\n *   touchableHandleActivePressIn: function() {\n *     this.beginHighlighting(...);  // Whatever you like to convey activation\n *   },\n *   touchableHandleActivePressOut: function() {\n *     this.endHighlighting(...);  // Whatever you like to convey deactivation\n *   },\n *\n * - There are more advanced methods you can implement (see documentation below):\n *   touchableGetHighlightDelayMS: function() {\n *     return 20;\n *   }\n *   // In practice, *always* use a predeclared constant (conserve memory).\n *   touchableGetPressRectOffset: function() {\n *     return {top: 20, left: 20, right: 20, bottom: 100};\n *   }\n */\n\n/**\n * Touchable states.\n */\n\nvar States = {\n  NOT_RESPONDER: 'NOT_RESPONDER',\n  // Not the responder\n  RESPONDER_INACTIVE_PRESS_IN: 'RESPONDER_INACTIVE_PRESS_IN',\n  // Responder, inactive, in the `PressRect`\n  RESPONDER_INACTIVE_PRESS_OUT: 'RESPONDER_INACTIVE_PRESS_OUT',\n  // Responder, inactive, out of `PressRect`\n  RESPONDER_ACTIVE_PRESS_IN: 'RESPONDER_ACTIVE_PRESS_IN',\n  // Responder, active, in the `PressRect`\n  RESPONDER_ACTIVE_PRESS_OUT: 'RESPONDER_ACTIVE_PRESS_OUT',\n  // Responder, active, out of `PressRect`\n  RESPONDER_ACTIVE_LONG_PRESS_IN: 'RESPONDER_ACTIVE_LONG_PRESS_IN',\n  // Responder, active, in the `PressRect`, after long press threshold\n  RESPONDER_ACTIVE_LONG_PRESS_OUT: 'RESPONDER_ACTIVE_LONG_PRESS_OUT',\n  // Responder, active, out of `PressRect`, after long press threshold\n  ERROR: 'ERROR'\n};\n/*\n * Quick lookup map for states that are considered to be \"active\"\n */\n\nvar baseStatesConditions = {\n  NOT_RESPONDER: false,\n  RESPONDER_INACTIVE_PRESS_IN: false,\n  RESPONDER_INACTIVE_PRESS_OUT: false,\n  RESPONDER_ACTIVE_PRESS_IN: false,\n  RESPONDER_ACTIVE_PRESS_OUT: false,\n  RESPONDER_ACTIVE_LONG_PRESS_IN: false,\n  RESPONDER_ACTIVE_LONG_PRESS_OUT: false,\n  ERROR: false\n};\nvar IsActive = _objectSpread(_objectSpread({}, baseStatesConditions), {}, {\n  RESPONDER_ACTIVE_PRESS_OUT: true,\n  RESPONDER_ACTIVE_PRESS_IN: true\n});\n\n/**\n * Quick lookup for states that are considered to be \"pressing\" and are\n * therefore eligible to result in a \"selection\" if the press stops.\n */\nvar IsPressingIn = _objectSpread(_objectSpread({}, baseStatesConditions), {}, {\n  RESPONDER_INACTIVE_PRESS_IN: true,\n  RESPONDER_ACTIVE_PRESS_IN: true,\n  RESPONDER_ACTIVE_LONG_PRESS_IN: true\n});\nvar IsLongPressingIn = _objectSpread(_objectSpread({}, baseStatesConditions), {}, {\n  RESPONDER_ACTIVE_LONG_PRESS_IN: true\n});\n\n/**\n * Inputs to the state machine.\n */\nvar Signals = {\n  DELAY: 'DELAY',\n  RESPONDER_GRANT: 'RESPONDER_GRANT',\n  RESPONDER_RELEASE: 'RESPONDER_RELEASE',\n  RESPONDER_TERMINATED: 'RESPONDER_TERMINATED',\n  ENTER_PRESS_RECT: 'ENTER_PRESS_RECT',\n  LEAVE_PRESS_RECT: 'LEAVE_PRESS_RECT',\n  LONG_PRESS_DETECTED: 'LONG_PRESS_DETECTED'\n};\n/**\n * Mapping from States x Signals => States\n */\nvar Transitions = {\n  NOT_RESPONDER: {\n    DELAY: States.ERROR,\n    RESPONDER_GRANT: States.RESPONDER_INACTIVE_PRESS_IN,\n    RESPONDER_RELEASE: States.ERROR,\n    RESPONDER_TERMINATED: States.ERROR,\n    ENTER_PRESS_RECT: States.ERROR,\n    LEAVE_PRESS_RECT: States.ERROR,\n    LONG_PRESS_DETECTED: States.ERROR\n  },\n  RESPONDER_INACTIVE_PRESS_IN: {\n    DELAY: States.RESPONDER_ACTIVE_PRESS_IN,\n    RESPONDER_GRANT: States.ERROR,\n    RESPONDER_RELEASE: States.NOT_RESPONDER,\n    RESPONDER_TERMINATED: States.NOT_RESPONDER,\n    ENTER_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_IN,\n    LEAVE_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_OUT,\n    LONG_PRESS_DETECTED: States.ERROR\n  },\n  RESPONDER_INACTIVE_PRESS_OUT: {\n    DELAY: States.RESPONDER_ACTIVE_PRESS_OUT,\n    RESPONDER_GRANT: States.ERROR,\n    RESPONDER_RELEASE: States.NOT_RESPONDER,\n    RESPONDER_TERMINATED: States.NOT_RESPONDER,\n    ENTER_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_IN,\n    LEAVE_PRESS_RECT: States.RESPONDER_INACTIVE_PRESS_OUT,\n    LONG_PRESS_DETECTED: States.ERROR\n  },\n  RESPONDER_ACTIVE_PRESS_IN: {\n    DELAY: States.ERROR,\n    RESPONDER_GRANT: States.ERROR,\n    RESPONDER_RELEASE: States.NOT_RESPONDER,\n    RESPONDER_TERMINATED: States.NOT_RESPONDER,\n    ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_IN,\n    LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_OUT,\n    LONG_PRESS_DETECTED: States.RESPONDER_ACTIVE_LONG_PRESS_IN\n  },\n  RESPONDER_ACTIVE_PRESS_OUT: {\n    DELAY: States.ERROR,\n    RESPONDER_GRANT: States.ERROR,\n    RESPONDER_RELEASE: States.NOT_RESPONDER,\n    RESPONDER_TERMINATED: States.NOT_RESPONDER,\n    ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_IN,\n    LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_PRESS_OUT,\n    LONG_PRESS_DETECTED: States.ERROR\n  },\n  RESPONDER_ACTIVE_LONG_PRESS_IN: {\n    DELAY: States.ERROR,\n    RESPONDER_GRANT: States.ERROR,\n    RESPONDER_RELEASE: States.NOT_RESPONDER,\n    RESPONDER_TERMINATED: States.NOT_RESPONDER,\n    ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_IN,\n    LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_OUT,\n    LONG_PRESS_DETECTED: States.RESPONDER_ACTIVE_LONG_PRESS_IN\n  },\n  RESPONDER_ACTIVE_LONG_PRESS_OUT: {\n    DELAY: States.ERROR,\n    RESPONDER_GRANT: States.ERROR,\n    RESPONDER_RELEASE: States.NOT_RESPONDER,\n    RESPONDER_TERMINATED: States.NOT_RESPONDER,\n    ENTER_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_IN,\n    LEAVE_PRESS_RECT: States.RESPONDER_ACTIVE_LONG_PRESS_OUT,\n    LONG_PRESS_DETECTED: States.ERROR\n  },\n  error: {\n    DELAY: States.NOT_RESPONDER,\n    RESPONDER_GRANT: States.RESPONDER_INACTIVE_PRESS_IN,\n    RESPONDER_RELEASE: States.NOT_RESPONDER,\n    RESPONDER_TERMINATED: States.NOT_RESPONDER,\n    ENTER_PRESS_RECT: States.NOT_RESPONDER,\n    LEAVE_PRESS_RECT: States.NOT_RESPONDER,\n    LONG_PRESS_DETECTED: States.NOT_RESPONDER\n  }\n};\n\n// ==== Typical Constants for integrating into UI components ====\n// var HIT_EXPAND_PX = 20;\n// var HIT_VERT_OFFSET_PX = 10;\nvar HIGHLIGHT_DELAY_MS = 130;\nvar PRESS_EXPAND_PX = 20;\nvar LONG_PRESS_THRESHOLD = 500;\nvar LONG_PRESS_DELAY_MS = LONG_PRESS_THRESHOLD - HIGHLIGHT_DELAY_MS;\nvar LONG_PRESS_ALLOWED_MOVEMENT = 10;\n\n// Default amount \"active\" region protrudes beyond box\n\n/**\n * By convention, methods prefixed with underscores are meant to be @private,\n * and not @protected. Mixers shouldn't access them - not even to provide them\n * as callback handlers.\n *\n *\n * ========== Geometry =========\n * `Touchable` only assumes that there exists a `HitRect` node. The `PressRect`\n * is an abstract box that is extended beyond the `HitRect`.\n *\n *  +--------------------------+\n *  |                          | - \"Start\" events in `HitRect` cause `HitRect`\n *  |  +--------------------+  |   to become the responder.\n *  |  |  +--------------+  |  | - `HitRect` is typically expanded around\n *  |  |  |              |  |  |   the `VisualRect`, but shifted downward.\n *  |  |  |  VisualRect  |  |  | - After pressing down, after some delay,\n *  |  |  |              |  |  |   and before letting up, the Visual React\n *  |  |  +--------------+  |  |   will become \"active\". This makes it eligible\n *  |  |     HitRect        |  |   for being highlighted (so long as the\n *  |  +--------------------+  |   press remains in the `PressRect`).\n *  |        PressRect     o   |\n *  +----------------------|---+\n *           Out Region    |\n *                         +-----+ This gap between the `HitRect` and\n *                                 `PressRect` allows a touch to move far away\n *                                 from the original hit rect, and remain\n *                                 highlighted, and eligible for a \"Press\".\n *                                 Customize this via\n *                                 `touchableGetPressRectOffset()`.\n *\n *\n *\n * ======= State Machine =======\n *\n * +-------------+ <---+ RESPONDER_RELEASE\n * |NOT_RESPONDER|\n * +-------------+ <---+ RESPONDER_TERMINATED\n *     +\n *     | RESPONDER_GRANT (HitRect)\n *     v\n * +---------------------------+  DELAY   +-------------------------+  T + DELAY     +------------------------------+\n * |RESPONDER_INACTIVE_PRESS_IN|+-------->|RESPONDER_ACTIVE_PRESS_IN| +------------> |RESPONDER_ACTIVE_LONG_PRESS_IN|\n * +---------------------------+          +-------------------------+                +------------------------------+\n *     +            ^                         +           ^                                 +           ^\n *     |LEAVE_      |ENTER_                   |LEAVE_     |ENTER_                           |LEAVE_     |ENTER_\n *     |PRESS_RECT  |PRESS_RECT               |PRESS_RECT |PRESS_RECT                       |PRESS_RECT |PRESS_RECT\n *     |            |                         |           |                                 |           |\n *     v            +                         v           +                                 v           +\n * +----------------------------+  DELAY  +--------------------------+               +-------------------------------+\n * |RESPONDER_INACTIVE_PRESS_OUT|+------->|RESPONDER_ACTIVE_PRESS_OUT|               |RESPONDER_ACTIVE_LONG_PRESS_OUT|\n * +----------------------------+         +--------------------------+               +-------------------------------+\n *\n * T + DELAY => LONG_PRESS_DELAY_MS + DELAY\n *\n * Not drawn are the side effects of each transition. The most important side\n * effect is the `touchableHandlePress` abstract method invocation that occurs\n * when a responder is released while in either of the \"Press\" states.\n *\n * The other important side effects are the highlight abstract method\n * invocations (internal callbacks) to be implemented by the mixer.\n *\n *\n * @lends Touchable.prototype\n */\nvar TouchableMixin = {\n  // HACK (part 1): basic support for touchable interactions using a keyboard\n  componentDidMount: function componentDidMount() {\n    warnOnce('TouchableMixin', 'TouchableMixin is deprecated. Please use Pressable.');\n    var touchableNode = this.getTouchableNode && this.getTouchableNode();\n    if (touchableNode && touchableNode.addEventListener) {\n      this._touchableBlurListener = e => {\n        if (this._isTouchableKeyboardActive) {\n          if (this.state.touchable.touchState && this.state.touchable.touchState !== States.NOT_RESPONDER) {\n            this.touchableHandleResponderTerminate({\n              nativeEvent: e\n            });\n          }\n          this._isTouchableKeyboardActive = false;\n        }\n      };\n      touchableNode.addEventListener('blur', this._touchableBlurListener);\n    }\n  },\n  /**\n   * Clear all timeouts on unmount\n   */\n  componentWillUnmount: function componentWillUnmount() {\n    var touchableNode = this.getTouchableNode && this.getTouchableNode();\n    if (touchableNode && touchableNode.addEventListener) {\n      touchableNode.removeEventListener('blur', this._touchableBlurListener);\n    }\n    this.touchableDelayTimeout && clearTimeout(this.touchableDelayTimeout);\n    this.longPressDelayTimeout && clearTimeout(this.longPressDelayTimeout);\n    this.pressOutDelayTimeout && clearTimeout(this.pressOutDelayTimeout);\n    // Clear DOM nodes\n    this.pressInLocation = null;\n    this.state.touchable.responderID = null;\n  },\n  /**\n   * It's prefer that mixins determine state in this way, having the class\n   * explicitly mix the state in the one and only `getInitialState` method.\n   *\n   * @return {object} State object to be placed inside of\n   * `this.state.touchable`.\n   */\n  touchableGetInitialState: function touchableGetInitialState() {\n    return {\n      touchable: {\n        touchState: undefined,\n        responderID: null\n      }\n    };\n  },\n  // ==== Hooks to Gesture Responder system ====\n  /**\n   * Must return true if embedded in a native platform scroll view.\n   */\n  touchableHandleResponderTerminationRequest: function touchableHandleResponderTerminationRequest() {\n    return !this.props.rejectResponderTermination;\n  },\n  /**\n   * Must return true to start the process of `Touchable`.\n   */\n  touchableHandleStartShouldSetResponder: function touchableHandleStartShouldSetResponder() {\n    return !this.props.disabled;\n  },\n  /**\n   * Return true to cancel press on long press.\n   */\n  touchableLongPressCancelsPress: function touchableLongPressCancelsPress() {\n    return true;\n  },\n  /**\n   * Place as callback for a DOM element's `onResponderGrant` event.\n   * @param {SyntheticEvent} e Synthetic event from event system.\n   *\n   */\n  touchableHandleResponderGrant: function touchableHandleResponderGrant(e) {\n    var dispatchID = e.currentTarget;\n    // Since e is used in a callback invoked on another event loop\n    // (as in setTimeout etc), we need to call e.persist() on the\n    // event to make sure it doesn't get reused in the event object pool.\n    e.persist();\n    this.pressOutDelayTimeout && clearTimeout(this.pressOutDelayTimeout);\n    this.pressOutDelayTimeout = null;\n    this.state.touchable.touchState = States.NOT_RESPONDER;\n    this.state.touchable.responderID = dispatchID;\n    this._receiveSignal(Signals.RESPONDER_GRANT, e);\n    var delayMS = this.touchableGetHighlightDelayMS !== undefined ? Math.max(this.touchableGetHighlightDelayMS(), 0) : HIGHLIGHT_DELAY_MS;\n    delayMS = isNaN(delayMS) ? HIGHLIGHT_DELAY_MS : delayMS;\n    if (delayMS !== 0) {\n      this.touchableDelayTimeout = setTimeout(this._handleDelay.bind(this, e), delayMS);\n    } else {\n      this._handleDelay(e);\n    }\n    var longDelayMS = this.touchableGetLongPressDelayMS !== undefined ? Math.max(this.touchableGetLongPressDelayMS(), 10) : LONG_PRESS_DELAY_MS;\n    longDelayMS = isNaN(longDelayMS) ? LONG_PRESS_DELAY_MS : longDelayMS;\n    this.longPressDelayTimeout = setTimeout(this._handleLongDelay.bind(this, e), longDelayMS + delayMS);\n  },\n  /**\n   * Place as callback for a DOM element's `onResponderRelease` event.\n   */\n  touchableHandleResponderRelease: function touchableHandleResponderRelease(e) {\n    this.pressInLocation = null;\n    this._receiveSignal(Signals.RESPONDER_RELEASE, e);\n  },\n  /**\n   * Place as callback for a DOM element's `onResponderTerminate` event.\n   */\n  touchableHandleResponderTerminate: function touchableHandleResponderTerminate(e) {\n    this.pressInLocation = null;\n    this._receiveSignal(Signals.RESPONDER_TERMINATED, e);\n  },\n  /**\n   * Place as callback for a DOM element's `onResponderMove` event.\n   */\n  touchableHandleResponderMove: function touchableHandleResponderMove(e) {\n    // Measurement may not have returned yet.\n    if (!this.state.touchable.positionOnActivate) {\n      return;\n    }\n    var positionOnActivate = this.state.touchable.positionOnActivate;\n    var dimensionsOnActivate = this.state.touchable.dimensionsOnActivate;\n    var pressRectOffset = this.touchableGetPressRectOffset ? this.touchableGetPressRectOffset() : {\n      left: PRESS_EXPAND_PX,\n      right: PRESS_EXPAND_PX,\n      top: PRESS_EXPAND_PX,\n      bottom: PRESS_EXPAND_PX\n    };\n    var pressExpandLeft = pressRectOffset.left;\n    var pressExpandTop = pressRectOffset.top;\n    var pressExpandRight = pressRectOffset.right;\n    var pressExpandBottom = pressRectOffset.bottom;\n    var hitSlop = this.touchableGetHitSlop ? this.touchableGetHitSlop() : null;\n    if (hitSlop) {\n      pressExpandLeft += hitSlop.left || 0;\n      pressExpandTop += hitSlop.top || 0;\n      pressExpandRight += hitSlop.right || 0;\n      pressExpandBottom += hitSlop.bottom || 0;\n    }\n    var touch = extractSingleTouch(e.nativeEvent);\n    var pageX = touch && touch.pageX;\n    var pageY = touch && touch.pageY;\n    if (this.pressInLocation) {\n      var movedDistance = this._getDistanceBetweenPoints(pageX, pageY, this.pressInLocation.pageX, this.pressInLocation.pageY);\n      if (movedDistance > LONG_PRESS_ALLOWED_MOVEMENT) {\n        this._cancelLongPressDelayTimeout();\n      }\n    }\n    var isTouchWithinActive = pageX > positionOnActivate.left - pressExpandLeft && pageY > positionOnActivate.top - pressExpandTop && pageX < positionOnActivate.left + dimensionsOnActivate.width + pressExpandRight && pageY < positionOnActivate.top + dimensionsOnActivate.height + pressExpandBottom;\n    if (isTouchWithinActive) {\n      var prevState = this.state.touchable.touchState;\n      this._receiveSignal(Signals.ENTER_PRESS_RECT, e);\n      var curState = this.state.touchable.touchState;\n      if (curState === States.RESPONDER_INACTIVE_PRESS_IN && prevState !== States.RESPONDER_INACTIVE_PRESS_IN) {\n        // fix for t7967420\n        this._cancelLongPressDelayTimeout();\n      }\n    } else {\n      this._cancelLongPressDelayTimeout();\n      this._receiveSignal(Signals.LEAVE_PRESS_RECT, e);\n    }\n  },\n  /**\n   * Invoked when the item receives focus. Mixers might override this to\n   * visually distinguish the `VisualRect` so that the user knows that it\n   * currently has the focus. Most platforms only support a single element being\n   * focused at a time, in which case there may have been a previously focused\n   * element that was blurred just prior to this. This can be overridden when\n   * using `Touchable.Mixin.withoutDefaultFocusAndBlur`.\n   */\n  touchableHandleFocus: function touchableHandleFocus(e) {\n    this.props.onFocus && this.props.onFocus(e);\n  },\n  /**\n   * Invoked when the item loses focus. Mixers might override this to\n   * visually distinguish the `VisualRect` so that the user knows that it\n   * no longer has focus. Most platforms only support a single element being\n   * focused at a time, in which case the focus may have moved to another.\n   * This can be overridden when using\n   * `Touchable.Mixin.withoutDefaultFocusAndBlur`.\n   */\n  touchableHandleBlur: function touchableHandleBlur(e) {\n    this.props.onBlur && this.props.onBlur(e);\n  },\n  // ==== Abstract Application Callbacks ====\n\n  /**\n   * Invoked when the item should be highlighted. Mixers should implement this\n   * to visually distinguish the `VisualRect` so that the user knows that\n   * releasing a touch will result in a \"selection\" (analog to click).\n   *\n   * @abstract\n   * touchableHandleActivePressIn: function,\n   */\n\n  /**\n   * Invoked when the item is \"active\" (in that it is still eligible to become\n   * a \"select\") but the touch has left the `PressRect`. Usually the mixer will\n   * want to unhighlight the `VisualRect`. If the user (while pressing) moves\n   * back into the `PressRect` `touchableHandleActivePressIn` will be invoked\n   * again and the mixer should probably highlight the `VisualRect` again. This\n   * event will not fire on an `touchEnd/mouseUp` event, only move events while\n   * the user is depressing the mouse/touch.\n   *\n   * @abstract\n   * touchableHandleActivePressOut: function\n   */\n\n  /**\n   * Invoked when the item is \"selected\" - meaning the interaction ended by\n   * letting up while the item was either in the state\n   * `RESPONDER_ACTIVE_PRESS_IN` or `RESPONDER_INACTIVE_PRESS_IN`.\n   *\n   * @abstract\n   * touchableHandlePress: function\n   */\n\n  /**\n   * Invoked when the item is long pressed - meaning the interaction ended by\n   * letting up while the item was in `RESPONDER_ACTIVE_LONG_PRESS_IN`. If\n   * `touchableHandleLongPress` is *not* provided, `touchableHandlePress` will\n   * be called as it normally is. If `touchableHandleLongPress` is provided, by\n   * default any `touchableHandlePress` callback will not be invoked. To\n   * override this default behavior, override `touchableLongPressCancelsPress`\n   * to return false. As a result, `touchableHandlePress` will be called when\n   * lifting up, even if `touchableHandleLongPress` has also been called.\n   *\n   * @abstract\n   * touchableHandleLongPress: function\n   */\n\n  /**\n   * Returns the number of millis to wait before triggering a highlight.\n   *\n   * @abstract\n   * touchableGetHighlightDelayMS: function\n   */\n\n  /**\n   * Returns the amount to extend the `HitRect` into the `PressRect`. Positive\n   * numbers mean the size expands outwards.\n   *\n   * @abstract\n   * touchableGetPressRectOffset: function\n   */\n\n  // ==== Internal Logic ====\n\n  /**\n   * Measures the `HitRect` node on activation. The Bounding rectangle is with\n   * respect to viewport - not page, so adding the `pageXOffset/pageYOffset`\n   * should result in points that are in the same coordinate system as an\n   * event's `globalX/globalY` data values.\n   *\n   * - Consider caching this for the lifetime of the component, or possibly\n   *   being able to share this cache between any `ScrollMap` view.\n   *\n   * @sideeffects\n   * @private\n   */\n  _remeasureMetricsOnActivation: function _remeasureMetricsOnActivation() {\n    var tag = this.state.touchable.responderID;\n    if (tag == null) {\n      return;\n    }\n    UIManager.measure(tag, this._handleQueryLayout);\n  },\n  _handleQueryLayout: function _handleQueryLayout(l, t, w, h, globalX, globalY) {\n    //don't do anything UIManager failed to measure node\n    if (!l && !t && !w && !h && !globalX && !globalY) {\n      return;\n    }\n    this.state.touchable.positionOnActivate && Position.release(this.state.touchable.positionOnActivate);\n    this.state.touchable.dimensionsOnActivate &&\n    // $FlowFixMe\n    BoundingDimensions.release(this.state.touchable.dimensionsOnActivate);\n    this.state.touchable.positionOnActivate = Position.getPooled(globalX, globalY);\n    // $FlowFixMe\n    this.state.touchable.dimensionsOnActivate = BoundingDimensions.getPooled(w, h);\n  },\n  _handleDelay: function _handleDelay(e) {\n    this.touchableDelayTimeout = null;\n    this._receiveSignal(Signals.DELAY, e);\n  },\n  _handleLongDelay: function _handleLongDelay(e) {\n    this.longPressDelayTimeout = null;\n    var curState = this.state.touchable.touchState;\n    if (curState !== States.RESPONDER_ACTIVE_PRESS_IN && curState !== States.RESPONDER_ACTIVE_LONG_PRESS_IN) {\n      console.error('Attempted to transition from state `' + curState + '` to `' + States.RESPONDER_ACTIVE_LONG_PRESS_IN + '`, which is not supported. This is ' + 'most likely due to `Touchable.longPressDelayTimeout` not being cancelled.');\n    } else {\n      this._receiveSignal(Signals.LONG_PRESS_DETECTED, e);\n    }\n  },\n  /**\n   * Receives a state machine signal, performs side effects of the transition\n   * and stores the new state. Validates the transition as well.\n   *\n   * @param {Signals} signal State machine signal.\n   * @throws Error if invalid state transition or unrecognized signal.\n   * @sideeffects\n   */\n  _receiveSignal: function _receiveSignal(signal, e) {\n    var responderID = this.state.touchable.responderID;\n    var curState = this.state.touchable.touchState;\n    var nextState = Transitions[curState] && Transitions[curState][signal];\n    if (!responderID && signal === Signals.RESPONDER_RELEASE) {\n      return;\n    }\n    if (!nextState) {\n      throw new Error('Unrecognized signal `' + signal + '` or state `' + curState + '` for Touchable responder `' + responderID + '`');\n    }\n    if (nextState === States.ERROR) {\n      throw new Error('Touchable cannot transition from `' + curState + '` to `' + signal + '` for responder `' + responderID + '`');\n    }\n    if (curState !== nextState) {\n      this._performSideEffectsForTransition(curState, nextState, signal, e);\n      this.state.touchable.touchState = nextState;\n    }\n  },\n  _cancelLongPressDelayTimeout: function _cancelLongPressDelayTimeout() {\n    this.longPressDelayTimeout && clearTimeout(this.longPressDelayTimeout);\n    this.longPressDelayTimeout = null;\n  },\n  _isHighlight: function _isHighlight(state) {\n    return state === States.RESPONDER_ACTIVE_PRESS_IN || state === States.RESPONDER_ACTIVE_LONG_PRESS_IN;\n  },\n  _savePressInLocation: function _savePressInLocation(e) {\n    var touch = extractSingleTouch(e.nativeEvent);\n    var pageX = touch && touch.pageX;\n    var pageY = touch && touch.pageY;\n    var locationX = touch && touch.locationX;\n    var locationY = touch && touch.locationY;\n    this.pressInLocation = {\n      pageX,\n      pageY,\n      locationX,\n      locationY\n    };\n  },\n  _getDistanceBetweenPoints: function _getDistanceBetweenPoints(aX, aY, bX, bY) {\n    var deltaX = aX - bX;\n    var deltaY = aY - bY;\n    return Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n  },\n  /**\n   * Will perform a transition between touchable states, and identify any\n   * highlighting or unhighlighting that must be performed for this particular\n   * transition.\n   *\n   * @param {States} curState Current Touchable state.\n   * @param {States} nextState Next Touchable state.\n   * @param {Signal} signal Signal that triggered the transition.\n   * @param {Event} e Native event.\n   * @sideeffects\n   */\n  _performSideEffectsForTransition: function _performSideEffectsForTransition(curState, nextState, signal, e) {\n    var curIsHighlight = this._isHighlight(curState);\n    var newIsHighlight = this._isHighlight(nextState);\n    var isFinalSignal = signal === Signals.RESPONDER_TERMINATED || signal === Signals.RESPONDER_RELEASE;\n    if (isFinalSignal) {\n      this._cancelLongPressDelayTimeout();\n    }\n    var isInitialTransition = curState === States.NOT_RESPONDER && nextState === States.RESPONDER_INACTIVE_PRESS_IN;\n    var isActiveTransition = !IsActive[curState] && IsActive[nextState];\n    if (isInitialTransition || isActiveTransition) {\n      this._remeasureMetricsOnActivation();\n    }\n    if (IsPressingIn[curState] && signal === Signals.LONG_PRESS_DETECTED) {\n      this.touchableHandleLongPress && this.touchableHandleLongPress(e);\n    }\n    if (newIsHighlight && !curIsHighlight) {\n      this._startHighlight(e);\n    } else if (!newIsHighlight && curIsHighlight) {\n      this._endHighlight(e);\n    }\n    if (IsPressingIn[curState] && signal === Signals.RESPONDER_RELEASE) {\n      var hasLongPressHandler = !!this.props.onLongPress;\n      var pressIsLongButStillCallOnPress = IsLongPressingIn[curState] && (\n      // We *are* long pressing.. // But either has no long handler\n      !hasLongPressHandler || !this.touchableLongPressCancelsPress()); // or we're told to ignore it.\n\n      var shouldInvokePress = !IsLongPressingIn[curState] || pressIsLongButStillCallOnPress;\n      if (shouldInvokePress && this.touchableHandlePress) {\n        if (!newIsHighlight && !curIsHighlight) {\n          // we never highlighted because of delay, but we should highlight now\n          this._startHighlight(e);\n          this._endHighlight(e);\n        }\n        this.touchableHandlePress(e);\n      }\n    }\n    this.touchableDelayTimeout && clearTimeout(this.touchableDelayTimeout);\n    this.touchableDelayTimeout = null;\n  },\n  _playTouchSound: function _playTouchSound() {\n    UIManager.playTouchSound();\n  },\n  _startHighlight: function _startHighlight(e) {\n    this._savePressInLocation(e);\n    this.touchableHandleActivePressIn && this.touchableHandleActivePressIn(e);\n  },\n  _endHighlight: function _endHighlight(e) {\n    if (this.touchableHandleActivePressOut) {\n      if (this.touchableGetPressOutDelayMS && this.touchableGetPressOutDelayMS()) {\n        this.pressOutDelayTimeout = setTimeout(() => {\n          this.touchableHandleActivePressOut(e);\n        }, this.touchableGetPressOutDelayMS());\n      } else {\n        this.touchableHandleActivePressOut(e);\n      }\n    }\n  },\n  // HACK (part 2): basic support for touchable interactions using a keyboard (including\n  // delays and longPress)\n  touchableHandleKeyEvent: function touchableHandleKeyEvent(e) {\n    var type = e.type,\n      key = e.key;\n    if (key === 'Enter' || key === ' ') {\n      if (type === 'keydown') {\n        if (!this._isTouchableKeyboardActive) {\n          if (!this.state.touchable.touchState || this.state.touchable.touchState === States.NOT_RESPONDER) {\n            this.touchableHandleResponderGrant(e);\n            this._isTouchableKeyboardActive = true;\n          }\n        }\n      } else if (type === 'keyup') {\n        if (this._isTouchableKeyboardActive) {\n          if (this.state.touchable.touchState && this.state.touchable.touchState !== States.NOT_RESPONDER) {\n            this.touchableHandleResponderRelease(e);\n            this._isTouchableKeyboardActive = false;\n          }\n        }\n      }\n      e.stopPropagation();\n      // prevent the default behaviour unless the Touchable functions as a link\n      // and Enter is pressed\n      if (!(key === 'Enter' && AccessibilityUtil.propsToAriaRole(this.props) === 'link')) {\n        e.preventDefault();\n      }\n    }\n  },\n  withoutDefaultFocusAndBlur: {}\n};\n\n/**\n * Provide an optional version of the mixin where `touchableHandleFocus` and\n * `touchableHandleBlur` can be overridden. This allows appropriate defaults to\n * be set on TV platforms, without breaking existing implementations of\n * `Touchable`.\n */\nvar touchableHandleFocus = TouchableMixin.touchableHandleFocus,\n  touchableHandleBlur = TouchableMixin.touchableHandleBlur,\n  TouchableMixinWithoutDefaultFocusAndBlur = _objectWithoutPropertiesLoose(TouchableMixin, [\"touchableHandleFocus\", \"touchableHandleBlur\"]);\nTouchableMixin.withoutDefaultFocusAndBlur = TouchableMixinWithoutDefaultFocusAndBlur;\nvar Touchable = {\n  Mixin: TouchableMixin,\n  TOUCH_TARGET_DEBUG: false,\n  // Highlights all touchable targets. Toggle with Inspector.\n  /**\n   * Renders a debugging overlay to visualize touch target with hitSlop (might not work on Android).\n   */\n  renderDebugView: _ref => {\n    var color = _ref.color,\n      hitSlop = _ref.hitSlop;\n    if (!Touchable.TOUCH_TARGET_DEBUG) {\n      return null;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      throw Error('Touchable.TOUCH_TARGET_DEBUG should not be enabled in prod!');\n    }\n    var debugHitSlopStyle = {};\n    hitSlop = hitSlop || {\n      top: 0,\n      bottom: 0,\n      left: 0,\n      right: 0\n    };\n    for (var key in hitSlop) {\n      debugHitSlopStyle[key] = -hitSlop[key];\n    }\n    var normalizedColor = normalizeColor(color);\n    if (typeof normalizedColor !== 'number') {\n      return null;\n    }\n    var hexColor = '#' + ('00000000' + normalizedColor.toString(16)).substr(-8);\n    return /*#__PURE__*/React.createElement(View, {\n      pointerEvents: \"none\",\n      style: _objectSpread({\n        position: 'absolute',\n        borderColor: hexColor.slice(0, -2) + '55',\n        // More opaque\n        borderWidth: 1,\n        borderStyle: 'dashed',\n        backgroundColor: hexColor.slice(0, -2) + '0F'\n      }, debugHitSlopStyle)\n    });\n  }\n};\nexport default Touchable;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport UnimplementedView from '../../modules/UnimplementedView';\nexport default UnimplementedView;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar unitlessNumbers = {\n  animationIterationCount: true,\n  aspectRatio: true,\n  borderImageOutset: true,\n  borderImageSlice: true,\n  borderImageWidth: true,\n  boxFlex: true,\n  boxFlexGroup: true,\n  boxOrdinalGroup: true,\n  columnCount: true,\n  flex: true,\n  flexGrow: true,\n  flexOrder: true,\n  flexPositive: true,\n  flexShrink: true,\n  flexNegative: true,\n  fontWeight: true,\n  gridRow: true,\n  gridRowEnd: true,\n  gridRowGap: true,\n  gridRowStart: true,\n  gridColumn: true,\n  gridColumnEnd: true,\n  gridColumnGap: true,\n  gridColumnStart: true,\n  lineClamp: true,\n  opacity: true,\n  order: true,\n  orphans: true,\n  tabSize: true,\n  widows: true,\n  zIndex: true,\n  zoom: true,\n  // SVG-related\n  fillOpacity: true,\n  floodOpacity: true,\n  stopOpacity: true,\n  strokeDasharray: true,\n  strokeDashoffset: true,\n  strokeMiterlimit: true,\n  strokeOpacity: true,\n  strokeWidth: true,\n  // transform types\n  scale: true,\n  scaleX: true,\n  scaleY: true,\n  scaleZ: true,\n  // RN properties\n  shadowOpacity: true\n};\n\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\nvar prefixes = ['ms', 'Moz', 'O', 'Webkit'];\nvar prefixKey = (prefix, key) => {\n  return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n};\nObject.keys(unitlessNumbers).forEach(prop => {\n  prefixes.forEach(prefix => {\n    unitlessNumbers[prefixKey(prefix, prop)] = unitlessNumbers[prop];\n  });\n});\nexport default unitlessNumbers;","/* eslint-disable */\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * From React 16.0.0\n * \n */\n\nimport isUnitlessNumber from '../unitlessNumbers';\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @return {string} Normalized style value with dimensions applied.\n */\nfunction dangerousStyleValue(name, value, isCustomProperty) {\n  // Note that we've removed escapeTextForBrowser() calls here since the\n  // whole string will be escaped when the attribute is injected into\n  // the markup. If you provide unsafe user data here they can inject\n  // arbitrary CSS which may be problematic (I couldn't repro this):\n  // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n  // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n  // This is not an XSS hole but instead a potential CSS injection issue\n  // which has lead to a greater discussion about how we're going to\n  // trust URLs moving forward. See #2115901\n\n  var isEmpty = value == null || typeof value === 'boolean' || value === '';\n  if (isEmpty) {\n    return '';\n  }\n  if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) {\n    return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers\n  }\n  return ('' + value).trim();\n}\nexport default dangerousStyleValue;","/* eslint-disable */\n\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * From React 16.3.0\n * \n */\n\nimport dangerousStyleValue from './dangerousStyleValue';\n\n/**\n * Sets the value for multiple styles on a node.  If a value is specified as\n * '' (empty string), the corresponding style property will be unset.\n *\n * @param {DOMElement} node\n * @param {object} styles\n */\nfunction setValueForStyles(node, styles) {\n  var style = node.style;\n  for (var styleName in styles) {\n    if (!styles.hasOwnProperty(styleName)) {\n      continue;\n    }\n    var isCustomProperty = styleName.indexOf('--') === 0;\n    var styleValue = dangerousStyleValue(styleName, styles[styleName], isCustomProperty);\n    if (styleName === 'float') {\n      styleName = 'cssFloat';\n    }\n    if (isCustomProperty) {\n      style.setProperty(styleName, styleValue);\n    } else {\n      style[styleName] = styleValue;\n    }\n  }\n}\nexport default setValueForStyles;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport getBoundingClientRect from '../../modules/getBoundingClientRect';\nimport setValueForStyles from '../../modules/setValueForStyles';\nvar getRect = node => {\n  var height = node.offsetHeight;\n  var width = node.offsetWidth;\n  var left = node.offsetLeft;\n  var top = node.offsetTop;\n  node = node.offsetParent;\n  while (node && node.nodeType === 1 /* Node.ELEMENT_NODE */) {\n    left += node.offsetLeft + node.clientLeft - node.scrollLeft;\n    top += node.offsetTop + node.clientTop - node.scrollTop;\n    node = node.offsetParent;\n  }\n  top -= window.scrollY;\n  left -= window.scrollX;\n  return {\n    width,\n    height,\n    top,\n    left\n  };\n};\nvar measureLayout = (node, relativeToNativeNode, callback) => {\n  var relativeNode = relativeToNativeNode || node && node.parentNode;\n  if (node && relativeNode) {\n    setTimeout(() => {\n      if (node.isConnected && relativeNode.isConnected) {\n        var relativeRect = getRect(relativeNode);\n        var _getRect = getRect(node),\n          height = _getRect.height,\n          left = _getRect.left,\n          top = _getRect.top,\n          width = _getRect.width;\n        var x = left - relativeRect.left;\n        var y = top - relativeRect.top;\n        callback(x, y, width, height, left, top);\n      }\n    }, 0);\n  }\n};\nvar elementsToIgnore = {\n  A: true,\n  BODY: true,\n  INPUT: true,\n  SELECT: true,\n  TEXTAREA: true\n};\nvar UIManager = {\n  blur(node) {\n    try {\n      node.blur();\n    } catch (err) {}\n  },\n  focus(node) {\n    try {\n      var name = node.nodeName;\n      // A tabIndex of -1 allows element to be programmatically focused but\n      // prevents keyboard focus. We don't want to set the tabindex value on\n      // elements that should not prevent keyboard focus.\n      if (node.getAttribute('tabIndex') == null && node.isContentEditable !== true && elementsToIgnore[name] == null) {\n        node.setAttribute('tabIndex', '-1');\n      }\n      node.focus();\n    } catch (err) {}\n  },\n  measure(node, callback) {\n    measureLayout(node, null, callback);\n  },\n  measureInWindow(node, callback) {\n    if (node) {\n      setTimeout(() => {\n        var _getBoundingClientRec = getBoundingClientRect(node),\n          height = _getBoundingClientRec.height,\n          left = _getBoundingClientRec.left,\n          top = _getBoundingClientRec.top,\n          width = _getBoundingClientRec.width;\n        callback(left, top, width, height);\n      }, 0);\n    }\n  },\n  measureLayout(node, relativeToNativeNode, onFail, onSuccess) {\n    measureLayout(node, relativeToNativeNode, onSuccess);\n  },\n  updateView(node, props) {\n    for (var prop in props) {\n      if (!Object.prototype.hasOwnProperty.call(props, prop)) {\n        continue;\n      }\n      var value = props[prop];\n      switch (prop) {\n        case 'style':\n          {\n            setValueForStyles(node, value);\n            break;\n          }\n        case 'class':\n        case 'className':\n          {\n            node.setAttribute('class', value);\n            break;\n          }\n        case 'text':\n        case 'value':\n          // native platforms use `text` prop to replace text input value\n          node.value = value;\n          break;\n        default:\n          node.setAttribute(prop, value);\n      }\n    }\n  },\n  configureNextLayoutAnimation(config, onAnimationDidEnd) {\n    onAnimationDidEnd();\n  },\n  // mocks\n  setLayoutAnimationEnabledExperimental() {}\n};\nexport default UIManager;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"hrefAttrs\", \"onLayout\", \"onMoveShouldSetResponder\", \"onMoveShouldSetResponderCapture\", \"onResponderEnd\", \"onResponderGrant\", \"onResponderMove\", \"onResponderReject\", \"onResponderRelease\", \"onResponderStart\", \"onResponderTerminate\", \"onResponderTerminationRequest\", \"onScrollShouldSetResponder\", \"onScrollShouldSetResponderCapture\", \"onSelectionChangeShouldSetResponder\", \"onSelectionChangeShouldSetResponderCapture\", \"onStartShouldSetResponder\", \"onStartShouldSetResponderCapture\"];\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport * as forwardedProps from '../../modules/forwardedProps';\nimport pick from '../../modules/pick';\nimport useElementLayout from '../../modules/useElementLayout';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePlatformMethods from '../../modules/usePlatformMethods';\nimport useResponderEvents from '../../modules/useResponderEvents';\nimport StyleSheet from '../StyleSheet';\nimport TextAncestorContext from '../Text/TextAncestorContext';\nimport { useLocaleContext, getLocaleDirection } from '../../modules/useLocale';\nvar forwardPropsList = Object.assign({}, forwardedProps.defaultProps, forwardedProps.accessibilityProps, forwardedProps.clickProps, forwardedProps.focusProps, forwardedProps.keyboardProps, forwardedProps.mouseProps, forwardedProps.touchProps, forwardedProps.styleProps, {\n  href: true,\n  lang: true,\n  onScroll: true,\n  onWheel: true,\n  pointerEvents: true\n});\nvar pickProps = props => pick(props, forwardPropsList);\nvar View = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var hrefAttrs = props.hrefAttrs,\n    onLayout = props.onLayout,\n    onMoveShouldSetResponder = props.onMoveShouldSetResponder,\n    onMoveShouldSetResponderCapture = props.onMoveShouldSetResponderCapture,\n    onResponderEnd = props.onResponderEnd,\n    onResponderGrant = props.onResponderGrant,\n    onResponderMove = props.onResponderMove,\n    onResponderReject = props.onResponderReject,\n    onResponderRelease = props.onResponderRelease,\n    onResponderStart = props.onResponderStart,\n    onResponderTerminate = props.onResponderTerminate,\n    onResponderTerminationRequest = props.onResponderTerminationRequest,\n    onScrollShouldSetResponder = props.onScrollShouldSetResponder,\n    onScrollShouldSetResponderCapture = props.onScrollShouldSetResponderCapture,\n    onSelectionChangeShouldSetResponder = props.onSelectionChangeShouldSetResponder,\n    onSelectionChangeShouldSetResponderCapture = props.onSelectionChangeShouldSetResponderCapture,\n    onStartShouldSetResponder = props.onStartShouldSetResponder,\n    onStartShouldSetResponderCapture = props.onStartShouldSetResponderCapture,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  if (process.env.NODE_ENV !== 'production') {\n    React.Children.toArray(props.children).forEach(item => {\n      if (typeof item === 'string') {\n        console.error(\"Unexpected text node: \" + item + \". A text node cannot be a child of a <View>.\");\n      }\n    });\n  }\n  var hasTextAncestor = React.useContext(TextAncestorContext);\n  var hostRef = React.useRef(null);\n  var _useLocaleContext = useLocaleContext(),\n    contextDirection = _useLocaleContext.direction;\n  useElementLayout(hostRef, onLayout);\n  useResponderEvents(hostRef, {\n    onMoveShouldSetResponder,\n    onMoveShouldSetResponderCapture,\n    onResponderEnd,\n    onResponderGrant,\n    onResponderMove,\n    onResponderReject,\n    onResponderRelease,\n    onResponderStart,\n    onResponderTerminate,\n    onResponderTerminationRequest,\n    onScrollShouldSetResponder,\n    onScrollShouldSetResponderCapture,\n    onSelectionChangeShouldSetResponder,\n    onSelectionChangeShouldSetResponderCapture,\n    onStartShouldSetResponder,\n    onStartShouldSetResponderCapture\n  });\n  var component = 'div';\n  var langDirection = props.lang != null ? getLocaleDirection(props.lang) : null;\n  var componentDirection = props.dir || langDirection;\n  var writingDirection = componentDirection || contextDirection;\n  var supportedProps = pickProps(rest);\n  supportedProps.dir = componentDirection;\n  supportedProps.style = [styles.view$raw, hasTextAncestor && styles.inline, props.style];\n  if (props.href != null) {\n    component = 'a';\n    if (hrefAttrs != null) {\n      var download = hrefAttrs.download,\n        rel = hrefAttrs.rel,\n        target = hrefAttrs.target;\n      if (download != null) {\n        supportedProps.download = download;\n      }\n      if (rel != null) {\n        supportedProps.rel = rel;\n      }\n      if (typeof target === 'string') {\n        supportedProps.target = target.charAt(0) !== '_' ? '_' + target : target;\n      }\n    }\n  }\n  var platformMethodsRef = usePlatformMethods(supportedProps);\n  var setRef = useMergeRefs(hostRef, platformMethodsRef, forwardedRef);\n  supportedProps.ref = setRef;\n  return createElement(component, supportedProps, {\n    writingDirection\n  });\n});\nView.displayName = 'View';\nvar styles = StyleSheet.create({\n  view$raw: {\n    alignContent: 'flex-start',\n    alignItems: 'stretch',\n    backgroundColor: 'transparent',\n    border: '0 solid black',\n    boxSizing: 'border-box',\n    display: 'flex',\n    flexBasis: 'auto',\n    flexDirection: 'column',\n    flexShrink: 0,\n    listStyle: 'none',\n    margin: 0,\n    minHeight: 0,\n    minWidth: 0,\n    padding: 0,\n    position: 'relative',\n    textDecoration: 'none',\n    zIndex: 0\n  },\n  inline: {\n    display: 'inline-flex'\n  }\n});\nexport default View;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"aria-activedescendant\", \"accessibilityActiveDescendant\", \"aria-atomic\", \"accessibilityAtomic\", \"aria-autocomplete\", \"accessibilityAutoComplete\", \"aria-busy\", \"accessibilityBusy\", \"aria-checked\", \"accessibilityChecked\", \"aria-colcount\", \"accessibilityColumnCount\", \"aria-colindex\", \"accessibilityColumnIndex\", \"aria-colspan\", \"accessibilityColumnSpan\", \"aria-controls\", \"accessibilityControls\", \"aria-current\", \"accessibilityCurrent\", \"aria-describedby\", \"accessibilityDescribedBy\", \"aria-details\", \"accessibilityDetails\", \"aria-disabled\", \"accessibilityDisabled\", \"aria-errormessage\", \"accessibilityErrorMessage\", \"aria-expanded\", \"accessibilityExpanded\", \"aria-flowto\", \"accessibilityFlowTo\", \"aria-haspopup\", \"accessibilityHasPopup\", \"aria-hidden\", \"accessibilityHidden\", \"aria-invalid\", \"accessibilityInvalid\", \"aria-keyshortcuts\", \"accessibilityKeyShortcuts\", \"aria-label\", \"accessibilityLabel\", \"aria-labelledby\", \"accessibilityLabelledBy\", \"aria-level\", \"accessibilityLevel\", \"aria-live\", \"accessibilityLiveRegion\", \"aria-modal\", \"accessibilityModal\", \"aria-multiline\", \"accessibilityMultiline\", \"aria-multiselectable\", \"accessibilityMultiSelectable\", \"aria-orientation\", \"accessibilityOrientation\", \"aria-owns\", \"accessibilityOwns\", \"aria-placeholder\", \"accessibilityPlaceholder\", \"aria-posinset\", \"accessibilityPosInSet\", \"aria-pressed\", \"accessibilityPressed\", \"aria-readonly\", \"accessibilityReadOnly\", \"aria-required\", \"accessibilityRequired\", \"role\", \"accessibilityRole\", \"aria-roledescription\", \"accessibilityRoleDescription\", \"aria-rowcount\", \"accessibilityRowCount\", \"aria-rowindex\", \"accessibilityRowIndex\", \"aria-rowspan\", \"accessibilityRowSpan\", \"aria-selected\", \"accessibilitySelected\", \"aria-setsize\", \"accessibilitySetSize\", \"aria-sort\", \"accessibilitySort\", \"aria-valuemax\", \"accessibilityValueMax\", \"aria-valuemin\", \"accessibilityValueMin\", \"aria-valuenow\", \"accessibilityValueNow\", \"aria-valuetext\", \"accessibilityValueText\", \"dataSet\", \"focusable\", \"id\", \"nativeID\", \"pointerEvents\", \"style\", \"tabIndex\", \"testID\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport AccessibilityUtil from '../AccessibilityUtil';\nimport StyleSheet from '../../exports/StyleSheet';\nimport { warnOnce } from '../warnOnce';\nvar emptyObject = {};\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar isArray = Array.isArray;\nvar uppercasePattern = /[A-Z]/g;\nfunction toHyphenLower(match) {\n  return '-' + match.toLowerCase();\n}\nfunction hyphenateString(str) {\n  return str.replace(uppercasePattern, toHyphenLower);\n}\nfunction processIDRefList(idRefList) {\n  return isArray(idRefList) ? idRefList.join(' ') : idRefList;\n}\nvar pointerEventsStyles = StyleSheet.create({\n  auto: {\n    pointerEvents: 'auto'\n  },\n  'box-none': {\n    pointerEvents: 'box-none'\n  },\n  'box-only': {\n    pointerEvents: 'box-only'\n  },\n  none: {\n    pointerEvents: 'none'\n  }\n});\nvar createDOMProps = (elementType, props, options) => {\n  if (!props) {\n    props = emptyObject;\n  }\n  var _props = props,\n    ariaActiveDescendant = _props['aria-activedescendant'],\n    accessibilityActiveDescendant = _props.accessibilityActiveDescendant,\n    ariaAtomic = _props['aria-atomic'],\n    accessibilityAtomic = _props.accessibilityAtomic,\n    ariaAutoComplete = _props['aria-autocomplete'],\n    accessibilityAutoComplete = _props.accessibilityAutoComplete,\n    ariaBusy = _props['aria-busy'],\n    accessibilityBusy = _props.accessibilityBusy,\n    ariaChecked = _props['aria-checked'],\n    accessibilityChecked = _props.accessibilityChecked,\n    ariaColumnCount = _props['aria-colcount'],\n    accessibilityColumnCount = _props.accessibilityColumnCount,\n    ariaColumnIndex = _props['aria-colindex'],\n    accessibilityColumnIndex = _props.accessibilityColumnIndex,\n    ariaColumnSpan = _props['aria-colspan'],\n    accessibilityColumnSpan = _props.accessibilityColumnSpan,\n    ariaControls = _props['aria-controls'],\n    accessibilityControls = _props.accessibilityControls,\n    ariaCurrent = _props['aria-current'],\n    accessibilityCurrent = _props.accessibilityCurrent,\n    ariaDescribedBy = _props['aria-describedby'],\n    accessibilityDescribedBy = _props.accessibilityDescribedBy,\n    ariaDetails = _props['aria-details'],\n    accessibilityDetails = _props.accessibilityDetails,\n    ariaDisabled = _props['aria-disabled'],\n    accessibilityDisabled = _props.accessibilityDisabled,\n    ariaErrorMessage = _props['aria-errormessage'],\n    accessibilityErrorMessage = _props.accessibilityErrorMessage,\n    ariaExpanded = _props['aria-expanded'],\n    accessibilityExpanded = _props.accessibilityExpanded,\n    ariaFlowTo = _props['aria-flowto'],\n    accessibilityFlowTo = _props.accessibilityFlowTo,\n    ariaHasPopup = _props['aria-haspopup'],\n    accessibilityHasPopup = _props.accessibilityHasPopup,\n    ariaHidden = _props['aria-hidden'],\n    accessibilityHidden = _props.accessibilityHidden,\n    ariaInvalid = _props['aria-invalid'],\n    accessibilityInvalid = _props.accessibilityInvalid,\n    ariaKeyShortcuts = _props['aria-keyshortcuts'],\n    accessibilityKeyShortcuts = _props.accessibilityKeyShortcuts,\n    ariaLabel = _props['aria-label'],\n    accessibilityLabel = _props.accessibilityLabel,\n    ariaLabelledBy = _props['aria-labelledby'],\n    accessibilityLabelledBy = _props.accessibilityLabelledBy,\n    ariaLevel = _props['aria-level'],\n    accessibilityLevel = _props.accessibilityLevel,\n    ariaLive = _props['aria-live'],\n    accessibilityLiveRegion = _props.accessibilityLiveRegion,\n    ariaModal = _props['aria-modal'],\n    accessibilityModal = _props.accessibilityModal,\n    ariaMultiline = _props['aria-multiline'],\n    accessibilityMultiline = _props.accessibilityMultiline,\n    ariaMultiSelectable = _props['aria-multiselectable'],\n    accessibilityMultiSelectable = _props.accessibilityMultiSelectable,\n    ariaOrientation = _props['aria-orientation'],\n    accessibilityOrientation = _props.accessibilityOrientation,\n    ariaOwns = _props['aria-owns'],\n    accessibilityOwns = _props.accessibilityOwns,\n    ariaPlaceholder = _props['aria-placeholder'],\n    accessibilityPlaceholder = _props.accessibilityPlaceholder,\n    ariaPosInSet = _props['aria-posinset'],\n    accessibilityPosInSet = _props.accessibilityPosInSet,\n    ariaPressed = _props['aria-pressed'],\n    accessibilityPressed = _props.accessibilityPressed,\n    ariaReadOnly = _props['aria-readonly'],\n    accessibilityReadOnly = _props.accessibilityReadOnly,\n    ariaRequired = _props['aria-required'],\n    accessibilityRequired = _props.accessibilityRequired,\n    ariaRole = _props.role,\n    accessibilityRole = _props.accessibilityRole,\n    ariaRoleDescription = _props['aria-roledescription'],\n    accessibilityRoleDescription = _props.accessibilityRoleDescription,\n    ariaRowCount = _props['aria-rowcount'],\n    accessibilityRowCount = _props.accessibilityRowCount,\n    ariaRowIndex = _props['aria-rowindex'],\n    accessibilityRowIndex = _props.accessibilityRowIndex,\n    ariaRowSpan = _props['aria-rowspan'],\n    accessibilityRowSpan = _props.accessibilityRowSpan,\n    ariaSelected = _props['aria-selected'],\n    accessibilitySelected = _props.accessibilitySelected,\n    ariaSetSize = _props['aria-setsize'],\n    accessibilitySetSize = _props.accessibilitySetSize,\n    ariaSort = _props['aria-sort'],\n    accessibilitySort = _props.accessibilitySort,\n    ariaValueMax = _props['aria-valuemax'],\n    accessibilityValueMax = _props.accessibilityValueMax,\n    ariaValueMin = _props['aria-valuemin'],\n    accessibilityValueMin = _props.accessibilityValueMin,\n    ariaValueNow = _props['aria-valuenow'],\n    accessibilityValueNow = _props.accessibilityValueNow,\n    ariaValueText = _props['aria-valuetext'],\n    accessibilityValueText = _props.accessibilityValueText,\n    dataSet = _props.dataSet,\n    focusable = _props.focusable,\n    id = _props.id,\n    nativeID = _props.nativeID,\n    pointerEvents = _props.pointerEvents,\n    style = _props.style,\n    tabIndex = _props.tabIndex,\n    testID = _props.testID,\n    domProps = _objectWithoutPropertiesLoose(_props, _excluded);\n\n  /*\n  if (accessibilityDisabled != null) {\n    warnOnce('accessibilityDisabled', `accessibilityDisabled is deprecated.`);\n  }\n  */\n  var disabled = ariaDisabled || accessibilityDisabled;\n  var role = AccessibilityUtil.propsToAriaRole(props);\n\n  // ACCESSIBILITY\n  /*\n  if (accessibilityActiveDescendant != null) {\n    warnOnce(\n      'accessibilityActiveDescendant',\n      `accessibilityActiveDescendant is deprecated. Use aria-activedescendant.`\n    );\n  }\n  */\n  var _ariaActiveDescendant = ariaActiveDescendant != null ? ariaActiveDescendant : accessibilityActiveDescendant;\n  if (_ariaActiveDescendant != null) {\n    domProps['aria-activedescendant'] = _ariaActiveDescendant;\n  }\n\n  /*\n  if (accessibilityAtomic != null) {\n    warnOnce(\n      'accessibilityAtomic',\n      `accessibilityAtomic is deprecated. Use aria-atomic.`\n    );\n  }\n  */\n  var _ariaAtomic = ariaAtomic != null ? ariaActiveDescendant : accessibilityAtomic;\n  if (_ariaAtomic != null) {\n    domProps['aria-atomic'] = _ariaAtomic;\n  }\n\n  /*\n  if (accessibilityAutoComplete != null) {\n    warnOnce(\n      'accessibilityAutoComplete',\n      `accessibilityAutoComplete is deprecated. Use aria-autocomplete.`\n    );\n  }\n  */\n  var _ariaAutoComplete = ariaAutoComplete != null ? ariaAutoComplete : accessibilityAutoComplete;\n  if (_ariaAutoComplete != null) {\n    domProps['aria-autocomplete'] = _ariaAutoComplete;\n  }\n\n  /*\n  if (accessibilityBusy != null) {\n    warnOnce(\n      'accessibilityBusy',\n      `accessibilityBusy is deprecated. Use aria-busy.`\n    );\n  }\n  */\n  var _ariaBusy = ariaBusy != null ? ariaBusy : accessibilityBusy;\n  if (_ariaBusy != null) {\n    domProps['aria-busy'] = _ariaBusy;\n  }\n\n  /*\n  if (accessibilityChecked != null) {\n    warnOnce(\n      'accessibilityChecked',\n      `accessibilityChecked is deprecated. Use aria-checked.`\n    );\n  }\n  */\n  var _ariaChecked = ariaChecked != null ? ariaChecked : accessibilityChecked;\n  if (_ariaChecked != null) {\n    domProps['aria-checked'] = _ariaChecked;\n  }\n\n  /*\n  if (accessibilityColumnCount != null) {\n    warnOnce(\n      'accessibilityColumnCount',\n      `accessibilityColumnCount is deprecated. Use aria-colcount.`\n    );\n  }\n  */\n  var _ariaColumnCount = ariaColumnCount != null ? ariaColumnCount : accessibilityColumnCount;\n  if (_ariaColumnCount != null) {\n    domProps['aria-colcount'] = _ariaColumnCount;\n  }\n\n  /*\n  if (accessibilityColumnIndex != null) {\n    warnOnce(\n      'accessibilityColumnIndex',\n      `accessibilityColumnIndex is deprecated. Use aria-colindex.`\n    );\n  }\n  */\n  var _ariaColumnIndex = ariaColumnIndex != null ? ariaColumnIndex : accessibilityColumnIndex;\n  if (_ariaColumnIndex != null) {\n    domProps['aria-colindex'] = _ariaColumnIndex;\n  }\n\n  /*\n  if (accessibilityColumnSpan != null) {\n    warnOnce(\n      'accessibilityColumnSpan',\n      `accessibilityColumnSpan is deprecated. Use aria-colspan.`\n    );\n  }\n  */\n  var _ariaColumnSpan = ariaColumnSpan != null ? ariaColumnSpan : accessibilityColumnSpan;\n  if (_ariaColumnSpan != null) {\n    domProps['aria-colspan'] = _ariaColumnSpan;\n  }\n\n  /*\n  if (accessibilityControls != null) {\n    warnOnce(\n      'accessibilityControls',\n      `accessibilityControls is deprecated. Use aria-controls.`\n    );\n  }\n  */\n  var _ariaControls = ariaControls != null ? ariaControls : accessibilityControls;\n  if (_ariaControls != null) {\n    domProps['aria-controls'] = processIDRefList(_ariaControls);\n  }\n\n  /*\n  if (accessibilityCurrent != null) {\n    warnOnce(\n      'accessibilityCurrent',\n      `accessibilityCurrent is deprecated. Use aria-current.`\n    );\n  }\n  */\n  var _ariaCurrent = ariaCurrent != null ? ariaCurrent : accessibilityCurrent;\n  if (_ariaCurrent != null) {\n    domProps['aria-current'] = _ariaCurrent;\n  }\n\n  /*\n  if (accessibilityDescribedBy != null) {\n    warnOnce(\n      'accessibilityDescribedBy',\n      `accessibilityDescribedBy is deprecated. Use aria-describedby.`\n    );\n  }\n  */\n  var _ariaDescribedBy = ariaDescribedBy != null ? ariaDescribedBy : accessibilityDescribedBy;\n  if (_ariaDescribedBy != null) {\n    domProps['aria-describedby'] = processIDRefList(_ariaDescribedBy);\n  }\n\n  /*\n  if (accessibilityDetails != null) {\n    warnOnce(\n      'accessibilityDetails',\n      `accessibilityDetails is deprecated. Use aria-details.`\n    );\n  }\n  */\n  var _ariaDetails = ariaDetails != null ? ariaDetails : accessibilityDetails;\n  if (_ariaDetails != null) {\n    domProps['aria-details'] = _ariaDetails;\n  }\n  if (disabled === true) {\n    domProps['aria-disabled'] = true;\n    // Enhance with native semantics\n    if (elementType === 'button' || elementType === 'form' || elementType === 'input' || elementType === 'select' || elementType === 'textarea') {\n      domProps.disabled = true;\n    }\n  }\n\n  /*\n  if (accessibilityErrorMessage != null) {\n    warnOnce(\n      'accessibilityErrorMessage',\n      `accessibilityErrorMessage is deprecated. Use aria-errormessage.`\n    );\n  }\n  */\n  var _ariaErrorMessage = ariaErrorMessage != null ? ariaErrorMessage : accessibilityErrorMessage;\n  if (_ariaErrorMessage != null) {\n    domProps['aria-errormessage'] = _ariaErrorMessage;\n  }\n\n  /*\n  if (accessibilityExpanded != null) {\n    warnOnce(\n      'accessibilityExpanded',\n      `accessibilityExpanded is deprecated. Use aria-expanded.`\n    );\n  }\n  */\n  var _ariaExpanded = ariaExpanded != null ? ariaExpanded : accessibilityExpanded;\n  if (_ariaExpanded != null) {\n    domProps['aria-expanded'] = _ariaExpanded;\n  }\n\n  /*\n  if (accessibilityFlowTo != null) {\n    warnOnce(\n      'accessibilityFlowTo',\n      `accessibilityFlowTo is deprecated. Use aria-flowto.`\n    );\n  }\n  */\n  var _ariaFlowTo = ariaFlowTo != null ? ariaFlowTo : accessibilityFlowTo;\n  if (_ariaFlowTo != null) {\n    domProps['aria-flowto'] = processIDRefList(_ariaFlowTo);\n  }\n\n  /*\n  if (accessibilityHasPopup != null) {\n    warnOnce(\n      'accessibilityHasPopup',\n      `accessibilityHasPopup is deprecated. Use aria-haspopup.`\n    );\n  }\n  */\n  var _ariaHasPopup = ariaHasPopup != null ? ariaHasPopup : accessibilityHasPopup;\n  if (_ariaHasPopup != null) {\n    domProps['aria-haspopup'] = _ariaHasPopup;\n  }\n\n  /*\n  if (accessibilityHidden != null) {\n    warnOnce(\n      'accessibilityHidden',\n      `accessibilityHidden is deprecated. Use aria-hidden.`\n    );\n  }\n  */\n  var _ariaHidden = ariaHidden != null ? ariaHidden : accessibilityHidden;\n  if (_ariaHidden === true) {\n    domProps['aria-hidden'] = _ariaHidden;\n  }\n\n  /*\n  if (accessibilityInvalid != null) {\n    warnOnce(\n      'accessibilityInvalid',\n      `accessibilityInvalid is deprecated. Use aria-invalid.`\n    );\n  }\n  */\n  var _ariaInvalid = ariaInvalid != null ? ariaInvalid : accessibilityInvalid;\n  if (_ariaInvalid != null) {\n    domProps['aria-invalid'] = _ariaInvalid;\n  }\n\n  /*\n  if (accessibilityKeyShortcuts != null) {\n    warnOnce(\n      'accessibilityKeyShortcuts',\n      `accessibilityKeyShortcuts is deprecated. Use aria-keyshortcuts.`\n    );\n  }\n  */\n  var _ariaKeyShortcuts = ariaKeyShortcuts != null ? ariaKeyShortcuts : accessibilityKeyShortcuts;\n  if (_ariaKeyShortcuts != null) {\n    domProps['aria-keyshortcuts'] = processIDRefList(_ariaKeyShortcuts);\n  }\n\n  /*\n  if (accessibilityLabel != null) {\n    warnOnce(\n      'accessibilityLabel',\n      `accessibilityLabel is deprecated. Use aria-label.`\n    );\n  }\n  */\n  var _ariaLabel = ariaLabel != null ? ariaLabel : accessibilityLabel;\n  if (_ariaLabel != null) {\n    domProps['aria-label'] = _ariaLabel;\n  }\n\n  /*\n  if (accessibilityLabelledBy != null) {\n    warnOnce(\n      'accessibilityLabelledBy',\n      `accessibilityLabelledBy is deprecated. Use aria-labelledby.`\n    );\n  }\n  */\n  var _ariaLabelledBy = ariaLabelledBy != null ? ariaLabelledBy : accessibilityLabelledBy;\n  if (_ariaLabelledBy != null) {\n    domProps['aria-labelledby'] = processIDRefList(_ariaLabelledBy);\n  }\n\n  /*\n  if (accessibilityLevel != null) {\n    warnOnce(\n      'accessibilityLevel',\n      `accessibilityLevel is deprecated. Use aria-level.`\n    );\n  }\n  */\n  var _ariaLevel = ariaLevel != null ? ariaLevel : accessibilityLevel;\n  if (_ariaLevel != null) {\n    domProps['aria-level'] = _ariaLevel;\n  }\n\n  /*\n  if (accessibilityLiveRegion != null) {\n    warnOnce(\n      'accessibilityLiveRegion',\n      `accessibilityLiveRegion is deprecated. Use aria-live.`\n    );\n  }\n  */\n  var _ariaLive = ariaLive != null ? ariaLive : accessibilityLiveRegion;\n  if (_ariaLive != null) {\n    domProps['aria-live'] = _ariaLive === 'none' ? 'off' : _ariaLive;\n  }\n\n  /*\n  if (accessibilityModal != null) {\n    warnOnce(\n      'accessibilityModal',\n      `accessibilityModal is deprecated. Use aria-modal.`\n    );\n  }\n  */\n  var _ariaModal = ariaModal != null ? ariaModal : accessibilityModal;\n  if (_ariaModal != null) {\n    domProps['aria-modal'] = _ariaModal;\n  }\n\n  /*\n  if (accessibilityMultiline != null) {\n    warnOnce(\n      'accessibilityMultiline',\n      `accessibilityMultiline is deprecated. Use aria-multiline.`\n    );\n  }\n  */\n  var _ariaMultiline = ariaMultiline != null ? ariaMultiline : accessibilityMultiline;\n  if (_ariaMultiline != null) {\n    domProps['aria-multiline'] = _ariaMultiline;\n  }\n\n  /*\n  if (accessibilityMultiSelectable != null) {\n    warnOnce(\n      'accessibilityMultiSelectable',\n      `accessibilityMultiSelectable is deprecated. Use aria-multiselectable.`\n    );\n  }\n  */\n  var _ariaMultiSelectable = ariaMultiSelectable != null ? ariaMultiSelectable : accessibilityMultiSelectable;\n  if (_ariaMultiSelectable != null) {\n    domProps['aria-multiselectable'] = _ariaMultiSelectable;\n  }\n\n  /*\n  if (accessibilityOrientation != null) {\n    warnOnce(\n      'accessibilityOrientation',\n      `accessibilityOrientation is deprecated. Use aria-orientation.`\n    );\n  }\n  */\n  var _ariaOrientation = ariaOrientation != null ? ariaOrientation : accessibilityOrientation;\n  if (_ariaOrientation != null) {\n    domProps['aria-orientation'] = _ariaOrientation;\n  }\n\n  /*\n  if (accessibilityOwns != null) {\n    warnOnce(\n      'accessibilityOwns',\n      `accessibilityOwns is deprecated. Use aria-owns.`\n    );\n  }\n  */\n  var _ariaOwns = ariaOwns != null ? ariaOwns : accessibilityOwns;\n  if (_ariaOwns != null) {\n    domProps['aria-owns'] = processIDRefList(_ariaOwns);\n  }\n\n  /*\n  if (accessibilityPlaceholder != null) {\n    warnOnce(\n      'accessibilityPlaceholder',\n      `accessibilityPlaceholder is deprecated. Use aria-placeholder.`\n    );\n  }\n  */\n  var _ariaPlaceholder = ariaPlaceholder != null ? ariaPlaceholder : accessibilityPlaceholder;\n  if (_ariaPlaceholder != null) {\n    domProps['aria-placeholder'] = _ariaPlaceholder;\n  }\n\n  /*\n  if (accessibilityPosInSet != null) {\n    warnOnce(\n      'accessibilityPosInSet',\n      `accessibilityPosInSet is deprecated. Use aria-posinset.`\n    );\n  }\n  */\n  var _ariaPosInSet = ariaPosInSet != null ? ariaPosInSet : accessibilityPosInSet;\n  if (_ariaPosInSet != null) {\n    domProps['aria-posinset'] = _ariaPosInSet;\n  }\n\n  /*\n  if (accessibilityPressed != null) {\n    warnOnce(\n      'accessibilityPressed',\n      `accessibilityPressed is deprecated. Use aria-pressed.`\n    );\n  }\n  */\n  var _ariaPressed = ariaPressed != null ? ariaPressed : accessibilityPressed;\n  if (_ariaPressed != null) {\n    domProps['aria-pressed'] = _ariaPressed;\n  }\n\n  /*\n  if (accessibilityReadOnly != null) {\n    warnOnce(\n      'accessibilityReadOnly',\n      `accessibilityReadOnly is deprecated. Use aria-readonly.`\n    );\n  }\n  */\n  var _ariaReadOnly = ariaReadOnly != null ? ariaReadOnly : accessibilityReadOnly;\n  if (_ariaReadOnly != null) {\n    domProps['aria-readonly'] = _ariaReadOnly;\n    // Enhance with native semantics\n    if (elementType === 'input' || elementType === 'select' || elementType === 'textarea') {\n      domProps.readOnly = true;\n    }\n  }\n\n  /*\n  if (accessibilityRequired != null) {\n    warnOnce(\n      'accessibilityRequired',\n      `accessibilityRequired is deprecated. Use aria-required.`\n    );\n  }\n  */\n  var _ariaRequired = ariaRequired != null ? ariaRequired : accessibilityRequired;\n  if (_ariaRequired != null) {\n    domProps['aria-required'] = _ariaRequired;\n    // Enhance with native semantics\n    if (elementType === 'input' || elementType === 'select' || elementType === 'textarea') {\n      domProps.required = accessibilityRequired;\n    }\n  }\n\n  /*\n  if (accessibilityRole != null) {\n    warnOnce('accessibilityRole', `accessibilityRole is deprecated. Use role.`);\n  }\n  */\n  if (role != null) {\n    // 'presentation' synonym has wider browser support\n    domProps['role'] = role === 'none' ? 'presentation' : role;\n  }\n\n  /*\n  if (accessibilityRoleDescription != null) {\n    warnOnce(\n      'accessibilityRoleDescription',\n      `accessibilityRoleDescription is deprecated. Use aria-roledescription.`\n    );\n  }\n  */\n  var _ariaRoleDescription = ariaRoleDescription != null ? ariaRoleDescription : accessibilityRoleDescription;\n  if (_ariaRoleDescription != null) {\n    domProps['aria-roledescription'] = _ariaRoleDescription;\n  }\n\n  /*\n  if (accessibilityRowCount != null) {\n    warnOnce(\n      'accessibilityRowCount',\n      `accessibilityRowCount is deprecated. Use aria-rowcount.`\n    );\n  }\n  */\n  var _ariaRowCount = ariaRowCount != null ? ariaRowCount : accessibilityRowCount;\n  if (_ariaRowCount != null) {\n    domProps['aria-rowcount'] = _ariaRowCount;\n  }\n\n  /*\n  if (accessibilityRowIndex != null) {\n    warnOnce(\n      'accessibilityRowIndex',\n      `accessibilityRowIndex is deprecated. Use aria-rowindex.`\n    );\n  }\n  */\n  var _ariaRowIndex = ariaRowIndex != null ? ariaRowIndex : accessibilityRowIndex;\n  if (_ariaRowIndex != null) {\n    domProps['aria-rowindex'] = _ariaRowIndex;\n  }\n\n  /*\n  if (accessibilityRowSpan != null) {\n    warnOnce(\n      'accessibilityRowSpan',\n      `accessibilityRowSpan is deprecated. Use aria-rowspan.`\n    );\n  }\n  */\n  var _ariaRowSpan = ariaRowSpan != null ? ariaRowSpan : accessibilityRowSpan;\n  if (_ariaRowSpan != null) {\n    domProps['aria-rowspan'] = _ariaRowSpan;\n  }\n\n  /*\n  if (accessibilitySelected != null) {\n    warnOnce(\n      'accessibilitySelected',\n      `accessibilitySelected is deprecated. Use aria-selected.`\n    );\n  }\n  */\n  var _ariaSelected = ariaSelected != null ? ariaSelected : accessibilitySelected;\n  if (_ariaSelected != null) {\n    domProps['aria-selected'] = _ariaSelected;\n  }\n\n  /*\n  if (accessibilitySetSize != null) {\n    warnOnce(\n      'accessibilitySetSize',\n      `accessibilitySetSize is deprecated. Use aria-setsize.`\n    );\n  }\n  */\n  var _ariaSetSize = ariaSetSize != null ? ariaSetSize : accessibilitySetSize;\n  if (_ariaSetSize != null) {\n    domProps['aria-setsize'] = _ariaSetSize;\n  }\n\n  /*\n  if (accessibilitySort != null) {\n    warnOnce(\n      'accessibilitySort',\n      `accessibilitySort is deprecated. Use aria-sort.`\n    );\n  }\n  */\n  var _ariaSort = ariaSort != null ? ariaSort : accessibilitySort;\n  if (_ariaSort != null) {\n    domProps['aria-sort'] = _ariaSort;\n  }\n\n  /*\n  if (accessibilityValueMax != null) {\n    warnOnce(\n      'accessibilityValueMax',\n      `accessibilityValueMax is deprecated. Use aria-valuemax.`\n    );\n  }\n  */\n  var _ariaValueMax = ariaValueMax != null ? ariaValueMax : accessibilityValueMax;\n  if (_ariaValueMax != null) {\n    domProps['aria-valuemax'] = _ariaValueMax;\n  }\n\n  /*\n  if (accessibilityValueMin != null) {\n    warnOnce(\n      'accessibilityValueMin',\n      `accessibilityValueMin is deprecated. Use aria-valuemin.`\n    );\n  }\n  */\n  var _ariaValueMin = ariaValueMin != null ? ariaValueMin : accessibilityValueMin;\n  if (_ariaValueMin != null) {\n    domProps['aria-valuemin'] = _ariaValueMin;\n  }\n\n  /*\n  if (accessibilityValueNow != null) {\n    warnOnce(\n      'accessibilityValueNow',\n      `accessibilityValueNow is deprecated. Use aria-valuenow.`\n    );\n  }\n  */\n  var _ariaValueNow = ariaValueNow != null ? ariaValueNow : accessibilityValueNow;\n  if (_ariaValueNow != null) {\n    domProps['aria-valuenow'] = _ariaValueNow;\n  }\n\n  /*\n  if (accessibilityValueText != null) {\n    warnOnce(\n      'accessibilityValueText',\n      `accessibilityValueText is deprecated. Use aria-valuetext.`\n    );\n  }\n  */\n  var _ariaValueText = ariaValueText != null ? ariaValueText : accessibilityValueText;\n  if (_ariaValueText != null) {\n    domProps['aria-valuetext'] = _ariaValueText;\n  }\n\n  // \"dataSet\" replaced with \"data-*\"\n  if (dataSet != null) {\n    for (var dataProp in dataSet) {\n      if (hasOwnProperty.call(dataSet, dataProp)) {\n        var dataName = hyphenateString(dataProp);\n        var dataValue = dataSet[dataProp];\n        if (dataValue != null) {\n          domProps[\"data-\" + dataName] = dataValue;\n        }\n      }\n    }\n  }\n\n  // FOCUS\n  if (tabIndex === 0 || tabIndex === '0' || tabIndex === -1 || tabIndex === '-1') {\n    domProps.tabIndex = tabIndex;\n  } else {\n    /*\n    if (focusable != null) {\n      warnOnce('focusable', `focusable is deprecated.`);\n    }\n    */\n\n    // \"focusable\" indicates that an element may be a keyboard tab-stop.\n    if (focusable === false) {\n      domProps.tabIndex = '-1';\n    }\n    if (\n    // These native elements are keyboard focusable by default\n    elementType === 'a' || elementType === 'button' || elementType === 'input' || elementType === 'select' || elementType === 'textarea') {\n      if (focusable === false || accessibilityDisabled === true) {\n        domProps.tabIndex = '-1';\n      }\n    } else if (\n    // These roles are made keyboard focusable by default\n    role === 'button' || role === 'checkbox' || role === 'link' || role === 'radio' || role === 'textbox' || role === 'switch') {\n      if (focusable !== false) {\n        domProps.tabIndex = '0';\n      }\n    } else {\n      // Everything else must explicitly set the prop\n      if (focusable === true) {\n        domProps.tabIndex = '0';\n      }\n    }\n  }\n\n  // Resolve styles\n  if (pointerEvents != null) {\n    warnOnce('pointerEvents', \"props.pointerEvents is deprecated. Use style.pointerEvents\");\n  }\n  var _StyleSheet = StyleSheet([style, pointerEvents && pointerEventsStyles[pointerEvents]], _objectSpread({\n      writingDirection: 'ltr'\n    }, options)),\n    className = _StyleSheet[0],\n    inlineStyle = _StyleSheet[1];\n  if (className) {\n    domProps.className = className;\n  }\n  if (inlineStyle) {\n    domProps.style = inlineStyle;\n  }\n\n  // OTHER\n  // Native element ID\n  /*\n  if (nativeID != null) {\n    warnOnce('nativeID', `nativeID is deprecated. Use id.`);\n  }\n  */\n  var _id = id != null ? id : nativeID;\n  if (_id != null) {\n    domProps.id = _id;\n  }\n  // Automated test IDs\n  if (testID != null) {\n    domProps['data-testid'] = testID;\n  }\n  if (domProps.type == null && elementType === 'button') {\n    domProps.type = 'button';\n  }\n  return domProps;\n};\nexport default createDOMProps;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport AccessibilityUtil from '../../modules/AccessibilityUtil';\nimport createDOMProps from '../../modules/createDOMProps';\nimport React from 'react';\nimport { LocaleProvider } from '../../modules/useLocale';\nvar createElement = (component, props, options) => {\n  // Use equivalent platform elements where possible.\n  var accessibilityComponent;\n  if (component && component.constructor === String) {\n    accessibilityComponent = AccessibilityUtil.propsToAccessibilityComponent(props);\n  }\n  var Component = accessibilityComponent || component;\n  var domProps = createDOMProps(Component, props, options);\n  var element = /*#__PURE__*/React.createElement(Component, domProps);\n\n  // Update locale context if element's writing direction prop changes\n  var elementWithLocaleProvider = domProps.dir ? /*#__PURE__*/React.createElement(LocaleProvider, {\n    children: element,\n    direction: domProps.dir,\n    locale: domProps.lang\n  }) : element;\n  return elementWithLocaleProvider;\n};\nexport default createElement;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar findNodeHandle = component => {\n  throw new Error('findNodeHandle is not supported on web. ' + 'Use the ref property on the component instead.');\n};\nexport default findNodeHandle;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport normalizeColor from '@react-native/normalize-colors';\nvar processColor = color => {\n  if (color === undefined || color === null) {\n    return color;\n  }\n\n  // convert number and hex\n  var int32Color = normalizeColor(color);\n  if (int32Color === undefined || int32Color === null) {\n    return undefined;\n  }\n  int32Color = (int32Color << 24 | int32Color >>> 8) >>> 0;\n  return int32Color;\n};\nexport default processColor;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar accessibilityRoleToWebRole = {\n  adjustable: 'slider',\n  button: 'button',\n  header: 'heading',\n  image: 'img',\n  imagebutton: null,\n  keyboardkey: null,\n  label: null,\n  link: 'link',\n  none: 'presentation',\n  search: 'search',\n  summary: 'region',\n  text: null\n};\nvar propsToAriaRole = _ref => {\n  var accessibilityRole = _ref.accessibilityRole,\n    role = _ref.role;\n  var _role = role || accessibilityRole;\n  if (_role) {\n    var inferredRole = accessibilityRoleToWebRole[_role];\n    if (inferredRole !== null) {\n      // ignore roles that don't map to web\n      return inferredRole || _role;\n    }\n  }\n};\nexport default propsToAriaRole;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport propsToAriaRole from './propsToAriaRole';\nvar roleComponents = {\n  article: 'article',\n  banner: 'header',\n  blockquote: 'blockquote',\n  button: 'button',\n  code: 'code',\n  complementary: 'aside',\n  contentinfo: 'footer',\n  deletion: 'del',\n  emphasis: 'em',\n  figure: 'figure',\n  insertion: 'ins',\n  form: 'form',\n  list: 'ul',\n  listitem: 'li',\n  main: 'main',\n  navigation: 'nav',\n  paragraph: 'p',\n  region: 'section',\n  strong: 'strong'\n};\nvar emptyObject = {};\nvar propsToAccessibilityComponent = function propsToAccessibilityComponent(props) {\n  if (props === void 0) {\n    props = emptyObject;\n  }\n  var roleProp = props.role || props.accessibilityRole;\n  // special-case for \"label\" role which doesn't map to an ARIA role\n  if (roleProp === 'label') {\n    return 'label';\n  }\n  var role = propsToAriaRole(props);\n  if (role) {\n    if (role === 'heading') {\n      var level = props.accessibilityLevel || props['aria-level'];\n      if (level != null) {\n        return \"h\" + level;\n      }\n      return 'h1';\n    }\n    return roleComponents[role];\n  }\n};\nexport default propsToAccessibilityComponent;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport isDisabled from './isDisabled';\nimport propsToAccessibilityComponent from './propsToAccessibilityComponent';\nimport propsToAriaRole from './propsToAriaRole';\nvar AccessibilityUtil = {\n  isDisabled,\n  propsToAccessibilityComponent,\n  propsToAriaRole\n};\nexport default AccessibilityUtil;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar isDisabled = props => props.disabled || Array.isArray(props.accessibilityStates) && props.accessibilityStates.indexOf('disabled') > -1;\nexport default isDisabled;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport UIManager from '../../exports/UIManager';\n\n/**\n * This class is responsible for coordinating the \"focused\"\n * state for TextInputs. All calls relating to the keyboard\n * should be funneled through here\n */\nvar TextInputState = {\n  /**\n   * Internal state\n   */\n  _currentlyFocusedNode: null,\n  /**\n   * Returns the ID of the currently focused text field, if one exists\n   * If no text field is focused it returns null\n   */\n  currentlyFocusedField() {\n    if (document.activeElement !== this._currentlyFocusedNode) {\n      this._currentlyFocusedNode = null;\n    }\n    return this._currentlyFocusedNode;\n  },\n  /**\n   * @param {Object} TextInputID id of the text field to focus\n   * Focuses the specified text field\n   * noop if the text field was already focused\n   */\n  focusTextInput(textFieldNode) {\n    if (textFieldNode !== null) {\n      this._currentlyFocusedNode = textFieldNode;\n      if (document.activeElement !== textFieldNode) {\n        UIManager.focus(textFieldNode);\n      }\n    }\n  },\n  /**\n   * @param {Object} textFieldNode id of the text field to focus\n   * Unfocuses the specified text field\n   * noop if it wasn't focused\n   */\n  blurTextInput(textFieldNode) {\n    if (textFieldNode !== null) {\n      this._currentlyFocusedNode = null;\n      if (document.activeElement === textFieldNode) {\n        UIManager.blur(textFieldNode);\n      }\n    }\n  }\n};\nexport default TextInputState;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"style\"];\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport View from '../../exports/View';\nimport React from 'react';\n\n/**\n * Common implementation for a simple stubbed view.\n */\nfunction UnimplementedView(_ref) {\n  var style = _ref.style,\n    props = _objectWithoutPropertiesLoose(_ref, _excluded);\n  return /*#__PURE__*/React.createElement(View, _extends({}, props, {\n    style: [unimplementedViewStyles, style]\n  }));\n}\nvar unimplementedViewStyles = process.env.NODE_ENV !== 'production' ? {\n  alignSelf: 'flex-start',\n  borderColor: 'red',\n  borderWidth: 1\n} : {};\nexport default UnimplementedView;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nexport default canUseDOM;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport TextInputState from '../TextInputState';\nvar dismissKeyboard = () => {\n  TextInputState.blurTextInput(TextInputState.currentlyFocusedField());\n};\nexport default dismissKeyboard;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport var defaultProps = {\n  children: true,\n  dataSet: true,\n  dir: true,\n  id: true,\n  ref: true,\n  suppressHydrationWarning: true,\n  tabIndex: true,\n  testID: true,\n  // @deprecated\n  focusable: true,\n  nativeID: true\n};\nexport var accessibilityProps = {\n  'aria-activedescendant': true,\n  'aria-atomic': true,\n  'aria-autocomplete': true,\n  'aria-busy': true,\n  'aria-checked': true,\n  'aria-colcount': true,\n  'aria-colindex': true,\n  'aria-colspan': true,\n  'aria-controls': true,\n  'aria-current': true,\n  'aria-describedby': true,\n  'aria-details': true,\n  'aria-disabled': true,\n  'aria-errormessage': true,\n  'aria-expanded': true,\n  'aria-flowto': true,\n  'aria-haspopup': true,\n  'aria-hidden': true,\n  'aria-invalid': true,\n  'aria-keyshortcuts': true,\n  'aria-label': true,\n  'aria-labelledby': true,\n  'aria-level': true,\n  'aria-live': true,\n  'aria-modal': true,\n  'aria-multiline': true,\n  'aria-multiselectable': true,\n  'aria-orientation': true,\n  'aria-owns': true,\n  'aria-placeholder': true,\n  'aria-posinset': true,\n  'aria-pressed': true,\n  'aria-readonly': true,\n  'aria-required': true,\n  inert: true,\n  role: true,\n  'aria-roledescription': true,\n  'aria-rowcount': true,\n  'aria-rowindex': true,\n  'aria-rowspan': true,\n  'aria-selected': true,\n  'aria-setsize': true,\n  'aria-sort': true,\n  'aria-valuemax': true,\n  'aria-valuemin': true,\n  'aria-valuenow': true,\n  'aria-valuetext': true,\n  // @deprecated\n  accessibilityActiveDescendant: true,\n  accessibilityAtomic: true,\n  accessibilityAutoComplete: true,\n  accessibilityBusy: true,\n  accessibilityChecked: true,\n  accessibilityColumnCount: true,\n  accessibilityColumnIndex: true,\n  accessibilityColumnSpan: true,\n  accessibilityControls: true,\n  accessibilityCurrent: true,\n  accessibilityDescribedBy: true,\n  accessibilityDetails: true,\n  accessibilityDisabled: true,\n  accessibilityErrorMessage: true,\n  accessibilityExpanded: true,\n  accessibilityFlowTo: true,\n  accessibilityHasPopup: true,\n  accessibilityHidden: true,\n  accessibilityInvalid: true,\n  accessibilityKeyShortcuts: true,\n  accessibilityLabel: true,\n  accessibilityLabelledBy: true,\n  accessibilityLevel: true,\n  accessibilityLiveRegion: true,\n  accessibilityModal: true,\n  accessibilityMultiline: true,\n  accessibilityMultiSelectable: true,\n  accessibilityOrientation: true,\n  accessibilityOwns: true,\n  accessibilityPlaceholder: true,\n  accessibilityPosInSet: true,\n  accessibilityPressed: true,\n  accessibilityReadOnly: true,\n  accessibilityRequired: true,\n  accessibilityRole: true,\n  accessibilityRoleDescription: true,\n  accessibilityRowCount: true,\n  accessibilityRowIndex: true,\n  accessibilityRowSpan: true,\n  accessibilitySelected: true,\n  accessibilitySetSize: true,\n  accessibilitySort: true,\n  accessibilityValueMax: true,\n  accessibilityValueMin: true,\n  accessibilityValueNow: true,\n  accessibilityValueText: true\n};\nexport var clickProps = {\n  onClick: true,\n  onAuxClick: true,\n  onContextMenu: true,\n  onGotPointerCapture: true,\n  onLostPointerCapture: true,\n  onPointerCancel: true,\n  onPointerDown: true,\n  onPointerEnter: true,\n  onPointerMove: true,\n  onPointerLeave: true,\n  onPointerOut: true,\n  onPointerOver: true,\n  onPointerUp: true\n};\nexport var focusProps = {\n  onBlur: true,\n  onFocus: true\n};\nexport var keyboardProps = {\n  onKeyDown: true,\n  onKeyDownCapture: true,\n  onKeyUp: true,\n  onKeyUpCapture: true\n};\nexport var mouseProps = {\n  onMouseDown: true,\n  onMouseEnter: true,\n  onMouseLeave: true,\n  onMouseMove: true,\n  onMouseOver: true,\n  onMouseOut: true,\n  onMouseUp: true\n};\nexport var touchProps = {\n  onTouchCancel: true,\n  onTouchCancelCapture: true,\n  onTouchEnd: true,\n  onTouchEndCapture: true,\n  onTouchMove: true,\n  onTouchMoveCapture: true,\n  onTouchStart: true,\n  onTouchStartCapture: true\n};\nexport var styleProps = {\n  style: true\n};","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar getBoundingClientRect = node => {\n  if (node != null) {\n    var isElement = node.nodeType === 1; /* Node.ELEMENT_NODE */\n    if (isElement && typeof node.getBoundingClientRect === 'function') {\n      return node.getBoundingClientRect();\n    }\n  }\n};\nexport default getBoundingClientRect;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nexport default function mergeRefs() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  return function forwardRef(node) {\n    args.forEach(ref => {\n      if (ref == null) {\n        return;\n      }\n      if (typeof ref === 'function') {\n        ref(node);\n        return;\n      }\n      if (typeof ref === 'object') {\n        ref.current = node;\n        return;\n      }\n      console.error(\"mergeRefs cannot handle Refs of type boolean, number or string, received ref \" + String(ref));\n    });\n  };\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport default function pick(obj, list) {\n  var nextObj = {};\n  for (var key in obj) {\n    if (obj.hasOwnProperty(key)) {\n      if (list[key] === true) {\n        nextObj[key] = obj[key];\n      }\n    }\n  }\n  return nextObj;\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport useLayoutEffect from '../useLayoutEffect';\nimport UIManager from '../../exports/UIManager';\nimport canUseDOM from '../canUseDom';\nvar DOM_LAYOUT_HANDLER_NAME = '__reactLayoutHandler';\nvar didWarn = !canUseDOM;\nvar resizeObserver = null;\nfunction getResizeObserver() {\n  if (canUseDOM && typeof window.ResizeObserver !== 'undefined') {\n    if (resizeObserver == null) {\n      resizeObserver = new window.ResizeObserver(function (entries) {\n        entries.forEach(entry => {\n          var node = entry.target;\n          var onLayout = node[DOM_LAYOUT_HANDLER_NAME];\n          if (typeof onLayout === 'function') {\n            // We still need to measure the view because browsers don't yet provide\n            // border-box dimensions in the entry\n            UIManager.measure(node, (x, y, width, height, left, top) => {\n              var event = {\n                // $FlowFixMe\n                nativeEvent: {\n                  layout: {\n                    x,\n                    y,\n                    width,\n                    height,\n                    left,\n                    top\n                  }\n                },\n                timeStamp: Date.now()\n              };\n              Object.defineProperty(event.nativeEvent, 'target', {\n                enumerable: true,\n                get: () => entry.target\n              });\n              onLayout(event);\n            });\n          }\n        });\n      });\n    }\n  } else if (!didWarn) {\n    if (process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test') {\n      console.warn('onLayout relies on ResizeObserver which is not supported by your browser. ' + 'Please include a polyfill, e.g., https://github.com/que-etc/resize-observer-polyfill.');\n      didWarn = true;\n    }\n  }\n  return resizeObserver;\n}\nexport default function useElementLayout(ref, onLayout) {\n  var observer = getResizeObserver();\n  useLayoutEffect(() => {\n    var node = ref.current;\n    if (node != null) {\n      node[DOM_LAYOUT_HANDLER_NAME] = onLayout;\n    }\n  }, [ref, onLayout]);\n\n  // Observing is done in a separate effect to avoid this effect running\n  // when 'onLayout' changes.\n  useLayoutEffect(() => {\n    var node = ref.current;\n    if (node != null && observer != null) {\n      if (typeof node[DOM_LAYOUT_HANDLER_NAME] === 'function') {\n        observer.observe(node);\n      } else {\n        observer.unobserve(node);\n      }\n    }\n    return () => {\n      if (node != null && observer != null) {\n        observer.unobserve(node);\n      }\n    };\n  }, [ref, observer]);\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * useLayoutEffect throws an error on the server. On the few occasions where is\n * problematic, use this hook.\n *\n * \n */\n\nimport { useEffect, useLayoutEffect } from 'react';\nimport canUseDOM from '../canUseDom';\nvar useLayoutEffectImpl = canUseDOM ? useLayoutEffect : useEffect;\nexport default useLayoutEffectImpl;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar rtlScripts = new Set(['Arab', 'Syrc', 'Samr', 'Mand', 'Thaa', 'Mend', 'Nkoo', 'Adlm', 'Rohg', 'Hebr']);\nvar rtlLangs = new Set(['ae',\n// Avestan\n'ar',\n// Arabic\n'arc',\n// Aramaic\n'bcc',\n// Southern Balochi\n'bqi',\n// Bakthiari\n'ckb',\n// Sorani\n'dv',\n// Dhivehi\n'fa', 'far',\n// Persian\n'glk',\n// Gilaki\n'he', 'iw',\n// Hebrew\n'khw',\n// Khowar\n'ks',\n// Kashmiri\n'ku',\n// Kurdish\n'mzn',\n// Mazanderani\n'nqo',\n// N'Ko\n'pnb',\n// Western Punjabi\n'ps',\n// Pashto\n'sd',\n// Sindhi\n'ug',\n// Uyghur\n'ur',\n// Urdu\n'yi' // Yiddish\n]);\nvar cache = new Map();\n\n/**\n * Determine the writing direction of a locale\n */\nexport function isLocaleRTL(locale) {\n  var cachedRTL = cache.get(locale);\n  if (cachedRTL) {\n    return cachedRTL;\n  }\n  var isRTL = false;\n  // $FlowFixMe\n  if (Intl.Locale) {\n    try {\n      // $FlowFixMe\n      var script = new Intl.Locale(locale).maximize().script;\n      isRTL = rtlScripts.has(script);\n    } catch (_unused) {\n      // RangeError: Incorrect locale information provided\n      // Fallback to inferring from language\n      var lang = locale.split('-')[0];\n      isRTL = rtlLangs.has(lang);\n    }\n  } else {\n    // Fallback to inferring from language\n    var _lang = locale.split('-')[0];\n    isRTL = rtlLangs.has(_lang);\n  }\n  cache.set(locale, isRTL);\n  return isRTL;\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport React, { createContext, useContext } from 'react';\nimport { isLocaleRTL } from './isLocaleRTL';\nvar defaultLocale = {\n  direction: 'ltr',\n  locale: 'en-US'\n};\nvar LocaleContext = /*#__PURE__*/createContext(defaultLocale);\nexport function getLocaleDirection(locale) {\n  return isLocaleRTL(locale) ? 'rtl' : 'ltr';\n}\nexport function LocaleProvider(props) {\n  var direction = props.direction,\n    locale = props.locale,\n    children = props.children;\n  var needsContext = direction || locale;\n  return needsContext ? /*#__PURE__*/React.createElement(LocaleContext.Provider, {\n    children: children,\n    value: {\n      direction: locale ? getLocaleDirection(locale) : direction,\n      locale\n    }\n  }) : children;\n}\nexport function useLocaleContext() {\n  return useContext(LocaleContext);\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport mergeRefs from '../mergeRefs';\nexport default function useMergeRefs() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  return React.useMemo(() => mergeRefs(...args),\n  // eslint-disable-next-line\n  [...args]);\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport UIManager from '../../exports/UIManager';\nimport useStable from '../useStable';\n\n/**\n * Adds non-standard methods to the hode element. This is temporarily until an\n * API like `ReactNative.measure(hostRef, callback)` is added to React Native.\n */\nexport default function usePlatformMethods(_ref) {\n  var pointerEvents = _ref.pointerEvents,\n    style = _ref.style;\n  // Avoid creating a new ref on every render.\n  var ref = useStable(() => hostNode => {\n    if (hostNode != null) {\n      hostNode.measure = callback => UIManager.measure(hostNode, callback);\n      hostNode.measureLayout = (relativeToNode, success, failure) => UIManager.measureLayout(hostNode, relativeToNode, failure, success);\n      hostNode.measureInWindow = callback => UIManager.measureInWindow(hostNode, callback);\n    }\n  });\n  return ref;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nvar DELAY = 'DELAY';\nvar ERROR = 'ERROR';\nvar LONG_PRESS_DETECTED = 'LONG_PRESS_DETECTED';\nvar NOT_RESPONDER = 'NOT_RESPONDER';\nvar RESPONDER_ACTIVE_LONG_PRESS_START = 'RESPONDER_ACTIVE_LONG_PRESS_START';\nvar RESPONDER_ACTIVE_PRESS_START = 'RESPONDER_ACTIVE_PRESS_START';\nvar RESPONDER_INACTIVE_PRESS_START = 'RESPONDER_INACTIVE_PRESS_START';\nvar RESPONDER_GRANT = 'RESPONDER_GRANT';\nvar RESPONDER_RELEASE = 'RESPONDER_RELEASE';\nvar RESPONDER_TERMINATED = 'RESPONDER_TERMINATED';\nvar Transitions = Object.freeze({\n  NOT_RESPONDER: {\n    DELAY: ERROR,\n    RESPONDER_GRANT: RESPONDER_INACTIVE_PRESS_START,\n    RESPONDER_RELEASE: ERROR,\n    RESPONDER_TERMINATED: ERROR,\n    LONG_PRESS_DETECTED: ERROR\n  },\n  RESPONDER_INACTIVE_PRESS_START: {\n    DELAY: RESPONDER_ACTIVE_PRESS_START,\n    RESPONDER_GRANT: ERROR,\n    RESPONDER_RELEASE: NOT_RESPONDER,\n    RESPONDER_TERMINATED: NOT_RESPONDER,\n    LONG_PRESS_DETECTED: ERROR\n  },\n  RESPONDER_ACTIVE_PRESS_START: {\n    DELAY: ERROR,\n    RESPONDER_GRANT: ERROR,\n    RESPONDER_RELEASE: NOT_RESPONDER,\n    RESPONDER_TERMINATED: NOT_RESPONDER,\n    LONG_PRESS_DETECTED: RESPONDER_ACTIVE_LONG_PRESS_START\n  },\n  RESPONDER_ACTIVE_LONG_PRESS_START: {\n    DELAY: ERROR,\n    RESPONDER_GRANT: ERROR,\n    RESPONDER_RELEASE: NOT_RESPONDER,\n    RESPONDER_TERMINATED: NOT_RESPONDER,\n    LONG_PRESS_DETECTED: RESPONDER_ACTIVE_LONG_PRESS_START\n  },\n  ERROR: {\n    DELAY: NOT_RESPONDER,\n    RESPONDER_GRANT: RESPONDER_INACTIVE_PRESS_START,\n    RESPONDER_RELEASE: NOT_RESPONDER,\n    RESPONDER_TERMINATED: NOT_RESPONDER,\n    LONG_PRESS_DETECTED: NOT_RESPONDER\n  }\n});\nvar getElementRole = element => element.getAttribute('role');\nvar getElementType = element => element.tagName.toLowerCase();\nvar isActiveSignal = signal => signal === RESPONDER_ACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_LONG_PRESS_START;\nvar isButtonRole = element => getElementRole(element) === 'button';\nvar isPressStartSignal = signal => signal === RESPONDER_INACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_PRESS_START || signal === RESPONDER_ACTIVE_LONG_PRESS_START;\nvar isTerminalSignal = signal => signal === RESPONDER_TERMINATED || signal === RESPONDER_RELEASE;\nvar isValidKeyPress = event => {\n  var key = event.key,\n    target = event.target;\n  var isSpacebar = key === ' ' || key === 'Spacebar';\n  var isButtonish = getElementType(target) === 'button' || isButtonRole(target);\n  return key === 'Enter' || isSpacebar && isButtonish;\n};\nvar DEFAULT_LONG_PRESS_DELAY_MS = 450; // 500 - 50\nvar DEFAULT_PRESS_DELAY_MS = 50;\n\n/**\n * =========================== PressResponder Tutorial ===========================\n *\n * The `PressResponder` class helps you create press interactions by analyzing the\n * geometry of elements and observing when another responder (e.g. ScrollView)\n * has stolen the touch lock. It offers hooks for your component to provide\n * interaction feedback to the user:\n *\n * - When a press has activated (e.g. highlight an element)\n * - When a press has deactivated (e.g. un-highlight an element)\n * - When a press sould trigger an action, meaning it activated and deactivated\n *   while within the geometry of the element without the lock being stolen.\n *\n * A high quality interaction isn't as simple as you might think. There should\n * be a slight delay before activation. Moving your finger beyond an element's\n * bounds should trigger deactivation, but moving the same finger back within an\n * element's bounds should trigger reactivation.\n *\n * In order to use `PressResponder`, do the following:\n *\n *     const pressResponder = new PressResponder(config);\n *\n * 2. Choose the rendered component who should collect the press events. On that\n *    element, spread `pressability.getEventHandlers()` into its props.\n *\n *    return (\n *      <View {...this.state.pressResponder.getEventHandlers()} />\n *    );\n *\n * 3. Reset `PressResponder` when your component unmounts.\n *\n *    componentWillUnmount() {\n *      this.state.pressResponder.reset();\n *    }\n *\n * ==================== Implementation Details ====================\n *\n * `PressResponder` only assumes that there exists a `HitRect` node. The `PressRect`\n * is an abstract box that is extended beyond the `HitRect`.\n *\n * # Geometry\n *\n *  ┌────────────────────────┐\n *  │  ┌──────────────────┐  │ - Presses start anywhere within `HitRect`.\n *  │  │  ┌────────────┐  │  │\n *  │  │  │ VisualRect │  │  │\n *  │  │  └────────────┘  │  │ - When pressed down for sufficient amount of time\n *  │  │    HitRect       │  │   before letting up, `VisualRect` activates.\n *  │  └──────────────────┘  │\n *  │       Out Region   o   │\n *  └────────────────────│───┘\n *                       └────── When the press is released outside the `HitRect`,\n *                               the responder is NOT eligible for a \"press\".\n *\n * # State Machine\n *\n * ┌───────────────┐ ◀──── RESPONDER_RELEASE\n * │ NOT_RESPONDER │\n * └───┬───────────┘ ◀──── RESPONDER_TERMINATED\n *     │\n *     │ RESPONDER_GRANT (HitRect)\n *     │\n *     ▼\n * ┌─────────────────────┐          ┌───────────────────┐              ┌───────────────────┐\n * │ RESPONDER_INACTIVE_ │  DELAY   │ RESPONDER_ACTIVE_ │  T + DELAY   │ RESPONDER_ACTIVE_ │\n * │ PRESS_START         ├────────▶ │ PRESS_START       ├────────────▶ │ LONG_PRESS_START  │\n * └─────────────────────┘          └───────────────────┘              └───────────────────┘\n *\n * T + DELAY => LONG_PRESS_DELAY + DELAY\n *\n * Not drawn are the side effects of each transition. The most important side\n * effect is the invocation of `onLongPress`. Only when the browser produces a\n * `click` event is `onPress` invoked.\n */\nexport default class PressResponder {\n  constructor(config) {\n    this._eventHandlers = null;\n    this._isPointerTouch = false;\n    this._longPressDelayTimeout = null;\n    this._longPressDispatched = false;\n    this._pressDelayTimeout = null;\n    this._pressOutDelayTimeout = null;\n    this._touchState = NOT_RESPONDER;\n    this._responderElement = null;\n    this.configure(config);\n  }\n  configure(config) {\n    this._config = config;\n  }\n\n  /**\n   * Resets any pending timers. This should be called on unmount.\n   */\n  reset() {\n    this._cancelLongPressDelayTimeout();\n    this._cancelPressDelayTimeout();\n    this._cancelPressOutDelayTimeout();\n  }\n\n  /**\n   * Returns a set of props to spread into the interactive element.\n   */\n  getEventHandlers() {\n    if (this._eventHandlers == null) {\n      this._eventHandlers = this._createEventHandlers();\n    }\n    return this._eventHandlers;\n  }\n  _createEventHandlers() {\n    var start = (event, shouldDelay) => {\n      event.persist();\n      this._cancelPressOutDelayTimeout();\n      this._longPressDispatched = false;\n      this._selectionTerminated = false;\n      this._touchState = NOT_RESPONDER;\n      this._isPointerTouch = event.nativeEvent.type === 'touchstart';\n      this._receiveSignal(RESPONDER_GRANT, event);\n      var delayPressStart = normalizeDelay(this._config.delayPressStart, 0, DEFAULT_PRESS_DELAY_MS);\n      if (shouldDelay !== false && delayPressStart > 0) {\n        this._pressDelayTimeout = setTimeout(() => {\n          this._receiveSignal(DELAY, event);\n        }, delayPressStart);\n      } else {\n        this._receiveSignal(DELAY, event);\n      }\n      var delayLongPress = normalizeDelay(this._config.delayLongPress, 10, DEFAULT_LONG_PRESS_DELAY_MS);\n      this._longPressDelayTimeout = setTimeout(() => {\n        this._handleLongPress(event);\n      }, delayLongPress + delayPressStart);\n    };\n    var end = event => {\n      this._receiveSignal(RESPONDER_RELEASE, event);\n    };\n    var keyupHandler = event => {\n      var onPress = this._config.onPress;\n      var target = event.target;\n      if (this._touchState !== NOT_RESPONDER && isValidKeyPress(event)) {\n        end(event);\n        document.removeEventListener('keyup', keyupHandler);\n        var role = target.getAttribute('role');\n        var elementType = getElementType(target);\n        var isNativeInteractiveElement = role === 'link' || elementType === 'a' || elementType === 'button' || elementType === 'input' || elementType === 'select' || elementType === 'textarea';\n        var isActiveElement = this._responderElement === target;\n        if (onPress != null && !isNativeInteractiveElement && isActiveElement) {\n          onPress(event);\n        }\n        this._responderElement = null;\n      }\n    };\n    return {\n      onStartShouldSetResponder: event => {\n        var disabled = this._config.disabled;\n        if (disabled && isButtonRole(event.currentTarget)) {\n          event.stopPropagation();\n        }\n        if (disabled == null) {\n          return true;\n        }\n        return !disabled;\n      },\n      onKeyDown: event => {\n        var disabled = this._config.disabled;\n        var key = event.key,\n          target = event.target;\n        if (!disabled && isValidKeyPress(event)) {\n          if (this._touchState === NOT_RESPONDER) {\n            start(event, false);\n            this._responderElement = target;\n            // Listen to 'keyup' on document to account for situations where\n            // focus is moved to another element during 'keydown'.\n            document.addEventListener('keyup', keyupHandler);\n          }\n          var isSpacebarKey = key === ' ' || key === 'Spacebar';\n          var role = getElementRole(target);\n          var isButtonLikeRole = role === 'button' || role === 'menuitem';\n          if (isSpacebarKey && isButtonLikeRole && getElementType(target) !== 'button') {\n            // Prevent spacebar scrolling the window if using non-native button\n            event.preventDefault();\n          }\n          event.stopPropagation();\n        }\n      },\n      onResponderGrant: event => start(event),\n      onResponderMove: event => {\n        if (this._config.onPressMove != null) {\n          this._config.onPressMove(event);\n        }\n        var touch = getTouchFromResponderEvent(event);\n        if (this._touchActivatePosition != null) {\n          var deltaX = this._touchActivatePosition.pageX - touch.pageX;\n          var deltaY = this._touchActivatePosition.pageY - touch.pageY;\n          if (Math.hypot(deltaX, deltaY) > 10) {\n            this._cancelLongPressDelayTimeout();\n          }\n        }\n      },\n      onResponderRelease: event => end(event),\n      onResponderTerminate: event => {\n        if (event.nativeEvent.type === 'selectionchange') {\n          this._selectionTerminated = true;\n        }\n        this._receiveSignal(RESPONDER_TERMINATED, event);\n      },\n      onResponderTerminationRequest: event => {\n        var _this$_config = this._config,\n          cancelable = _this$_config.cancelable,\n          disabled = _this$_config.disabled,\n          onLongPress = _this$_config.onLongPress;\n        // If `onLongPress` is provided, don't terminate on `contextmenu` as default\n        // behavior will be prevented for non-mouse pointers.\n        if (!disabled && onLongPress != null && this._isPointerTouch && event.nativeEvent.type === 'contextmenu') {\n          return false;\n        }\n        if (cancelable == null) {\n          return true;\n        }\n        return cancelable;\n      },\n      // NOTE: this diverges from react-native in 3 significant ways:\n      // * The `onPress` callback is not connected to the responder system (the native\n      //  `click` event must be used but is dispatched in many scenarios where no pointers\n      //   are on the screen.) Therefore, it's possible for `onPress` to be called without\n      //   `onPress{Start,End}` being called first.\n      // * The `onPress` callback is only be called on the first ancestor of the native\n      //   `click` target that is using the PressResponder.\n      // * The event's `nativeEvent` is a `MouseEvent` not a `TouchEvent`.\n      onClick: event => {\n        var _this$_config2 = this._config,\n          disabled = _this$_config2.disabled,\n          onPress = _this$_config2.onPress;\n        if (!disabled) {\n          // If long press dispatched, cancel default click behavior.\n          // If the responder terminated because text was selected during the gesture,\n          // cancel the default click behavior.\n          event.stopPropagation();\n          if (this._longPressDispatched || this._selectionTerminated) {\n            event.preventDefault();\n          } else if (onPress != null && event.altKey === false) {\n            onPress(event);\n          }\n        } else {\n          if (isButtonRole(event.currentTarget)) {\n            event.stopPropagation();\n          }\n        }\n      },\n      // If `onLongPress` is provided and a touch pointer is being used, prevent the\n      // default context menu from opening.\n      onContextMenu: event => {\n        var _this$_config3 = this._config,\n          disabled = _this$_config3.disabled,\n          onLongPress = _this$_config3.onLongPress;\n        if (!disabled) {\n          if (onLongPress != null && this._isPointerTouch && !event.defaultPrevented) {\n            event.preventDefault();\n            event.stopPropagation();\n          }\n        } else {\n          if (isButtonRole(event.currentTarget)) {\n            event.stopPropagation();\n          }\n        }\n      }\n    };\n  }\n\n  /**\n   * Receives a state machine signal, performs side effects of the transition\n   * and stores the new state. Validates the transition as well.\n   */\n  _receiveSignal(signal, event) {\n    var prevState = this._touchState;\n    var nextState = null;\n    if (Transitions[prevState] != null) {\n      nextState = Transitions[prevState][signal];\n    }\n    if (this._touchState === NOT_RESPONDER && signal === RESPONDER_RELEASE) {\n      return;\n    }\n    if (nextState == null || nextState === ERROR) {\n      console.error(\"PressResponder: Invalid signal \" + signal + \" for state \" + prevState + \" on responder\");\n    } else if (prevState !== nextState) {\n      this._performTransitionSideEffects(prevState, nextState, signal, event);\n      this._touchState = nextState;\n    }\n  }\n\n  /**\n   * Performs a transition between touchable states and identify any activations\n   * or deactivations (and callback invocations).\n   */\n  _performTransitionSideEffects(prevState, nextState, signal, event) {\n    if (isTerminalSignal(signal)) {\n      // Pressable suppression of contextmenu on windows.\n      // On Windows, the contextmenu is displayed after pointerup.\n      // https://github.com/necolas/react-native-web/issues/2296\n      setTimeout(() => {\n        this._isPointerTouch = false;\n      }, 0);\n      this._touchActivatePosition = null;\n      this._cancelLongPressDelayTimeout();\n    }\n    if (isPressStartSignal(prevState) && signal === LONG_PRESS_DETECTED) {\n      var onLongPress = this._config.onLongPress;\n      // Long press is not supported for keyboards because 'click' can be dispatched\n      // immediately (and multiple times) after 'keydown'.\n      if (onLongPress != null && event.nativeEvent.key == null) {\n        onLongPress(event);\n        this._longPressDispatched = true;\n      }\n    }\n    var isPrevActive = isActiveSignal(prevState);\n    var isNextActive = isActiveSignal(nextState);\n    if (!isPrevActive && isNextActive) {\n      this._activate(event);\n    } else if (isPrevActive && !isNextActive) {\n      this._deactivate(event);\n    }\n    if (isPressStartSignal(prevState) && signal === RESPONDER_RELEASE) {\n      var _this$_config4 = this._config,\n        _onLongPress = _this$_config4.onLongPress,\n        onPress = _this$_config4.onPress;\n      if (onPress != null) {\n        var isPressCanceledByLongPress = _onLongPress != null && prevState === RESPONDER_ACTIVE_LONG_PRESS_START;\n        if (!isPressCanceledByLongPress) {\n          // If we never activated (due to delays), activate and deactivate now.\n          if (!isNextActive && !isPrevActive) {\n            this._activate(event);\n            this._deactivate(event);\n          }\n        }\n      }\n    }\n    this._cancelPressDelayTimeout();\n  }\n  _activate(event) {\n    var _this$_config5 = this._config,\n      onPressChange = _this$_config5.onPressChange,\n      onPressStart = _this$_config5.onPressStart;\n    var touch = getTouchFromResponderEvent(event);\n    this._touchActivatePosition = {\n      pageX: touch.pageX,\n      pageY: touch.pageY\n    };\n    if (onPressStart != null) {\n      onPressStart(event);\n    }\n    if (onPressChange != null) {\n      onPressChange(true);\n    }\n  }\n  _deactivate(event) {\n    var _this$_config6 = this._config,\n      onPressChange = _this$_config6.onPressChange,\n      onPressEnd = _this$_config6.onPressEnd;\n    function end() {\n      if (onPressEnd != null) {\n        onPressEnd(event);\n      }\n      if (onPressChange != null) {\n        onPressChange(false);\n      }\n    }\n    var delayPressEnd = normalizeDelay(this._config.delayPressEnd);\n    if (delayPressEnd > 0) {\n      this._pressOutDelayTimeout = setTimeout(() => {\n        end();\n      }, delayPressEnd);\n    } else {\n      end();\n    }\n  }\n  _handleLongPress(event) {\n    if (this._touchState === RESPONDER_ACTIVE_PRESS_START || this._touchState === RESPONDER_ACTIVE_LONG_PRESS_START) {\n      this._receiveSignal(LONG_PRESS_DETECTED, event);\n    }\n  }\n  _cancelLongPressDelayTimeout() {\n    if (this._longPressDelayTimeout != null) {\n      clearTimeout(this._longPressDelayTimeout);\n      this._longPressDelayTimeout = null;\n    }\n  }\n  _cancelPressDelayTimeout() {\n    if (this._pressDelayTimeout != null) {\n      clearTimeout(this._pressDelayTimeout);\n      this._pressDelayTimeout = null;\n    }\n  }\n  _cancelPressOutDelayTimeout() {\n    if (this._pressOutDelayTimeout != null) {\n      clearTimeout(this._pressOutDelayTimeout);\n      this._pressOutDelayTimeout = null;\n    }\n  }\n}\nfunction normalizeDelay(delay, min, fallback) {\n  if (min === void 0) {\n    min = 0;\n  }\n  if (fallback === void 0) {\n    fallback = 0;\n  }\n  return Math.max(min, delay !== null && delay !== void 0 ? delay : fallback);\n}\nfunction getTouchFromResponderEvent(event) {\n  var _event$nativeEvent = event.nativeEvent,\n    changedTouches = _event$nativeEvent.changedTouches,\n    touches = _event$nativeEvent.touches;\n  if (touches != null && touches.length > 0) {\n    return touches[0];\n  }\n  if (changedTouches != null && changedTouches.length > 0) {\n    return changedTouches[0];\n  }\n  return event.nativeEvent;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport PressResponder from './PressResponder';\nimport { useDebugValue, useEffect, useRef } from 'react';\nexport default function usePressEvents(hostRef, config) {\n  var pressResponderRef = useRef(null);\n  if (pressResponderRef.current == null) {\n    pressResponderRef.current = new PressResponder(config);\n  }\n  var pressResponder = pressResponderRef.current;\n\n  // Re-configure to use the current node and configuration.\n  useEffect(() => {\n    pressResponder.configure(config);\n  }, [config, pressResponder]);\n\n  // Reset the `pressResponder` when cleanup needs to occur. This is\n  // a separate effect because we do not want to rest the responder when `config` changes.\n  useEffect(() => {\n    return () => {\n      pressResponder.reset();\n    };\n  }, [pressResponder]);\n  useDebugValue(config);\n  return pressResponder.getEventHandlers();\n}","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport getBoundingClientRect from '../../modules/getBoundingClientRect';\nvar emptyFunction = () => {};\nvar emptyObject = {};\nvar emptyArray = [];\n\n/**\n * Safari produces very large identifiers that would cause the `touchBank` array\n * length to be so large as to crash the browser, if not normalized like this.\n * In the future the `touchBank` should use an object/map instead.\n */\nfunction normalizeIdentifier(identifier) {\n  return identifier > 20 ? identifier % 20 : identifier;\n}\n\n/**\n * Converts a native DOM event to a ResponderEvent.\n * Mouse events are transformed into fake touch events.\n */\nexport default function createResponderEvent(domEvent, responderTouchHistoryStore) {\n  var rect;\n  var propagationWasStopped = false;\n  var changedTouches;\n  var touches;\n  var domEventChangedTouches = domEvent.changedTouches;\n  var domEventType = domEvent.type;\n  var metaKey = domEvent.metaKey === true;\n  var shiftKey = domEvent.shiftKey === true;\n  var force = domEventChangedTouches && domEventChangedTouches[0].force || 0;\n  var identifier = normalizeIdentifier(domEventChangedTouches && domEventChangedTouches[0].identifier || 0);\n  var clientX = domEventChangedTouches && domEventChangedTouches[0].clientX || domEvent.clientX;\n  var clientY = domEventChangedTouches && domEventChangedTouches[0].clientY || domEvent.clientY;\n  var pageX = domEventChangedTouches && domEventChangedTouches[0].pageX || domEvent.pageX;\n  var pageY = domEventChangedTouches && domEventChangedTouches[0].pageY || domEvent.pageY;\n  var preventDefault = typeof domEvent.preventDefault === 'function' ? domEvent.preventDefault.bind(domEvent) : emptyFunction;\n  var timestamp = domEvent.timeStamp;\n  function normalizeTouches(touches) {\n    return Array.prototype.slice.call(touches).map(touch => {\n      return {\n        force: touch.force,\n        identifier: normalizeIdentifier(touch.identifier),\n        get locationX() {\n          return locationX(touch.clientX);\n        },\n        get locationY() {\n          return locationY(touch.clientY);\n        },\n        pageX: touch.pageX,\n        pageY: touch.pageY,\n        target: touch.target,\n        timestamp\n      };\n    });\n  }\n  if (domEventChangedTouches != null) {\n    changedTouches = normalizeTouches(domEventChangedTouches);\n    touches = normalizeTouches(domEvent.touches);\n  } else {\n    var emulatedTouches = [{\n      force,\n      identifier,\n      get locationX() {\n        return locationX(clientX);\n      },\n      get locationY() {\n        return locationY(clientY);\n      },\n      pageX,\n      pageY,\n      target: domEvent.target,\n      timestamp\n    }];\n    changedTouches = emulatedTouches;\n    touches = domEventType === 'mouseup' || domEventType === 'dragstart' ? emptyArray : emulatedTouches;\n  }\n  var responderEvent = {\n    bubbles: true,\n    cancelable: true,\n    // `currentTarget` is set before dispatch\n    currentTarget: null,\n    defaultPrevented: domEvent.defaultPrevented,\n    dispatchConfig: emptyObject,\n    eventPhase: domEvent.eventPhase,\n    isDefaultPrevented() {\n      return domEvent.defaultPrevented;\n    },\n    isPropagationStopped() {\n      return propagationWasStopped;\n    },\n    isTrusted: domEvent.isTrusted,\n    nativeEvent: {\n      altKey: false,\n      ctrlKey: false,\n      metaKey,\n      shiftKey,\n      changedTouches,\n      force,\n      identifier,\n      get locationX() {\n        return locationX(clientX);\n      },\n      get locationY() {\n        return locationY(clientY);\n      },\n      pageX,\n      pageY,\n      target: domEvent.target,\n      timestamp,\n      touches,\n      type: domEventType\n    },\n    persist: emptyFunction,\n    preventDefault,\n    stopPropagation() {\n      propagationWasStopped = true;\n    },\n    target: domEvent.target,\n    timeStamp: timestamp,\n    touchHistory: responderTouchHistoryStore.touchHistory\n  };\n\n  // Using getters and functions serves two purposes:\n  // 1) The value of `currentTarget` is not initially available.\n  // 2) Measuring the clientRect may cause layout jank and should only be done on-demand.\n  function locationX(x) {\n    rect = rect || getBoundingClientRect(responderEvent.currentTarget);\n    if (rect) {\n      return x - rect.left;\n    }\n  }\n  function locationY(y) {\n    rect = rect || getBoundingClientRect(responderEvent.currentTarget);\n    if (rect) {\n      return y - rect.top;\n    }\n  }\n  return responderEvent;\n}","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport var BLUR = 'blur';\nexport var CONTEXT_MENU = 'contextmenu';\nexport var FOCUS_OUT = 'focusout';\nexport var MOUSE_DOWN = 'mousedown';\nexport var MOUSE_MOVE = 'mousemove';\nexport var MOUSE_UP = 'mouseup';\nexport var MOUSE_CANCEL = 'dragstart';\nexport var TOUCH_START = 'touchstart';\nexport var TOUCH_MOVE = 'touchmove';\nexport var TOUCH_END = 'touchend';\nexport var TOUCH_CANCEL = 'touchcancel';\nexport var SCROLL = 'scroll';\nexport var SELECT = 'select';\nexport var SELECTION_CHANGE = 'selectionchange';\nexport function isStartish(eventType) {\n  return eventType === TOUCH_START || eventType === MOUSE_DOWN;\n}\nexport function isMoveish(eventType) {\n  return eventType === TOUCH_MOVE || eventType === MOUSE_MOVE;\n}\nexport function isEndish(eventType) {\n  return eventType === TOUCH_END || eventType === MOUSE_UP || isCancelish(eventType);\n}\nexport function isCancelish(eventType) {\n  return eventType === TOUCH_CANCEL || eventType === MOUSE_CANCEL;\n}\nexport function isScroll(eventType) {\n  return eventType === SCROLL;\n}\nexport function isSelectionChange(eventType) {\n  return eventType === SELECT || eventType === SELECTION_CHANGE;\n}","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport isSelectionValid from '../../modules/isSelectionValid';\nvar keyName = '__reactResponderId';\nfunction getEventPath(domEvent) {\n  // The 'selectionchange' event always has the 'document' as the target.\n  // Use the anchor node as the initial target to reconstruct a path.\n  // (We actually only need the first \"responder\" node in practice.)\n  if (domEvent.type === 'selectionchange') {\n    var target = window.getSelection().anchorNode;\n    return composedPathFallback(target);\n  } else {\n    var path = domEvent.composedPath != null ? domEvent.composedPath() : composedPathFallback(domEvent.target);\n    return path;\n  }\n}\nfunction composedPathFallback(target) {\n  var path = [];\n  while (target != null && target !== document.body) {\n    path.push(target);\n    target = target.parentNode;\n  }\n  return path;\n}\n\n/**\n * Retrieve the responderId from a host node\n */\nfunction getResponderId(node) {\n  if (node != null) {\n    return node[keyName];\n  }\n  return null;\n}\n\n/**\n * Store the responderId on a host node\n */\nexport function setResponderId(node, id) {\n  if (node != null) {\n    node[keyName] = id;\n  }\n}\n\n/**\n * Filter the event path to contain only the nodes attached to the responder system\n */\nexport function getResponderPaths(domEvent) {\n  var idPath = [];\n  var nodePath = [];\n  var eventPath = getEventPath(domEvent);\n  for (var i = 0; i < eventPath.length; i++) {\n    var node = eventPath[i];\n    var id = getResponderId(node);\n    if (id != null) {\n      idPath.push(id);\n      nodePath.push(node);\n    }\n  }\n  return {\n    idPath,\n    nodePath\n  };\n}\n\n/**\n * Walk the paths and find the first common ancestor\n */\nexport function getLowestCommonAncestor(pathA, pathB) {\n  var pathALength = pathA.length;\n  var pathBLength = pathB.length;\n  if (\n  // If either path is empty\n  pathALength === 0 || pathBLength === 0 ||\n  // If the last elements aren't the same there can't be a common ancestor\n  // that is connected to the responder system\n  pathA[pathALength - 1] !== pathB[pathBLength - 1]) {\n    return null;\n  }\n  var itemA = pathA[0];\n  var indexA = 0;\n  var itemB = pathB[0];\n  var indexB = 0;\n\n  // If A is deeper, skip indices that can't match.\n  if (pathALength - pathBLength > 0) {\n    indexA = pathALength - pathBLength;\n    itemA = pathA[indexA];\n    pathALength = pathBLength;\n  }\n\n  // If B is deeper, skip indices that can't match\n  if (pathBLength - pathALength > 0) {\n    indexB = pathBLength - pathALength;\n    itemB = pathB[indexB];\n    pathBLength = pathALength;\n  }\n\n  // Walk in lockstep until a match is found\n  var depth = pathALength;\n  while (depth--) {\n    if (itemA === itemB) {\n      return itemA;\n    }\n    itemA = pathA[indexA++];\n    itemB = pathB[indexB++];\n  }\n  return null;\n}\n\n/**\n * Determine whether any of the active touches are within the current responder.\n * This cannot rely on W3C `targetTouches`, as neither IE11 nor Safari implement it.\n */\nexport function hasTargetTouches(target, touches) {\n  if (!touches || touches.length === 0) {\n    return false;\n  }\n  for (var i = 0; i < touches.length; i++) {\n    var node = touches[i].target;\n    if (node != null) {\n      if (target.contains(node)) {\n        return true;\n      }\n    }\n  }\n  return false;\n}\n\n/**\n * Ignore 'selectionchange' events that don't correspond with a person's intent to\n * select text.\n */\nexport function hasValidSelection(domEvent) {\n  if (domEvent.type === 'selectionchange') {\n    return isSelectionValid();\n  }\n  return domEvent.type === 'select';\n}\n\n/**\n * Events are only valid if the primary button was used without specific modifier keys.\n */\nexport function isPrimaryPointerDown(domEvent) {\n  var altKey = domEvent.altKey,\n    button = domEvent.button,\n    buttons = domEvent.buttons,\n    ctrlKey = domEvent.ctrlKey,\n    type = domEvent.type;\n  var isTouch = type === 'touchstart' || type === 'touchmove';\n  var isPrimaryMouseDown = type === 'mousedown' && (button === 0 || buttons === 1);\n  var isPrimaryMouseMove = type === 'mousemove' && buttons === 1;\n  var noModifiers = altKey === false && ctrlKey === false;\n  if (isTouch || isPrimaryMouseDown && noModifiers || isPrimaryMouseMove && noModifiers) {\n    return true;\n  }\n  return false;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { isStartish, isMoveish, isEndish } from './ResponderEventTypes';\n/**\n * Tracks the position and time of each active touch by `touch.identifier`. We\n * should typically only see IDs in the range of 1-20 because IDs get recycled\n * when touches end and start again.\n */\n\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nvar MAX_TOUCH_BANK = 20;\nfunction timestampForTouch(touch) {\n  // The legacy internal implementation provides \"timeStamp\", which has been\n  // renamed to \"timestamp\".\n  return touch.timeStamp || touch.timestamp;\n}\n\n/**\n * TODO: Instead of making gestures recompute filtered velocity, we could\n * include a built in velocity computation that can be reused globally.\n */\nfunction createTouchRecord(touch) {\n  return {\n    touchActive: true,\n    startPageX: touch.pageX,\n    startPageY: touch.pageY,\n    startTimeStamp: timestampForTouch(touch),\n    currentPageX: touch.pageX,\n    currentPageY: touch.pageY,\n    currentTimeStamp: timestampForTouch(touch),\n    previousPageX: touch.pageX,\n    previousPageY: touch.pageY,\n    previousTimeStamp: timestampForTouch(touch)\n  };\n}\nfunction resetTouchRecord(touchRecord, touch) {\n  touchRecord.touchActive = true;\n  touchRecord.startPageX = touch.pageX;\n  touchRecord.startPageY = touch.pageY;\n  touchRecord.startTimeStamp = timestampForTouch(touch);\n  touchRecord.currentPageX = touch.pageX;\n  touchRecord.currentPageY = touch.pageY;\n  touchRecord.currentTimeStamp = timestampForTouch(touch);\n  touchRecord.previousPageX = touch.pageX;\n  touchRecord.previousPageY = touch.pageY;\n  touchRecord.previousTimeStamp = timestampForTouch(touch);\n}\nfunction getTouchIdentifier(_ref) {\n  var identifier = _ref.identifier;\n  if (identifier == null) {\n    console.error('Touch object is missing identifier.');\n  }\n  if (__DEV__) {\n    if (identifier > MAX_TOUCH_BANK) {\n      console.error('Touch identifier %s is greater than maximum supported %s which causes ' + 'performance issues backfilling array locations for all of the indices.', identifier, MAX_TOUCH_BANK);\n    }\n  }\n  return identifier;\n}\nfunction recordTouchStart(touch, touchHistory) {\n  var identifier = getTouchIdentifier(touch);\n  var touchRecord = touchHistory.touchBank[identifier];\n  if (touchRecord) {\n    resetTouchRecord(touchRecord, touch);\n  } else {\n    touchHistory.touchBank[identifier] = createTouchRecord(touch);\n  }\n  touchHistory.mostRecentTimeStamp = timestampForTouch(touch);\n}\nfunction recordTouchMove(touch, touchHistory) {\n  var touchRecord = touchHistory.touchBank[getTouchIdentifier(touch)];\n  if (touchRecord) {\n    touchRecord.touchActive = true;\n    touchRecord.previousPageX = touchRecord.currentPageX;\n    touchRecord.previousPageY = touchRecord.currentPageY;\n    touchRecord.previousTimeStamp = touchRecord.currentTimeStamp;\n    touchRecord.currentPageX = touch.pageX;\n    touchRecord.currentPageY = touch.pageY;\n    touchRecord.currentTimeStamp = timestampForTouch(touch);\n    touchHistory.mostRecentTimeStamp = timestampForTouch(touch);\n  } else {\n    console.warn('Cannot record touch move without a touch start.\\n', \"Touch Move: \" + printTouch(touch) + \"\\n\", \"Touch Bank: \" + printTouchBank(touchHistory));\n  }\n}\nfunction recordTouchEnd(touch, touchHistory) {\n  var touchRecord = touchHistory.touchBank[getTouchIdentifier(touch)];\n  if (touchRecord) {\n    touchRecord.touchActive = false;\n    touchRecord.previousPageX = touchRecord.currentPageX;\n    touchRecord.previousPageY = touchRecord.currentPageY;\n    touchRecord.previousTimeStamp = touchRecord.currentTimeStamp;\n    touchRecord.currentPageX = touch.pageX;\n    touchRecord.currentPageY = touch.pageY;\n    touchRecord.currentTimeStamp = timestampForTouch(touch);\n    touchHistory.mostRecentTimeStamp = timestampForTouch(touch);\n  } else {\n    console.warn('Cannot record touch end without a touch start.\\n', \"Touch End: \" + printTouch(touch) + \"\\n\", \"Touch Bank: \" + printTouchBank(touchHistory));\n  }\n}\nfunction printTouch(touch) {\n  return JSON.stringify({\n    identifier: touch.identifier,\n    pageX: touch.pageX,\n    pageY: touch.pageY,\n    timestamp: timestampForTouch(touch)\n  });\n}\nfunction printTouchBank(touchHistory) {\n  var touchBank = touchHistory.touchBank;\n  var printed = JSON.stringify(touchBank.slice(0, MAX_TOUCH_BANK));\n  if (touchBank.length > MAX_TOUCH_BANK) {\n    printed += ' (original size: ' + touchBank.length + ')';\n  }\n  return printed;\n}\nexport class ResponderTouchHistoryStore {\n  constructor() {\n    this._touchHistory = {\n      touchBank: [],\n      //Array<TouchRecord>\n      numberActiveTouches: 0,\n      // If there is only one active touch, we remember its location. This prevents\n      // us having to loop through all of the touches all the time in the most\n      // common case.\n      indexOfSingleActiveTouch: -1,\n      mostRecentTimeStamp: 0\n    };\n  }\n  recordTouchTrack(topLevelType, nativeEvent) {\n    var touchHistory = this._touchHistory;\n    if (isMoveish(topLevelType)) {\n      nativeEvent.changedTouches.forEach(touch => recordTouchMove(touch, touchHistory));\n    } else if (isStartish(topLevelType)) {\n      nativeEvent.changedTouches.forEach(touch => recordTouchStart(touch, touchHistory));\n      touchHistory.numberActiveTouches = nativeEvent.touches.length;\n      if (touchHistory.numberActiveTouches === 1) {\n        touchHistory.indexOfSingleActiveTouch = nativeEvent.touches[0].identifier;\n      }\n    } else if (isEndish(topLevelType)) {\n      nativeEvent.changedTouches.forEach(touch => recordTouchEnd(touch, touchHistory));\n      touchHistory.numberActiveTouches = nativeEvent.touches.length;\n      if (touchHistory.numberActiveTouches === 1) {\n        var touchBank = touchHistory.touchBank;\n        for (var i = 0; i < touchBank.length; i++) {\n          var touchTrackToCheck = touchBank[i];\n          if (touchTrackToCheck != null && touchTrackToCheck.touchActive) {\n            touchHistory.indexOfSingleActiveTouch = i;\n            break;\n          }\n        }\n        if (__DEV__) {\n          var activeRecord = touchBank[touchHistory.indexOfSingleActiveTouch];\n          if (!(activeRecord != null && activeRecord.touchActive)) {\n            console.error('Cannot find single active touch.');\n          }\n        }\n      }\n    }\n  }\n  get touchHistory() {\n    return this._touchHistory;\n  }\n}","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n/**\n * RESPONDER EVENT SYSTEM\n *\n * A single, global \"interaction lock\" on views. For a view to be the \"responder\" means\n * that pointer interactions are exclusive to that view and none other. The \"interaction\n * lock\" can be transferred (only) to ancestors of the current \"responder\" as long as\n * pointers continue to be active.\n *\n * Responder being granted:\n *\n * A view can become the \"responder\" after the following events:\n *  * \"pointerdown\" (implemented using \"touchstart\", \"mousedown\")\n *  * \"pointermove\" (implemented using \"touchmove\", \"mousemove\")\n *  * \"scroll\" (while a pointer is down)\n *  * \"selectionchange\" (while a pointer is down)\n *\n * If nothing is already the \"responder\", the event propagates to (capture) and from\n * (bubble) the event target until a view returns `true` for\n * `on*ShouldSetResponder(Capture)`.\n *\n * If something is already the responder, the event propagates to (capture) and from\n * (bubble) the lowest common ancestor of the event target and the current \"responder\".\n * Then negotiation happens between the current \"responder\" and a view that wants to\n * become the \"responder\": see the timing diagram below.\n *\n * (NOTE: Scrolled views either automatically become the \"responder\" or release the\n * \"interaction lock\". A native scroll view that isn't built on top of the responder\n * system must result in the current \"responder\" being notified that it no longer has\n * the \"interaction lock\" - the native system has taken over.\n *\n * Responder being released:\n *\n * As soon as there are no more active pointers that *started* inside descendants\n * of the *current* \"responder\", an `onResponderRelease` event is dispatched to the\n * current \"responder\", and the responder lock is released.\n *\n * Typical sequence of events:\n *  * startShouldSetResponder\n *  * responderGrant/Reject\n *  * responderStart\n *  * responderMove\n *  * responderEnd\n *  * responderRelease\n */\n\n/*                                             Negotiation Performed\n                                             +-----------------------+\n                                            /                         \\\nProcess low level events to    +     Current Responder      +   wantsResponderID\ndetermine who to perform negot-|   (if any exists at all)   |\niation/transition              | Otherwise just pass through|\n-------------------------------+----------------------------+------------------+\nBubble to find first ID        |                            |\nto return true:wantsResponderID|                            |\n                               |                            |\n     +--------------+          |                            |\n     | onTouchStart |          |                            |\n     +------+-------+    none  |                            |\n            |            return|                            |\n+-----------v-------------+true| +------------------------+ |\n|onStartShouldSetResponder|----->| onResponderStart (cur) |<-----------+\n+-----------+-------------+    | +------------------------+ |          |\n            |                  |                            | +--------+-------+\n            | returned true for|       false:REJECT +-------->|onResponderReject\n            | wantsResponderID |                    |       | +----------------+\n            | (now attempt     | +------------------+-----+ |\n            |  handoff)        | | onResponder            | |\n            +------------------->|    TerminationRequest  | |\n                               | +------------------+-----+ |\n                               |                    |       | +----------------+\n                               |         true:GRANT +-------->|onResponderGrant|\n                               |                            | +--------+-------+\n                               | +------------------------+ |          |\n                               | | onResponderTerminate   |<-----------+\n                               | +------------------+-----+ |\n                               |                    |       | +----------------+\n                               |                    +-------->|onResponderStart|\n                               |                            | +----------------+\nBubble to find first ID        |                            |\nto return true:wantsResponderID|                            |\n                               |                            |\n     +-------------+           |                            |\n     | onTouchMove |           |                            |\n     +------+------+     none  |                            |\n            |            return|                            |\n+-----------v-------------+true| +------------------------+ |\n|onMoveShouldSetResponder |----->| onResponderMove (cur)  |<-----------+\n+-----------+-------------+    | +------------------------+ |          |\n            |                  |                            | +--------+-------+\n            | returned true for|       false:REJECT +-------->|onResponderReject\n            | wantsResponderID |                    |       | +----------------+\n            | (now attempt     | +------------------+-----+ |\n            |  handoff)        | |   onResponder          | |\n            +------------------->|      TerminationRequest| |\n                               | +------------------+-----+ |\n                               |                    |       | +----------------+\n                               |         true:GRANT +-------->|onResponderGrant|\n                               |                            | +--------+-------+\n                               | +------------------------+ |          |\n                               | |   onResponderTerminate |<-----------+\n                               | +------------------+-----+ |\n                               |                    |       | +----------------+\n                               |                    +-------->|onResponderMove |\n                               |                            | +----------------+\n                               |                            |\n                               |                            |\n      Some active touch started|                            |\n      inside current responder | +------------------------+ |\n      +------------------------->|      onResponderEnd    | |\n      |                        | +------------------------+ |\n  +---+---------+              |                            |\n  | onTouchEnd  |              |                            |\n  +---+---------+              |                            |\n      |                        | +------------------------+ |\n      +------------------------->|     onResponderEnd     | |\n      No active touches started| +-----------+------------+ |\n      inside current responder |             |              |\n                               |             v              |\n                               | +------------------------+ |\n                               | |    onResponderRelease  | |\n                               | +------------------------+ |\n                               |                            |\n                               +                            + */\n\nimport createResponderEvent from './createResponderEvent';\nimport { isCancelish, isEndish, isMoveish, isScroll, isSelectionChange, isStartish } from './ResponderEventTypes';\nimport { getLowestCommonAncestor, getResponderPaths, hasTargetTouches, hasValidSelection, isPrimaryPointerDown, setResponderId } from './utils';\nimport { ResponderTouchHistoryStore } from './ResponderTouchHistoryStore';\nimport canUseDOM from '../canUseDom';\n\n/* ------------ TYPES ------------ */\n\nvar emptyObject = {};\n\n/* ------------ IMPLEMENTATION ------------ */\n\nvar startRegistration = ['onStartShouldSetResponderCapture', 'onStartShouldSetResponder', {\n  bubbles: true\n}];\nvar moveRegistration = ['onMoveShouldSetResponderCapture', 'onMoveShouldSetResponder', {\n  bubbles: true\n}];\nvar scrollRegistration = ['onScrollShouldSetResponderCapture', 'onScrollShouldSetResponder', {\n  bubbles: false\n}];\nvar shouldSetResponderEvents = {\n  touchstart: startRegistration,\n  mousedown: startRegistration,\n  touchmove: moveRegistration,\n  mousemove: moveRegistration,\n  scroll: scrollRegistration\n};\nvar emptyResponder = {\n  id: null,\n  idPath: null,\n  node: null\n};\nvar responderListenersMap = new Map();\nvar isEmulatingMouseEvents = false;\nvar trackedTouchCount = 0;\nvar currentResponder = {\n  id: null,\n  node: null,\n  idPath: null\n};\nvar responderTouchHistoryStore = new ResponderTouchHistoryStore();\nfunction changeCurrentResponder(responder) {\n  currentResponder = responder;\n}\nfunction getResponderConfig(id) {\n  var config = responderListenersMap.get(id);\n  return config != null ? config : emptyObject;\n}\n\n/**\n * Process native events\n *\n * A single event listener is used to manage the responder system.\n * All pointers are tracked in the ResponderTouchHistoryStore. Native events\n * are interpreted in terms of the Responder System and checked to see if\n * the responder should be transferred. Each host node that is attached to\n * the Responder System has an ID, which is used to look up its associated\n * callbacks.\n */\nfunction eventListener(domEvent) {\n  var eventType = domEvent.type;\n  var eventTarget = domEvent.target;\n\n  /**\n   * Manage emulated events and early bailout.\n   * Since PointerEvent is not used yet (lack of support in older Safari), it's\n   * necessary to manually manage the mess of browser touch/mouse events.\n   * And bailout early for termination events when there is no active responder.\n   */\n\n  // Flag when browser may produce emulated events\n  if (eventType === 'touchstart') {\n    isEmulatingMouseEvents = true;\n  }\n  // Remove flag when browser will not produce emulated events\n  if (eventType === 'touchmove' || trackedTouchCount > 1) {\n    isEmulatingMouseEvents = false;\n  }\n  // Ignore various events in particular circumstances\n  if (\n  // Ignore browser emulated mouse events\n  eventType === 'mousedown' && isEmulatingMouseEvents || eventType === 'mousemove' && isEmulatingMouseEvents ||\n  // Ignore mousemove if a mousedown didn't occur first\n  eventType === 'mousemove' && trackedTouchCount < 1) {\n    return;\n  }\n  // Remove flag after emulated events are finished\n  if (isEmulatingMouseEvents && eventType === 'mouseup') {\n    if (trackedTouchCount === 0) {\n      isEmulatingMouseEvents = false;\n    }\n    return;\n  }\n  var isStartEvent = isStartish(eventType) && isPrimaryPointerDown(domEvent);\n  var isMoveEvent = isMoveish(eventType);\n  var isEndEvent = isEndish(eventType);\n  var isScrollEvent = isScroll(eventType);\n  var isSelectionChangeEvent = isSelectionChange(eventType);\n  var responderEvent = createResponderEvent(domEvent, responderTouchHistoryStore);\n\n  /**\n   * Record the state of active pointers\n   */\n\n  if (isStartEvent || isMoveEvent || isEndEvent) {\n    if (domEvent.touches) {\n      trackedTouchCount = domEvent.touches.length;\n    } else {\n      if (isStartEvent) {\n        trackedTouchCount = 1;\n      } else if (isEndEvent) {\n        trackedTouchCount = 0;\n      }\n    }\n    responderTouchHistoryStore.recordTouchTrack(eventType, responderEvent.nativeEvent);\n  }\n\n  /**\n   * Responder System logic\n   */\n\n  var eventPaths = getResponderPaths(domEvent);\n  var wasNegotiated = false;\n  var wantsResponder;\n\n  // If an event occured that might change the current responder...\n  if (isStartEvent || isMoveEvent || isScrollEvent && trackedTouchCount > 0) {\n    // If there is already a responder, prune the event paths to the lowest common ancestor\n    // of the existing responder and deepest target of the event.\n    var currentResponderIdPath = currentResponder.idPath;\n    var eventIdPath = eventPaths.idPath;\n    if (currentResponderIdPath != null && eventIdPath != null) {\n      var lowestCommonAncestor = getLowestCommonAncestor(currentResponderIdPath, eventIdPath);\n      if (lowestCommonAncestor != null) {\n        var indexOfLowestCommonAncestor = eventIdPath.indexOf(lowestCommonAncestor);\n        // Skip the current responder so it doesn't receive unexpected \"shouldSet\" events.\n        var index = indexOfLowestCommonAncestor + (lowestCommonAncestor === currentResponder.id ? 1 : 0);\n        eventPaths = {\n          idPath: eventIdPath.slice(index),\n          nodePath: eventPaths.nodePath.slice(index)\n        };\n      } else {\n        eventPaths = null;\n      }\n    }\n    if (eventPaths != null) {\n      // If a node wants to become the responder, attempt to transfer.\n      wantsResponder = findWantsResponder(eventPaths, domEvent, responderEvent);\n      if (wantsResponder != null) {\n        // Sets responder if none exists, or negotates with existing responder.\n        attemptTransfer(responderEvent, wantsResponder);\n        wasNegotiated = true;\n      }\n    }\n  }\n\n  // If there is now a responder, invoke its callbacks for the lifecycle of the gesture.\n  if (currentResponder.id != null && currentResponder.node != null) {\n    var _currentResponder = currentResponder,\n      id = _currentResponder.id,\n      node = _currentResponder.node;\n    var _getResponderConfig = getResponderConfig(id),\n      onResponderStart = _getResponderConfig.onResponderStart,\n      onResponderMove = _getResponderConfig.onResponderMove,\n      onResponderEnd = _getResponderConfig.onResponderEnd,\n      onResponderRelease = _getResponderConfig.onResponderRelease,\n      onResponderTerminate = _getResponderConfig.onResponderTerminate,\n      onResponderTerminationRequest = _getResponderConfig.onResponderTerminationRequest;\n    responderEvent.bubbles = false;\n    responderEvent.cancelable = false;\n    responderEvent.currentTarget = node;\n\n    // Start\n    if (isStartEvent) {\n      if (onResponderStart != null) {\n        responderEvent.dispatchConfig.registrationName = 'onResponderStart';\n        onResponderStart(responderEvent);\n      }\n    }\n    // Move\n    else if (isMoveEvent) {\n      if (onResponderMove != null) {\n        responderEvent.dispatchConfig.registrationName = 'onResponderMove';\n        onResponderMove(responderEvent);\n      }\n    } else {\n      var isTerminateEvent = isCancelish(eventType) ||\n      // native context menu\n      eventType === 'contextmenu' ||\n      // window blur\n      eventType === 'blur' && eventTarget === window ||\n      // responder (or ancestors) blur\n      eventType === 'blur' && eventTarget.contains(node) && domEvent.relatedTarget !== node ||\n      // native scroll without using a pointer\n      isScrollEvent && trackedTouchCount === 0 ||\n      // native scroll on node that is parent of the responder (allow siblings to scroll)\n      isScrollEvent && eventTarget.contains(node) && eventTarget !== node ||\n      // native select/selectionchange on node\n      isSelectionChangeEvent && hasValidSelection(domEvent);\n      var isReleaseEvent = isEndEvent && !isTerminateEvent && !hasTargetTouches(node, domEvent.touches);\n\n      // End\n      if (isEndEvent) {\n        if (onResponderEnd != null) {\n          responderEvent.dispatchConfig.registrationName = 'onResponderEnd';\n          onResponderEnd(responderEvent);\n        }\n      }\n      // Release\n      if (isReleaseEvent) {\n        if (onResponderRelease != null) {\n          responderEvent.dispatchConfig.registrationName = 'onResponderRelease';\n          onResponderRelease(responderEvent);\n        }\n        changeCurrentResponder(emptyResponder);\n      }\n      // Terminate\n      if (isTerminateEvent) {\n        var shouldTerminate = true;\n\n        // Responders can still avoid termination but only for these events.\n        if (eventType === 'contextmenu' || eventType === 'scroll' || eventType === 'selectionchange') {\n          // Only call this function is it wasn't already called during negotiation.\n          if (wasNegotiated) {\n            shouldTerminate = false;\n          } else if (onResponderTerminationRequest != null) {\n            responderEvent.dispatchConfig.registrationName = 'onResponderTerminationRequest';\n            if (onResponderTerminationRequest(responderEvent) === false) {\n              shouldTerminate = false;\n            }\n          }\n        }\n        if (shouldTerminate) {\n          if (onResponderTerminate != null) {\n            responderEvent.dispatchConfig.registrationName = 'onResponderTerminate';\n            onResponderTerminate(responderEvent);\n          }\n          changeCurrentResponder(emptyResponder);\n          isEmulatingMouseEvents = false;\n          trackedTouchCount = 0;\n        }\n      }\n    }\n  }\n}\n\n/**\n * Walk the event path to/from the target node. At each node, stop and call the\n * relevant \"shouldSet\" functions for the given event type. If any of those functions\n * call \"stopPropagation\" on the event, stop searching for a responder.\n */\nfunction findWantsResponder(eventPaths, domEvent, responderEvent) {\n  var shouldSetCallbacks = shouldSetResponderEvents[domEvent.type]; // for Flow\n\n  if (shouldSetCallbacks != null) {\n    var idPath = eventPaths.idPath,\n      nodePath = eventPaths.nodePath;\n    var shouldSetCallbackCaptureName = shouldSetCallbacks[0];\n    var shouldSetCallbackBubbleName = shouldSetCallbacks[1];\n    var bubbles = shouldSetCallbacks[2].bubbles;\n    var check = function check(id, node, callbackName) {\n      var config = getResponderConfig(id);\n      var shouldSetCallback = config[callbackName];\n      if (shouldSetCallback != null) {\n        responderEvent.currentTarget = node;\n        if (shouldSetCallback(responderEvent) === true) {\n          // Start the path from the potential responder\n          var prunedIdPath = idPath.slice(idPath.indexOf(id));\n          return {\n            id,\n            node,\n            idPath: prunedIdPath\n          };\n        }\n      }\n    };\n\n    // capture\n    for (var i = idPath.length - 1; i >= 0; i--) {\n      var id = idPath[i];\n      var node = nodePath[i];\n      var result = check(id, node, shouldSetCallbackCaptureName);\n      if (result != null) {\n        return result;\n      }\n      if (responderEvent.isPropagationStopped() === true) {\n        return;\n      }\n    }\n\n    // bubble\n    if (bubbles) {\n      for (var _i = 0; _i < idPath.length; _i++) {\n        var _id = idPath[_i];\n        var _node = nodePath[_i];\n        var _result = check(_id, _node, shouldSetCallbackBubbleName);\n        if (_result != null) {\n          return _result;\n        }\n        if (responderEvent.isPropagationStopped() === true) {\n          return;\n        }\n      }\n    } else {\n      var _id2 = idPath[0];\n      var _node2 = nodePath[0];\n      var target = domEvent.target;\n      if (target === _node2) {\n        return check(_id2, _node2, shouldSetCallbackBubbleName);\n      }\n    }\n  }\n}\n\n/**\n * Attempt to transfer the responder.\n */\nfunction attemptTransfer(responderEvent, wantsResponder) {\n  var _currentResponder2 = currentResponder,\n    currentId = _currentResponder2.id,\n    currentNode = _currentResponder2.node;\n  var id = wantsResponder.id,\n    node = wantsResponder.node;\n  var _getResponderConfig2 = getResponderConfig(id),\n    onResponderGrant = _getResponderConfig2.onResponderGrant,\n    onResponderReject = _getResponderConfig2.onResponderReject;\n  responderEvent.bubbles = false;\n  responderEvent.cancelable = false;\n  responderEvent.currentTarget = node;\n\n  // Set responder\n  if (currentId == null) {\n    if (onResponderGrant != null) {\n      responderEvent.currentTarget = node;\n      responderEvent.dispatchConfig.registrationName = 'onResponderGrant';\n      onResponderGrant(responderEvent);\n    }\n    changeCurrentResponder(wantsResponder);\n  }\n  // Negotiate with current responder\n  else {\n    var _getResponderConfig3 = getResponderConfig(currentId),\n      onResponderTerminate = _getResponderConfig3.onResponderTerminate,\n      onResponderTerminationRequest = _getResponderConfig3.onResponderTerminationRequest;\n    var allowTransfer = true;\n    if (onResponderTerminationRequest != null) {\n      responderEvent.currentTarget = currentNode;\n      responderEvent.dispatchConfig.registrationName = 'onResponderTerminationRequest';\n      if (onResponderTerminationRequest(responderEvent) === false) {\n        allowTransfer = false;\n      }\n    }\n    if (allowTransfer) {\n      // Terminate existing responder\n      if (onResponderTerminate != null) {\n        responderEvent.currentTarget = currentNode;\n        responderEvent.dispatchConfig.registrationName = 'onResponderTerminate';\n        onResponderTerminate(responderEvent);\n      }\n      // Grant next responder\n      if (onResponderGrant != null) {\n        responderEvent.currentTarget = node;\n        responderEvent.dispatchConfig.registrationName = 'onResponderGrant';\n        onResponderGrant(responderEvent);\n      }\n      changeCurrentResponder(wantsResponder);\n    } else {\n      // Reject responder request\n      if (onResponderReject != null) {\n        responderEvent.currentTarget = node;\n        responderEvent.dispatchConfig.registrationName = 'onResponderReject';\n        onResponderReject(responderEvent);\n      }\n    }\n  }\n}\n\n/* ------------ PUBLIC API ------------ */\n\n/**\n * Attach Listeners\n *\n * Use native events as ReactDOM doesn't have a non-plugin API to implement\n * this system.\n */\nvar documentEventsCapturePhase = ['blur', 'scroll'];\nvar documentEventsBubblePhase = [\n// mouse\n'mousedown', 'mousemove', 'mouseup', 'dragstart',\n// touch\n'touchstart', 'touchmove', 'touchend', 'touchcancel',\n// other\n'contextmenu', 'select', 'selectionchange'];\nexport function attachListeners() {\n  if (canUseDOM && window.__reactResponderSystemActive == null) {\n    window.addEventListener('blur', eventListener);\n    documentEventsBubblePhase.forEach(eventType => {\n      document.addEventListener(eventType, eventListener);\n    });\n    documentEventsCapturePhase.forEach(eventType => {\n      document.addEventListener(eventType, eventListener, true);\n    });\n    window.__reactResponderSystemActive = true;\n  }\n}\n\n/**\n * Register a node with the ResponderSystem.\n */\nexport function addNode(id, node, config) {\n  setResponderId(node, id);\n  responderListenersMap.set(id, config);\n}\n\n/**\n * Unregister a node with the ResponderSystem.\n */\nexport function removeNode(id) {\n  if (currentResponder.id === id) {\n    terminateResponder();\n  }\n  if (responderListenersMap.has(id)) {\n    responderListenersMap.delete(id);\n  }\n}\n\n/**\n * Allow the current responder to be terminated from within components to support\n * more complex requirements, such as use with other React libraries for working\n * with scroll views, input views, etc.\n */\nexport function terminateResponder() {\n  var _currentResponder3 = currentResponder,\n    id = _currentResponder3.id,\n    node = _currentResponder3.node;\n  if (id != null && node != null) {\n    var _getResponderConfig4 = getResponderConfig(id),\n      onResponderTerminate = _getResponderConfig4.onResponderTerminate;\n    if (onResponderTerminate != null) {\n      var event = createResponderEvent({}, responderTouchHistoryStore);\n      event.currentTarget = node;\n      onResponderTerminate(event);\n    }\n    changeCurrentResponder(emptyResponder);\n  }\n  isEmulatingMouseEvents = false;\n  trackedTouchCount = 0;\n}\n\n/**\n * Allow unit tests to inspect the current responder in the system.\n * FOR TESTING ONLY.\n */\nexport function getResponderNode() {\n  return currentResponder.node;\n}","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport default function isSelectionValid() {\n  var selection = window.getSelection();\n  var string = selection.toString();\n  var anchorNode = selection.anchorNode;\n  var focusNode = selection.focusNode;\n  var isTextNode = anchorNode && anchorNode.nodeType === window.Node.TEXT_NODE || focusNode && focusNode.nodeType === window.Node.TEXT_NODE;\n  return string.length >= 1 && string !== '\\n' && isTextNode;\n}","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n/**\n * Hook for integrating the Responder System into React\n *\n *   function SomeComponent({ onStartShouldSetResponder }) {\n *     const ref = useRef(null);\n *     useResponderEvents(ref, { onStartShouldSetResponder });\n *     return <div ref={ref} />\n *   }\n */\n\nimport * as React from 'react';\nimport * as ResponderSystem from './ResponderSystem';\nvar emptyObject = {};\nvar idCounter = 0;\nfunction useStable(getInitialValue) {\n  var ref = React.useRef(null);\n  if (ref.current == null) {\n    ref.current = getInitialValue();\n  }\n  return ref.current;\n}\nexport default function useResponderEvents(hostRef, config) {\n  if (config === void 0) {\n    config = emptyObject;\n  }\n  var id = useStable(() => idCounter++);\n  var isAttachedRef = React.useRef(false);\n\n  // This is a separate effects so it doesn't run when the config changes.\n  // On initial mount, attach global listeners if needed.\n  // On unmount, remove node potentially attached to the Responder System.\n  React.useEffect(() => {\n    ResponderSystem.attachListeners();\n    return () => {\n      ResponderSystem.removeNode(id);\n    };\n  }, [id]);\n\n  // Register and unregister with the Responder System as necessary\n  React.useEffect(() => {\n    var _config = config,\n      onMoveShouldSetResponder = _config.onMoveShouldSetResponder,\n      onMoveShouldSetResponderCapture = _config.onMoveShouldSetResponderCapture,\n      onScrollShouldSetResponder = _config.onScrollShouldSetResponder,\n      onScrollShouldSetResponderCapture = _config.onScrollShouldSetResponderCapture,\n      onSelectionChangeShouldSetResponder = _config.onSelectionChangeShouldSetResponder,\n      onSelectionChangeShouldSetResponderCapture = _config.onSelectionChangeShouldSetResponderCapture,\n      onStartShouldSetResponder = _config.onStartShouldSetResponder,\n      onStartShouldSetResponderCapture = _config.onStartShouldSetResponderCapture;\n    var requiresResponderSystem = onMoveShouldSetResponder != null || onMoveShouldSetResponderCapture != null || onScrollShouldSetResponder != null || onScrollShouldSetResponderCapture != null || onSelectionChangeShouldSetResponder != null || onSelectionChangeShouldSetResponderCapture != null || onStartShouldSetResponder != null || onStartShouldSetResponderCapture != null;\n    var node = hostRef.current;\n    if (requiresResponderSystem) {\n      ResponderSystem.addNode(id, node, config);\n      isAttachedRef.current = true;\n    } else if (isAttachedRef.current) {\n      ResponderSystem.removeNode(id);\n      isAttachedRef.current = false;\n    }\n  }, [config, hostRef, id]);\n  React.useDebugValue({\n    isResponder: hostRef.current === ResponderSystem.getResponderNode()\n  });\n  React.useDebugValue(config);\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nvar UNINITIALIZED = typeof Symbol === 'function' && typeof Symbol() === 'symbol' ? Symbol() : Object.freeze({});\nexport default function useStable(getInitialValue) {\n  var ref = React.useRef(UNINITIALIZED);\n  if (ref.current === UNINITIALIZED) {\n    ref.current = getInitialValue();\n  }\n  // $FlowFixMe (#64650789) Trouble refining types where `Symbol` is concerned.\n  return ref.current;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar warnedKeys = {};\n\n/**\n * A simple function that prints a warning message once per session.\n *\n * @param {string} key - The key used to ensure the message is printed once.\n *                       This should be unique to the callsite.\n * @param {string} message - The message to print\n */\nexport function warnOnce(key, message) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (warnedKeys[key]) {\n      return;\n    }\n    console.warn(message);\n    warnedKeys[key] = true;\n  }\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport Platform from '../../../exports/Platform';\nimport RCTDeviceEventEmitter from './RCTDeviceEventEmitter';\nimport invariant from 'fbjs/lib/invariant';\n/**\n * `NativeEventEmitter` is intended for use by Native Modules to emit events to\n * JavaScript listeners. If a `NativeModule` is supplied to the constructor, it\n * will be notified (via `addListener` and `removeListeners`) when the listener\n * count changes to manage \"native memory\".\n *\n * Currently, all native events are fired via a global `RCTDeviceEventEmitter`.\n * This means event names must be globally unique, and it means that call sites\n * can theoretically listen to `RCTDeviceEventEmitter` (although discouraged).\n */\nexport default class NativeEventEmitter {\n  constructor(nativeModule) {\n    if (Platform.OS === 'ios') {\n      invariant(nativeModule != null, '`new NativeEventEmitter()` requires a non-null argument.');\n      this._nativeModule = nativeModule;\n    }\n  }\n  addListener(eventType, listener, context) {\n    var _this$_nativeModule;\n    (_this$_nativeModule = this._nativeModule) == null ? void 0 : _this$_nativeModule.addListener(eventType);\n    var subscription = RCTDeviceEventEmitter.addListener(eventType, listener, context);\n    return {\n      remove: () => {\n        if (subscription != null) {\n          var _this$_nativeModule2;\n          (_this$_nativeModule2 = this._nativeModule) == null ? void 0 : _this$_nativeModule2.removeListeners(1);\n          // $FlowFixMe[incompatible-use]\n          subscription.remove();\n          subscription = null;\n        }\n      }\n    };\n  }\n\n  /**\n   * @deprecated Use `remove` on the EventSubscription from `addListener`.\n   */\n  removeListener(eventType, listener) {\n    var _this$_nativeModule3;\n    (_this$_nativeModule3 = this._nativeModule) == null ? void 0 : _this$_nativeModule3.removeListeners(1);\n    // NOTE: This will report a deprecation notice via `console.error`.\n    // $FlowFixMe[prop-missing] - `removeListener` exists but is deprecated.\n    RCTDeviceEventEmitter.removeListener(eventType, listener);\n  }\n  emit(eventType) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n    // Generally, `RCTDeviceEventEmitter` is directly invoked. But this is\n    // included for completeness.\n    RCTDeviceEventEmitter.emit(eventType, ...args);\n  }\n  removeAllListeners(eventType) {\n    var _this$_nativeModule4;\n    invariant(eventType != null, '`NativeEventEmitter.removeAllListener()` requires a non-null argument.');\n    (_this$_nativeModule4 = this._nativeModule) == null ? void 0 : _this$_nativeModule4.removeListeners(this.listenerCount(eventType));\n    RCTDeviceEventEmitter.removeAllListeners(eventType);\n  }\n  listenerCount(eventType) {\n    return RCTDeviceEventEmitter.listenerCount(eventType);\n  }\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport EventEmitter from '../vendor/emitter/EventEmitter';\n\n// FIXME: use typed events\n\n/**\n * Global EventEmitter used by the native platform to emit events to JavaScript.\n * Events are identified by globally unique event names.\n *\n * NativeModules that emit events should instead subclass `NativeEventEmitter`.\n */\nexport default new EventEmitter();","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\n/**\n * Used to find the indices of the frames that overlap the given offsets. Useful for finding the\n * items that bound different windows of content, such as the visible area or the buffered overscan\n * area.\n */\nexport function elementsThatOverlapOffsets(offsets, props, getFrameMetrics, zoomScale) {\n  if (zoomScale === void 0) {\n    zoomScale = 1;\n  }\n  var itemCount = props.getItemCount(props.data);\n  var result = [];\n  for (var offsetIndex = 0; offsetIndex < offsets.length; offsetIndex++) {\n    var currentOffset = offsets[offsetIndex];\n    var left = 0;\n    var right = itemCount - 1;\n    while (left <= right) {\n      // eslint-disable-next-line no-bitwise\n      var mid = left + (right - left >>> 1);\n      var frame = getFrameMetrics(mid, props);\n      var scaledOffsetStart = frame.offset * zoomScale;\n      var scaledOffsetEnd = (frame.offset + frame.length) * zoomScale;\n\n      // We want the first frame that contains the offset, with inclusive bounds. Thus, for the\n      // first frame the scaledOffsetStart is inclusive, while for other frames it is exclusive.\n      if (mid === 0 && currentOffset < scaledOffsetStart || mid !== 0 && currentOffset <= scaledOffsetStart) {\n        right = mid - 1;\n      } else if (currentOffset > scaledOffsetEnd) {\n        left = mid + 1;\n      } else {\n        result[offsetIndex] = mid;\n        break;\n      }\n    }\n  }\n  return result;\n}\n\n/**\n * Computes the number of elements in the `next` range that are new compared to the `prev` range.\n * Handy for calculating how many new items will be rendered when the render window changes so we\n * can restrict the number of new items render at once so that content can appear on the screen\n * faster.\n */\nexport function newRangeCount(prev, next) {\n  return next.last - next.first + 1 - Math.max(0, 1 + Math.min(next.last, prev.last) - Math.max(next.first, prev.first));\n}\n\n/**\n * Custom logic for determining which items should be rendered given the current frame and scroll\n * metrics, as well as the previous render state. The algorithm may evolve over time, but generally\n * prioritizes the visible area first, then expands that with overscan regions ahead and behind,\n * biased in the direction of scroll.\n */\nexport function computeWindowedRenderLimits(props, maxToRenderPerBatch, windowSize, prev, getFrameMetricsApprox, scrollMetrics) {\n  var itemCount = props.getItemCount(props.data);\n  if (itemCount === 0) {\n    return {\n      first: 0,\n      last: -1\n    };\n  }\n  var offset = scrollMetrics.offset,\n    velocity = scrollMetrics.velocity,\n    visibleLength = scrollMetrics.visibleLength,\n    _scrollMetrics$zoomSc = scrollMetrics.zoomScale,\n    zoomScale = _scrollMetrics$zoomSc === void 0 ? 1 : _scrollMetrics$zoomSc;\n\n  // Start with visible area, then compute maximum overscan region by expanding from there, biased\n  // in the direction of scroll. Total overscan area is capped, which should cap memory consumption\n  // too.\n  var visibleBegin = Math.max(0, offset);\n  var visibleEnd = visibleBegin + visibleLength;\n  var overscanLength = (windowSize - 1) * visibleLength;\n\n  // Considering velocity seems to introduce more churn than it's worth.\n  var leadFactor = 0.5; // Math.max(0, Math.min(1, velocity / 25 + 0.5));\n\n  var fillPreference = velocity > 1 ? 'after' : velocity < -1 ? 'before' : 'none';\n  var overscanBegin = Math.max(0, visibleBegin - (1 - leadFactor) * overscanLength);\n  var overscanEnd = Math.max(0, visibleEnd + leadFactor * overscanLength);\n  var lastItemOffset = getFrameMetricsApprox(itemCount - 1, props).offset * zoomScale;\n  if (lastItemOffset < overscanBegin) {\n    // Entire list is before our overscan window\n    return {\n      first: Math.max(0, itemCount - 1 - maxToRenderPerBatch),\n      last: itemCount - 1\n    };\n  }\n\n  // Find the indices that correspond to the items at the render boundaries we're targeting.\n  var _elementsThatOverlapO = elementsThatOverlapOffsets([overscanBegin, visibleBegin, visibleEnd, overscanEnd], props, getFrameMetricsApprox, zoomScale),\n    overscanFirst = _elementsThatOverlapO[0],\n    first = _elementsThatOverlapO[1],\n    last = _elementsThatOverlapO[2],\n    overscanLast = _elementsThatOverlapO[3];\n  overscanFirst = overscanFirst == null ? 0 : overscanFirst;\n  first = first == null ? Math.max(0, overscanFirst) : first;\n  overscanLast = overscanLast == null ? itemCount - 1 : overscanLast;\n  last = last == null ? Math.min(overscanLast, first + maxToRenderPerBatch - 1) : last;\n  var visible = {\n    first,\n    last\n  };\n\n  // We want to limit the number of new cells we're rendering per batch so that we can fill the\n  // content on the screen quickly. If we rendered the entire overscan window at once, the user\n  // could be staring at white space for a long time waiting for a bunch of offscreen content to\n  // render.\n  var newCellCount = newRangeCount(prev, visible);\n  while (true) {\n    if (first <= overscanFirst && last >= overscanLast) {\n      // If we fill the entire overscan range, we're done.\n      break;\n    }\n    var maxNewCells = newCellCount >= maxToRenderPerBatch;\n    var firstWillAddMore = first <= prev.first || first > prev.last;\n    var firstShouldIncrement = first > overscanFirst && (!maxNewCells || !firstWillAddMore);\n    var lastWillAddMore = last >= prev.last || last < prev.first;\n    var lastShouldIncrement = last < overscanLast && (!maxNewCells || !lastWillAddMore);\n    if (maxNewCells && !firstShouldIncrement && !lastShouldIncrement) {\n      // We only want to stop if we've hit maxNewCells AND we cannot increment first or last\n      // without rendering new items. This let's us preserve as many already rendered items as\n      // possible, reducing render churn and keeping the rendered overscan range as large as\n      // possible.\n      break;\n    }\n    if (firstShouldIncrement && !(fillPreference === 'after' && lastShouldIncrement && lastWillAddMore)) {\n      if (firstWillAddMore) {\n        newCellCount++;\n      }\n      first--;\n    }\n    if (lastShouldIncrement && !(fillPreference === 'before' && firstShouldIncrement && firstWillAddMore)) {\n      if (lastWillAddMore) {\n        newCellCount++;\n      }\n      last++;\n    }\n  }\n  if (!(last >= first && first >= 0 && last < itemCount && first >= overscanFirst && last <= overscanLast && first <= visible.first && last >= visible.last)) {\n    throw new Error('Bad window calculation ' + JSON.stringify({\n      first,\n      last,\n      itemCount,\n      overscanFirst,\n      overscanLast,\n      visible\n    }));\n  }\n  return {\n    first,\n    last\n  };\n}\nexport function keyExtractor(item, index) {\n  if (typeof item === 'object' && (item == null ? void 0 : item.key) != null) {\n    return item.key;\n  }\n  if (typeof item === 'object' && (item == null ? void 0 : item.id) != null) {\n    return item.id;\n  }\n  return String(index);\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\nimport InteractionManager from '../../../exports/InteractionManager';\n\n/**\n * A simple class for batching up invocations of a low-pri callback. A timeout is set to run the\n * callback once after a delay, no matter how many times it's scheduled. Once the delay is reached,\n * InteractionManager.runAfterInteractions is used to invoke the callback after any hi-pri\n * interactions are done running.\n *\n * Make sure to cleanup with dispose().  Example:\n *\n *   class Widget extends React.Component {\n *     _batchedSave: new Batchinator(() => this._saveState, 1000);\n *     _saveSate() {\n *       // save this.state to disk\n *     }\n *     componentDidUpdate() {\n *       this._batchedSave.schedule();\n *     }\n *     componentWillUnmount() {\n *       this._batchedSave.dispose();\n *     }\n *     ...\n *   }\n */\nclass Batchinator {\n  constructor(callback, delayMS) {\n    this._delay = delayMS;\n    this._callback = callback;\n  }\n  /*\n   * Cleanup any pending tasks.\n   *\n   * By default, if there is a pending task the callback is run immediately. Set the option abort to\n   * true to not call the callback if it was pending.\n   */\n  dispose(options) {\n    if (options === void 0) {\n      options = {\n        abort: false\n      };\n    }\n    if (this._taskHandle) {\n      this._taskHandle.cancel();\n      if (!options.abort) {\n        this._callback();\n      }\n      this._taskHandle = null;\n    }\n  }\n  schedule() {\n    if (this._taskHandle) {\n      return;\n    }\n    var timeoutHandle = setTimeout(() => {\n      this._taskHandle = InteractionManager.runAfterInteractions(() => {\n        // Note that we clear the handle before invoking the callback so that if the callback calls\n        // schedule again, it will actually schedule another task.\n        this._taskHandle = null;\n        this._callback();\n      });\n    }, this._delay);\n    this._taskHandle = {\n      cancel: () => clearTimeout(timeoutHandle)\n    };\n  }\n}\nexport default Batchinator;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\nfunction clamp(min, value, max) {\n  if (value < min) {\n    return min;\n  }\n  if (value > max) {\n    return max;\n  }\n  return value;\n}\nexport default clamp;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport invariant from 'fbjs/lib/invariant';\nexport class CellRenderMask {\n  constructor(numCells) {\n    invariant(numCells >= 0, 'CellRenderMask must contain a non-negative number os cells');\n    this._numCells = numCells;\n    if (numCells === 0) {\n      this._regions = [];\n    } else {\n      this._regions = [{\n        first: 0,\n        last: numCells - 1,\n        isSpacer: true\n      }];\n    }\n  }\n  enumerateRegions() {\n    return this._regions;\n  }\n  addCells(cells) {\n    invariant(cells.first >= 0 && cells.first < this._numCells && cells.last >= -1 && cells.last < this._numCells && cells.last >= cells.first - 1, 'CellRenderMask.addCells called with invalid cell range');\n\n    // VirtualizedList uses inclusive ranges, where zero-count states are\n    // possible. E.g. [0, -1] for no cells, starting at 0.\n    if (cells.last < cells.first) {\n      return;\n    }\n    var _this$_findRegion = this._findRegion(cells.first),\n      firstIntersect = _this$_findRegion[0],\n      firstIntersectIdx = _this$_findRegion[1];\n    var _this$_findRegion2 = this._findRegion(cells.last),\n      lastIntersect = _this$_findRegion2[0],\n      lastIntersectIdx = _this$_findRegion2[1];\n\n    // Fast-path if the cells to add are already all present in the mask. We\n    // will otherwise need to do some mutation.\n    if (firstIntersectIdx === lastIntersectIdx && !firstIntersect.isSpacer) {\n      return;\n    }\n\n    // We need to replace the existing covered regions with 1-3 new regions\n    // depending whether we need to split spacers out of overlapping regions.\n    var newLeadRegion = [];\n    var newTailRegion = [];\n    var newMainRegion = _objectSpread(_objectSpread({}, cells), {}, {\n      isSpacer: false\n    });\n    if (firstIntersect.first < newMainRegion.first) {\n      if (firstIntersect.isSpacer) {\n        newLeadRegion.push({\n          first: firstIntersect.first,\n          last: newMainRegion.first - 1,\n          isSpacer: true\n        });\n      } else {\n        newMainRegion.first = firstIntersect.first;\n      }\n    }\n    if (lastIntersect.last > newMainRegion.last) {\n      if (lastIntersect.isSpacer) {\n        newTailRegion.push({\n          first: newMainRegion.last + 1,\n          last: lastIntersect.last,\n          isSpacer: true\n        });\n      } else {\n        newMainRegion.last = lastIntersect.last;\n      }\n    }\n    var replacementRegions = [...newLeadRegion, newMainRegion, ...newTailRegion];\n    var numRegionsToDelete = lastIntersectIdx - firstIntersectIdx + 1;\n    this._regions.splice(firstIntersectIdx, numRegionsToDelete, ...replacementRegions);\n  }\n  numCells() {\n    return this._numCells;\n  }\n  equals(other) {\n    return this._numCells === other._numCells && this._regions.length === other._regions.length && this._regions.every((region, i) => region.first === other._regions[i].first && region.last === other._regions[i].last && region.isSpacer === other._regions[i].isSpacer);\n  }\n  _findRegion(cellIdx) {\n    var firstIdx = 0;\n    var lastIdx = this._regions.length - 1;\n    while (firstIdx <= lastIdx) {\n      var middleIdx = Math.floor((firstIdx + lastIdx) / 2);\n      var middleRegion = this._regions[middleIdx];\n      if (cellIdx >= middleRegion.first && cellIdx <= middleRegion.last) {\n        return [middleRegion, middleIdx];\n      } else if (cellIdx < middleRegion.first) {\n        lastIdx = middleIdx - 1;\n      } else if (cellIdx > middleRegion.last) {\n        firstIdx = middleIdx + 1;\n      }\n    }\n    invariant(false, \"A region was not found containing cellIdx \" + cellIdx);\n  }\n}","import _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport invariant from 'fbjs/lib/invariant';\nexport default class ChildListCollection {\n  constructor() {\n    this._cellKeyToChildren = new Map();\n    this._childrenToCellKey = new Map();\n  }\n  add(list, cellKey) {\n    var _this$_cellKeyToChild;\n    invariant(!this._childrenToCellKey.has(list), 'Trying to add already present child list');\n    var cellLists = (_this$_cellKeyToChild = this._cellKeyToChildren.get(cellKey)) !== null && _this$_cellKeyToChild !== void 0 ? _this$_cellKeyToChild : new Set();\n    cellLists.add(list);\n    this._cellKeyToChildren.set(cellKey, cellLists);\n    this._childrenToCellKey.set(list, cellKey);\n  }\n  remove(list) {\n    var cellKey = this._childrenToCellKey.get(list);\n    invariant(cellKey != null, 'Trying to remove non-present child list');\n    this._childrenToCellKey.delete(list);\n    var cellLists = this._cellKeyToChildren.get(cellKey);\n    invariant(cellLists, '_cellKeyToChildren should contain cellKey');\n    cellLists.delete(list);\n    if (cellLists.size === 0) {\n      this._cellKeyToChildren.delete(cellKey);\n    }\n  }\n  forEach(fn) {\n    for (var _iterator = _createForOfIteratorHelperLoose(this._cellKeyToChildren.values()), _step; !(_step = _iterator()).done;) {\n      var listSet = _step.value;\n      for (var _iterator2 = _createForOfIteratorHelperLoose(listSet), _step2; !(_step2 = _iterator2()).done;) {\n        var list = _step2.value;\n        fn(list);\n      }\n    }\n  }\n  forEachInCell(cellKey, fn) {\n    var _this$_cellKeyToChild2;\n    var listSet = (_this$_cellKeyToChild2 = this._cellKeyToChildren.get(cellKey)) !== null && _this$_cellKeyToChild2 !== void 0 ? _this$_cellKeyToChild2 : [];\n    for (var _iterator3 = _createForOfIteratorHelperLoose(listSet), _step3; !(_step3 = _iterator3()).done;) {\n      var list = _step3.value;\n      fn(list);\n    }\n  }\n  anyInCell(cellKey, fn) {\n    var _this$_cellKeyToChild3;\n    var listSet = (_this$_cellKeyToChild3 = this._cellKeyToChildren.get(cellKey)) !== null && _this$_cellKeyToChild3 !== void 0 ? _this$_cellKeyToChild3 : [];\n    for (var _iterator4 = _createForOfIteratorHelperLoose(listSet), _step4; !(_step4 = _iterator4()).done;) {\n      var list = _step4.value;\n      if (fn(list)) {\n        return true;\n      }\n    }\n    return false;\n  }\n  size() {\n    return this._childrenToCellKey.size;\n  }\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nclass Info {\n  constructor() {\n    this.any_blank_count = 0;\n    this.any_blank_ms = 0;\n    this.any_blank_speed_sum = 0;\n    this.mostly_blank_count = 0;\n    this.mostly_blank_ms = 0;\n    this.pixels_blank = 0;\n    this.pixels_sampled = 0;\n    this.pixels_scrolled = 0;\n    this.total_time_spent = 0;\n    this.sample_count = 0;\n  }\n}\nvar DEBUG = false;\nvar _listeners = [];\nvar _minSampleCount = 10;\nvar _sampleRate = DEBUG ? 1 : null;\n\n/**\n * A helper class for detecting when the maximem fill rate of `VirtualizedList` is exceeded.\n * By default the sampling rate is set to zero and this will do nothing. If you want to collect\n * samples (e.g. to log them), make sure to call `FillRateHelper.setSampleRate(0.0-1.0)`.\n *\n * Listeners and sample rate are global for all `VirtualizedList`s - typical usage will combine with\n * `SceneTracker.getActiveScene` to determine the context of the events.\n */\nclass FillRateHelper {\n  static addListener(callback) {\n    if (_sampleRate === null) {\n      console.warn('Call `FillRateHelper.setSampleRate` before `addListener`.');\n    }\n    _listeners.push(callback);\n    return {\n      remove: () => {\n        _listeners = _listeners.filter(listener => callback !== listener);\n      }\n    };\n  }\n  static setSampleRate(sampleRate) {\n    _sampleRate = sampleRate;\n  }\n  static setMinSampleCount(minSampleCount) {\n    _minSampleCount = minSampleCount;\n  }\n  constructor(getFrameMetrics) {\n    this._anyBlankStartTime = null;\n    this._enabled = false;\n    this._info = new Info();\n    this._mostlyBlankStartTime = null;\n    this._samplesStartTime = null;\n    this._getFrameMetrics = getFrameMetrics;\n    this._enabled = (_sampleRate || 0) > Math.random();\n    this._resetData();\n  }\n  activate() {\n    if (this._enabled && this._samplesStartTime == null) {\n      DEBUG && console.debug('FillRateHelper: activate');\n      this._samplesStartTime = global.performance.now();\n    }\n  }\n  deactivateAndFlush() {\n    if (!this._enabled) {\n      return;\n    }\n    var start = this._samplesStartTime; // const for flow\n    if (start == null) {\n      DEBUG && console.debug('FillRateHelper: bail on deactivate with no start time');\n      return;\n    }\n    if (this._info.sample_count < _minSampleCount) {\n      // Don't bother with under-sampled events.\n      this._resetData();\n      return;\n    }\n    var total_time_spent = global.performance.now() - start;\n    var info = _objectSpread(_objectSpread({}, this._info), {}, {\n      total_time_spent\n    });\n    if (DEBUG) {\n      var derived = {\n        avg_blankness: this._info.pixels_blank / this._info.pixels_sampled,\n        avg_speed: this._info.pixels_scrolled / (total_time_spent / 1000),\n        avg_speed_when_any_blank: this._info.any_blank_speed_sum / this._info.any_blank_count,\n        any_blank_per_min: this._info.any_blank_count / (total_time_spent / 1000 / 60),\n        any_blank_time_frac: this._info.any_blank_ms / total_time_spent,\n        mostly_blank_per_min: this._info.mostly_blank_count / (total_time_spent / 1000 / 60),\n        mostly_blank_time_frac: this._info.mostly_blank_ms / total_time_spent\n      };\n      for (var key in derived) {\n        // $FlowFixMe[prop-missing]\n        derived[key] = Math.round(1000 * derived[key]) / 1000;\n      }\n      console.debug('FillRateHelper deactivateAndFlush: ', {\n        derived,\n        info\n      });\n    }\n    _listeners.forEach(listener => listener(info));\n    this._resetData();\n  }\n  computeBlankness(props, cellsAroundViewport, scrollMetrics) {\n    if (!this._enabled || props.getItemCount(props.data) === 0 || cellsAroundViewport.last < cellsAroundViewport.first || this._samplesStartTime == null) {\n      return 0;\n    }\n    var dOffset = scrollMetrics.dOffset,\n      offset = scrollMetrics.offset,\n      velocity = scrollMetrics.velocity,\n      visibleLength = scrollMetrics.visibleLength;\n\n    // Denominator metrics that we track for all events - most of the time there is no blankness and\n    // we want to capture that.\n    this._info.sample_count++;\n    this._info.pixels_sampled += Math.round(visibleLength);\n    this._info.pixels_scrolled += Math.round(Math.abs(dOffset));\n    var scrollSpeed = Math.round(Math.abs(velocity) * 1000); // px / sec\n\n    // Whether blank now or not, record the elapsed time blank if we were blank last time.\n    var now = global.performance.now();\n    if (this._anyBlankStartTime != null) {\n      this._info.any_blank_ms += now - this._anyBlankStartTime;\n    }\n    this._anyBlankStartTime = null;\n    if (this._mostlyBlankStartTime != null) {\n      this._info.mostly_blank_ms += now - this._mostlyBlankStartTime;\n    }\n    this._mostlyBlankStartTime = null;\n    var blankTop = 0;\n    var first = cellsAroundViewport.first;\n    var firstFrame = this._getFrameMetrics(first, props);\n    while (first <= cellsAroundViewport.last && (!firstFrame || !firstFrame.inLayout)) {\n      firstFrame = this._getFrameMetrics(first, props);\n      first++;\n    }\n    // Only count blankTop if we aren't rendering the first item, otherwise we will count the header\n    // as blank.\n    if (firstFrame && first > 0) {\n      blankTop = Math.min(visibleLength, Math.max(0, firstFrame.offset - offset));\n    }\n    var blankBottom = 0;\n    var last = cellsAroundViewport.last;\n    var lastFrame = this._getFrameMetrics(last, props);\n    while (last >= cellsAroundViewport.first && (!lastFrame || !lastFrame.inLayout)) {\n      lastFrame = this._getFrameMetrics(last, props);\n      last--;\n    }\n    // Only count blankBottom if we aren't rendering the last item, otherwise we will count the\n    // footer as blank.\n    if (lastFrame && last < props.getItemCount(props.data) - 1) {\n      var bottomEdge = lastFrame.offset + lastFrame.length;\n      blankBottom = Math.min(visibleLength, Math.max(0, offset + visibleLength - bottomEdge));\n    }\n    var pixels_blank = Math.round(blankTop + blankBottom);\n    var blankness = pixels_blank / visibleLength;\n    if (blankness > 0) {\n      this._anyBlankStartTime = now;\n      this._info.any_blank_speed_sum += scrollSpeed;\n      this._info.any_blank_count++;\n      this._info.pixels_blank += pixels_blank;\n      if (blankness > 0.5) {\n        this._mostlyBlankStartTime = now;\n        this._info.mostly_blank_count++;\n      }\n    } else if (scrollSpeed < 0.01 || Math.abs(dOffset) < 1) {\n      this.deactivateAndFlush();\n    }\n    return blankness;\n  }\n  enabled() {\n    return this._enabled;\n  }\n  _resetData() {\n    this._anyBlankStartTime = null;\n    this._info = new Info();\n    this._mostlyBlankStartTime = null;\n    this._samplesStartTime = null;\n  }\n}\nexport default FillRateHelper;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport invariant from 'fbjs/lib/invariant';\nimport * as React from 'react';\n\n/**\n * `setState` is called asynchronously, and should not rely on the value of\n * `this.props` or `this.state`:\n * https://reactjs.org/docs/state-and-lifecycle.html#state-updates-may-be-asynchronous\n *\n * SafePureComponent adds runtime enforcement, to catch cases where these\n * variables are read in a state updater function, instead of the ones passed\n * in.\n */\nexport default class StateSafePureComponent extends React.PureComponent {\n  constructor(props) {\n    super(props);\n    this._inAsyncStateUpdate = false;\n    this._installSetStateHooks();\n  }\n  setState(partialState, callback) {\n    if (typeof partialState === 'function') {\n      super.setState((state, props) => {\n        this._inAsyncStateUpdate = true;\n        var ret;\n        try {\n          ret = partialState(state, props);\n        } catch (err) {\n          throw err;\n        } finally {\n          this._inAsyncStateUpdate = false;\n        }\n        return ret;\n      }, callback);\n    } else {\n      super.setState(partialState, callback);\n    }\n  }\n  _installSetStateHooks() {\n    var that = this;\n    var props = this.props,\n      state = this.state;\n    Object.defineProperty(this, 'props', {\n      get() {\n        invariant(!that._inAsyncStateUpdate, '\"this.props\" should not be accessed during state updates');\n        return props;\n      },\n      set(newProps) {\n        props = newProps;\n      }\n    });\n    Object.defineProperty(this, 'state', {\n      get() {\n        invariant(!that._inAsyncStateUpdate, '\"this.state\" should not be acceessed during state updates');\n        return state;\n      },\n      set(newState) {\n        state = newState;\n      }\n    });\n  }\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\nimport invariant from 'fbjs/lib/invariant';\n/**\n * A Utility class for calculating viewable items based on current metrics like scroll position and\n * layout.\n *\n * An item is said to be in a \"viewable\" state when any of the following\n * is true for longer than `minimumViewTime` milliseconds (after an interaction if `waitForInteraction`\n * is true):\n *\n * - Occupying >= `viewAreaCoveragePercentThreshold` of the view area XOR fraction of the item\n *   visible in the view area >= `itemVisiblePercentThreshold`.\n * - Entirely visible on screen\n */\nclass ViewabilityHelper {\n  constructor(config) {\n    if (config === void 0) {\n      config = {\n        viewAreaCoveragePercentThreshold: 0\n      };\n    }\n    this._hasInteracted = false;\n    this._timers = new Set();\n    this._viewableIndices = [];\n    this._viewableItems = new Map();\n    this._config = config;\n  }\n\n  /**\n   * Cleanup, e.g. on unmount. Clears any pending timers.\n   */\n  dispose() {\n    /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n     * comment suppresses an error found when Flow v0.63 was deployed. To see\n     * the error delete this comment and run Flow. */\n    this._timers.forEach(clearTimeout);\n  }\n\n  /**\n   * Determines which items are viewable based on the current metrics and config.\n   */\n  computeViewableItems(props, scrollOffset, viewportHeight, getFrameMetrics,\n  // Optional optimization to reduce the scan size\n  renderRange) {\n    var itemCount = props.getItemCount(props.data);\n    var _this$_config = this._config,\n      itemVisiblePercentThreshold = _this$_config.itemVisiblePercentThreshold,\n      viewAreaCoveragePercentThreshold = _this$_config.viewAreaCoveragePercentThreshold;\n    var viewAreaMode = viewAreaCoveragePercentThreshold != null;\n    var viewablePercentThreshold = viewAreaMode ? viewAreaCoveragePercentThreshold : itemVisiblePercentThreshold;\n    invariant(viewablePercentThreshold != null && itemVisiblePercentThreshold != null !== (viewAreaCoveragePercentThreshold != null), 'Must set exactly one of itemVisiblePercentThreshold or viewAreaCoveragePercentThreshold');\n    var viewableIndices = [];\n    if (itemCount === 0) {\n      return viewableIndices;\n    }\n    var firstVisible = -1;\n    var _ref = renderRange || {\n        first: 0,\n        last: itemCount - 1\n      },\n      first = _ref.first,\n      last = _ref.last;\n    if (last >= itemCount) {\n      console.warn('Invalid render range computing viewability ' + JSON.stringify({\n        renderRange,\n        itemCount\n      }));\n      return [];\n    }\n    for (var idx = first; idx <= last; idx++) {\n      var metrics = getFrameMetrics(idx, props);\n      if (!metrics) {\n        continue;\n      }\n      var top = metrics.offset - scrollOffset;\n      var bottom = top + metrics.length;\n      if (top < viewportHeight && bottom > 0) {\n        firstVisible = idx;\n        if (_isViewable(viewAreaMode, viewablePercentThreshold, top, bottom, viewportHeight, metrics.length)) {\n          viewableIndices.push(idx);\n        }\n      } else if (firstVisible >= 0) {\n        break;\n      }\n    }\n    return viewableIndices;\n  }\n\n  /**\n   * Figures out which items are viewable and how that has changed from before and calls\n   * `onViewableItemsChanged` as appropriate.\n   */\n  onUpdate(props, scrollOffset, viewportHeight, getFrameMetrics, createViewToken, onViewableItemsChanged,\n  // Optional optimization to reduce the scan size\n  renderRange) {\n    var itemCount = props.getItemCount(props.data);\n    if (this._config.waitForInteraction && !this._hasInteracted || itemCount === 0 || !getFrameMetrics(0, props)) {\n      return;\n    }\n    var viewableIndices = [];\n    if (itemCount) {\n      viewableIndices = this.computeViewableItems(props, scrollOffset, viewportHeight, getFrameMetrics, renderRange);\n    }\n    if (this._viewableIndices.length === viewableIndices.length && this._viewableIndices.every((v, ii) => v === viewableIndices[ii])) {\n      // We might get a lot of scroll events where visibility doesn't change and we don't want to do\n      // extra work in those cases.\n      return;\n    }\n    this._viewableIndices = viewableIndices;\n    if (this._config.minimumViewTime) {\n      var handle = setTimeout(() => {\n        /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n         * comment suppresses an error found when Flow v0.63 was deployed. To\n         * see the error delete this comment and run Flow. */\n        this._timers.delete(handle);\n        this._onUpdateSync(props, viewableIndices, onViewableItemsChanged, createViewToken);\n      }, this._config.minimumViewTime);\n      /* $FlowFixMe[incompatible-call] (>=0.63.0 site=react_native_fb) This\n       * comment suppresses an error found when Flow v0.63 was deployed. To see\n       * the error delete this comment and run Flow. */\n      this._timers.add(handle);\n    } else {\n      this._onUpdateSync(props, viewableIndices, onViewableItemsChanged, createViewToken);\n    }\n  }\n\n  /**\n   * clean-up cached _viewableIndices to evaluate changed items on next update\n   */\n  resetViewableIndices() {\n    this._viewableIndices = [];\n  }\n\n  /**\n   * Records that an interaction has happened even if there has been no scroll.\n   */\n  recordInteraction() {\n    this._hasInteracted = true;\n  }\n  _onUpdateSync(props, viewableIndicesToCheck, onViewableItemsChanged, createViewToken) {\n    // Filter out indices that have gone out of view since this call was scheduled.\n    viewableIndicesToCheck = viewableIndicesToCheck.filter(ii => this._viewableIndices.includes(ii));\n    var prevItems = this._viewableItems;\n    var nextItems = new Map(viewableIndicesToCheck.map(ii => {\n      var viewable = createViewToken(ii, true, props);\n      return [viewable.key, viewable];\n    }));\n    var changed = [];\n    for (var _iterator = _createForOfIteratorHelperLoose(nextItems), _step; !(_step = _iterator()).done;) {\n      var _step$value = _step.value,\n        key = _step$value[0],\n        viewable = _step$value[1];\n      if (!prevItems.has(key)) {\n        changed.push(viewable);\n      }\n    }\n    for (var _iterator2 = _createForOfIteratorHelperLoose(prevItems), _step2; !(_step2 = _iterator2()).done;) {\n      var _step2$value = _step2.value,\n        _key = _step2$value[0],\n        _viewable = _step2$value[1];\n      if (!nextItems.has(_key)) {\n        changed.push(_objectSpread(_objectSpread({}, _viewable), {}, {\n          isViewable: false\n        }));\n      }\n    }\n    if (changed.length > 0) {\n      this._viewableItems = nextItems;\n      onViewableItemsChanged({\n        viewableItems: Array.from(nextItems.values()),\n        changed,\n        viewabilityConfig: this._config\n      });\n    }\n  }\n}\nfunction _isViewable(viewAreaMode, viewablePercentThreshold, top, bottom, viewportHeight, itemLength) {\n  if (_isEntirelyVisible(top, bottom, viewportHeight)) {\n    return true;\n  } else {\n    var pixels = _getPixelsVisible(top, bottom, viewportHeight);\n    var percent = 100 * (viewAreaMode ? pixels / viewportHeight : pixels / itemLength);\n    return percent >= viewablePercentThreshold;\n  }\n}\nfunction _getPixelsVisible(top, bottom, viewportHeight) {\n  var visibleHeight = Math.min(bottom, viewportHeight) - Math.max(top, 0);\n  return Math.max(0, visibleHeight);\n}\nfunction _isEntirelyVisible(top, bottom, viewportHeight) {\n  return top >= 0 && bottom <= viewportHeight && bottom > top;\n}\nexport default ViewabilityHelper;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport { useContext, useMemo } from 'react';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nexport var VirtualizedListContext = /*#__PURE__*/React.createContext(null);\nif (__DEV__) {\n  VirtualizedListContext.displayName = 'VirtualizedListContext';\n}\n\n/**\n * Resets the context. Intended for use by portal-like components (e.g. Modal).\n */\nexport function VirtualizedListContextResetter(_ref) {\n  var children = _ref.children;\n  return /*#__PURE__*/React.createElement(VirtualizedListContext.Provider, {\n    value: null\n  }, children);\n}\n\n/**\n * Sets the context with memoization. Intended to be used by `VirtualizedList`.\n */\nexport function VirtualizedListContextProvider(_ref2) {\n  var children = _ref2.children,\n    value = _ref2.value;\n  // Avoid setting a newly created context object if the values are identical.\n  var context = useMemo(() => ({\n    cellKey: null,\n    getScrollMetrics: value.getScrollMetrics,\n    horizontal: value.horizontal,\n    getOutermostParentListRef: value.getOutermostParentListRef,\n    registerAsNestedChild: value.registerAsNestedChild,\n    unregisterAsNestedChild: value.unregisterAsNestedChild\n  }), [value.getScrollMetrics, value.horizontal, value.getOutermostParentListRef, value.registerAsNestedChild, value.unregisterAsNestedChild]);\n  return /*#__PURE__*/React.createElement(VirtualizedListContext.Provider, {\n    value: context\n  }, children);\n}\n\n/**\n * Sets the `cellKey`. Intended to be used by `VirtualizedList` for each cell.\n */\nexport function VirtualizedListCellContextProvider(_ref3) {\n  var cellKey = _ref3.cellKey,\n    children = _ref3.children;\n  // Avoid setting a newly created context object if the values are identical.\n  var currContext = useContext(VirtualizedListContext);\n  var context = useMemo(() => currContext == null ? null : _objectSpread(_objectSpread({}, currContext), {}, {\n    cellKey\n  }), [currContext, cellKey]);\n  return /*#__PURE__*/React.createElement(VirtualizedListContext.Provider, {\n    value: context\n  }, children);\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport View from '../../../exports/View';\nimport StyleSheet from '../../../exports/StyleSheet';\nimport { VirtualizedListCellContextProvider } from './VirtualizedListContext.js';\nimport invariant from 'fbjs/lib/invariant';\nimport * as React from 'react';\nexport default class CellRenderer extends React.Component {\n  constructor() {\n    super(...arguments);\n    this.state = {\n      separatorProps: {\n        highlighted: false,\n        leadingItem: this.props.item\n      }\n    };\n    this._separators = {\n      highlight: () => {\n        var _this$props = this.props,\n          cellKey = _this$props.cellKey,\n          prevCellKey = _this$props.prevCellKey;\n        this.props.onUpdateSeparators([cellKey, prevCellKey], {\n          highlighted: true\n        });\n      },\n      unhighlight: () => {\n        var _this$props2 = this.props,\n          cellKey = _this$props2.cellKey,\n          prevCellKey = _this$props2.prevCellKey;\n        this.props.onUpdateSeparators([cellKey, prevCellKey], {\n          highlighted: false\n        });\n      },\n      updateProps: (select, newProps) => {\n        var _this$props3 = this.props,\n          cellKey = _this$props3.cellKey,\n          prevCellKey = _this$props3.prevCellKey;\n        this.props.onUpdateSeparators([select === 'leading' ? prevCellKey : cellKey], newProps);\n      }\n    };\n    this._onLayout = nativeEvent => {\n      this.props.onCellLayout && this.props.onCellLayout(nativeEvent, this.props.cellKey, this.props.index);\n    };\n  }\n  static getDerivedStateFromProps(props, prevState) {\n    return {\n      separatorProps: _objectSpread(_objectSpread({}, prevState.separatorProps), {}, {\n        leadingItem: props.item\n      })\n    };\n  }\n\n  // TODO: consider factoring separator stuff out of VirtualizedList into FlatList since it's not\n  // reused by SectionList and we can keep VirtualizedList simpler.\n  // $FlowFixMe[missing-local-annot]\n\n  updateSeparatorProps(newProps) {\n    this.setState(state => ({\n      separatorProps: _objectSpread(_objectSpread({}, state.separatorProps), newProps)\n    }));\n  }\n  componentWillUnmount() {\n    this.props.onUnmount(this.props.cellKey);\n  }\n  _renderElement(renderItem, ListItemComponent, item, index) {\n    if (renderItem && ListItemComponent) {\n      console.warn('VirtualizedList: Both ListItemComponent and renderItem props are present. ListItemComponent will take' + ' precedence over renderItem.');\n    }\n    if (ListItemComponent) {\n      /* $FlowFixMe[not-a-component] (>=0.108.0 site=react_native_fb) This\n       * comment suppresses an error found when Flow v0.108 was deployed. To\n       * see the error, delete this comment and run Flow. */\n      /* $FlowFixMe[incompatible-type-arg] (>=0.108.0 site=react_native_fb)\n       * This comment suppresses an error found when Flow v0.108 was deployed.\n       * To see the error, delete this comment and run Flow. */\n      return /*#__PURE__*/React.createElement(ListItemComponent, {\n        item,\n        index,\n        separators: this._separators\n      });\n    }\n    if (renderItem) {\n      return renderItem({\n        item,\n        index,\n        separators: this._separators\n      });\n    }\n    invariant(false, 'VirtualizedList: Either ListItemComponent or renderItem props are required but none were found.');\n  }\n  render() {\n    var _this$props4 = this.props,\n      CellRendererComponent = _this$props4.CellRendererComponent,\n      ItemSeparatorComponent = _this$props4.ItemSeparatorComponent,\n      ListItemComponent = _this$props4.ListItemComponent,\n      cellKey = _this$props4.cellKey,\n      horizontal = _this$props4.horizontal,\n      item = _this$props4.item,\n      index = _this$props4.index,\n      inversionStyle = _this$props4.inversionStyle,\n      onCellFocusCapture = _this$props4.onCellFocusCapture,\n      onCellLayout = _this$props4.onCellLayout,\n      renderItem = _this$props4.renderItem;\n    var element = this._renderElement(renderItem, ListItemComponent, item, index);\n\n    // NOTE: that when this is a sticky header, `onLayout` will get automatically extracted and\n    // called explicitly by `ScrollViewStickyHeader`.\n    var itemSeparator = /*#__PURE__*/React.isValidElement(ItemSeparatorComponent) ?\n    // $FlowFixMe[incompatible-type]\n    ItemSeparatorComponent :\n    // $FlowFixMe[incompatible-type]\n    ItemSeparatorComponent && /*#__PURE__*/React.createElement(ItemSeparatorComponent, this.state.separatorProps);\n    var cellStyle = inversionStyle ? horizontal ? [styles.rowReverse, inversionStyle] : [styles.columnReverse, inversionStyle] : horizontal ? [styles.row, inversionStyle] : inversionStyle;\n    var result = !CellRendererComponent ? /*#__PURE__*/React.createElement(View, _extends({\n      style: cellStyle,\n      onFocusCapture: onCellFocusCapture\n    }, onCellLayout && {\n      onLayout: this._onLayout\n    }), element, itemSeparator) : /*#__PURE__*/React.createElement(CellRendererComponent, _extends({\n      cellKey: cellKey,\n      index: index,\n      item: item,\n      style: cellStyle,\n      onFocusCapture: onCellFocusCapture\n    }, onCellLayout && {\n      onLayout: this._onLayout\n    }), element, itemSeparator);\n    return /*#__PURE__*/React.createElement(VirtualizedListCellContextProvider, {\n      cellKey: this.props.cellKey\n    }, result);\n  }\n}\nvar styles = StyleSheet.create({\n  row: {\n    flexDirection: 'row'\n  },\n  rowReverse: {\n    flexDirection: 'row-reverse'\n  },\n  columnReverse: {\n    flexDirection: 'column-reverse'\n  }\n});","import _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport RefreshControl from '../../../exports/RefreshControl';\nimport ScrollView from '../../../exports/ScrollView';\nimport View from '../../../exports/View';\nimport StyleSheet from '../../../exports/StyleSheet';\nimport Batchinator from '../Batchinator';\nimport clamp from '../Utilities/clamp';\nimport infoLog from '../infoLog';\nimport { CellRenderMask } from './CellRenderMask';\nimport ChildListCollection from './ChildListCollection';\nimport FillRateHelper from '../FillRateHelper';\nimport StateSafePureComponent from './StateSafePureComponent';\nimport ViewabilityHelper from '../ViewabilityHelper';\nimport CellRenderer from './VirtualizedListCellRenderer';\nimport { VirtualizedListCellContextProvider, VirtualizedListContext, VirtualizedListContextProvider } from './VirtualizedListContext.js';\nimport { computeWindowedRenderLimits, keyExtractor as defaultKeyExtractor } from '../VirtualizeUtils';\nimport invariant from 'fbjs/lib/invariant';\nimport nullthrows from 'nullthrows';\nimport * as React from 'react';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nvar ON_EDGE_REACHED_EPSILON = 0.001;\nvar _usedIndexForKey = false;\nvar _keylessItemComponentName = '';\n/**\n * Default Props Helper Functions\n * Use the following helper functions for default values\n */\n\n// horizontalOrDefault(this.props.horizontal)\nfunction horizontalOrDefault(horizontal) {\n  return horizontal !== null && horizontal !== void 0 ? horizontal : false;\n}\n\n// initialNumToRenderOrDefault(this.props.initialNumToRender)\nfunction initialNumToRenderOrDefault(initialNumToRender) {\n  return initialNumToRender !== null && initialNumToRender !== void 0 ? initialNumToRender : 10;\n}\n\n// maxToRenderPerBatchOrDefault(this.props.maxToRenderPerBatch)\nfunction maxToRenderPerBatchOrDefault(maxToRenderPerBatch) {\n  return maxToRenderPerBatch !== null && maxToRenderPerBatch !== void 0 ? maxToRenderPerBatch : 10;\n}\n\n// onStartReachedThresholdOrDefault(this.props.onStartReachedThreshold)\nfunction onStartReachedThresholdOrDefault(onStartReachedThreshold) {\n  return onStartReachedThreshold !== null && onStartReachedThreshold !== void 0 ? onStartReachedThreshold : 2;\n}\n\n// onEndReachedThresholdOrDefault(this.props.onEndReachedThreshold)\nfunction onEndReachedThresholdOrDefault(onEndReachedThreshold) {\n  return onEndReachedThreshold !== null && onEndReachedThreshold !== void 0 ? onEndReachedThreshold : 2;\n}\n\n// getScrollingThreshold(visibleLength, onEndReachedThreshold)\nfunction getScrollingThreshold(threshold, visibleLength) {\n  return threshold * visibleLength / 2;\n}\n\n// scrollEventThrottleOrDefault(this.props.scrollEventThrottle)\nfunction scrollEventThrottleOrDefault(scrollEventThrottle) {\n  return scrollEventThrottle !== null && scrollEventThrottle !== void 0 ? scrollEventThrottle : 50;\n}\n\n// windowSizeOrDefault(this.props.windowSize)\nfunction windowSizeOrDefault(windowSize) {\n  return windowSize !== null && windowSize !== void 0 ? windowSize : 21;\n}\nfunction findLastWhere(arr, predicate) {\n  for (var i = arr.length - 1; i >= 0; i--) {\n    if (predicate(arr[i])) {\n      return arr[i];\n    }\n  }\n  return null;\n}\n\n/**\n * Base implementation for the more convenient [`<FlatList>`](https://reactnative.dev/docs/flatlist)\n * and [`<SectionList>`](https://reactnative.dev/docs/sectionlist) components, which are also better\n * documented. In general, this should only really be used if you need more flexibility than\n * `FlatList` provides, e.g. for use with immutable data instead of plain arrays.\n *\n * Virtualization massively improves memory consumption and performance of large lists by\n * maintaining a finite render window of active items and replacing all items outside of the render\n * window with appropriately sized blank space. The window adapts to scrolling behavior, and items\n * are rendered incrementally with low-pri (after any running interactions) if they are far from the\n * visible area, or with hi-pri otherwise to minimize the potential of seeing blank space.\n *\n * Some caveats:\n *\n * - Internal state is not preserved when content scrolls out of the render window. Make sure all\n *   your data is captured in the item data or external stores like Flux, Redux, or Relay.\n * - This is a `PureComponent` which means that it will not re-render if `props` remain shallow-\n *   equal. Make sure that everything your `renderItem` function depends on is passed as a prop\n *   (e.g. `extraData`) that is not `===` after updates, otherwise your UI may not update on\n *   changes. This includes the `data` prop and parent component state.\n * - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously\n *   offscreen. This means it's possible to scroll faster than the fill rate ands momentarily see\n *   blank content. This is a tradeoff that can be adjusted to suit the needs of each application,\n *   and we are working on improving it behind the scenes.\n * - By default, the list looks for a `key` or `id` prop on each item and uses that for the React key.\n *   Alternatively, you can provide a custom `keyExtractor` prop.\n * - As an effort to remove defaultProps, use helper functions when referencing certain props\n *\n */\nclass VirtualizedList extends StateSafePureComponent {\n  // scrollToEnd may be janky without getItemLayout prop\n  scrollToEnd(params) {\n    var animated = params ? params.animated : true;\n    var veryLast = this.props.getItemCount(this.props.data) - 1;\n    if (veryLast < 0) {\n      return;\n    }\n    var frame = this.__getFrameMetricsApprox(veryLast, this.props);\n    var offset = Math.max(0, frame.offset + frame.length + this._footerLength - this._scrollMetrics.visibleLength);\n    if (this._scrollRef == null) {\n      return;\n    }\n    if (this._scrollRef.scrollTo == null) {\n      console.warn('No scrollTo method provided. This may be because you have two nested ' + 'VirtualizedLists with the same orientation, or because you are ' + 'using a custom component that does not implement scrollTo.');\n      return;\n    }\n    this._scrollRef.scrollTo(horizontalOrDefault(this.props.horizontal) ? {\n      x: offset,\n      animated\n    } : {\n      y: offset,\n      animated\n    });\n  }\n\n  // scrollToIndex may be janky without getItemLayout prop\n  scrollToIndex(params) {\n    var _this$props = this.props,\n      data = _this$props.data,\n      horizontal = _this$props.horizontal,\n      getItemCount = _this$props.getItemCount,\n      getItemLayout = _this$props.getItemLayout,\n      onScrollToIndexFailed = _this$props.onScrollToIndexFailed;\n    var animated = params.animated,\n      index = params.index,\n      viewOffset = params.viewOffset,\n      viewPosition = params.viewPosition;\n    invariant(index >= 0, \"scrollToIndex out of range: requested index \" + index + \" but minimum is 0\");\n    invariant(getItemCount(data) >= 1, \"scrollToIndex out of range: item length \" + getItemCount(data) + \" but minimum is 1\");\n    invariant(index < getItemCount(data), \"scrollToIndex out of range: requested index \" + index + \" is out of 0 to \" + (getItemCount(data) - 1));\n    if (!getItemLayout && index > this._highestMeasuredFrameIndex) {\n      invariant(!!onScrollToIndexFailed, 'scrollToIndex should be used in conjunction with getItemLayout or onScrollToIndexFailed, ' + 'otherwise there is no way to know the location of offscreen indices or handle failures.');\n      onScrollToIndexFailed({\n        averageItemLength: this._averageCellLength,\n        highestMeasuredFrameIndex: this._highestMeasuredFrameIndex,\n        index\n      });\n      return;\n    }\n    var frame = this.__getFrameMetricsApprox(Math.floor(index), this.props);\n    var offset = Math.max(0, this._getOffsetApprox(index, this.props) - (viewPosition || 0) * (this._scrollMetrics.visibleLength - frame.length)) - (viewOffset || 0);\n    if (this._scrollRef == null) {\n      return;\n    }\n    if (this._scrollRef.scrollTo == null) {\n      console.warn('No scrollTo method provided. This may be because you have two nested ' + 'VirtualizedLists with the same orientation, or because you are ' + 'using a custom component that does not implement scrollTo.');\n      return;\n    }\n    this._scrollRef.scrollTo(horizontal ? {\n      x: offset,\n      animated\n    } : {\n      y: offset,\n      animated\n    });\n  }\n\n  // scrollToItem may be janky without getItemLayout prop. Required linear scan through items -\n  // use scrollToIndex instead if possible.\n  scrollToItem(params) {\n    var item = params.item;\n    var _this$props2 = this.props,\n      data = _this$props2.data,\n      getItem = _this$props2.getItem,\n      getItemCount = _this$props2.getItemCount;\n    var itemCount = getItemCount(data);\n    for (var _index = 0; _index < itemCount; _index++) {\n      if (getItem(data, _index) === item) {\n        this.scrollToIndex(_objectSpread(_objectSpread({}, params), {}, {\n          index: _index\n        }));\n        break;\n      }\n    }\n  }\n\n  /**\n   * Scroll to a specific content pixel offset in the list.\n   *\n   * Param `offset` expects the offset to scroll to.\n   * In case of `horizontal` is true, the offset is the x-value,\n   * in any other case the offset is the y-value.\n   *\n   * Param `animated` (`true` by default) defines whether the list\n   * should do an animation while scrolling.\n   */\n  scrollToOffset(params) {\n    var animated = params.animated,\n      offset = params.offset;\n    if (this._scrollRef == null) {\n      return;\n    }\n    if (this._scrollRef.scrollTo == null) {\n      console.warn('No scrollTo method provided. This may be because you have two nested ' + 'VirtualizedLists with the same orientation, or because you are ' + 'using a custom component that does not implement scrollTo.');\n      return;\n    }\n    this._scrollRef.scrollTo(horizontalOrDefault(this.props.horizontal) ? {\n      x: offset,\n      animated\n    } : {\n      y: offset,\n      animated\n    });\n  }\n  recordInteraction() {\n    this._nestedChildLists.forEach(childList => {\n      childList.recordInteraction();\n    });\n    this._viewabilityTuples.forEach(t => {\n      t.viewabilityHelper.recordInteraction();\n    });\n    this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n  }\n  flashScrollIndicators() {\n    if (this._scrollRef == null) {\n      return;\n    }\n    this._scrollRef.flashScrollIndicators();\n  }\n\n  /**\n   * Provides a handle to the underlying scroll responder.\n   * Note that `this._scrollRef` might not be a `ScrollView`, so we\n   * need to check that it responds to `getScrollResponder` before calling it.\n   */\n  getScrollResponder() {\n    if (this._scrollRef && this._scrollRef.getScrollResponder) {\n      return this._scrollRef.getScrollResponder();\n    }\n  }\n  getScrollableNode() {\n    if (this._scrollRef && this._scrollRef.getScrollableNode) {\n      return this._scrollRef.getScrollableNode();\n    } else {\n      return this._scrollRef;\n    }\n  }\n  getScrollRef() {\n    if (this._scrollRef && this._scrollRef.getScrollRef) {\n      return this._scrollRef.getScrollRef();\n    } else {\n      return this._scrollRef;\n    }\n  }\n  _getCellKey() {\n    var _this$context;\n    return ((_this$context = this.context) == null ? void 0 : _this$context.cellKey) || 'rootList';\n  }\n\n  // $FlowFixMe[missing-local-annot]\n\n  hasMore() {\n    return this._hasMore;\n  }\n\n  // $FlowFixMe[missing-local-annot]\n\n  // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n\n  constructor(_props) {\n    var _this$props$updateCel;\n    super(_props);\n    this._getScrollMetrics = () => {\n      return this._scrollMetrics;\n    };\n    this._getOutermostParentListRef = () => {\n      if (this._isNestedWithSameOrientation()) {\n        return this.context.getOutermostParentListRef();\n      } else {\n        return this;\n      }\n    };\n    this._registerAsNestedChild = childList => {\n      this._nestedChildLists.add(childList.ref, childList.cellKey);\n      if (this._hasInteracted) {\n        childList.ref.recordInteraction();\n      }\n    };\n    this._unregisterAsNestedChild = childList => {\n      this._nestedChildLists.remove(childList.ref);\n    };\n    this._onUpdateSeparators = (keys, newProps) => {\n      keys.forEach(key => {\n        var ref = key != null && this._cellRefs[key];\n        ref && ref.updateSeparatorProps(newProps);\n      });\n    };\n    this._getSpacerKey = isVertical => isVertical ? 'height' : 'width';\n    this._averageCellLength = 0;\n    this._cellRefs = {};\n    this._frames = {};\n    this._footerLength = 0;\n    this._hasTriggeredInitialScrollToIndex = false;\n    this._hasInteracted = false;\n    this._hasMore = false;\n    this._hasWarned = {};\n    this._headerLength = 0;\n    this._hiPriInProgress = false;\n    this._highestMeasuredFrameIndex = 0;\n    this._indicesToKeys = new Map();\n    this._lastFocusedCellKey = null;\n    this._nestedChildLists = new ChildListCollection();\n    this._offsetFromParentVirtualizedList = 0;\n    this._prevParentOffset = 0;\n    this._scrollMetrics = {\n      contentLength: 0,\n      dOffset: 0,\n      dt: 10,\n      offset: 0,\n      timestamp: 0,\n      velocity: 0,\n      visibleLength: 0,\n      zoomScale: 1\n    };\n    this._scrollRef = null;\n    this._sentStartForContentLength = 0;\n    this._sentEndForContentLength = 0;\n    this._totalCellLength = 0;\n    this._totalCellsMeasured = 0;\n    this._viewabilityTuples = [];\n    this._captureScrollRef = ref => {\n      this._scrollRef = ref;\n    };\n    this._defaultRenderScrollComponent = props => {\n      var onRefresh = props.onRefresh;\n      if (this._isNestedWithSameOrientation()) {\n        // $FlowFixMe[prop-missing] - Typing ReactNativeComponent revealed errors\n        return /*#__PURE__*/React.createElement(View, props);\n      } else if (onRefresh) {\n        var _props$refreshing;\n        invariant(typeof props.refreshing === 'boolean', '`refreshing` prop must be set as a boolean in order to use `onRefresh`, but got `' + JSON.stringify((_props$refreshing = props.refreshing) !== null && _props$refreshing !== void 0 ? _props$refreshing : 'undefined') + '`');\n        return (\n          /*#__PURE__*/\n          // $FlowFixMe[prop-missing] Invalid prop usage\n          // $FlowFixMe[incompatible-use]\n          React.createElement(ScrollView, _extends({}, props, {\n            refreshControl: props.refreshControl == null ? /*#__PURE__*/React.createElement(RefreshControl\n            // $FlowFixMe[incompatible-type]\n            , {\n              refreshing: props.refreshing,\n              onRefresh: onRefresh,\n              progressViewOffset: props.progressViewOffset\n            }) : props.refreshControl\n          }))\n        );\n      } else {\n        // $FlowFixMe[prop-missing] Invalid prop usage\n        // $FlowFixMe[incompatible-use]\n        return /*#__PURE__*/React.createElement(ScrollView, props);\n      }\n    };\n    this._onCellLayout = (e, cellKey, index) => {\n      var layout = e.nativeEvent.layout;\n      var next = {\n        offset: this._selectOffset(layout),\n        length: this._selectLength(layout),\n        index,\n        inLayout: true\n      };\n      var curr = this._frames[cellKey];\n      if (!curr || next.offset !== curr.offset || next.length !== curr.length || index !== curr.index) {\n        this._totalCellLength += next.length - (curr ? curr.length : 0);\n        this._totalCellsMeasured += curr ? 0 : 1;\n        this._averageCellLength = this._totalCellLength / this._totalCellsMeasured;\n        this._frames[cellKey] = next;\n        this._highestMeasuredFrameIndex = Math.max(this._highestMeasuredFrameIndex, index);\n        this._scheduleCellsToRenderUpdate();\n      } else {\n        this._frames[cellKey].inLayout = true;\n      }\n      this._triggerRemeasureForChildListsInCell(cellKey);\n      this._computeBlankness();\n      this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n    };\n    this._onCellUnmount = cellKey => {\n      delete this._cellRefs[cellKey];\n      var curr = this._frames[cellKey];\n      if (curr) {\n        this._frames[cellKey] = _objectSpread(_objectSpread({}, curr), {}, {\n          inLayout: false\n        });\n      }\n    };\n    this._onLayout = e => {\n      if (this._isNestedWithSameOrientation()) {\n        // Need to adjust our scroll metrics to be relative to our containing\n        // VirtualizedList before we can make claims about list item viewability\n        this.measureLayoutRelativeToContainingList();\n      } else {\n        this._scrollMetrics.visibleLength = this._selectLength(e.nativeEvent.layout);\n      }\n      this.props.onLayout && this.props.onLayout(e);\n      this._scheduleCellsToRenderUpdate();\n      this._maybeCallOnEdgeReached();\n    };\n    this._onLayoutEmpty = e => {\n      this.props.onLayout && this.props.onLayout(e);\n    };\n    this._onLayoutFooter = e => {\n      this._triggerRemeasureForChildListsInCell(this._getFooterCellKey());\n      this._footerLength = this._selectLength(e.nativeEvent.layout);\n    };\n    this._onLayoutHeader = e => {\n      this._headerLength = this._selectLength(e.nativeEvent.layout);\n    };\n    this._onContentSizeChange = (width, height) => {\n      if (width > 0 && height > 0 && this.props.initialScrollIndex != null && this.props.initialScrollIndex > 0 && !this._hasTriggeredInitialScrollToIndex) {\n        if (this.props.contentOffset == null) {\n          if (this.props.initialScrollIndex < this.props.getItemCount(this.props.data)) {\n            this.scrollToIndex({\n              animated: false,\n              index: nullthrows(this.props.initialScrollIndex)\n            });\n          } else {\n            this.scrollToEnd({\n              animated: false\n            });\n          }\n        }\n        this._hasTriggeredInitialScrollToIndex = true;\n      }\n      if (this.props.onContentSizeChange) {\n        this.props.onContentSizeChange(width, height);\n      }\n      this._scrollMetrics.contentLength = this._selectLength({\n        height,\n        width\n      });\n      this._scheduleCellsToRenderUpdate();\n      this._maybeCallOnEdgeReached();\n    };\n    this._convertParentScrollMetrics = metrics => {\n      // Offset of the top of the nested list relative to the top of its parent's viewport\n      var offset = metrics.offset - this._offsetFromParentVirtualizedList;\n      // Child's visible length is the same as its parent's\n      var visibleLength = metrics.visibleLength;\n      var dOffset = offset - this._scrollMetrics.offset;\n      var contentLength = this._scrollMetrics.contentLength;\n      return {\n        visibleLength,\n        contentLength,\n        offset,\n        dOffset\n      };\n    };\n    this._onScroll = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onScroll(e);\n      });\n      if (this.props.onScroll) {\n        this.props.onScroll(e);\n      }\n      var timestamp = e.timeStamp;\n      var visibleLength = this._selectLength(e.nativeEvent.layoutMeasurement);\n      var contentLength = this._selectLength(e.nativeEvent.contentSize);\n      var offset = this._selectOffset(e.nativeEvent.contentOffset);\n      var dOffset = offset - this._scrollMetrics.offset;\n      if (this._isNestedWithSameOrientation()) {\n        if (this._scrollMetrics.contentLength === 0) {\n          // Ignore scroll events until onLayout has been called and we\n          // know our offset from our offset from our parent\n          return;\n        }\n        var _this$_convertParentS = this._convertParentScrollMetrics({\n          visibleLength,\n          offset\n        });\n        visibleLength = _this$_convertParentS.visibleLength;\n        contentLength = _this$_convertParentS.contentLength;\n        offset = _this$_convertParentS.offset;\n        dOffset = _this$_convertParentS.dOffset;\n      }\n      var dt = this._scrollMetrics.timestamp ? Math.max(1, timestamp - this._scrollMetrics.timestamp) : 1;\n      var velocity = dOffset / dt;\n      if (dt > 500 && this._scrollMetrics.dt > 500 && contentLength > 5 * visibleLength && !this._hasWarned.perf) {\n        infoLog('VirtualizedList: You have a large list that is slow to update - make sure your ' + 'renderItem function renders components that follow React performance best practices ' + 'like PureComponent, shouldComponentUpdate, etc.', {\n          dt,\n          prevDt: this._scrollMetrics.dt,\n          contentLength\n        });\n        this._hasWarned.perf = true;\n      }\n\n      // For invalid negative values (w/ RTL), set this to 1.\n      var zoomScale = e.nativeEvent.zoomScale < 0 ? 1 : e.nativeEvent.zoomScale;\n      this._scrollMetrics = {\n        contentLength,\n        dt,\n        dOffset,\n        offset,\n        timestamp,\n        velocity,\n        visibleLength,\n        zoomScale\n      };\n      this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n      if (!this.props) {\n        return;\n      }\n      this._maybeCallOnEdgeReached();\n      if (velocity !== 0) {\n        this._fillRateHelper.activate();\n      }\n      this._computeBlankness();\n      this._scheduleCellsToRenderUpdate();\n    };\n    this._onScrollBeginDrag = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onScrollBeginDrag(e);\n      });\n      this._viewabilityTuples.forEach(tuple => {\n        tuple.viewabilityHelper.recordInteraction();\n      });\n      this._hasInteracted = true;\n      this.props.onScrollBeginDrag && this.props.onScrollBeginDrag(e);\n    };\n    this._onScrollEndDrag = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onScrollEndDrag(e);\n      });\n      var velocity = e.nativeEvent.velocity;\n      if (velocity) {\n        this._scrollMetrics.velocity = this._selectOffset(velocity);\n      }\n      this._computeBlankness();\n      this.props.onScrollEndDrag && this.props.onScrollEndDrag(e);\n    };\n    this._onMomentumScrollBegin = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onMomentumScrollBegin(e);\n      });\n      this.props.onMomentumScrollBegin && this.props.onMomentumScrollBegin(e);\n    };\n    this._onMomentumScrollEnd = e => {\n      this._nestedChildLists.forEach(childList => {\n        childList._onMomentumScrollEnd(e);\n      });\n      this._scrollMetrics.velocity = 0;\n      this._computeBlankness();\n      this.props.onMomentumScrollEnd && this.props.onMomentumScrollEnd(e);\n    };\n    this._updateCellsToRender = () => {\n      this._updateViewableItems(this.props, this.state.cellsAroundViewport);\n      this.setState((state, props) => {\n        var cellsAroundViewport = this._adjustCellsAroundViewport(props, state.cellsAroundViewport);\n        var renderMask = VirtualizedList._createRenderMask(props, cellsAroundViewport, this._getNonViewportRenderRegions(props));\n        if (cellsAroundViewport.first === state.cellsAroundViewport.first && cellsAroundViewport.last === state.cellsAroundViewport.last && renderMask.equals(state.renderMask)) {\n          return null;\n        }\n        return {\n          cellsAroundViewport,\n          renderMask\n        };\n      });\n    };\n    this._createViewToken = (index, isViewable, props\n    // $FlowFixMe[missing-local-annot]\n    ) => {\n      var data = props.data,\n        getItem = props.getItem;\n      var item = getItem(data, index);\n      return {\n        index,\n        item,\n        key: this._keyExtractor(item, index, props),\n        isViewable\n      };\n    };\n    this._getOffsetApprox = (index, props) => {\n      if (Number.isInteger(index)) {\n        return this.__getFrameMetricsApprox(index, props).offset;\n      } else {\n        var frameMetrics = this.__getFrameMetricsApprox(Math.floor(index), props);\n        var remainder = index - Math.floor(index);\n        return frameMetrics.offset + remainder * frameMetrics.length;\n      }\n    };\n    this.__getFrameMetricsApprox = (index, props) => {\n      var frame = this._getFrameMetrics(index, props);\n      if (frame && frame.index === index) {\n        // check for invalid frames due to row re-ordering\n        return frame;\n      } else {\n        var data = props.data,\n          getItemCount = props.getItemCount,\n          getItemLayout = props.getItemLayout;\n        invariant(index >= 0 && index < getItemCount(data), 'Tried to get frame for out of range index ' + index);\n        invariant(!getItemLayout, 'Should not have to estimate frames when a measurement metrics function is provided');\n        return {\n          length: this._averageCellLength,\n          offset: this._averageCellLength * index\n        };\n      }\n    };\n    this._getFrameMetrics = (index, props) => {\n      var data = props.data,\n        getItem = props.getItem,\n        getItemCount = props.getItemCount,\n        getItemLayout = props.getItemLayout;\n      invariant(index >= 0 && index < getItemCount(data), 'Tried to get frame for out of range index ' + index);\n      var item = getItem(data, index);\n      var frame = this._frames[this._keyExtractor(item, index, props)];\n      if (!frame || frame.index !== index) {\n        if (getItemLayout) {\n          /* $FlowFixMe[prop-missing] (>=0.63.0 site=react_native_fb) This comment\n           * suppresses an error found when Flow v0.63 was deployed. To see the error\n           * delete this comment and run Flow. */\n          return getItemLayout(data, index);\n        }\n      }\n      return frame;\n    };\n    this._getNonViewportRenderRegions = props => {\n      // Keep a viewport's worth of content around the last focused cell to allow\n      // random navigation around it without any blanking. E.g. tabbing from one\n      // focused item out of viewport to another.\n      if (!(this._lastFocusedCellKey && this._cellRefs[this._lastFocusedCellKey])) {\n        return [];\n      }\n      var lastFocusedCellRenderer = this._cellRefs[this._lastFocusedCellKey];\n      var focusedCellIndex = lastFocusedCellRenderer.props.index;\n      var itemCount = props.getItemCount(props.data);\n\n      // The last cell we rendered may be at a new index. Bail if we don't know\n      // where it is.\n      if (focusedCellIndex >= itemCount || this._keyExtractor(props.getItem(props.data, focusedCellIndex), focusedCellIndex, props) !== this._lastFocusedCellKey) {\n        return [];\n      }\n      var first = focusedCellIndex;\n      var heightOfCellsBeforeFocused = 0;\n      for (var i = first - 1; i >= 0 && heightOfCellsBeforeFocused < this._scrollMetrics.visibleLength; i--) {\n        first--;\n        heightOfCellsBeforeFocused += this.__getFrameMetricsApprox(i, props).length;\n      }\n      var last = focusedCellIndex;\n      var heightOfCellsAfterFocused = 0;\n      for (var _i = last + 1; _i < itemCount && heightOfCellsAfterFocused < this._scrollMetrics.visibleLength; _i++) {\n        last++;\n        heightOfCellsAfterFocused += this.__getFrameMetricsApprox(_i, props).length;\n      }\n      return [{\n        first,\n        last\n      }];\n    };\n    this._checkProps(_props);\n    this._fillRateHelper = new FillRateHelper(this._getFrameMetrics);\n    this._updateCellsToRenderBatcher = new Batchinator(this._updateCellsToRender, (_this$props$updateCel = this.props.updateCellsBatchingPeriod) !== null && _this$props$updateCel !== void 0 ? _this$props$updateCel : 50);\n    if (this.props.viewabilityConfigCallbackPairs) {\n      this._viewabilityTuples = this.props.viewabilityConfigCallbackPairs.map(pair => ({\n        viewabilityHelper: new ViewabilityHelper(pair.viewabilityConfig),\n        onViewableItemsChanged: pair.onViewableItemsChanged\n      }));\n    } else {\n      var _this$props3 = this.props,\n        onViewableItemsChanged = _this$props3.onViewableItemsChanged,\n        viewabilityConfig = _this$props3.viewabilityConfig;\n      if (onViewableItemsChanged) {\n        this._viewabilityTuples.push({\n          viewabilityHelper: new ViewabilityHelper(viewabilityConfig),\n          onViewableItemsChanged: onViewableItemsChanged\n        });\n      }\n    }\n    var initialRenderRegion = VirtualizedList._initialRenderRegion(_props);\n    this.state = {\n      cellsAroundViewport: initialRenderRegion,\n      renderMask: VirtualizedList._createRenderMask(_props, initialRenderRegion)\n    };\n\n    // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n    // For issue https://github.com/necolas/react-native-web/issues/995\n    this.invertedWheelEventHandler = ev => {\n      var scrollOffset = this.props.horizontal ? ev.target.scrollLeft : ev.target.scrollTop;\n      var scrollLength = this.props.horizontal ? ev.target.scrollWidth : ev.target.scrollHeight;\n      var clientLength = this.props.horizontal ? ev.target.clientWidth : ev.target.clientHeight;\n      var isEventTargetScrollable = scrollLength > clientLength;\n      var delta = this.props.horizontal ? ev.deltaX || ev.wheelDeltaX : ev.deltaY || ev.wheelDeltaY;\n      var leftoverDelta = delta;\n      if (isEventTargetScrollable) {\n        leftoverDelta = delta < 0 ? Math.min(delta + scrollOffset, 0) : Math.max(delta - (scrollLength - clientLength - scrollOffset), 0);\n      }\n      var targetDelta = delta - leftoverDelta;\n      if (this.props.inverted && this._scrollRef && this._scrollRef.getScrollableNode) {\n        var node = this._scrollRef.getScrollableNode();\n        if (this.props.horizontal) {\n          ev.target.scrollLeft += targetDelta;\n          var nextScrollLeft = node.scrollLeft - leftoverDelta;\n          node.scrollLeft = !this.props.getItemLayout ? Math.min(nextScrollLeft, this._totalCellLength) : nextScrollLeft;\n        } else {\n          ev.target.scrollTop += targetDelta;\n          var nextScrollTop = node.scrollTop - leftoverDelta;\n          node.scrollTop = !this.props.getItemLayout ? Math.min(nextScrollTop, this._totalCellLength) : nextScrollTop;\n        }\n        ev.preventDefault();\n      }\n    };\n  }\n  _checkProps(props) {\n    var onScroll = props.onScroll,\n      windowSize = props.windowSize,\n      getItemCount = props.getItemCount,\n      data = props.data,\n      initialScrollIndex = props.initialScrollIndex;\n    invariant(\n    // $FlowFixMe[prop-missing]\n    !onScroll || !onScroll.__isNative, 'Components based on VirtualizedList must be wrapped with Animated.createAnimatedComponent ' + 'to support native onScroll events with useNativeDriver');\n    invariant(windowSizeOrDefault(windowSize) > 0, 'VirtualizedList: The windowSize prop must be present and set to a value greater than 0.');\n    invariant(getItemCount, 'VirtualizedList: The \"getItemCount\" prop must be provided');\n    var itemCount = getItemCount(data);\n    if (initialScrollIndex != null && !this._hasTriggeredInitialScrollToIndex && (initialScrollIndex < 0 || itemCount > 0 && initialScrollIndex >= itemCount) && !this._hasWarned.initialScrollIndex) {\n      console.warn(\"initialScrollIndex \\\"\" + initialScrollIndex + \"\\\" is not valid (list has \" + itemCount + \" items)\");\n      this._hasWarned.initialScrollIndex = true;\n    }\n    if (__DEV__ && !this._hasWarned.flexWrap) {\n      // $FlowFixMe[underconstrained-implicit-instantiation]\n      var flatStyles = StyleSheet.flatten(this.props.contentContainerStyle);\n      if (flatStyles != null && flatStyles.flexWrap === 'wrap') {\n        console.warn('`flexWrap: `wrap`` is not supported with the `VirtualizedList` components.' + 'Consider using `numColumns` with `FlatList` instead.');\n        this._hasWarned.flexWrap = true;\n      }\n    }\n  }\n  static _createRenderMask(props, cellsAroundViewport, additionalRegions) {\n    var itemCount = props.getItemCount(props.data);\n    invariant(cellsAroundViewport.first >= 0 && cellsAroundViewport.last >= cellsAroundViewport.first - 1 && cellsAroundViewport.last < itemCount, \"Invalid cells around viewport \\\"[\" + cellsAroundViewport.first + \", \" + cellsAroundViewport.last + \"]\\\" was passed to VirtualizedList._createRenderMask\");\n    var renderMask = new CellRenderMask(itemCount);\n    if (itemCount > 0) {\n      var allRegions = [cellsAroundViewport, ...(additionalRegions !== null && additionalRegions !== void 0 ? additionalRegions : [])];\n      for (var _i2 = 0, _allRegions = allRegions; _i2 < _allRegions.length; _i2++) {\n        var region = _allRegions[_i2];\n        renderMask.addCells(region);\n      }\n\n      // The initially rendered cells are retained as part of the\n      // \"scroll-to-top\" optimization\n      if (props.initialScrollIndex == null || props.initialScrollIndex <= 0) {\n        var initialRegion = VirtualizedList._initialRenderRegion(props);\n        renderMask.addCells(initialRegion);\n      }\n\n      // The layout coordinates of sticker headers may be off-screen while the\n      // actual header is on-screen. Keep the most recent before the viewport\n      // rendered, even if its layout coordinates are not in viewport.\n      var stickyIndicesSet = new Set(props.stickyHeaderIndices);\n      VirtualizedList._ensureClosestStickyHeader(props, stickyIndicesSet, renderMask, cellsAroundViewport.first);\n    }\n    return renderMask;\n  }\n  static _initialRenderRegion(props) {\n    var _props$initialScrollI;\n    var itemCount = props.getItemCount(props.data);\n    var firstCellIndex = Math.max(0, Math.min(itemCount - 1, Math.floor((_props$initialScrollI = props.initialScrollIndex) !== null && _props$initialScrollI !== void 0 ? _props$initialScrollI : 0)));\n    var lastCellIndex = Math.min(itemCount, firstCellIndex + initialNumToRenderOrDefault(props.initialNumToRender)) - 1;\n    return {\n      first: firstCellIndex,\n      last: lastCellIndex\n    };\n  }\n  static _ensureClosestStickyHeader(props, stickyIndicesSet, renderMask, cellIdx) {\n    var stickyOffset = props.ListHeaderComponent ? 1 : 0;\n    for (var itemIdx = cellIdx - 1; itemIdx >= 0; itemIdx--) {\n      if (stickyIndicesSet.has(itemIdx + stickyOffset)) {\n        renderMask.addCells({\n          first: itemIdx,\n          last: itemIdx\n        });\n        break;\n      }\n    }\n  }\n  _adjustCellsAroundViewport(props, cellsAroundViewport) {\n    var data = props.data,\n      getItemCount = props.getItemCount;\n    var onEndReachedThreshold = onEndReachedThresholdOrDefault(props.onEndReachedThreshold);\n    var _this$_scrollMetrics = this._scrollMetrics,\n      contentLength = _this$_scrollMetrics.contentLength,\n      offset = _this$_scrollMetrics.offset,\n      visibleLength = _this$_scrollMetrics.visibleLength;\n    var distanceFromEnd = contentLength - visibleLength - offset;\n\n    // Wait until the scroll view metrics have been set up. And until then,\n    // we will trust the initialNumToRender suggestion\n    if (visibleLength <= 0 || contentLength <= 0) {\n      return cellsAroundViewport.last >= getItemCount(data) ? VirtualizedList._constrainToItemCount(cellsAroundViewport, props) : cellsAroundViewport;\n    }\n    var newCellsAroundViewport;\n    if (props.disableVirtualization) {\n      var renderAhead = distanceFromEnd < onEndReachedThreshold * visibleLength ? maxToRenderPerBatchOrDefault(props.maxToRenderPerBatch) : 0;\n      newCellsAroundViewport = {\n        first: 0,\n        last: Math.min(cellsAroundViewport.last + renderAhead, getItemCount(data) - 1)\n      };\n    } else {\n      // If we have a non-zero initialScrollIndex and run this before we've scrolled,\n      // we'll wipe out the initialNumToRender rendered elements starting at initialScrollIndex.\n      // So let's wait until we've scrolled the view to the right place. And until then,\n      // we will trust the initialScrollIndex suggestion.\n\n      // Thus, we want to recalculate the windowed render limits if any of the following hold:\n      // - initialScrollIndex is undefined or is 0\n      // - initialScrollIndex > 0 AND scrolling is complete\n      // - initialScrollIndex > 0 AND the end of the list is visible (this handles the case\n      //   where the list is shorter than the visible area)\n      if (props.initialScrollIndex && !this._scrollMetrics.offset && Math.abs(distanceFromEnd) >= Number.EPSILON) {\n        return cellsAroundViewport.last >= getItemCount(data) ? VirtualizedList._constrainToItemCount(cellsAroundViewport, props) : cellsAroundViewport;\n      }\n      newCellsAroundViewport = computeWindowedRenderLimits(props, maxToRenderPerBatchOrDefault(props.maxToRenderPerBatch), windowSizeOrDefault(props.windowSize), cellsAroundViewport, this.__getFrameMetricsApprox, this._scrollMetrics);\n      invariant(newCellsAroundViewport.last < getItemCount(data), 'computeWindowedRenderLimits() should return range in-bounds');\n    }\n    if (this._nestedChildLists.size() > 0) {\n      // If some cell in the new state has a child list in it, we should only render\n      // up through that item, so that we give that list a chance to render.\n      // Otherwise there's churn from multiple child lists mounting and un-mounting\n      // their items.\n\n      // Will this prevent rendering if the nested list doesn't realize the end?\n      var childIdx = this._findFirstChildWithMore(newCellsAroundViewport.first, newCellsAroundViewport.last);\n      newCellsAroundViewport.last = childIdx !== null && childIdx !== void 0 ? childIdx : newCellsAroundViewport.last;\n    }\n    return newCellsAroundViewport;\n  }\n  _findFirstChildWithMore(first, last) {\n    for (var ii = first; ii <= last; ii++) {\n      var cellKeyForIndex = this._indicesToKeys.get(ii);\n      if (cellKeyForIndex != null && this._nestedChildLists.anyInCell(cellKeyForIndex, childList => childList.hasMore())) {\n        return ii;\n      }\n    }\n    return null;\n  }\n  componentDidMount() {\n    if (this._isNestedWithSameOrientation()) {\n      this.context.registerAsNestedChild({\n        ref: this,\n        cellKey: this.context.cellKey\n      });\n    }\n\n    // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n    this.setupWebWheelHandler();\n  }\n  componentWillUnmount() {\n    if (this._isNestedWithSameOrientation()) {\n      this.context.unregisterAsNestedChild({\n        ref: this\n      });\n    }\n    this._updateCellsToRenderBatcher.dispose({\n      abort: true\n    });\n    this._viewabilityTuples.forEach(tuple => {\n      tuple.viewabilityHelper.dispose();\n    });\n    this._fillRateHelper.deactivateAndFlush();\n\n    // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n    this.teardownWebWheelHandler();\n  }\n\n  // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n  setupWebWheelHandler() {\n    if (this._scrollRef && this._scrollRef.getScrollableNode) {\n      this._scrollRef.getScrollableNode().addEventListener('wheel', this.invertedWheelEventHandler);\n    } else {\n      setTimeout(() => this.setupWebWheelHandler(), 50);\n      return;\n    }\n  }\n\n  // REACT-NATIVE-WEB patch to preserve during future RN merges: Support inverted wheel scroller.\n  teardownWebWheelHandler() {\n    if (this._scrollRef && this._scrollRef.getScrollableNode) {\n      this._scrollRef.getScrollableNode().removeEventListener('wheel', this.invertedWheelEventHandler);\n    }\n  }\n  static getDerivedStateFromProps(newProps, prevState) {\n    // first and last could be stale (e.g. if a new, shorter items props is passed in), so we make\n    // sure we're rendering a reasonable range here.\n    var itemCount = newProps.getItemCount(newProps.data);\n    if (itemCount === prevState.renderMask.numCells()) {\n      return prevState;\n    }\n    var constrainedCells = VirtualizedList._constrainToItemCount(prevState.cellsAroundViewport, newProps);\n    return {\n      cellsAroundViewport: constrainedCells,\n      renderMask: VirtualizedList._createRenderMask(newProps, constrainedCells)\n    };\n  }\n  _pushCells(cells, stickyHeaderIndices, stickyIndicesFromProps, first, last, inversionStyle) {\n    var _this = this;\n    var _this$props4 = this.props,\n      CellRendererComponent = _this$props4.CellRendererComponent,\n      ItemSeparatorComponent = _this$props4.ItemSeparatorComponent,\n      ListHeaderComponent = _this$props4.ListHeaderComponent,\n      ListItemComponent = _this$props4.ListItemComponent,\n      data = _this$props4.data,\n      debug = _this$props4.debug,\n      getItem = _this$props4.getItem,\n      getItemCount = _this$props4.getItemCount,\n      getItemLayout = _this$props4.getItemLayout,\n      horizontal = _this$props4.horizontal,\n      renderItem = _this$props4.renderItem;\n    var stickyOffset = ListHeaderComponent ? 1 : 0;\n    var end = getItemCount(data) - 1;\n    var prevCellKey;\n    last = Math.min(end, last);\n    var _loop = function _loop() {\n      var item = getItem(data, ii);\n      var key = _this._keyExtractor(item, ii, _this.props);\n      _this._indicesToKeys.set(ii, key);\n      if (stickyIndicesFromProps.has(ii + stickyOffset)) {\n        stickyHeaderIndices.push(cells.length);\n      }\n      var shouldListenForLayout = getItemLayout == null || debug || _this._fillRateHelper.enabled();\n      cells.push(/*#__PURE__*/React.createElement(CellRenderer, _extends({\n        CellRendererComponent: CellRendererComponent,\n        ItemSeparatorComponent: ii < end ? ItemSeparatorComponent : undefined,\n        ListItemComponent: ListItemComponent,\n        cellKey: key,\n        horizontal: horizontal,\n        index: ii,\n        inversionStyle: inversionStyle,\n        item: item,\n        key: key,\n        prevCellKey: prevCellKey,\n        onUpdateSeparators: _this._onUpdateSeparators,\n        onCellFocusCapture: e => _this._onCellFocusCapture(key),\n        onUnmount: _this._onCellUnmount,\n        ref: _ref => {\n          _this._cellRefs[key] = _ref;\n        },\n        renderItem: renderItem\n      }, shouldListenForLayout && {\n        onCellLayout: _this._onCellLayout\n      })));\n      prevCellKey = key;\n    };\n    for (var ii = first; ii <= last; ii++) {\n      _loop();\n    }\n  }\n  static _constrainToItemCount(cells, props) {\n    var itemCount = props.getItemCount(props.data);\n    var last = Math.min(itemCount - 1, cells.last);\n    var maxToRenderPerBatch = maxToRenderPerBatchOrDefault(props.maxToRenderPerBatch);\n    return {\n      first: clamp(0, itemCount - 1 - maxToRenderPerBatch, cells.first),\n      last\n    };\n  }\n  _isNestedWithSameOrientation() {\n    var nestedContext = this.context;\n    return !!(nestedContext && !!nestedContext.horizontal === horizontalOrDefault(this.props.horizontal));\n  }\n  _keyExtractor(item, index, props\n  // $FlowFixMe[missing-local-annot]\n  ) {\n    if (props.keyExtractor != null) {\n      return props.keyExtractor(item, index);\n    }\n    var key = defaultKeyExtractor(item, index);\n    if (key === String(index)) {\n      _usedIndexForKey = true;\n      if (item.type && item.type.displayName) {\n        _keylessItemComponentName = item.type.displayName;\n      }\n    }\n    return key;\n  }\n  render() {\n    this._checkProps(this.props);\n    var _this$props5 = this.props,\n      ListEmptyComponent = _this$props5.ListEmptyComponent,\n      ListFooterComponent = _this$props5.ListFooterComponent,\n      ListHeaderComponent = _this$props5.ListHeaderComponent;\n    var _this$props6 = this.props,\n      data = _this$props6.data,\n      horizontal = _this$props6.horizontal;\n    var inversionStyle = this.props.inverted ? horizontalOrDefault(this.props.horizontal) ? styles.horizontallyInverted : styles.verticallyInverted : null;\n    var cells = [];\n    var stickyIndicesFromProps = new Set(this.props.stickyHeaderIndices);\n    var stickyHeaderIndices = [];\n\n    // 1. Add cell for ListHeaderComponent\n    if (ListHeaderComponent) {\n      if (stickyIndicesFromProps.has(0)) {\n        stickyHeaderIndices.push(0);\n      }\n      var _element = /*#__PURE__*/React.isValidElement(ListHeaderComponent) ? ListHeaderComponent :\n      /*#__PURE__*/\n      // $FlowFixMe[not-a-component]\n      // $FlowFixMe[incompatible-type-arg]\n      React.createElement(ListHeaderComponent, null);\n      cells.push(/*#__PURE__*/React.createElement(VirtualizedListCellContextProvider, {\n        cellKey: this._getCellKey() + '-header',\n        key: \"$header\"\n      }, /*#__PURE__*/React.createElement(View, {\n        onLayout: this._onLayoutHeader,\n        style: [inversionStyle, this.props.ListHeaderComponentStyle]\n      },\n      // $FlowFixMe[incompatible-type] - Typing ReactNativeComponent revealed errors\n      _element)));\n    }\n\n    // 2a. Add a cell for ListEmptyComponent if applicable\n    var itemCount = this.props.getItemCount(data);\n    if (itemCount === 0 && ListEmptyComponent) {\n      var _element2 = /*#__PURE__*/React.isValidElement(ListEmptyComponent) ? ListEmptyComponent :\n      /*#__PURE__*/\n      // $FlowFixMe[not-a-component]\n      // $FlowFixMe[incompatible-type-arg]\n      React.createElement(ListEmptyComponent, null);\n      cells.push(/*#__PURE__*/React.createElement(VirtualizedListCellContextProvider, {\n        cellKey: this._getCellKey() + '-empty',\n        key: \"$empty\"\n      }, /*#__PURE__*/React.cloneElement(_element2, {\n        onLayout: event => {\n          this._onLayoutEmpty(event);\n          if (_element2.props.onLayout) {\n            _element2.props.onLayout(event);\n          }\n        },\n        style: [inversionStyle, _element2.props.style]\n      })));\n    }\n\n    // 2b. Add cells and spacers for each item\n    if (itemCount > 0) {\n      _usedIndexForKey = false;\n      _keylessItemComponentName = '';\n      var spacerKey = this._getSpacerKey(!horizontal);\n      var renderRegions = this.state.renderMask.enumerateRegions();\n      var lastSpacer = findLastWhere(renderRegions, r => r.isSpacer);\n      for (var _iterator = _createForOfIteratorHelperLoose(renderRegions), _step; !(_step = _iterator()).done;) {\n        var section = _step.value;\n        if (section.isSpacer) {\n          // Legacy behavior is to avoid spacers when virtualization is\n          // disabled (including head spacers on initial render).\n          if (this.props.disableVirtualization) {\n            continue;\n          }\n\n          // Without getItemLayout, we limit our tail spacer to the _highestMeasuredFrameIndex to\n          // prevent the user for hyperscrolling into un-measured area because otherwise content will\n          // likely jump around as it renders in above the viewport.\n          var isLastSpacer = section === lastSpacer;\n          var constrainToMeasured = isLastSpacer && !this.props.getItemLayout;\n          var last = constrainToMeasured ? clamp(section.first - 1, section.last, this._highestMeasuredFrameIndex) : section.last;\n          var firstMetrics = this.__getFrameMetricsApprox(section.first, this.props);\n          var lastMetrics = this.__getFrameMetricsApprox(last, this.props);\n          var spacerSize = lastMetrics.offset + lastMetrics.length - firstMetrics.offset;\n          cells.push(/*#__PURE__*/React.createElement(View, {\n            key: \"$spacer-\" + section.first,\n            style: {\n              [spacerKey]: spacerSize\n            }\n          }));\n        } else {\n          this._pushCells(cells, stickyHeaderIndices, stickyIndicesFromProps, section.first, section.last, inversionStyle);\n        }\n      }\n      if (!this._hasWarned.keys && _usedIndexForKey) {\n        console.warn('VirtualizedList: missing keys for items, make sure to specify a key or id property on each ' + 'item or provide a custom keyExtractor.', _keylessItemComponentName);\n        this._hasWarned.keys = true;\n      }\n    }\n\n    // 3. Add cell for ListFooterComponent\n    if (ListFooterComponent) {\n      var _element3 = /*#__PURE__*/React.isValidElement(ListFooterComponent) ? ListFooterComponent :\n      /*#__PURE__*/\n      // $FlowFixMe[not-a-component]\n      // $FlowFixMe[incompatible-type-arg]\n      React.createElement(ListFooterComponent, null);\n      cells.push(/*#__PURE__*/React.createElement(VirtualizedListCellContextProvider, {\n        cellKey: this._getFooterCellKey(),\n        key: \"$footer\"\n      }, /*#__PURE__*/React.createElement(View, {\n        onLayout: this._onLayoutFooter,\n        style: [inversionStyle, this.props.ListFooterComponentStyle]\n      },\n      // $FlowFixMe[incompatible-type] - Typing ReactNativeComponent revealed errors\n      _element3)));\n    }\n\n    // 4. Render the ScrollView\n    var scrollProps = _objectSpread(_objectSpread({}, this.props), {}, {\n      onContentSizeChange: this._onContentSizeChange,\n      onLayout: this._onLayout,\n      onScroll: this._onScroll,\n      onScrollBeginDrag: this._onScrollBeginDrag,\n      onScrollEndDrag: this._onScrollEndDrag,\n      onMomentumScrollBegin: this._onMomentumScrollBegin,\n      onMomentumScrollEnd: this._onMomentumScrollEnd,\n      scrollEventThrottle: scrollEventThrottleOrDefault(this.props.scrollEventThrottle),\n      // TODO: Android support\n      invertStickyHeaders: this.props.invertStickyHeaders !== undefined ? this.props.invertStickyHeaders : this.props.inverted,\n      stickyHeaderIndices,\n      style: inversionStyle ? [inversionStyle, this.props.style] : this.props.style\n    });\n    this._hasMore = this.state.cellsAroundViewport.last < itemCount - 1;\n    var innerRet = /*#__PURE__*/React.createElement(VirtualizedListContextProvider, {\n      value: {\n        cellKey: null,\n        getScrollMetrics: this._getScrollMetrics,\n        horizontal: horizontalOrDefault(this.props.horizontal),\n        getOutermostParentListRef: this._getOutermostParentListRef,\n        registerAsNestedChild: this._registerAsNestedChild,\n        unregisterAsNestedChild: this._unregisterAsNestedChild\n      }\n    }, /*#__PURE__*/React.cloneElement((this.props.renderScrollComponent || this._defaultRenderScrollComponent)(scrollProps), {\n      ref: this._captureScrollRef\n    }, cells));\n    var ret = innerRet;\n    /* https://github.com/necolas/react-native-web/issues/2239: Re-enable when ScrollView.Context.Consumer is available.\n    if (__DEV__) {\n      ret = (\n        <ScrollView.Context.Consumer>\n          {scrollContext => {\n            if (\n              scrollContext != null &&\n              !scrollContext.horizontal ===\n                !horizontalOrDefault(this.props.horizontal) &&\n              !this._hasWarned.nesting &&\n              this.context == null &&\n              this.props.scrollEnabled !== false\n            ) {\n              // TODO (T46547044): use React.warn once 16.9 is sync'd: https://github.com/facebook/react/pull/15170\n              console.error(\n                'VirtualizedLists should never be nested inside plain ScrollViews with the same ' +\n                  'orientation because it can break windowing and other functionality - use another ' +\n                  'VirtualizedList-backed container instead.',\n              );\n              this._hasWarned.nesting = true;\n            }\n            return innerRet;\n          }}\n        </ScrollView.Context.Consumer>\n      );\n    }*/\n    if (this.props.debug) {\n      return /*#__PURE__*/React.createElement(View, {\n        style: styles.debug\n      }, ret, this._renderDebugOverlay());\n    } else {\n      return ret;\n    }\n  }\n  componentDidUpdate(prevProps) {\n    var _this$props7 = this.props,\n      data = _this$props7.data,\n      extraData = _this$props7.extraData;\n    if (data !== prevProps.data || extraData !== prevProps.extraData) {\n      // clear the viewableIndices cache to also trigger\n      // the onViewableItemsChanged callback with the new data\n      this._viewabilityTuples.forEach(tuple => {\n        tuple.viewabilityHelper.resetViewableIndices();\n      });\n    }\n    // The `this._hiPriInProgress` is guaranteeing a hiPri cell update will only happen\n    // once per fiber update. The `_scheduleCellsToRenderUpdate` will set it to true\n    // if a hiPri update needs to perform. If `componentDidUpdate` is triggered with\n    // `this._hiPriInProgress=true`, means it's triggered by the hiPri update. The\n    // `_scheduleCellsToRenderUpdate` will check this condition and not perform\n    // another hiPri update.\n    var hiPriInProgress = this._hiPriInProgress;\n    this._scheduleCellsToRenderUpdate();\n    // Make sure setting `this._hiPriInProgress` back to false after `componentDidUpdate`\n    // is triggered with `this._hiPriInProgress = true`\n    if (hiPriInProgress) {\n      this._hiPriInProgress = false;\n    }\n  }\n\n  // Used for preventing scrollToIndex from being called multiple times for initialScrollIndex\n\n  // flag to prevent infinite hiPri cell limit update\n\n  // $FlowFixMe[missing-local-annot]\n\n  /* $FlowFixMe[missing-local-annot] The type annotation(s) required by Flow's\n   * LTI update could not be added via codemod */\n\n  _computeBlankness() {\n    this._fillRateHelper.computeBlankness(this.props, this.state.cellsAroundViewport, this._scrollMetrics);\n  }\n\n  /* $FlowFixMe[missing-local-annot] The type annotation(s) required by Flow's\n   * LTI update could not be added via codemod */\n\n  _onCellFocusCapture(cellKey) {\n    this._lastFocusedCellKey = cellKey;\n    this._updateCellsToRender();\n  }\n  _triggerRemeasureForChildListsInCell(cellKey) {\n    this._nestedChildLists.forEachInCell(cellKey, childList => {\n      childList.measureLayoutRelativeToContainingList();\n    });\n  }\n  measureLayoutRelativeToContainingList() {\n    // TODO (T35574538): findNodeHandle sometimes crashes with \"Unable to find\n    // node on an unmounted component\" during scrolling\n    try {\n      if (!this._scrollRef) {\n        return;\n      }\n      // We are assuming that getOutermostParentListRef().getScrollRef()\n      // is a non-null reference to a ScrollView\n      this._scrollRef.measureLayout(this.context.getOutermostParentListRef().getScrollRef(), (x, y, width, height) => {\n        this._offsetFromParentVirtualizedList = this._selectOffset({\n          x,\n          y\n        });\n        this._scrollMetrics.contentLength = this._selectLength({\n          width,\n          height\n        });\n        var scrollMetrics = this._convertParentScrollMetrics(this.context.getScrollMetrics());\n        var metricsChanged = this._scrollMetrics.visibleLength !== scrollMetrics.visibleLength || this._scrollMetrics.offset !== scrollMetrics.offset;\n        if (metricsChanged) {\n          this._scrollMetrics.visibleLength = scrollMetrics.visibleLength;\n          this._scrollMetrics.offset = scrollMetrics.offset;\n\n          // If metrics of the scrollView changed, then we triggered remeasure for child list\n          // to ensure VirtualizedList has the right information.\n          this._nestedChildLists.forEach(childList => {\n            childList.measureLayoutRelativeToContainingList();\n          });\n        }\n      }, error => {\n        console.warn(\"VirtualizedList: Encountered an error while measuring a list's\" + ' offset from its containing VirtualizedList.');\n      });\n    } catch (error) {\n      console.warn('measureLayoutRelativeToContainingList threw an error', error.stack);\n    }\n  }\n  _getFooterCellKey() {\n    return this._getCellKey() + '-footer';\n  }\n  // $FlowFixMe[missing-local-annot]\n  _renderDebugOverlay() {\n    var normalize = this._scrollMetrics.visibleLength / (this._scrollMetrics.contentLength || 1);\n    var framesInLayout = [];\n    var itemCount = this.props.getItemCount(this.props.data);\n    for (var ii = 0; ii < itemCount; ii++) {\n      var frame = this.__getFrameMetricsApprox(ii, this.props);\n      /* $FlowFixMe[prop-missing] (>=0.68.0 site=react_native_fb) This comment\n       * suppresses an error found when Flow v0.68 was deployed. To see the\n       * error delete this comment and run Flow. */\n      if (frame.inLayout) {\n        framesInLayout.push(frame);\n      }\n    }\n    var windowTop = this.__getFrameMetricsApprox(this.state.cellsAroundViewport.first, this.props).offset;\n    var frameLast = this.__getFrameMetricsApprox(this.state.cellsAroundViewport.last, this.props);\n    var windowLen = frameLast.offset + frameLast.length - windowTop;\n    var visTop = this._scrollMetrics.offset;\n    var visLen = this._scrollMetrics.visibleLength;\n    return /*#__PURE__*/React.createElement(View, {\n      style: [styles.debugOverlayBase, styles.debugOverlay]\n    }, framesInLayout.map((f, ii) => /*#__PURE__*/React.createElement(View, {\n      key: 'f' + ii,\n      style: [styles.debugOverlayBase, styles.debugOverlayFrame, {\n        top: f.offset * normalize,\n        height: f.length * normalize\n      }]\n    })), /*#__PURE__*/React.createElement(View, {\n      style: [styles.debugOverlayBase, styles.debugOverlayFrameLast, {\n        top: windowTop * normalize,\n        height: windowLen * normalize\n      }]\n    }), /*#__PURE__*/React.createElement(View, {\n      style: [styles.debugOverlayBase, styles.debugOverlayFrameVis, {\n        top: visTop * normalize,\n        height: visLen * normalize\n      }]\n    }));\n  }\n  _selectLength(metrics) {\n    return !horizontalOrDefault(this.props.horizontal) ? metrics.height : metrics.width;\n  }\n  _selectOffset(metrics) {\n    return !horizontalOrDefault(this.props.horizontal) ? metrics.y : metrics.x;\n  }\n  _maybeCallOnEdgeReached() {\n    var _this$props8 = this.props,\n      data = _this$props8.data,\n      getItemCount = _this$props8.getItemCount,\n      onStartReached = _this$props8.onStartReached,\n      onStartReachedThreshold = _this$props8.onStartReachedThreshold,\n      onEndReached = _this$props8.onEndReached,\n      onEndReachedThreshold = _this$props8.onEndReachedThreshold,\n      initialScrollIndex = _this$props8.initialScrollIndex;\n    var _this$_scrollMetrics2 = this._scrollMetrics,\n      contentLength = _this$_scrollMetrics2.contentLength,\n      visibleLength = _this$_scrollMetrics2.visibleLength,\n      offset = _this$_scrollMetrics2.offset;\n    var distanceFromStart = offset;\n    var distanceFromEnd = contentLength - visibleLength - offset;\n\n    // Especially when oERT is zero it's necessary to 'floor' very small distance values to be 0\n    // since debouncing causes us to not fire this event for every single \"pixel\" we scroll and can thus\n    // be at the edge of the list with a distance approximating 0 but not quite there.\n    if (distanceFromStart < ON_EDGE_REACHED_EPSILON) {\n      distanceFromStart = 0;\n    }\n    if (distanceFromEnd < ON_EDGE_REACHED_EPSILON) {\n      distanceFromEnd = 0;\n    }\n\n    // TODO: T121172172 Look into why we're \"defaulting\" to a threshold of 2px\n    // when oERT is not present (different from 2 viewports used elsewhere)\n    var DEFAULT_THRESHOLD_PX = 2;\n    var startThreshold = onStartReachedThreshold != null ? onStartReachedThreshold * visibleLength : DEFAULT_THRESHOLD_PX;\n    var endThreshold = onEndReachedThreshold != null ? onEndReachedThreshold * visibleLength : DEFAULT_THRESHOLD_PX;\n    var isWithinStartThreshold = distanceFromStart <= startThreshold;\n    var isWithinEndThreshold = distanceFromEnd <= endThreshold;\n\n    // First check if the user just scrolled within the end threshold\n    // and call onEndReached only once for a given content length,\n    // and only if onStartReached is not being executed\n    if (onEndReached && this.state.cellsAroundViewport.last === getItemCount(data) - 1 && isWithinEndThreshold && this._scrollMetrics.contentLength !== this._sentEndForContentLength) {\n      this._sentEndForContentLength = this._scrollMetrics.contentLength;\n      onEndReached({\n        distanceFromEnd\n      });\n    }\n\n    // Next check if the user just scrolled within the start threshold\n    // and call onStartReached only once for a given content length,\n    // and only if onEndReached is not being executed\n    else if (onStartReached != null && this.state.cellsAroundViewport.first === 0 && isWithinStartThreshold && this._scrollMetrics.contentLength !== this._sentStartForContentLength) {\n      // On initial mount when using initialScrollIndex the offset will be 0 initially\n      // and will trigger an unexpected onStartReached. To avoid this we can use\n      // timestamp to differentiate between the initial scroll metrics and when we actually\n      // received the first scroll event.\n      if (!initialScrollIndex || this._scrollMetrics.timestamp !== 0) {\n        this._sentStartForContentLength = this._scrollMetrics.contentLength;\n        onStartReached({\n          distanceFromStart\n        });\n      }\n    }\n\n    // If the user scrolls away from the start or end and back again,\n    // cause onStartReached or onEndReached to be triggered again\n    else {\n      this._sentStartForContentLength = isWithinStartThreshold ? this._sentStartForContentLength : 0;\n      this._sentEndForContentLength = isWithinEndThreshold ? this._sentEndForContentLength : 0;\n    }\n  }\n\n  /* Translates metrics from a scroll event in a parent VirtualizedList into\n   * coordinates relative to the child list.\n   */\n\n  _scheduleCellsToRenderUpdate() {\n    var _this$state$cellsArou = this.state.cellsAroundViewport,\n      first = _this$state$cellsArou.first,\n      last = _this$state$cellsArou.last;\n    var _this$_scrollMetrics3 = this._scrollMetrics,\n      offset = _this$_scrollMetrics3.offset,\n      visibleLength = _this$_scrollMetrics3.visibleLength,\n      velocity = _this$_scrollMetrics3.velocity;\n    var itemCount = this.props.getItemCount(this.props.data);\n    var hiPri = false;\n    var onStartReachedThreshold = onStartReachedThresholdOrDefault(this.props.onStartReachedThreshold);\n    var onEndReachedThreshold = onEndReachedThresholdOrDefault(this.props.onEndReachedThreshold);\n    // Mark as high priority if we're close to the start of the first item\n    // But only if there are items before the first rendered item\n    if (first > 0) {\n      var distTop = offset - this.__getFrameMetricsApprox(first, this.props).offset;\n      hiPri = distTop < 0 || velocity < -2 && distTop < getScrollingThreshold(onStartReachedThreshold, visibleLength);\n    }\n    // Mark as high priority if we're close to the end of the last item\n    // But only if there are items after the last rendered item\n    if (!hiPri && last >= 0 && last < itemCount - 1) {\n      var distBottom = this.__getFrameMetricsApprox(last, this.props).offset - (offset + visibleLength);\n      hiPri = distBottom < 0 || velocity > 2 && distBottom < getScrollingThreshold(onEndReachedThreshold, visibleLength);\n    }\n    // Only trigger high-priority updates if we've actually rendered cells,\n    // and with that size estimate, accurately compute how many cells we should render.\n    // Otherwise, it would just render as many cells as it can (of zero dimension),\n    // each time through attempting to render more (limited by maxToRenderPerBatch),\n    // starving the renderer from actually laying out the objects and computing _averageCellLength.\n    // If this is triggered in an `componentDidUpdate` followed by a hiPri cellToRenderUpdate\n    // We shouldn't do another hipri cellToRenderUpdate\n    if (hiPri && (this._averageCellLength || this.props.getItemLayout) && !this._hiPriInProgress) {\n      this._hiPriInProgress = true;\n      // Don't worry about interactions when scrolling quickly; focus on filling content as fast\n      // as possible.\n      this._updateCellsToRenderBatcher.dispose({\n        abort: true\n      });\n      this._updateCellsToRender();\n      return;\n    } else {\n      this._updateCellsToRenderBatcher.schedule();\n    }\n  }\n\n  /**\n   * Gets an approximate offset to an item at a given index. Supports\n   * fractional indices.\n   */\n\n  _updateViewableItems(props, cellsAroundViewport) {\n    this._viewabilityTuples.forEach(tuple => {\n      tuple.viewabilityHelper.onUpdate(props, this._scrollMetrics.offset, this._scrollMetrics.visibleLength, this._getFrameMetrics, this._createViewToken, tuple.onViewableItemsChanged, cellsAroundViewport);\n    });\n  }\n}\nVirtualizedList.contextType = VirtualizedListContext;\nvar styles = StyleSheet.create({\n  verticallyInverted: {\n    transform: 'scaleY(-1)'\n  },\n  horizontallyInverted: {\n    transform: 'scaleX(-1)'\n  },\n  debug: {\n    flex: 1\n  },\n  debugOverlayBase: {\n    position: 'absolute',\n    top: 0,\n    right: 0\n  },\n  debugOverlay: {\n    bottom: 0,\n    width: 20,\n    borderColor: 'blue',\n    borderWidth: 1\n  },\n  debugOverlayFrame: {\n    left: 0,\n    backgroundColor: 'orange'\n  },\n  debugOverlayFrameLast: {\n    left: 0,\n    borderColor: 'green',\n    borderWidth: 2\n  },\n  debugOverlayFrameVis: {\n    left: 0,\n    borderColor: 'red',\n    borderWidth: 2\n  }\n});\nexport default VirtualizedList;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\n/**\n * Intentional info-level logging for clear separation from ad-hoc console debug logging.\n */\nfunction infoLog() {\n  return console.log(...arguments);\n}\nexport default infoLog;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n/**\n * EventEmitter manages listeners and publishes events to them.\n *\n * EventEmitter accepts a single type parameter that defines the valid events\n * and associated listener argument(s).\n *\n * @example\n *\n *   const emitter = new EventEmitter<{\n *     success: [number, string],\n *     error: [Error],\n *   }>();\n *\n *   emitter.on('success', (statusCode, responseText) => {...});\n *   emitter.emit('success', 200, '...');\n *\n *   emitter.on('error', error => {...});\n *   emitter.emit('error', new Error('Resource not found'));\n *\n */\nexport default class EventEmitter {\n  constructor() {\n    this._registry = {};\n  }\n  /**\n   * Registers a listener that is called when the supplied event is emitted.\n   * Returns a subscription that has a `remove` method to undo registration.\n   */\n  addListener(eventType, listener, context) {\n    var registrations = allocate(this._registry, eventType);\n    var registration = {\n      context,\n      listener,\n      remove() {\n        registrations.delete(registration);\n      }\n    };\n    registrations.add(registration);\n    return registration;\n  }\n\n  /**\n   * Emits the supplied event. Additional arguments supplied to `emit` will be\n   * passed through to each of the registered listeners.\n   *\n   * If a listener modifies the listeners registered for the same event, those\n   * changes will not be reflected in the current invocation of `emit`.\n   */\n  emit(eventType) {\n    var registrations = this._registry[eventType];\n    if (registrations != null) {\n      for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        args[_key - 1] = arguments[_key];\n      }\n      for (var _i = 0, _arr = [...registrations]; _i < _arr.length; _i++) {\n        var registration = _arr[_i];\n        registration.listener.apply(registration.context, args);\n      }\n    }\n  }\n\n  /**\n   * Removes all registered listeners.\n   */\n  removeAllListeners(eventType) {\n    if (eventType == null) {\n      this._registry = {};\n    } else {\n      delete this._registry[eventType];\n    }\n  }\n\n  /**\n   * Returns the number of registered listeners for the supplied event.\n   */\n  listenerCount(eventType) {\n    var registrations = this._registry[eventType];\n    return registrations == null ? 0 : registrations.size;\n  }\n}\nfunction allocate(registry, eventType) {\n  var registrations = registry[eventType];\n  if (registrations == null) {\n    registrations = new Set();\n    registry[eventType] = registrations;\n  }\n  return registrations;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * @noflow\n */\n\n/* eslint no-bitwise: 0 */\n\n'use strict';\n\nfunction normalizeColor(color) {\n  if (typeof color === 'number') {\n    if (color >>> 0 === color && color >= 0 && color <= 0xffffffff) {\n      return color;\n    }\n    return null;\n  }\n\n  if (typeof color !== 'string') {\n    return null;\n  }\n\n  const matchers = getMatchers();\n  let match;\n\n  // Ordered based on occurrences on Facebook codebase\n  if ((match = matchers.hex6.exec(color))) {\n    return parseInt(match[1] + 'ff', 16) >>> 0;\n  }\n\n  const colorFromKeyword = normalizeKeyword(color);\n  if (colorFromKeyword != null) {\n    return colorFromKeyword;\n  }\n\n  if ((match = matchers.rgb.exec(color))) {\n    return (\n      ((parse255(match[1]) << 24) | // r\n        (parse255(match[2]) << 16) | // g\n        (parse255(match[3]) << 8) | // b\n        0x000000ff) >>> // a\n      0\n    );\n  }\n\n  if ((match = matchers.rgba.exec(color))) {\n    // rgba(R G B / A) notation\n    if (match[6] !== undefined) {\n      return (\n        ((parse255(match[6]) << 24) | // r\n          (parse255(match[7]) << 16) | // g\n          (parse255(match[8]) << 8) | // b\n          parse1(match[9])) >>> // a\n        0\n      );\n    }\n\n    // rgba(R, G, B, A) notation\n    return (\n      ((parse255(match[2]) << 24) | // r\n        (parse255(match[3]) << 16) | // g\n        (parse255(match[4]) << 8) | // b\n        parse1(match[5])) >>> // a\n      0\n    );\n  }\n\n  if ((match = matchers.hex3.exec(color))) {\n    return (\n      parseInt(\n        match[1] +\n          match[1] + // r\n          match[2] +\n          match[2] + // g\n          match[3] +\n          match[3] + // b\n          'ff', // a\n        16,\n      ) >>> 0\n    );\n  }\n\n  // https://drafts.csswg.org/css-color-4/#hex-notation\n  if ((match = matchers.hex8.exec(color))) {\n    return parseInt(match[1], 16) >>> 0;\n  }\n\n  if ((match = matchers.hex4.exec(color))) {\n    return (\n      parseInt(\n        match[1] +\n          match[1] + // r\n          match[2] +\n          match[2] + // g\n          match[3] +\n          match[3] + // b\n          match[4] +\n          match[4], // a\n        16,\n      ) >>> 0\n    );\n  }\n\n  if ((match = matchers.hsl.exec(color))) {\n    return (\n      (hslToRgb(\n        parse360(match[1]), // h\n        parsePercentage(match[2]), // s\n        parsePercentage(match[3]), // l\n      ) |\n        0x000000ff) >>> // a\n      0\n    );\n  }\n\n  if ((match = matchers.hsla.exec(color))) {\n    // hsla(H S L / A) notation\n    if (match[6] !== undefined) {\n      return (\n        (hslToRgb(\n          parse360(match[6]), // h\n          parsePercentage(match[7]), // s\n          parsePercentage(match[8]), // l\n        ) |\n          parse1(match[9])) >>> // a\n        0\n      );\n    }\n\n    // hsla(H, S, L, A) notation\n    return (\n      (hslToRgb(\n        parse360(match[2]), // h\n        parsePercentage(match[3]), // s\n        parsePercentage(match[4]), // l\n      ) |\n        parse1(match[5])) >>> // a\n      0\n    );\n  }\n\n  if ((match = matchers.hwb.exec(color))) {\n    return (\n      (hwbToRgb(\n        parse360(match[1]), // h\n        parsePercentage(match[2]), // w\n        parsePercentage(match[3]), // b\n      ) |\n        0x000000ff) >>> // a\n      0\n    );\n  }\n\n  return null;\n}\n\nfunction hue2rgb(p, q, t) {\n  if (t < 0) {\n    t += 1;\n  }\n  if (t > 1) {\n    t -= 1;\n  }\n  if (t < 1 / 6) {\n    return p + (q - p) * 6 * t;\n  }\n  if (t < 1 / 2) {\n    return q;\n  }\n  if (t < 2 / 3) {\n    return p + (q - p) * (2 / 3 - t) * 6;\n  }\n  return p;\n}\n\nfunction hslToRgb(h, s, l) {\n  const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n  const p = 2 * l - q;\n  const r = hue2rgb(p, q, h + 1 / 3);\n  const g = hue2rgb(p, q, h);\n  const b = hue2rgb(p, q, h - 1 / 3);\n\n  return (\n    (Math.round(r * 255) << 24) |\n    (Math.round(g * 255) << 16) |\n    (Math.round(b * 255) << 8)\n  );\n}\n\nfunction hwbToRgb(h, w, b) {\n  if (w + b >= 1) {\n    const gray = Math.round((w * 255) / (w + b));\n\n    return (gray << 24) | (gray << 16) | (gray << 8);\n  }\n\n  const red = hue2rgb(0, 1, h + 1 / 3) * (1 - w - b) + w;\n  const green = hue2rgb(0, 1, h) * (1 - w - b) + w;\n  const blue = hue2rgb(0, 1, h - 1 / 3) * (1 - w - b) + w;\n\n  return (\n    (Math.round(red * 255) << 24) |\n    (Math.round(green * 255) << 16) |\n    (Math.round(blue * 255) << 8)\n  );\n}\n\nconst NUMBER = '[-+]?\\\\d*\\\\.?\\\\d+';\nconst PERCENTAGE = NUMBER + '%';\n\nfunction call(...args) {\n  return '\\\\(\\\\s*(' + args.join(')\\\\s*,?\\\\s*(') + ')\\\\s*\\\\)';\n}\n\nfunction callWithSlashSeparator(...args) {\n  return (\n    '\\\\(\\\\s*(' +\n    args.slice(0, args.length - 1).join(')\\\\s*,?\\\\s*(') +\n    ')\\\\s*/\\\\s*(' +\n    args[args.length - 1] +\n    ')\\\\s*\\\\)'\n  );\n}\n\nfunction commaSeparatedCall(...args) {\n  return '\\\\(\\\\s*(' + args.join(')\\\\s*,\\\\s*(') + ')\\\\s*\\\\)';\n}\n\nlet cachedMatchers;\n\nfunction getMatchers() {\n  if (cachedMatchers === undefined) {\n    cachedMatchers = {\n      rgb: new RegExp('rgb' + call(NUMBER, NUMBER, NUMBER)),\n      rgba: new RegExp(\n        'rgba(' +\n          commaSeparatedCall(NUMBER, NUMBER, NUMBER, NUMBER) +\n          '|' +\n          callWithSlashSeparator(NUMBER, NUMBER, NUMBER, NUMBER) +\n          ')',\n      ),\n      hsl: new RegExp('hsl' + call(NUMBER, PERCENTAGE, PERCENTAGE)),\n      hsla: new RegExp(\n        'hsla(' +\n          commaSeparatedCall(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER) +\n          '|' +\n          callWithSlashSeparator(NUMBER, PERCENTAGE, PERCENTAGE, NUMBER) +\n          ')',\n      ),\n      hwb: new RegExp('hwb' + call(NUMBER, PERCENTAGE, PERCENTAGE)),\n      hex3: /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n      hex4: /^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n      hex6: /^#([0-9a-fA-F]{6})$/,\n      hex8: /^#([0-9a-fA-F]{8})$/,\n    };\n  }\n  return cachedMatchers;\n}\n\nfunction parse255(str) {\n  const int = parseInt(str, 10);\n  if (int < 0) {\n    return 0;\n  }\n  if (int > 255) {\n    return 255;\n  }\n  return int;\n}\n\nfunction parse360(str) {\n  const int = parseFloat(str);\n  return (((int % 360) + 360) % 360) / 360;\n}\n\nfunction parse1(str) {\n  const num = parseFloat(str);\n  if (num < 0) {\n    return 0;\n  }\n  if (num > 1) {\n    return 255;\n  }\n  return Math.round(num * 255);\n}\n\nfunction parsePercentage(str) {\n  // parseFloat conveniently ignores the final %\n  const int = parseFloat(str);\n  if (int < 0) {\n    return 0;\n  }\n  if (int > 100) {\n    return 1;\n  }\n  return int / 100;\n}\n\nfunction normalizeKeyword(name) {\n  // prettier-ignore\n  switch (name) {\n    case 'transparent': return 0x00000000;\n    // http://www.w3.org/TR/css3-color/#svg-color\n    case 'aliceblue': return 0xf0f8ffff;\n    case 'antiquewhite': return 0xfaebd7ff;\n    case 'aqua': return 0x00ffffff;\n    case 'aquamarine': return 0x7fffd4ff;\n    case 'azure': return 0xf0ffffff;\n    case 'beige': return 0xf5f5dcff;\n    case 'bisque': return 0xffe4c4ff;\n    case 'black': return 0x000000ff;\n    case 'blanchedalmond': return 0xffebcdff;\n    case 'blue': return 0x0000ffff;\n    case 'blueviolet': return 0x8a2be2ff;\n    case 'brown': return 0xa52a2aff;\n    case 'burlywood': return 0xdeb887ff;\n    case 'burntsienna': return 0xea7e5dff;\n    case 'cadetblue': return 0x5f9ea0ff;\n    case 'chartreuse': return 0x7fff00ff;\n    case 'chocolate': return 0xd2691eff;\n    case 'coral': return 0xff7f50ff;\n    case 'cornflowerblue': return 0x6495edff;\n    case 'cornsilk': return 0xfff8dcff;\n    case 'crimson': return 0xdc143cff;\n    case 'cyan': return 0x00ffffff;\n    case 'darkblue': return 0x00008bff;\n    case 'darkcyan': return 0x008b8bff;\n    case 'darkgoldenrod': return 0xb8860bff;\n    case 'darkgray': return 0xa9a9a9ff;\n    case 'darkgreen': return 0x006400ff;\n    case 'darkgrey': return 0xa9a9a9ff;\n    case 'darkkhaki': return 0xbdb76bff;\n    case 'darkmagenta': return 0x8b008bff;\n    case 'darkolivegreen': return 0x556b2fff;\n    case 'darkorange': return 0xff8c00ff;\n    case 'darkorchid': return 0x9932ccff;\n    case 'darkred': return 0x8b0000ff;\n    case 'darksalmon': return 0xe9967aff;\n    case 'darkseagreen': return 0x8fbc8fff;\n    case 'darkslateblue': return 0x483d8bff;\n    case 'darkslategray': return 0x2f4f4fff;\n    case 'darkslategrey': return 0x2f4f4fff;\n    case 'darkturquoise': return 0x00ced1ff;\n    case 'darkviolet': return 0x9400d3ff;\n    case 'deeppink': return 0xff1493ff;\n    case 'deepskyblue': return 0x00bfffff;\n    case 'dimgray': return 0x696969ff;\n    case 'dimgrey': return 0x696969ff;\n    case 'dodgerblue': return 0x1e90ffff;\n    case 'firebrick': return 0xb22222ff;\n    case 'floralwhite': return 0xfffaf0ff;\n    case 'forestgreen': return 0x228b22ff;\n    case 'fuchsia': return 0xff00ffff;\n    case 'gainsboro': return 0xdcdcdcff;\n    case 'ghostwhite': return 0xf8f8ffff;\n    case 'gold': return 0xffd700ff;\n    case 'goldenrod': return 0xdaa520ff;\n    case 'gray': return 0x808080ff;\n    case 'green': return 0x008000ff;\n    case 'greenyellow': return 0xadff2fff;\n    case 'grey': return 0x808080ff;\n    case 'honeydew': return 0xf0fff0ff;\n    case 'hotpink': return 0xff69b4ff;\n    case 'indianred': return 0xcd5c5cff;\n    case 'indigo': return 0x4b0082ff;\n    case 'ivory': return 0xfffff0ff;\n    case 'khaki': return 0xf0e68cff;\n    case 'lavender': return 0xe6e6faff;\n    case 'lavenderblush': return 0xfff0f5ff;\n    case 'lawngreen': return 0x7cfc00ff;\n    case 'lemonchiffon': return 0xfffacdff;\n    case 'lightblue': return 0xadd8e6ff;\n    case 'lightcoral': return 0xf08080ff;\n    case 'lightcyan': return 0xe0ffffff;\n    case 'lightgoldenrodyellow': return 0xfafad2ff;\n    case 'lightgray': return 0xd3d3d3ff;\n    case 'lightgreen': return 0x90ee90ff;\n    case 'lightgrey': return 0xd3d3d3ff;\n    case 'lightpink': return 0xffb6c1ff;\n    case 'lightsalmon': return 0xffa07aff;\n    case 'lightseagreen': return 0x20b2aaff;\n    case 'lightskyblue': return 0x87cefaff;\n    case 'lightslategray': return 0x778899ff;\n    case 'lightslategrey': return 0x778899ff;\n    case 'lightsteelblue': return 0xb0c4deff;\n    case 'lightyellow': return 0xffffe0ff;\n    case 'lime': return 0x00ff00ff;\n    case 'limegreen': return 0x32cd32ff;\n    case 'linen': return 0xfaf0e6ff;\n    case 'magenta': return 0xff00ffff;\n    case 'maroon': return 0x800000ff;\n    case 'mediumaquamarine': return 0x66cdaaff;\n    case 'mediumblue': return 0x0000cdff;\n    case 'mediumorchid': return 0xba55d3ff;\n    case 'mediumpurple': return 0x9370dbff;\n    case 'mediumseagreen': return 0x3cb371ff;\n    case 'mediumslateblue': return 0x7b68eeff;\n    case 'mediumspringgreen': return 0x00fa9aff;\n    case 'mediumturquoise': return 0x48d1ccff;\n    case 'mediumvioletred': return 0xc71585ff;\n    case 'midnightblue': return 0x191970ff;\n    case 'mintcream': return 0xf5fffaff;\n    case 'mistyrose': return 0xffe4e1ff;\n    case 'moccasin': return 0xffe4b5ff;\n    case 'navajowhite': return 0xffdeadff;\n    case 'navy': return 0x000080ff;\n    case 'oldlace': return 0xfdf5e6ff;\n    case 'olive': return 0x808000ff;\n    case 'olivedrab': return 0x6b8e23ff;\n    case 'orange': return 0xffa500ff;\n    case 'orangered': return 0xff4500ff;\n    case 'orchid': return 0xda70d6ff;\n    case 'palegoldenrod': return 0xeee8aaff;\n    case 'palegreen': return 0x98fb98ff;\n    case 'paleturquoise': return 0xafeeeeff;\n    case 'palevioletred': return 0xdb7093ff;\n    case 'papayawhip': return 0xffefd5ff;\n    case 'peachpuff': return 0xffdab9ff;\n    case 'peru': return 0xcd853fff;\n    case 'pink': return 0xffc0cbff;\n    case 'plum': return 0xdda0ddff;\n    case 'powderblue': return 0xb0e0e6ff;\n    case 'purple': return 0x800080ff;\n    case 'rebeccapurple': return 0x663399ff;\n    case 'red': return 0xff0000ff;\n    case 'rosybrown': return 0xbc8f8fff;\n    case 'royalblue': return 0x4169e1ff;\n    case 'saddlebrown': return 0x8b4513ff;\n    case 'salmon': return 0xfa8072ff;\n    case 'sandybrown': return 0xf4a460ff;\n    case 'seagreen': return 0x2e8b57ff;\n    case 'seashell': return 0xfff5eeff;\n    case 'sienna': return 0xa0522dff;\n    case 'silver': return 0xc0c0c0ff;\n    case 'skyblue': return 0x87ceebff;\n    case 'slateblue': return 0x6a5acdff;\n    case 'slategray': return 0x708090ff;\n    case 'slategrey': return 0x708090ff;\n    case 'snow': return 0xfffafaff;\n    case 'springgreen': return 0x00ff7fff;\n    case 'steelblue': return 0x4682b4ff;\n    case 'tan': return 0xd2b48cff;\n    case 'teal': return 0x008080ff;\n    case 'thistle': return 0xd8bfd8ff;\n    case 'tomato': return 0xff6347ff;\n    case 'turquoise': return 0x40e0d0ff;\n    case 'violet': return 0xee82eeff;\n    case 'wheat': return 0xf5deb3ff;\n    case 'white': return 0xffffffff;\n    case 'whitesmoke': return 0xf5f5f5ff;\n    case 'yellow': return 0xffff00ff;\n    case 'yellowgreen': return 0x9acd32ff;\n  }\n  return null;\n}\n\nmodule.exports = normalizeColor;\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n  var key = null;\n  void 0 !== maybeKey && (key = \"\" + maybeKey);\n  void 0 !== config.key && (key = \"\" + config.key);\n  if (\"key\" in config) {\n    maybeKey = {};\n    for (var propName in config)\n      \"key\" !== propName && (maybeKey[propName] = config[propName]);\n  } else maybeKey = config;\n  config = maybeKey.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== config ? config : null,\n    props: maybeKey\n  };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n  REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n  MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n    isMounted: function () {\n      return !1;\n    },\n    enqueueForceUpdate: function () {},\n    enqueueReplaceState: function () {},\n    enqueueSetState: function () {}\n  },\n  assign = Object.assign,\n  emptyObject = {};\nfunction Component(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n  if (\n    \"object\" !== typeof partialState &&\n    \"function\" !== typeof partialState &&\n    null != partialState\n  )\n    throw Error(\n      \"takes an object of state variables to update or a function which returns an object of state variables.\"\n    );\n  this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray;\nfunction noop() {}\nvar ReactSharedInternals = { H: null, A: null, T: null, S: null },\n  hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, props) {\n  var refProp = props.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== refProp ? refProp : null,\n    props: props\n  };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n  return ReactElement(oldElement.type, newKey, oldElement.props);\n}\nfunction isValidElement(object) {\n  return (\n    \"object\" === typeof object &&\n    null !== object &&\n    object.$$typeof === REACT_ELEMENT_TYPE\n  );\n}\nfunction escape(key) {\n  var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n  return (\n    \"$\" +\n    key.replace(/[=:]/g, function (match) {\n      return escaperLookup[match];\n    })\n  );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n  return \"object\" === typeof element && null !== element && null != element.key\n    ? escape(\"\" + element.key)\n    : index.toString(36);\n}\nfunction resolveThenable(thenable) {\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw thenable.reason;\n    default:\n      switch (\n        (\"string\" === typeof thenable.status\n          ? thenable.then(noop, noop)\n          : ((thenable.status = \"pending\"),\n            thenable.then(\n              function (fulfilledValue) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"fulfilled\"),\n                  (thenable.value = fulfilledValue));\n              },\n              function (error) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"rejected\"), (thenable.reason = error));\n              }\n            )),\n        thenable.status)\n      ) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw thenable.reason;\n      }\n  }\n  throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n  var type = typeof children;\n  if (\"undefined\" === type || \"boolean\" === type) children = null;\n  var invokeCallback = !1;\n  if (null === children) invokeCallback = !0;\n  else\n    switch (type) {\n      case \"bigint\":\n      case \"string\":\n      case \"number\":\n        invokeCallback = !0;\n        break;\n      case \"object\":\n        switch (children.$$typeof) {\n          case REACT_ELEMENT_TYPE:\n          case REACT_PORTAL_TYPE:\n            invokeCallback = !0;\n            break;\n          case REACT_LAZY_TYPE:\n            return (\n              (invokeCallback = children._init),\n              mapIntoArray(\n                invokeCallback(children._payload),\n                array,\n                escapedPrefix,\n                nameSoFar,\n                callback\n              )\n            );\n        }\n    }\n  if (invokeCallback)\n    return (\n      (callback = callback(children)),\n      (invokeCallback =\n        \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n      isArrayImpl(callback)\n        ? ((escapedPrefix = \"\"),\n          null != invokeCallback &&\n            (escapedPrefix =\n              invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n          mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n            return c;\n          }))\n        : null != callback &&\n          (isValidElement(callback) &&\n            (callback = cloneAndReplaceKey(\n              callback,\n              escapedPrefix +\n                (null == callback.key ||\n                (children && children.key === callback.key)\n                  ? \"\"\n                  : (\"\" + callback.key).replace(\n                      userProvidedKeyEscapeRegex,\n                      \"$&/\"\n                    ) + \"/\") +\n                invokeCallback\n            )),\n          array.push(callback)),\n      1\n    );\n  invokeCallback = 0;\n  var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n  if (isArrayImpl(children))\n    for (var i = 0; i < children.length; i++)\n      (nameSoFar = children[i]),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n    for (\n      children = i.call(children), i = 0;\n      !(nameSoFar = children.next()).done;\n\n    )\n      (nameSoFar = nameSoFar.value),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (\"object\" === type) {\n    if (\"function\" === typeof children.then)\n      return mapIntoArray(\n        resolveThenable(children),\n        array,\n        escapedPrefix,\n        nameSoFar,\n        callback\n      );\n    array = String(children);\n    throw Error(\n      \"Objects are not valid as a React child (found: \" +\n        (\"[object Object]\" === array\n          ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n          : array) +\n        \"). If you meant to render a collection of children, use an array instead.\"\n    );\n  }\n  return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n  if (null == children) return children;\n  var result = [],\n    count = 0;\n  mapIntoArray(children, result, \"\", \"\", function (child) {\n    return func.call(context, child, count++);\n  });\n  return result;\n}\nfunction lazyInitializer(payload) {\n  if (-1 === payload._status) {\n    var ctor = payload._result;\n    ctor = ctor();\n    ctor.then(\n      function (moduleObject) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 1), (payload._result = moduleObject);\n      },\n      function (error) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 2), (payload._result = error);\n      }\n    );\n    -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n  }\n  if (1 === payload._status) return payload._result.default;\n  throw payload._result;\n}\nvar reportGlobalError =\n    \"function\" === typeof reportError\n      ? reportError\n      : function (error) {\n          if (\n            \"object\" === typeof window &&\n            \"function\" === typeof window.ErrorEvent\n          ) {\n            var event = new window.ErrorEvent(\"error\", {\n              bubbles: !0,\n              cancelable: !0,\n              message:\n                \"object\" === typeof error &&\n                null !== error &&\n                \"string\" === typeof error.message\n                  ? String(error.message)\n                  : String(error),\n              error: error\n            });\n            if (!window.dispatchEvent(event)) return;\n          } else if (\n            \"object\" === typeof process &&\n            \"function\" === typeof process.emit\n          ) {\n            process.emit(\"uncaughtException\", error);\n            return;\n          }\n          console.error(error);\n        },\n  Children = {\n    map: mapChildren,\n    forEach: function (children, forEachFunc, forEachContext) {\n      mapChildren(\n        children,\n        function () {\n          forEachFunc.apply(this, arguments);\n        },\n        forEachContext\n      );\n    },\n    count: function (children) {\n      var n = 0;\n      mapChildren(children, function () {\n        n++;\n      });\n      return n;\n    },\n    toArray: function (children) {\n      return (\n        mapChildren(children, function (child) {\n          return child;\n        }) || []\n      );\n    },\n    only: function (children) {\n      if (!isValidElement(children))\n        throw Error(\n          \"React.Children.only expected to receive a single React element child.\"\n        );\n      return children;\n    }\n  };\nexports.Activity = REACT_ACTIVITY_TYPE;\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n  __proto__: null,\n  c: function (size) {\n    return ReactSharedInternals.H.useMemoCache(size);\n  }\n};\nexports.cache = function (fn) {\n  return function () {\n    return fn.apply(null, arguments);\n  };\n};\nexports.cacheSignal = function () {\n  return null;\n};\nexports.cloneElement = function (element, config, children) {\n  if (null === element || void 0 === element)\n    throw Error(\n      \"The argument must be a React element, but you passed \" + element + \".\"\n    );\n  var props = assign({}, element.props),\n    key = element.key;\n  if (null != config)\n    for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n      !hasOwnProperty.call(config, propName) ||\n        \"key\" === propName ||\n        \"__self\" === propName ||\n        \"__source\" === propName ||\n        (\"ref\" === propName && void 0 === config.ref) ||\n        (props[propName] = config[propName]);\n  var propName = arguments.length - 2;\n  if (1 === propName) props.children = children;\n  else if (1 < propName) {\n    for (var childArray = Array(propName), i = 0; i < propName; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  return ReactElement(element.type, key, props);\n};\nexports.createContext = function (defaultValue) {\n  defaultValue = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    _currentValue: defaultValue,\n    _currentValue2: defaultValue,\n    _threadCount: 0,\n    Provider: null,\n    Consumer: null\n  };\n  defaultValue.Provider = defaultValue;\n  defaultValue.Consumer = {\n    $$typeof: REACT_CONSUMER_TYPE,\n    _context: defaultValue\n  };\n  return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n  var propName,\n    props = {},\n    key = null;\n  if (null != config)\n    for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n      hasOwnProperty.call(config, propName) &&\n        \"key\" !== propName &&\n        \"__self\" !== propName &&\n        \"__source\" !== propName &&\n        (props[propName] = config[propName]);\n  var childrenLength = arguments.length - 2;\n  if (1 === childrenLength) props.children = children;\n  else if (1 < childrenLength) {\n    for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  if (type && type.defaultProps)\n    for (propName in ((childrenLength = type.defaultProps), childrenLength))\n      void 0 === props[propName] &&\n        (props[propName] = childrenLength[propName]);\n  return ReactElement(type, key, props);\n};\nexports.createRef = function () {\n  return { current: null };\n};\nexports.forwardRef = function (render) {\n  return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n  return {\n    $$typeof: REACT_LAZY_TYPE,\n    _payload: { _status: -1, _result: ctor },\n    _init: lazyInitializer\n  };\n};\nexports.memo = function (type, compare) {\n  return {\n    $$typeof: REACT_MEMO_TYPE,\n    type: type,\n    compare: void 0 === compare ? null : compare\n  };\n};\nexports.startTransition = function (scope) {\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  try {\n    var returnValue = scope(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    \"object\" === typeof returnValue &&\n      null !== returnValue &&\n      \"function\" === typeof returnValue.then &&\n      returnValue.then(noop, reportGlobalError);\n  } catch (error) {\n    reportGlobalError(error);\n  } finally {\n    null !== prevTransition &&\n      null !== currentTransition.types &&\n      (prevTransition.types = currentTransition.types),\n      (ReactSharedInternals.T = prevTransition);\n  }\n};\nexports.unstable_useCacheRefresh = function () {\n  return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n  return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n  return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n  return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n  return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, deps) {\n  return ReactSharedInternals.H.useEffect(create, deps);\n};\nexports.useEffectEvent = function (callback) {\n  return ReactSharedInternals.H.useEffectEvent(callback);\n};\nexports.useId = function () {\n  return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n  return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n  return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n  return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n  return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n  return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n  return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n  return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n  return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n  subscribe,\n  getSnapshot,\n  getServerSnapshot\n) {\n  return ReactSharedInternals.H.useSyncExternalStore(\n    subscribe,\n    getSnapshot,\n    getServerSnapshot\n  );\n};\nexports.useTransition = function () {\n  return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.2.3\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nfunction push(heap, node) {\n  var index = heap.length;\n  heap.push(node);\n  a: for (; 0 < index; ) {\n    var parentIndex = (index - 1) >>> 1,\n      parent = heap[parentIndex];\n    if (0 < compare(parent, node))\n      (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n    else break a;\n  }\n}\nfunction peek(heap) {\n  return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n  if (0 === heap.length) return null;\n  var first = heap[0],\n    last = heap.pop();\n  if (last !== first) {\n    heap[0] = last;\n    a: for (\n      var index = 0, length = heap.length, halfLength = length >>> 1;\n      index < halfLength;\n\n    ) {\n      var leftIndex = 2 * (index + 1) - 1,\n        left = heap[leftIndex],\n        rightIndex = leftIndex + 1,\n        right = heap[rightIndex];\n      if (0 > compare(left, last))\n        rightIndex < length && 0 > compare(right, left)\n          ? ((heap[index] = right),\n            (heap[rightIndex] = last),\n            (index = rightIndex))\n          : ((heap[index] = left),\n            (heap[leftIndex] = last),\n            (index = leftIndex));\n      else if (rightIndex < length && 0 > compare(right, last))\n        (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n      else break a;\n    }\n  }\n  return first;\n}\nfunction compare(a, b) {\n  var diff = a.sortIndex - b.sortIndex;\n  return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n  var localPerformance = performance;\n  exports.unstable_now = function () {\n    return localPerformance.now();\n  };\n} else {\n  var localDate = Date,\n    initialTime = localDate.now();\n  exports.unstable_now = function () {\n    return localDate.now() - initialTime;\n  };\n}\nvar taskQueue = [],\n  timerQueue = [],\n  taskIdCounter = 1,\n  currentTask = null,\n  currentPriorityLevel = 3,\n  isPerformingWork = !1,\n  isHostCallbackScheduled = !1,\n  isHostTimeoutScheduled = !1,\n  needsPaint = !1,\n  localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n  localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n  localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n  for (var timer = peek(timerQueue); null !== timer; ) {\n    if (null === timer.callback) pop(timerQueue);\n    else if (timer.startTime <= currentTime)\n      pop(timerQueue),\n        (timer.sortIndex = timer.expirationTime),\n        push(taskQueue, timer);\n    else break;\n    timer = peek(timerQueue);\n  }\n}\nfunction handleTimeout(currentTime) {\n  isHostTimeoutScheduled = !1;\n  advanceTimers(currentTime);\n  if (!isHostCallbackScheduled)\n    if (null !== peek(taskQueue))\n      (isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n    else {\n      var firstTimer = peek(timerQueue);\n      null !== firstTimer &&\n        requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n    }\n}\nvar isMessageLoopRunning = !1,\n  taskTimeoutID = -1,\n  frameInterval = 5,\n  startTime = -1;\nfunction shouldYieldToHost() {\n  return needsPaint\n    ? !0\n    : exports.unstable_now() - startTime < frameInterval\n      ? !1\n      : !0;\n}\nfunction performWorkUntilDeadline() {\n  needsPaint = !1;\n  if (isMessageLoopRunning) {\n    var currentTime = exports.unstable_now();\n    startTime = currentTime;\n    var hasMoreWork = !0;\n    try {\n      a: {\n        isHostCallbackScheduled = !1;\n        isHostTimeoutScheduled &&\n          ((isHostTimeoutScheduled = !1),\n          localClearTimeout(taskTimeoutID),\n          (taskTimeoutID = -1));\n        isPerformingWork = !0;\n        var previousPriorityLevel = currentPriorityLevel;\n        try {\n          b: {\n            advanceTimers(currentTime);\n            for (\n              currentTask = peek(taskQueue);\n              null !== currentTask &&\n              !(\n                currentTask.expirationTime > currentTime && shouldYieldToHost()\n              );\n\n            ) {\n              var callback = currentTask.callback;\n              if (\"function\" === typeof callback) {\n                currentTask.callback = null;\n                currentPriorityLevel = currentTask.priorityLevel;\n                var continuationCallback = callback(\n                  currentTask.expirationTime <= currentTime\n                );\n                currentTime = exports.unstable_now();\n                if (\"function\" === typeof continuationCallback) {\n                  currentTask.callback = continuationCallback;\n                  advanceTimers(currentTime);\n                  hasMoreWork = !0;\n                  break b;\n                }\n                currentTask === peek(taskQueue) && pop(taskQueue);\n                advanceTimers(currentTime);\n              } else pop(taskQueue);\n              currentTask = peek(taskQueue);\n            }\n            if (null !== currentTask) hasMoreWork = !0;\n            else {\n              var firstTimer = peek(timerQueue);\n              null !== firstTimer &&\n                requestHostTimeout(\n                  handleTimeout,\n                  firstTimer.startTime - currentTime\n                );\n              hasMoreWork = !1;\n            }\n          }\n          break a;\n        } finally {\n          (currentTask = null),\n            (currentPriorityLevel = previousPriorityLevel),\n            (isPerformingWork = !1);\n        }\n        hasMoreWork = void 0;\n      }\n    } finally {\n      hasMoreWork\n        ? schedulePerformWorkUntilDeadline()\n        : (isMessageLoopRunning = !1);\n    }\n  }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n  schedulePerformWorkUntilDeadline = function () {\n    localSetImmediate(performWorkUntilDeadline);\n  };\nelse if (\"undefined\" !== typeof MessageChannel) {\n  var channel = new MessageChannel(),\n    port = channel.port2;\n  channel.port1.onmessage = performWorkUntilDeadline;\n  schedulePerformWorkUntilDeadline = function () {\n    port.postMessage(null);\n  };\n} else\n  schedulePerformWorkUntilDeadline = function () {\n    localSetTimeout(performWorkUntilDeadline, 0);\n  };\nfunction requestHostTimeout(callback, ms) {\n  taskTimeoutID = localSetTimeout(function () {\n    callback(exports.unstable_now());\n  }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n  task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n  0 > fps || 125 < fps\n    ? console.error(\n        \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n      )\n    : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n  return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n  switch (currentPriorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n      var priorityLevel = 3;\n      break;\n    default:\n      priorityLevel = currentPriorityLevel;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_requestPaint = function () {\n  needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n  switch (priorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n    case 4:\n    case 5:\n      break;\n    default:\n      priorityLevel = 3;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_scheduleCallback = function (\n  priorityLevel,\n  callback,\n  options\n) {\n  var currentTime = exports.unstable_now();\n  \"object\" === typeof options && null !== options\n    ? ((options = options.delay),\n      (options =\n        \"number\" === typeof options && 0 < options\n          ? currentTime + options\n          : currentTime))\n    : (options = currentTime);\n  switch (priorityLevel) {\n    case 1:\n      var timeout = -1;\n      break;\n    case 2:\n      timeout = 250;\n      break;\n    case 5:\n      timeout = 1073741823;\n      break;\n    case 4:\n      timeout = 1e4;\n      break;\n    default:\n      timeout = 5e3;\n  }\n  timeout = options + timeout;\n  priorityLevel = {\n    id: taskIdCounter++,\n    callback: callback,\n    priorityLevel: priorityLevel,\n    startTime: options,\n    expirationTime: timeout,\n    sortIndex: -1\n  };\n  options > currentTime\n    ? ((priorityLevel.sortIndex = options),\n      push(timerQueue, priorityLevel),\n      null === peek(taskQueue) &&\n        priorityLevel === peek(timerQueue) &&\n        (isHostTimeoutScheduled\n          ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n          : (isHostTimeoutScheduled = !0),\n        requestHostTimeout(handleTimeout, options - currentTime)))\n    : ((priorityLevel.sortIndex = timeout),\n      push(taskQueue, priorityLevel),\n      isHostCallbackScheduled ||\n        isPerformingWork ||\n        ((isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n  return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n  var parentPriorityLevel = currentPriorityLevel;\n  return function () {\n    var previousPriorityLevel = currentPriorityLevel;\n    currentPriorityLevel = parentPriorityLevel;\n    try {\n      return callback.apply(this, arguments);\n    } finally {\n      currentPriorityLevel = previousPriorityLevel;\n    }\n  };\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.styleq = void 0;\nvar cache = new WeakMap();\nvar compiledKey = '$$css';\n\nfunction createStyleq(options) {\n  var disableCache;\n  var disableMix;\n  var transform;\n\n  if (options != null) {\n    disableCache = options.disableCache === true;\n    disableMix = options.disableMix === true;\n    transform = options.transform;\n  }\n\n  return function styleq() {\n    // Keep track of property commits to the className\n    var definedProperties = []; // The className and inline style to build up\n\n    var className = '';\n    var inlineStyle = null; // The current position in the cache graph\n\n    var nextCache = disableCache ? null : cache; // This way of creating an array from arguments is fastest\n\n    var styles = new Array(arguments.length);\n\n    for (var i = 0; i < arguments.length; i++) {\n      styles[i] = arguments[i];\n    } // Iterate over styles from last to first\n\n\n    while (styles.length > 0) {\n      var possibleStyle = styles.pop(); // Skip empty items\n\n      if (possibleStyle == null || possibleStyle === false) {\n        continue;\n      } // Push nested styles back onto the stack to be processed\n\n\n      if (Array.isArray(possibleStyle)) {\n        for (var _i = 0; _i < possibleStyle.length; _i++) {\n          styles.push(possibleStyle[_i]);\n        }\n\n        continue;\n      } // Process an individual style object\n\n\n      var style = transform != null ? transform(possibleStyle) : possibleStyle;\n\n      if (style.$$css) {\n        // Build up the class names defined by this object\n        var classNameChunk = ''; // Check the cache to see if we've already done this work\n\n        if (nextCache != null && nextCache.has(style)) {\n          // Cache: read\n          var cacheEntry = nextCache.get(style);\n\n          if (cacheEntry != null) {\n            classNameChunk = cacheEntry[0]; // $FlowIgnore\n\n            definedProperties.push.apply(definedProperties, cacheEntry[1]);\n            nextCache = cacheEntry[2];\n          }\n        } // Update the chunks with data from this object\n        else {\n          // The properties defined by this object\n          var definedPropertiesChunk = [];\n\n          for (var prop in style) {\n            var value = style[prop];\n            if (prop === compiledKey) continue; // Each property value is used as an HTML class name\n            // { 'debug.string': 'debug.string', opacity: 's-jskmnoqp' }\n\n            if (typeof value === 'string' || value === null) {\n              // Only add to chunks if this property hasn't already been seen\n              if (!definedProperties.includes(prop)) {\n                definedProperties.push(prop);\n\n                if (nextCache != null) {\n                  definedPropertiesChunk.push(prop);\n                }\n\n                if (typeof value === 'string') {\n                  classNameChunk += classNameChunk ? ' ' + value : value;\n                }\n              }\n            } // If we encounter a value that isn't a string or `null`\n            else {\n              console.error(\"styleq: \".concat(prop, \" typeof \").concat(String(value), \" is not \\\"string\\\" or \\\"null\\\".\"));\n            }\n          } // Cache: write\n\n\n          if (nextCache != null) {\n            // Create the next WeakMap for this sequence of styles\n            var weakMap = new WeakMap();\n            nextCache.set(style, [classNameChunk, definedPropertiesChunk, weakMap]);\n            nextCache = weakMap;\n          }\n        } // Order of classes in chunks matches property-iteration order of style\n        // object. Order of chunks matches passed order of styles from first to\n        // last (which we iterate over in reverse).\n\n\n        if (classNameChunk) {\n          className = className ? classNameChunk + ' ' + className : classNameChunk;\n        }\n      } // ----- DYNAMIC: Process inline style object -----\n      else {\n        if (disableMix) {\n          if (inlineStyle == null) {\n            inlineStyle = {};\n          }\n\n          inlineStyle = Object.assign({}, style, inlineStyle);\n        } else {\n          var subStyle = null;\n\n          for (var _prop in style) {\n            var _value = style[_prop];\n\n            if (_value !== undefined) {\n              if (!definedProperties.includes(_prop)) {\n                if (_value != null) {\n                  if (inlineStyle == null) {\n                    inlineStyle = {};\n                  }\n\n                  if (subStyle == null) {\n                    subStyle = {};\n                  }\n\n                  subStyle[_prop] = _value;\n                }\n\n                definedProperties.push(_prop); // Cache is unnecessary overhead if results can't be reused.\n\n                nextCache = null;\n              }\n            }\n          }\n\n          if (subStyle != null) {\n            inlineStyle = Object.assign(subStyle, inlineStyle);\n          }\n        }\n      }\n    }\n\n    var styleProps = [className, inlineStyle];\n    return styleProps;\n  };\n}\n\nvar styleq = createStyleq();\nexports.styleq = styleq;\nstyleq.factory = createStyleq;","/**\n * Copyright (c) Nicolas Gallagher\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.localizeStyle = localizeStyle;\nvar cache = new WeakMap();\nvar markerProp = '$$css$localize';\n/**\n * The compiler polyfills logical properties and values, generating a class\n * name for both writing directions. The style objects are annotated by\n * the compiler as needing this runtime transform. The results are memoized.\n *\n * { '$$css$localize': true, float: [ 'float-left', 'float-right' ] }\n * => { float: 'float-left' }\n */\n\nfunction compileStyle(style, isRTL) {\n  // Create a new compiled style for styleq\n  var compiledStyle = {};\n\n  for (var prop in style) {\n    if (prop !== markerProp) {\n      var value = style[prop];\n\n      if (Array.isArray(value)) {\n        compiledStyle[prop] = isRTL ? value[1] : value[0];\n      } else {\n        compiledStyle[prop] = value;\n      }\n    }\n  }\n\n  return compiledStyle;\n}\n\nfunction localizeStyle(style, isRTL) {\n  if (style[markerProp] != null) {\n    var compiledStyleIndex = isRTL ? 1 : 0; // Check the cache in case we've already seen this object\n\n    if (cache.has(style)) {\n      var _cachedStyles = cache.get(style);\n\n      var _compiledStyle = _cachedStyles[compiledStyleIndex];\n\n      if (_compiledStyle == null) {\n        // Update the missing cache entry\n        _compiledStyle = compileStyle(style, isRTL);\n        _cachedStyles[compiledStyleIndex] = _compiledStyle;\n        cache.set(style, _cachedStyles);\n      }\n\n      return _compiledStyle;\n    } // Create a new compiled style for styleq\n\n\n    var compiledStyle = compileStyle(style, isRTL);\n    var cachedStyles = new Array(2);\n    cachedStyles[compiledStyleIndex] = compiledStyle;\n    cache.set(style, cachedStyles);\n    return compiledStyle;\n  }\n\n  return style;\n}","export const copyComponentProperties = (Component, UniwindComponent) => {\n  Object.entries(Component).forEach(([key, value]) => {\n    if ([\"$$typeof\", \"render\", \"contextType\"].includes(key)) {\n      return;\n    }\n    UniwindComponent[key] = value;\n  });\n  UniwindComponent.displayName = Component.displayName;\n  UniwindComponent.prototype = Object.getPrototypeOf(Component);\n  return UniwindComponent;\n};\n","import Platform from '../../../exports/Platform';\nexport default Platform;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nvar ReactNativeFeatureFlags = {\n  isLayoutAnimationEnabled: () => true,\n  shouldEmitW3CPointerEvents: () => false,\n  shouldPressibilityUseW3CPointerEventsForHover: () => false,\n  animatedShouldDebounceQueueFlush: () => false,\n  animatedShouldUseSingleOp: () => false\n};\nexport default ReactNativeFeatureFlags;","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport NativeAnimatedNonTurboModule from './NativeAnimatedModule';\nimport NativeAnimatedTurboModule from './NativeAnimatedTurboModule';\nimport NativeEventEmitter from '../EventEmitter/NativeEventEmitter';\nimport Platform from '../Utilities/Platform';\nimport ReactNativeFeatureFlags from '../ReactNative/ReactNativeFeatureFlags';\nimport invariant from 'fbjs/lib/invariant';\nimport RCTDeviceEventEmitter from '../EventEmitter/RCTDeviceEventEmitter';\n// TODO T69437152 @petetheheat - Delete this fork when Fabric ships to 100%.\nvar NativeAnimatedModule = Platform.OS === 'ios' && global.RN$Bridgeless === true ? NativeAnimatedTurboModule : NativeAnimatedNonTurboModule;\nvar __nativeAnimatedNodeTagCount = 1; /* used for animated nodes */\nvar __nativeAnimationIdCount = 1; /* used for started animations */\n\nvar nativeEventEmitter;\nvar waitingForQueuedOperations = new Set();\nvar queueOperations = false;\nvar queue = [];\n// $FlowFixMe\nvar singleOpQueue = [];\nvar useSingleOpBatching = false;\nPlatform.OS === 'android' && !!(NativeAnimatedModule != null && NativeAnimatedModule.queueAndExecuteBatchedOperations) && ReactNativeFeatureFlags.animatedShouldUseSingleOp();\nvar flushQueueTimeout = null;\nvar eventListenerGetValueCallbacks = {};\nvar eventListenerAnimationFinishedCallbacks = {};\nvar globalEventEmitterGetValueListener = null;\nvar globalEventEmitterAnimationFinishedListener = null;\nvar nativeOps = useSingleOpBatching ? function () {\n  var apis = ['createAnimatedNode',\n  // 1\n  'updateAnimatedNodeConfig',\n  // 2\n  'getValue',\n  // 3\n  'startListeningToAnimatedNodeValue',\n  // 4\n  'stopListeningToAnimatedNodeValue',\n  // 5\n  'connectAnimatedNodes',\n  // 6\n  'disconnectAnimatedNodes',\n  // 7\n  'startAnimatingNode',\n  // 8\n  'stopAnimation',\n  // 9\n  'setAnimatedNodeValue',\n  // 10\n  'setAnimatedNodeOffset',\n  // 11\n  'flattenAnimatedNodeOffset',\n  // 12\n  'extractAnimatedNodeOffset',\n  // 13\n  'connectAnimatedNodeToView',\n  // 14\n  'disconnectAnimatedNodeFromView',\n  // 15\n  'restoreDefaultValues',\n  // 16\n  'dropAnimatedNode',\n  // 17\n  'addAnimatedEventToView',\n  // 18\n  'removeAnimatedEventFromView',\n  // 19\n  'addListener',\n  // 20\n  'removeListener' // 21\n  ];\n  return apis.reduce((acc, functionName, i) => {\n    // These indices need to be kept in sync with the indices in native (see NativeAnimatedModule in Java, or the equivalent for any other native platform).\n    // $FlowFixMe[prop-missing]\n    acc[functionName] = i + 1;\n    return acc;\n  }, {});\n}() : NativeAnimatedModule;\n\n/**\n * Wrappers around NativeAnimatedModule to provide flow and autocomplete support for\n * the native module methods, and automatic queue management on Android\n */\nvar API = {\n  getValue: function getValue(tag, saveValueCallback) {\n    invariant(nativeOps, 'Native animated module is not available');\n    if (useSingleOpBatching) {\n      if (saveValueCallback) {\n        eventListenerGetValueCallbacks[tag] = saveValueCallback;\n      }\n      // $FlowFixMe\n      API.queueOperation(nativeOps.getValue, tag);\n    } else {\n      API.queueOperation(nativeOps.getValue, tag, saveValueCallback);\n    }\n  },\n  setWaitingForIdentifier: function setWaitingForIdentifier(id) {\n    waitingForQueuedOperations.add(id);\n    queueOperations = true;\n    if (ReactNativeFeatureFlags.animatedShouldDebounceQueueFlush() && flushQueueTimeout) {\n      clearTimeout(flushQueueTimeout);\n    }\n  },\n  unsetWaitingForIdentifier: function unsetWaitingForIdentifier(id) {\n    waitingForQueuedOperations.delete(id);\n    if (waitingForQueuedOperations.size === 0) {\n      queueOperations = false;\n      API.disableQueue();\n    }\n  },\n  disableQueue: function disableQueue() {\n    invariant(nativeOps, 'Native animated module is not available');\n    if (ReactNativeFeatureFlags.animatedShouldDebounceQueueFlush()) {\n      var prevTimeout = flushQueueTimeout;\n      clearImmediate(prevTimeout);\n      flushQueueTimeout = setImmediate(API.flushQueue);\n    } else {\n      API.flushQueue();\n    }\n  },\n  flushQueue: function flushQueue() {\n    /*\n    invariant(NativeAnimatedModule, 'Native animated module is not available');\n    flushQueueTimeout = null;\n     // Early returns before calling any APIs\n    if (useSingleOpBatching && singleOpQueue.length === 0) {\n      return;\n    }\n    if (!useSingleOpBatching && queue.length === 0) {\n      return;\n    }\n     if (useSingleOpBatching) {\n      // Set up event listener for callbacks if it's not set up\n      if (\n        !globalEventEmitterGetValueListener ||\n        !globalEventEmitterAnimationFinishedListener\n      ) {\n        setupGlobalEventEmitterListeners();\n      }\n      // Single op batching doesn't use callback functions, instead we\n      // use RCTDeviceEventEmitter. This reduces overhead of sending lots of\n      // JSI functions across to native code; but also, TM infrastructure currently\n      // does not support packing a function into native arrays.\n      NativeAnimatedModule.queueAndExecuteBatchedOperations?.(singleOpQueue);\n      singleOpQueue.length = 0;\n    } else {\n      Platform.OS === 'android' && NativeAnimatedModule.startOperationBatch?.();\n      for (let q = 0, l = queue.length; q < l; q++) {\n        queue[q]();\n      }\n      queue.length = 0;\n      Platform.OS === 'android' &&\n        NativeAnimatedModule.finishOperationBatch?.();\n    }\n    */\n  },\n  queueOperation: function queueOperation(fn) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n    if (useSingleOpBatching) {\n      // Get the command ID from the queued function, and push that ID and any arguments needed to execute the operation\n      // $FlowFixMe: surprise, fn is actually a number\n      singleOpQueue.push(fn, ...args);\n      return;\n    }\n\n    // If queueing is explicitly on, *or* the queue has not yet\n    // been flushed, use the queue. This is to prevent operations\n    // from being executed out of order.\n    if (queueOperations || queue.length !== 0) {\n      queue.push(() => fn(...args));\n    } else {\n      fn(...args);\n    }\n  },\n  createAnimatedNode: function createAnimatedNode(tag, config) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.createAnimatedNode, tag, config);\n  },\n  updateAnimatedNodeConfig: function updateAnimatedNodeConfig(tag, config) {\n    invariant(nativeOps, 'Native animated module is not available');\n    //if (nativeOps.updateAnimatedNodeConfig) {\n    //  API.queueOperation(nativeOps.updateAnimatedNodeConfig, tag, config);\n    //}\n  },\n  startListeningToAnimatedNodeValue: function startListeningToAnimatedNodeValue(tag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.startListeningToAnimatedNodeValue, tag);\n  },\n  stopListeningToAnimatedNodeValue: function stopListeningToAnimatedNodeValue(tag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.stopListeningToAnimatedNodeValue, tag);\n  },\n  connectAnimatedNodes: function connectAnimatedNodes(parentTag, childTag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.connectAnimatedNodes, parentTag, childTag);\n  },\n  disconnectAnimatedNodes: function disconnectAnimatedNodes(parentTag, childTag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.disconnectAnimatedNodes, parentTag, childTag);\n  },\n  startAnimatingNode: function startAnimatingNode(animationId, nodeTag, config, endCallback) {\n    invariant(nativeOps, 'Native animated module is not available');\n    if (useSingleOpBatching) {\n      if (endCallback) {\n        eventListenerAnimationFinishedCallbacks[animationId] = endCallback;\n      }\n      // $FlowFixMe\n      API.queueOperation(nativeOps.startAnimatingNode, animationId, nodeTag, config);\n    } else {\n      API.queueOperation(nativeOps.startAnimatingNode, animationId, nodeTag, config, endCallback);\n    }\n  },\n  stopAnimation: function stopAnimation(animationId) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.stopAnimation, animationId);\n  },\n  setAnimatedNodeValue: function setAnimatedNodeValue(nodeTag, value) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.setAnimatedNodeValue, nodeTag, value);\n  },\n  setAnimatedNodeOffset: function setAnimatedNodeOffset(nodeTag, offset) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.setAnimatedNodeOffset, nodeTag, offset);\n  },\n  flattenAnimatedNodeOffset: function flattenAnimatedNodeOffset(nodeTag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.flattenAnimatedNodeOffset, nodeTag);\n  },\n  extractAnimatedNodeOffset: function extractAnimatedNodeOffset(nodeTag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.extractAnimatedNodeOffset, nodeTag);\n  },\n  connectAnimatedNodeToView: function connectAnimatedNodeToView(nodeTag, viewTag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.connectAnimatedNodeToView, nodeTag, viewTag);\n  },\n  disconnectAnimatedNodeFromView: function disconnectAnimatedNodeFromView(nodeTag, viewTag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.disconnectAnimatedNodeFromView, nodeTag, viewTag);\n  },\n  restoreDefaultValues: function restoreDefaultValues(nodeTag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    // Backwards compat with older native runtimes, can be removed later.\n    if (nativeOps.restoreDefaultValues != null) {\n      API.queueOperation(nativeOps.restoreDefaultValues, nodeTag);\n    }\n  },\n  dropAnimatedNode: function dropAnimatedNode(tag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.dropAnimatedNode, tag);\n  },\n  addAnimatedEventToView: function addAnimatedEventToView(viewTag, eventName, eventMapping) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.addAnimatedEventToView, viewTag, eventName, eventMapping);\n  },\n  removeAnimatedEventFromView(viewTag, eventName, animatedNodeTag) {\n    invariant(nativeOps, 'Native animated module is not available');\n    API.queueOperation(nativeOps.removeAnimatedEventFromView, viewTag, eventName, animatedNodeTag);\n  }\n};\nfunction setupGlobalEventEmitterListeners() {\n  globalEventEmitterGetValueListener = RCTDeviceEventEmitter.addListener('onNativeAnimatedModuleGetValue', function (params) {\n    var tag = params.tag;\n    var callback = eventListenerGetValueCallbacks[tag];\n    if (!callback) {\n      return;\n    }\n    callback(params.value);\n    delete eventListenerGetValueCallbacks[tag];\n  });\n  globalEventEmitterAnimationFinishedListener = RCTDeviceEventEmitter.addListener('onNativeAnimatedModuleAnimationFinished', function (params) {\n    var animationId = params.animationId;\n    var callback = eventListenerAnimationFinishedCallbacks[animationId];\n    if (!callback) {\n      return;\n    }\n    callback(params);\n    delete eventListenerAnimationFinishedCallbacks[animationId];\n  });\n}\n\n/**\n * Styles allowed by the native animated implementation.\n *\n * In general native animated implementation should support any numeric or color property that\n * doesn't need to be updated through the shadow view hierarchy (all non-layout properties).\n */\nvar SUPPORTED_COLOR_STYLES = {\n  backgroundColor: true,\n  borderBottomColor: true,\n  borderColor: true,\n  borderEndColor: true,\n  borderLeftColor: true,\n  borderRightColor: true,\n  borderStartColor: true,\n  borderTopColor: true,\n  color: true,\n  tintColor: true\n};\nvar SUPPORTED_STYLES = _objectSpread(_objectSpread({}, SUPPORTED_COLOR_STYLES), {}, {\n  borderBottomEndRadius: true,\n  borderBottomLeftRadius: true,\n  borderBottomRightRadius: true,\n  borderBottomStartRadius: true,\n  borderRadius: true,\n  borderTopEndRadius: true,\n  borderTopLeftRadius: true,\n  borderTopRightRadius: true,\n  borderTopStartRadius: true,\n  elevation: true,\n  opacity: true,\n  transform: true,\n  zIndex: true,\n  /* ios styles */\n  shadowOpacity: true,\n  shadowRadius: true,\n  /* legacy android transform properties */\n  scaleX: true,\n  scaleY: true,\n  translateX: true,\n  translateY: true\n});\nvar SUPPORTED_TRANSFORMS = {\n  translateX: true,\n  translateY: true,\n  scale: true,\n  scaleX: true,\n  scaleY: true,\n  rotate: true,\n  rotateX: true,\n  rotateY: true,\n  rotateZ: true,\n  perspective: true\n};\nvar SUPPORTED_INTERPOLATION_PARAMS = {\n  inputRange: true,\n  outputRange: true,\n  extrapolate: true,\n  extrapolateRight: true,\n  extrapolateLeft: true\n};\nfunction addWhitelistedStyleProp(prop) {\n  SUPPORTED_STYLES[prop] = true;\n}\nfunction addWhitelistedTransformProp(prop) {\n  SUPPORTED_TRANSFORMS[prop] = true;\n}\nfunction addWhitelistedInterpolationParam(param) {\n  SUPPORTED_INTERPOLATION_PARAMS[param] = true;\n}\nfunction isSupportedColorStyleProp(prop) {\n  return SUPPORTED_COLOR_STYLES.hasOwnProperty(prop);\n}\nfunction isSupportedStyleProp(prop) {\n  return SUPPORTED_STYLES.hasOwnProperty(prop);\n}\nfunction isSupportedTransformProp(prop) {\n  return SUPPORTED_TRANSFORMS.hasOwnProperty(prop);\n}\nfunction isSupportedInterpolationParam(param) {\n  return SUPPORTED_INTERPOLATION_PARAMS.hasOwnProperty(param);\n}\nfunction validateTransform(configs) {\n  configs.forEach(config => {\n    if (!isSupportedTransformProp(config.property)) {\n      throw new Error(\"Property '\" + config.property + \"' is not supported by native animated module\");\n    }\n  });\n}\nfunction validateStyles(styles) {\n  for (var _key2 in styles) {\n    if (!isSupportedStyleProp(_key2)) {\n      throw new Error(\"Style property '\" + _key2 + \"' is not supported by native animated module\");\n    }\n  }\n}\nfunction validateInterpolation(config) {\n  for (var _key3 in config) {\n    if (!isSupportedInterpolationParam(_key3)) {\n      throw new Error(\"Interpolation property '\" + _key3 + \"' is not supported by native animated module\");\n    }\n  }\n}\nfunction generateNewNodeTag() {\n  return __nativeAnimatedNodeTagCount++;\n}\nfunction generateNewAnimationId() {\n  return __nativeAnimationIdCount++;\n}\nfunction assertNativeAnimatedModule() {\n  invariant(NativeAnimatedModule, 'Native animated module is not available');\n}\nvar _warnedMissingNativeAnimated = false;\nfunction shouldUseNativeDriver(config) {\n  if (config.useNativeDriver == null) {\n    console.warn('Animated: `useNativeDriver` was not specified. This is a required ' + 'option and must be explicitly set to `true` or `false`');\n  }\n  if (config.useNativeDriver === true && !NativeAnimatedModule) {\n    if (!_warnedMissingNativeAnimated) {\n      console.warn('Animated: `useNativeDriver` is not supported because the native ' + 'animated module is missing. Falling back to JS-based animation. To ' + 'resolve this, add `RCTAnimation` module to this app, or remove ' + '`useNativeDriver`. ' + 'Make sure to run `bundle exec pod install` first. Read more about autolinking: https://github.com/react-native-community/cli/blob/master/docs/autolinking.md');\n      _warnedMissingNativeAnimated = true;\n    }\n    return false;\n  }\n  return config.useNativeDriver || false;\n}\nfunction transformDataType(value) {\n  // Change the string type to number type so we can reuse the same logic in\n  // iOS and Android platform\n  if (typeof value !== 'string') {\n    return value;\n  }\n  if (/deg$/.test(value)) {\n    var degrees = parseFloat(value) || 0;\n    var radians = degrees * Math.PI / 180.0;\n    return radians;\n  } else {\n    return value;\n  }\n}\nexport { API, isSupportedColorStyleProp, isSupportedStyleProp, isSupportedTransformProp, isSupportedInterpolationParam, addWhitelistedStyleProp, addWhitelistedTransformProp, addWhitelistedInterpolationParam, validateStyles, validateTransform, validateInterpolation, generateNewNodeTag, generateNewAnimationId, assertNativeAnimatedModule, shouldUseNativeDriver, transformDataType };\nexport default {\n  API,\n  isSupportedColorStyleProp,\n  isSupportedStyleProp,\n  isSupportedTransformProp,\n  isSupportedInterpolationParam,\n  addWhitelistedStyleProp,\n  addWhitelistedTransformProp,\n  addWhitelistedInterpolationParam,\n  validateStyles,\n  validateTransform,\n  validateInterpolation,\n  generateNewNodeTag,\n  generateNewAnimationId,\n  assertNativeAnimatedModule,\n  shouldUseNativeDriver,\n  transformDataType,\n  // $FlowExpectedError[unsafe-getters-setters] - unsafe getter lint suppresion\n  // $FlowExpectedError[missing-type-arg] - unsafe getter lint suppresion\n  get nativeEventEmitter() {\n    if (!nativeEventEmitter) {\n      nativeEventEmitter = new NativeEventEmitter(\n      // T88715063: NativeEventEmitter only used this parameter on iOS. Now it uses it on all platforms, so this code was modified automatically to preserve its behavior\n      // If you want to use the native module on other platforms, please remove this condition and test its behavior\n      Platform.OS !== 'ios' ? null : NativeAnimatedModule);\n    }\n    return nativeEventEmitter;\n  }\n};","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport invariant from 'fbjs/lib/invariant';\nexport function get(name) {\n  return null;\n}\nexport function getEnforcing(name) {\n  var module = get(name);\n  invariant(module != null, \"TurboModuleRegistry.getEnforcing(...): '\" + name + \"' could not be found. \" + 'Verify that a module by this name is registered in the native binary.');\n  return module;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nvar NativeAnimatedAPI = NativeAnimatedHelper.API;\nimport invariant from 'fbjs/lib/invariant';\nvar _uniqueId = 1;\n\n// Note(vjeux): this would be better as an interface but flow doesn't\n// support them yet\nclass AnimatedNode {\n  __attach() {}\n  __detach() {\n    if (this.__isNative && this.__nativeTag != null) {\n      NativeAnimatedHelper.API.dropAnimatedNode(this.__nativeTag);\n      this.__nativeTag = undefined;\n    }\n  }\n  __getValue() {}\n  __getAnimatedValue() {\n    return this.__getValue();\n  }\n  __addChild(child) {}\n  __removeChild(child) {}\n  __getChildren() {\n    return [];\n  }\n\n  /* Methods and props used by native Animated impl */\n\n  constructor() {\n    this._listeners = {};\n  }\n  __makeNative(platformConfig) {\n    if (!this.__isNative) {\n      throw new Error('This node cannot be made a \"native\" animated node');\n    }\n    this._platformConfig = platformConfig;\n    if (this.hasListeners()) {\n      this._startListeningToNativeValueUpdates();\n    }\n  }\n\n  /**\n   * Adds an asynchronous listener to the value so you can observe updates from\n   * animations.  This is useful because there is no way to\n   * synchronously read the value because it might be driven natively.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#addlistener\n   */\n  addListener(callback) {\n    var id = String(_uniqueId++);\n    this._listeners[id] = callback;\n    if (this.__isNative) {\n      this._startListeningToNativeValueUpdates();\n    }\n    return id;\n  }\n\n  /**\n   * Unregister a listener. The `id` param shall match the identifier\n   * previously returned by `addListener()`.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#removelistener\n   */\n  removeListener(id) {\n    delete this._listeners[id];\n    if (this.__isNative && !this.hasListeners()) {\n      this._stopListeningForNativeValueUpdates();\n    }\n  }\n\n  /**\n   * Remove all registered listeners.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#removealllisteners\n   */\n  removeAllListeners() {\n    this._listeners = {};\n    if (this.__isNative) {\n      this._stopListeningForNativeValueUpdates();\n    }\n  }\n  hasListeners() {\n    return !!Object.keys(this._listeners).length;\n  }\n  _startListeningToNativeValueUpdates() {\n    if (this.__nativeAnimatedValueListener && !this.__shouldUpdateListenersForNewNativeTag) {\n      return;\n    }\n    if (this.__shouldUpdateListenersForNewNativeTag) {\n      this.__shouldUpdateListenersForNewNativeTag = false;\n      this._stopListeningForNativeValueUpdates();\n    }\n    NativeAnimatedAPI.startListeningToAnimatedNodeValue(this.__getNativeTag());\n    this.__nativeAnimatedValueListener = NativeAnimatedHelper.nativeEventEmitter.addListener('onAnimatedValueUpdate', data => {\n      if (data.tag !== this.__getNativeTag()) {\n        return;\n      }\n      this.__onAnimatedValueUpdateReceived(data.value);\n    });\n  }\n  __onAnimatedValueUpdateReceived(value) {\n    this.__callListeners(value);\n  }\n  __callListeners(value) {\n    for (var _key in this._listeners) {\n      this._listeners[_key]({\n        value\n      });\n    }\n  }\n  _stopListeningForNativeValueUpdates() {\n    if (!this.__nativeAnimatedValueListener) {\n      return;\n    }\n    this.__nativeAnimatedValueListener.remove();\n    this.__nativeAnimatedValueListener = null;\n    NativeAnimatedAPI.stopListeningToAnimatedNodeValue(this.__getNativeTag());\n  }\n  __getNativeTag() {\n    var _this$__nativeTag;\n    NativeAnimatedHelper.assertNativeAnimatedModule();\n    invariant(this.__isNative, 'Attempt to get native tag from node not marked as \"native\"');\n    var nativeTag = (_this$__nativeTag = this.__nativeTag) !== null && _this$__nativeTag !== void 0 ? _this$__nativeTag : NativeAnimatedHelper.generateNewNodeTag();\n    if (this.__nativeTag == null) {\n      this.__nativeTag = nativeTag;\n      var config = this.__getNativeConfig();\n      if (this._platformConfig) {\n        config.platformConfig = this._platformConfig;\n      }\n      NativeAnimatedHelper.API.createAnimatedNode(nativeTag, config);\n      this.__shouldUpdateListenersForNewNativeTag = true;\n    }\n    return nativeTag;\n  }\n  __getNativeConfig() {\n    throw new Error('This JS animated node type cannot be used as native animated node');\n  }\n  toJSON() {\n    return this.__getValue();\n  }\n  __getPlatformConfig() {\n    return this._platformConfig;\n  }\n  __setPlatformConfig(platformConfig) {\n    this._platformConfig = platformConfig;\n  }\n}\nexport default AnimatedNode;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _createForOfIteratorHelperLoose from \"@babel/runtime/helpers/createForOfIteratorHelperLoose\";\nimport AnimatedNode from './AnimatedNode';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nclass AnimatedWithChildren extends AnimatedNode {\n  constructor() {\n    super();\n    this._children = [];\n  }\n  __makeNative(platformConfig) {\n    if (!this.__isNative) {\n      this.__isNative = true;\n      for (var _iterator = _createForOfIteratorHelperLoose(this._children), _step; !(_step = _iterator()).done;) {\n        var child = _step.value;\n        child.__makeNative(platformConfig);\n        NativeAnimatedHelper.API.connectAnimatedNodes(this.__getNativeTag(), child.__getNativeTag());\n      }\n    }\n    super.__makeNative(platformConfig);\n  }\n  __addChild(child) {\n    if (this._children.length === 0) {\n      this.__attach();\n    }\n    this._children.push(child);\n    if (this.__isNative) {\n      // Only accept \"native\" animated nodes as children\n      child.__makeNative(this.__getPlatformConfig());\n      NativeAnimatedHelper.API.connectAnimatedNodes(this.__getNativeTag(), child.__getNativeTag());\n    }\n  }\n  __removeChild(child) {\n    var index = this._children.indexOf(child);\n    if (index === -1) {\n      console.warn(\"Trying to remove a child that doesn't exist\");\n      return;\n    }\n    if (this.__isNative && child.__isNative) {\n      NativeAnimatedHelper.API.disconnectAnimatedNodes(this.__getNativeTag(), child.__getNativeTag());\n    }\n    this._children.splice(index, 1);\n    if (this._children.length === 0) {\n      this.__detach();\n    }\n  }\n  __getChildren() {\n    return this._children;\n  }\n  __callListeners(value) {\n    super.__callListeners(value);\n    if (!this.__isNative) {\n      for (var _iterator2 = _createForOfIteratorHelperLoose(this._children), _step2; !(_step2 = _iterator2()).done;) {\n        var child = _step2.value;\n        // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n        if (child.__getValue) {\n          child.__callListeners(child.__getValue());\n        }\n      }\n    }\n  }\n}\nexport default AnimatedWithChildren;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n/* eslint no-bitwise: 0 */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nimport invariant from 'fbjs/lib/invariant';\nimport normalizeColor from '@react-native/normalize-colors';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nvar linear = t => t;\n\n/**\n * Very handy helper to map input ranges to output ranges with an easing\n * function and custom behavior outside of the ranges.\n */\nfunction createInterpolation(config) {\n  if (config.outputRange && typeof config.outputRange[0] === 'string') {\n    return createInterpolationFromStringOutputRange(config);\n  }\n  var outputRange = config.outputRange;\n  var inputRange = config.inputRange;\n  if (__DEV__) {\n    checkInfiniteRange('outputRange', outputRange);\n    checkInfiniteRange('inputRange', inputRange);\n    checkValidInputRange(inputRange);\n    invariant(inputRange.length === outputRange.length, 'inputRange (' + inputRange.length + ') and outputRange (' + outputRange.length + ') must have the same length');\n  }\n  var easing = config.easing || linear;\n  var extrapolateLeft = 'extend';\n  if (config.extrapolateLeft !== undefined) {\n    extrapolateLeft = config.extrapolateLeft;\n  } else if (config.extrapolate !== undefined) {\n    extrapolateLeft = config.extrapolate;\n  }\n  var extrapolateRight = 'extend';\n  if (config.extrapolateRight !== undefined) {\n    extrapolateRight = config.extrapolateRight;\n  } else if (config.extrapolate !== undefined) {\n    extrapolateRight = config.extrapolate;\n  }\n  return input => {\n    invariant(typeof input === 'number', 'Cannot interpolation an input which is not a number');\n    var range = findRange(input, inputRange);\n    return interpolate(input, inputRange[range], inputRange[range + 1], outputRange[range], outputRange[range + 1], easing, extrapolateLeft, extrapolateRight);\n  };\n}\nfunction interpolate(input, inputMin, inputMax, outputMin, outputMax, easing, extrapolateLeft, extrapolateRight) {\n  var result = input;\n\n  // Extrapolate\n  if (result < inputMin) {\n    if (extrapolateLeft === 'identity') {\n      return result;\n    } else if (extrapolateLeft === 'clamp') {\n      result = inputMin;\n    } else if (extrapolateLeft === 'extend') {\n      // noop\n    }\n  }\n  if (result > inputMax) {\n    if (extrapolateRight === 'identity') {\n      return result;\n    } else if (extrapolateRight === 'clamp') {\n      result = inputMax;\n    } else if (extrapolateRight === 'extend') {\n      // noop\n    }\n  }\n  if (outputMin === outputMax) {\n    return outputMin;\n  }\n  if (inputMin === inputMax) {\n    if (input <= inputMin) {\n      return outputMin;\n    }\n    return outputMax;\n  }\n\n  // Input Range\n  if (inputMin === -Infinity) {\n    result = -result;\n  } else if (inputMax === Infinity) {\n    result = result - inputMin;\n  } else {\n    result = (result - inputMin) / (inputMax - inputMin);\n  }\n\n  // Easing\n  result = easing(result);\n\n  // Output Range\n  if (outputMin === -Infinity) {\n    result = -result;\n  } else if (outputMax === Infinity) {\n    result = result + outputMin;\n  } else {\n    result = result * (outputMax - outputMin) + outputMin;\n  }\n  return result;\n}\nfunction colorToRgba(input) {\n  var normalizedColor = normalizeColor(input);\n  if (normalizedColor === null || typeof normalizedColor !== 'number') {\n    return input;\n  }\n  normalizedColor = normalizedColor || 0;\n  var r = (normalizedColor & 0xff000000) >>> 24;\n  var g = (normalizedColor & 0x00ff0000) >>> 16;\n  var b = (normalizedColor & 0x0000ff00) >>> 8;\n  var a = (normalizedColor & 0x000000ff) / 255;\n  return \"rgba(\" + r + \", \" + g + \", \" + b + \", \" + a + \")\";\n}\nvar stringShapeRegex = /[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+-]?\\d+)?/g;\n\n/**\n * Supports string shapes by extracting numbers so new values can be computed,\n * and recombines those values into new strings of the same shape.  Supports\n * things like:\n *\n *   rgba(123, 42, 99, 0.36) // colors\n *   -45deg                  // values with units\n */\nfunction createInterpolationFromStringOutputRange(config) {\n  var outputRange = config.outputRange;\n  invariant(outputRange.length >= 2, 'Bad output range');\n  outputRange = outputRange.map(colorToRgba);\n  checkPattern(outputRange);\n\n  // ['rgba(0, 100, 200, 0)', 'rgba(50, 150, 250, 0.5)']\n  // ->\n  // [\n  //   [0, 50],\n  //   [100, 150],\n  //   [200, 250],\n  //   [0, 0.5],\n  // ]\n  /* $FlowFixMe[incompatible-use] (>=0.18.0): `outputRange[0].match()` can\n   * return `null`. Need to guard against this possibility. */\n  var outputRanges = outputRange[0].match(stringShapeRegex).map(() => []);\n  outputRange.forEach(value => {\n    /* $FlowFixMe[incompatible-use] (>=0.18.0): `value.match()` can return\n     * `null`. Need to guard against this possibility. */\n    value.match(stringShapeRegex).forEach((number, i) => {\n      outputRanges[i].push(+number);\n    });\n  });\n  var interpolations = outputRange[0].match(stringShapeRegex)\n  /* $FlowFixMe[incompatible-use] (>=0.18.0): `outputRange[0].match()` can\n   * return `null`. Need to guard against this possibility. */\n  /* $FlowFixMe[incompatible-call] (>=0.18.0): `outputRange[0].match()` can\n   * return `null`. Need to guard against this possibility. */.map((value, i) => {\n    return createInterpolation(_objectSpread(_objectSpread({}, config), {}, {\n      outputRange: outputRanges[i]\n    }));\n  });\n\n  // rgba requires that the r,g,b are integers.... so we want to round them, but we *dont* want to\n  // round the opacity (4th column).\n  var shouldRound = isRgbOrRgba(outputRange[0]);\n  return input => {\n    var i = 0;\n    // 'rgba(0, 100, 200, 0)'\n    // ->\n    // 'rgba(${interpolations[0](input)}, ${interpolations[1](input)}, ...'\n    return outputRange[0].replace(stringShapeRegex, () => {\n      var val = +interpolations[i++](input);\n      if (shouldRound) {\n        val = i < 4 ? Math.round(val) : Math.round(val * 1000) / 1000;\n      }\n      return String(val);\n    });\n  };\n}\nfunction isRgbOrRgba(range) {\n  return typeof range === 'string' && range.startsWith('rgb');\n}\nfunction checkPattern(arr) {\n  var pattern = arr[0].replace(stringShapeRegex, '');\n  for (var i = 1; i < arr.length; ++i) {\n    invariant(pattern === arr[i].replace(stringShapeRegex, ''), 'invalid pattern ' + arr[0] + ' and ' + arr[i]);\n  }\n}\nfunction findRange(input, inputRange) {\n  var i;\n  for (i = 1; i < inputRange.length - 1; ++i) {\n    if (inputRange[i] >= input) {\n      break;\n    }\n  }\n  return i - 1;\n}\nfunction checkValidInputRange(arr) {\n  invariant(arr.length >= 2, 'inputRange must have at least 2 elements');\n  var message = 'inputRange must be monotonically non-decreasing ' + String(arr);\n  for (var i = 1; i < arr.length; ++i) {\n    invariant(arr[i] >= arr[i - 1], message);\n  }\n}\nfunction checkInfiniteRange(name, arr) {\n  invariant(arr.length >= 2, name + ' must have at least 2 elements');\n  invariant(arr.length !== 2 || arr[0] !== -Infinity || arr[1] !== Infinity,\n  /* $FlowFixMe[incompatible-type] (>=0.13.0) - In the addition expression\n   * below this comment, one or both of the operands may be something that\n   * doesn't cleanly convert to a string, like undefined, null, and object,\n   * etc. If you really mean this implicit string conversion, you can do\n   * something like String(myThing) */\n  name + 'cannot be ]-infinity;+infinity[ ' + arr);\n}\nclass AnimatedInterpolation extends AnimatedWithChildren {\n  // Export for testing.\n\n  constructor(parent, config) {\n    super();\n    this._parent = parent;\n    this._config = config;\n    this._interpolation = createInterpolation(config);\n  }\n  __makeNative(platformConfig) {\n    this._parent.__makeNative(platformConfig);\n    super.__makeNative(platformConfig);\n  }\n  __getValue() {\n    var parentValue = this._parent.__getValue();\n    invariant(typeof parentValue === 'number', 'Cannot interpolate an input which is not a number.');\n    return this._interpolation(parentValue);\n  }\n  interpolate(config) {\n    return new AnimatedInterpolation(this, config);\n  }\n  __attach() {\n    this._parent.__addChild(this);\n  }\n  __detach() {\n    this._parent.__removeChild(this);\n    super.__detach();\n  }\n  __transformDataType(range) {\n    return range.map(NativeAnimatedHelper.transformDataType);\n  }\n  __getNativeConfig() {\n    if (__DEV__) {\n      NativeAnimatedHelper.validateInterpolation(this._config);\n    }\n    return {\n      inputRange: this._config.inputRange,\n      // Only the `outputRange` can contain strings so we don't need to transform `inputRange` here\n      outputRange: this.__transformDataType(this._config.outputRange),\n      extrapolateLeft: this._config.extrapolateLeft || this._config.extrapolate || 'extend',\n      extrapolateRight: this._config.extrapolateRight || this._config.extrapolate || 'extend',\n      type: 'interpolation'\n    };\n  }\n}\nAnimatedInterpolation.__createInterpolation = createInterpolation;\nexport default AnimatedInterpolation;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport InteractionManager from '../../../../exports/InteractionManager';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nvar NativeAnimatedAPI = NativeAnimatedHelper.API;\n\n/**\n * Animated works by building a directed acyclic graph of dependencies\n * transparently when you render your Animated components.\n *\n *               new Animated.Value(0)\n *     .interpolate()        .interpolate()    new Animated.Value(1)\n *         opacity               translateY      scale\n *          style                         transform\n *         View#234                         style\n *                                         View#123\n *\n * A) Top Down phase\n * When an Animated.Value is updated, we recursively go down through this\n * graph in order to find leaf nodes: the views that we flag as needing\n * an update.\n *\n * B) Bottom Up phase\n * When a view is flagged as needing an update, we recursively go back up\n * in order to build the new value that it needs. The reason why we need\n * this two-phases process is to deal with composite props such as\n * transform which can receive values from multiple parents.\n */\nfunction _flush(rootNode) {\n  var animatedStyles = new Set();\n  function findAnimatedStyles(node) {\n    /* $FlowFixMe[prop-missing] (>=0.68.0 site=react_native_fb) This comment\n     * suppresses an error found when Flow v0.68 was deployed. To see the error\n     * delete this comment and run Flow. */\n    if (typeof node.update === 'function') {\n      animatedStyles.add(node);\n    } else {\n      node.__getChildren().forEach(findAnimatedStyles);\n    }\n  }\n  findAnimatedStyles(rootNode);\n  // $FlowFixMe[prop-missing]\n  animatedStyles.forEach(animatedStyle => animatedStyle.update());\n}\n\n/**\n * Some operations are executed only on batch end, which is _mostly_ scheduled when\n * Animated component props change. For some of the changes which require immediate execution\n * (e.g. setValue), we create a separate batch in case none is scheduled.\n */\nfunction _executeAsAnimatedBatch(id, operation) {\n  NativeAnimatedAPI.setWaitingForIdentifier(id);\n  operation();\n  NativeAnimatedAPI.unsetWaitingForIdentifier(id);\n}\n\n/**\n * Standard value for driving animations.  One `Animated.Value` can drive\n * multiple properties in a synchronized fashion, but can only be driven by one\n * mechanism at a time.  Using a new mechanism (e.g. starting a new animation,\n * or calling `setValue`) will stop any previous ones.\n *\n * See https://reactnative.dev/docs/animatedvalue\n */\nclass AnimatedValue extends AnimatedWithChildren {\n  constructor(value, config) {\n    super();\n    if (typeof value !== 'number') {\n      throw new Error('AnimatedValue: Attempting to set value to undefined');\n    }\n    this._startingValue = this._value = value;\n    this._offset = 0;\n    this._animation = null;\n    if (config && config.useNativeDriver) {\n      this.__makeNative();\n    }\n  }\n  __detach() {\n    if (this.__isNative) {\n      NativeAnimatedAPI.getValue(this.__getNativeTag(), value => {\n        this._value = value - this._offset;\n      });\n    }\n    this.stopAnimation();\n    super.__detach();\n  }\n  __getValue() {\n    return this._value + this._offset;\n  }\n\n  /**\n   * Directly set the value.  This will stop any animations running on the value\n   * and update all the bound properties.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#setvalue\n   */\n  setValue(value) {\n    if (this._animation) {\n      this._animation.stop();\n      this._animation = null;\n    }\n    this._updateValue(value, !this.__isNative /* don't perform a flush for natively driven values */);\n    if (this.__isNative) {\n      _executeAsAnimatedBatch(this.__getNativeTag().toString(), () => NativeAnimatedAPI.setAnimatedNodeValue(this.__getNativeTag(), value));\n    }\n  }\n\n  /**\n   * Sets an offset that is applied on top of whatever value is set, whether via\n   * `setValue`, an animation, or `Animated.event`.  Useful for compensating\n   * things like the start of a pan gesture.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#setoffset\n   */\n  setOffset(offset) {\n    this._offset = offset;\n    if (this.__isNative) {\n      NativeAnimatedAPI.setAnimatedNodeOffset(this.__getNativeTag(), offset);\n    }\n  }\n\n  /**\n   * Merges the offset value into the base value and resets the offset to zero.\n   * The final output of the value is unchanged.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#flattenoffset\n   */\n  flattenOffset() {\n    this._value += this._offset;\n    this._offset = 0;\n    if (this.__isNative) {\n      NativeAnimatedAPI.flattenAnimatedNodeOffset(this.__getNativeTag());\n    }\n  }\n\n  /**\n   * Sets the offset value to the base value, and resets the base value to zero.\n   * The final output of the value is unchanged.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#extractoffset\n   */\n  extractOffset() {\n    this._offset += this._value;\n    this._value = 0;\n    if (this.__isNative) {\n      NativeAnimatedAPI.extractAnimatedNodeOffset(this.__getNativeTag());\n    }\n  }\n\n  /**\n   * Stops any running animation or tracking. `callback` is invoked with the\n   * final value after stopping the animation, which is useful for updating\n   * state to match the animation position with layout.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#stopanimation\n   */\n  stopAnimation(callback) {\n    this.stopTracking();\n    this._animation && this._animation.stop();\n    this._animation = null;\n    if (callback) {\n      if (this.__isNative) {\n        NativeAnimatedAPI.getValue(this.__getNativeTag(), callback);\n      } else {\n        callback(this.__getValue());\n      }\n    }\n  }\n\n  /**\n   * Stops any animation and resets the value to its original.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#resetanimation\n   */\n  resetAnimation(callback) {\n    this.stopAnimation(callback);\n    this._value = this._startingValue;\n    if (this.__isNative) {\n      NativeAnimatedAPI.setAnimatedNodeValue(this.__getNativeTag(), this._startingValue);\n    }\n  }\n  __onAnimatedValueUpdateReceived(value) {\n    this._updateValue(value, false /*flush*/);\n  }\n\n  /**\n   * Interpolates the value before updating the property, e.g. mapping 0-1 to\n   * 0-10.\n   */\n  interpolate(config) {\n    return new AnimatedInterpolation(this, config);\n  }\n\n  /**\n   * Typically only used internally, but could be used by a custom Animation\n   * class.\n   *\n   * See https://reactnative.dev/docs/animatedvalue#animate\n   */\n  animate(animation, callback) {\n    var handle = null;\n    if (animation.__isInteraction) {\n      handle = InteractionManager.createInteractionHandle();\n    }\n    var previousAnimation = this._animation;\n    this._animation && this._animation.stop();\n    this._animation = animation;\n    animation.start(this._value, value => {\n      // Natively driven animations will never call into that callback\n      this._updateValue(value, true /* flush */);\n    }, result => {\n      this._animation = null;\n      if (handle !== null) {\n        InteractionManager.clearInteractionHandle(handle);\n      }\n      callback && callback(result);\n    }, previousAnimation, this);\n  }\n\n  /**\n   * Typically only used internally.\n   */\n  stopTracking() {\n    this._tracking && this._tracking.__detach();\n    this._tracking = null;\n  }\n\n  /**\n   * Typically only used internally.\n   */\n  track(tracking) {\n    this.stopTracking();\n    this._tracking = tracking;\n    // Make sure that the tracking animation starts executing\n    this._tracking && this._tracking.update();\n  }\n  _updateValue(value, flush) {\n    if (value === undefined) {\n      throw new Error('AnimatedValue: Attempting to set value to undefined');\n    }\n    this._value = value;\n    if (flush) {\n      _flush(this);\n    }\n    super.__callListeners(this.__getValue());\n  }\n  __getNativeConfig() {\n    return {\n      type: 'value',\n      value: this._value,\n      offset: this._offset\n    };\n  }\n}\nexport default AnimatedValue;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedValue from './nodes/AnimatedValue';\nimport NativeAnimatedHelper from './NativeAnimatedHelper';\nimport invariant from 'fbjs/lib/invariant';\nimport { shouldUseNativeDriver } from './NativeAnimatedHelper';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nexport function attachNativeEvent(viewRef, eventName, argMapping) {\n  // Find animated values in `argMapping` and create an array representing their\n  // key path inside the `nativeEvent` object. Ex.: ['contentOffset', 'x'].\n  var eventMappings = [];\n  var traverse = (value, path) => {\n    if (value instanceof AnimatedValue) {\n      value.__makeNative();\n      eventMappings.push({\n        nativeEventPath: path,\n        animatedValueTag: value.__getNativeTag()\n      });\n    } else if (typeof value === 'object') {\n      for (var _key in value) {\n        traverse(value[_key], path.concat(_key));\n      }\n    }\n  };\n  invariant(argMapping[0] && argMapping[0].nativeEvent, 'Native driven events only support animated values contained inside `nativeEvent`.');\n\n  // Assume that the event containing `nativeEvent` is always the first argument.\n  traverse(argMapping[0].nativeEvent, []);\n  if (viewRef != null) {\n    eventMappings.forEach(mapping => {\n      NativeAnimatedHelper.API.addAnimatedEventToView(viewRef, eventName, mapping);\n    });\n  }\n  return {\n    detach() {\n      if (viewRef != null) {\n        eventMappings.forEach(mapping => {\n          NativeAnimatedHelper.API.removeAnimatedEventFromView(viewRef, eventName,\n          // $FlowFixMe[incompatible-call]\n          mapping.animatedValueTag);\n        });\n      }\n    }\n  };\n}\nfunction validateMapping(argMapping, args) {\n  var validate = (recMapping, recEvt, key) => {\n    if (recMapping instanceof AnimatedValue) {\n      invariant(typeof recEvt === 'number', 'Bad mapping of event key ' + key + ', should be number but got ' + typeof recEvt);\n      return;\n    }\n    if (typeof recEvt === 'number') {\n      invariant(recMapping instanceof AnimatedValue, 'Bad mapping of type ' + typeof recMapping + ' for key ' + key + ', event value must map to AnimatedValue');\n      return;\n    }\n    invariant(typeof recMapping === 'object', 'Bad mapping of type ' + typeof recMapping + ' for key ' + key);\n    invariant(typeof recEvt === 'object', 'Bad event of type ' + typeof recEvt + ' for key ' + key);\n    for (var mappingKey in recMapping) {\n      validate(recMapping[mappingKey], recEvt[mappingKey], mappingKey);\n    }\n  };\n  invariant(args.length >= argMapping.length, 'Event has less arguments than mapping');\n  argMapping.forEach((mapping, idx) => {\n    validate(mapping, args[idx], 'arg' + idx);\n  });\n}\nexport class AnimatedEvent {\n  constructor(argMapping, config) {\n    this._listeners = [];\n    this._argMapping = argMapping;\n    if (config == null) {\n      console.warn('Animated.event now requires a second argument for options');\n      config = {\n        useNativeDriver: false\n      };\n    }\n    if (config.listener) {\n      this.__addListener(config.listener);\n    }\n    this._callListeners = this._callListeners.bind(this);\n    this._attachedEvent = null;\n    this.__isNative = shouldUseNativeDriver(config);\n  }\n  __addListener(callback) {\n    this._listeners.push(callback);\n  }\n  __removeListener(callback) {\n    this._listeners = this._listeners.filter(listener => listener !== callback);\n  }\n  __attach(viewRef, eventName) {\n    invariant(this.__isNative, 'Only native driven events need to be attached.');\n    this._attachedEvent = attachNativeEvent(viewRef, eventName, this._argMapping);\n  }\n  __detach(viewTag, eventName) {\n    invariant(this.__isNative, 'Only native driven events need to be detached.');\n    this._attachedEvent && this._attachedEvent.detach();\n  }\n  __getHandler() {\n    var _this = this;\n    if (this.__isNative) {\n      if (__DEV__) {\n        var _validatedMapping = false;\n        return function () {\n          for (var _len = arguments.length, args = new Array(_len), _key2 = 0; _key2 < _len; _key2++) {\n            args[_key2] = arguments[_key2];\n          }\n          if (!_validatedMapping) {\n            validateMapping(_this._argMapping, args);\n            _validatedMapping = true;\n          }\n          _this._callListeners(...args);\n        };\n      } else {\n        return this._callListeners;\n      }\n    }\n    var validatedMapping = false;\n    return function () {\n      for (var _len2 = arguments.length, args = new Array(_len2), _key3 = 0; _key3 < _len2; _key3++) {\n        args[_key3] = arguments[_key3];\n      }\n      if (__DEV__ && !validatedMapping) {\n        validateMapping(_this._argMapping, args);\n        validatedMapping = true;\n      }\n      var traverse = (recMapping, recEvt, key) => {\n        if (recMapping instanceof AnimatedValue) {\n          if (typeof recEvt === 'number') {\n            recMapping.setValue(recEvt);\n          }\n        } else if (typeof recMapping === 'object') {\n          for (var mappingKey in recMapping) {\n            /* $FlowFixMe(>=0.120.0) This comment suppresses an error found\n             * when Flow v0.120 was deployed. To see the error, delete this\n             * comment and run Flow. */\n            traverse(recMapping[mappingKey], recEvt[mappingKey], mappingKey);\n          }\n        }\n      };\n      _this._argMapping.forEach((mapping, idx) => {\n        traverse(mapping, args[idx], 'arg' + idx);\n      });\n      _this._callListeners(...args);\n    };\n  }\n  _callListeners() {\n    for (var _len3 = arguments.length, args = new Array(_len3), _key4 = 0; _key4 < _len3; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n    this._listeners.forEach(listener => listener(...args));\n  }\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedNode from './AnimatedNode';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nclass AnimatedTransform extends AnimatedWithChildren {\n  constructor(transforms) {\n    super();\n    this._transforms = transforms;\n  }\n  __makeNative() {\n    this._transforms.forEach(transform => {\n      for (var key in transform) {\n        var value = transform[key];\n        if (value instanceof AnimatedNode) {\n          value.__makeNative();\n        }\n      }\n    });\n    super.__makeNative();\n  }\n  __getValue() {\n    return this._transforms.map(transform => {\n      var result = {};\n      for (var key in transform) {\n        var value = transform[key];\n        if (value instanceof AnimatedNode) {\n          result[key] = value.__getValue();\n        } else {\n          result[key] = value;\n        }\n      }\n      return result;\n    });\n  }\n  __getAnimatedValue() {\n    return this._transforms.map(transform => {\n      var result = {};\n      for (var key in transform) {\n        var value = transform[key];\n        if (value instanceof AnimatedNode) {\n          result[key] = value.__getAnimatedValue();\n        } else {\n          // All transform components needed to recompose matrix\n          result[key] = value;\n        }\n      }\n      return result;\n    });\n  }\n  __attach() {\n    this._transforms.forEach(transform => {\n      for (var key in transform) {\n        var value = transform[key];\n        if (value instanceof AnimatedNode) {\n          value.__addChild(this);\n        }\n      }\n    });\n  }\n  __detach() {\n    this._transforms.forEach(transform => {\n      for (var key in transform) {\n        var value = transform[key];\n        if (value instanceof AnimatedNode) {\n          value.__removeChild(this);\n        }\n      }\n    });\n    super.__detach();\n  }\n  __getNativeConfig() {\n    var transConfigs = [];\n    this._transforms.forEach(transform => {\n      for (var key in transform) {\n        var value = transform[key];\n        if (value instanceof AnimatedNode) {\n          transConfigs.push({\n            type: 'animated',\n            property: key,\n            nodeTag: value.__getNativeTag()\n          });\n        } else {\n          transConfigs.push({\n            type: 'static',\n            property: key,\n            value: NativeAnimatedHelper.transformDataType(value)\n          });\n        }\n      }\n    });\n    NativeAnimatedHelper.validateTransform(transConfigs);\n    return {\n      type: 'transform',\n      transforms: transConfigs\n    };\n  }\n}\nexport default AnimatedTransform;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedNode from './AnimatedNode';\nimport AnimatedTransform from './AnimatedTransform';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nimport StyleSheet from '../../../../exports/StyleSheet';\nvar flattenStyle = StyleSheet.flatten;\nfunction createAnimatedStyle(inputStyle) {\n  var style = flattenStyle(inputStyle);\n  var animatedStyles = {};\n  for (var key in style) {\n    var value = style[key];\n    if (key === 'transform' && Array.isArray(value)) {\n      animatedStyles[key] = new AnimatedTransform(value);\n    } else if (value instanceof AnimatedNode) {\n      animatedStyles[key] = value;\n    } else if (value && !Array.isArray(value) && typeof value === 'object') {\n      animatedStyles[key] = createAnimatedStyle(value);\n    }\n  }\n  return animatedStyles;\n}\nclass AnimatedStyle extends AnimatedWithChildren {\n  constructor(style) {\n    super();\n    this._inputStyle = style;\n    this._style = createAnimatedStyle(style);\n  }\n\n  // Recursively get values for nested styles (like iOS's shadowOffset)\n  _walkStyleAndGetValues(style) {\n    var updatedStyle = {};\n    for (var key in style) {\n      var value = style[key];\n      if (value instanceof AnimatedNode) {\n        if (!value.__isNative) {\n          // We cannot use value of natively driven nodes this way as the value we have access from\n          // JS may not be up to date.\n          updatedStyle[key] = value.__getValue();\n        }\n      } else if (value && !Array.isArray(value) && typeof value === 'object') {\n        // Support animating nested values (for example: shadowOffset.height)\n        updatedStyle[key] = this._walkStyleAndGetValues(value);\n      } else {\n        updatedStyle[key] = value;\n      }\n    }\n    return updatedStyle;\n  }\n  __getValue() {\n    return [this._inputStyle, this._walkStyleAndGetValues(this._style)];\n  }\n\n  // Recursively get animated values for nested styles (like iOS's shadowOffset)\n  _walkStyleAndGetAnimatedValues(style) {\n    var updatedStyle = {};\n    for (var key in style) {\n      var value = style[key];\n      if (value instanceof AnimatedNode) {\n        updatedStyle[key] = value.__getAnimatedValue();\n      } else if (value && !Array.isArray(value) && typeof value === 'object') {\n        // Support animating nested values (for example: shadowOffset.height)\n        updatedStyle[key] = this._walkStyleAndGetAnimatedValues(value);\n      }\n    }\n    return updatedStyle;\n  }\n  __getAnimatedValue() {\n    return this._walkStyleAndGetAnimatedValues(this._style);\n  }\n  __attach() {\n    for (var key in this._style) {\n      var value = this._style[key];\n      if (value instanceof AnimatedNode) {\n        value.__addChild(this);\n      }\n    }\n  }\n  __detach() {\n    for (var key in this._style) {\n      var value = this._style[key];\n      if (value instanceof AnimatedNode) {\n        value.__removeChild(this);\n      }\n    }\n    super.__detach();\n  }\n  __makeNative() {\n    for (var key in this._style) {\n      var value = this._style[key];\n      if (value instanceof AnimatedNode) {\n        value.__makeNative();\n      }\n    }\n    super.__makeNative();\n  }\n  __getNativeConfig() {\n    var styleConfig = {};\n    for (var styleKey in this._style) {\n      if (this._style[styleKey] instanceof AnimatedNode) {\n        var style = this._style[styleKey];\n        style.__makeNative();\n        styleConfig[styleKey] = style.__getNativeTag();\n      }\n    }\n    NativeAnimatedHelper.validateStyles(styleConfig);\n    return {\n      type: 'style',\n      style: styleConfig\n    };\n  }\n}\nexport default AnimatedStyle;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport { AnimatedEvent } from '../AnimatedEvent';\nimport AnimatedNode from './AnimatedNode';\nimport AnimatedStyle from './AnimatedStyle';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nimport invariant from 'fbjs/lib/invariant';\nclass AnimatedProps extends AnimatedNode {\n  constructor(props, callback) {\n    super();\n    if (props.style) {\n      props = _objectSpread(_objectSpread({}, props), {}, {\n        style: new AnimatedStyle(props.style)\n      });\n    }\n    this._props = props;\n    this._callback = callback;\n  }\n  __getValue() {\n    var props = {};\n    for (var key in this._props) {\n      var value = this._props[key];\n      if (value instanceof AnimatedNode) {\n        if (!value.__isNative || value instanceof AnimatedStyle) {\n          // We cannot use value of natively driven nodes this way as the value we have access from\n          // JS may not be up to date.\n          props[key] = value.__getValue();\n        }\n      } else if (value instanceof AnimatedEvent) {\n        props[key] = value.__getHandler();\n      } else {\n        props[key] = value;\n      }\n    }\n    return props;\n  }\n  __getAnimatedValue() {\n    var props = {};\n    for (var key in this._props) {\n      var value = this._props[key];\n      if (value instanceof AnimatedNode) {\n        props[key] = value.__getAnimatedValue();\n      }\n    }\n    return props;\n  }\n  __attach() {\n    for (var key in this._props) {\n      var value = this._props[key];\n      if (value instanceof AnimatedNode) {\n        value.__addChild(this);\n      }\n    }\n  }\n  __detach() {\n    if (this.__isNative && this._animatedView) {\n      this.__disconnectAnimatedView();\n    }\n    this._animatedView = null;\n    for (var key in this._props) {\n      var value = this._props[key];\n      if (value instanceof AnimatedNode) {\n        value.__removeChild(this);\n      }\n    }\n    super.__detach();\n  }\n  update() {\n    this._callback();\n  }\n  __makeNative() {\n    if (!this.__isNative) {\n      this.__isNative = true;\n      for (var key in this._props) {\n        var value = this._props[key];\n        if (value instanceof AnimatedNode) {\n          value.__makeNative();\n        }\n      }\n      if (this._animatedView) {\n        this.__connectAnimatedView();\n      }\n    }\n  }\n  setNativeView(animatedView) {\n    if (this._animatedView === animatedView) {\n      return;\n    }\n    this._animatedView = animatedView;\n    if (this.__isNative) {\n      this.__connectAnimatedView();\n    }\n  }\n  __connectAnimatedView() {\n    invariant(this.__isNative, 'Expected node to be marked as \"native\"');\n    var nativeViewTag = this._animatedView;\n    invariant(nativeViewTag != null, 'Unable to locate attached view in the native tree');\n    NativeAnimatedHelper.API.connectAnimatedNodeToView(this.__getNativeTag(), nativeViewTag);\n  }\n  __disconnectAnimatedView() {\n    invariant(this.__isNative, 'Expected node to be marked as \"native\"');\n    var nativeViewTag = this._animatedView;\n    invariant(nativeViewTag != null, 'Unable to locate attached view in the native tree');\n    NativeAnimatedHelper.API.disconnectAnimatedNodeFromView(this.__getNativeTag(), nativeViewTag);\n  }\n  __restoreDefaultValues() {\n    // When using the native driver, view properties need to be restored to\n    // their default values manually since react no longer tracks them. This\n    // is needed to handle cases where a prop driven by native animated is removed\n    // after having been changed natively by an animation.\n    if (this.__isNative) {\n      NativeAnimatedHelper.API.restoreDefaultValues(this.__getNativeTag());\n    }\n  }\n  __getNativeConfig() {\n    var propsConfig = {};\n    for (var propKey in this._props) {\n      var value = this._props[propKey];\n      if (value instanceof AnimatedNode) {\n        value.__makeNative();\n        propsConfig[propKey] = value.__getNativeTag();\n      }\n    }\n    return {\n      type: 'props',\n      props: propsConfig\n    };\n  }\n}\nexport default AnimatedProps;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport AnimatedProps from './nodes/AnimatedProps';\nimport { AnimatedEvent } from './AnimatedEvent';\nimport useRefEffect from '../Utilities/useRefEffect';\nimport NativeAnimatedHelper from './NativeAnimatedHelper';\nimport { useCallback, useEffect, useMemo, useReducer, useRef } from 'react';\nimport useLayoutEffect from '../../../modules/useLayoutEffect';\nexport default function useAnimatedProps(props) {\n  var _useReducer = useReducer(count => count + 1, 0),\n    scheduleUpdate = _useReducer[1];\n  var onUpdateRef = useRef(null);\n\n  // TODO: Only invalidate `node` if animated props or `style` change. In the\n  // previous implementation, we permitted `style` to override props with the\n  // same name property name as styles, so we can probably continue doing that.\n  // The ordering of other props *should* not matter.\n  var node = useMemo(() => new AnimatedProps(props, () => onUpdateRef.current == null ? void 0 : onUpdateRef.current()), [props]);\n  useAnimatedPropsLifecycle(node);\n\n  // TODO: This \"effect\" does three things:\n  //\n  //   1) Call `setNativeView`.\n  //   2) Update `onUpdateRef`.\n  //   3) Update listeners for `AnimatedEvent` props.\n  //\n  // Ideally, each of these would be separat \"effects\" so that they are not\n  // unnecessarily re-run when irrelevant dependencies change. For example, we\n  // should be able to hoist all `AnimatedEvent` props and only do #3 if either\n  // the `AnimatedEvent` props change or `instance` changes.\n  //\n  // But there is no way to transparently compose three separate callback refs,\n  // so we just combine them all into one for now.\n  var refEffect = useCallback(instance => {\n    // NOTE: This may be called more often than necessary (e.g. when `props`\n    // changes), but `setNativeView` already optimizes for that.\n    node.setNativeView(instance);\n\n    // NOTE: This callback is only used by the JavaScript animation driver.\n    onUpdateRef.current = () => {\n      // Schedule an update for this component to update `reducedProps`,\n      // but do not compute it immediately. If a parent also updated, we\n      // need to merge those new props in before updating.\n      scheduleUpdate();\n    };\n    var target = getEventTarget(instance);\n    var events = [];\n    for (var propName in props) {\n      var propValue = props[propName];\n      if (propValue instanceof AnimatedEvent && propValue.__isNative) {\n        propValue.__attach(target, propName);\n        events.push([propName, propValue]);\n      }\n    }\n    return () => {\n      onUpdateRef.current = null;\n      for (var _i = 0, _events = events; _i < _events.length; _i++) {\n        var _events$_i = _events[_i],\n          _propName = _events$_i[0],\n          _propValue = _events$_i[1];\n        _propValue.__detach(target, _propName);\n      }\n    };\n  }, [props, node]);\n  var callbackRef = useRefEffect(refEffect);\n  return [reduceAnimatedProps(node), callbackRef];\n}\nfunction reduceAnimatedProps(node) {\n  // Force `collapsable` to be false so that the native view is not flattened.\n  // Flattened views cannot be accurately referenced by the native driver.\n  return _objectSpread(_objectSpread({}, node.__getValue()), {}, {\n    collapsable: false\n  });\n}\n\n/**\n * Manages the lifecycle of the supplied `AnimatedProps` by invoking `__attach`\n * and `__detach`. However, this is more complicated because `AnimatedProps`\n * uses reference counting to determine when to recursively detach its children\n * nodes. So in order to optimize this, we avoid detaching until the next attach\n * unless we are unmounting.\n */\nfunction useAnimatedPropsLifecycle(node) {\n  var prevNodeRef = useRef(null);\n  var isUnmountingRef = useRef(false);\n  useEffect(() => {\n    // It is ok for multiple components to call `flushQueue` because it noops\n    // if the queue is empty. When multiple animated components are mounted at\n    // the same time. Only first component flushes the queue and the others will noop.\n    NativeAnimatedHelper.API.flushQueue();\n  });\n  useLayoutEffect(() => {\n    isUnmountingRef.current = false;\n    return () => {\n      isUnmountingRef.current = true;\n    };\n  }, []);\n  useLayoutEffect(() => {\n    node.__attach();\n    if (prevNodeRef.current != null) {\n      var prevNode = prevNodeRef.current;\n      // TODO: Stop restoring default values (unless `reset` is called).\n      prevNode.__restoreDefaultValues();\n      prevNode.__detach();\n      prevNodeRef.current = null;\n    }\n    return () => {\n      if (isUnmountingRef.current) {\n        // NOTE: Do not restore default values on unmount, see D18197735.\n        node.__detach();\n      } else {\n        prevNodeRef.current = node;\n      }\n    };\n  }, [node]);\n}\nfunction getEventTarget(instance) {\n  return typeof instance === 'object' && typeof (instance == null ? void 0 : instance.getScrollableNode) === 'function' ?\n  // $FlowFixMe[incompatible-use] - Legacy instance assumptions.\n  instance.getScrollableNode() : instance;\n}\n\n// $FlowFixMe[unclear-type] - Legacy instance assumptions.\nfunction isFabricInstance(instance) {\n  var _instance$getScrollRe;\n  return hasFabricHandle(instance) ||\n  // Some components have a setNativeProps function but aren't a host component\n  // such as lists like FlatList and SectionList. These should also use\n  // forceUpdate in Fabric since setNativeProps doesn't exist on the underlying\n  // host component. This crazy hack is essentially special casing those lists and\n  // ScrollView itself to use forceUpdate in Fabric.\n  // If these components end up using forwardRef then these hacks can go away\n  // as instance would actually be the underlying host component and the above check\n  // would be sufficient.\n  hasFabricHandle(instance == null ? void 0 : instance.getNativeScrollRef == null ? void 0 : instance.getNativeScrollRef()) || hasFabricHandle(instance == null ? void 0 : instance.getScrollResponder == null ? void 0 : (_instance$getScrollRe = instance.getScrollResponder()) == null ? void 0 : _instance$getScrollRe.getNativeScrollRef == null ? void 0 : _instance$getScrollRe.getNativeScrollRef());\n}\n\n// $FlowFixMe[unclear-type] - Legacy instance assumptions.\nfunction hasFabricHandle(instance) {\n  var _instance$_internalIn, _instance$_internalIn2;\n  // eslint-disable-next-line dot-notation\n  return (instance == null ? void 0 : (_instance$_internalIn = instance['_internalInstanceHandle']) == null ? void 0 : (_instance$_internalIn2 = _instance$_internalIn.stateNode) == null ? void 0 : _instance$_internalIn2.canonical) != null;\n}","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"style\"];\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport useAnimatedProps from './useAnimatedProps';\nimport useMergeRefs from '../Utilities/useMergeRefs';\nimport StyleSheet from '../../../exports/StyleSheet';\nimport View from '../../../exports/View';\nimport * as React from 'react';\n/**\n * Experimental implementation of `createAnimatedComponent` that is intended to\n * be compatible with concurrent rendering.\n */\nexport default function createAnimatedComponent(Component) {\n  return /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n    var _useAnimatedProps = useAnimatedProps(props),\n      reducedProps = _useAnimatedProps[0],\n      callbackRef = _useAnimatedProps[1];\n    var ref = useMergeRefs(callbackRef, forwardedRef);\n\n    // Some components require explicit passthrough values for animation\n    // to work properly. For example, if an animated component is\n    // transformed and Pressable, onPress will not work after transform\n    // without these passthrough values.\n    // $FlowFixMe[prop-missing]\n    var passthroughAnimatedPropExplicitValues = reducedProps.passthroughAnimatedPropExplicitValues,\n      style = reducedProps.style;\n    var _ref = passthroughAnimatedPropExplicitValues !== null && passthroughAnimatedPropExplicitValues !== void 0 ? passthroughAnimatedPropExplicitValues : {},\n      passthroughStyle = _ref.style,\n      passthroughProps = _objectWithoutPropertiesLoose(_ref, _excluded);\n    var mergedStyle = [style, passthroughStyle];\n    return /*#__PURE__*/React.createElement(Component, _extends({}, reducedProps, passthroughProps, {\n      style: mergedStyle,\n      ref: ref\n    }));\n  });\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport { useCallback, useRef } from 'react';\n/**\n * Constructs a callback ref that provides similar semantics as `useEffect`. The\n * supplied `effect` callback will be called with non-null component instances.\n * The `effect` callback can also optionally return a cleanup function.\n *\n * When a component is updated or unmounted, the cleanup function is called. The\n * `effect` callback will then be called again, if applicable.\n *\n * When a new `effect` callback is supplied, the previously returned cleanup\n * function will be called before the new `effect` callback is called with the\n * same instance.\n *\n * WARNING: The `effect` callback should be stable (e.g. using `useCallback`).\n */\nexport default function useRefEffect(effect) {\n  var cleanupRef = useRef(undefined);\n  return useCallback(instance => {\n    if (cleanupRef.current) {\n      cleanupRef.current();\n      cleanupRef.current = undefined;\n    }\n    if (instance != null) {\n      cleanupRef.current = effect(instance);\n    }\n  }, [effect]);\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport { useCallback } from 'react';\n/**\n * Constructs a new ref that forwards new values to each of the given refs. The\n * given refs will always be invoked in the order that they are supplied.\n *\n * WARNING: A known problem of merging refs using this approach is that if any\n * of the given refs change, the returned callback ref will also be changed. If\n * the returned callback ref is supplied as a `ref` to a React element, this may\n * lead to problems with the given refs being invoked more times than desired.\n */\nexport default function useMergeRefs() {\n  for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {\n    refs[_key] = arguments[_key];\n  }\n  return useCallback(current => {\n    for (var _i = 0, _refs = refs; _i < _refs.length; _i++) {\n      var ref = _refs[_i];\n      if (ref != null) {\n        if (typeof ref === 'function') {\n          ref(current);\n        } else {\n          ref.current = current;\n        }\n      }\n    }\n  }, [...refs] // eslint-disable-line react-hooks/exhaustive-deps\n  );\n}","import _extends from \"@babel/runtime/helpers/extends\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport FlatList from '../../../../exports/FlatList';\nimport createAnimatedComponent from '../createAnimatedComponent';\n/**\n * @see https://github.com/facebook/react-native/commit/b8c8562\n */\nvar FlatListWithEventThrottle = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(FlatList, _extends({\n  scrollEventThrottle: 0.0001\n}, props, {\n  ref: ref\n})));\nexport default createAnimatedComponent(FlatListWithEventThrottle);","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport Image from '../../../../exports/Image';\nimport createAnimatedComponent from '../createAnimatedComponent';\nexport default createAnimatedComponent(Image);","import _extends from \"@babel/runtime/helpers/extends\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport ScrollView from '../../../../exports/ScrollView';\nimport createAnimatedComponent from '../createAnimatedComponent';\n/**\n * @see https://github.com/facebook/react-native/commit/b8c8562\n */\nvar ScrollViewWithEventThrottle = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(ScrollView, _extends({\n  scrollEventThrottle: 0.0001\n}, props, {\n  ref: ref\n})));\nexport default createAnimatedComponent(ScrollViewWithEventThrottle);","import _extends from \"@babel/runtime/helpers/extends\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport SectionList from '../../../../exports/SectionList';\nimport createAnimatedComponent from '../createAnimatedComponent';\n/**\n * @see https://github.com/facebook/react-native/commit/b8c8562\n */\nvar SectionListWithEventThrottle = /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(SectionList, _extends({\n  scrollEventThrottle: 0.0001\n}, props, {\n  ref: ref\n})));\nexport default createAnimatedComponent(SectionListWithEventThrottle);","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport Text from '../../../../exports/Text';\nimport createAnimatedComponent from '../createAnimatedComponent';\nexport default createAnimatedComponent(Text);","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport * as React from 'react';\nimport View from '../../../../exports/View';\nimport createAnimatedComponent from '../createAnimatedComponent';\nexport default createAnimatedComponent(View);","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedAddition extends AnimatedWithChildren {\n  constructor(a, b) {\n    super();\n    this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n    this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n  }\n  __makeNative(platformConfig) {\n    this._a.__makeNative(platformConfig);\n    this._b.__makeNative(platformConfig);\n    super.__makeNative(platformConfig);\n  }\n  __getValue() {\n    return this._a.__getValue() + this._b.__getValue();\n  }\n  interpolate(config) {\n    return new AnimatedInterpolation(this, config);\n  }\n  __attach() {\n    this._a.__addChild(this);\n    this._b.__addChild(this);\n  }\n  __detach() {\n    this._a.__removeChild(this);\n    this._b.__removeChild(this);\n    super.__detach();\n  }\n  __getNativeConfig() {\n    return {\n      type: 'addition',\n      input: [this._a.__getNativeTag(), this._b.__getNativeTag()]\n    };\n  }\n}\nexport default AnimatedAddition;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedDiffClamp extends AnimatedWithChildren {\n  constructor(a, min, max) {\n    super();\n    this._a = a;\n    this._min = min;\n    this._max = max;\n    this._value = this._lastValue = this._a.__getValue();\n  }\n  __makeNative(platformConfig) {\n    this._a.__makeNative(platformConfig);\n    super.__makeNative(platformConfig);\n  }\n  interpolate(config) {\n    return new AnimatedInterpolation(this, config);\n  }\n  __getValue() {\n    var value = this._a.__getValue();\n    var diff = value - this._lastValue;\n    this._lastValue = value;\n    this._value = Math.min(Math.max(this._value + diff, this._min), this._max);\n    return this._value;\n  }\n  __attach() {\n    this._a.__addChild(this);\n  }\n  __detach() {\n    this._a.__removeChild(this);\n    super.__detach();\n  }\n  __getNativeConfig() {\n    return {\n      type: 'diffclamp',\n      input: this._a.__getNativeTag(),\n      min: this._min,\n      max: this._max\n    };\n  }\n}\nexport default AnimatedDiffClamp;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedNode from './AnimatedNode';\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedDivision extends AnimatedWithChildren {\n  constructor(a, b) {\n    super();\n    this._warnedAboutDivideByZero = false;\n    if (b === 0 || b instanceof AnimatedNode && b.__getValue() === 0) {\n      console.error('Detected potential division by zero in AnimatedDivision');\n    }\n    this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n    this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n  }\n  __makeNative(platformConfig) {\n    this._a.__makeNative(platformConfig);\n    this._b.__makeNative(platformConfig);\n    super.__makeNative(platformConfig);\n  }\n  __getValue() {\n    var a = this._a.__getValue();\n    var b = this._b.__getValue();\n    if (b === 0) {\n      // Prevent spamming the console/LogBox\n      if (!this._warnedAboutDivideByZero) {\n        console.error('Detected division by zero in AnimatedDivision');\n        this._warnedAboutDivideByZero = true;\n      }\n      // Passing infinity/NaN to Fabric will cause a native crash\n      return 0;\n    }\n    this._warnedAboutDivideByZero = false;\n    return a / b;\n  }\n  interpolate(config) {\n    return new AnimatedInterpolation(this, config);\n  }\n  __attach() {\n    this._a.__addChild(this);\n    this._b.__addChild(this);\n  }\n  __detach() {\n    this._a.__removeChild(this);\n    this._b.__removeChild(this);\n    super.__detach();\n  }\n  __getNativeConfig() {\n    return {\n      type: 'division',\n      input: [this._a.__getNativeTag(), this._b.__getNativeTag()]\n    };\n  }\n}\nexport default AnimatedDivision;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedModulo extends AnimatedWithChildren {\n  constructor(a, modulus) {\n    super();\n    this._a = a;\n    this._modulus = modulus;\n  }\n  __makeNative(platformConfig) {\n    this._a.__makeNative(platformConfig);\n    super.__makeNative(platformConfig);\n  }\n  __getValue() {\n    return (this._a.__getValue() % this._modulus + this._modulus) % this._modulus;\n  }\n  interpolate(config) {\n    return new AnimatedInterpolation(this, config);\n  }\n  __attach() {\n    this._a.__addChild(this);\n  }\n  __detach() {\n    this._a.__removeChild(this);\n    super.__detach();\n  }\n  __getNativeConfig() {\n    return {\n      type: 'modulus',\n      input: this._a.__getNativeTag(),\n      modulus: this._modulus\n    };\n  }\n}\nexport default AnimatedModulo;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedMultiplication extends AnimatedWithChildren {\n  constructor(a, b) {\n    super();\n    this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n    this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n  }\n  __makeNative(platformConfig) {\n    this._a.__makeNative(platformConfig);\n    this._b.__makeNative(platformConfig);\n    super.__makeNative(platformConfig);\n  }\n  __getValue() {\n    return this._a.__getValue() * this._b.__getValue();\n  }\n  interpolate(config) {\n    return new AnimatedInterpolation(this, config);\n  }\n  __attach() {\n    this._a.__addChild(this);\n    this._b.__addChild(this);\n  }\n  __detach() {\n    this._a.__removeChild(this);\n    this._b.__removeChild(this);\n    super.__detach();\n  }\n  __getNativeConfig() {\n    return {\n      type: 'multiplication',\n      input: [this._a.__getNativeTag(), this._b.__getNativeTag()]\n    };\n  }\n}\nexport default AnimatedMultiplication;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedInterpolation from './AnimatedInterpolation';\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nclass AnimatedSubtraction extends AnimatedWithChildren {\n  constructor(a, b) {\n    super();\n    this._a = typeof a === 'number' ? new AnimatedValue(a) : a;\n    this._b = typeof b === 'number' ? new AnimatedValue(b) : b;\n  }\n  __makeNative(platformConfig) {\n    this._a.__makeNative(platformConfig);\n    this._b.__makeNative(platformConfig);\n    super.__makeNative(platformConfig);\n  }\n  __getValue() {\n    return this._a.__getValue() - this._b.__getValue();\n  }\n  interpolate(config) {\n    return new AnimatedInterpolation(this, config);\n  }\n  __attach() {\n    this._a.__addChild(this);\n    this._b.__addChild(this);\n  }\n  __detach() {\n    this._a.__removeChild(this);\n    this._b.__removeChild(this);\n    super.__detach();\n  }\n  __getNativeConfig() {\n    return {\n      type: 'subtraction',\n      input: [this._a.__getNativeTag(), this._b.__getNativeTag()]\n    };\n  }\n}\nexport default AnimatedSubtraction;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedNode from './AnimatedNode';\nimport { generateNewAnimationId, shouldUseNativeDriver } from '../NativeAnimatedHelper';\nclass AnimatedTracking extends AnimatedNode {\n  constructor(value, parent, animationClass, animationConfig, callback) {\n    super();\n    this._value = value;\n    this._parent = parent;\n    this._animationClass = animationClass;\n    this._animationConfig = animationConfig;\n    this._useNativeDriver = shouldUseNativeDriver(animationConfig);\n    this._callback = callback;\n    this.__attach();\n  }\n  __makeNative() {\n    this.__isNative = true;\n    this._parent.__makeNative();\n    super.__makeNative();\n    this._value.__makeNative();\n  }\n  __getValue() {\n    return this._parent.__getValue();\n  }\n  __attach() {\n    this._parent.__addChild(this);\n    if (this._useNativeDriver) {\n      // when the tracking starts we need to convert this node to a \"native node\"\n      // so that the parent node will be made \"native\" too. This is necessary as\n      // if we don't do this `update` method will get called. At that point it\n      // may be too late as it would mean the JS driver has already started\n      // updating node values\n      this.__makeNative();\n    }\n  }\n  __detach() {\n    this._parent.__removeChild(this);\n    super.__detach();\n  }\n  update() {\n    this._value.animate(new this._animationClass(_objectSpread(_objectSpread({}, this._animationConfig), {}, {\n      toValue: this._animationConfig.toValue.__getValue()\n    })), this._callback);\n  }\n  __getNativeConfig() {\n    var animation = new this._animationClass(_objectSpread(_objectSpread({}, this._animationConfig), {}, {\n      // remove toValue from the config as it's a ref to Animated.Value\n      toValue: undefined\n    }));\n    var animationConfig = animation.__getNativeAnimationConfig();\n    return {\n      type: 'tracking',\n      animationId: generateNewAnimationId(),\n      animationConfig,\n      toValue: this._parent.__getNativeTag(),\n      value: this._value.__getNativeTag()\n    };\n  }\n}\nexport default AnimatedTracking;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport invariant from 'fbjs/lib/invariant';\nvar _uniqueId = 1;\n\n/**\n * 2D Value for driving 2D animations, such as pan gestures. Almost identical\n * API to normal `Animated.Value`, but multiplexed.\n *\n * See https://reactnative.dev/docs/animatedvaluexy.html\n */\nclass AnimatedValueXY extends AnimatedWithChildren {\n  constructor(valueIn) {\n    super();\n    var value = valueIn || {\n      x: 0,\n      y: 0\n    }; // fixme: shouldn't need `: any`\n    if (typeof value.x === 'number' && typeof value.y === 'number') {\n      this.x = new AnimatedValue(value.x);\n      this.y = new AnimatedValue(value.y);\n    } else {\n      invariant(value.x instanceof AnimatedValue && value.y instanceof AnimatedValue, 'AnimatedValueXY must be initialized with an object of numbers or ' + 'AnimatedValues.');\n      this.x = value.x;\n      this.y = value.y;\n    }\n    this._listeners = {};\n  }\n\n  /**\n   * Directly set the value. This will stop any animations running on the value\n   * and update all the bound properties.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#setvalue\n   */\n  setValue(value) {\n    this.x.setValue(value.x);\n    this.y.setValue(value.y);\n  }\n\n  /**\n   * Sets an offset that is applied on top of whatever value is set, whether\n   * via `setValue`, an animation, or `Animated.event`. Useful for compensating\n   * things like the start of a pan gesture.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#setoffset\n   */\n  setOffset(offset) {\n    this.x.setOffset(offset.x);\n    this.y.setOffset(offset.y);\n  }\n\n  /**\n   * Merges the offset value into the base value and resets the offset to zero.\n   * The final output of the value is unchanged.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#flattenoffset\n   */\n  flattenOffset() {\n    this.x.flattenOffset();\n    this.y.flattenOffset();\n  }\n\n  /**\n   * Sets the offset value to the base value, and resets the base value to\n   * zero. The final output of the value is unchanged.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#extractoffset\n   */\n  extractOffset() {\n    this.x.extractOffset();\n    this.y.extractOffset();\n  }\n  __getValue() {\n    return {\n      x: this.x.__getValue(),\n      y: this.y.__getValue()\n    };\n  }\n\n  /**\n   * Stops any animation and resets the value to its original.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#resetanimation\n   */\n  resetAnimation(callback) {\n    this.x.resetAnimation();\n    this.y.resetAnimation();\n    callback && callback(this.__getValue());\n  }\n\n  /**\n   * Stops any running animation or tracking. `callback` is invoked with the\n   * final value after stopping the animation, which is useful for updating\n   * state to match the animation position with layout.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#stopanimation\n   */\n  stopAnimation(callback) {\n    this.x.stopAnimation();\n    this.y.stopAnimation();\n    callback && callback(this.__getValue());\n  }\n\n  /**\n   * Adds an asynchronous listener to the value so you can observe updates from\n   * animations.  This is useful because there is no way to synchronously read\n   * the value because it might be driven natively.\n   *\n   * Returns a string that serves as an identifier for the listener.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#addlistener\n   */\n  addListener(callback) {\n    var id = String(_uniqueId++);\n    var jointCallback = _ref => {\n      var number = _ref.value;\n      callback(this.__getValue());\n    };\n    this._listeners[id] = {\n      x: this.x.addListener(jointCallback),\n      y: this.y.addListener(jointCallback)\n    };\n    return id;\n  }\n\n  /**\n   * Unregister a listener. The `id` param shall match the identifier\n   * previously returned by `addListener()`.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#removelistener\n   */\n  removeListener(id) {\n    this.x.removeListener(this._listeners[id].x);\n    this.y.removeListener(this._listeners[id].y);\n    delete this._listeners[id];\n  }\n\n  /**\n   * Remove all registered listeners.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#removealllisteners\n   */\n  removeAllListeners() {\n    this.x.removeAllListeners();\n    this.y.removeAllListeners();\n    this._listeners = {};\n  }\n\n  /**\n   * Converts `{x, y}` into `{left, top}` for use in style.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#getlayout\n   */\n  getLayout() {\n    return {\n      left: this.x,\n      top: this.y\n    };\n  }\n\n  /**\n   * Converts `{x, y}` into a useable translation transform.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy.html#gettranslatetransform\n   */\n  getTranslateTransform() {\n    return [{\n      translateX: this.x\n    }, {\n      translateY: this.y\n    }];\n  }\n}\nexport default AnimatedValueXY;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nvar startNativeAnimationNextId = 1;\n\n// Important note: start() and stop() will only be called at most once.\n// Once an animation has been stopped or finished its course, it will\n// not be reused.\nclass Animation {\n  start(fromValue, onUpdate, onEnd, previousAnimation, animatedValue) {}\n  stop() {\n    if (this.__nativeId) {\n      NativeAnimatedHelper.API.stopAnimation(this.__nativeId);\n    }\n  }\n  __getNativeAnimationConfig() {\n    // Subclasses that have corresponding animation implementation done in native\n    // should override this method\n    throw new Error('This animation type cannot be offloaded to native');\n  }\n  // Helper function for subclasses to make sure onEnd is only called once.\n  __debouncedOnEnd(result) {\n    var onEnd = this.__onEnd;\n    this.__onEnd = null;\n    onEnd && onEnd(result);\n  }\n  __startNativeAnimation(animatedValue) {\n    var startNativeAnimationWaitId = startNativeAnimationNextId + \":startAnimation\";\n    startNativeAnimationNextId += 1;\n    NativeAnimatedHelper.API.setWaitingForIdentifier(startNativeAnimationWaitId);\n    try {\n      var config = this.__getNativeAnimationConfig();\n      animatedValue.__makeNative(config.platformConfig);\n      this.__nativeId = NativeAnimatedHelper.generateNewAnimationId();\n      NativeAnimatedHelper.API.startAnimatingNode(this.__nativeId, animatedValue.__getNativeTag(), config,\n      // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n      this.__debouncedOnEnd.bind(this));\n    } catch (e) {\n      throw e;\n    } finally {\n      NativeAnimatedHelper.API.unsetWaitingForIdentifier(startNativeAnimationWaitId);\n    }\n  }\n}\nexport default Animation;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport Animation from './Animation';\nimport { shouldUseNativeDriver } from '../NativeAnimatedHelper';\nclass DecayAnimation extends Animation {\n  constructor(config) {\n    var _config$deceleration, _config$isInteraction, _config$iterations;\n    super();\n    this._deceleration = (_config$deceleration = config.deceleration) !== null && _config$deceleration !== void 0 ? _config$deceleration : 0.998;\n    this._velocity = config.velocity;\n    this._useNativeDriver = shouldUseNativeDriver(config);\n    this.__isInteraction = (_config$isInteraction = config.isInteraction) !== null && _config$isInteraction !== void 0 ? _config$isInteraction : !this._useNativeDriver;\n    this.__iterations = (_config$iterations = config.iterations) !== null && _config$iterations !== void 0 ? _config$iterations : 1;\n  }\n  __getNativeAnimationConfig() {\n    return {\n      type: 'decay',\n      deceleration: this._deceleration,\n      velocity: this._velocity,\n      iterations: this.__iterations\n    };\n  }\n  start(fromValue, onUpdate, onEnd, previousAnimation, animatedValue) {\n    this.__active = true;\n    this._lastValue = fromValue;\n    this._fromValue = fromValue;\n    this._onUpdate = onUpdate;\n    this.__onEnd = onEnd;\n    this._startTime = Date.now();\n    if (this._useNativeDriver) {\n      this.__startNativeAnimation(animatedValue);\n    } else {\n      this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n    }\n  }\n  onUpdate() {\n    var now = Date.now();\n    var value = this._fromValue + this._velocity / (1 - this._deceleration) * (1 - Math.exp(-(1 - this._deceleration) * (now - this._startTime)));\n    this._onUpdate(value);\n    if (Math.abs(this._lastValue - value) < 0.1) {\n      this.__debouncedOnEnd({\n        finished: true\n      });\n      return;\n    }\n    this._lastValue = value;\n    if (this.__active) {\n      this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n    }\n  }\n  stop() {\n    super.stop();\n    this.__active = false;\n    global.cancelAnimationFrame(this._animationFrame);\n    this.__debouncedOnEnd({\n      finished: false\n    });\n  }\n}\nexport default DecayAnimation;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use strict';\n\nfunction stiffnessFromOrigamiValue(oValue) {\n  return (oValue - 30) * 3.62 + 194;\n}\nfunction dampingFromOrigamiValue(oValue) {\n  return (oValue - 8) * 3 + 25;\n}\nfunction fromOrigamiTensionAndFriction(tension, friction) {\n  return {\n    stiffness: stiffnessFromOrigamiValue(tension),\n    damping: dampingFromOrigamiValue(friction)\n  };\n}\nfunction fromBouncinessAndSpeed(bounciness, speed) {\n  function normalize(value, startValue, endValue) {\n    return (value - startValue) / (endValue - startValue);\n  }\n  function projectNormal(n, start, end) {\n    return start + n * (end - start);\n  }\n  function linearInterpolation(t, start, end) {\n    return t * end + (1 - t) * start;\n  }\n  function quadraticOutInterpolation(t, start, end) {\n    return linearInterpolation(2 * t - t * t, start, end);\n  }\n  function b3Friction1(x) {\n    return 0.0007 * Math.pow(x, 3) - 0.031 * Math.pow(x, 2) + 0.64 * x + 1.28;\n  }\n  function b3Friction2(x) {\n    return 0.000044 * Math.pow(x, 3) - 0.006 * Math.pow(x, 2) + 0.36 * x + 2;\n  }\n  function b3Friction3(x) {\n    return 0.00000045 * Math.pow(x, 3) - 0.000332 * Math.pow(x, 2) + 0.1078 * x + 5.84;\n  }\n  function b3Nobounce(tension) {\n    if (tension <= 18) {\n      return b3Friction1(tension);\n    } else if (tension > 18 && tension <= 44) {\n      return b3Friction2(tension);\n    } else {\n      return b3Friction3(tension);\n    }\n  }\n  var b = normalize(bounciness / 1.7, 0, 20);\n  b = projectNormal(b, 0, 0.8);\n  var s = normalize(speed / 1.7, 0, 20);\n  var bouncyTension = projectNormal(s, 0.5, 200);\n  var bouncyFriction = quadraticOutInterpolation(b, b3Nobounce(bouncyTension), 0.01);\n  return {\n    stiffness: stiffnessFromOrigamiValue(bouncyTension),\n    damping: dampingFromOrigamiValue(bouncyFriction)\n  };\n}\nexport default {\n  fromOrigamiTensionAndFriction,\n  fromBouncinessAndSpeed\n};","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport Animation from './Animation';\nimport SpringConfig from '../SpringConfig';\nimport invariant from 'fbjs/lib/invariant';\nimport { shouldUseNativeDriver } from '../NativeAnimatedHelper';\nimport AnimatedColor from '../nodes/AnimatedColor';\nclass SpringAnimation extends Animation {\n  constructor(config) {\n    var _config$overshootClam, _config$restDisplacem, _config$restSpeedThre, _config$velocity, _config$velocity2, _config$delay, _config$isInteraction, _config$iterations;\n    super();\n    this._overshootClamping = (_config$overshootClam = config.overshootClamping) !== null && _config$overshootClam !== void 0 ? _config$overshootClam : false;\n    this._restDisplacementThreshold = (_config$restDisplacem = config.restDisplacementThreshold) !== null && _config$restDisplacem !== void 0 ? _config$restDisplacem : 0.001;\n    this._restSpeedThreshold = (_config$restSpeedThre = config.restSpeedThreshold) !== null && _config$restSpeedThre !== void 0 ? _config$restSpeedThre : 0.001;\n    this._initialVelocity = (_config$velocity = config.velocity) !== null && _config$velocity !== void 0 ? _config$velocity : 0;\n    this._lastVelocity = (_config$velocity2 = config.velocity) !== null && _config$velocity2 !== void 0 ? _config$velocity2 : 0;\n    this._toValue = config.toValue;\n    this._delay = (_config$delay = config.delay) !== null && _config$delay !== void 0 ? _config$delay : 0;\n    this._useNativeDriver = shouldUseNativeDriver(config);\n    this._platformConfig = config.platformConfig;\n    this.__isInteraction = (_config$isInteraction = config.isInteraction) !== null && _config$isInteraction !== void 0 ? _config$isInteraction : !this._useNativeDriver;\n    this.__iterations = (_config$iterations = config.iterations) !== null && _config$iterations !== void 0 ? _config$iterations : 1;\n    if (config.stiffness !== undefined || config.damping !== undefined || config.mass !== undefined) {\n      var _config$stiffness, _config$damping, _config$mass;\n      invariant(config.bounciness === undefined && config.speed === undefined && config.tension === undefined && config.friction === undefined, 'You can define one of bounciness/speed, tension/friction, or stiffness/damping/mass, but not more than one');\n      this._stiffness = (_config$stiffness = config.stiffness) !== null && _config$stiffness !== void 0 ? _config$stiffness : 100;\n      this._damping = (_config$damping = config.damping) !== null && _config$damping !== void 0 ? _config$damping : 10;\n      this._mass = (_config$mass = config.mass) !== null && _config$mass !== void 0 ? _config$mass : 1;\n    } else if (config.bounciness !== undefined || config.speed !== undefined) {\n      var _config$bounciness, _config$speed;\n      // Convert the origami bounciness/speed values to stiffness/damping\n      // We assume mass is 1.\n      invariant(config.tension === undefined && config.friction === undefined && config.stiffness === undefined && config.damping === undefined && config.mass === undefined, 'You can define one of bounciness/speed, tension/friction, or stiffness/damping/mass, but not more than one');\n      var springConfig = SpringConfig.fromBouncinessAndSpeed((_config$bounciness = config.bounciness) !== null && _config$bounciness !== void 0 ? _config$bounciness : 8, (_config$speed = config.speed) !== null && _config$speed !== void 0 ? _config$speed : 12);\n      this._stiffness = springConfig.stiffness;\n      this._damping = springConfig.damping;\n      this._mass = 1;\n    } else {\n      var _config$tension, _config$friction;\n      // Convert the origami tension/friction values to stiffness/damping\n      // We assume mass is 1.\n      var _springConfig = SpringConfig.fromOrigamiTensionAndFriction((_config$tension = config.tension) !== null && _config$tension !== void 0 ? _config$tension : 40, (_config$friction = config.friction) !== null && _config$friction !== void 0 ? _config$friction : 7);\n      this._stiffness = _springConfig.stiffness;\n      this._damping = _springConfig.damping;\n      this._mass = 1;\n    }\n    invariant(this._stiffness > 0, 'Stiffness value must be greater than 0');\n    invariant(this._damping > 0, 'Damping value must be greater than 0');\n    invariant(this._mass > 0, 'Mass value must be greater than 0');\n  }\n  __getNativeAnimationConfig() {\n    var _this$_initialVelocit;\n    return {\n      type: 'spring',\n      overshootClamping: this._overshootClamping,\n      restDisplacementThreshold: this._restDisplacementThreshold,\n      restSpeedThreshold: this._restSpeedThreshold,\n      stiffness: this._stiffness,\n      damping: this._damping,\n      mass: this._mass,\n      initialVelocity: (_this$_initialVelocit = this._initialVelocity) !== null && _this$_initialVelocit !== void 0 ? _this$_initialVelocit : this._lastVelocity,\n      toValue: this._toValue,\n      iterations: this.__iterations,\n      platformConfig: this._platformConfig\n    };\n  }\n  start(fromValue, onUpdate, onEnd, previousAnimation, animatedValue) {\n    this.__active = true;\n    this._startPosition = fromValue;\n    this._lastPosition = this._startPosition;\n    this._onUpdate = onUpdate;\n    this.__onEnd = onEnd;\n    this._lastTime = Date.now();\n    this._frameTime = 0.0;\n    if (previousAnimation instanceof SpringAnimation) {\n      var internalState = previousAnimation.getInternalState();\n      this._lastPosition = internalState.lastPosition;\n      this._lastVelocity = internalState.lastVelocity;\n      // Set the initial velocity to the last velocity\n      this._initialVelocity = this._lastVelocity;\n      this._lastTime = internalState.lastTime;\n    }\n    var start = () => {\n      if (this._useNativeDriver) {\n        this.__startNativeAnimation(animatedValue);\n      } else {\n        this.onUpdate();\n      }\n    };\n\n    //  If this._delay is more than 0, we start after the timeout.\n    if (this._delay) {\n      this._timeout = setTimeout(start, this._delay);\n    } else {\n      start();\n    }\n  }\n  getInternalState() {\n    return {\n      lastPosition: this._lastPosition,\n      lastVelocity: this._lastVelocity,\n      lastTime: this._lastTime\n    };\n  }\n\n  /**\n   * This spring model is based off of a damped harmonic oscillator\n   * (https://en.wikipedia.org/wiki/Harmonic_oscillator#Damped_harmonic_oscillator).\n   *\n   * We use the closed form of the second order differential equation:\n   *\n   * x'' + (2ζ⍵_0)x' + ⍵^2x = 0\n   *\n   * where\n   *    ⍵_0 = √(k / m) (undamped angular frequency of the oscillator),\n   *    ζ = c / 2√mk (damping ratio),\n   *    c = damping constant\n   *    k = stiffness\n   *    m = mass\n   *\n   * The derivation of the closed form is described in detail here:\n   * http://planetmath.org/sites/default/files/texpdf/39745.pdf\n   *\n   * This algorithm happens to match the algorithm used by CASpringAnimation,\n   * a QuartzCore (iOS) API that creates spring animations.\n   */\n  onUpdate() {\n    // If for some reason we lost a lot of frames (e.g. process large payload or\n    // stopped in the debugger), we only advance by 4 frames worth of\n    // computation and will continue on the next frame. It's better to have it\n    // running at faster speed than jumping to the end.\n    var MAX_STEPS = 64;\n    var now = Date.now();\n    if (now > this._lastTime + MAX_STEPS) {\n      now = this._lastTime + MAX_STEPS;\n    }\n    var deltaTime = (now - this._lastTime) / 1000;\n    this._frameTime += deltaTime;\n    var c = this._damping;\n    var m = this._mass;\n    var k = this._stiffness;\n    var v0 = -this._initialVelocity;\n    var zeta = c / (2 * Math.sqrt(k * m)); // damping ratio\n    var omega0 = Math.sqrt(k / m); // undamped angular frequency of the oscillator (rad/ms)\n    var omega1 = omega0 * Math.sqrt(1.0 - zeta * zeta); // exponential decay\n    var x0 = this._toValue - this._startPosition; // calculate the oscillation from x0 = 1 to x = 0\n\n    var position = 0.0;\n    var velocity = 0.0;\n    var t = this._frameTime;\n    if (zeta < 1) {\n      // Under damped\n      var envelope = Math.exp(-zeta * omega0 * t);\n      position = this._toValue - envelope * ((v0 + zeta * omega0 * x0) / omega1 * Math.sin(omega1 * t) + x0 * Math.cos(omega1 * t));\n      // This looks crazy -- it's actually just the derivative of the\n      // oscillation function\n      velocity = zeta * omega0 * envelope * (Math.sin(omega1 * t) * (v0 + zeta * omega0 * x0) / omega1 + x0 * Math.cos(omega1 * t)) - envelope * (Math.cos(omega1 * t) * (v0 + zeta * omega0 * x0) - omega1 * x0 * Math.sin(omega1 * t));\n    } else {\n      // Critically damped\n      var _envelope = Math.exp(-omega0 * t);\n      position = this._toValue - _envelope * (x0 + (v0 + omega0 * x0) * t);\n      velocity = _envelope * (v0 * (t * omega0 - 1) + t * x0 * (omega0 * omega0));\n    }\n    this._lastTime = now;\n    this._lastPosition = position;\n    this._lastVelocity = velocity;\n    this._onUpdate(position);\n    if (!this.__active) {\n      // a listener might have stopped us in _onUpdate\n      return;\n    }\n\n    // Conditions for stopping the spring animation\n    var isOvershooting = false;\n    if (this._overshootClamping && this._stiffness !== 0) {\n      if (this._startPosition < this._toValue) {\n        isOvershooting = position > this._toValue;\n      } else {\n        isOvershooting = position < this._toValue;\n      }\n    }\n    var isVelocity = Math.abs(velocity) <= this._restSpeedThreshold;\n    var isDisplacement = true;\n    if (this._stiffness !== 0) {\n      isDisplacement = Math.abs(this._toValue - position) <= this._restDisplacementThreshold;\n    }\n    if (isOvershooting || isVelocity && isDisplacement) {\n      if (this._stiffness !== 0) {\n        // Ensure that we end up with a round value\n        this._lastPosition = this._toValue;\n        this._lastVelocity = 0;\n        this._onUpdate(this._toValue);\n      }\n      this.__debouncedOnEnd({\n        finished: true\n      });\n      return;\n    }\n    // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n    this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n  }\n  stop() {\n    super.stop();\n    this.__active = false;\n    clearTimeout(this._timeout);\n    global.cancelAnimationFrame(this._animationFrame);\n    this.__debouncedOnEnd({\n      finished: false\n    });\n  }\n}\nexport default SpringAnimation;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedValue from '../nodes/AnimatedValue';\nimport AnimatedValueXY from '../nodes/AnimatedValueXY';\nimport AnimatedInterpolation from '../nodes/AnimatedInterpolation';\nimport Easing from '../../../../exports/Easing';\nimport Animation from './Animation';\nimport { shouldUseNativeDriver } from '../NativeAnimatedHelper';\nimport AnimatedColor from '../nodes/AnimatedColor';\nvar _easeInOut;\nfunction easeInOut() {\n  if (!_easeInOut) {\n    _easeInOut = Easing.inOut(Easing.ease);\n  }\n  return _easeInOut;\n}\nclass TimingAnimation extends Animation {\n  constructor(config) {\n    var _config$easing, _config$duration, _config$delay, _config$iterations, _config$isInteraction;\n    super();\n    this._toValue = config.toValue;\n    this._easing = (_config$easing = config.easing) !== null && _config$easing !== void 0 ? _config$easing : easeInOut();\n    this._duration = (_config$duration = config.duration) !== null && _config$duration !== void 0 ? _config$duration : 500;\n    this._delay = (_config$delay = config.delay) !== null && _config$delay !== void 0 ? _config$delay : 0;\n    this.__iterations = (_config$iterations = config.iterations) !== null && _config$iterations !== void 0 ? _config$iterations : 1;\n    this._useNativeDriver = shouldUseNativeDriver(config);\n    this._platformConfig = config.platformConfig;\n    this.__isInteraction = (_config$isInteraction = config.isInteraction) !== null && _config$isInteraction !== void 0 ? _config$isInteraction : !this._useNativeDriver;\n  }\n  __getNativeAnimationConfig() {\n    var frameDuration = 1000.0 / 60.0;\n    var frames = [];\n    var numFrames = Math.round(this._duration / frameDuration);\n    for (var frame = 0; frame < numFrames; frame++) {\n      frames.push(this._easing(frame / numFrames));\n    }\n    frames.push(this._easing(1));\n    return {\n      type: 'frames',\n      frames,\n      toValue: this._toValue,\n      iterations: this.__iterations,\n      platformConfig: this._platformConfig\n    };\n  }\n  start(fromValue, onUpdate, onEnd, previousAnimation, animatedValue) {\n    this.__active = true;\n    this._fromValue = fromValue;\n    this._onUpdate = onUpdate;\n    this.__onEnd = onEnd;\n    var start = () => {\n      // Animations that sometimes have 0 duration and sometimes do not\n      // still need to use the native driver when duration is 0 so as to\n      // not cause intermixed JS and native animations.\n      if (this._duration === 0 && !this._useNativeDriver) {\n        this._onUpdate(this._toValue);\n        this.__debouncedOnEnd({\n          finished: true\n        });\n      } else {\n        this._startTime = Date.now();\n        if (this._useNativeDriver) {\n          this.__startNativeAnimation(animatedValue);\n        } else {\n          this._animationFrame = requestAnimationFrame(\n          // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n          this.onUpdate.bind(this));\n        }\n      }\n    };\n    if (this._delay) {\n      this._timeout = setTimeout(start, this._delay);\n    } else {\n      start();\n    }\n  }\n  onUpdate() {\n    var now = Date.now();\n    if (now >= this._startTime + this._duration) {\n      if (this._duration === 0) {\n        this._onUpdate(this._toValue);\n      } else {\n        this._onUpdate(this._fromValue + this._easing(1) * (this._toValue - this._fromValue));\n      }\n      this.__debouncedOnEnd({\n        finished: true\n      });\n      return;\n    }\n    this._onUpdate(this._fromValue + this._easing((now - this._startTime) / this._duration) * (this._toValue - this._fromValue));\n    if (this.__active) {\n      // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n      this._animationFrame = requestAnimationFrame(this.onUpdate.bind(this));\n    }\n  }\n  stop() {\n    super.stop();\n    this.__active = false;\n    clearTimeout(this._timeout);\n    global.cancelAnimationFrame(this._animationFrame);\n    this.__debouncedOnEnd({\n      finished: false\n    });\n  }\n}\nexport default TimingAnimation;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport AnimatedValue from './AnimatedValue';\nimport AnimatedWithChildren from './AnimatedWithChildren';\nimport normalizeColor from '@react-native/normalize-colors';\nimport NativeAnimatedHelper from '../NativeAnimatedHelper';\nvar NativeAnimatedAPI = NativeAnimatedHelper.API;\nvar defaultColor = {\n  r: 0,\n  g: 0,\n  b: 0,\n  a: 1.0\n};\nvar _uniqueId = 1;\nvar processColorObject = color => {\n  return color;\n};\n\n/* eslint no-bitwise: 0 */\nfunction processColor(color) {\n  if (color === undefined || color === null) {\n    return null;\n  }\n  if (isRgbaValue(color)) {\n    // $FlowIgnore[incompatible-cast] - Type is verified above\n    return color;\n  }\n  var normalizedColor = normalizeColor(\n  // $FlowIgnore[incompatible-cast] - Type is verified above\n  color);\n  if (normalizedColor === undefined || normalizedColor === null) {\n    return null;\n  }\n  if (typeof normalizedColor === 'object') {\n    var processedColorObj = processColorObject(normalizedColor);\n    if (processedColorObj != null) {\n      return processedColorObj;\n    }\n  } else if (typeof normalizedColor === 'number') {\n    var r = (normalizedColor & 0xff000000) >>> 24;\n    var g = (normalizedColor & 0x00ff0000) >>> 16;\n    var b = (normalizedColor & 0x0000ff00) >>> 8;\n    var a = (normalizedColor & 0x000000ff) / 255;\n    return {\n      r,\n      g,\n      b,\n      a\n    };\n  }\n  return null;\n}\nfunction isRgbaValue(value) {\n  return value && typeof value.r === 'number' && typeof value.g === 'number' && typeof value.b === 'number' && typeof value.a === 'number';\n}\nfunction isRgbaAnimatedValue(value) {\n  return value && value.r instanceof AnimatedValue && value.g instanceof AnimatedValue && value.b instanceof AnimatedValue && value.a instanceof AnimatedValue;\n}\nexport default class AnimatedColor extends AnimatedWithChildren {\n  constructor(valueIn, config) {\n    super();\n    this._listeners = {};\n    var value = valueIn !== null && valueIn !== void 0 ? valueIn : defaultColor;\n    if (isRgbaAnimatedValue(value)) {\n      // $FlowIgnore[incompatible-cast] - Type is verified above\n      var rgbaAnimatedValue = value;\n      this.r = rgbaAnimatedValue.r;\n      this.g = rgbaAnimatedValue.g;\n      this.b = rgbaAnimatedValue.b;\n      this.a = rgbaAnimatedValue.a;\n    } else {\n      var _processColor;\n      var processedColor = // $FlowIgnore[incompatible-cast] - Type is verified above\n      (_processColor = processColor(value)) !== null && _processColor !== void 0 ? _processColor : defaultColor;\n      var initColor = defaultColor;\n      if (isRgbaValue(processedColor)) {\n        // $FlowIgnore[incompatible-cast] - Type is verified above\n        initColor = processedColor;\n      } else {\n        // $FlowIgnore[incompatible-cast] - Type is verified above\n        this.nativeColor = processedColor;\n      }\n      this.r = new AnimatedValue(initColor.r);\n      this.g = new AnimatedValue(initColor.g);\n      this.b = new AnimatedValue(initColor.b);\n      this.a = new AnimatedValue(initColor.a);\n    }\n    if (this.nativeColor || config && config.useNativeDriver) {\n      this.__makeNative();\n    }\n  }\n\n  /**\n   * Directly set the value. This will stop any animations running on the value\n   * and update all the bound properties.\n   */\n  setValue(value) {\n    var _processColor2;\n    var shouldUpdateNodeConfig = false;\n    if (this.__isNative) {\n      var nativeTag = this.__getNativeTag();\n      NativeAnimatedAPI.setWaitingForIdentifier(nativeTag.toString());\n    }\n    var processedColor = (_processColor2 = processColor(value)) !== null && _processColor2 !== void 0 ? _processColor2 : defaultColor;\n    if (isRgbaValue(processedColor)) {\n      // $FlowIgnore[incompatible-type] - Type is verified above\n      var rgbaValue = processedColor;\n      this.r.setValue(rgbaValue.r);\n      this.g.setValue(rgbaValue.g);\n      this.b.setValue(rgbaValue.b);\n      this.a.setValue(rgbaValue.a);\n      if (this.nativeColor != null) {\n        this.nativeColor = null;\n        shouldUpdateNodeConfig = true;\n      }\n    } else {\n      // $FlowIgnore[incompatible-type] - Type is verified above\n      var nativeColor = processedColor;\n      if (this.nativeColor !== nativeColor) {\n        this.nativeColor = nativeColor;\n        shouldUpdateNodeConfig = true;\n      }\n    }\n    if (this.__isNative) {\n      var _nativeTag = this.__getNativeTag();\n      if (shouldUpdateNodeConfig) {\n        NativeAnimatedAPI.updateAnimatedNodeConfig(_nativeTag, this.__getNativeConfig());\n      }\n      NativeAnimatedAPI.unsetWaitingForIdentifier(_nativeTag.toString());\n    }\n  }\n\n  /**\n   * Sets an offset that is applied on top of whatever value is set, whether\n   * via `setValue`, an animation, or `Animated.event`. Useful for compensating\n   * things like the start of a pan gesture.\n   */\n  setOffset(offset) {\n    this.r.setOffset(offset.r);\n    this.g.setOffset(offset.g);\n    this.b.setOffset(offset.b);\n    this.a.setOffset(offset.a);\n  }\n\n  /**\n   * Merges the offset value into the base value and resets the offset to zero.\n   * The final output of the value is unchanged.\n   */\n  flattenOffset() {\n    this.r.flattenOffset();\n    this.g.flattenOffset();\n    this.b.flattenOffset();\n    this.a.flattenOffset();\n  }\n\n  /**\n   * Sets the offset value to the base value, and resets the base value to\n   * zero. The final output of the value is unchanged.\n   */\n  extractOffset() {\n    this.r.extractOffset();\n    this.g.extractOffset();\n    this.b.extractOffset();\n    this.a.extractOffset();\n  }\n\n  /**\n   * Adds an asynchronous listener to the value so you can observe updates from\n   * animations.  This is useful because there is no way to synchronously read\n   * the value because it might be driven natively.\n   *\n   * Returns a string that serves as an identifier for the listener.\n   */\n  addListener(callback) {\n    var id = String(_uniqueId++);\n    var jointCallback = _ref => {\n      var number = _ref.value;\n      callback(this.__getValue());\n    };\n    this._listeners[id] = {\n      r: this.r.addListener(jointCallback),\n      g: this.g.addListener(jointCallback),\n      b: this.b.addListener(jointCallback),\n      a: this.a.addListener(jointCallback)\n    };\n    return id;\n  }\n\n  /**\n   * Unregister a listener. The `id` param shall match the identifier\n   * previously returned by `addListener()`.\n   */\n  removeListener(id) {\n    this.r.removeListener(this._listeners[id].r);\n    this.g.removeListener(this._listeners[id].g);\n    this.b.removeListener(this._listeners[id].b);\n    this.a.removeListener(this._listeners[id].a);\n    delete this._listeners[id];\n  }\n\n  /**\n   * Remove all registered listeners.\n   */\n  removeAllListeners() {\n    this.r.removeAllListeners();\n    this.g.removeAllListeners();\n    this.b.removeAllListeners();\n    this.a.removeAllListeners();\n    this._listeners = {};\n  }\n\n  /**\n   * Stops any running animation or tracking. `callback` is invoked with the\n   * final value after stopping the animation, which is useful for updating\n   * state to match the animation position with layout.\n   */\n  stopAnimation(callback) {\n    this.r.stopAnimation();\n    this.g.stopAnimation();\n    this.b.stopAnimation();\n    this.a.stopAnimation();\n    callback && callback(this.__getValue());\n  }\n\n  /**\n   * Stops any animation and resets the value to its original.\n   */\n  resetAnimation(callback) {\n    this.r.resetAnimation();\n    this.g.resetAnimation();\n    this.b.resetAnimation();\n    this.a.resetAnimation();\n    callback && callback(this.__getValue());\n  }\n  __getValue() {\n    if (this.nativeColor != null) {\n      return this.nativeColor;\n    } else {\n      return \"rgba(\" + this.r.__getValue() + \", \" + this.g.__getValue() + \", \" + this.b.__getValue() + \", \" + this.a.__getValue() + \")\";\n    }\n  }\n  __attach() {\n    this.r.__addChild(this);\n    this.g.__addChild(this);\n    this.b.__addChild(this);\n    this.a.__addChild(this);\n    super.__attach();\n  }\n  __detach() {\n    this.r.__removeChild(this);\n    this.g.__removeChild(this);\n    this.b.__removeChild(this);\n    this.a.__removeChild(this);\n    super.__detach();\n  }\n  __makeNative(platformConfig) {\n    this.r.__makeNative(platformConfig);\n    this.g.__makeNative(platformConfig);\n    this.b.__makeNative(platformConfig);\n    this.a.__makeNative(platformConfig);\n    super.__makeNative(platformConfig);\n  }\n  __getNativeConfig() {\n    return {\n      type: 'color',\n      r: this.r.__getNativeTag(),\n      g: this.g.__getNativeTag(),\n      b: this.b.__getNativeTag(),\n      a: this.a.__getNativeTag(),\n      nativeColor: this.nativeColor\n    };\n  }\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport { AnimatedEvent, attachNativeEvent } from './AnimatedEvent';\nimport AnimatedAddition from './nodes/AnimatedAddition';\nimport AnimatedDiffClamp from './nodes/AnimatedDiffClamp';\nimport AnimatedDivision from './nodes/AnimatedDivision';\nimport AnimatedInterpolation from './nodes/AnimatedInterpolation';\nimport AnimatedModulo from './nodes/AnimatedModulo';\nimport AnimatedMultiplication from './nodes/AnimatedMultiplication';\nimport AnimatedNode from './nodes/AnimatedNode';\nimport AnimatedProps from './nodes/AnimatedProps';\nimport AnimatedSubtraction from './nodes/AnimatedSubtraction';\nimport AnimatedTracking from './nodes/AnimatedTracking';\nimport AnimatedValue from './nodes/AnimatedValue';\nimport AnimatedValueXY from './nodes/AnimatedValueXY';\nimport DecayAnimation from './animations/DecayAnimation';\nimport SpringAnimation from './animations/SpringAnimation';\nimport TimingAnimation from './animations/TimingAnimation';\nimport createAnimatedComponent from './createAnimatedComponent';\nimport AnimatedColor from './nodes/AnimatedColor';\nvar add = function add(a, b) {\n  return new AnimatedAddition(a, b);\n};\nvar subtract = function subtract(a, b) {\n  return new AnimatedSubtraction(a, b);\n};\nvar divide = function divide(a, b) {\n  return new AnimatedDivision(a, b);\n};\nvar multiply = function multiply(a, b) {\n  return new AnimatedMultiplication(a, b);\n};\nvar modulo = function modulo(a, modulus) {\n  return new AnimatedModulo(a, modulus);\n};\nvar diffClamp = function diffClamp(a, min, max) {\n  return new AnimatedDiffClamp(a, min, max);\n};\nvar _combineCallbacks = function _combineCallbacks(callback, config) {\n  if (callback && config.onComplete) {\n    return function () {\n      config.onComplete && config.onComplete(...arguments);\n      callback && callback(...arguments);\n    };\n  } else {\n    return callback || config.onComplete;\n  }\n};\nvar maybeVectorAnim = function maybeVectorAnim(value, config, anim) {\n  if (value instanceof AnimatedValueXY) {\n    var configX = _objectSpread({}, config);\n    var configY = _objectSpread({}, config);\n    for (var key in config) {\n      var _config$key = config[key],\n        x = _config$key.x,\n        y = _config$key.y;\n      if (x !== undefined && y !== undefined) {\n        configX[key] = x;\n        configY[key] = y;\n      }\n    }\n    var aX = anim(value.x, configX);\n    var aY = anim(value.y, configY);\n    // We use `stopTogether: false` here because otherwise tracking will break\n    // because the second animation will get stopped before it can update.\n    return parallel([aX, aY], {\n      stopTogether: false\n    });\n  } else if (value instanceof AnimatedColor) {\n    var configR = _objectSpread({}, config);\n    var configG = _objectSpread({}, config);\n    var configB = _objectSpread({}, config);\n    var configA = _objectSpread({}, config);\n    for (var _key in config) {\n      var _config$_key = config[_key],\n        r = _config$_key.r,\n        g = _config$_key.g,\n        b = _config$_key.b,\n        a = _config$_key.a;\n      if (r !== undefined && g !== undefined && b !== undefined && a !== undefined) {\n        configR[_key] = r;\n        configG[_key] = g;\n        configB[_key] = b;\n        configA[_key] = a;\n      }\n    }\n    var aR = anim(value.r, configR);\n    var aG = anim(value.g, configG);\n    var aB = anim(value.b, configB);\n    var aA = anim(value.a, configA);\n    // We use `stopTogether: false` here because otherwise tracking will break\n    // because the second animation will get stopped before it can update.\n    return parallel([aR, aG, aB, aA], {\n      stopTogether: false\n    });\n  }\n  return null;\n};\nvar spring = function spring(value, config) {\n  var _start = function start(animatedValue, configuration, callback) {\n    callback = _combineCallbacks(callback, configuration);\n    var singleValue = animatedValue;\n    var singleConfig = configuration;\n    singleValue.stopTracking();\n    if (configuration.toValue instanceof AnimatedNode) {\n      singleValue.track(new AnimatedTracking(singleValue, configuration.toValue, SpringAnimation, singleConfig, callback));\n    } else {\n      singleValue.animate(new SpringAnimation(singleConfig), callback);\n    }\n  };\n  return maybeVectorAnim(value, config, spring) || {\n    start: function start(callback) {\n      _start(value, config, callback);\n    },\n    stop: function stop() {\n      value.stopAnimation();\n    },\n    reset: function reset() {\n      value.resetAnimation();\n    },\n    _startNativeLoop: function _startNativeLoop(iterations) {\n      var singleConfig = _objectSpread(_objectSpread({}, config), {}, {\n        iterations\n      });\n      _start(value, singleConfig);\n    },\n    _isUsingNativeDriver: function _isUsingNativeDriver() {\n      return config.useNativeDriver || false;\n    }\n  };\n};\nvar timing = function timing(value, config) {\n  var _start2 = function start(animatedValue, configuration, callback) {\n    callback = _combineCallbacks(callback, configuration);\n    var singleValue = animatedValue;\n    var singleConfig = configuration;\n    singleValue.stopTracking();\n    if (configuration.toValue instanceof AnimatedNode) {\n      singleValue.track(new AnimatedTracking(singleValue, configuration.toValue, TimingAnimation, singleConfig, callback));\n    } else {\n      singleValue.animate(new TimingAnimation(singleConfig), callback);\n    }\n  };\n  return maybeVectorAnim(value, config, timing) || {\n    start: function start(callback) {\n      _start2(value, config, callback);\n    },\n    stop: function stop() {\n      value.stopAnimation();\n    },\n    reset: function reset() {\n      value.resetAnimation();\n    },\n    _startNativeLoop: function _startNativeLoop(iterations) {\n      var singleConfig = _objectSpread(_objectSpread({}, config), {}, {\n        iterations\n      });\n      _start2(value, singleConfig);\n    },\n    _isUsingNativeDriver: function _isUsingNativeDriver() {\n      return config.useNativeDriver || false;\n    }\n  };\n};\nvar decay = function decay(value, config) {\n  var _start3 = function start(animatedValue, configuration, callback) {\n    callback = _combineCallbacks(callback, configuration);\n    var singleValue = animatedValue;\n    var singleConfig = configuration;\n    singleValue.stopTracking();\n    singleValue.animate(new DecayAnimation(singleConfig), callback);\n  };\n  return maybeVectorAnim(value, config, decay) || {\n    start: function start(callback) {\n      _start3(value, config, callback);\n    },\n    stop: function stop() {\n      value.stopAnimation();\n    },\n    reset: function reset() {\n      value.resetAnimation();\n    },\n    _startNativeLoop: function _startNativeLoop(iterations) {\n      var singleConfig = _objectSpread(_objectSpread({}, config), {}, {\n        iterations\n      });\n      _start3(value, singleConfig);\n    },\n    _isUsingNativeDriver: function _isUsingNativeDriver() {\n      return config.useNativeDriver || false;\n    }\n  };\n};\nvar sequence = function sequence(animations) {\n  var current = 0;\n  return {\n    start: function start(callback) {\n      var onComplete = function onComplete(result) {\n        if (!result.finished) {\n          callback && callback(result);\n          return;\n        }\n        current++;\n        if (current === animations.length) {\n          // if the start is called, even without a reset, it should start from the beginning\n          current = 0;\n          callback && callback(result);\n          return;\n        }\n        animations[current].start(onComplete);\n      };\n      if (animations.length === 0) {\n        callback && callback({\n          finished: true\n        });\n      } else {\n        animations[current].start(onComplete);\n      }\n    },\n    stop: function stop() {\n      if (current < animations.length) {\n        animations[current].stop();\n      }\n    },\n    reset: function reset() {\n      animations.forEach((animation, idx) => {\n        if (idx <= current) {\n          animation.reset();\n        }\n      });\n      current = 0;\n    },\n    _startNativeLoop: function _startNativeLoop() {\n      throw new Error('Loops run using the native driver cannot contain Animated.sequence animations');\n    },\n    _isUsingNativeDriver: function _isUsingNativeDriver() {\n      return false;\n    }\n  };\n};\nvar parallel = function parallel(animations, config) {\n  var doneCount = 0;\n  // Make sure we only call stop() at most once for each animation\n  var hasEnded = {};\n  var stopTogether = !(config && config.stopTogether === false);\n  var result = {\n    start: function start(callback) {\n      if (doneCount === animations.length) {\n        callback && callback({\n          finished: true\n        });\n        return;\n      }\n      animations.forEach((animation, idx) => {\n        var cb = function cb(endResult) {\n          hasEnded[idx] = true;\n          doneCount++;\n          if (doneCount === animations.length) {\n            doneCount = 0;\n            callback && callback(endResult);\n            return;\n          }\n          if (!endResult.finished && stopTogether) {\n            result.stop();\n          }\n        };\n        if (!animation) {\n          cb({\n            finished: true\n          });\n        } else {\n          animation.start(cb);\n        }\n      });\n    },\n    stop: function stop() {\n      animations.forEach((animation, idx) => {\n        !hasEnded[idx] && animation.stop();\n        hasEnded[idx] = true;\n      });\n    },\n    reset: function reset() {\n      animations.forEach((animation, idx) => {\n        animation.reset();\n        hasEnded[idx] = false;\n        doneCount = 0;\n      });\n    },\n    _startNativeLoop: function _startNativeLoop() {\n      throw new Error('Loops run using the native driver cannot contain Animated.parallel animations');\n    },\n    _isUsingNativeDriver: function _isUsingNativeDriver() {\n      return false;\n    }\n  };\n  return result;\n};\nvar delay = function delay(time) {\n  // Would be nice to make a specialized implementation\n  return timing(new AnimatedValue(0), {\n    toValue: 0,\n    delay: time,\n    duration: 0,\n    useNativeDriver: false\n  });\n};\nvar stagger = function stagger(time, animations) {\n  return parallel(animations.map((animation, i) => {\n    return sequence([delay(time * i), animation]);\n  }));\n};\nvar loop = function loop(animation, // $FlowFixMe[prop-missing]\n_temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n    _ref$iterations = _ref.iterations,\n    iterations = _ref$iterations === void 0 ? -1 : _ref$iterations,\n    _ref$resetBeforeItera = _ref.resetBeforeIteration,\n    resetBeforeIteration = _ref$resetBeforeItera === void 0 ? true : _ref$resetBeforeItera;\n  var isFinished = false;\n  var iterationsSoFar = 0;\n  return {\n    start: function start(callback) {\n      var restart = function restart(result) {\n        if (result === void 0) {\n          result = {\n            finished: true\n          };\n        }\n        if (isFinished || iterationsSoFar === iterations || result.finished === false) {\n          callback && callback(result);\n        } else {\n          iterationsSoFar++;\n          resetBeforeIteration && animation.reset();\n          animation.start(restart);\n        }\n      };\n      if (!animation || iterations === 0) {\n        callback && callback({\n          finished: true\n        });\n      } else {\n        if (animation._isUsingNativeDriver()) {\n          animation._startNativeLoop(iterations);\n        } else {\n          restart(); // Start looping recursively on the js thread\n        }\n      }\n    },\n    stop: function stop() {\n      isFinished = true;\n      animation.stop();\n    },\n    reset: function reset() {\n      iterationsSoFar = 0;\n      isFinished = false;\n      animation.reset();\n    },\n    _startNativeLoop: function _startNativeLoop() {\n      throw new Error('Loops run using the native driver cannot contain Animated.loop animations');\n    },\n    _isUsingNativeDriver: function _isUsingNativeDriver() {\n      return animation._isUsingNativeDriver();\n    }\n  };\n};\nfunction forkEvent(event, listener) {\n  if (!event) {\n    return listener;\n  } else if (event instanceof AnimatedEvent) {\n    event.__addListener(listener);\n    return event;\n  } else {\n    return function () {\n      typeof event === 'function' && event(...arguments);\n      listener(...arguments);\n    };\n  }\n}\nfunction unforkEvent(event, listener) {\n  if (event && event instanceof AnimatedEvent) {\n    event.__removeListener(listener);\n  }\n}\nvar event = function event(argMapping, config) {\n  var animatedEvent = new AnimatedEvent(argMapping, config);\n  if (animatedEvent.__isNative) {\n    return animatedEvent;\n  } else {\n    return animatedEvent.__getHandler();\n  }\n};\n\n// All types of animated nodes that represent scalar numbers and can be interpolated (etc)\n\n/**\n * The `Animated` library is designed to make animations fluid, powerful, and\n * easy to build and maintain. `Animated` focuses on declarative relationships\n * between inputs and outputs, with configurable transforms in between, and\n * simple `start`/`stop` methods to control time-based animation execution.\n * If additional transforms are added, be sure to include them in\n * AnimatedMock.js as well.\n *\n * See https://reactnative.dev/docs/animated\n */\nexport default {\n  /**\n   * Standard value class for driving animations.  Typically initialized with\n   * `new Animated.Value(0);`\n   *\n   * See https://reactnative.dev/docs/animated#value\n   */\n  Value: AnimatedValue,\n  /**\n   * 2D value class for driving 2D animations, such as pan gestures.\n   *\n   * See https://reactnative.dev/docs/animatedvaluexy\n   */\n  ValueXY: AnimatedValueXY,\n  /**\n   * Value class for driving color animations.\n   */\n  Color: AnimatedColor,\n  /**\n   * Exported to use the Interpolation type in flow.\n   *\n   * See https://reactnative.dev/docs/animated#interpolation\n   */\n  Interpolation: AnimatedInterpolation,\n  /**\n   * Exported for ease of type checking. All animated values derive from this\n   * class.\n   *\n   * See https://reactnative.dev/docs/animated#node\n   */\n  Node: AnimatedNode,\n  /**\n   * Animates a value from an initial velocity to zero based on a decay\n   * coefficient.\n   *\n   * See https://reactnative.dev/docs/animated#decay\n   */\n  decay,\n  /**\n   * Animates a value along a timed easing curve. The Easing module has tons of\n   * predefined curves, or you can use your own function.\n   *\n   * See https://reactnative.dev/docs/animated#timing\n   */\n  timing,\n  /**\n   * Animates a value according to an analytical spring model based on\n   * damped harmonic oscillation.\n   *\n   * See https://reactnative.dev/docs/animated#spring\n   */\n  spring,\n  /**\n   * Creates a new Animated value composed from two Animated values added\n   * together.\n   *\n   * See https://reactnative.dev/docs/animated#add\n   */\n  add,\n  /**\n   * Creates a new Animated value composed by subtracting the second Animated\n   * value from the first Animated value.\n   *\n   * See https://reactnative.dev/docs/animated#subtract\n   */\n  subtract,\n  /**\n   * Creates a new Animated value composed by dividing the first Animated value\n   * by the second Animated value.\n   *\n   * See https://reactnative.dev/docs/animated#divide\n   */\n  divide,\n  /**\n   * Creates a new Animated value composed from two Animated values multiplied\n   * together.\n   *\n   * See https://reactnative.dev/docs/animated#multiply\n   */\n  multiply,\n  /**\n   * Creates a new Animated value that is the (non-negative) modulo of the\n   * provided Animated value.\n   *\n   * See https://reactnative.dev/docs/animated#modulo\n   */\n  modulo,\n  /**\n   * Create a new Animated value that is limited between 2 values. It uses the\n   * difference between the last value so even if the value is far from the\n   * bounds it will start changing when the value starts getting closer again.\n   *\n   * See https://reactnative.dev/docs/animated#diffclamp\n   */\n  diffClamp,\n  /**\n   * Starts an animation after the given delay.\n   *\n   * See https://reactnative.dev/docs/animated#delay\n   */\n  delay,\n  /**\n   * Starts an array of animations in order, waiting for each to complete\n   * before starting the next. If the current running animation is stopped, no\n   * following animations will be started.\n   *\n   * See https://reactnative.dev/docs/animated#sequence\n   */\n  sequence,\n  /**\n   * Starts an array of animations all at the same time. By default, if one\n   * of the animations is stopped, they will all be stopped. You can override\n   * this with the `stopTogether` flag.\n   *\n   * See https://reactnative.dev/docs/animated#parallel\n   */\n  parallel,\n  /**\n   * Array of animations may run in parallel (overlap), but are started in\n   * sequence with successive delays.  Nice for doing trailing effects.\n   *\n   * See https://reactnative.dev/docs/animated#stagger\n   */\n  stagger,\n  /**\n   * Loops a given animation continuously, so that each time it reaches the\n   * end, it resets and begins again from the start.\n   *\n   * See https://reactnative.dev/docs/animated#loop\n   */\n  loop,\n  /**\n   * Takes an array of mappings and extracts values from each arg accordingly,\n   * then calls `setValue` on the mapped outputs.\n   *\n   * See https://reactnative.dev/docs/animated#event\n   */\n  event,\n  /**\n   * Make any React component Animatable.  Used to create `Animated.View`, etc.\n   *\n   * See https://reactnative.dev/docs/animated#createanimatedcomponent\n   */\n  createAnimatedComponent,\n  /**\n   * Imperative API to attach an animated value to an event on a view. Prefer\n   * using `Animated.event` with `useNativeDrive: true` if possible.\n   *\n   * See https://reactnative.dev/docs/animated#attachnativeevent\n   */\n  attachNativeEvent,\n  /**\n   * Advanced imperative API for snooping on animated events that are passed in\n   * through props. Use values directly where possible.\n   *\n   * See https://reactnative.dev/docs/animated#forkevent\n   */\n  forkEvent,\n  unforkEvent,\n  /**\n   * Expose Event class, so it can be used as a type for type checkers.\n   */\n  Event: AnimatedEvent\n};","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport { AnimatedEvent, attachNativeEvent } from './AnimatedEvent';\nimport AnimatedImplementation from './AnimatedImplementation';\nimport AnimatedInterpolation from './nodes/AnimatedInterpolation';\nimport AnimatedNode from './nodes/AnimatedNode';\nimport AnimatedValue from './nodes/AnimatedValue';\nimport AnimatedValueXY from './nodes/AnimatedValueXY';\nimport createAnimatedComponent from './createAnimatedComponent';\nimport AnimatedColor from './nodes/AnimatedColor';\n\n/**\n * Animations are a source of flakiness in snapshot testing. This mock replaces\n * animation functions from AnimatedImplementation with empty animations for\n * predictability in tests. When possible the animation will run immediately\n * to the final state.\n */\n\n// Prevent any callback invocation from recursively triggering another\n// callback, which may trigger another animation\nvar inAnimationCallback = false;\nfunction mockAnimationStart(start) {\n  return callback => {\n    var guardedCallback = callback == null ? callback : function () {\n      if (inAnimationCallback) {\n        console.warn('Ignoring recursive animation callback when running mock animations');\n        return;\n      }\n      inAnimationCallback = true;\n      try {\n        callback(...arguments);\n      } finally {\n        inAnimationCallback = false;\n      }\n    };\n    start(guardedCallback);\n  };\n}\nvar emptyAnimation = {\n  start: () => {},\n  stop: () => {},\n  reset: () => {},\n  _startNativeLoop: () => {},\n  _isUsingNativeDriver: () => {\n    return false;\n  }\n};\nvar mockCompositeAnimation = animations => _objectSpread(_objectSpread({}, emptyAnimation), {}, {\n  start: mockAnimationStart(callback => {\n    animations.forEach(animation => animation.start());\n    callback == null ? void 0 : callback({\n      finished: true\n    });\n  })\n});\nvar spring = function spring(value, config) {\n  var anyValue = value;\n  return _objectSpread(_objectSpread({}, emptyAnimation), {}, {\n    start: mockAnimationStart(callback => {\n      anyValue.setValue(config.toValue);\n      callback == null ? void 0 : callback({\n        finished: true\n      });\n    })\n  });\n};\nvar timing = function timing(value, config) {\n  var anyValue = value;\n  return _objectSpread(_objectSpread({}, emptyAnimation), {}, {\n    start: mockAnimationStart(callback => {\n      anyValue.setValue(config.toValue);\n      callback == null ? void 0 : callback({\n        finished: true\n      });\n    })\n  });\n};\nvar decay = function decay(value, config) {\n  return emptyAnimation;\n};\nvar sequence = function sequence(animations) {\n  return mockCompositeAnimation(animations);\n};\nvar parallel = function parallel(animations, config) {\n  return mockCompositeAnimation(animations);\n};\nvar delay = function delay(time) {\n  return emptyAnimation;\n};\nvar stagger = function stagger(time, animations) {\n  return mockCompositeAnimation(animations);\n};\nvar loop = function loop(animation, // $FlowFixMe[prop-missing]\n_temp) {\n  var _ref = _temp === void 0 ? {} : _temp,\n    _ref$iterations = _ref.iterations,\n    iterations = _ref$iterations === void 0 ? -1 : _ref$iterations;\n  return emptyAnimation;\n};\nexport default {\n  Value: AnimatedValue,\n  ValueXY: AnimatedValueXY,\n  Color: AnimatedColor,\n  Interpolation: AnimatedInterpolation,\n  Node: AnimatedNode,\n  decay,\n  timing,\n  spring,\n  add: AnimatedImplementation.add,\n  subtract: AnimatedImplementation.subtract,\n  divide: AnimatedImplementation.divide,\n  multiply: AnimatedImplementation.multiply,\n  modulo: AnimatedImplementation.modulo,\n  diffClamp: AnimatedImplementation.diffClamp,\n  delay,\n  sequence,\n  parallel,\n  stagger,\n  loop,\n  event: AnimatedImplementation.event,\n  createAnimatedComponent,\n  attachNativeEvent,\n  forkEvent: AnimatedImplementation.forkEvent,\n  unforkEvent: AnimatedImplementation.unforkEvent,\n  Event: AnimatedEvent\n};","import _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\nimport Platform from '../../../exports/Platform';\nimport FlatList from './components/AnimatedFlatList';\nimport Image from './components/AnimatedImage';\nimport ScrollView from './components/AnimatedScrollView';\nimport SectionList from './components/AnimatedSectionList';\nimport Text from './components/AnimatedText';\nimport View from './components/AnimatedView';\nimport AnimatedMock from './AnimatedMock';\nimport AnimatedImplementation from './AnimatedImplementation';\nvar Animated = Platform.isTesting ? AnimatedMock : AnimatedImplementation;\nexport default _objectSpread({\n  FlatList,\n  Image,\n  ScrollView,\n  SectionList,\n  Text,\n  View\n}, Animated);","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport Animated from '../../vendor/react-native/Animated/Animated';\nexport default Animated;","import { jsx } from \"react/jsx-runtime\";\nimport { Animated as RNAnimated } from \"react-native\";\nimport { FlatList } from \"./FlatList.js\";\nimport { Image } from \"./Image.js\";\nimport { ScrollView } from \"./ScrollView.js\";\nimport { SectionList } from \"./SectionList.js\";\nimport { Text } from \"./Text.js\";\nimport { View } from \"./View.js\";\nexport const Animated = {\n  ...RNAnimated,\n  FlatList: RNAnimated.createAnimatedComponent((props) => /* @__PURE__ */ jsx(FlatList, { scrollEventThrottle: 1e-4, ...props })),\n  ScrollView: RNAnimated.createAnimatedComponent((props) => /* @__PURE__ */ jsx(ScrollView, { scrollEventThrottle: 1e-4, ...props })),\n  SectionList: RNAnimated.createAnimatedComponent((props) => /* @__PURE__ */ jsx(SectionList, { scrollEventThrottle: 1e-4, ...props })),\n  Image: RNAnimated.createAnimatedComponent(Image),\n  Text: RNAnimated.createAnimatedComponent(Text),\n  View: RNAnimated.createAnimatedComponent(View)\n};\n","import { jsx } from \"react/jsx-runtime\";\nimport { FlatList as RNFlatList } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const FlatList = copyComponentProperties(RNFlatList, (props) => {\n  const hasSingleColumn = !(\"numColumns\" in props) || props.numColumns === 1;\n  return /* @__PURE__ */ jsx(\n    RNFlatList,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      columnWrapperStyle: hasSingleColumn ? void 0 : [toRNWClassName(props.columnWrapperClassName), props.columnWrapperStyle],\n      contentContainerStyle: [toRNWClassName(props.contentContainerClassName), props.contentContainerStyle],\n      ListFooterComponentStyle: [toRNWClassName(props.ListFooterComponentClassName), props.ListFooterComponentStyle],\n      ListHeaderComponentStyle: [toRNWClassName(props.ListHeaderComponentClassName), props.ListHeaderComponentStyle],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default FlatList;\n","import { jsx } from \"react/jsx-runtime\";\nimport { Image as RNImage } from \"react-native\";\nimport { useResolveClassNames } from \"../../hooks/index.js\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nimport { useUniwindAccent } from \"./useUniwindAccent.js\";\nexport const Image = copyComponentProperties(RNImage, (props) => {\n  const tintColor = useUniwindAccent(props.tintColorClassName);\n  const styles = useResolveClassNames(props.className ?? \"\");\n  const isUsingWidth = styles.width !== void 0;\n  const isUsingHeight = styles.height !== void 0;\n  const styleReset = {\n    width: isUsingWidth ? \"\" : void 0,\n    height: isUsingHeight ? \"\" : void 0\n  };\n  return /* @__PURE__ */ jsx(\n    RNImage,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), styleReset, props.style],\n      tintColor: props.tintColor ?? tintColor,\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default Image;\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use strict';\n\nimport canUseDOM from '../canUseDom';\nvar emptyFunction = () => {};\nfunction supportsPassiveEvents() {\n  var supported = false;\n  // Check if browser supports event with passive listeners\n  // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n  if (canUseDOM) {\n    try {\n      var options = {};\n      Object.defineProperty(options, 'passive', {\n        get() {\n          supported = true;\n          return false;\n        }\n      });\n      window.addEventListener('test', null, options);\n      window.removeEventListener('test', null, options);\n    } catch (e) {}\n  }\n  return supported;\n}\nvar canUsePassiveEvents = supportsPassiveEvents();\nfunction getOptions(options) {\n  if (options == null) {\n    return false;\n  }\n  return canUsePassiveEvents ? options : Boolean(options.capture);\n}\n\n/**\n * Shim generic API compatibility with ReactDOM's synthetic events, without needing the\n * large amount of code ReactDOM uses to do this. Ideally we wouldn't use a synthetic\n * event wrapper at all.\n */\nfunction isPropagationStopped() {\n  return this.cancelBubble;\n}\nfunction isDefaultPrevented() {\n  return this.defaultPrevented;\n}\nfunction normalizeEvent(event) {\n  event.nativeEvent = event;\n  event.persist = emptyFunction;\n  event.isDefaultPrevented = isDefaultPrevented;\n  event.isPropagationStopped = isPropagationStopped;\n  return event;\n}\n\n/**\n *\n */\nexport function addEventListener(target, type, listener, options) {\n  var opts = getOptions(options);\n  var compatListener = e => listener(normalizeEvent(e));\n  target.addEventListener(type, compatListener, opts);\n  return function removeEventListener() {\n    if (target != null) {\n      target.removeEventListener(type, compatListener, opts);\n    }\n  };\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { addEventListener } from '../addEventListener';\nimport canUseDOM from '../canUseDom';\nvar supportsPointerEvent = () => !!(typeof window !== 'undefined' && window.PointerEvent != null);\nvar activeModality = 'keyboard';\nvar modality = 'keyboard';\nvar previousModality;\nvar previousActiveModality;\nvar isEmulatingMouseEvents = false;\nvar listeners = new Set();\nvar KEYBOARD = 'keyboard';\nvar MOUSE = 'mouse';\nvar TOUCH = 'touch';\nvar BLUR = 'blur';\nvar CONTEXTMENU = 'contextmenu';\nvar FOCUS = 'focus';\nvar KEYDOWN = 'keydown';\nvar MOUSEDOWN = 'mousedown';\nvar MOUSEMOVE = 'mousemove';\nvar MOUSEUP = 'mouseup';\nvar POINTERDOWN = 'pointerdown';\nvar POINTERMOVE = 'pointermove';\nvar SCROLL = 'scroll';\nvar SELECTIONCHANGE = 'selectionchange';\nvar TOUCHCANCEL = 'touchcancel';\nvar TOUCHMOVE = 'touchmove';\nvar TOUCHSTART = 'touchstart';\nvar VISIBILITYCHANGE = 'visibilitychange';\nvar bubbleOptions = {\n  passive: true\n};\nvar captureOptions = {\n  capture: true,\n  passive: true\n};\nfunction restoreModality() {\n  if (previousModality != null || previousActiveModality != null) {\n    if (previousModality != null) {\n      modality = previousModality;\n      previousModality = null;\n    }\n    if (previousActiveModality != null) {\n      activeModality = previousActiveModality;\n      previousActiveModality = null;\n    }\n    callListeners();\n  }\n}\nfunction onBlurWindow() {\n  previousModality = modality;\n  previousActiveModality = activeModality;\n  activeModality = KEYBOARD;\n  modality = KEYBOARD;\n  callListeners();\n  // for fallback events\n  isEmulatingMouseEvents = false;\n}\nfunction onFocusWindow() {\n  restoreModality();\n}\nfunction onKeyDown(event) {\n  if (event.metaKey || event.altKey || event.ctrlKey) {\n    return;\n  }\n  if (modality !== KEYBOARD) {\n    modality = KEYBOARD;\n    activeModality = KEYBOARD;\n    callListeners();\n  }\n}\nfunction onVisibilityChange() {\n  if (document.visibilityState !== 'hidden') {\n    restoreModality();\n  }\n}\nfunction onPointerish(event) {\n  var eventType = event.type;\n  if (supportsPointerEvent()) {\n    if (eventType === POINTERDOWN) {\n      if (activeModality !== event.pointerType) {\n        modality = event.pointerType;\n        activeModality = event.pointerType;\n        callListeners();\n      }\n      return;\n    }\n    if (eventType === POINTERMOVE) {\n      if (modality !== event.pointerType) {\n        modality = event.pointerType;\n        callListeners();\n      }\n      return;\n    }\n  }\n  // Fallback for non-PointerEvent environment\n  else {\n    if (!isEmulatingMouseEvents) {\n      if (eventType === MOUSEDOWN) {\n        if (activeModality !== MOUSE) {\n          modality = MOUSE;\n          activeModality = MOUSE;\n          callListeners();\n        }\n      }\n      if (eventType === MOUSEMOVE) {\n        if (modality !== MOUSE) {\n          modality = MOUSE;\n          callListeners();\n        }\n      }\n    }\n\n    // Flag when browser may produce emulated events\n    if (eventType === TOUCHSTART) {\n      isEmulatingMouseEvents = true;\n      if (event.touches && event.touches.length > 1) {\n        isEmulatingMouseEvents = false;\n      }\n      if (activeModality !== TOUCH) {\n        modality = TOUCH;\n        activeModality = TOUCH;\n        callListeners();\n      }\n      return;\n    }\n\n    // Remove flag after emulated events are finished or cancelled, and if an\n    // event occurs that cuts short a touch event sequence.\n    if (eventType === CONTEXTMENU || eventType === MOUSEUP || eventType === SELECTIONCHANGE || eventType === SCROLL || eventType === TOUCHCANCEL || eventType === TOUCHMOVE) {\n      isEmulatingMouseEvents = false;\n    }\n  }\n}\nif (canUseDOM) {\n  // Window events\n  addEventListener(window, BLUR, onBlurWindow, bubbleOptions);\n  addEventListener(window, FOCUS, onFocusWindow, bubbleOptions);\n  // Must be capture phase because 'stopPropagation' might prevent these\n  // events bubbling to the document.\n  addEventListener(document, KEYDOWN, onKeyDown, captureOptions);\n  addEventListener(document, VISIBILITYCHANGE, onVisibilityChange, captureOptions);\n  addEventListener(document, POINTERDOWN, onPointerish, captureOptions);\n  addEventListener(document, POINTERMOVE, onPointerish, captureOptions);\n  // Fallback events\n  addEventListener(document, CONTEXTMENU, onPointerish, captureOptions);\n  addEventListener(document, MOUSEDOWN, onPointerish, captureOptions);\n  addEventListener(document, MOUSEMOVE, onPointerish, captureOptions);\n  addEventListener(document, MOUSEUP, onPointerish, captureOptions);\n  addEventListener(document, TOUCHCANCEL, onPointerish, captureOptions);\n  addEventListener(document, TOUCHMOVE, onPointerish, captureOptions);\n  addEventListener(document, TOUCHSTART, onPointerish, captureOptions);\n  addEventListener(document, SELECTIONCHANGE, onPointerish, captureOptions);\n  addEventListener(document, SCROLL, onPointerish, captureOptions);\n}\nfunction callListeners() {\n  var value = {\n    activeModality,\n    modality\n  };\n  listeners.forEach(listener => {\n    listener(value);\n  });\n}\nexport function getActiveModality() {\n  return activeModality;\n}\nexport function getModality() {\n  return modality;\n}\nexport function addModalityListener(listener) {\n  listeners.add(listener);\n  return () => {\n    listeners.delete(listener);\n  };\n}\nexport function testOnly_resetActiveModality() {\n  isEmulatingMouseEvents = false;\n  activeModality = KEYBOARD;\n  modality = KEYBOARD;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { addEventListener } from '../addEventListener';\nimport useLayoutEffect from '../useLayoutEffect';\nimport useStable from '../useStable';\n/**\n * This can be used with any event type include custom events.\n *\n * const click = useEvent('click', options);\n * useEffect(() => {\n *   click.setListener(target, onClick);\n *   return () => click.clear();\n * }).\n */\nexport default function useEvent(eventType, options) {\n  var targetListeners = useStable(() => new Map());\n  var addListener = useStable(() => {\n    return (target, callback) => {\n      var removeTargetListener = targetListeners.get(target);\n      if (removeTargetListener != null) {\n        removeTargetListener();\n      }\n      if (callback == null) {\n        targetListeners.delete(target);\n        callback = () => {};\n      }\n      var removeEventListener = addEventListener(target, eventType, callback, options);\n      targetListeners.set(target, removeEventListener);\n      return removeEventListener;\n    };\n  });\n  useLayoutEffect(() => {\n    return () => {\n      targetListeners.forEach(removeListener => {\n        removeListener();\n      });\n      targetListeners.clear();\n    };\n  }, [targetListeners]);\n  return addListener;\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport { getModality } from '../modality';\nimport useEvent from '../useEvent';\nimport useLayoutEffect from '../useLayoutEffect';\n\n/**\n * Types\n */\n\n/**\n * Implementation\n */\n\nvar emptyObject = {};\nvar opts = {\n  passive: true\n};\nvar lockEventType = 'react-gui:hover:lock';\nvar unlockEventType = 'react-gui:hover:unlock';\nvar supportsPointerEvent = () => !!(typeof window !== 'undefined' && window.PointerEvent != null);\nfunction dispatchCustomEvent(target, type, payload) {\n  var event = document.createEvent('CustomEvent');\n  var _ref = payload || emptyObject,\n    _ref$bubbles = _ref.bubbles,\n    bubbles = _ref$bubbles === void 0 ? true : _ref$bubbles,\n    _ref$cancelable = _ref.cancelable,\n    cancelable = _ref$cancelable === void 0 ? true : _ref$cancelable,\n    detail = _ref.detail;\n  event.initCustomEvent(type, bubbles, cancelable, detail);\n  target.dispatchEvent(event);\n}\n\n// This accounts for the non-PointerEvent fallback events.\nfunction getPointerType(event) {\n  var pointerType = event.pointerType;\n  return pointerType != null ? pointerType : getModality();\n}\nexport default function useHover(targetRef, config) {\n  var contain = config.contain,\n    disabled = config.disabled,\n    onHoverStart = config.onHoverStart,\n    onHoverChange = config.onHoverChange,\n    onHoverUpdate = config.onHoverUpdate,\n    onHoverEnd = config.onHoverEnd;\n  var canUsePE = supportsPointerEvent();\n  var addMoveListener = useEvent(canUsePE ? 'pointermove' : 'mousemove', opts);\n  var addEnterListener = useEvent(canUsePE ? 'pointerenter' : 'mouseenter', opts);\n  var addLeaveListener = useEvent(canUsePE ? 'pointerleave' : 'mouseleave', opts);\n  // These custom events are used to implement the \"contain\" prop.\n  var addLockListener = useEvent(lockEventType, opts);\n  var addUnlockListener = useEvent(unlockEventType, opts);\n  useLayoutEffect(() => {\n    var target = targetRef.current;\n    if (target !== null) {\n      /**\n       * End the hover gesture\n       */\n      var hoverEnd = function hoverEnd(e) {\n        if (onHoverEnd != null) {\n          onHoverEnd(e);\n        }\n        if (onHoverChange != null) {\n          onHoverChange(false);\n        }\n        // Remove the listeners once finished.\n        addMoveListener(target, null);\n        addLeaveListener(target, null);\n      };\n\n      /**\n       * Leave element\n       */\n      var leaveListener = function leaveListener(e) {\n        var target = targetRef.current;\n        if (target != null && getPointerType(e) !== 'touch') {\n          if (contain) {\n            dispatchCustomEvent(target, unlockEventType);\n          }\n          hoverEnd(e);\n        }\n      };\n\n      /**\n       * Move within element\n       */\n      var moveListener = function moveListener(e) {\n        if (getPointerType(e) !== 'touch') {\n          if (onHoverUpdate != null) {\n            // Not all browsers have these properties\n            if (e.x == null) {\n              e.x = e.clientX;\n            }\n            if (e.y == null) {\n              e.y = e.clientY;\n            }\n            onHoverUpdate(e);\n          }\n        }\n      };\n\n      /**\n       * Start the hover gesture\n       */\n      var hoverStart = function hoverStart(e) {\n        if (onHoverStart != null) {\n          onHoverStart(e);\n        }\n        if (onHoverChange != null) {\n          onHoverChange(true);\n        }\n        // Set the listeners needed for the rest of the hover gesture.\n        if (onHoverUpdate != null) {\n          addMoveListener(target, !disabled ? moveListener : null);\n        }\n        addLeaveListener(target, !disabled ? leaveListener : null);\n      };\n\n      /**\n       * Enter element\n       */\n      var enterListener = function enterListener(e) {\n        var target = targetRef.current;\n        if (target != null && getPointerType(e) !== 'touch') {\n          if (contain) {\n            dispatchCustomEvent(target, lockEventType);\n          }\n          hoverStart(e);\n          var lockListener = function lockListener(lockEvent) {\n            if (lockEvent.target !== target) {\n              hoverEnd(e);\n            }\n          };\n          var unlockListener = function unlockListener(lockEvent) {\n            if (lockEvent.target !== target) {\n              hoverStart(e);\n            }\n          };\n          addLockListener(target, !disabled ? lockListener : null);\n          addUnlockListener(target, !disabled ? unlockListener : null);\n        }\n      };\n      addEnterListener(target, !disabled ? enterListener : null);\n    }\n  }, [addEnterListener, addMoveListener, addLeaveListener, addLockListener, addUnlockListener, contain, disabled, onHoverStart, onHoverChange, onHoverUpdate, onHoverEnd, targetRef]);\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"children\", \"delayLongPress\", \"delayPressIn\", \"delayPressOut\", \"disabled\", \"onBlur\", \"onContextMenu\", \"onFocus\", \"onHoverIn\", \"onHoverOut\", \"onKeyDown\", \"onLongPress\", \"onPress\", \"onPressMove\", \"onPressIn\", \"onPressOut\", \"style\", \"tabIndex\", \"testOnly_hovered\", \"testOnly_pressed\"];\nimport * as React from 'react';\nimport { forwardRef, memo, useMemo, useState, useRef } from 'react';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport useHover from '../../modules/useHover';\nimport usePressEvents from '../../modules/usePressEvents';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\n/**\n * Component used to build display components that should respond to whether the\n * component is currently pressed or not.\n */\nfunction Pressable(props, forwardedRef) {\n  var children = props.children,\n    delayLongPress = props.delayLongPress,\n    delayPressIn = props.delayPressIn,\n    delayPressOut = props.delayPressOut,\n    disabled = props.disabled,\n    onBlur = props.onBlur,\n    onContextMenu = props.onContextMenu,\n    onFocus = props.onFocus,\n    onHoverIn = props.onHoverIn,\n    onHoverOut = props.onHoverOut,\n    onKeyDown = props.onKeyDown,\n    onLongPress = props.onLongPress,\n    onPress = props.onPress,\n    onPressMove = props.onPressMove,\n    onPressIn = props.onPressIn,\n    onPressOut = props.onPressOut,\n    style = props.style,\n    tabIndex = props.tabIndex,\n    testOnly_hovered = props.testOnly_hovered,\n    testOnly_pressed = props.testOnly_pressed,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  var _useForceableState = useForceableState(testOnly_hovered === true),\n    hovered = _useForceableState[0],\n    setHovered = _useForceableState[1];\n  var _useForceableState2 = useForceableState(false),\n    focused = _useForceableState2[0],\n    setFocused = _useForceableState2[1];\n  var _useForceableState3 = useForceableState(testOnly_pressed === true),\n    pressed = _useForceableState3[0],\n    setPressed = _useForceableState3[1];\n  var hostRef = useRef(null);\n  var setRef = useMergeRefs(forwardedRef, hostRef);\n  var pressConfig = useMemo(() => ({\n    delayLongPress,\n    delayPressStart: delayPressIn,\n    delayPressEnd: delayPressOut,\n    disabled,\n    onLongPress,\n    onPress,\n    onPressChange: setPressed,\n    onPressStart: onPressIn,\n    onPressMove,\n    onPressEnd: onPressOut\n  }), [delayLongPress, delayPressIn, delayPressOut, disabled, onLongPress, onPress, onPressIn, onPressMove, onPressOut, setPressed]);\n  var pressEventHandlers = usePressEvents(hostRef, pressConfig);\n  var onContextMenuPress = pressEventHandlers.onContextMenu,\n    onKeyDownPress = pressEventHandlers.onKeyDown;\n  useHover(hostRef, {\n    contain: true,\n    disabled,\n    onHoverChange: setHovered,\n    onHoverStart: onHoverIn,\n    onHoverEnd: onHoverOut\n  });\n  var interactionState = {\n    hovered,\n    focused,\n    pressed\n  };\n  var blurHandler = React.useCallback(e => {\n    if (e.nativeEvent.target === hostRef.current) {\n      setFocused(false);\n      if (onBlur != null) {\n        onBlur(e);\n      }\n    }\n  }, [hostRef, setFocused, onBlur]);\n  var focusHandler = React.useCallback(e => {\n    if (e.nativeEvent.target === hostRef.current) {\n      setFocused(true);\n      if (onFocus != null) {\n        onFocus(e);\n      }\n    }\n  }, [hostRef, setFocused, onFocus]);\n  var contextMenuHandler = React.useCallback(e => {\n    if (onContextMenuPress != null) {\n      onContextMenuPress(e);\n    }\n    if (onContextMenu != null) {\n      onContextMenu(e);\n    }\n  }, [onContextMenu, onContextMenuPress]);\n  var keyDownHandler = React.useCallback(e => {\n    if (onKeyDownPress != null) {\n      onKeyDownPress(e);\n    }\n    if (onKeyDown != null) {\n      onKeyDown(e);\n    }\n  }, [onKeyDown, onKeyDownPress]);\n  var _tabIndex;\n  if (tabIndex !== undefined) {\n    _tabIndex = tabIndex;\n  } else {\n    _tabIndex = disabled ? -1 : 0;\n  }\n  return /*#__PURE__*/React.createElement(View, _extends({}, rest, pressEventHandlers, {\n    \"aria-disabled\": disabled,\n    onBlur: blurHandler,\n    onContextMenu: contextMenuHandler,\n    onFocus: focusHandler,\n    onKeyDown: keyDownHandler,\n    ref: setRef,\n    style: [disabled ? styles.disabled : styles.active, typeof style === 'function' ? style(interactionState) : style],\n    tabIndex: _tabIndex\n  }), typeof children === 'function' ? children(interactionState) : children);\n}\nfunction useForceableState(forced) {\n  var _useState = useState(false),\n    bool = _useState[0],\n    setBool = _useState[1];\n  return [bool || forced, setBool];\n}\nvar styles = StyleSheet.create({\n  active: {\n    cursor: 'pointer',\n    touchAction: 'manipulation'\n  },\n  disabled: {\n    pointerEvents: 'box-none'\n  }\n});\nvar MemoedPressable = /*#__PURE__*/memo(/*#__PURE__*/forwardRef(Pressable));\nMemoedPressable.displayName = 'Pressable';\nexport default MemoedPressable;","import { jsx } from \"react/jsx-runtime\";\nimport { Pressable as RNPressable } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const Pressable = copyComponentProperties(RNPressable, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNPressable,\n    {\n      ...props,\n      style: (state) => [toRNWClassName(props.className), typeof props.style === \"function\" ? props.style(state) : props.style],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default Pressable;\n","import { jsx } from \"react/jsx-runtime\";\nimport { RefreshControl as RNRefreshControl } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const RefreshControl = copyComponentProperties(RNRefreshControl, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNRefreshControl,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default RefreshControl;\n","import { jsx } from \"react/jsx-runtime\";\nimport { ScrollView as RNScrollView } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const ScrollView = copyComponentProperties(RNScrollView, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNScrollView,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      contentContainerStyle: [toRNWClassName(props.contentContainerClassName), props.contentContainerStyle],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default ScrollView;\n","import { jsx } from \"react/jsx-runtime\";\nimport { SectionList as RNSectionList } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const SectionList = copyComponentProperties(RNSectionList, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNSectionList,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      contentContainerStyle: [toRNWClassName(props.contentContainerClassName), props.contentContainerStyle],\n      ListFooterComponentStyle: [toRNWClassName(props.ListFooterComponentClassName), props.ListFooterComponentStyle],\n      ListHeaderComponentStyle: [toRNWClassName(props.ListHeaderComponentClassName), props.ListHeaderComponentStyle],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default SectionList;\n","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar CSS_UNIT_RE = /^[+-]?\\d*(?:\\.\\d+)?(?:[Ee][+-]?\\d+)?(%|\\w*)/;\nvar getUnit = str => str.match(CSS_UNIT_RE)[1];\nvar isNumeric = n => {\n  return !isNaN(parseFloat(n)) && isFinite(n);\n};\nvar multiplyStyleLengthValue = (value, multiple) => {\n  if (typeof value === 'string') {\n    var number = parseFloat(value) * multiple;\n    var unit = getUnit(value);\n    return \"\" + number + unit;\n  } else if (isNumeric(value)) {\n    return value * multiple;\n  }\n};\nexport default multiplyStyleLengthValue;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"aria-label\", \"accessibilityLabel\", \"activeThumbColor\", \"activeTrackColor\", \"disabled\", \"onValueChange\", \"style\", \"thumbColor\", \"trackColor\", \"value\"];\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport multiplyStyleLengthValue from '../../modules/multiplyStyleLengthValue';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar emptyObject = {};\nvar thumbDefaultBoxShadow = '0px 1px 3px rgba(0,0,0,0.5)';\nvar thumbFocusedBoxShadow = thumbDefaultBoxShadow + \", 0 0 0 10px rgba(0,0,0,0.1)\";\nvar defaultActiveTrackColor = '#A3D3CF';\nvar defaultTrackColor = '#939393';\nvar defaultDisabledTrackColor = '#D5D5D5';\nvar defaultActiveThumbColor = '#009688';\nvar defaultThumbColor = '#FAFAFA';\nvar defaultDisabledThumbColor = '#BDBDBD';\nvar Switch = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var ariaLabel = props['aria-label'],\n    accessibilityLabel = props.accessibilityLabel,\n    activeThumbColor = props.activeThumbColor,\n    activeTrackColor = props.activeTrackColor,\n    _props$disabled = props.disabled,\n    disabled = _props$disabled === void 0 ? false : _props$disabled,\n    onValueChange = props.onValueChange,\n    _props$style = props.style,\n    style = _props$style === void 0 ? emptyObject : _props$style,\n    thumbColor = props.thumbColor,\n    trackColor = props.trackColor,\n    _props$value = props.value,\n    value = _props$value === void 0 ? false : _props$value,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  var thumbRef = React.useRef(null);\n  function handleChange(event) {\n    if (onValueChange != null) {\n      onValueChange(event.nativeEvent.target.checked);\n    }\n  }\n  function handleFocusState(event) {\n    var isFocused = event.nativeEvent.type === 'focus';\n    var boxShadow = isFocused ? thumbFocusedBoxShadow : thumbDefaultBoxShadow;\n    if (thumbRef.current != null) {\n      thumbRef.current.style.boxShadow = boxShadow;\n    }\n  }\n  var _StyleSheet$flatten = StyleSheet.flatten(style),\n    styleHeight = _StyleSheet$flatten.height,\n    styleWidth = _StyleSheet$flatten.width;\n  var height = styleHeight || '20px';\n  var minWidth = multiplyStyleLengthValue(height, 2);\n  var width = styleWidth > minWidth ? styleWidth : minWidth;\n  var trackBorderRadius = multiplyStyleLengthValue(height, 0.5);\n  var trackCurrentColor = function () {\n    if (value === true) {\n      if (trackColor != null && typeof trackColor === 'object') {\n        return trackColor.true;\n      } else {\n        return activeTrackColor !== null && activeTrackColor !== void 0 ? activeTrackColor : defaultActiveTrackColor;\n      }\n    } else {\n      if (trackColor != null && typeof trackColor === 'object') {\n        return trackColor.false;\n      } else {\n        return trackColor !== null && trackColor !== void 0 ? trackColor : defaultTrackColor;\n      }\n    }\n  }();\n  var thumbCurrentColor = value ? activeThumbColor !== null && activeThumbColor !== void 0 ? activeThumbColor : defaultActiveThumbColor : thumbColor !== null && thumbColor !== void 0 ? thumbColor : defaultThumbColor;\n  var thumbHeight = height;\n  var thumbWidth = thumbHeight;\n  var rootStyle = [styles.root, style, disabled && styles.cursorDefault, {\n    height,\n    width\n  }];\n  var disabledTrackColor = function () {\n    if (value === true) {\n      if (typeof activeTrackColor === 'string' && activeTrackColor != null || typeof trackColor === 'object' && trackColor != null && trackColor.true) {\n        return trackCurrentColor;\n      } else {\n        return defaultDisabledTrackColor;\n      }\n    } else {\n      if (typeof trackColor === 'string' && trackColor != null || typeof trackColor === 'object' && trackColor != null && trackColor.false) {\n        return trackCurrentColor;\n      } else {\n        return defaultDisabledTrackColor;\n      }\n    }\n  }();\n  var disabledThumbColor = function () {\n    if (value === true) {\n      if (activeThumbColor == null) {\n        return defaultDisabledThumbColor;\n      } else {\n        return thumbCurrentColor;\n      }\n    } else {\n      if (thumbColor == null) {\n        return defaultDisabledThumbColor;\n      } else {\n        return thumbCurrentColor;\n      }\n    }\n  }();\n  var trackStyle = [styles.track, {\n    backgroundColor: disabled ? disabledTrackColor : trackCurrentColor,\n    borderRadius: trackBorderRadius\n  }];\n  var thumbStyle = [styles.thumb, value && styles.thumbActive, {\n    backgroundColor: disabled ? disabledThumbColor : thumbCurrentColor,\n    height: thumbHeight,\n    marginStart: value ? multiplyStyleLengthValue(thumbWidth, -1) : 0,\n    width: thumbWidth\n  }];\n  var nativeControl = createElement('input', {\n    'aria-label': ariaLabel || accessibilityLabel,\n    checked: value,\n    disabled: disabled,\n    onBlur: handleFocusState,\n    onChange: handleChange,\n    onFocus: handleFocusState,\n    ref: forwardedRef,\n    style: [styles.nativeControl, styles.cursorInherit],\n    type: 'checkbox',\n    role: 'switch'\n  });\n  return /*#__PURE__*/React.createElement(View, _extends({}, other, {\n    style: rootStyle\n  }), /*#__PURE__*/React.createElement(View, {\n    style: trackStyle\n  }), /*#__PURE__*/React.createElement(View, {\n    ref: thumbRef,\n    style: thumbStyle\n  }), nativeControl);\n});\nSwitch.displayName = 'Switch';\nvar styles = StyleSheet.create({\n  root: {\n    cursor: 'pointer',\n    userSelect: 'none'\n  },\n  cursorDefault: {\n    cursor: 'default'\n  },\n  cursorInherit: {\n    cursor: 'inherit'\n  },\n  track: _objectSpread(_objectSpread({\n    forcedColorAdjust: 'none'\n  }, StyleSheet.absoluteFillObject), {}, {\n    height: '70%',\n    margin: 'auto',\n    transitionDuration: '0.1s',\n    width: '100%'\n  }),\n  thumb: {\n    forcedColorAdjust: 'none',\n    alignSelf: 'flex-start',\n    borderRadius: '100%',\n    boxShadow: thumbDefaultBoxShadow,\n    start: '0%',\n    transform: 'translateZ(0)',\n    transitionDuration: '0.1s'\n  },\n  thumbActive: {\n    insetInlineStart: '100%'\n  },\n  nativeControl: _objectSpread(_objectSpread({}, StyleSheet.absoluteFillObject), {}, {\n    height: '100%',\n    margin: 0,\n    appearance: 'none',\n    padding: 0,\n    width: '100%'\n  })\n});\nexport default Switch;","import { jsx } from \"react/jsx-runtime\";\nimport { Switch as RNSwitch } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nimport { useUniwindAccent } from \"./useUniwindAccent.js\";\nexport const Switch = copyComponentProperties(RNSwitch, (props) => {\n  const trackColorOn = useUniwindAccent(props.trackColorOnClassName);\n  const trackColorOff = useUniwindAccent(props.trackColorOffClassName);\n  const thumbColor = useUniwindAccent(props.thumbColorClassName);\n  return /* @__PURE__ */ jsx(\n    RNSwitch,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      thumbColor: props.thumbColor ?? thumbColor,\n      trackColor: { true: props.trackColor?.true ?? trackColorOn, false: props.trackColor?.false ?? trackColorOff },\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default Switch;\n","import { jsx } from \"react/jsx-runtime\";\nimport { Text as RNText } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const Text = copyComponentProperties(RNText, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNText,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default Text;\n","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport * as forwardedProps from '../../modules/forwardedProps';\nimport pick from '../../modules/pick';\nimport useElementLayout from '../../modules/useElementLayout';\nimport useLayoutEffect from '../../modules/useLayoutEffect';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePlatformMethods from '../../modules/usePlatformMethods';\nimport useResponderEvents from '../../modules/useResponderEvents';\nimport { getLocaleDirection, useLocaleContext } from '../../modules/useLocale';\nimport StyleSheet from '../StyleSheet';\nimport TextInputState from '../../modules/TextInputState';\n//import { warnOnce } from '../../modules/warnOnce';\n\n/**\n * Determines whether a 'selection' prop differs from a node's existing\n * selection state.\n */\nvar isSelectionStale = (node, selection) => {\n  var selectionEnd = node.selectionEnd,\n    selectionStart = node.selectionStart;\n  var start = selection.start,\n    end = selection.end;\n  return start !== selectionStart || end !== selectionEnd;\n};\n\n/**\n * Certain input types do no support 'selectSelectionRange' and will throw an\n * error.\n */\nvar setSelection = (node, selection) => {\n  if (isSelectionStale(node, selection)) {\n    var start = selection.start,\n      end = selection.end;\n    try {\n      node.setSelectionRange(start, end || start);\n    } catch (e) {}\n  }\n};\nvar forwardPropsList = Object.assign({}, forwardedProps.defaultProps, forwardedProps.accessibilityProps, forwardedProps.clickProps, forwardedProps.focusProps, forwardedProps.keyboardProps, forwardedProps.mouseProps, forwardedProps.touchProps, forwardedProps.styleProps, {\n  autoCapitalize: true,\n  autoComplete: true,\n  autoCorrect: true,\n  autoFocus: true,\n  defaultValue: true,\n  disabled: true,\n  lang: true,\n  maxLength: true,\n  onChange: true,\n  onScroll: true,\n  placeholder: true,\n  pointerEvents: true,\n  readOnly: true,\n  rows: true,\n  spellCheck: true,\n  value: true,\n  type: true\n});\nvar pickProps = props => pick(props, forwardPropsList);\n\n// If an Input Method Editor is processing key input, the 'keyCode' is 229.\n// https://www.w3.org/TR/uievents/#determine-keydown-keyup-keyCode\nfunction isEventComposing(nativeEvent) {\n  return nativeEvent.isComposing || nativeEvent.keyCode === 229;\n}\nvar focusTimeout = null;\nvar TextInput = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var _props$autoCapitalize = props.autoCapitalize,\n    autoCapitalize = _props$autoCapitalize === void 0 ? 'sentences' : _props$autoCapitalize,\n    autoComplete = props.autoComplete,\n    autoCompleteType = props.autoCompleteType,\n    _props$autoCorrect = props.autoCorrect,\n    autoCorrect = _props$autoCorrect === void 0 ? true : _props$autoCorrect,\n    blurOnSubmit = props.blurOnSubmit,\n    caretHidden = props.caretHidden,\n    clearTextOnFocus = props.clearTextOnFocus,\n    dir = props.dir,\n    editable = props.editable,\n    enterKeyHint = props.enterKeyHint,\n    inputMode = props.inputMode,\n    keyboardType = props.keyboardType,\n    _props$multiline = props.multiline,\n    multiline = _props$multiline === void 0 ? false : _props$multiline,\n    numberOfLines = props.numberOfLines,\n    onBlur = props.onBlur,\n    onChange = props.onChange,\n    onChangeText = props.onChangeText,\n    onContentSizeChange = props.onContentSizeChange,\n    onFocus = props.onFocus,\n    onKeyPress = props.onKeyPress,\n    onLayout = props.onLayout,\n    onMoveShouldSetResponder = props.onMoveShouldSetResponder,\n    onMoveShouldSetResponderCapture = props.onMoveShouldSetResponderCapture,\n    onResponderEnd = props.onResponderEnd,\n    onResponderGrant = props.onResponderGrant,\n    onResponderMove = props.onResponderMove,\n    onResponderReject = props.onResponderReject,\n    onResponderRelease = props.onResponderRelease,\n    onResponderStart = props.onResponderStart,\n    onResponderTerminate = props.onResponderTerminate,\n    onResponderTerminationRequest = props.onResponderTerminationRequest,\n    onScrollShouldSetResponder = props.onScrollShouldSetResponder,\n    onScrollShouldSetResponderCapture = props.onScrollShouldSetResponderCapture,\n    onSelectionChange = props.onSelectionChange,\n    onSelectionChangeShouldSetResponder = props.onSelectionChangeShouldSetResponder,\n    onSelectionChangeShouldSetResponderCapture = props.onSelectionChangeShouldSetResponderCapture,\n    onStartShouldSetResponder = props.onStartShouldSetResponder,\n    onStartShouldSetResponderCapture = props.onStartShouldSetResponderCapture,\n    onSubmitEditing = props.onSubmitEditing,\n    placeholderTextColor = props.placeholderTextColor,\n    _props$readOnly = props.readOnly,\n    readOnly = _props$readOnly === void 0 ? false : _props$readOnly,\n    returnKeyType = props.returnKeyType,\n    rows = props.rows,\n    _props$secureTextEntr = props.secureTextEntry,\n    secureTextEntry = _props$secureTextEntr === void 0 ? false : _props$secureTextEntr,\n    selection = props.selection,\n    selectTextOnFocus = props.selectTextOnFocus,\n    showSoftInputOnFocus = props.showSoftInputOnFocus,\n    spellCheck = props.spellCheck;\n  var type;\n  var _inputMode;\n  if (inputMode != null) {\n    _inputMode = inputMode;\n    if (inputMode === 'email') {\n      type = 'email';\n    } else if (inputMode === 'tel') {\n      type = 'tel';\n    } else if (inputMode === 'search') {\n      type = 'search';\n    } else if (inputMode === 'url') {\n      type = 'url';\n    } else {\n      type = 'text';\n    }\n  } else if (keyboardType != null) {\n    // warnOnce('keyboardType', 'keyboardType is deprecated. Use inputMode.');\n    switch (keyboardType) {\n      case 'email-address':\n        type = 'email';\n        break;\n      case 'number-pad':\n      case 'numeric':\n        _inputMode = 'numeric';\n        break;\n      case 'decimal-pad':\n        _inputMode = 'decimal';\n        break;\n      case 'phone-pad':\n        type = 'tel';\n        break;\n      case 'search':\n      case 'web-search':\n        type = 'search';\n        break;\n      case 'url':\n        type = 'url';\n        break;\n      default:\n        type = 'text';\n    }\n  }\n  if (secureTextEntry) {\n    type = 'password';\n  }\n  var dimensions = React.useRef({\n    height: null,\n    width: null\n  });\n  var hostRef = React.useRef(null);\n  var prevSelection = React.useRef(null);\n  var prevSecureTextEntry = React.useRef(false);\n  React.useEffect(() => {\n    if (hostRef.current && prevSelection.current) {\n      setSelection(hostRef.current, prevSelection.current);\n    }\n    prevSecureTextEntry.current = secureTextEntry;\n  }, [secureTextEntry]);\n  var handleContentSizeChange = React.useCallback(hostNode => {\n    if (multiline && onContentSizeChange && hostNode != null) {\n      var newHeight = hostNode.scrollHeight;\n      var newWidth = hostNode.scrollWidth;\n      if (newHeight !== dimensions.current.height || newWidth !== dimensions.current.width) {\n        dimensions.current.height = newHeight;\n        dimensions.current.width = newWidth;\n        onContentSizeChange({\n          nativeEvent: {\n            contentSize: {\n              height: dimensions.current.height,\n              width: dimensions.current.width\n            }\n          }\n        });\n      }\n    }\n  }, [multiline, onContentSizeChange]);\n  var imperativeRef = React.useMemo(() => hostNode => {\n    // TextInput needs to add more methods to the hostNode in addition to those\n    // added by `usePlatformMethods`. This is temporarily until an API like\n    // `TextInput.clear(hostRef)` is added to React Native.\n    if (hostNode != null) {\n      hostNode.clear = function () {\n        if (hostNode != null) {\n          hostNode.value = '';\n        }\n      };\n      hostNode.isFocused = function () {\n        return hostNode != null && TextInputState.currentlyFocusedField() === hostNode;\n      };\n      handleContentSizeChange(hostNode);\n    }\n  }, [handleContentSizeChange]);\n  function handleBlur(e) {\n    TextInputState._currentlyFocusedNode = null;\n    if (onBlur) {\n      e.nativeEvent.text = e.target.value;\n      onBlur(e);\n    }\n  }\n  function handleChange(e) {\n    var hostNode = e.target;\n    var text = hostNode.value;\n    e.nativeEvent.text = text;\n    handleContentSizeChange(hostNode);\n    if (onChange) {\n      onChange(e);\n    }\n    if (onChangeText) {\n      onChangeText(text);\n    }\n  }\n  function handleFocus(e) {\n    var hostNode = e.target;\n    if (onFocus) {\n      e.nativeEvent.text = hostNode.value;\n      onFocus(e);\n    }\n    if (hostNode != null) {\n      TextInputState._currentlyFocusedNode = hostNode;\n      if (clearTextOnFocus) {\n        hostNode.value = '';\n      }\n      if (selectTextOnFocus) {\n        // Safari requires selection to occur in a setTimeout\n        if (focusTimeout != null) {\n          clearTimeout(focusTimeout);\n        }\n        focusTimeout = setTimeout(() => {\n          // Check if the input is still focused after the timeout\n          // (see #2704)\n          if (hostNode != null && document.activeElement === hostNode) {\n            hostNode.select();\n          }\n        }, 0);\n      }\n    }\n  }\n  function handleKeyDown(e) {\n    var hostNode = e.target;\n    // Prevent key events bubbling (see #612)\n    e.stopPropagation();\n    var blurOnSubmitDefault = !multiline;\n    var shouldBlurOnSubmit = blurOnSubmit == null ? blurOnSubmitDefault : blurOnSubmit;\n    var nativeEvent = e.nativeEvent;\n    var isComposing = isEventComposing(nativeEvent);\n    if (onKeyPress) {\n      onKeyPress(e);\n    }\n    if (e.key === 'Enter' && !e.shiftKey &&\n    // Do not call submit if composition is occuring.\n    !isComposing && !e.isDefaultPrevented()) {\n      if ((blurOnSubmit || !multiline) && onSubmitEditing) {\n        // prevent \"Enter\" from inserting a newline or submitting a form\n        e.preventDefault();\n        nativeEvent.text = e.target.value;\n        onSubmitEditing(e);\n      }\n      if (shouldBlurOnSubmit && hostNode != null) {\n        setTimeout(() => hostNode.blur(), 0);\n      }\n    }\n  }\n  function handleSelectionChange(e) {\n    try {\n      var _e$target = e.target,\n        selectionStart = _e$target.selectionStart,\n        selectionEnd = _e$target.selectionEnd;\n      var _selection = {\n        start: selectionStart,\n        end: selectionEnd\n      };\n      if (onSelectionChange) {\n        e.nativeEvent.selection = _selection;\n        e.nativeEvent.text = e.target.value;\n        onSelectionChange(e);\n      }\n      if (prevSecureTextEntry.current === secureTextEntry) {\n        prevSelection.current = _selection;\n      }\n    } catch (e) {}\n  }\n  useLayoutEffect(() => {\n    var node = hostRef.current;\n    if (node != null && selection != null) {\n      setSelection(node, selection);\n    }\n    if (document.activeElement === node) {\n      TextInputState._currentlyFocusedNode = node;\n    }\n  }, [hostRef, selection]);\n  var component = multiline ? 'textarea' : 'input';\n  useElementLayout(hostRef, onLayout);\n  useResponderEvents(hostRef, {\n    onMoveShouldSetResponder,\n    onMoveShouldSetResponderCapture,\n    onResponderEnd,\n    onResponderGrant,\n    onResponderMove,\n    onResponderReject,\n    onResponderRelease,\n    onResponderStart,\n    onResponderTerminate,\n    onResponderTerminationRequest,\n    onScrollShouldSetResponder,\n    onScrollShouldSetResponderCapture,\n    onSelectionChangeShouldSetResponder,\n    onSelectionChangeShouldSetResponderCapture,\n    onStartShouldSetResponder,\n    onStartShouldSetResponderCapture\n  });\n  var _useLocaleContext = useLocaleContext(),\n    contextDirection = _useLocaleContext.direction;\n  var supportedProps = pickProps(props);\n  supportedProps.autoCapitalize = autoCapitalize;\n  supportedProps.autoComplete = autoComplete || autoCompleteType || 'on';\n  supportedProps.autoCorrect = autoCorrect ? 'on' : 'off';\n  // 'auto' by default allows browsers to infer writing direction\n  supportedProps.dir = dir !== undefined ? dir : 'auto';\n  /*\n  if (returnKeyType != null) {\n    warnOnce('returnKeyType', 'returnKeyType is deprecated. Use enterKeyHint.');\n  }\n  */\n  supportedProps.enterKeyHint = enterKeyHint || returnKeyType;\n  supportedProps.inputMode = _inputMode;\n  supportedProps.onBlur = handleBlur;\n  supportedProps.onChange = handleChange;\n  supportedProps.onFocus = handleFocus;\n  supportedProps.onKeyDown = handleKeyDown;\n  supportedProps.onSelect = handleSelectionChange;\n  /*\n  if (editable != null) {\n    warnOnce('editable', 'editable is deprecated. Use readOnly.');\n  }\n  */\n  supportedProps.readOnly = readOnly === true || editable === false;\n  /*\n  if (numberOfLines != null) {\n    warnOnce(\n      'numberOfLines',\n      'TextInput numberOfLines is deprecated. Use rows.'\n    );\n  }\n  */\n  supportedProps.rows = multiline ? rows != null ? rows : numberOfLines : 1;\n  supportedProps.spellCheck = spellCheck != null ? spellCheck : autoCorrect;\n  supportedProps.style = [{\n    '--placeholderTextColor': placeholderTextColor\n  }, styles.textinput$raw, styles.placeholder, props.style, caretHidden && styles.caretHidden];\n  supportedProps.type = multiline ? undefined : type;\n  supportedProps.virtualkeyboardpolicy = showSoftInputOnFocus === false ? 'manual' : 'auto';\n  var platformMethodsRef = usePlatformMethods(supportedProps);\n  var setRef = useMergeRefs(hostRef, platformMethodsRef, imperativeRef, forwardedRef);\n  supportedProps.ref = setRef;\n  var langDirection = props.lang != null ? getLocaleDirection(props.lang) : null;\n  var componentDirection = props.dir || langDirection;\n  var writingDirection = componentDirection || contextDirection;\n  var element = createElement(component, supportedProps, {\n    writingDirection\n  });\n  return element;\n});\nTextInput.displayName = 'TextInput';\n// $FlowFixMe\nTextInput.State = TextInputState;\nvar styles = StyleSheet.create({\n  textinput$raw: {\n    MozAppearance: 'textfield',\n    WebkitAppearance: 'none',\n    backgroundColor: 'transparent',\n    border: '0 solid black',\n    borderRadius: 0,\n    boxSizing: 'border-box',\n    font: '14px System',\n    margin: 0,\n    padding: 0,\n    resize: 'none'\n  },\n  placeholder: {\n    placeholderTextColor: 'var(--placeholderTextColor)'\n  },\n  caretHidden: {\n    caretColor: 'transparent'\n  }\n});\nexport default TextInput;","import { jsx } from \"react/jsx-runtime\";\nimport { TextInput as RNTextInput } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nimport { useUniwindAccent } from \"./useUniwindAccent.js\";\nexport const TextInput = copyComponentProperties(RNTextInput, (props) => {\n  const placeholderTextColor = useUniwindAccent(props.placeholderTextColorClassName);\n  return /* @__PURE__ */ jsx(\n    RNTextInput,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      placeholderTextColor: props.placeholderTextColor ?? placeholderTextColor,\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default TextInput;\n","import { jsx } from \"react/jsx-runtime\";\nimport { View as RNView } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const View = copyComponentProperties(RNView, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNView,\n    {\n      ...props,\n      dataSet: generateDataSet(props),\n      style: [toRNWClassName(props.className), props.style]\n    }\n  );\n});\nexport default View;\n","const toCamelCase = (str) => str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\nexport const generateDataSet = (props) => {\n  const dataSet = props.dataSet !== void 0 ? { ...props.dataSet } : {};\n  Object.entries(props).forEach(([key, value]) => {\n    if (key.startsWith(\"data-\")) {\n      dataSet[toCamelCase(key.slice(5))] = value;\n    }\n  });\n  return dataSet;\n};\n","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport { createRoot as domCreateRoot, hydrateRoot as domHydrateRoot } from 'react-dom/client';\nimport { createSheet } from '../StyleSheet/dom';\nexport function hydrate(element, root) {\n  createSheet(root);\n  return domHydrateRoot(root, element);\n}\nexport default function render(element, root) {\n  createSheet(root);\n  var reactRoot = domCreateRoot(root);\n  reactRoot.render(element);\n  return reactRoot;\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nexport default function unmountComponentAtNode(rootTag) {\n  rootTag.unmount();\n  return true;\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport UIManager from '../UIManager';\n\n// NativeModules shim\nvar NativeModules = {\n  UIManager\n};\nexport default NativeModules;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport canUseDOM from '../../modules/canUseDom';\nfunction isScreenReaderEnabled() {\n  return new Promise((resolve, reject) => {\n    resolve(true);\n  });\n}\nvar prefersReducedMotionMedia = canUseDOM && typeof window.matchMedia === 'function' ? window.matchMedia('(prefers-reduced-motion: reduce)') : null;\nfunction isReduceMotionEnabled() {\n  return new Promise((resolve, reject) => {\n    resolve(prefersReducedMotionMedia ? prefersReducedMotionMedia.matches : true);\n  });\n}\nfunction addChangeListener(fn) {\n  if (prefersReducedMotionMedia != null) {\n    prefersReducedMotionMedia.addEventListener != null ? prefersReducedMotionMedia.addEventListener('change', fn) : prefersReducedMotionMedia.addListener(fn);\n  }\n}\nfunction removeChangeListener(fn) {\n  if (prefersReducedMotionMedia != null) {\n    prefersReducedMotionMedia.removeEventListener != null ? prefersReducedMotionMedia.removeEventListener('change', fn) : prefersReducedMotionMedia.removeListener(fn);\n  }\n}\nvar handlers = {};\nvar AccessibilityInfo = {\n  /**\n   * Query whether a screen reader is currently enabled.\n   *\n   * Returns a promise which resolves to a boolean.\n   * The result is `true` when a screen reader is enabled and `false` otherwise.\n   */\n  isScreenReaderEnabled,\n  /**\n   * Query whether the user prefers reduced motion.\n   *\n   * Returns a promise which resolves to a boolean.\n   * The result is `true` when a screen reader is enabled and `false` otherwise.\n   */\n  isReduceMotionEnabled,\n  /**\n   * Deprecated\n   */\n  fetch: isScreenReaderEnabled,\n  /**\n   * Add an event handler. Supported events: reduceMotionChanged\n   */\n  addEventListener: function addEventListener(eventName, handler) {\n    if (eventName === 'reduceMotionChanged') {\n      if (!prefersReducedMotionMedia) {\n        return;\n      }\n      var listener = event => {\n        handler(event.matches);\n      };\n      addChangeListener(listener);\n      handlers[handler] = listener;\n    }\n    return {\n      remove: () => AccessibilityInfo.removeEventListener(eventName, handler)\n    };\n  },\n  /**\n   * Set accessibility focus to a react component.\n   */\n  setAccessibilityFocus: function setAccessibilityFocus(reactTag) {},\n  /**\n   * Post a string to be announced by the screen reader.\n   */\n  announceForAccessibility: function announceForAccessibility(announcement) {},\n  /**\n   * Remove an event handler.\n   */\n  removeEventListener: function removeEventListener(eventName, handler) {\n    if (eventName === 'reduceMotionChanged') {\n      var listener = handlers[handler];\n      if (!listener || !prefersReducedMotionMedia) {\n        return;\n      }\n      removeChangeListener(listener);\n    }\n    return;\n  }\n};\nexport default AccessibilityInfo;","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nclass Alert {\n  static alert() {}\n}\nexport default Alert;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar RootTagContext = /*#__PURE__*/React.createContext(null);\nvar AppContainer = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var children = props.children,\n    WrapperComponent = props.WrapperComponent;\n  var innerView = /*#__PURE__*/React.createElement(View, {\n    children: children,\n    key: 1,\n    style: styles.appContainer\n  });\n  if (WrapperComponent) {\n    innerView = /*#__PURE__*/React.createElement(WrapperComponent, null, innerView);\n  }\n  return /*#__PURE__*/React.createElement(RootTagContext.Provider, {\n    value: props.rootTag\n  }, /*#__PURE__*/React.createElement(View, {\n    ref: forwardedRef,\n    style: styles.appContainer\n  }, innerView));\n});\nAppContainer.displayName = 'AppContainer';\nexport default AppContainer;\nvar styles = StyleSheet.create({\n  appContainer: {\n    flex: 1,\n    pointerEvents: 'box-none'\n  }\n});","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport invariant from 'fbjs/lib/invariant';\nimport unmountComponentAtNode from '../unmountComponentAtNode';\nimport renderApplication, { getApplication as _getApplication } from './renderApplication';\nvar emptyObject = {};\nvar runnables = {};\nvar componentProviderInstrumentationHook = component => component();\nvar wrapperComponentProvider;\n\n/**\n * `AppRegistry` is the JS entry point to running all React Native apps.\n */\nexport default class AppRegistry {\n  static getAppKeys() {\n    return Object.keys(runnables);\n  }\n  static getApplication(appKey, appParameters) {\n    invariant(runnables[appKey] && runnables[appKey].getApplication, \"Application \" + appKey + \" has not been registered. \" + 'This is either due to an import error during initialization or failure to call AppRegistry.registerComponent.');\n    return runnables[appKey].getApplication(appParameters);\n  }\n  static registerComponent(appKey, componentProvider) {\n    runnables[appKey] = {\n      getApplication: appParameters => _getApplication(componentProviderInstrumentationHook(componentProvider), appParameters ? appParameters.initialProps : emptyObject, wrapperComponentProvider && wrapperComponentProvider(appParameters)),\n      run: appParameters => renderApplication(componentProviderInstrumentationHook(componentProvider), wrapperComponentProvider && wrapperComponentProvider(appParameters), appParameters.callback, {\n        hydrate: appParameters.hydrate || false,\n        initialProps: appParameters.initialProps || emptyObject,\n        mode: appParameters.mode || 'concurrent',\n        rootTag: appParameters.rootTag\n      })\n    };\n    return appKey;\n  }\n  static registerConfig(config) {\n    config.forEach(_ref => {\n      var appKey = _ref.appKey,\n        component = _ref.component,\n        run = _ref.run;\n      if (run) {\n        AppRegistry.registerRunnable(appKey, run);\n      } else {\n        invariant(component, 'No component provider passed in');\n        AppRegistry.registerComponent(appKey, component);\n      }\n    });\n  }\n\n  // TODO: fix style sheet creation when using this method\n  static registerRunnable(appKey, run) {\n    runnables[appKey] = {\n      run\n    };\n    return appKey;\n  }\n  static runApplication(appKey, appParameters) {\n    var isDevelopment = process.env.NODE_ENV !== 'production' && process.env.NODE_ENV !== 'test';\n    if (isDevelopment) {\n      var params = _objectSpread({}, appParameters);\n      params.rootTag = \"#\" + params.rootTag.id;\n      console.log(\"Running application \\\"\" + appKey + \"\\\" with appParams:\\n\", params, \"\\nDevelopment-level warnings: \" + (isDevelopment ? 'ON' : 'OFF') + \".\" + (\"\\nPerformance optimizations: \" + (isDevelopment ? 'OFF' : 'ON') + \".\"));\n    }\n    invariant(runnables[appKey] && runnables[appKey].run, \"Application \\\"\" + appKey + \"\\\" has not been registered. \" + 'This is either due to an import error during initialization or failure to call AppRegistry.registerComponent.');\n    return runnables[appKey].run(appParameters);\n  }\n  static setComponentProviderInstrumentationHook(hook) {\n    componentProviderInstrumentationHook = hook;\n  }\n  static setWrapperComponentProvider(provider) {\n    wrapperComponentProvider = provider;\n  }\n  static unmountApplicationComponentAtRootTag(rootTag) {\n    unmountComponentAtNode(rootTag);\n  }\n}","import _extends from \"@babel/runtime/helpers/extends\";\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport AppContainer from './AppContainer';\nimport invariant from 'fbjs/lib/invariant';\nimport render, { hydrate } from '../render';\nimport StyleSheet from '../StyleSheet';\nimport React from 'react';\nexport default function renderApplication(RootComponent, WrapperComponent, callback, options) {\n  var shouldHydrate = options.hydrate,\n    initialProps = options.initialProps,\n    rootTag = options.rootTag;\n  var renderFn = shouldHydrate ? hydrate : render;\n  invariant(rootTag, 'Expect to have a valid rootTag, instead got ', rootTag);\n  return renderFn(/*#__PURE__*/React.createElement(AppContainer, {\n    WrapperComponent: WrapperComponent,\n    ref: callback,\n    rootTag: rootTag\n  }, /*#__PURE__*/React.createElement(RootComponent, initialProps)), rootTag);\n}\nexport function getApplication(RootComponent, initialProps, WrapperComponent) {\n  var element = /*#__PURE__*/React.createElement(AppContainer, {\n    WrapperComponent: WrapperComponent,\n    rootTag: {}\n  }, /*#__PURE__*/React.createElement(RootComponent, initialProps));\n  // Don't escape CSS text\n  var getStyleElement = props => {\n    var sheet = StyleSheet.getSheet();\n    return /*#__PURE__*/React.createElement(\"style\", _extends({}, props, {\n      dangerouslySetInnerHTML: {\n        __html: sheet.textContent\n      },\n      id: sheet.id\n    }));\n  };\n  return {\n    element,\n    getStyleElement\n  };\n}","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport invariant from 'fbjs/lib/invariant';\nimport EventEmitter from '../../vendor/react-native/vendor/emitter/EventEmitter';\nimport canUseDOM from '../../modules/canUseDom';\n\n// Android 4.4 browser\nvar isPrefixed = canUseDOM && !document.hasOwnProperty('hidden') && document.hasOwnProperty('webkitHidden');\nvar EVENT_TYPES = ['change', 'memoryWarning'];\nvar VISIBILITY_CHANGE_EVENT = isPrefixed ? 'webkitvisibilitychange' : 'visibilitychange';\nvar VISIBILITY_STATE_PROPERTY = isPrefixed ? 'webkitVisibilityState' : 'visibilityState';\nvar AppStates = {\n  BACKGROUND: 'background',\n  ACTIVE: 'active'\n};\nvar changeEmitter = null;\nexport default class AppState {\n  static get currentState() {\n    if (!AppState.isAvailable) {\n      return AppStates.ACTIVE;\n    }\n    switch (document[VISIBILITY_STATE_PROPERTY]) {\n      case 'hidden':\n      case 'prerender':\n      case 'unloaded':\n        return AppStates.BACKGROUND;\n      default:\n        return AppStates.ACTIVE;\n    }\n  }\n  static addEventListener(type, handler) {\n    if (AppState.isAvailable) {\n      invariant(EVENT_TYPES.indexOf(type) !== -1, 'Trying to subscribe to unknown event: \"%s\"', type);\n      if (type === 'change') {\n        if (!changeEmitter) {\n          changeEmitter = new EventEmitter();\n          document.addEventListener(VISIBILITY_CHANGE_EVENT, () => {\n            if (changeEmitter) {\n              changeEmitter.emit('change', AppState.currentState);\n            }\n          }, false);\n        }\n        return changeEmitter.addListener(type, handler);\n      }\n    }\n  }\n}\nAppState.isAvailable = canUseDOM && !!document[VISIBILITY_STATE_PROPERTY];","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nvar clipboardAvailable;\nexport default class Clipboard {\n  static isAvailable() {\n    if (clipboardAvailable === undefined) {\n      clipboardAvailable = typeof document.queryCommandSupported === 'function' && document.queryCommandSupported('copy');\n    }\n    return clipboardAvailable;\n  }\n  static getString() {\n    return Promise.resolve('');\n  }\n  static setString(text) {\n    var success = false;\n    var body = document.body;\n    if (body) {\n      // add the text to a hidden node\n      var node = document.createElement('span');\n      node.textContent = text;\n      node.style.opacity = '0';\n      node.style.position = 'absolute';\n      node.style.whiteSpace = 'pre-wrap';\n      node.style.userSelect = 'auto';\n      body.appendChild(node);\n\n      // select the text\n      var selection = window.getSelection();\n      selection.removeAllRanges();\n      var range = document.createRange();\n      range.selectNodeContents(node);\n      selection.addRange(range);\n\n      // attempt to copy\n      try {\n        document.execCommand('copy');\n        success = true;\n      } catch (e) {}\n\n      // remove selection and node\n      selection.removeAllRanges();\n      body.removeChild(node);\n    }\n    return success;\n  }\n}","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport Platform from '../../../exports/Platform';\nimport UIManager from '../../../exports/UIManager';\nvar __DEV__ = process.env.NODE_ENV !== 'production';\nfunction configureNext(config, onAnimationDidEnd) {\n  if (!Platform.isTesting) {\n    UIManager.configureNextLayoutAnimation(config, onAnimationDidEnd !== null && onAnimationDidEnd !== void 0 ? onAnimationDidEnd : function () {}, function () {} /* unused onError */);\n  }\n}\nfunction create(duration, type, property) {\n  return {\n    duration,\n    create: {\n      type,\n      property\n    },\n    update: {\n      type\n    },\n    delete: {\n      type,\n      property\n    }\n  };\n}\nvar Presets = {\n  easeInEaseOut: create(300, 'easeInEaseOut', 'opacity'),\n  linear: create(500, 'linear', 'opacity'),\n  spring: {\n    duration: 700,\n    create: {\n      type: 'linear',\n      property: 'opacity'\n    },\n    update: {\n      type: 'spring',\n      springDamping: 0.4\n    },\n    delete: {\n      type: 'linear',\n      property: 'opacity'\n    }\n  }\n};\n\n/**\n * Automatically animates views to their new positions when the\n * next layout happens.\n *\n * A common way to use this API is to call it before calling `setState`.\n *\n * Note that in order to get this to work on **Android** you need to set the following flags via `UIManager`:\n *\n *     UIManager.setLayoutAnimationEnabledExperimental && UIManager.setLayoutAnimationEnabledExperimental(true);\n */\nvar LayoutAnimation = {\n  /**\n   * Schedules an animation to happen on the next layout.\n   *\n   * @param config Specifies animation properties:\n   *\n   *   - `duration` in milliseconds\n   *   - `create`, `AnimationConfig` for animating in new views\n   *   - `update`, `AnimationConfig` for animating views that have been updated\n   *\n   * @param onAnimationDidEnd Called when the animation finished.\n   * Only supported on iOS.\n   * @param onError Called on error. Only supported on iOS.\n   */\n  configureNext,\n  /**\n   * Helper for creating a config for `configureNext`.\n   */\n  create,\n  Types: Object.freeze({\n    spring: 'spring',\n    linear: 'linear',\n    easeInEaseOut: 'easeInEaseOut',\n    easeIn: 'easeIn',\n    easeOut: 'easeOut',\n    keyboard: 'keyboard'\n  }),\n  Properties: Object.freeze({\n    opacity: 'opacity',\n    scaleX: 'scaleX',\n    scaleY: 'scaleY',\n    scaleXY: 'scaleXY'\n  }),\n  checkConfig() {\n    console.error('LayoutAnimation.checkConfig(...) has been disabled.');\n  },\n  Presets,\n  easeInEaseOut: configureNext.bind(null, Presets.easeInEaseOut),\n  linear: configureNext.bind(null, Presets.linear),\n  spring: configureNext.bind(null, Presets.spring)\n};\nexport default LayoutAnimation;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport LayoutAnimation from '../../vendor/react-native/LayoutAnimation';\nexport default LayoutAnimation;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from 'fbjs/lib/invariant';\nimport canUseDOM from '../../modules/canUseDom';\nvar initialURL = canUseDOM ? window.location.href : '';\nclass Linking {\n  constructor() {\n    this._eventCallbacks = {};\n  }\n  /**\n   * An object mapping of event name\n   * and all the callbacks subscribing to it\n   */\n  _dispatchEvent(event) {\n    for (var _len = arguments.length, data = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      data[_key - 1] = arguments[_key];\n    }\n    var listeners = this._eventCallbacks[event];\n    if (listeners != null && Array.isArray(listeners)) {\n      listeners.map(listener => {\n        listener(...data);\n      });\n    }\n  }\n\n  /**\n   * Adds a event listener for the specified event. The callback will be called when the\n   * said event is dispatched.\n   */\n  addEventListener(eventType, callback) {\n    var _this = this;\n    if (!_this._eventCallbacks[eventType]) {\n      _this._eventCallbacks[eventType] = [callback];\n    }\n    _this._eventCallbacks[eventType].push(callback);\n    return {\n      remove() {\n        var callbacks = _this._eventCallbacks[eventType];\n        var filteredCallbacks = callbacks.filter(c => c.toString() !== callback.toString());\n        _this._eventCallbacks[eventType] = filteredCallbacks;\n      }\n    };\n  }\n\n  /**\n   * Removes a previously added event listener for the specified event. The callback must\n   * be the same object as the one passed to `addEventListener`.\n   */\n  removeEventListener(eventType, callback) {\n    console.error(\"Linking.removeEventListener('\" + eventType + \"', ...): Method has been \" + 'deprecated. Please instead use `remove()` on the subscription ' + 'returned by `Linking.addEventListener`.');\n    var callbacks = this._eventCallbacks[eventType];\n    var filteredCallbacks = callbacks.filter(c => c.toString() !== callback.toString());\n    this._eventCallbacks[eventType] = filteredCallbacks;\n  }\n  canOpenURL() {\n    return Promise.resolve(true);\n  }\n  getInitialURL() {\n    return Promise.resolve(initialURL);\n  }\n\n  /**\n   * Try to open the given url in a secure fashion. The method returns a Promise object.\n   * If a target is passed (including undefined) that target will be used, otherwise '_blank'.\n   * If the url opens, the promise is resolved. If not, the promise is rejected.\n   * Dispatches the `onOpen` event if `url` is opened successfully.\n   */\n  openURL(url, target) {\n    if (arguments.length === 1) {\n      target = '_blank';\n    }\n    try {\n      open(url, target);\n      this._dispatchEvent('onOpen', url);\n      return Promise.resolve();\n    } catch (e) {\n      return Promise.reject(e);\n    }\n  }\n  _validateURL(url) {\n    invariant(typeof url === 'string', 'Invalid URL: should be a string. Was: ' + url);\n    invariant(url, 'Invalid URL: cannot be empty');\n  }\n}\nvar open = (url, target) => {\n  if (canUseDOM) {\n    var urlToOpen = new URL(url, window.location).toString();\n    if (urlToOpen.indexOf('tel:') === 0) {\n      window.location = urlToOpen;\n    } else {\n      window.open(urlToOpen, target, 'noopener');\n    }\n  }\n};\nexport default new Linking();","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport NativeEventEmitter from '../../vendor/react-native/EventEmitter/NativeEventEmitter';\nexport default NativeEventEmitter;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n */\n\nvar TouchHistoryMath = {\n  /**\n   * This code is optimized and not intended to look beautiful. This allows\n   * computing of touch centroids that have moved after `touchesChangedAfter`\n   * timeStamp. You can compute the current centroid involving all touches\n   * moves after `touchesChangedAfter`, or you can compute the previous\n   * centroid of all touches that were moved after `touchesChangedAfter`.\n   *\n   * @param {TouchHistoryMath} touchHistory Standard Responder touch track\n   * data.\n   * @param {number} touchesChangedAfter timeStamp after which moved touches\n   * are considered \"actively moving\" - not just \"active\".\n   * @param {boolean} isXAxis Consider `x` dimension vs. `y` dimension.\n   * @param {boolean} ofCurrent Compute current centroid for actively moving\n   * touches vs. previous centroid of now actively moving touches.\n   * @return {number} value of centroid in specified dimension.\n   */\n  centroidDimension: function centroidDimension(touchHistory, touchesChangedAfter, isXAxis, ofCurrent) {\n    var touchBank = touchHistory.touchBank;\n    var total = 0;\n    var count = 0;\n    var oneTouchData = touchHistory.numberActiveTouches === 1 ? touchHistory.touchBank[touchHistory.indexOfSingleActiveTouch] : null;\n    if (oneTouchData !== null) {\n      if (oneTouchData.touchActive && oneTouchData.currentTimeStamp > touchesChangedAfter) {\n        total += ofCurrent && isXAxis ? oneTouchData.currentPageX : ofCurrent && !isXAxis ? oneTouchData.currentPageY : !ofCurrent && isXAxis ? oneTouchData.previousPageX : oneTouchData.previousPageY;\n        count = 1;\n      }\n    } else {\n      for (var i = 0; i < touchBank.length; i++) {\n        var touchTrack = touchBank[i];\n        if (touchTrack !== null && touchTrack !== undefined && touchTrack.touchActive && touchTrack.currentTimeStamp >= touchesChangedAfter) {\n          var toAdd = void 0; // Yuck, program temporarily in invalid state.\n          if (ofCurrent && isXAxis) {\n            toAdd = touchTrack.currentPageX;\n          } else if (ofCurrent && !isXAxis) {\n            toAdd = touchTrack.currentPageY;\n          } else if (!ofCurrent && isXAxis) {\n            toAdd = touchTrack.previousPageX;\n          } else {\n            toAdd = touchTrack.previousPageY;\n          }\n          total += toAdd;\n          count++;\n        }\n      }\n    }\n    return count > 0 ? total / count : TouchHistoryMath.noCentroid;\n  },\n  currentCentroidXOfTouchesChangedAfter: function currentCentroidXOfTouchesChangedAfter(touchHistory, touchesChangedAfter) {\n    return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, true,\n    // isXAxis\n    true // ofCurrent\n    );\n  },\n  currentCentroidYOfTouchesChangedAfter: function currentCentroidYOfTouchesChangedAfter(touchHistory, touchesChangedAfter) {\n    return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, false,\n    // isXAxis\n    true // ofCurrent\n    );\n  },\n  previousCentroidXOfTouchesChangedAfter: function previousCentroidXOfTouchesChangedAfter(touchHistory, touchesChangedAfter) {\n    return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, true,\n    // isXAxis\n    false // ofCurrent\n    );\n  },\n  previousCentroidYOfTouchesChangedAfter: function previousCentroidYOfTouchesChangedAfter(touchHistory, touchesChangedAfter) {\n    return TouchHistoryMath.centroidDimension(touchHistory, touchesChangedAfter, false,\n    // isXAxis\n    false // ofCurrent\n    );\n  },\n  currentCentroidX: function currentCentroidX(touchHistory) {\n    return TouchHistoryMath.centroidDimension(touchHistory, 0,\n    // touchesChangedAfter\n    true,\n    // isXAxis\n    true // ofCurrent\n    );\n  },\n  currentCentroidY: function currentCentroidY(touchHistory) {\n    return TouchHistoryMath.centroidDimension(touchHistory, 0,\n    // touchesChangedAfter\n    false,\n    // isXAxis\n    true // ofCurrent\n    );\n  },\n  noCentroid: -1\n};\nexport default TouchHistoryMath;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use strict';\n\nimport InteractionManager from '../../../exports/InteractionManager';\nimport TouchHistoryMath from '../TouchHistoryMath';\nvar currentCentroidXOfTouchesChangedAfter = TouchHistoryMath.currentCentroidXOfTouchesChangedAfter;\nvar currentCentroidYOfTouchesChangedAfter = TouchHistoryMath.currentCentroidYOfTouchesChangedAfter;\nvar previousCentroidXOfTouchesChangedAfter = TouchHistoryMath.previousCentroidXOfTouchesChangedAfter;\nvar previousCentroidYOfTouchesChangedAfter = TouchHistoryMath.previousCentroidYOfTouchesChangedAfter;\nvar currentCentroidX = TouchHistoryMath.currentCentroidX;\nvar currentCentroidY = TouchHistoryMath.currentCentroidY;\n\n/**\n * `PanResponder` reconciles several touches into a single gesture. It makes\n * single-touch gestures resilient to extra touches, and can be used to\n * recognize simple multi-touch gestures.\n *\n * By default, `PanResponder` holds an `InteractionManager` handle to block\n * long-running JS events from interrupting active gestures.\n *\n * It provides a predictable wrapper of the responder handlers provided by the\n * [gesture responder system](docs/gesture-responder-system.html).\n * For each handler, it provides a new `gestureState` object alongside the\n * native event object:\n *\n * ```\n * onPanResponderMove: (event, gestureState) => {}\n * ```\n *\n * A native event is a synthetic touch event with the following form:\n *\n *  - `nativeEvent`\n *      + `changedTouches` - Array of all touch events that have changed since the last event\n *      + `identifier` - The ID of the touch\n *      + `locationX` - The X position of the touch, relative to the element\n *      + `locationY` - The Y position of the touch, relative to the element\n *      + `pageX` - The X position of the touch, relative to the root element\n *      + `pageY` - The Y position of the touch, relative to the root element\n *      + `target` - The node id of the element receiving the touch event\n *      + `timestamp` - A time identifier for the touch, useful for velocity calculation\n *      + `touches` - Array of all current touches on the screen\n *\n * A `gestureState` object has the following:\n *\n *  - `stateID` - ID of the gestureState- persisted as long as there at least\n *     one touch on screen\n *  - `moveX` - the latest screen coordinates of the recently-moved touch\n *  - `moveY` - the latest screen coordinates of the recently-moved touch\n *  - `x0` - the screen coordinates of the responder grant\n *  - `y0` - the screen coordinates of the responder grant\n *  - `dx` - accumulated distance of the gesture since the touch started\n *  - `dy` - accumulated distance of the gesture since the touch started\n *  - `vx` - current velocity of the gesture\n *  - `vy` - current velocity of the gesture\n *  - `numberActiveTouches` - Number of touches currently on screen\n *\n * ### Basic Usage\n *\n * ```\n *   componentWillMount: function() {\n *     this._panResponder = PanResponder.create({\n *       // Ask to be the responder:\n *       onStartShouldSetPanResponder: (evt, gestureState) => true,\n *       onStartShouldSetPanResponderCapture: (evt, gestureState) => true,\n *       onMoveShouldSetPanResponder: (evt, gestureState) => true,\n *       onMoveShouldSetPanResponderCapture: (evt, gestureState) => true,\n *\n *       onPanResponderGrant: (evt, gestureState) => {\n *         // The gesture has started. Show visual feedback so the user knows\n *         // what is happening!\n *\n *         // gestureState.d{x,y} will be set to zero now\n *       },\n *       onPanResponderMove: (evt, gestureState) => {\n *         // The most recent move distance is gestureState.move{X,Y}\n *\n *         // The accumulated gesture distance since becoming responder is\n *         // gestureState.d{x,y}\n *       },\n *       onPanResponderTerminationRequest: (evt, gestureState) => true,\n *       onPanResponderRelease: (evt, gestureState) => {\n *         // The user has released all touches while this view is the\n *         // responder. This typically means a gesture has succeeded\n *       },\n *       onPanResponderTerminate: (evt, gestureState) => {\n *         // Another component has become the responder, so this gesture\n *         // should be cancelled\n *       },\n *       onShouldBlockNativeResponder: (evt, gestureState) => {\n *         // Returns whether this component should block native components from becoming the JS\n *         // responder. Returns true by default. Is currently only supported on android.\n *         return true;\n *       },\n *     });\n *   },\n *\n *   render: function() {\n *     return (\n *       <View {...this._panResponder.panHandlers} />\n *     );\n *   },\n *\n * ```\n *\n * ### Working Example\n *\n * To see it in action, try the\n * [PanResponder example in RNTester](https://github.com/facebook/react-native/blob/master/RNTester/js/PanResponderExample.js)\n */\n\nvar PanResponder = {\n  /**\n   *\n   * A graphical explanation of the touch data flow:\n   *\n   * +----------------------------+             +--------------------------------+\n   * | ResponderTouchHistoryStore |             |TouchHistoryMath                |\n   * +----------------------------+             +----------+---------------------+\n   * |Global store of touchHistory|             |Allocation-less math util       |\n   * |including activeness, start |             |on touch history (centroids     |\n   * |position, prev/cur position.|             |and multitouch movement etc)    |\n   * |                            |             |                                |\n   * +----^-----------------------+             +----^---------------------------+\n   *      |                                          |\n   *      | (records relevant history                |\n   *      |  of touches relevant for                 |\n   *      |  implementing higher level               |\n   *      |  gestures)                               |\n   *      |                                          |\n   * +----+-----------------------+             +----|---------------------------+\n   * | ResponderEventPlugin       |             |    |   Your App/Component      |\n   * +----------------------------+             +----|---------------------------+\n   * |Negotiates which view gets  | Low level   |    |             High level    |\n   * |onResponderMove events.     | events w/   |  +-+-------+     events w/     |\n   * |Also records history into   | touchHistory|  |   Pan   |     multitouch +  |\n   * |ResponderTouchHistoryStore. +---------------->Responder+-----> accumulative|\n   * +----------------------------+ attached to |  |         |     distance and  |\n   *                                 each event |  +---------+     velocity.     |\n   *                                            |                                |\n   *                                            |                                |\n   *                                            +--------------------------------+\n   *\n   *\n   *\n   * Gesture that calculates cumulative movement over time in a way that just\n   * \"does the right thing\" for multiple touches. The \"right thing\" is very\n   * nuanced. When moving two touches in opposite directions, the cumulative\n   * distance is zero in each dimension. When two touches move in parallel five\n   * pixels in the same direction, the cumulative distance is five, not ten. If\n   * two touches start, one moves five in a direction, then stops and the other\n   * touch moves fives in the same direction, the cumulative distance is ten.\n   *\n   * This logic requires a kind of processing of time \"clusters\" of touch events\n   * so that two touch moves that essentially occur in parallel but move every\n   * other frame respectively, are considered part of the same movement.\n   *\n   * Explanation of some of the non-obvious fields:\n   *\n   * - moveX/moveY: If no move event has been observed, then `(moveX, moveY)` is\n   *   invalid. If a move event has been observed, `(moveX, moveY)` is the\n   *   centroid of the most recently moved \"cluster\" of active touches.\n   *   (Currently all move have the same timeStamp, but later we should add some\n   *   threshold for what is considered to be \"moving\"). If a palm is\n   *   accidentally counted as a touch, but a finger is moving greatly, the palm\n   *   will move slightly, but we only want to count the single moving touch.\n   * - x0/y0: Centroid location (non-cumulative) at the time of becoming\n   *   responder.\n   * - dx/dy: Cumulative touch distance - not the same thing as sum of each touch\n   *   distance. Accounts for touch moves that are clustered together in time,\n   *   moving the same direction. Only valid when currently responder (otherwise,\n   *   it only represents the drag distance below the threshold).\n   * - vx/vy: Velocity.\n   */\n\n  _initializeGestureState(gestureState) {\n    gestureState.moveX = 0;\n    gestureState.moveY = 0;\n    gestureState.x0 = 0;\n    gestureState.y0 = 0;\n    gestureState.dx = 0;\n    gestureState.dy = 0;\n    gestureState.vx = 0;\n    gestureState.vy = 0;\n    gestureState.numberActiveTouches = 0;\n    // All `gestureState` accounts for timeStamps up until:\n    gestureState._accountsForMovesUpTo = 0;\n  },\n  /**\n   * This is nuanced and is necessary. It is incorrect to continuously take all\n   * active *and* recently moved touches, find the centroid, and track how that\n   * result changes over time. Instead, we must take all recently moved\n   * touches, and calculate how the centroid has changed just for those\n   * recently moved touches, and append that change to an accumulator. This is\n   * to (at least) handle the case where the user is moving three fingers, and\n   * then one of the fingers stops but the other two continue.\n   *\n   * This is very different than taking all of the recently moved touches and\n   * storing their centroid as `dx/dy`. For correctness, we must *accumulate\n   * changes* in the centroid of recently moved touches.\n   *\n   * There is also some nuance with how we handle multiple moved touches in a\n   * single event. With the way `ReactNativeEventEmitter` dispatches touches as\n   * individual events, multiple touches generate two 'move' events, each of\n   * them triggering `onResponderMove`. But with the way `PanResponder` works,\n   * all of the gesture inference is performed on the first dispatch, since it\n   * looks at all of the touches (even the ones for which there hasn't been a\n   * native dispatch yet). Therefore, `PanResponder` does not call\n   * `onResponderMove` passed the first dispatch. This diverges from the\n   * typical responder callback pattern (without using `PanResponder`), but\n   * avoids more dispatches than necessary.\n   */\n  _updateGestureStateOnMove(gestureState, touchHistory) {\n    gestureState.numberActiveTouches = touchHistory.numberActiveTouches;\n    gestureState.moveX = currentCentroidXOfTouchesChangedAfter(touchHistory, gestureState._accountsForMovesUpTo);\n    gestureState.moveY = currentCentroidYOfTouchesChangedAfter(touchHistory, gestureState._accountsForMovesUpTo);\n    var movedAfter = gestureState._accountsForMovesUpTo;\n    var prevX = previousCentroidXOfTouchesChangedAfter(touchHistory, movedAfter);\n    var x = currentCentroidXOfTouchesChangedAfter(touchHistory, movedAfter);\n    var prevY = previousCentroidYOfTouchesChangedAfter(touchHistory, movedAfter);\n    var y = currentCentroidYOfTouchesChangedAfter(touchHistory, movedAfter);\n    var nextDX = gestureState.dx + (x - prevX);\n    var nextDY = gestureState.dy + (y - prevY);\n\n    // TODO: This must be filtered intelligently.\n    var dt = touchHistory.mostRecentTimeStamp - gestureState._accountsForMovesUpTo;\n    gestureState.vx = (nextDX - gestureState.dx) / dt;\n    gestureState.vy = (nextDY - gestureState.dy) / dt;\n    gestureState.dx = nextDX;\n    gestureState.dy = nextDY;\n    gestureState._accountsForMovesUpTo = touchHistory.mostRecentTimeStamp;\n  },\n  /**\n   * @param {object} config Enhanced versions of all of the responder callbacks\n   * that provide not only the typical `ResponderSyntheticEvent`, but also the\n   * `PanResponder` gesture state.  Simply replace the word `Responder` with\n   * `PanResponder` in each of the typical `onResponder*` callbacks. For\n   * example, the `config` object would look like:\n   *\n   *  - `onMoveShouldSetPanResponder: (e, gestureState) => {...}`\n   *  - `onMoveShouldSetPanResponderCapture: (e, gestureState) => {...}`\n   *  - `onStartShouldSetPanResponder: (e, gestureState) => {...}`\n   *  - `onStartShouldSetPanResponderCapture: (e, gestureState) => {...}`\n   *  - `onPanResponderReject: (e, gestureState) => {...}`\n   *  - `onPanResponderGrant: (e, gestureState) => {...}`\n   *  - `onPanResponderStart: (e, gestureState) => {...}`\n   *  - `onPanResponderEnd: (e, gestureState) => {...}`\n   *  - `onPanResponderRelease: (e, gestureState) => {...}`\n   *  - `onPanResponderMove: (e, gestureState) => {...}`\n   *  - `onPanResponderTerminate: (e, gestureState) => {...}`\n   *  - `onPanResponderTerminationRequest: (e, gestureState) => {...}`\n   *  - `onShouldBlockNativeResponder: (e, gestureState) => {...}`\n   *\n   *  In general, for events that have capture equivalents, we update the\n   *  gestureState once in the capture phase and can use it in the bubble phase\n   *  as well.\n   *\n   *  Be careful with onStartShould* callbacks. They only reflect updated\n   *  `gestureState` for start/end events that bubble/capture to the Node.\n   *  Once the node is the responder, you can rely on every start/end event\n   *  being processed by the gesture and `gestureState` being updated\n   *  accordingly. (numberActiveTouches) may not be totally accurate unless you\n   *  are the responder.\n   */\n  create(config) {\n    var interactionState = {\n      handle: null,\n      shouldCancelClick: false,\n      timeout: null\n    };\n    var gestureState = {\n      // Useful for debugging\n      stateID: Math.random(),\n      moveX: 0,\n      moveY: 0,\n      x0: 0,\n      y0: 0,\n      dx: 0,\n      dy: 0,\n      vx: 0,\n      vy: 0,\n      numberActiveTouches: 0,\n      _accountsForMovesUpTo: 0\n    };\n    var panHandlers = {\n      onStartShouldSetResponder(event) {\n        return config.onStartShouldSetPanResponder == null ? false : config.onStartShouldSetPanResponder(event, gestureState);\n      },\n      onMoveShouldSetResponder(event) {\n        return config.onMoveShouldSetPanResponder == null ? false : config.onMoveShouldSetPanResponder(event, gestureState);\n      },\n      onStartShouldSetResponderCapture(event) {\n        // TODO: Actually, we should reinitialize the state any time\n        // touches.length increases from 0 active to > 0 active.\n        if (event.nativeEvent.touches.length === 1) {\n          PanResponder._initializeGestureState(gestureState);\n        }\n        gestureState.numberActiveTouches = event.touchHistory.numberActiveTouches;\n        return config.onStartShouldSetPanResponderCapture != null ? config.onStartShouldSetPanResponderCapture(event, gestureState) : false;\n      },\n      onMoveShouldSetResponderCapture(event) {\n        var touchHistory = event.touchHistory;\n        // Responder system incorrectly dispatches should* to current responder\n        // Filter out any touch moves past the first one - we would have\n        // already processed multi-touch geometry during the first event.\n        if (gestureState._accountsForMovesUpTo === touchHistory.mostRecentTimeStamp) {\n          return false;\n        }\n        PanResponder._updateGestureStateOnMove(gestureState, touchHistory);\n        return config.onMoveShouldSetPanResponderCapture ? config.onMoveShouldSetPanResponderCapture(event, gestureState) : false;\n      },\n      onResponderGrant(event) {\n        if (!interactionState.handle) {\n          interactionState.handle = InteractionManager.createInteractionHandle();\n        }\n        if (interactionState.timeout) {\n          clearInteractionTimeout(interactionState);\n        }\n        interactionState.shouldCancelClick = true;\n        gestureState.x0 = currentCentroidX(event.touchHistory);\n        gestureState.y0 = currentCentroidY(event.touchHistory);\n        gestureState.dx = 0;\n        gestureState.dy = 0;\n        if (config.onPanResponderGrant) {\n          config.onPanResponderGrant(event, gestureState);\n        }\n        // TODO: t7467124 investigate if this can be removed\n        return config.onShouldBlockNativeResponder == null ? true : config.onShouldBlockNativeResponder(event, gestureState);\n      },\n      onResponderReject(event) {\n        clearInteractionHandle(interactionState, config.onPanResponderReject, event, gestureState);\n      },\n      onResponderRelease(event) {\n        clearInteractionHandle(interactionState, config.onPanResponderRelease, event, gestureState);\n        setInteractionTimeout(interactionState);\n        PanResponder._initializeGestureState(gestureState);\n      },\n      onResponderStart(event) {\n        var touchHistory = event.touchHistory;\n        gestureState.numberActiveTouches = touchHistory.numberActiveTouches;\n        if (config.onPanResponderStart) {\n          config.onPanResponderStart(event, gestureState);\n        }\n      },\n      onResponderMove(event) {\n        var touchHistory = event.touchHistory;\n        // Guard against the dispatch of two touch moves when there are two\n        // simultaneously changed touches.\n        if (gestureState._accountsForMovesUpTo === touchHistory.mostRecentTimeStamp) {\n          return;\n        }\n        // Filter out any touch moves past the first one - we would have\n        // already processed multi-touch geometry during the first event.\n        PanResponder._updateGestureStateOnMove(gestureState, touchHistory);\n        if (config.onPanResponderMove) {\n          config.onPanResponderMove(event, gestureState);\n        }\n      },\n      onResponderEnd(event) {\n        var touchHistory = event.touchHistory;\n        gestureState.numberActiveTouches = touchHistory.numberActiveTouches;\n        clearInteractionHandle(interactionState, config.onPanResponderEnd, event, gestureState);\n      },\n      onResponderTerminate(event) {\n        clearInteractionHandle(interactionState, config.onPanResponderTerminate, event, gestureState);\n        setInteractionTimeout(interactionState);\n        PanResponder._initializeGestureState(gestureState);\n      },\n      onResponderTerminationRequest(event) {\n        return config.onPanResponderTerminationRequest == null ? true : config.onPanResponderTerminationRequest(event, gestureState);\n      },\n      // We do not want to trigger 'click' activated gestures or native behaviors\n      // on any pan target that is under a mouse cursor when it is released.\n      // Browsers will natively cancel 'click' events on a target if a non-mouse\n      // active pointer moves.\n      onClickCapture: event => {\n        if (interactionState.shouldCancelClick === true) {\n          event.stopPropagation();\n          event.preventDefault();\n        }\n      }\n    };\n    return {\n      panHandlers,\n      getInteractionHandle() {\n        return interactionState.handle;\n      }\n    };\n  }\n};\nfunction clearInteractionHandle(interactionState, callback, event, gestureState) {\n  if (interactionState.handle) {\n    InteractionManager.clearInteractionHandle(interactionState.handle);\n    interactionState.handle = null;\n  }\n  if (callback) {\n    callback(event, gestureState);\n  }\n}\nfunction clearInteractionTimeout(interactionState) {\n  clearTimeout(interactionState.timeout);\n}\nfunction setInteractionTimeout(interactionState) {\n  interactionState.timeout = setTimeout(() => {\n    interactionState.shouldCancelClick = false;\n  }, 250);\n}\nexport default PanResponder;","import PanResponder from '../../vendor/react-native/PanResponder';\nexport default PanResponder;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport invariant from 'fbjs/lib/invariant';\nclass Share {\n  static share(content, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    invariant(typeof content === 'object' && content !== null, 'Content to share must be a valid object');\n    invariant(typeof content.url === 'string' || typeof content.message === 'string', 'At least one of URL and message is required');\n    invariant(typeof options === 'object' && options !== null, 'Options must be a valid object');\n    invariant(!content.title || typeof content.title === 'string', 'Invalid title: title should be a string.');\n    if (window.navigator.share !== undefined) {\n      return window.navigator.share({\n        title: content.title,\n        text: content.message,\n        url: content.url\n      });\n    } else {\n      return Promise.reject(new Error('Share is not supported in this browser'));\n    }\n  }\n\n  /**\n   * The content was successfully shared.\n   */\n  static get sharedAction() {\n    return 'sharedAction';\n  }\n\n  /**\n   * The dialog has been dismissed.\n   * @platform ios\n   */\n  static get dismissedAction() {\n    return 'dismissedAction';\n  }\n}\nexport default Share;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar vibrate = pattern => {\n  if ('vibrate' in window.navigator) {\n    window.navigator.vibrate(pattern);\n  }\n};\nvar Vibration = {\n  cancel() {\n    vibrate(0);\n  },\n  vibrate(pattern) {\n    if (pattern === void 0) {\n      pattern = 400;\n    }\n    vibrate(pattern);\n  }\n};\nexport default Vibration;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"aria-readonly\", \"color\", \"disabled\", \"onChange\", \"onValueChange\", \"readOnly\", \"style\", \"value\"];\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar CheckBox = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var ariaReadOnly = props['aria-readonly'],\n    color = props.color,\n    disabled = props.disabled,\n    onChange = props.onChange,\n    onValueChange = props.onValueChange,\n    readOnly = props.readOnly,\n    style = props.style,\n    value = props.value,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  function handleChange(event) {\n    var value = event.nativeEvent.target.checked;\n    event.nativeEvent.value = value;\n    onChange && onChange(event);\n    onValueChange && onValueChange(value);\n  }\n  var fakeControl = /*#__PURE__*/React.createElement(View, {\n    style: [styles.fakeControl, value && styles.fakeControlChecked,\n    // custom color\n    value && color && {\n      backgroundColor: color,\n      borderColor: color\n    }, disabled && styles.fakeControlDisabled, value && disabled && styles.fakeControlCheckedAndDisabled]\n  });\n  var nativeControl = createElement('input', {\n    checked: value,\n    disabled: disabled,\n    onChange: handleChange,\n    readOnly: readOnly === true || ariaReadOnly === true || other.accessibilityReadOnly === true,\n    ref: forwardedRef,\n    style: [styles.nativeControl, styles.cursorInherit],\n    type: 'checkbox'\n  });\n  return /*#__PURE__*/React.createElement(View, _extends({}, other, {\n    \"aria-disabled\": disabled,\n    \"aria-readonly\": ariaReadOnly,\n    style: [styles.root, style, disabled && styles.cursorDefault]\n  }), fakeControl, nativeControl);\n});\nCheckBox.displayName = 'CheckBox';\nvar styles = StyleSheet.create({\n  root: {\n    cursor: 'pointer',\n    height: 16,\n    userSelect: 'none',\n    width: 16\n  },\n  cursorDefault: {\n    cursor: 'default'\n  },\n  cursorInherit: {\n    cursor: 'inherit'\n  },\n  fakeControl: {\n    alignItems: 'center',\n    backgroundColor: '#fff',\n    borderColor: '#657786',\n    borderRadius: 2,\n    borderStyle: 'solid',\n    borderWidth: 2,\n    height: '100%',\n    justifyContent: 'center',\n    width: '100%'\n  },\n  fakeControlChecked: {\n    backgroundColor: '#009688',\n    backgroundImage: 'url(\"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgdmVyc2lvbj0iMS4xIgogICB2aWV3Qm94PSIwIDAgMSAxIgogICBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWluWU1pbiBtZWV0Ij4KICA8cGF0aAogICAgIGQ9Ik0gMC4wNDAzODA1OSwwLjYyNjc3NjcgMC4xNDY0NDY2MSwwLjUyMDcxMDY4IDAuNDI5Mjg5MzIsMC44MDM1NTMzOSAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IE0gMC4yMTcxNTcyOSwwLjgwMzU1MzM5IDAuODUzNTUzMzksMC4xNjcxNTcyOSAwLjk1OTYxOTQxLDAuMjczMjIzMyAwLjMyMzIyMzMsMC45MDk2MTk0MSB6IgogICAgIGlkPSJyZWN0Mzc4MCIKICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPgo8L3N2Zz4K\")',\n    backgroundRepeat: 'no-repeat',\n    borderColor: '#009688'\n  },\n  fakeControlDisabled: {\n    borderColor: '#CCD6DD'\n  },\n  fakeControlCheckedAndDisabled: {\n    backgroundColor: '#AAB8C2',\n    borderColor: '#AAB8C2'\n  },\n  nativeControl: _objectSpread(_objectSpread({}, StyleSheet.absoluteFillObject), {}, {\n    height: '100%',\n    margin: 0,\n    appearance: 'none',\n    padding: 0,\n    width: '100%'\n  })\n});\nexport default CheckBox;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport _objectSpread from \"@babel/runtime/helpers/objectSpread2\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"children\", \"enabled\", \"onValueChange\", \"selectedValue\", \"style\", \"testID\", \"itemStyle\", \"mode\", \"prompt\"];\nimport * as React from 'react';\nimport createElement from '../createElement';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePlatformMethods from '../../modules/usePlatformMethods';\nimport PickerItem from './PickerItem';\nimport StyleSheet from '../StyleSheet';\nvar Picker = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var children = props.children,\n    enabled = props.enabled,\n    onValueChange = props.onValueChange,\n    selectedValue = props.selectedValue,\n    style = props.style,\n    testID = props.testID,\n    itemStyle = props.itemStyle,\n    mode = props.mode,\n    prompt = props.prompt,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  var hostRef = React.useRef(null);\n  function handleChange(e) {\n    var _e$target = e.target,\n      selectedIndex = _e$target.selectedIndex,\n      value = _e$target.value;\n    if (onValueChange) {\n      onValueChange(value, selectedIndex);\n    }\n  }\n\n  // $FlowFixMe\n  var supportedProps = _objectSpread({\n    children,\n    disabled: enabled === false ? true : undefined,\n    onChange: handleChange,\n    style: [styles.initial, style],\n    testID,\n    value: selectedValue\n  }, other);\n  var platformMethodsRef = usePlatformMethods(supportedProps);\n  var setRef = useMergeRefs(hostRef, platformMethodsRef, forwardedRef);\n  supportedProps.ref = setRef;\n  return createElement('select', supportedProps);\n});\n\n// $FlowFixMe\nPicker.Item = PickerItem;\nvar styles = StyleSheet.create({\n  initial: {\n    fontFamily: 'System',\n    fontSize: 'inherit',\n    margin: 0\n  }\n});\nexport default Picker;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport createElement from '../createElement';\nexport default function PickerItem(props) {\n  var color = props.color,\n    label = props.label,\n    testID = props.testID,\n    value = props.value;\n  var style = {\n    color\n  };\n  return createElement('option', {\n    children: label,\n    style,\n    testID,\n    value\n  });\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"color\", \"indeterminate\", \"progress\", \"trackColor\", \"style\"];\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar ProgressBar = /*#__PURE__*/React.forwardRef((props, ref) => {\n  var _props$color = props.color,\n    color = _props$color === void 0 ? '#1976D2' : _props$color,\n    _props$indeterminate = props.indeterminate,\n    indeterminate = _props$indeterminate === void 0 ? false : _props$indeterminate,\n    _props$progress = props.progress,\n    progress = _props$progress === void 0 ? 0 : _props$progress,\n    _props$trackColor = props.trackColor,\n    trackColor = _props$trackColor === void 0 ? 'transparent' : _props$trackColor,\n    style = props.style,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  var percentageProgress = progress * 100;\n  var width = indeterminate ? '25%' : percentageProgress + \"%\";\n  return /*#__PURE__*/React.createElement(View, _extends({}, other, {\n    \"aria-valuemax\": 100,\n    \"aria-valuemin\": 0,\n    \"aria-valuenow\": indeterminate ? null : percentageProgress,\n    ref: ref,\n    role: \"progressbar\",\n    style: [styles.track, style, {\n      backgroundColor: trackColor\n    }]\n  }), /*#__PURE__*/React.createElement(View, {\n    style: [{\n      backgroundColor: color,\n      width\n    }, styles.progress, indeterminate && styles.animation]\n  }));\n});\nProgressBar.displayName = 'ProgressBar';\nvar styles = StyleSheet.create({\n  track: {\n    forcedColorAdjust: 'none',\n    height: 5,\n    overflow: 'hidden',\n    userSelect: 'none',\n    zIndex: 0\n  },\n  progress: {\n    forcedColorAdjust: 'none',\n    height: '100%',\n    zIndex: -1\n  },\n  animation: {\n    animationDuration: '1s',\n    animationKeyframes: [{\n      '0%': {\n        transform: 'translateX(-100%)'\n      },\n      '100%': {\n        transform: 'translateX(400%)'\n      }\n    }],\n    animationTimingFunction: 'linear',\n    animationIterationCount: 'infinite'\n  }\n});\nexport default ProgressBar;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport React from 'react';\nimport UnimplementedView from '../../modules/UnimplementedView';\nfunction YellowBox(props) {\n  return /*#__PURE__*/React.createElement(UnimplementedView, props);\n}\nYellowBox.ignoreWarnings = () => {};\nexport default YellowBox;","/**\n * Copyright (c) 2016-present, Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar LogBox = {\n  ignoreLogs() {},\n  ignoreAllLogs() {},\n  uninstall() {},\n  install() {}\n};\nexport default LogBox;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport * as React from 'react';\nimport Appearance from '../Appearance';\nexport default function useColorScheme() {\n  var _React$useState = React.useState(Appearance.getColorScheme()),\n    colorScheme = _React$useState[0],\n    setColorScheme = _React$useState[1];\n  React.useEffect(() => {\n    function listener(appearance) {\n      setColorScheme(appearance.colorScheme);\n    }\n    var _Appearance$addChange = Appearance.addChangeListener(listener),\n      remove = _Appearance$addChange.remove;\n    return remove;\n  });\n  return colorScheme;\n}","/**\n * Copyright (c) Nicolas Gallagher.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport { useLocaleContext } from '../../modules/useLocale';\nexport default useLocaleContext;","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @format\n * \n */\n\n'use client';\n\nimport Dimensions from '../Dimensions';\nimport { useEffect, useState } from 'react';\nexport default function useWindowDimensions() {\n  var _useState = useState(() => Dimensions.get('window')),\n    dims = _useState[0],\n    setDims = _useState[1];\n  useEffect(() => {\n    function handleChange(_ref) {\n      var window = _ref.window;\n      if (window != null) {\n        setDims(window);\n      }\n    }\n    Dimensions.addEventListener('change', handleChange);\n    // We might have missed an update between calling `get` in render and\n    // `addEventListener` in this handler, so we set it here. If there was\n    // no change, React will filter out this update as a no-op.\n    setDims(Dimensions.get('window'));\n    return () => {\n      Dimensions.removeEventListener('change', handleChange);\n    };\n  }, []);\n  return dims;\n}","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"animating\", \"color\", \"hidesWhenStopped\", \"size\", \"style\"];\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar createSvgCircle = style => /*#__PURE__*/React.createElement(\"circle\", {\n  cx: \"16\",\n  cy: \"16\",\n  fill: \"none\",\n  r: \"14\",\n  strokeWidth: \"4\",\n  style: style\n});\nvar ActivityIndicator = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var _props$animating = props.animating,\n    animating = _props$animating === void 0 ? true : _props$animating,\n    _props$color = props.color,\n    color = _props$color === void 0 ? '#1976D2' : _props$color,\n    _props$hidesWhenStopp = props.hidesWhenStopped,\n    hidesWhenStopped = _props$hidesWhenStopp === void 0 ? true : _props$hidesWhenStopp,\n    _props$size = props.size,\n    size = _props$size === void 0 ? 'small' : _props$size,\n    style = props.style,\n    other = _objectWithoutPropertiesLoose(props, _excluded);\n  var svg = /*#__PURE__*/React.createElement(\"svg\", {\n    height: \"100%\",\n    viewBox: \"0 0 32 32\",\n    width: \"100%\"\n  }, createSvgCircle({\n    stroke: color,\n    opacity: 0.2\n  }), createSvgCircle({\n    stroke: color,\n    strokeDasharray: 80,\n    strokeDashoffset: 60\n  }));\n  return /*#__PURE__*/React.createElement(View, _extends({}, other, {\n    \"aria-valuemax\": 1,\n    \"aria-valuemin\": 0,\n    ref: forwardedRef,\n    role: \"progressbar\",\n    style: [styles.container, style]\n  }), /*#__PURE__*/React.createElement(View, {\n    children: svg,\n    style: [typeof size === 'number' ? {\n      height: size,\n      width: size\n    } : indicatorSizes[size], styles.animation, !animating && styles.animationPause, !animating && hidesWhenStopped && styles.hidesWhenStopped]\n  }));\n});\nActivityIndicator.displayName = 'ActivityIndicator';\nvar styles = StyleSheet.create({\n  container: {\n    alignItems: 'center',\n    justifyContent: 'center'\n  },\n  hidesWhenStopped: {\n    visibility: 'hidden'\n  },\n  animation: {\n    animationDuration: '0.75s',\n    animationKeyframes: [{\n      '0%': {\n        transform: 'rotate(0deg)'\n      },\n      '100%': {\n        transform: 'rotate(360deg)'\n      }\n    }],\n    animationTimingFunction: 'linear',\n    animationIterationCount: 'infinite'\n  },\n  animationPause: {\n    animationPlayState: 'paused'\n  }\n});\nvar indicatorSizes = StyleSheet.create({\n  small: {\n    width: 20,\n    height: 20\n  },\n  large: {\n    width: 36,\n    height: 36\n  }\n});\nexport default ActivityIndicator;","import { jsx } from \"react/jsx-runtime\";\nimport { ActivityIndicator as RNActivityIndicator } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nimport { useUniwindAccent } from \"./useUniwindAccent.js\";\nexport const ActivityIndicator = copyComponentProperties(RNActivityIndicator, (props) => {\n  const color = useUniwindAccent(props.colorClassName);\n  return /* @__PURE__ */ jsx(\n    RNActivityIndicator,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      color: props.color ?? color,\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default ActivityIndicator;\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use client';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"activeOpacity\", \"delayPressIn\", \"delayPressOut\", \"delayLongPress\", \"disabled\", \"focusable\", \"onLongPress\", \"onPress\", \"onPressIn\", \"onPressOut\", \"rejectResponderTermination\", \"style\"];\nimport * as React from 'react';\nimport { useCallback, useMemo, useState, useRef } from 'react';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePressEvents from '../../modules/usePressEvents';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\n//import { warnOnce } from '../../modules/warnOnce';\n\n/**\n * A wrapper for making views respond properly to touches.\n * On press down, the opacity of the wrapped view is decreased, dimming it.\n */\nfunction TouchableOpacity(props, forwardedRef) {\n  /*\n  warnOnce(\n    'TouchableOpacity',\n    'TouchableOpacity is deprecated. Please use Pressable.'\n  );\n  */\n\n  var activeOpacity = props.activeOpacity,\n    delayPressIn = props.delayPressIn,\n    delayPressOut = props.delayPressOut,\n    delayLongPress = props.delayLongPress,\n    disabled = props.disabled,\n    focusable = props.focusable,\n    onLongPress = props.onLongPress,\n    onPress = props.onPress,\n    onPressIn = props.onPressIn,\n    onPressOut = props.onPressOut,\n    rejectResponderTermination = props.rejectResponderTermination,\n    style = props.style,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  var hostRef = useRef(null);\n  var setRef = useMergeRefs(forwardedRef, hostRef);\n  var _useState = useState('0s'),\n    duration = _useState[0],\n    setDuration = _useState[1];\n  var _useState2 = useState(null),\n    opacityOverride = _useState2[0],\n    setOpacityOverride = _useState2[1];\n  var setOpacityTo = useCallback((value, duration) => {\n    setOpacityOverride(value);\n    setDuration(duration ? duration / 1000 + \"s\" : '0s');\n  }, [setOpacityOverride, setDuration]);\n  var setOpacityActive = useCallback(duration => {\n    setOpacityTo(activeOpacity !== null && activeOpacity !== void 0 ? activeOpacity : 0.2, duration);\n  }, [activeOpacity, setOpacityTo]);\n  var setOpacityInactive = useCallback(duration => {\n    setOpacityTo(null, duration);\n  }, [setOpacityTo]);\n  var pressConfig = useMemo(() => ({\n    cancelable: !rejectResponderTermination,\n    disabled,\n    delayLongPress,\n    delayPressStart: delayPressIn,\n    delayPressEnd: delayPressOut,\n    onLongPress,\n    onPress,\n    onPressStart(event) {\n      var isGrant = event.dispatchConfig != null ? event.dispatchConfig.registrationName === 'onResponderGrant' : event.type === 'keydown';\n      setOpacityActive(isGrant ? 0 : 150);\n      if (onPressIn != null) {\n        onPressIn(event);\n      }\n    },\n    onPressEnd(event) {\n      setOpacityInactive(250);\n      if (onPressOut != null) {\n        onPressOut(event);\n      }\n    }\n  }), [delayLongPress, delayPressIn, delayPressOut, disabled, onLongPress, onPress, onPressIn, onPressOut, rejectResponderTermination, setOpacityActive, setOpacityInactive]);\n  var pressEventHandlers = usePressEvents(hostRef, pressConfig);\n  return /*#__PURE__*/React.createElement(View, _extends({}, rest, pressEventHandlers, {\n    accessibilityDisabled: disabled,\n    focusable: !disabled && focusable !== false,\n    pointerEvents: disabled ? 'box-none' : undefined,\n    ref: setRef,\n    style: [styles.root, !disabled && styles.actionable, style, opacityOverride != null && {\n      opacity: opacityOverride\n    }, {\n      transitionDuration: duration\n    }]\n  }));\n}\nvar styles = StyleSheet.create({\n  root: {\n    transitionProperty: 'opacity',\n    transitionDuration: '0.15s',\n    userSelect: 'none'\n  },\n  actionable: {\n    cursor: 'pointer',\n    touchAction: 'manipulation'\n  }\n});\nvar MemoedTouchableOpacity = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(TouchableOpacity));\nMemoedTouchableOpacity.displayName = 'TouchableOpacity';\nexport default MemoedTouchableOpacity;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport TouchableOpacity from '../TouchableOpacity';\nimport Text from '../Text';\n//import { warnOnce } from '../../modules/warnOnce';\n\nvar Button = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  // warnOnce('Button', 'Button is deprecated. Please use Pressable.');\n\n  var accessibilityLabel = props.accessibilityLabel,\n    color = props.color,\n    disabled = props.disabled,\n    onPress = props.onPress,\n    testID = props.testID,\n    title = props.title;\n  return /*#__PURE__*/React.createElement(TouchableOpacity, {\n    accessibilityLabel: accessibilityLabel,\n    accessibilityRole: \"button\",\n    disabled: disabled,\n    focusable: !disabled,\n    onPress: onPress,\n    ref: forwardedRef,\n    style: [styles.button, color && {\n      backgroundColor: color\n    }, disabled && styles.buttonDisabled],\n    testID: testID\n  }, /*#__PURE__*/React.createElement(Text, {\n    style: [styles.text, disabled && styles.textDisabled]\n  }, title));\n});\nButton.displayName = 'Button';\nvar styles = StyleSheet.create({\n  button: {\n    backgroundColor: '#2196F3',\n    borderRadius: 2\n  },\n  text: {\n    color: '#fff',\n    fontWeight: '500',\n    padding: 8,\n    textAlign: 'center',\n    textTransform: 'uppercase'\n  },\n  buttonDisabled: {\n    backgroundColor: '#dfdfdf'\n  },\n  textDisabled: {\n    color: '#a1a1a1'\n  }\n});\nexport default Button;","import { jsx } from \"react/jsx-runtime\";\nimport { Button as RNButton } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { useUniwindAccent } from \"./useUniwindAccent.js\";\nexport const Button = copyComponentProperties(RNButton, (props) => {\n  const color = useUniwindAccent(props.colorClassName);\n  return /* @__PURE__ */ jsx(\n    RNButton,\n    {\n      ...props,\n      color: props.color ?? color,\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default Button;\n","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"children\", \"style\", \"imageStyle\", \"imageRef\"];\n/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport { forwardRef } from 'react';\nimport Image from '../Image';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nvar emptyObject = {};\n\n/**\n * Very simple drop-in replacement for <Image> which supports nesting views.\n */\nvar ImageBackground = /*#__PURE__*/forwardRef((props, forwardedRef) => {\n  var children = props.children,\n    _props$style = props.style,\n    style = _props$style === void 0 ? emptyObject : _props$style,\n    imageStyle = props.imageStyle,\n    imageRef = props.imageRef,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  var _StyleSheet$flatten = StyleSheet.flatten(style),\n    height = _StyleSheet$flatten.height,\n    width = _StyleSheet$flatten.width;\n  return /*#__PURE__*/React.createElement(View, {\n    ref: forwardedRef,\n    style: style\n  }, /*#__PURE__*/React.createElement(Image, _extends({}, rest, {\n    ref: imageRef,\n    style: [{\n      // Temporary Workaround:\n      // Current (imperfect yet) implementation of <Image> overwrites width and height styles\n      // (which is not quite correct), and these styles conflict with explicitly set styles\n      // of <ImageBackground> and with our internal layout model here.\n      // So, we have to proxy/reapply these styles explicitly for actual <Image> component.\n      // This workaround should be removed after implementing proper support of\n      // intrinsic content size of the <Image>.\n      width,\n      height,\n      zIndex: -1\n    }, StyleSheet.absoluteFill, imageStyle]\n  })), children);\n});\nImageBackground.displayName = 'ImageBackground';\nexport default ImageBackground;","import { jsx } from \"react/jsx-runtime\";\nimport { ImageBackground as RNImageBackground } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nimport { useUniwindAccent } from \"./useUniwindAccent.js\";\nexport const ImageBackground = copyComponentProperties(RNImageBackground, (props) => {\n  const tintColor = useUniwindAccent(props.tintColorClassName);\n  return /* @__PURE__ */ jsx(\n    RNImageBackground,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      imageStyle: [toRNWClassName(props.imageClassName), props.imageStyle],\n      tintColor: props.tintColor ?? tintColor,\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default ImageBackground;\n","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"behavior\", \"contentContainerStyle\", \"keyboardVerticalOffset\"];\nimport * as React from 'react';\nimport View from '../View';\nclass KeyboardAvoidingView extends React.Component {\n  constructor() {\n    super(...arguments);\n    this.frame = null;\n    this.onLayout = event => {\n      this.frame = event.nativeEvent.layout;\n    };\n  }\n  relativeKeyboardHeight(keyboardFrame) {\n    var frame = this.frame;\n    if (!frame || !keyboardFrame) {\n      return 0;\n    }\n    var keyboardY = keyboardFrame.screenY - (this.props.keyboardVerticalOffset || 0);\n    return Math.max(frame.y + frame.height - keyboardY, 0);\n  }\n  onKeyboardChange(event) {}\n  render() {\n    var _this$props = this.props,\n      behavior = _this$props.behavior,\n      contentContainerStyle = _this$props.contentContainerStyle,\n      keyboardVerticalOffset = _this$props.keyboardVerticalOffset,\n      rest = _objectWithoutPropertiesLoose(_this$props, _excluded);\n    return /*#__PURE__*/React.createElement(View, _extends({\n      onLayout: this.onLayout\n    }, rest));\n  }\n}\nexport default KeyboardAvoidingView;","import { jsx } from \"react/jsx-runtime\";\nimport { KeyboardAvoidingView as RNKeyboardAvoidingView } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const KeyboardAvoidingView = copyComponentProperties(RNKeyboardAvoidingView, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNKeyboardAvoidingView,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      contentContainerStyle: [toRNWClassName(props.contentContainerClassName), props.contentContainerStyle],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default KeyboardAvoidingView;\n","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport canUseDOM from '../../modules/canUseDom';\nfunction ModalPortal(props) {\n  var children = props.children;\n  var elementRef = React.useRef(null);\n  if (canUseDOM && !elementRef.current) {\n    var element = document.createElement('div');\n    if (element && document.body) {\n      document.body.appendChild(element);\n      elementRef.current = element;\n    }\n  }\n  React.useEffect(() => {\n    if (canUseDOM) {\n      return () => {\n        if (document.body && elementRef.current) {\n          document.body.removeChild(elementRef.current);\n          elementRef.current = null;\n        }\n      };\n    }\n  }, []);\n  return elementRef.current && canUseDOM ? /*#__PURE__*/createPortal(children, elementRef.current) : null;\n}\nexport default ModalPortal;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport createElement from '../createElement';\nvar ANIMATION_DURATION = 250;\nfunction getAnimationStyle(animationType, visible) {\n  if (animationType === 'slide') {\n    return visible ? animatedSlideInStyles : animatedSlideOutStyles;\n  }\n  if (animationType === 'fade') {\n    return visible ? animatedFadeInStyles : animatedFadeOutStyles;\n  }\n  return visible ? styles.container : styles.hidden;\n}\nfunction ModalAnimation(props) {\n  var animationType = props.animationType,\n    children = props.children,\n    onDismiss = props.onDismiss,\n    onShow = props.onShow,\n    visible = props.visible;\n  var _React$useState = React.useState(false),\n    isRendering = _React$useState[0],\n    setIsRendering = _React$useState[1];\n  var wasVisible = React.useRef(false);\n  var wasRendering = React.useRef(false);\n  var isAnimated = animationType && animationType !== 'none';\n  var animationEndCallback = React.useCallback(e => {\n    if (e && e.currentTarget !== e.target) {\n      // If the event was generated for something NOT this element we\n      // should ignore it as it's not relevant to us\n      return;\n    }\n    if (visible) {\n      if (onShow) {\n        onShow();\n      }\n    } else {\n      setIsRendering(false);\n    }\n  }, [onShow, visible]);\n  React.useEffect(() => {\n    if (wasRendering.current && !isRendering && onDismiss) {\n      onDismiss();\n    }\n    wasRendering.current = isRendering;\n  }, [isRendering, onDismiss]);\n  React.useEffect(() => {\n    if (visible) {\n      setIsRendering(true);\n    }\n    if (visible !== wasVisible.current && !isAnimated) {\n      // Manually call `animationEndCallback` if no animation is used\n      animationEndCallback();\n    }\n    wasVisible.current = visible;\n  }, [isAnimated, visible, animationEndCallback]);\n  return isRendering || visible ? createElement('div', {\n    style: isRendering ? getAnimationStyle(animationType, visible) : styles.hidden,\n    onAnimationEnd: animationEndCallback,\n    children\n  }) : null;\n}\nvar styles = StyleSheet.create({\n  container: {\n    position: 'fixed',\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    zIndex: 9999\n  },\n  animatedIn: {\n    animationDuration: ANIMATION_DURATION + \"ms\",\n    animationTimingFunction: 'cubic-bezier(0.215, 0.61, 0.355, 1)'\n  },\n  animatedOut: {\n    pointerEvents: 'none',\n    animationDuration: ANIMATION_DURATION + \"ms\",\n    animationTimingFunction: 'cubic-bezier(0.47, 0, 0.745, 0.715)'\n  },\n  fadeIn: {\n    opacity: 1,\n    animationKeyframes: {\n      '0%': {\n        opacity: 0\n      },\n      '100%': {\n        opacity: 1\n      }\n    }\n  },\n  fadeOut: {\n    opacity: 0,\n    animationKeyframes: {\n      '0%': {\n        opacity: 1\n      },\n      '100%': {\n        opacity: 0\n      }\n    }\n  },\n  slideIn: {\n    transform: 'translateY(0%)',\n    animationKeyframes: {\n      '0%': {\n        transform: 'translateY(100%)'\n      },\n      '100%': {\n        transform: 'translateY(0%)'\n      }\n    }\n  },\n  slideOut: {\n    transform: 'translateY(100%)',\n    animationKeyframes: {\n      '0%': {\n        transform: 'translateY(0%)'\n      },\n      '100%': {\n        transform: 'translateY(100%)'\n      }\n    }\n  },\n  hidden: {\n    opacity: 0\n  }\n});\nvar animatedSlideInStyles = [styles.container, styles.animatedIn, styles.slideIn];\nvar animatedSlideOutStyles = [styles.container, styles.animatedOut, styles.slideOut];\nvar animatedFadeInStyles = [styles.container, styles.animatedIn, styles.fadeIn];\nvar animatedFadeOutStyles = [styles.container, styles.animatedOut, styles.fadeOut];\nexport default ModalAnimation;","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"active\", \"children\", \"onRequestClose\", \"transparent\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport View from '../View';\nimport StyleSheet from '../StyleSheet';\nimport canUseDOM from '../../modules/canUseDom';\nvar ModalContent = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var active = props.active,\n    children = props.children,\n    onRequestClose = props.onRequestClose,\n    transparent = props.transparent,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  React.useEffect(() => {\n    if (canUseDOM) {\n      var closeOnEscape = e => {\n        if (active && e.key === 'Escape') {\n          e.stopPropagation();\n          if (onRequestClose) {\n            onRequestClose();\n          }\n        }\n      };\n      document.addEventListener('keyup', closeOnEscape, false);\n      return () => document.removeEventListener('keyup', closeOnEscape, false);\n    }\n  }, [active, onRequestClose]);\n  var style = React.useMemo(() => {\n    return [styles.modal, transparent ? styles.modalTransparent : styles.modalOpaque];\n  }, [transparent]);\n  return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n    \"aria-modal\": true,\n    ref: forwardedRef,\n    role: active ? 'dialog' : null,\n    style: style\n  }), /*#__PURE__*/React.createElement(View, {\n    style: styles.container\n  }, children));\n});\nvar styles = StyleSheet.create({\n  modal: {\n    position: 'fixed',\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0\n  },\n  modalTransparent: {\n    backgroundColor: 'transparent'\n  },\n  modalOpaque: {\n    backgroundColor: 'white'\n  },\n  container: {\n    top: 0,\n    flex: 1\n  }\n});\nexport default ModalContent;","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport View from '../View';\nimport createElement from '../createElement';\nimport StyleSheet from '../StyleSheet';\nimport UIManager from '../UIManager';\nimport canUseDOM from '../../modules/canUseDom';\n\n/**\n * This Component is used to \"wrap\" the modal we're opening\n * so that changing focus via tab will never leave the document.\n *\n * This allows us to properly trap the focus within a modal\n * even if the modal is at the start or end of a document.\n */\n\nvar FocusBracket = () => {\n  return createElement('div', {\n    role: 'none',\n    tabIndex: 0,\n    style: styles.focusBracket\n  });\n};\nfunction attemptFocus(element) {\n  if (!canUseDOM) {\n    return false;\n  }\n  try {\n    element.focus();\n  } catch (e) {\n    // Do nothing\n  }\n  return document.activeElement === element;\n}\nfunction focusFirstDescendant(element) {\n  for (var i = 0; i < element.childNodes.length; i++) {\n    var child = element.childNodes[i];\n    if (attemptFocus(child) || focusFirstDescendant(child)) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction focusLastDescendant(element) {\n  for (var i = element.childNodes.length - 1; i >= 0; i--) {\n    var child = element.childNodes[i];\n    if (attemptFocus(child) || focusLastDescendant(child)) {\n      return true;\n    }\n  }\n  return false;\n}\nvar ModalFocusTrap = _ref => {\n  var active = _ref.active,\n    children = _ref.children;\n  var trapElementRef = React.useRef();\n  var focusRef = React.useRef({\n    trapFocusInProgress: false,\n    lastFocusedElement: null\n  });\n  React.useEffect(() => {\n    if (canUseDOM) {\n      var trapFocus = () => {\n        // We should not trap focus if:\n        // - The modal hasn't fully initialized with an HTMLElement ref\n        // - Focus is already in the process of being trapped (e.g., we're refocusing)\n        // - isTrapActive prop being falsey tells us to do nothing\n        if (trapElementRef.current == null || focusRef.current.trapFocusInProgress || !active) {\n          return;\n        }\n        try {\n          focusRef.current.trapFocusInProgress = true;\n          if (document.activeElement instanceof Node && !trapElementRef.current.contains(document.activeElement)) {\n            // To handle keyboard focusing we can make an assumption here.\n            // If you're tabbing through the focusable elements, the previously\n            // active element will either be the first or the last.\n            // If the previously selected element is the \"first\" descendant\n            // and we're leaving it - this means that we should be looping\n            // around to the other side of the modal.\n            var hasFocused = focusFirstDescendant(trapElementRef.current);\n            if (focusRef.current.lastFocusedElement === document.activeElement) {\n              hasFocused = focusLastDescendant(trapElementRef.current);\n            }\n            // If we couldn't focus a new element then we need to focus onto the trap target\n            if (!hasFocused && trapElementRef.current != null && document.activeElement) {\n              UIManager.focus(trapElementRef.current);\n            }\n          }\n        } finally {\n          focusRef.current.trapFocusInProgress = false;\n        }\n        focusRef.current.lastFocusedElement = document.activeElement;\n      };\n\n      // Call the trapFocus callback at least once when this modal has been activated.\n      trapFocus();\n      document.addEventListener('focus', trapFocus, true);\n      return () => document.removeEventListener('focus', trapFocus, true);\n    }\n  }, [active]);\n\n  // To be fully compliant with WCAG we need to refocus element that triggered opening modal\n  // after closing it\n  React.useEffect(function () {\n    if (canUseDOM) {\n      var lastFocusedElementOutsideTrap = document.activeElement;\n      return function () {\n        if (lastFocusedElementOutsideTrap && document.contains(lastFocusedElementOutsideTrap)) {\n          UIManager.focus(lastFocusedElementOutsideTrap);\n        }\n      };\n    }\n  }, []);\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FocusBracket, null), /*#__PURE__*/React.createElement(View, {\n    ref: trapElementRef\n  }, children), /*#__PURE__*/React.createElement(FocusBracket, null));\n};\nexport default ModalFocusTrap;\nvar styles = StyleSheet.create({\n  focusBracket: {\n    outlineStyle: 'none'\n  }\n});","/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"animationType\", \"children\", \"onDismiss\", \"onRequestClose\", \"onShow\", \"transparent\", \"visible\"];\nimport * as React from 'react';\nimport ModalPortal from './ModalPortal';\nimport ModalAnimation from './ModalAnimation';\nimport ModalContent from './ModalContent';\nimport ModalFocusTrap from './ModalFocusTrap';\nvar uniqueModalIdentifier = 0;\nvar activeModalStack = [];\nvar activeModalListeners = {};\nfunction notifyActiveModalListeners() {\n  if (activeModalStack.length === 0) {\n    return;\n  }\n  var activeModalId = activeModalStack[activeModalStack.length - 1];\n  activeModalStack.forEach(modalId => {\n    if (modalId in activeModalListeners) {\n      activeModalListeners[modalId](modalId === activeModalId);\n    }\n  });\n}\nfunction removeActiveModal(modalId) {\n  if (modalId in activeModalListeners) {\n    // Before removing this listener we should probably tell it\n    // that it's no longer the active modal for sure.\n    activeModalListeners[modalId](false);\n    delete activeModalListeners[modalId];\n  }\n  var index = activeModalStack.indexOf(modalId);\n  if (index !== -1) {\n    activeModalStack.splice(index, 1);\n    notifyActiveModalListeners();\n  }\n}\nfunction addActiveModal(modalId, listener) {\n  removeActiveModal(modalId);\n  activeModalStack.push(modalId);\n  activeModalListeners[modalId] = listener;\n  notifyActiveModalListeners();\n}\nvar Modal = /*#__PURE__*/React.forwardRef((props, forwardedRef) => {\n  var animationType = props.animationType,\n    children = props.children,\n    onDismiss = props.onDismiss,\n    onRequestClose = props.onRequestClose,\n    onShow = props.onShow,\n    transparent = props.transparent,\n    _props$visible = props.visible,\n    visible = _props$visible === void 0 ? true : _props$visible,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n\n  // Set a unique model identifier so we can correctly route\n  // dismissals and check the layering of modals.\n  var modalId = React.useMemo(() => uniqueModalIdentifier++, []);\n  var _React$useState = React.useState(false),\n    isActive = _React$useState[0],\n    setIsActive = _React$useState[1];\n  var onDismissCallback = React.useCallback(() => {\n    removeActiveModal(modalId);\n    if (onDismiss) {\n      onDismiss();\n    }\n  }, [modalId, onDismiss]);\n  var onShowCallback = React.useCallback(() => {\n    addActiveModal(modalId, setIsActive);\n    if (onShow) {\n      onShow();\n    }\n  }, [modalId, onShow]);\n  React.useEffect(() => {\n    return () => removeActiveModal(modalId);\n  }, [modalId]);\n  return /*#__PURE__*/React.createElement(ModalPortal, null, /*#__PURE__*/React.createElement(ModalAnimation, {\n    animationType: animationType,\n    onDismiss: onDismissCallback,\n    onShow: onShowCallback,\n    visible: visible\n  }, /*#__PURE__*/React.createElement(ModalFocusTrap, {\n    active: isActive\n  }, /*#__PURE__*/React.createElement(ModalContent, _extends({}, rest, {\n    active: isActive,\n    onRequestClose: onRequestClose,\n    ref: forwardedRef,\n    transparent: transparent\n  }), children))));\n});\nexport default Modal;","import { jsx } from \"react/jsx-runtime\";\nimport { Modal as RNModal } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const Modal = copyComponentProperties(RNModal, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNModal,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default Modal;\n","import _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"style\"];\n/**\n * Copyright (c) Nicolas Gallagher.\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nimport * as React from 'react';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\nimport canUseDOM from '../../modules/canUseDom';\nvar cssFunction = function () {\n  if (canUseDOM && window.CSS && window.CSS.supports && window.CSS.supports('top: constant(safe-area-inset-top)')) {\n    return 'constant';\n  }\n  return 'env';\n}();\nvar SafeAreaView = /*#__PURE__*/React.forwardRef((props, ref) => {\n  var style = props.style,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  return /*#__PURE__*/React.createElement(View, _extends({}, rest, {\n    ref: ref,\n    style: [styles.root, style]\n  }));\n});\nSafeAreaView.displayName = 'SafeAreaView';\nvar styles = StyleSheet.create({\n  root: {\n    paddingTop: cssFunction + \"(safe-area-inset-top)\",\n    paddingRight: cssFunction + \"(safe-area-inset-right)\",\n    paddingBottom: cssFunction + \"(safe-area-inset-bottom)\",\n    paddingLeft: cssFunction + \"(safe-area-inset-left)\"\n  }\n});\nexport default SafeAreaView;","import { jsx } from \"react/jsx-runtime\";\nimport { SafeAreaView as RNSafeAreaView } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const SafeAreaView = copyComponentProperties(RNSafeAreaView, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNSafeAreaView,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default SafeAreaView;\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use client';\n\nimport _extends from \"@babel/runtime/helpers/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/objectWithoutPropertiesLoose\";\nvar _excluded = [\"activeOpacity\", \"children\", \"delayPressIn\", \"delayPressOut\", \"delayLongPress\", \"disabled\", \"focusable\", \"onHideUnderlay\", \"onLongPress\", \"onPress\", \"onPressIn\", \"onPressOut\", \"onShowUnderlay\", \"rejectResponderTermination\", \"style\", \"testOnly_pressed\", \"underlayColor\"];\nimport * as React from 'react';\nimport { useCallback, useMemo, useState, useRef } from 'react';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePressEvents from '../../modules/usePressEvents';\nimport StyleSheet from '../StyleSheet';\nimport View from '../View';\n//import { warnOnce } from '../../modules/warnOnce';\n\nfunction createExtraStyles(activeOpacity, underlayColor) {\n  return {\n    child: {\n      opacity: activeOpacity !== null && activeOpacity !== void 0 ? activeOpacity : 0.85\n    },\n    underlay: {\n      backgroundColor: underlayColor === undefined ? 'black' : underlayColor\n    }\n  };\n}\nfunction hasPressHandler(props) {\n  return props.onPress != null || props.onPressIn != null || props.onPressOut != null || props.onLongPress != null;\n}\n\n/**\n * A wrapper for making views respond properly to touches.\n * On press down, the opacity of the wrapped view is decreased, which allows\n * the underlay color to show through, darkening or tinting the view.\n *\n * The underlay comes from wrapping the child in a new View, which can affect\n * layout, and sometimes cause unwanted visual artifacts if not used correctly,\n * for example if the backgroundColor of the wrapped view isn't explicitly set\n * to an opaque color.\n *\n * TouchableHighlight must have one child (not zero or more than one).\n * If you wish to have several child components, wrap them in a View.\n */\nfunction TouchableHighlight(props, forwardedRef) {\n  /*\n  warnOnce(\n    'TouchableHighlight',\n    'TouchableHighlight is deprecated. Please use Pressable.'\n  );\n  */\n\n  var activeOpacity = props.activeOpacity,\n    children = props.children,\n    delayPressIn = props.delayPressIn,\n    delayPressOut = props.delayPressOut,\n    delayLongPress = props.delayLongPress,\n    disabled = props.disabled,\n    focusable = props.focusable,\n    onHideUnderlay = props.onHideUnderlay,\n    onLongPress = props.onLongPress,\n    onPress = props.onPress,\n    onPressIn = props.onPressIn,\n    onPressOut = props.onPressOut,\n    onShowUnderlay = props.onShowUnderlay,\n    rejectResponderTermination = props.rejectResponderTermination,\n    style = props.style,\n    testOnly_pressed = props.testOnly_pressed,\n    underlayColor = props.underlayColor,\n    rest = _objectWithoutPropertiesLoose(props, _excluded);\n  var hostRef = useRef(null);\n  var setRef = useMergeRefs(forwardedRef, hostRef);\n  var _useState = useState(testOnly_pressed === true ? createExtraStyles(activeOpacity, underlayColor) : null),\n    extraStyles = _useState[0],\n    setExtraStyles = _useState[1];\n  var showUnderlay = useCallback(() => {\n    if (!hasPressHandler(props)) {\n      return;\n    }\n    setExtraStyles(createExtraStyles(activeOpacity, underlayColor));\n    if (onShowUnderlay != null) {\n      onShowUnderlay();\n    }\n  }, [activeOpacity, onShowUnderlay, props, underlayColor]);\n  var hideUnderlay = useCallback(() => {\n    if (testOnly_pressed === true) {\n      return;\n    }\n    if (hasPressHandler(props)) {\n      setExtraStyles(null);\n      if (onHideUnderlay != null) {\n        onHideUnderlay();\n      }\n    }\n  }, [onHideUnderlay, props, testOnly_pressed]);\n  var pressConfig = useMemo(() => ({\n    cancelable: !rejectResponderTermination,\n    disabled,\n    delayLongPress,\n    delayPressStart: delayPressIn,\n    delayPressEnd: delayPressOut,\n    onLongPress,\n    onPress,\n    onPressStart(event) {\n      showUnderlay();\n      if (onPressIn != null) {\n        onPressIn(event);\n      }\n    },\n    onPressEnd(event) {\n      hideUnderlay();\n      if (onPressOut != null) {\n        onPressOut(event);\n      }\n    }\n  }), [delayLongPress, delayPressIn, delayPressOut, disabled, onLongPress, onPress, onPressIn, onPressOut, rejectResponderTermination, showUnderlay, hideUnderlay]);\n  var pressEventHandlers = usePressEvents(hostRef, pressConfig);\n  var child = React.Children.only(children);\n  return /*#__PURE__*/React.createElement(View, _extends({}, rest, pressEventHandlers, {\n    accessibilityDisabled: disabled,\n    focusable: !disabled && focusable !== false,\n    pointerEvents: disabled ? 'box-none' : undefined,\n    ref: setRef,\n    style: [styles.root, style, !disabled && styles.actionable, extraStyles && extraStyles.underlay]\n  }), /*#__PURE__*/React.cloneElement(child, {\n    style: [child.props.style, extraStyles && extraStyles.child]\n  }));\n}\nvar styles = StyleSheet.create({\n  root: {\n    userSelect: 'none'\n  },\n  actionable: {\n    cursor: 'pointer',\n    touchAction: 'manipulation'\n  }\n});\nvar MemoedTouchableHighlight = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(TouchableHighlight));\nMemoedTouchableHighlight.displayName = 'TouchableHighlight';\nexport default MemoedTouchableHighlight;","import { jsx } from \"react/jsx-runtime\";\nimport { TouchableHighlight as RNTouchableHighlight } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nimport { useUniwindAccent } from \"./useUniwindAccent.js\";\nexport const TouchableHighlight = copyComponentProperties(RNTouchableHighlight, (props) => {\n  const underlayColor = useUniwindAccent(props.underlayColorClassName);\n  return /* @__PURE__ */ jsx(\n    RNTouchableHighlight,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      underlayColor: props.underlayColor ?? underlayColor,\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default TouchableHighlight;\n","import { jsx } from \"react/jsx-runtime\";\nimport { TouchableOpacity as RNTouchableOpacity } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const TouchableOpacity = copyComponentProperties(RNTouchableOpacity, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNTouchableOpacity,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default TouchableOpacity;\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n\n'use client';\n\nimport * as React from 'react';\nimport { useMemo, useRef } from 'react';\nimport pick from '../../modules/pick';\nimport useMergeRefs from '../../modules/useMergeRefs';\nimport usePressEvents from '../../modules/usePressEvents';\nimport { warnOnce } from '../../modules/warnOnce';\nvar forwardPropsList = {\n  accessibilityDisabled: true,\n  accessibilityLabel: true,\n  accessibilityLiveRegion: true,\n  accessibilityRole: true,\n  accessibilityState: true,\n  accessibilityValue: true,\n  children: true,\n  disabled: true,\n  focusable: true,\n  nativeID: true,\n  onBlur: true,\n  onFocus: true,\n  onLayout: true,\n  testID: true\n};\nvar pickProps = props => pick(props, forwardPropsList);\nfunction TouchableWithoutFeedback(props, forwardedRef) {\n  warnOnce('TouchableWithoutFeedback', 'TouchableWithoutFeedback is deprecated. Please use Pressable.');\n  var delayPressIn = props.delayPressIn,\n    delayPressOut = props.delayPressOut,\n    delayLongPress = props.delayLongPress,\n    disabled = props.disabled,\n    focusable = props.focusable,\n    onLongPress = props.onLongPress,\n    onPress = props.onPress,\n    onPressIn = props.onPressIn,\n    onPressOut = props.onPressOut,\n    rejectResponderTermination = props.rejectResponderTermination;\n  var hostRef = useRef(null);\n  var pressConfig = useMemo(() => ({\n    cancelable: !rejectResponderTermination,\n    disabled,\n    delayLongPress,\n    delayPressStart: delayPressIn,\n    delayPressEnd: delayPressOut,\n    onLongPress,\n    onPress,\n    onPressStart: onPressIn,\n    onPressEnd: onPressOut\n  }), [disabled, delayPressIn, delayPressOut, delayLongPress, onLongPress, onPress, onPressIn, onPressOut, rejectResponderTermination]);\n  var pressEventHandlers = usePressEvents(hostRef, pressConfig);\n  var element = React.Children.only(props.children);\n  var children = [element.props.children];\n  var supportedProps = pickProps(props);\n  supportedProps.accessibilityDisabled = disabled;\n  supportedProps.focusable = !disabled && focusable !== false;\n  supportedProps.ref = useMergeRefs(forwardedRef, hostRef, element.ref);\n  var elementProps = Object.assign(supportedProps, pressEventHandlers);\n  return /*#__PURE__*/React.cloneElement(element, elementProps, ...children);\n}\nvar MemoedTouchableWithoutFeedback = /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(TouchableWithoutFeedback));\nMemoedTouchableWithoutFeedback.displayName = 'TouchableWithoutFeedback';\nexport default MemoedTouchableWithoutFeedback;","import { jsx } from \"react/jsx-runtime\";\nimport { TouchableWithoutFeedback as RNTouchableWithoutFeedback } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const TouchableWithoutFeedback = copyComponentProperties(RNTouchableWithoutFeedback, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNTouchableWithoutFeedback,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default TouchableWithoutFeedback;\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\n'use client';\n\nimport VirtualizedList from '../../vendor/react-native/VirtualizedList';\nexport default VirtualizedList;","import { jsx } from \"react/jsx-runtime\";\nimport { VirtualizedList as RNVirtualizedList } from \"react-native\";\nimport { copyComponentProperties } from \"../utils.js\";\nimport { generateDataSet } from \"./generateDataSet.js\";\nimport { toRNWClassName } from \"./rnw.js\";\nexport const VirtualizedList = copyComponentProperties(RNVirtualizedList, (props) => {\n  return /* @__PURE__ */ jsx(\n    RNVirtualizedList,\n    {\n      ...props,\n      style: [toRNWClassName(props.className), props.style],\n      contentContainerStyle: [toRNWClassName(props.contentContainerClassName), props.contentContainerStyle],\n      ListFooterComponentStyle: [toRNWClassName(props.ListFooterComponentClassName), props.ListFooterComponentStyle],\n      ListHeaderComponentStyle: [toRNWClassName(props.ListHeaderComponentClassName), props.ListHeaderComponentStyle],\n      dataSet: generateDataSet(props)\n    }\n  );\n});\nexport default VirtualizedList;\n","import { getWebVariable } from \"../../core/web/index.js\";\nexport const getVariableValue = getWebVariable;\n","import { Appearance, Platform } from \"react-native\";\nimport { getCSSVariable } from \"../../hooks/useCSSVariable/useCSSVariable.js\";\nimport { ColorScheme, StyleDependency } from \"../../types.js\";\nimport { UniwindListener } from \"../listener.js\";\nconst SYSTEM_THEME = \"system\";\nconst RN_VERSION = Platform.constants?.reactNativeVersion?.minor ?? 0;\nconst UNSPECIFIED_THEME = RN_VERSION >= 82 ? \"unspecified\" : void 0;\nexport class UniwindConfigBuilder {\n  _themes = [\"light\", \"dark\"];\n  #hasAdaptiveThemes = true;\n  #currentTheme = this.colorScheme;\n  constructor() {\n    Appearance.addChangeListener((event) => {\n      const colorScheme = event.colorScheme === \"unspecified\" ? ColorScheme.Light : event.colorScheme ?? ColorScheme.Light;\n      const prevTheme = this.#currentTheme;\n      if (this.#hasAdaptiveThemes && prevTheme !== colorScheme) {\n        this.#currentTheme = colorScheme;\n        this.onThemeChange();\n        UniwindListener.notify([StyleDependency.Theme]);\n      }\n    });\n  }\n  get themes() {\n    return this._themes;\n  }\n  get hasAdaptiveThemes() {\n    return this.#hasAdaptiveThemes;\n  }\n  get currentTheme() {\n    return this.#currentTheme;\n  }\n  get colorScheme() {\n    const colorScheme = Appearance.getColorScheme();\n    if (colorScheme === \"unspecified\") {\n      return ColorScheme.Light;\n    }\n    return colorScheme ?? ColorScheme.Light;\n  }\n  // oxlint-disable-next-line typescript/no-redundant-type-constituents\n  setTheme(theme) {\n    const prevTheme = this.#currentTheme;\n    const prevHasAdaptiveThemes = this.#hasAdaptiveThemes;\n    const isAdaptiveTheme = [\"light\", \"dark\"].includes(theme);\n    try {\n      if (theme === SYSTEM_THEME) {\n        this.#hasAdaptiveThemes = true;\n        this.#currentTheme = this.colorScheme;\n        if (Platform.OS !== \"web\") {\n          Appearance.setColorScheme(UNSPECIFIED_THEME);\n        }\n        return;\n      }\n      if (!this._themes.includes(theme)) {\n        throw new Error(`Uniwind: You're trying to setTheme to '${theme}', but it was not registered.`);\n      }\n      this.#hasAdaptiveThemes = false;\n      this.#currentTheme = theme;\n      if (Platform.OS !== \"web\") {\n        Appearance.setColorScheme(\n          // @ts-expect-error RN >0.82 - breaking change\n          isAdaptiveTheme ? this.#currentTheme : UNSPECIFIED_THEME\n        );\n      }\n    } finally {\n      if (prevTheme !== this.#currentTheme) {\n        this.onThemeChange();\n        UniwindListener.notify([StyleDependency.Theme]);\n      }\n      if (prevHasAdaptiveThemes !== this.#hasAdaptiveThemes) {\n        UniwindListener.notify([StyleDependency.AdaptiveThemes]);\n      }\n    }\n  }\n  // oxlint-disable-next-line typescript/no-unused-vars\n  updateCSSVariables(theme, cssVariables) {\n  }\n  // oxlint-disable-next-line typescript/no-unused-vars\n  updateInsets(insets) {\n  }\n  getCSSVariable = ((variableName) => {\n    return getCSSVariable(variableName, { scopedTheme: null });\n  });\n  __reinit(_, themes) {\n    this._themes = themes;\n  }\n  onThemeChange() {\n  }\n}\nexport const Uniwind = new UniwindConfigBuilder();\n","import { useLayoutEffect, useRef, useState } from \"react\";\nimport { arrayEquals } from \"../../common/utils.js\";\nimport { useUniwindContext } from \"../../core/context.js\";\nimport { UniwindListener } from \"../../core/listener.js\";\nimport { Logger } from \"../../core/logger.js\";\nimport { StyleDependency } from \"../../types.js\";\nimport { getVariableValue } from \"./getVariableValue.js\";\nlet warned = false;\nconst logDevError = (name) => {\n  warned = true;\n  Logger.warn(\n    `We couldn't find your variable ${name}. Make sure it's used at least once in your className, or define it in a static theme as described in the docs: https://docs.uniwind.dev/api/use-css-variable`\n  );\n};\nexport const getCSSVariable = (name, uniwindContext) => {\n  const value = Array.isArray(name) ? name.map((name2) => getVariableValue(name2, uniwindContext)) : getVariableValue(name, uniwindContext);\n  if (Array.isArray(value)) {\n    value.forEach((val, index) => {\n      if (val === void 0 && __DEV__ && !warned) {\n        logDevError(name[index] ?? \"\");\n      }\n    });\n  }\n  if (value === void 0 && __DEV__ && !warned) {\n    logDevError(name);\n  }\n  return value;\n};\nexport const useCSSVariable = (name) => {\n  const uniwindContext = useUniwindContext();\n  const [value, setValue] = useState(getCSSVariable(name, uniwindContext));\n  const nameRef = useRef(name);\n  useLayoutEffect(() => {\n    if (Array.isArray(name) && Array.isArray(nameRef.current)) {\n      if (arrayEquals(name, nameRef.current)) {\n        return;\n      }\n      setValue(getCSSVariable(name, uniwindContext));\n      nameRef.current = name;\n      return;\n    }\n    if (name !== nameRef.current) {\n      setValue(getCSSVariable(name, uniwindContext));\n      nameRef.current = name;\n    }\n  }, [name]);\n  useLayoutEffect(() => {\n    const updateValue = () => setValue(getCSSVariable(nameRef.current, uniwindContext));\n    const dispose = UniwindListener.subscribe(\n      updateValue,\n      [StyleDependency.Theme, StyleDependency.Variables]\n    );\n    return dispose;\n  }, [uniwindContext]);\n  return value;\n};\n","import { arrayEquals } from \"../../common/utils.js\";\nimport { StyleDependency } from \"../../types.js\";\nimport { UniwindListener } from \"../listener.js\";\nimport { Logger } from \"../logger.js\";\nimport { getWebVariable } from \"../web/index.js\";\nimport { UniwindConfigBuilder as UniwindConfigBuilderBase } from \"./config.common.js\";\nclass UniwindConfigBuilder extends UniwindConfigBuilderBase {\n  cssRules;\n  constructor() {\n    super();\n  }\n  updateCSSVariables(theme, variables) {\n    if (typeof document === \"undefined\") {\n      return;\n    }\n    const uniwindRules = this.getUniwindDynamicCSSRules();\n    Object.entries(variables).forEach(([varName, varValue]) => {\n      if (!varName.startsWith(\"--\") && __DEV__) {\n        Logger.error(`CSS variable name must start with \"--\", instead got: ${varName}`);\n      }\n      const existingRules = Object.fromEntries(\n        uniwindRules.map((rule) => [rule.theme, getWebVariable(varName, { scopedTheme: rule.theme })])\n      );\n      uniwindRules.forEach((rule) => {\n        if (rule.theme === theme) {\n          rule.style.setProperty(\n            varName,\n            typeof varValue === \"number\" ? `${varValue}px` : varValue\n          );\n          return;\n        }\n        rule.style.setProperty(varName, existingRules[rule.theme] ?? null);\n      });\n    });\n    UniwindListener.notify([StyleDependency.Variables]);\n  }\n  __reinit(generateStyleSheetCallback, themes) {\n    const oldThemes = this.themes;\n    super.__reinit(generateStyleSheetCallback, themes);\n    if (arrayEquals(themes, oldThemes)) {\n      return;\n    }\n    this.cssRules = void 0;\n    if (typeof document !== \"undefined\") {\n      document.querySelector(\"#uniwind-dynamic-styles\")?.remove();\n    }\n  }\n  getUniwindDynamicCSSRules() {\n    if (this.cssRules) {\n      return this.cssRules;\n    }\n    if (typeof document === \"undefined\") {\n      return [];\n    }\n    const styleElement = document.createElement(\"style\");\n    styleElement.innerText = this.themes.reduce(\n      (acc, theme) => {\n        return `${acc}.${theme}{}`;\n      },\n      \"\"\n    );\n    styleElement.setAttribute(\"id\", \"uniwind-dynamic-styles\");\n    document.head.appendChild(styleElement);\n    const cssRules = Array.from(styleElement.sheet?.cssRules ?? []).filter((rule) => \"selectorText\" in rule && \"style\" in rule).map((rule) => ({ style: rule.style, theme: rule.selectorText.replace(\".\", \"\") }));\n    this.cssRules = cssRules;\n    return cssRules;\n  }\n}\nexport const Uniwind = new UniwindConfigBuilder();\n","export const isDefined = (value) => value !== void 0 && value !== null;\nexport const arrayEquals = (a, b) => {\n  if (a.length !== b.length) {\n    return false;\n  }\n  return a.every((value, index) => value === b[index]);\n};\n","import { Uniwind } from \"../../core/index.js\";\nimport { UniwindListener } from \"../../core/listener.js\";\nimport { StyleDependency } from \"../../types.js\";\nimport \"./metro-injected\";\nconst addClassNameToRoot = () => {\n  if (typeof document === \"undefined\") {\n    return;\n  }\n  const root = document.documentElement;\n  Uniwind.themes.forEach((theme) => root.classList.remove(theme));\n  root.classList.add(Uniwind.currentTheme);\n};\nUniwindListener.subscribe(() => {\n  addClassNameToRoot();\n}, [StyleDependency.Theme]);\naddClassNameToRoot();\nexport const toRNWClassName = (className) => className !== void 0 ? { $$css: true, tailwind: className } : {};\n","import { isDefined } from \"../../common/utils.js\";\nimport { Logger } from \"../../core/logger.js\";\nimport { formatColor } from \"../../core/web/formatColor.js\";\nimport { useResolveClassNames } from \"../../hooks/useResolveClassNames.js\";\nlet warnedOnce = false;\nexport const useUniwindAccent = (className) => {\n  const styles = useResolveClassNames(className ?? \"\");\n  if (__DEV__ && !warnedOnce && isDefined(className) && className.trim() !== \"\" && styles.accentColor === void 0) {\n    warnedOnce = true;\n    Logger.warn(\n      `className '${className}' was provided to extract accentColor but no color was found. Make sure the className includes a color utility (e.g., 'accent-red-500', 'accent-blue-600'). See https://docs.uniwind.dev/class-names#the-accent-prefix`\n    );\n  }\n  return styles.accentColor !== void 0 ? formatColor(styles.accentColor) : void 0;\n};\n","import { StyleDependency } from \"../types.js\";\nclass UniwindListenerBuilder {\n  listeners = {\n    [StyleDependency.ColorScheme]: /* @__PURE__ */ new Set(),\n    [StyleDependency.Theme]: /* @__PURE__ */ new Set(),\n    [StyleDependency.Dimensions]: /* @__PURE__ */ new Set(),\n    [StyleDependency.Orientation]: /* @__PURE__ */ new Set(),\n    [StyleDependency.Insets]: /* @__PURE__ */ new Set(),\n    [StyleDependency.FontScale]: /* @__PURE__ */ new Set(),\n    [StyleDependency.Rtl]: /* @__PURE__ */ new Set(),\n    [StyleDependency.AdaptiveThemes]: /* @__PURE__ */ new Set(),\n    [StyleDependency.Variables]: /* @__PURE__ */ new Set()\n  };\n  notify(dependencies) {\n    dependencies.forEach((dep) => {\n      this.listeners[dep].forEach((callback) => callback());\n    });\n  }\n  notifyAll() {\n    Object.values(this.listeners).forEach((listenerSet) => {\n      listenerSet.forEach((callback) => callback());\n    });\n  }\n  subscribe(listener, dependencies, options) {\n    const wrappedListeners = /* @__PURE__ */ new Map();\n    const dispose = () => {\n      wrappedListeners.forEach((wrappedListener, dep) => {\n        this.listeners[dep].delete(wrappedListener);\n      });\n      wrappedListeners.clear();\n    };\n    dependencies.forEach((dep) => {\n      const wrappedListener = () => {\n        listener();\n        if (options?.once) {\n          dispose();\n        }\n      };\n      wrappedListeners.set(dep, wrappedListener);\n      this.listeners[dep].add(wrappedListener);\n    });\n    return dispose;\n  }\n}\nexport const UniwindListener = new UniwindListenerBuilder();\n","import { StyleDependency } from \"../../types.js\";\nimport { UniwindListener } from \"../listener.js\";\nclass CSSListenerBuilder {\n  activeRules = /* @__PURE__ */ new Set();\n  classNameMediaQueryListeners = /* @__PURE__ */ new Map();\n  listeners = /* @__PURE__ */ new Map();\n  registeredRulesMediaQueries = /* @__PURE__ */ new Map();\n  processedStyleSheets = /* @__PURE__ */ new WeakSet();\n  pendingInitialization = void 0;\n  constructor() {\n    if (typeof document === \"undefined\") {\n      return;\n    }\n    const observer = new MutationObserver((mutations) => {\n      for (const mutation of mutations) {\n        if (mutation.type === \"attributes\") {\n          const el = mutation.target;\n          if (!(\"sheet\" in el)) {\n            continue;\n          }\n          const sheet = el.sheet;\n          if (sheet) {\n            this.processedStyleSheets.delete(sheet);\n          }\n          this.scheduleInitialization();\n        }\n        if (mutation.type === \"childList\") {\n          this.scheduleInitialization();\n        }\n      }\n    });\n    this.initialize();\n    observer.observe(document.head, {\n      childList: true,\n      subtree: false,\n      attributes: true,\n      attributeFilter: [\"disabled\", \"media\", \"title\", \"href\", \"rel\"]\n    });\n  }\n  subscribeToClassName(classNames, listener) {\n    const disposables = [];\n    classNames.split(\" \").forEach((className) => {\n      const mediaQuery = this.classNameMediaQueryListeners.get(className);\n      if (!mediaQuery) {\n        return () => {\n        };\n      }\n      const listeners = this.listeners.get(mediaQuery);\n      listeners?.add(listener);\n      disposables.push(() => listeners?.delete(listener));\n    });\n    const disposeThemeListener = UniwindListener.subscribe(listener, [StyleDependency.Theme, StyleDependency.Variables]);\n    return () => {\n      disposables.forEach((disposable) => disposable());\n      disposeThemeListener();\n    };\n  }\n  scheduleInitialization() {\n    this.cancelPendingInitialization();\n    if (typeof requestIdleCallback !== \"undefined\") {\n      this.pendingInitialization = requestIdleCallback(() => {\n        this.initialize();\n      }, { timeout: 50 });\n      return;\n    }\n    this.pendingInitialization = setTimeout(() => {\n      this.initialize();\n    }, 50);\n  }\n  cancelPendingInitialization() {\n    if (this.pendingInitialization !== void 0) {\n      if (typeof cancelIdleCallback !== \"undefined\") {\n        cancelIdleCallback(this.pendingInitialization);\n      } else {\n        clearTimeout(this.pendingInitialization);\n      }\n      this.pendingInitialization = void 0;\n    }\n  }\n  pruneStaleRules() {\n    const activeSheets = new Set(Array.from(document.styleSheets));\n    for (const rule of this.activeRules) {\n      if (!rule.parentStyleSheet || !activeSheets.has(rule.parentStyleSheet)) {\n        this.activeRules.delete(rule);\n      }\n    }\n  }\n  initialize() {\n    this.pendingInitialization = void 0;\n    this.pruneStaleRules();\n    for (const sheet of Array.from(document.styleSheets)) {\n      if (this.processedStyleSheets.has(sheet)) {\n        continue;\n      }\n      let rules;\n      try {\n        rules = sheet.cssRules;\n      } catch {\n        continue;\n      }\n      if (!rules) {\n        continue;\n      }\n      this.processedStyleSheets.add(sheet);\n      this.addMediaQueriesDeep(rules);\n    }\n  }\n  isStyleRule(rule) {\n    return rule.constructor.name === \"CSSStyleRule\";\n  }\n  isMediaRule(rule) {\n    return rule.constructor.name === \"CSSMediaRule\";\n  }\n  isSupportsRule(rule) {\n    return rule.constructor.name === \"CSSSupportsRule\";\n  }\n  collectParentMediaQueries(rule, acc = []) {\n    const { parentRule } = rule;\n    if (!parentRule) {\n      return [];\n    }\n    if (this.isMediaRule(parentRule)) {\n      acc.push(parentRule);\n    }\n    const result = this.collectParentMediaQueries(parentRule, acc);\n    acc.push(...result);\n    return Array.from(new Set(acc));\n  }\n  addMediaQueriesDeep(rules) {\n    for (const rule of Array.from(rules)) {\n      if (this.isStyleRule(rule)) {\n        const mediaQueries = this.collectParentMediaQueries(rule);\n        this.activeRules.add(rule);\n        if (mediaQueries.length > 0) {\n          this.addMediaQuery(mediaQueries, rule);\n        }\n        continue;\n      }\n      if (this.isSupportsRule(rule)) {\n        if (!CSS.supports(rule.conditionText)) {\n          continue;\n        }\n        this.addMediaQueriesDeep(rule.cssRules);\n        continue;\n      }\n      if (\"cssRules\" in rule && rule.cssRules instanceof CSSRuleList) {\n        this.addMediaQueriesDeep(rule.cssRules);\n        continue;\n      }\n    }\n  }\n  addMediaQuery(mediaQueries, rule) {\n    const className = rule.selectorText;\n    const rules = mediaQueries.map((mediaQuery) => mediaQuery.conditionText).sort().join(\" and \");\n    const parsedClassName = className.replace(\".\", \"\").replace(\"\\\\\", \"\");\n    const cachedMediaQueryList = this.registeredRulesMediaQueries.get(rules);\n    if (cachedMediaQueryList) {\n      this.classNameMediaQueryListeners.set(parsedClassName, cachedMediaQueryList);\n      this.toggleRule(cachedMediaQueryList, rule);\n      cachedMediaQueryList.addEventListener(\"change\", () => {\n        this.toggleRule(cachedMediaQueryList, rule);\n      });\n      return;\n    }\n    const mediaQueryList = window.matchMedia(rules);\n    this.toggleRule(mediaQueryList, rule);\n    this.registeredRulesMediaQueries.set(rules, mediaQueryList);\n    this.listeners.set(mediaQueryList, /* @__PURE__ */ new Set());\n    this.classNameMediaQueryListeners.set(parsedClassName, mediaQueryList);\n    mediaQueryList.addEventListener(\"change\", () => {\n      this.listeners.get(mediaQueryList).forEach((listener) => {\n        listener();\n      });\n      this.toggleRule(mediaQueryList, rule);\n    });\n  }\n  isRuleLive(rule) {\n    const sheet = rule.parentStyleSheet;\n    return sheet !== null && Array.from(document.styleSheets).includes(sheet);\n  }\n  toggleRule(mqList, rule) {\n    if (mqList.matches && this.isRuleLive(rule)) {\n      this.activeRules.add(rule);\n    } else {\n      this.activeRules.delete(rule);\n    }\n  }\n}\nexport const CSSListener = new CSSListenerBuilder();\n","import { formatHex, formatHex8, parse } from \"culori\";\nexport const formatColor = (color) => {\n  const parsedColor = parse(color);\n  if (!parsedColor) {\n    return color;\n  }\n  return parsedColor.alpha !== void 0 && parsedColor.alpha !== 1 ? formatHex8(parsedColor) : formatHex(parsedColor);\n};\n","import { parse } from \"culori\";\nimport { formatColor } from \"./formatColor.js\";\nexport const parseCSSValue = (value) => {\n  if (isNaN(Number(value)) && parse(value) !== void 0) {\n    return formatColor(value);\n  }\n  return value;\n};\n","import { generateDataSet } from \"../../components/web/generateDataSet.js\";\nimport { CSSListener } from \"./cssListener.js\";\nimport { parseCSSValue } from \"./parseCSSValue.js\";\nconst dummyParent = typeof document !== \"undefined\" ? Object.assign(document.createElement(\"div\"), {\n  style: \"display: none\"\n}) : null;\nconst dummy = typeof document !== \"undefined\" ? document.createElement(\"div\") : null;\nif (dummyParent && dummy) {\n  document.body.appendChild(dummyParent);\n  dummyParent.appendChild(dummy);\n}\nconst getActiveStylesForClass = (className) => {\n  const extractedStyles = {};\n  if (!dummy) {\n    return extractedStyles;\n  }\n  const classNames = className.split(/\\s+/).filter(Boolean);\n  const computedStyles = window.getComputedStyle(dummy);\n  CSSListener.activeRules.forEach((rule) => {\n    const selector = rule.selectorText;\n    const mightMatch = classNames.some((cls) => selector.includes(`.${CSS.escape(cls)}`));\n    if (!mightMatch) {\n      return;\n    }\n    const safeSelector = selector.replace(/::[a-z-]+/gi, \"\");\n    try {\n      if (safeSelector !== \"\" && dummy.matches(safeSelector)) {\n        for (const propertyName of rule.style) {\n          extractedStyles[propertyName] = computedStyles.getPropertyValue(propertyName);\n        }\n      }\n    } catch {\n    }\n  });\n  return extractedStyles;\n};\nexport const getWebStyles = (className, componentProps, uniwindContext) => {\n  if (className === void 0) {\n    return {};\n  }\n  if (!dummy) {\n    return {};\n  }\n  if (uniwindContext.scopedTheme !== null) {\n    dummyParent?.setAttribute(\"class\", uniwindContext.scopedTheme);\n  } else {\n    dummyParent?.removeAttribute(\"class\");\n  }\n  dummy.className = className;\n  const dataSet = generateDataSet(componentProps ?? {});\n  Object.entries(dataSet).forEach(([key, value]) => {\n    if (value === false || value === void 0) {\n      return;\n    }\n    dummy.dataset[key] = String(value);\n  });\n  const computedStyles = getActiveStylesForClass(className);\n  Object.keys(dataSet).forEach((key) => {\n    delete dummy.dataset[key];\n  });\n  return Object.fromEntries(\n    Object.entries(computedStyles).map(([key, value]) => {\n      const parsedKey = key[0] === \"-\" ? key : key.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());\n      return [\n        parsedKey,\n        parseCSSValue(value)\n      ];\n    })\n  );\n};\nexport const getWebVariable = (name, uniwindContext) => {\n  if (!dummyParent) {\n    return void 0;\n  }\n  if (uniwindContext.scopedTheme !== null) {\n    dummyParent.setAttribute(\"class\", uniwindContext.scopedTheme);\n  } else {\n    dummyParent.removeAttribute(\"class\");\n  }\n  const variable = window.getComputedStyle(dummyParent).getPropertyValue(name);\n  return parseCSSValue(variable);\n};\n","import { createContext, useContext } from \"react\";\nexport const UniwindContext = createContext({\n  scopedTheme: null\n});\nexport const useUniwindContext = () => useContext(UniwindContext);\nUniwindContext.displayName = \"UniwindContext\";\n","import { useLayoutEffect, useReducer } from \"react\";\nimport { useUniwindContext } from \"../core/context.js\";\nimport { CSSListener, getWebStyles } from \"../core/web/index.js\";\nconst emptyState = {};\nexport const useResolveClassNames = (className) => {\n  const uniwindContext = useUniwindContext();\n  const [styles, recreate] = useReducer(\n    () => className !== \"\" ? getWebStyles(className, void 0, uniwindContext) : emptyState,\n    void 0,\n    () => className !== \"\" ? getWebStyles(className, void 0, uniwindContext) : emptyState\n  );\n  useLayoutEffect(() => {\n    if (className === \"\") {\n      return;\n    }\n    recreate();\n    const dispose = CSSListener.subscribeToClassName(className, recreate);\n    return dispose;\n  }, [className, uniwindContext]);\n  return styles;\n};\n","export var StyleDependency = /* @__PURE__ */ ((StyleDependency2) => {\n  StyleDependency2[StyleDependency2[\"ColorScheme\"] = 1] = \"ColorScheme\";\n  StyleDependency2[StyleDependency2[\"Theme\"] = 2] = \"Theme\";\n  StyleDependency2[StyleDependency2[\"Dimensions\"] = 3] = \"Dimensions\";\n  StyleDependency2[StyleDependency2[\"Orientation\"] = 4] = \"Orientation\";\n  StyleDependency2[StyleDependency2[\"Insets\"] = 5] = \"Insets\";\n  StyleDependency2[StyleDependency2[\"FontScale\"] = 6] = \"FontScale\";\n  StyleDependency2[StyleDependency2[\"Rtl\"] = 7] = \"Rtl\";\n  StyleDependency2[StyleDependency2[\"AdaptiveThemes\"] = 8] = \"AdaptiveThemes\";\n  StyleDependency2[StyleDependency2[\"Variables\"] = 9] = \"Variables\";\n  return StyleDependency2;\n})(StyleDependency || {});\nexport var Orientation = /* @__PURE__ */ ((Orientation2) => {\n  Orientation2[\"Portrait\"] = \"portrait\";\n  Orientation2[\"Landscape\"] = \"landscape\";\n  return Orientation2;\n})(Orientation || {});\nexport var ColorScheme = /* @__PURE__ */ ((ColorScheme2) => {\n  ColorScheme2[\"Light\"] = \"light\";\n  ColorScheme2[\"Dark\"] = \"dark\";\n  return ColorScheme2;\n})(ColorScheme || {});\n","'use strict';\n\n/**\nThe default maximum length of a `TreeBuffer` node.\n*/\nconst DefaultBufferLength = 1024;\nlet nextPropID = 0;\nclass Range {\n    constructor(from, to) {\n        this.from = from;\n        this.to = to;\n    }\n}\n/**\nEach [node type](#common.NodeType) or [individual tree](#common.Tree)\ncan have metadata associated with it in props. Instances of this\nclass represent prop names.\n*/\nclass NodeProp {\n    /**\n    Create a new node prop type.\n    */\n    constructor(config = {}) {\n        this.id = nextPropID++;\n        this.perNode = !!config.perNode;\n        this.deserialize = config.deserialize || (() => {\n            throw new Error(\"This node type doesn't define a deserialize function\");\n        });\n    }\n    /**\n    This is meant to be used with\n    [`NodeSet.extend`](#common.NodeSet.extend) or\n    [`LRParser.configure`](#lr.ParserConfig.props) to compute\n    prop values for each node type in the set. Takes a [match\n    object](#common.NodeType^match) or function that returns undefined\n    if the node type doesn't get this prop, and the prop's value if\n    it does.\n    */\n    add(match) {\n        if (this.perNode)\n            throw new RangeError(\"Can't add per-node props to node types\");\n        if (typeof match != \"function\")\n            match = NodeType.match(match);\n        return (type) => {\n            let result = match(type);\n            return result === undefined ? null : [this, result];\n        };\n    }\n}\n/**\nProp that is used to describe matching delimiters. For opening\ndelimiters, this holds an array of node names (written as a\nspace-separated string when declaring this prop in a grammar)\nfor the node types of closing delimiters that match it.\n*/\nNodeProp.closedBy = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nThe inverse of [`closedBy`](#common.NodeProp^closedBy). This is\nattached to closing delimiters, holding an array of node names\nof types of matching opening delimiters.\n*/\nNodeProp.openedBy = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nUsed to assign node types to groups (for example, all node\ntypes that represent an expression could be tagged with an\n`\"Expression\"` group).\n*/\nNodeProp.group = new NodeProp({ deserialize: str => str.split(\" \") });\n/**\nAttached to nodes to indicate these should be\n[displayed](https://codemirror.net/docs/ref/#language.syntaxTree)\nin a bidirectional text isolate, so that direction-neutral\ncharacters on their sides don't incorrectly get associated with\nsurrounding text. You'll generally want to set this for nodes\nthat contain arbitrary text, like strings and comments, and for\nnodes that appear _inside_ arbitrary text, like HTML tags. When\nnot given a value, in a grammar declaration, defaults to\n`\"auto\"`.\n*/\nNodeProp.isolate = new NodeProp({ deserialize: value => {\n        if (value && value != \"rtl\" && value != \"ltr\" && value != \"auto\")\n            throw new RangeError(\"Invalid value for isolate: \" + value);\n        return value || \"auto\";\n    } });\n/**\nThe hash of the [context](#lr.ContextTracker.constructor)\nthat the node was parsed in, if any. Used to limit reuse of\ncontextual nodes.\n*/\nNodeProp.contextHash = new NodeProp({ perNode: true });\n/**\nThe distance beyond the end of the node that the tokenizer\nlooked ahead for any of the tokens inside the node. (The LR\nparser only stores this when it is larger than 25, for\nefficiency reasons.)\n*/\nNodeProp.lookAhead = new NodeProp({ perNode: true });\n/**\nThis per-node prop is used to replace a given node, or part of a\nnode, with another tree. This is useful to include trees from\ndifferent languages in mixed-language parsers.\n*/\nNodeProp.mounted = new NodeProp({ perNode: true });\n/**\nA mounted tree, which can be [stored](#common.NodeProp^mounted) on\na tree node to indicate that parts of its content are\nrepresented by another tree.\n*/\nclass MountedTree {\n    constructor(\n    /**\n    The inner tree.\n    */\n    tree, \n    /**\n    If this is null, this tree replaces the entire node (it will\n    be included in the regular iteration instead of its host\n    node). If not, only the given ranges are considered to be\n    covered by this tree. This is used for trees that are mixed in\n    a way that isn't strictly hierarchical. Such mounted trees are\n    only entered by [`resolveInner`](#common.Tree.resolveInner)\n    and [`enter`](#common.SyntaxNode.enter).\n    */\n    overlay, \n    /**\n    The parser used to create this subtree.\n    */\n    parser) {\n        this.tree = tree;\n        this.overlay = overlay;\n        this.parser = parser;\n    }\n    /**\n    @internal\n    */\n    static get(tree) {\n        return tree && tree.props && tree.props[NodeProp.mounted.id];\n    }\n}\nconst noProps = Object.create(null);\n/**\nEach node in a syntax tree has a node type associated with it.\n*/\nclass NodeType {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The name of the node type. Not necessarily unique, but if the\n    grammar was written properly, different node types with the\n    same name within a node set should play the same semantic\n    role.\n    */\n    name, \n    /**\n    @internal\n    */\n    props, \n    /**\n    The id of this node in its set. Corresponds to the term ids\n    used in the parser.\n    */\n    id, \n    /**\n    @internal\n    */\n    flags = 0) {\n        this.name = name;\n        this.props = props;\n        this.id = id;\n        this.flags = flags;\n    }\n    /**\n    Define a node type.\n    */\n    static define(spec) {\n        let props = spec.props && spec.props.length ? Object.create(null) : noProps;\n        let flags = (spec.top ? 1 /* NodeFlag.Top */ : 0) | (spec.skipped ? 2 /* NodeFlag.Skipped */ : 0) |\n            (spec.error ? 4 /* NodeFlag.Error */ : 0) | (spec.name == null ? 8 /* NodeFlag.Anonymous */ : 0);\n        let type = new NodeType(spec.name || \"\", props, spec.id, flags);\n        if (spec.props)\n            for (let src of spec.props) {\n                if (!Array.isArray(src))\n                    src = src(type);\n                if (src) {\n                    if (src[0].perNode)\n                        throw new RangeError(\"Can't store a per-node prop on a node type\");\n                    props[src[0].id] = src[1];\n                }\n            }\n        return type;\n    }\n    /**\n    Retrieves a node prop for this type. Will return `undefined` if\n    the prop isn't present on this node.\n    */\n    prop(prop) { return this.props[prop.id]; }\n    /**\n    True when this is the top node of a grammar.\n    */\n    get isTop() { return (this.flags & 1 /* NodeFlag.Top */) > 0; }\n    /**\n    True when this node is produced by a skip rule.\n    */\n    get isSkipped() { return (this.flags & 2 /* NodeFlag.Skipped */) > 0; }\n    /**\n    Indicates whether this is an error node.\n    */\n    get isError() { return (this.flags & 4 /* NodeFlag.Error */) > 0; }\n    /**\n    When true, this node type doesn't correspond to a user-declared\n    named node, for example because it is used to cache repetition.\n    */\n    get isAnonymous() { return (this.flags & 8 /* NodeFlag.Anonymous */) > 0; }\n    /**\n    Returns true when this node's name or one of its\n    [groups](#common.NodeProp^group) matches the given string.\n    */\n    is(name) {\n        if (typeof name == 'string') {\n            if (this.name == name)\n                return true;\n            let group = this.prop(NodeProp.group);\n            return group ? group.indexOf(name) > -1 : false;\n        }\n        return this.id == name;\n    }\n    /**\n    Create a function from node types to arbitrary values by\n    specifying an object whose property names are node or\n    [group](#common.NodeProp^group) names. Often useful with\n    [`NodeProp.add`](#common.NodeProp.add). You can put multiple\n    names, separated by spaces, in a single property name to map\n    multiple node names to a single value.\n    */\n    static match(map) {\n        let direct = Object.create(null);\n        for (let prop in map)\n            for (let name of prop.split(\" \"))\n                direct[name] = map[prop];\n        return (node) => {\n            for (let groups = node.prop(NodeProp.group), i = -1; i < (groups ? groups.length : 0); i++) {\n                let found = direct[i < 0 ? node.name : groups[i]];\n                if (found)\n                    return found;\n            }\n        };\n    }\n}\n/**\nAn empty dummy node type to use when no actual type is available.\n*/\nNodeType.none = new NodeType(\"\", Object.create(null), 0, 8 /* NodeFlag.Anonymous */);\n/**\nA node set holds a collection of node types. It is used to\ncompactly represent trees by storing their type ids, rather than a\nfull pointer to the type object, in a numeric array. Each parser\n[has](#lr.LRParser.nodeSet) a node set, and [tree\nbuffers](#common.TreeBuffer) can only store collections of nodes\nfrom the same set. A set can have a maximum of 2**16 (65536) node\ntypes in it, so that the ids fit into 16-bit typed array slots.\n*/\nclass NodeSet {\n    /**\n    Create a set with the given types. The `id` property of each\n    type should correspond to its position within the array.\n    */\n    constructor(\n    /**\n    The node types in this set, by id.\n    */\n    types) {\n        this.types = types;\n        for (let i = 0; i < types.length; i++)\n            if (types[i].id != i)\n                throw new RangeError(\"Node type ids should correspond to array positions when creating a node set\");\n    }\n    /**\n    Create a copy of this set with some node properties added. The\n    arguments to this method can be created with\n    [`NodeProp.add`](#common.NodeProp.add).\n    */\n    extend(...props) {\n        let newTypes = [];\n        for (let type of this.types) {\n            let newProps = null;\n            for (let source of props) {\n                let add = source(type);\n                if (add) {\n                    if (!newProps)\n                        newProps = Object.assign({}, type.props);\n                    newProps[add[0].id] = add[1];\n                }\n            }\n            newTypes.push(newProps ? new NodeType(type.name, newProps, type.id, type.flags) : type);\n        }\n        return new NodeSet(newTypes);\n    }\n}\nconst CachedNode = new WeakMap(), CachedInnerNode = new WeakMap();\n/**\nOptions that control iteration. Can be combined with the `|`\noperator to enable multiple ones.\n*/\nexports.IterMode = void 0;\n(function (IterMode) {\n    /**\n    When enabled, iteration will only visit [`Tree`](#common.Tree)\n    objects, not nodes packed into\n    [`TreeBuffer`](#common.TreeBuffer)s.\n    */\n    IterMode[IterMode[\"ExcludeBuffers\"] = 1] = \"ExcludeBuffers\";\n    /**\n    Enable this to make iteration include anonymous nodes (such as\n    the nodes that wrap repeated grammar constructs into a balanced\n    tree).\n    */\n    IterMode[IterMode[\"IncludeAnonymous\"] = 2] = \"IncludeAnonymous\";\n    /**\n    By default, regular [mounted](#common.NodeProp^mounted) nodes\n    replace their base node in iteration. Enable this to ignore them\n    instead.\n    */\n    IterMode[IterMode[\"IgnoreMounts\"] = 4] = \"IgnoreMounts\";\n    /**\n    This option only applies in\n    [`enter`](#common.SyntaxNode.enter)-style methods. It tells the\n    library to not enter mounted overlays if one covers the given\n    position.\n    */\n    IterMode[IterMode[\"IgnoreOverlays\"] = 8] = \"IgnoreOverlays\";\n})(exports.IterMode || (exports.IterMode = {}));\n/**\nA piece of syntax tree. There are two ways to approach these\ntrees: the way they are actually stored in memory, and the\nconvenient way.\n\nSyntax trees are stored as a tree of `Tree` and `TreeBuffer`\nobjects. By packing detail information into `TreeBuffer` leaf\nnodes, the representation is made a lot more memory-efficient.\n\nHowever, when you want to actually work with tree nodes, this\nrepresentation is very awkward, so most client code will want to\nuse the [`TreeCursor`](#common.TreeCursor) or\n[`SyntaxNode`](#common.SyntaxNode) interface instead, which provides\na view on some part of this data structure, and can be used to\nmove around to adjacent nodes.\n*/\nclass Tree {\n    /**\n    Construct a new tree. See also [`Tree.build`](#common.Tree^build).\n    */\n    constructor(\n    /**\n    The type of the top node.\n    */\n    type, \n    /**\n    This node's child nodes.\n    */\n    children, \n    /**\n    The positions (offsets relative to the start of this tree) of\n    the children.\n    */\n    positions, \n    /**\n    The total length of this tree\n    */\n    length, \n    /**\n    Per-node [node props](#common.NodeProp) to associate with this node.\n    */\n    props) {\n        this.type = type;\n        this.children = children;\n        this.positions = positions;\n        this.length = length;\n        /**\n        @internal\n        */\n        this.props = null;\n        if (props && props.length) {\n            this.props = Object.create(null);\n            for (let [prop, value] of props)\n                this.props[typeof prop == \"number\" ? prop : prop.id] = value;\n        }\n    }\n    /**\n    @internal\n    */\n    toString() {\n        let mounted = MountedTree.get(this);\n        if (mounted && !mounted.overlay)\n            return mounted.tree.toString();\n        let children = \"\";\n        for (let ch of this.children) {\n            let str = ch.toString();\n            if (str) {\n                if (children)\n                    children += \",\";\n                children += str;\n            }\n        }\n        return !this.type.name ? children :\n            (/\\W/.test(this.type.name) && !this.type.isError ? JSON.stringify(this.type.name) : this.type.name) +\n                (children.length ? \"(\" + children + \")\" : \"\");\n    }\n    /**\n    Get a [tree cursor](#common.TreeCursor) positioned at the top of\n    the tree. Mode can be used to [control](#common.IterMode) which\n    nodes the cursor visits.\n    */\n    cursor(mode = 0) {\n        return new TreeCursor(this.topNode, mode);\n    }\n    /**\n    Get a [tree cursor](#common.TreeCursor) pointing into this tree\n    at the given position and side (see\n    [`moveTo`](#common.TreeCursor.moveTo).\n    */\n    cursorAt(pos, side = 0, mode = 0) {\n        let scope = CachedNode.get(this) || this.topNode;\n        let cursor = new TreeCursor(scope);\n        cursor.moveTo(pos, side);\n        CachedNode.set(this, cursor._tree);\n        return cursor;\n    }\n    /**\n    Get a [syntax node](#common.SyntaxNode) object for the top of the\n    tree.\n    */\n    get topNode() {\n        return new TreeNode(this, 0, 0, null);\n    }\n    /**\n    Get the [syntax node](#common.SyntaxNode) at the given position.\n    If `side` is -1, this will move into nodes that end at the\n    position. If 1, it'll move into nodes that start at the\n    position. With 0, it'll only enter nodes that cover the position\n    from both sides.\n    \n    Note that this will not enter\n    [overlays](#common.MountedTree.overlay), and you often want\n    [`resolveInner`](#common.Tree.resolveInner) instead.\n    */\n    resolve(pos, side = 0) {\n        let node = resolveNode(CachedNode.get(this) || this.topNode, pos, side, false);\n        CachedNode.set(this, node);\n        return node;\n    }\n    /**\n    Like [`resolve`](#common.Tree.resolve), but will enter\n    [overlaid](#common.MountedTree.overlay) nodes, producing a syntax node\n    pointing into the innermost overlaid tree at the given position\n    (with parent links going through all parent structure, including\n    the host trees).\n    */\n    resolveInner(pos, side = 0) {\n        let node = resolveNode(CachedInnerNode.get(this) || this.topNode, pos, side, true);\n        CachedInnerNode.set(this, node);\n        return node;\n    }\n    /**\n    In some situations, it can be useful to iterate through all\n    nodes around a position, including those in overlays that don't\n    directly cover the position. This method gives you an iterator\n    that will produce all nodes, from small to big, around the given\n    position.\n    */\n    resolveStack(pos, side = 0) {\n        return stackIterator(this, pos, side);\n    }\n    /**\n    Iterate over the tree and its children, calling `enter` for any\n    node that touches the `from`/`to` region (if given) before\n    running over such a node's children, and `leave` (if given) when\n    leaving the node. When `enter` returns `false`, that node will\n    not have its children iterated over (or `leave` called).\n    */\n    iterate(spec) {\n        let { enter, leave, from = 0, to = this.length } = spec;\n        let mode = spec.mode || 0, anon = (mode & exports.IterMode.IncludeAnonymous) > 0;\n        for (let c = this.cursor(mode | exports.IterMode.IncludeAnonymous);;) {\n            let entered = false;\n            if (c.from <= to && c.to >= from && (!anon && c.type.isAnonymous || enter(c) !== false)) {\n                if (c.firstChild())\n                    continue;\n                entered = true;\n            }\n            for (;;) {\n                if (entered && leave && (anon || !c.type.isAnonymous))\n                    leave(c);\n                if (c.nextSibling())\n                    break;\n                if (!c.parent())\n                    return;\n                entered = true;\n            }\n        }\n    }\n    /**\n    Get the value of the given [node prop](#common.NodeProp) for this\n    node. Works with both per-node and per-type props.\n    */\n    prop(prop) {\n        return !prop.perNode ? this.type.prop(prop) : this.props ? this.props[prop.id] : undefined;\n    }\n    /**\n    Returns the node's [per-node props](#common.NodeProp.perNode) in a\n    format that can be passed to the [`Tree`](#common.Tree)\n    constructor.\n    */\n    get propValues() {\n        let result = [];\n        if (this.props)\n            for (let id in this.props)\n                result.push([+id, this.props[id]]);\n        return result;\n    }\n    /**\n    Balance the direct children of this tree, producing a copy of\n    which may have children grouped into subtrees with type\n    [`NodeType.none`](#common.NodeType^none).\n    */\n    balance(config = {}) {\n        return this.children.length <= 8 /* Balance.BranchFactor */ ? this :\n            balanceRange(NodeType.none, this.children, this.positions, 0, this.children.length, 0, this.length, (children, positions, length) => new Tree(this.type, children, positions, length, this.propValues), config.makeTree || ((children, positions, length) => new Tree(NodeType.none, children, positions, length)));\n    }\n    /**\n    Build a tree from a postfix-ordered buffer of node information,\n    or a cursor over such a buffer.\n    */\n    static build(data) { return buildTree(data); }\n}\n/**\nThe empty tree\n*/\nTree.empty = new Tree(NodeType.none, [], [], 0);\nclass FlatBufferCursor {\n    constructor(buffer, index) {\n        this.buffer = buffer;\n        this.index = index;\n    }\n    get id() { return this.buffer[this.index - 4]; }\n    get start() { return this.buffer[this.index - 3]; }\n    get end() { return this.buffer[this.index - 2]; }\n    get size() { return this.buffer[this.index - 1]; }\n    get pos() { return this.index; }\n    next() { this.index -= 4; }\n    fork() { return new FlatBufferCursor(this.buffer, this.index); }\n}\n/**\nTree buffers contain (type, start, end, endIndex) quads for each\nnode. In such a buffer, nodes are stored in prefix order (parents\nbefore children, with the endIndex of the parent indicating which\nchildren belong to it).\n*/\nclass TreeBuffer {\n    /**\n    Create a tree buffer.\n    */\n    constructor(\n    /**\n    The buffer's content.\n    */\n    buffer, \n    /**\n    The total length of the group of nodes in the buffer.\n    */\n    length, \n    /**\n    The node set used in this buffer.\n    */\n    set) {\n        this.buffer = buffer;\n        this.length = length;\n        this.set = set;\n    }\n    /**\n    @internal\n    */\n    get type() { return NodeType.none; }\n    /**\n    @internal\n    */\n    toString() {\n        let result = [];\n        for (let index = 0; index < this.buffer.length;) {\n            result.push(this.childString(index));\n            index = this.buffer[index + 3];\n        }\n        return result.join(\",\");\n    }\n    /**\n    @internal\n    */\n    childString(index) {\n        let id = this.buffer[index], endIndex = this.buffer[index + 3];\n        let type = this.set.types[id], result = type.name;\n        if (/\\W/.test(result) && !type.isError)\n            result = JSON.stringify(result);\n        index += 4;\n        if (endIndex == index)\n            return result;\n        let children = [];\n        while (index < endIndex) {\n            children.push(this.childString(index));\n            index = this.buffer[index + 3];\n        }\n        return result + \"(\" + children.join(\",\") + \")\";\n    }\n    /**\n    @internal\n    */\n    findChild(startIndex, endIndex, dir, pos, side) {\n        let { buffer } = this, pick = -1;\n        for (let i = startIndex; i != endIndex; i = buffer[i + 3]) {\n            if (checkSide(side, pos, buffer[i + 1], buffer[i + 2])) {\n                pick = i;\n                if (dir > 0)\n                    break;\n            }\n        }\n        return pick;\n    }\n    /**\n    @internal\n    */\n    slice(startI, endI, from) {\n        let b = this.buffer;\n        let copy = new Uint16Array(endI - startI), len = 0;\n        for (let i = startI, j = 0; i < endI;) {\n            copy[j++] = b[i++];\n            copy[j++] = b[i++] - from;\n            let to = copy[j++] = b[i++] - from;\n            copy[j++] = b[i++] - startI;\n            len = Math.max(len, to);\n        }\n        return new TreeBuffer(copy, len, this.set);\n    }\n}\nfunction checkSide(side, pos, from, to) {\n    switch (side) {\n        case -2 /* Side.Before */: return from < pos;\n        case -1 /* Side.AtOrBefore */: return to >= pos && from < pos;\n        case 0 /* Side.Around */: return from < pos && to > pos;\n        case 1 /* Side.AtOrAfter */: return from <= pos && to > pos;\n        case 2 /* Side.After */: return to > pos;\n        case 4 /* Side.DontCare */: return true;\n    }\n}\nfunction resolveNode(node, pos, side, overlays) {\n    var _a;\n    // Move up to a node that actually holds the position, if possible\n    while (node.from == node.to ||\n        (side < 1 ? node.from >= pos : node.from > pos) ||\n        (side > -1 ? node.to <= pos : node.to < pos)) {\n        let parent = !overlays && node instanceof TreeNode && node.index < 0 ? null : node.parent;\n        if (!parent)\n            return node;\n        node = parent;\n    }\n    let mode = overlays ? 0 : exports.IterMode.IgnoreOverlays;\n    // Must go up out of overlays when those do not overlap with pos\n    if (overlays)\n        for (let scan = node, parent = scan.parent; parent; scan = parent, parent = scan.parent) {\n            if (scan instanceof TreeNode && scan.index < 0 && ((_a = parent.enter(pos, side, mode)) === null || _a === void 0 ? void 0 : _a.from) != scan.from)\n                node = parent;\n        }\n    for (;;) {\n        let inner = node.enter(pos, side, mode);\n        if (!inner)\n            return node;\n        node = inner;\n    }\n}\nclass BaseNode {\n    cursor(mode = 0) { return new TreeCursor(this, mode); }\n    getChild(type, before = null, after = null) {\n        let r = getChildren(this, type, before, after);\n        return r.length ? r[0] : null;\n    }\n    getChildren(type, before = null, after = null) {\n        return getChildren(this, type, before, after);\n    }\n    resolve(pos, side = 0) {\n        return resolveNode(this, pos, side, false);\n    }\n    resolveInner(pos, side = 0) {\n        return resolveNode(this, pos, side, true);\n    }\n    matchContext(context) {\n        return matchNodeContext(this.parent, context);\n    }\n    enterUnfinishedNodesBefore(pos) {\n        let scan = this.childBefore(pos), node = this;\n        while (scan) {\n            let last = scan.lastChild;\n            if (!last || last.to != scan.to)\n                break;\n            if (last.type.isError && last.from == last.to) {\n                node = scan;\n                scan = last.prevSibling;\n            }\n            else {\n                scan = last;\n            }\n        }\n        return node;\n    }\n    get node() { return this; }\n    get next() { return this.parent; }\n}\nclass TreeNode extends BaseNode {\n    constructor(_tree, from, \n    // Index in parent node, set to -1 if the node is not a direct child of _parent.node (overlay)\n    index, _parent) {\n        super();\n        this._tree = _tree;\n        this.from = from;\n        this.index = index;\n        this._parent = _parent;\n    }\n    get type() { return this._tree.type; }\n    get name() { return this._tree.type.name; }\n    get to() { return this.from + this._tree.length; }\n    nextChild(i, dir, pos, side, mode = 0) {\n        for (let parent = this;;) {\n            for (let { children, positions } = parent._tree, e = dir > 0 ? children.length : -1; i != e; i += dir) {\n                let next = children[i], start = positions[i] + parent.from;\n                if (!checkSide(side, pos, start, start + next.length))\n                    continue;\n                if (next instanceof TreeBuffer) {\n                    if (mode & exports.IterMode.ExcludeBuffers)\n                        continue;\n                    let index = next.findChild(0, next.buffer.length, dir, pos - start, side);\n                    if (index > -1)\n                        return new BufferNode(new BufferContext(parent, next, i, start), null, index);\n                }\n                else if ((mode & exports.IterMode.IncludeAnonymous) || (!next.type.isAnonymous || hasChild(next))) {\n                    let mounted;\n                    if (!(mode & exports.IterMode.IgnoreMounts) && (mounted = MountedTree.get(next)) && !mounted.overlay)\n                        return new TreeNode(mounted.tree, start, i, parent);\n                    let inner = new TreeNode(next, start, i, parent);\n                    return (mode & exports.IterMode.IncludeAnonymous) || !inner.type.isAnonymous ? inner\n                        : inner.nextChild(dir < 0 ? next.children.length - 1 : 0, dir, pos, side);\n                }\n            }\n            if ((mode & exports.IterMode.IncludeAnonymous) || !parent.type.isAnonymous)\n                return null;\n            if (parent.index >= 0)\n                i = parent.index + dir;\n            else\n                i = dir < 0 ? -1 : parent._parent._tree.children.length;\n            parent = parent._parent;\n            if (!parent)\n                return null;\n        }\n    }\n    get firstChild() { return this.nextChild(0, 1, 0, 4 /* Side.DontCare */); }\n    get lastChild() { return this.nextChild(this._tree.children.length - 1, -1, 0, 4 /* Side.DontCare */); }\n    childAfter(pos) { return this.nextChild(0, 1, pos, 2 /* Side.After */); }\n    childBefore(pos) { return this.nextChild(this._tree.children.length - 1, -1, pos, -2 /* Side.Before */); }\n    enter(pos, side, mode = 0) {\n        let mounted;\n        if (!(mode & exports.IterMode.IgnoreOverlays) && (mounted = MountedTree.get(this._tree)) && mounted.overlay) {\n            let rPos = pos - this.from;\n            for (let { from, to } of mounted.overlay) {\n                if ((side > 0 ? from <= rPos : from < rPos) &&\n                    (side < 0 ? to >= rPos : to > rPos))\n                    return new TreeNode(mounted.tree, mounted.overlay[0].from + this.from, -1, this);\n            }\n        }\n        return this.nextChild(0, 1, pos, side, mode);\n    }\n    nextSignificantParent() {\n        let val = this;\n        while (val.type.isAnonymous && val._parent)\n            val = val._parent;\n        return val;\n    }\n    get parent() {\n        return this._parent ? this._parent.nextSignificantParent() : null;\n    }\n    get nextSibling() {\n        return this._parent && this.index >= 0 ? this._parent.nextChild(this.index + 1, 1, 0, 4 /* Side.DontCare */) : null;\n    }\n    get prevSibling() {\n        return this._parent && this.index >= 0 ? this._parent.nextChild(this.index - 1, -1, 0, 4 /* Side.DontCare */) : null;\n    }\n    get tree() { return this._tree; }\n    toTree() { return this._tree; }\n    /**\n    @internal\n    */\n    toString() { return this._tree.toString(); }\n}\nfunction getChildren(node, type, before, after) {\n    let cur = node.cursor(), result = [];\n    if (!cur.firstChild())\n        return result;\n    if (before != null)\n        for (let found = false; !found;) {\n            found = cur.type.is(before);\n            if (!cur.nextSibling())\n                return result;\n        }\n    for (;;) {\n        if (after != null && cur.type.is(after))\n            return result;\n        if (cur.type.is(type))\n            result.push(cur.node);\n        if (!cur.nextSibling())\n            return after == null ? result : [];\n    }\n}\nfunction matchNodeContext(node, context, i = context.length - 1) {\n    for (let p = node; i >= 0; p = p.parent) {\n        if (!p)\n            return false;\n        if (!p.type.isAnonymous) {\n            if (context[i] && context[i] != p.name)\n                return false;\n            i--;\n        }\n    }\n    return true;\n}\nclass BufferContext {\n    constructor(parent, buffer, index, start) {\n        this.parent = parent;\n        this.buffer = buffer;\n        this.index = index;\n        this.start = start;\n    }\n}\nclass BufferNode extends BaseNode {\n    get name() { return this.type.name; }\n    get from() { return this.context.start + this.context.buffer.buffer[this.index + 1]; }\n    get to() { return this.context.start + this.context.buffer.buffer[this.index + 2]; }\n    constructor(context, _parent, index) {\n        super();\n        this.context = context;\n        this._parent = _parent;\n        this.index = index;\n        this.type = context.buffer.set.types[context.buffer.buffer[index]];\n    }\n    child(dir, pos, side) {\n        let { buffer } = this.context;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.context.start, side);\n        return index < 0 ? null : new BufferNode(this.context, this, index);\n    }\n    get firstChild() { return this.child(1, 0, 4 /* Side.DontCare */); }\n    get lastChild() { return this.child(-1, 0, 4 /* Side.DontCare */); }\n    childAfter(pos) { return this.child(1, pos, 2 /* Side.After */); }\n    childBefore(pos) { return this.child(-1, pos, -2 /* Side.Before */); }\n    enter(pos, side, mode = 0) {\n        if (mode & exports.IterMode.ExcludeBuffers)\n            return null;\n        let { buffer } = this.context;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], side > 0 ? 1 : -1, pos - this.context.start, side);\n        return index < 0 ? null : new BufferNode(this.context, this, index);\n    }\n    get parent() {\n        return this._parent || this.context.parent.nextSignificantParent();\n    }\n    externalSibling(dir) {\n        return this._parent ? null : this.context.parent.nextChild(this.context.index + dir, dir, 0, 4 /* Side.DontCare */);\n    }\n    get nextSibling() {\n        let { buffer } = this.context;\n        let after = buffer.buffer[this.index + 3];\n        if (after < (this._parent ? buffer.buffer[this._parent.index + 3] : buffer.buffer.length))\n            return new BufferNode(this.context, this._parent, after);\n        return this.externalSibling(1);\n    }\n    get prevSibling() {\n        let { buffer } = this.context;\n        let parentStart = this._parent ? this._parent.index + 4 : 0;\n        if (this.index == parentStart)\n            return this.externalSibling(-1);\n        return new BufferNode(this.context, this._parent, buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));\n    }\n    get tree() { return null; }\n    toTree() {\n        let children = [], positions = [];\n        let { buffer } = this.context;\n        let startI = this.index + 4, endI = buffer.buffer[this.index + 3];\n        if (endI > startI) {\n            let from = buffer.buffer[this.index + 1];\n            children.push(buffer.slice(startI, endI, from));\n            positions.push(0);\n        }\n        return new Tree(this.type, children, positions, this.to - this.from);\n    }\n    /**\n    @internal\n    */\n    toString() { return this.context.buffer.childString(this.index); }\n}\nfunction iterStack(heads) {\n    if (!heads.length)\n        return null;\n    let pick = 0, picked = heads[0];\n    for (let i = 1; i < heads.length; i++) {\n        let node = heads[i];\n        if (node.from > picked.from || node.to < picked.to) {\n            picked = node;\n            pick = i;\n        }\n    }\n    let next = picked instanceof TreeNode && picked.index < 0 ? null : picked.parent;\n    let newHeads = heads.slice();\n    if (next)\n        newHeads[pick] = next;\n    else\n        newHeads.splice(pick, 1);\n    return new StackIterator(newHeads, picked);\n}\nclass StackIterator {\n    constructor(heads, node) {\n        this.heads = heads;\n        this.node = node;\n    }\n    get next() { return iterStack(this.heads); }\n}\nfunction stackIterator(tree, pos, side) {\n    let inner = tree.resolveInner(pos, side), layers = null;\n    for (let scan = inner instanceof TreeNode ? inner : inner.context.parent; scan; scan = scan.parent) {\n        if (scan.index < 0) { // This is an overlay root\n            let parent = scan.parent;\n            (layers || (layers = [inner])).push(parent.resolve(pos, side));\n            scan = parent;\n        }\n        else {\n            let mount = MountedTree.get(scan.tree);\n            // Relevant overlay branching off\n            if (mount && mount.overlay && mount.overlay[0].from <= pos && mount.overlay[mount.overlay.length - 1].to >= pos) {\n                let root = new TreeNode(mount.tree, mount.overlay[0].from + scan.from, -1, scan);\n                (layers || (layers = [inner])).push(resolveNode(root, pos, side, false));\n            }\n        }\n    }\n    return layers ? iterStack(layers) : inner;\n}\n/**\nA tree cursor object focuses on a given node in a syntax tree, and\nallows you to move to adjacent nodes.\n*/\nclass TreeCursor {\n    /**\n    Shorthand for `.type.name`.\n    */\n    get name() { return this.type.name; }\n    /**\n    @internal\n    */\n    constructor(node, \n    /**\n    @internal\n    */\n    mode = 0) {\n        this.mode = mode;\n        /**\n        @internal\n        */\n        this.buffer = null;\n        this.stack = [];\n        /**\n        @internal\n        */\n        this.index = 0;\n        this.bufferNode = null;\n        if (node instanceof TreeNode) {\n            this.yieldNode(node);\n        }\n        else {\n            this._tree = node.context.parent;\n            this.buffer = node.context;\n            for (let n = node._parent; n; n = n._parent)\n                this.stack.unshift(n.index);\n            this.bufferNode = node;\n            this.yieldBuf(node.index);\n        }\n    }\n    yieldNode(node) {\n        if (!node)\n            return false;\n        this._tree = node;\n        this.type = node.type;\n        this.from = node.from;\n        this.to = node.to;\n        return true;\n    }\n    yieldBuf(index, type) {\n        this.index = index;\n        let { start, buffer } = this.buffer;\n        this.type = type || buffer.set.types[buffer.buffer[index]];\n        this.from = start + buffer.buffer[index + 1];\n        this.to = start + buffer.buffer[index + 2];\n        return true;\n    }\n    /**\n    @internal\n    */\n    yield(node) {\n        if (!node)\n            return false;\n        if (node instanceof TreeNode) {\n            this.buffer = null;\n            return this.yieldNode(node);\n        }\n        this.buffer = node.context;\n        return this.yieldBuf(node.index, node.type);\n    }\n    /**\n    @internal\n    */\n    toString() {\n        return this.buffer ? this.buffer.buffer.childString(this.index) : this._tree.toString();\n    }\n    /**\n    @internal\n    */\n    enterChild(dir, pos, side) {\n        if (!this.buffer)\n            return this.yield(this._tree.nextChild(dir < 0 ? this._tree._tree.children.length - 1 : 0, dir, pos, side, this.mode));\n        let { buffer } = this.buffer;\n        let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.buffer.start, side);\n        if (index < 0)\n            return false;\n        this.stack.push(this.index);\n        return this.yieldBuf(index);\n    }\n    /**\n    Move the cursor to this node's first child. When this returns\n    false, the node has no child, and the cursor has not been moved.\n    */\n    firstChild() { return this.enterChild(1, 0, 4 /* Side.DontCare */); }\n    /**\n    Move the cursor to this node's last child.\n    */\n    lastChild() { return this.enterChild(-1, 0, 4 /* Side.DontCare */); }\n    /**\n    Move the cursor to the first child that ends after `pos`.\n    */\n    childAfter(pos) { return this.enterChild(1, pos, 2 /* Side.After */); }\n    /**\n    Move to the last child that starts before `pos`.\n    */\n    childBefore(pos) { return this.enterChild(-1, pos, -2 /* Side.Before */); }\n    /**\n    Move the cursor to the child around `pos`. If side is -1 the\n    child may end at that position, when 1 it may start there. This\n    will also enter [overlaid](#common.MountedTree.overlay)\n    [mounted](#common.NodeProp^mounted) trees unless `overlays` is\n    set to false.\n    */\n    enter(pos, side, mode = this.mode) {\n        if (!this.buffer)\n            return this.yield(this._tree.enter(pos, side, mode));\n        return mode & exports.IterMode.ExcludeBuffers ? false : this.enterChild(1, pos, side);\n    }\n    /**\n    Move to the node's parent node, if this isn't the top node.\n    */\n    parent() {\n        if (!this.buffer)\n            return this.yieldNode((this.mode & exports.IterMode.IncludeAnonymous) ? this._tree._parent : this._tree.parent);\n        if (this.stack.length)\n            return this.yieldBuf(this.stack.pop());\n        let parent = (this.mode & exports.IterMode.IncludeAnonymous) ? this.buffer.parent : this.buffer.parent.nextSignificantParent();\n        this.buffer = null;\n        return this.yieldNode(parent);\n    }\n    /**\n    @internal\n    */\n    sibling(dir) {\n        if (!this.buffer)\n            return !this._tree._parent ? false\n                : this.yield(this._tree.index < 0 ? null\n                    : this._tree._parent.nextChild(this._tree.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode));\n        let { buffer } = this.buffer, d = this.stack.length - 1;\n        if (dir < 0) {\n            let parentStart = d < 0 ? 0 : this.stack[d] + 4;\n            if (this.index != parentStart)\n                return this.yieldBuf(buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));\n        }\n        else {\n            let after = buffer.buffer[this.index + 3];\n            if (after < (d < 0 ? buffer.buffer.length : buffer.buffer[this.stack[d] + 3]))\n                return this.yieldBuf(after);\n        }\n        return d < 0 ? this.yield(this.buffer.parent.nextChild(this.buffer.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode)) : false;\n    }\n    /**\n    Move to this node's next sibling, if any.\n    */\n    nextSibling() { return this.sibling(1); }\n    /**\n    Move to this node's previous sibling, if any.\n    */\n    prevSibling() { return this.sibling(-1); }\n    atLastNode(dir) {\n        let index, parent, { buffer } = this;\n        if (buffer) {\n            if (dir > 0) {\n                if (this.index < buffer.buffer.buffer.length)\n                    return false;\n            }\n            else {\n                for (let i = 0; i < this.index; i++)\n                    if (buffer.buffer.buffer[i + 3] < this.index)\n                        return false;\n            }\n            ({ index, parent } = buffer);\n        }\n        else {\n            ({ index, _parent: parent } = this._tree);\n        }\n        for (; parent; { index, _parent: parent } = parent) {\n            if (index > -1)\n                for (let i = index + dir, e = dir < 0 ? -1 : parent._tree.children.length; i != e; i += dir) {\n                    let child = parent._tree.children[i];\n                    if ((this.mode & exports.IterMode.IncludeAnonymous) ||\n                        child instanceof TreeBuffer ||\n                        !child.type.isAnonymous ||\n                        hasChild(child))\n                        return false;\n                }\n        }\n        return true;\n    }\n    move(dir, enter) {\n        if (enter && this.enterChild(dir, 0, 4 /* Side.DontCare */))\n            return true;\n        for (;;) {\n            if (this.sibling(dir))\n                return true;\n            if (this.atLastNode(dir) || !this.parent())\n                return false;\n        }\n    }\n    /**\n    Move to the next node in a\n    [pre-order](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order,_NLR)\n    traversal, going from a node to its first child or, if the\n    current node is empty or `enter` is false, its next sibling or\n    the next sibling of the first parent node that has one.\n    */\n    next(enter = true) { return this.move(1, enter); }\n    /**\n    Move to the next node in a last-to-first pre-order traversal. A\n    node is followed by its last child or, if it has none, its\n    previous sibling or the previous sibling of the first parent\n    node that has one.\n    */\n    prev(enter = true) { return this.move(-1, enter); }\n    /**\n    Move the cursor to the innermost node that covers `pos`. If\n    `side` is -1, it will enter nodes that end at `pos`. If it is 1,\n    it will enter nodes that start at `pos`.\n    */\n    moveTo(pos, side = 0) {\n        // Move up to a node that actually holds the position, if possible\n        while (this.from == this.to ||\n            (side < 1 ? this.from >= pos : this.from > pos) ||\n            (side > -1 ? this.to <= pos : this.to < pos))\n            if (!this.parent())\n                break;\n        // Then scan down into child nodes as far as possible\n        while (this.enterChild(1, pos, side)) { }\n        return this;\n    }\n    /**\n    Get a [syntax node](#common.SyntaxNode) at the cursor's current\n    position.\n    */\n    get node() {\n        if (!this.buffer)\n            return this._tree;\n        let cache = this.bufferNode, result = null, depth = 0;\n        if (cache && cache.context == this.buffer) {\n            scan: for (let index = this.index, d = this.stack.length; d >= 0;) {\n                for (let c = cache; c; c = c._parent)\n                    if (c.index == index) {\n                        if (index == this.index)\n                            return c;\n                        result = c;\n                        depth = d + 1;\n                        break scan;\n                    }\n                index = this.stack[--d];\n            }\n        }\n        for (let i = depth; i < this.stack.length; i++)\n            result = new BufferNode(this.buffer, result, this.stack[i]);\n        return this.bufferNode = new BufferNode(this.buffer, result, this.index);\n    }\n    /**\n    Get the [tree](#common.Tree) that represents the current node, if\n    any. Will return null when the node is in a [tree\n    buffer](#common.TreeBuffer).\n    */\n    get tree() {\n        return this.buffer ? null : this._tree._tree;\n    }\n    /**\n    Iterate over the current node and all its descendants, calling\n    `enter` when entering a node and `leave`, if given, when leaving\n    one. When `enter` returns `false`, any children of that node are\n    skipped, and `leave` isn't called for it.\n    */\n    iterate(enter, leave) {\n        for (let depth = 0;;) {\n            let mustLeave = false;\n            if (this.type.isAnonymous || enter(this) !== false) {\n                if (this.firstChild()) {\n                    depth++;\n                    continue;\n                }\n                if (!this.type.isAnonymous)\n                    mustLeave = true;\n            }\n            for (;;) {\n                if (mustLeave && leave)\n                    leave(this);\n                mustLeave = this.type.isAnonymous;\n                if (!depth)\n                    return;\n                if (this.nextSibling())\n                    break;\n                this.parent();\n                depth--;\n                mustLeave = true;\n            }\n        }\n    }\n    /**\n    Test whether the current node matches a given context—a sequence\n    of direct parent node names. Empty strings in the context array\n    are treated as wildcards.\n    */\n    matchContext(context) {\n        if (!this.buffer)\n            return matchNodeContext(this.node.parent, context);\n        let { buffer } = this.buffer, { types } = buffer.set;\n        for (let i = context.length - 1, d = this.stack.length - 1; i >= 0; d--) {\n            if (d < 0)\n                return matchNodeContext(this._tree, context, i);\n            let type = types[buffer.buffer[this.stack[d]]];\n            if (!type.isAnonymous) {\n                if (context[i] && context[i] != type.name)\n                    return false;\n                i--;\n            }\n        }\n        return true;\n    }\n}\nfunction hasChild(tree) {\n    return tree.children.some(ch => ch instanceof TreeBuffer || !ch.type.isAnonymous || hasChild(ch));\n}\nfunction buildTree(data) {\n    var _a;\n    let { buffer, nodeSet, maxBufferLength = DefaultBufferLength, reused = [], minRepeatType = nodeSet.types.length } = data;\n    let cursor = Array.isArray(buffer) ? new FlatBufferCursor(buffer, buffer.length) : buffer;\n    let types = nodeSet.types;\n    let contextHash = 0, lookAhead = 0;\n    function takeNode(parentStart, minPos, children, positions, inRepeat, depth) {\n        let { id, start, end, size } = cursor;\n        let lookAheadAtStart = lookAhead, contextAtStart = contextHash;\n        while (size < 0) {\n            cursor.next();\n            if (size == -1 /* SpecialRecord.Reuse */) {\n                let node = reused[id];\n                children.push(node);\n                positions.push(start - parentStart);\n                return;\n            }\n            else if (size == -3 /* SpecialRecord.ContextChange */) { // Context change\n                contextHash = id;\n                return;\n            }\n            else if (size == -4 /* SpecialRecord.LookAhead */) {\n                lookAhead = id;\n                return;\n            }\n            else {\n                throw new RangeError(`Unrecognized record size: ${size}`);\n            }\n        }\n        let type = types[id], node, buffer;\n        let startPos = start - parentStart;\n        if (end - start <= maxBufferLength && (buffer = findBufferSize(cursor.pos - minPos, inRepeat))) {\n            // Small enough for a buffer, and no reused nodes inside\n            let data = new Uint16Array(buffer.size - buffer.skip);\n            let endPos = cursor.pos - buffer.size, index = data.length;\n            while (cursor.pos > endPos)\n                index = copyToBuffer(buffer.start, data, index);\n            node = new TreeBuffer(data, end - buffer.start, nodeSet);\n            startPos = buffer.start - parentStart;\n        }\n        else { // Make it a node\n            let endPos = cursor.pos - size;\n            cursor.next();\n            let localChildren = [], localPositions = [];\n            let localInRepeat = id >= minRepeatType ? id : -1;\n            let lastGroup = 0, lastEnd = end;\n            while (cursor.pos > endPos) {\n                if (localInRepeat >= 0 && cursor.id == localInRepeat && cursor.size >= 0) {\n                    if (cursor.end <= lastEnd - maxBufferLength) {\n                        makeRepeatLeaf(localChildren, localPositions, start, lastGroup, cursor.end, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart);\n                        lastGroup = localChildren.length;\n                        lastEnd = cursor.end;\n                    }\n                    cursor.next();\n                }\n                else if (depth > 2500 /* CutOff.Depth */) {\n                    takeFlatNode(start, endPos, localChildren, localPositions);\n                }\n                else {\n                    takeNode(start, endPos, localChildren, localPositions, localInRepeat, depth + 1);\n                }\n            }\n            if (localInRepeat >= 0 && lastGroup > 0 && lastGroup < localChildren.length)\n                makeRepeatLeaf(localChildren, localPositions, start, lastGroup, start, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart);\n            localChildren.reverse();\n            localPositions.reverse();\n            if (localInRepeat > -1 && lastGroup > 0) {\n                let make = makeBalanced(type, contextAtStart);\n                node = balanceRange(type, localChildren, localPositions, 0, localChildren.length, 0, end - start, make, make);\n            }\n            else {\n                node = makeTree(type, localChildren, localPositions, end - start, lookAheadAtStart - end, contextAtStart);\n            }\n        }\n        children.push(node);\n        positions.push(startPos);\n    }\n    function takeFlatNode(parentStart, minPos, children, positions) {\n        let nodes = []; // Temporary, inverted array of leaf nodes found, with absolute positions\n        let nodeCount = 0, stopAt = -1;\n        while (cursor.pos > minPos) {\n            let { id, start, end, size } = cursor;\n            if (size > 4) { // Not a leaf\n                cursor.next();\n            }\n            else if (stopAt > -1 && start < stopAt) {\n                break;\n            }\n            else {\n                if (stopAt < 0)\n                    stopAt = end - maxBufferLength;\n                nodes.push(id, start, end);\n                nodeCount++;\n                cursor.next();\n            }\n        }\n        if (nodeCount) {\n            let buffer = new Uint16Array(nodeCount * 4);\n            let start = nodes[nodes.length - 2];\n            for (let i = nodes.length - 3, j = 0; i >= 0; i -= 3) {\n                buffer[j++] = nodes[i];\n                buffer[j++] = nodes[i + 1] - start;\n                buffer[j++] = nodes[i + 2] - start;\n                buffer[j++] = j;\n            }\n            children.push(new TreeBuffer(buffer, nodes[2] - start, nodeSet));\n            positions.push(start - parentStart);\n        }\n    }\n    function makeBalanced(type, contextHash) {\n        return (children, positions, length) => {\n            let lookAhead = 0, lastI = children.length - 1, last, lookAheadProp;\n            if (lastI >= 0 && (last = children[lastI]) instanceof Tree) {\n                if (!lastI && last.type == type && last.length == length)\n                    return last;\n                if (lookAheadProp = last.prop(NodeProp.lookAhead))\n                    lookAhead = positions[lastI] + last.length + lookAheadProp;\n            }\n            return makeTree(type, children, positions, length, lookAhead, contextHash);\n        };\n    }\n    function makeRepeatLeaf(children, positions, base, i, from, to, type, lookAhead, contextHash) {\n        let localChildren = [], localPositions = [];\n        while (children.length > i) {\n            localChildren.push(children.pop());\n            localPositions.push(positions.pop() + base - from);\n        }\n        children.push(makeTree(nodeSet.types[type], localChildren, localPositions, to - from, lookAhead - to, contextHash));\n        positions.push(from - base);\n    }\n    function makeTree(type, children, positions, length, lookAhead, contextHash, props) {\n        if (contextHash) {\n            let pair = [NodeProp.contextHash, contextHash];\n            props = props ? [pair].concat(props) : [pair];\n        }\n        if (lookAhead > 25) {\n            let pair = [NodeProp.lookAhead, lookAhead];\n            props = props ? [pair].concat(props) : [pair];\n        }\n        return new Tree(type, children, positions, length, props);\n    }\n    function findBufferSize(maxSize, inRepeat) {\n        // Scan through the buffer to find previous siblings that fit\n        // together in a TreeBuffer, and don't contain any reused nodes\n        // (which can't be stored in a buffer).\n        // If `inRepeat` is > -1, ignore node boundaries of that type for\n        // nesting, but make sure the end falls either at the start\n        // (`maxSize`) or before such a node.\n        let fork = cursor.fork();\n        let size = 0, start = 0, skip = 0, minStart = fork.end - maxBufferLength;\n        let result = { size: 0, start: 0, skip: 0 };\n        scan: for (let minPos = fork.pos - maxSize; fork.pos > minPos;) {\n            let nodeSize = fork.size;\n            // Pretend nested repeat nodes of the same type don't exist\n            if (fork.id == inRepeat && nodeSize >= 0) {\n                // Except that we store the current state as a valid return\n                // value.\n                result.size = size;\n                result.start = start;\n                result.skip = skip;\n                skip += 4;\n                size += 4;\n                fork.next();\n                continue;\n            }\n            let startPos = fork.pos - nodeSize;\n            if (nodeSize < 0 || startPos < minPos || fork.start < minStart)\n                break;\n            let localSkipped = fork.id >= minRepeatType ? 4 : 0;\n            let nodeStart = fork.start;\n            fork.next();\n            while (fork.pos > startPos) {\n                if (fork.size < 0) {\n                    if (fork.size == -3 /* SpecialRecord.ContextChange */)\n                        localSkipped += 4;\n                    else\n                        break scan;\n                }\n                else if (fork.id >= minRepeatType) {\n                    localSkipped += 4;\n                }\n                fork.next();\n            }\n            start = nodeStart;\n            size += nodeSize;\n            skip += localSkipped;\n        }\n        if (inRepeat < 0 || size == maxSize) {\n            result.size = size;\n            result.start = start;\n            result.skip = skip;\n        }\n        return result.size > 4 ? result : undefined;\n    }\n    function copyToBuffer(bufferStart, buffer, index) {\n        let { id, start, end, size } = cursor;\n        cursor.next();\n        if (size >= 0 && id < minRepeatType) {\n            let startIndex = index;\n            if (size > 4) {\n                let endPos = cursor.pos - (size - 4);\n                while (cursor.pos > endPos)\n                    index = copyToBuffer(bufferStart, buffer, index);\n            }\n            buffer[--index] = startIndex;\n            buffer[--index] = end - bufferStart;\n            buffer[--index] = start - bufferStart;\n            buffer[--index] = id;\n        }\n        else if (size == -3 /* SpecialRecord.ContextChange */) {\n            contextHash = id;\n        }\n        else if (size == -4 /* SpecialRecord.LookAhead */) {\n            lookAhead = id;\n        }\n        return index;\n    }\n    let children = [], positions = [];\n    while (cursor.pos > 0)\n        takeNode(data.start || 0, data.bufferStart || 0, children, positions, -1, 0);\n    let length = (_a = data.length) !== null && _a !== void 0 ? _a : (children.length ? positions[0] + children[0].length : 0);\n    return new Tree(types[data.topID], children.reverse(), positions.reverse(), length);\n}\nconst nodeSizeCache = new WeakMap;\nfunction nodeSize(balanceType, node) {\n    if (!balanceType.isAnonymous || node instanceof TreeBuffer || node.type != balanceType)\n        return 1;\n    let size = nodeSizeCache.get(node);\n    if (size == null) {\n        size = 1;\n        for (let child of node.children) {\n            if (child.type != balanceType || !(child instanceof Tree)) {\n                size = 1;\n                break;\n            }\n            size += nodeSize(balanceType, child);\n        }\n        nodeSizeCache.set(node, size);\n    }\n    return size;\n}\nfunction balanceRange(\n// The type the balanced tree's inner nodes.\nbalanceType, \n// The direct children and their positions\nchildren, positions, \n// The index range in children/positions to use\nfrom, to, \n// The start position of the nodes, relative to their parent.\nstart, \n// Length of the outer node\nlength, \n// Function to build the top node of the balanced tree\nmkTop, \n// Function to build internal nodes for the balanced tree\nmkTree) {\n    let total = 0;\n    for (let i = from; i < to; i++)\n        total += nodeSize(balanceType, children[i]);\n    let maxChild = Math.ceil((total * 1.5) / 8 /* Balance.BranchFactor */);\n    let localChildren = [], localPositions = [];\n    function divide(children, positions, from, to, offset) {\n        for (let i = from; i < to;) {\n            let groupFrom = i, groupStart = positions[i], groupSize = nodeSize(balanceType, children[i]);\n            i++;\n            for (; i < to; i++) {\n                let nextSize = nodeSize(balanceType, children[i]);\n                if (groupSize + nextSize >= maxChild)\n                    break;\n                groupSize += nextSize;\n            }\n            if (i == groupFrom + 1) {\n                if (groupSize > maxChild) {\n                    let only = children[groupFrom]; // Only trees can have a size > 1\n                    divide(only.children, only.positions, 0, only.children.length, positions[groupFrom] + offset);\n                    continue;\n                }\n                localChildren.push(children[groupFrom]);\n            }\n            else {\n                let length = positions[i - 1] + children[i - 1].length - groupStart;\n                localChildren.push(balanceRange(balanceType, children, positions, groupFrom, i, groupStart, length, null, mkTree));\n            }\n            localPositions.push(groupStart + offset - start);\n        }\n    }\n    divide(children, positions, from, to, 0);\n    return (mkTop || mkTree)(localChildren, localPositions, length);\n}\n/**\nProvides a way to associate values with pieces of trees. As long\nas that part of the tree is reused, the associated values can be\nretrieved from an updated tree.\n*/\nclass NodeWeakMap {\n    constructor() {\n        this.map = new WeakMap();\n    }\n    setBuffer(buffer, index, value) {\n        let inner = this.map.get(buffer);\n        if (!inner)\n            this.map.set(buffer, inner = new Map);\n        inner.set(index, value);\n    }\n    getBuffer(buffer, index) {\n        let inner = this.map.get(buffer);\n        return inner && inner.get(index);\n    }\n    /**\n    Set the value for this syntax node.\n    */\n    set(node, value) {\n        if (node instanceof BufferNode)\n            this.setBuffer(node.context.buffer, node.index, value);\n        else if (node instanceof TreeNode)\n            this.map.set(node.tree, value);\n    }\n    /**\n    Retrieve value for this syntax node, if it exists in the map.\n    */\n    get(node) {\n        return node instanceof BufferNode ? this.getBuffer(node.context.buffer, node.index)\n            : node instanceof TreeNode ? this.map.get(node.tree) : undefined;\n    }\n    /**\n    Set the value for the node that a cursor currently points to.\n    */\n    cursorSet(cursor, value) {\n        if (cursor.buffer)\n            this.setBuffer(cursor.buffer.buffer, cursor.index, value);\n        else\n            this.map.set(cursor.tree, value);\n    }\n    /**\n    Retrieve the value for the node that a cursor currently points\n    to.\n    */\n    cursorGet(cursor) {\n        return cursor.buffer ? this.getBuffer(cursor.buffer.buffer, cursor.index) : this.map.get(cursor.tree);\n    }\n}\n\n/**\nTree fragments are used during [incremental\nparsing](#common.Parser.startParse) to track parts of old trees\nthat can be reused in a new parse. An array of fragments is used\nto track regions of an old tree whose nodes might be reused in new\nparses. Use the static\n[`applyChanges`](#common.TreeFragment^applyChanges) method to\nupdate fragments for document changes.\n*/\nclass TreeFragment {\n    /**\n    Construct a tree fragment. You'll usually want to use\n    [`addTree`](#common.TreeFragment^addTree) and\n    [`applyChanges`](#common.TreeFragment^applyChanges) instead of\n    calling this directly.\n    */\n    constructor(\n    /**\n    The start of the unchanged range pointed to by this fragment.\n    This refers to an offset in the _updated_ document (as opposed\n    to the original tree).\n    */\n    from, \n    /**\n    The end of the unchanged range.\n    */\n    to, \n    /**\n    The tree that this fragment is based on.\n    */\n    tree, \n    /**\n    The offset between the fragment's tree and the document that\n    this fragment can be used against. Add this when going from\n    document to tree positions, subtract it to go from tree to\n    document positions.\n    */\n    offset, openStart = false, openEnd = false) {\n        this.from = from;\n        this.to = to;\n        this.tree = tree;\n        this.offset = offset;\n        this.open = (openStart ? 1 /* Open.Start */ : 0) | (openEnd ? 2 /* Open.End */ : 0);\n    }\n    /**\n    Whether the start of the fragment represents the start of a\n    parse, or the end of a change. (In the second case, it may not\n    be safe to reuse some nodes at the start, depending on the\n    parsing algorithm.)\n    */\n    get openStart() { return (this.open & 1 /* Open.Start */) > 0; }\n    /**\n    Whether the end of the fragment represents the end of a\n    full-document parse, or the start of a change.\n    */\n    get openEnd() { return (this.open & 2 /* Open.End */) > 0; }\n    /**\n    Create a set of fragments from a freshly parsed tree, or update\n    an existing set of fragments by replacing the ones that overlap\n    with a tree with content from the new tree. When `partial` is\n    true, the parse is treated as incomplete, and the resulting\n    fragment has [`openEnd`](#common.TreeFragment.openEnd) set to\n    true.\n    */\n    static addTree(tree, fragments = [], partial = false) {\n        let result = [new TreeFragment(0, tree.length, tree, 0, false, partial)];\n        for (let f of fragments)\n            if (f.to > tree.length)\n                result.push(f);\n        return result;\n    }\n    /**\n    Apply a set of edits to an array of fragments, removing or\n    splitting fragments as necessary to remove edited ranges, and\n    adjusting offsets for fragments that moved.\n    */\n    static applyChanges(fragments, changes, minGap = 128) {\n        if (!changes.length)\n            return fragments;\n        let result = [];\n        let fI = 1, nextF = fragments.length ? fragments[0] : null;\n        for (let cI = 0, pos = 0, off = 0;; cI++) {\n            let nextC = cI < changes.length ? changes[cI] : null;\n            let nextPos = nextC ? nextC.fromA : 1e9;\n            if (nextPos - pos >= minGap)\n                while (nextF && nextF.from < nextPos) {\n                    let cut = nextF;\n                    if (pos >= cut.from || nextPos <= cut.to || off) {\n                        let fFrom = Math.max(cut.from, pos) - off, fTo = Math.min(cut.to, nextPos) - off;\n                        cut = fFrom >= fTo ? null : new TreeFragment(fFrom, fTo, cut.tree, cut.offset + off, cI > 0, !!nextC);\n                    }\n                    if (cut)\n                        result.push(cut);\n                    if (nextF.to > nextPos)\n                        break;\n                    nextF = fI < fragments.length ? fragments[fI++] : null;\n                }\n            if (!nextC)\n                break;\n            pos = nextC.toA;\n            off = nextC.toA - nextC.toB;\n        }\n        return result;\n    }\n}\n/**\nA superclass that parsers should extend.\n*/\nclass Parser {\n    /**\n    Start a parse, returning a [partial parse](#common.PartialParse)\n    object. [`fragments`](#common.TreeFragment) can be passed in to\n    make the parse incremental.\n    \n    By default, the entire input is parsed. You can pass `ranges`,\n    which should be a sorted array of non-empty, non-overlapping\n    ranges, to parse only those ranges. The tree returned in that\n    case will start at `ranges[0].from`.\n    */\n    startParse(input, fragments, ranges) {\n        if (typeof input == \"string\")\n            input = new StringInput(input);\n        ranges = !ranges ? [new Range(0, input.length)] : ranges.length ? ranges.map(r => new Range(r.from, r.to)) : [new Range(0, 0)];\n        return this.createParse(input, fragments || [], ranges);\n    }\n    /**\n    Run a full parse, returning the resulting tree.\n    */\n    parse(input, fragments, ranges) {\n        let parse = this.startParse(input, fragments, ranges);\n        for (;;) {\n            let done = parse.advance();\n            if (done)\n                return done;\n        }\n    }\n}\nclass StringInput {\n    constructor(string) {\n        this.string = string;\n    }\n    get length() { return this.string.length; }\n    chunk(from) { return this.string.slice(from); }\n    get lineChunks() { return false; }\n    read(from, to) { return this.string.slice(from, to); }\n}\n\n/**\nCreate a parse wrapper that, after the inner parse completes,\nscans its tree for mixed language regions with the `nest`\nfunction, runs the resulting [inner parses](#common.NestedParse),\nand then [mounts](#common.NodeProp^mounted) their results onto the\ntree.\n*/\nfunction parseMixed(nest) {\n    return (parse, input, fragments, ranges) => new MixedParse(parse, nest, input, fragments, ranges);\n}\nclass InnerParse {\n    constructor(parser, parse, overlay, target, from) {\n        this.parser = parser;\n        this.parse = parse;\n        this.overlay = overlay;\n        this.target = target;\n        this.from = from;\n    }\n}\nfunction checkRanges(ranges) {\n    if (!ranges.length || ranges.some(r => r.from >= r.to))\n        throw new RangeError(\"Invalid inner parse ranges given: \" + JSON.stringify(ranges));\n}\nclass ActiveOverlay {\n    constructor(parser, predicate, mounts, index, start, target, prev) {\n        this.parser = parser;\n        this.predicate = predicate;\n        this.mounts = mounts;\n        this.index = index;\n        this.start = start;\n        this.target = target;\n        this.prev = prev;\n        this.depth = 0;\n        this.ranges = [];\n    }\n}\nconst stoppedInner = new NodeProp({ perNode: true });\nclass MixedParse {\n    constructor(base, nest, input, fragments, ranges) {\n        this.nest = nest;\n        this.input = input;\n        this.fragments = fragments;\n        this.ranges = ranges;\n        this.inner = [];\n        this.innerDone = 0;\n        this.baseTree = null;\n        this.stoppedAt = null;\n        this.baseParse = base;\n    }\n    advance() {\n        if (this.baseParse) {\n            let done = this.baseParse.advance();\n            if (!done)\n                return null;\n            this.baseParse = null;\n            this.baseTree = done;\n            this.startInner();\n            if (this.stoppedAt != null)\n                for (let inner of this.inner)\n                    inner.parse.stopAt(this.stoppedAt);\n        }\n        if (this.innerDone == this.inner.length) {\n            let result = this.baseTree;\n            if (this.stoppedAt != null)\n                result = new Tree(result.type, result.children, result.positions, result.length, result.propValues.concat([[stoppedInner, this.stoppedAt]]));\n            return result;\n        }\n        let inner = this.inner[this.innerDone], done = inner.parse.advance();\n        if (done) {\n            this.innerDone++;\n            // This is a somewhat dodgy but super helpful hack where we\n            // patch up nodes created by the inner parse (and thus\n            // presumably not aliased anywhere else) to hold the information\n            // about the inner parse.\n            let props = Object.assign(Object.create(null), inner.target.props);\n            props[NodeProp.mounted.id] = new MountedTree(done, inner.overlay, inner.parser);\n            inner.target.props = props;\n        }\n        return null;\n    }\n    get parsedPos() {\n        if (this.baseParse)\n            return 0;\n        let pos = this.input.length;\n        for (let i = this.innerDone; i < this.inner.length; i++) {\n            if (this.inner[i].from < pos)\n                pos = Math.min(pos, this.inner[i].parse.parsedPos);\n        }\n        return pos;\n    }\n    stopAt(pos) {\n        this.stoppedAt = pos;\n        if (this.baseParse)\n            this.baseParse.stopAt(pos);\n        else\n            for (let i = this.innerDone; i < this.inner.length; i++)\n                this.inner[i].parse.stopAt(pos);\n    }\n    startInner() {\n        let fragmentCursor = new FragmentCursor(this.fragments);\n        let overlay = null;\n        let covered = null;\n        let cursor = new TreeCursor(new TreeNode(this.baseTree, this.ranges[0].from, 0, null), exports.IterMode.IncludeAnonymous | exports.IterMode.IgnoreMounts);\n        scan: for (let nest, isCovered;;) {\n            let enter = true, range;\n            if (this.stoppedAt != null && cursor.from >= this.stoppedAt) {\n                enter = false;\n            }\n            else if (fragmentCursor.hasNode(cursor)) {\n                if (overlay) {\n                    let match = overlay.mounts.find(m => m.frag.from <= cursor.from && m.frag.to >= cursor.to && m.mount.overlay);\n                    if (match)\n                        for (let r of match.mount.overlay) {\n                            let from = r.from + match.pos, to = r.to + match.pos;\n                            if (from >= cursor.from && to <= cursor.to && !overlay.ranges.some(r => r.from < to && r.to > from))\n                                overlay.ranges.push({ from, to });\n                        }\n                }\n                enter = false;\n            }\n            else if (covered && (isCovered = checkCover(covered.ranges, cursor.from, cursor.to))) {\n                enter = isCovered != 2 /* Cover.Full */;\n            }\n            else if (!cursor.type.isAnonymous && (nest = this.nest(cursor, this.input)) &&\n                (cursor.from < cursor.to || !nest.overlay)) {\n                if (!cursor.tree)\n                    materialize(cursor);\n                let oldMounts = fragmentCursor.findMounts(cursor.from, nest.parser);\n                if (typeof nest.overlay == \"function\") {\n                    overlay = new ActiveOverlay(nest.parser, nest.overlay, oldMounts, this.inner.length, cursor.from, cursor.tree, overlay);\n                }\n                else {\n                    let ranges = punchRanges(this.ranges, nest.overlay ||\n                        (cursor.from < cursor.to ? [new Range(cursor.from, cursor.to)] : []));\n                    if (ranges.length)\n                        checkRanges(ranges);\n                    if (ranges.length || !nest.overlay)\n                        this.inner.push(new InnerParse(nest.parser, ranges.length ? nest.parser.startParse(this.input, enterFragments(oldMounts, ranges), ranges)\n                            : nest.parser.startParse(\"\"), nest.overlay ? nest.overlay.map(r => new Range(r.from - cursor.from, r.to - cursor.from)) : null, cursor.tree, ranges.length ? ranges[0].from : cursor.from));\n                    if (!nest.overlay)\n                        enter = false;\n                    else if (ranges.length)\n                        covered = { ranges, depth: 0, prev: covered };\n                }\n            }\n            else if (overlay && (range = overlay.predicate(cursor))) {\n                if (range === true)\n                    range = new Range(cursor.from, cursor.to);\n                if (range.from < range.to) {\n                    let last = overlay.ranges.length - 1;\n                    if (last >= 0 && overlay.ranges[last].to == range.from)\n                        overlay.ranges[last] = { from: overlay.ranges[last].from, to: range.to };\n                    else\n                        overlay.ranges.push(range);\n                }\n            }\n            if (enter && cursor.firstChild()) {\n                if (overlay)\n                    overlay.depth++;\n                if (covered)\n                    covered.depth++;\n            }\n            else {\n                for (;;) {\n                    if (cursor.nextSibling())\n                        break;\n                    if (!cursor.parent())\n                        break scan;\n                    if (overlay && !--overlay.depth) {\n                        let ranges = punchRanges(this.ranges, overlay.ranges);\n                        if (ranges.length) {\n                            checkRanges(ranges);\n                            this.inner.splice(overlay.index, 0, new InnerParse(overlay.parser, overlay.parser.startParse(this.input, enterFragments(overlay.mounts, ranges), ranges), overlay.ranges.map(r => new Range(r.from - overlay.start, r.to - overlay.start)), overlay.target, ranges[0].from));\n                        }\n                        overlay = overlay.prev;\n                    }\n                    if (covered && !--covered.depth)\n                        covered = covered.prev;\n                }\n            }\n        }\n    }\n}\nfunction checkCover(covered, from, to) {\n    for (let range of covered) {\n        if (range.from >= to)\n            break;\n        if (range.to > from)\n            return range.from <= from && range.to >= to ? 2 /* Cover.Full */ : 1 /* Cover.Partial */;\n    }\n    return 0 /* Cover.None */;\n}\n// Take a piece of buffer and convert it into a stand-alone\n// TreeBuffer.\nfunction sliceBuf(buf, startI, endI, nodes, positions, off) {\n    if (startI < endI) {\n        let from = buf.buffer[startI + 1];\n        nodes.push(buf.slice(startI, endI, from));\n        positions.push(from - off);\n    }\n}\n// This function takes a node that's in a buffer, and converts it, and\n// its parent buffer nodes, into a Tree. This is again acting on the\n// assumption that the trees and buffers have been constructed by the\n// parse that was ran via the mix parser, and thus aren't shared with\n// any other code, making violations of the immutability safe.\nfunction materialize(cursor) {\n    let { node } = cursor, stack = [];\n    let buffer = node.context.buffer;\n    // Scan up to the nearest tree\n    do {\n        stack.push(cursor.index);\n        cursor.parent();\n    } while (!cursor.tree);\n    // Find the index of the buffer in that tree\n    let base = cursor.tree, i = base.children.indexOf(buffer);\n    let buf = base.children[i], b = buf.buffer, newStack = [i];\n    // Split a level in the buffer, putting the nodes before and after\n    // the child that contains `node` into new buffers.\n    function split(startI, endI, type, innerOffset, length, stackPos) {\n        let targetI = stack[stackPos];\n        let children = [], positions = [];\n        sliceBuf(buf, startI, targetI, children, positions, innerOffset);\n        let from = b[targetI + 1], to = b[targetI + 2];\n        newStack.push(children.length);\n        let child = stackPos\n            ? split(targetI + 4, b[targetI + 3], buf.set.types[b[targetI]], from, to - from, stackPos - 1)\n            : node.toTree();\n        children.push(child);\n        positions.push(from - innerOffset);\n        sliceBuf(buf, b[targetI + 3], endI, children, positions, innerOffset);\n        return new Tree(type, children, positions, length);\n    }\n    base.children[i] = split(0, b.length, NodeType.none, 0, buf.length, stack.length - 1);\n    // Move the cursor back to the target node\n    for (let index of newStack) {\n        let tree = cursor.tree.children[index], pos = cursor.tree.positions[index];\n        cursor.yield(new TreeNode(tree, pos + cursor.from, index, cursor._tree));\n    }\n}\nclass StructureCursor {\n    constructor(root, offset) {\n        this.offset = offset;\n        this.done = false;\n        this.cursor = root.cursor(exports.IterMode.IncludeAnonymous | exports.IterMode.IgnoreMounts);\n    }\n    // Move to the first node (in pre-order) that starts at or after `pos`.\n    moveTo(pos) {\n        let { cursor } = this, p = pos - this.offset;\n        while (!this.done && cursor.from < p) {\n            if (cursor.to >= pos && cursor.enter(p, 1, exports.IterMode.IgnoreOverlays | exports.IterMode.ExcludeBuffers)) ;\n            else if (!cursor.next(false))\n                this.done = true;\n        }\n    }\n    hasNode(cursor) {\n        this.moveTo(cursor.from);\n        if (!this.done && this.cursor.from + this.offset == cursor.from && this.cursor.tree) {\n            for (let tree = this.cursor.tree;;) {\n                if (tree == cursor.tree)\n                    return true;\n                if (tree.children.length && tree.positions[0] == 0 && tree.children[0] instanceof Tree)\n                    tree = tree.children[0];\n                else\n                    break;\n            }\n        }\n        return false;\n    }\n}\nclass FragmentCursor {\n    constructor(fragments) {\n        var _a;\n        this.fragments = fragments;\n        this.curTo = 0;\n        this.fragI = 0;\n        if (fragments.length) {\n            let first = this.curFrag = fragments[0];\n            this.curTo = (_a = first.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : first.to;\n            this.inner = new StructureCursor(first.tree, -first.offset);\n        }\n        else {\n            this.curFrag = this.inner = null;\n        }\n    }\n    hasNode(node) {\n        while (this.curFrag && node.from >= this.curTo)\n            this.nextFrag();\n        return this.curFrag && this.curFrag.from <= node.from && this.curTo >= node.to && this.inner.hasNode(node);\n    }\n    nextFrag() {\n        var _a;\n        this.fragI++;\n        if (this.fragI == this.fragments.length) {\n            this.curFrag = this.inner = null;\n        }\n        else {\n            let frag = this.curFrag = this.fragments[this.fragI];\n            this.curTo = (_a = frag.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : frag.to;\n            this.inner = new StructureCursor(frag.tree, -frag.offset);\n        }\n    }\n    findMounts(pos, parser) {\n        var _a;\n        let result = [];\n        if (this.inner) {\n            this.inner.cursor.moveTo(pos, 1);\n            for (let pos = this.inner.cursor.node; pos; pos = pos.parent) {\n                let mount = (_a = pos.tree) === null || _a === void 0 ? void 0 : _a.prop(NodeProp.mounted);\n                if (mount && mount.parser == parser) {\n                    for (let i = this.fragI; i < this.fragments.length; i++) {\n                        let frag = this.fragments[i];\n                        if (frag.from >= pos.to)\n                            break;\n                        if (frag.tree == this.curFrag.tree)\n                            result.push({\n                                frag,\n                                pos: pos.from - frag.offset,\n                                mount\n                            });\n                    }\n                }\n            }\n        }\n        return result;\n    }\n}\nfunction punchRanges(outer, ranges) {\n    let copy = null, current = ranges;\n    for (let i = 1, j = 0; i < outer.length; i++) {\n        let gapFrom = outer[i - 1].to, gapTo = outer[i].from;\n        for (; j < current.length; j++) {\n            let r = current[j];\n            if (r.from >= gapTo)\n                break;\n            if (r.to <= gapFrom)\n                continue;\n            if (!copy)\n                current = copy = ranges.slice();\n            if (r.from < gapFrom) {\n                copy[j] = new Range(r.from, gapFrom);\n                if (r.to > gapTo)\n                    copy.splice(j + 1, 0, new Range(gapTo, r.to));\n            }\n            else if (r.to > gapTo) {\n                copy[j--] = new Range(gapTo, r.to);\n            }\n            else {\n                copy.splice(j--, 1);\n            }\n        }\n    }\n    return current;\n}\nfunction findCoverChanges(a, b, from, to) {\n    let iA = 0, iB = 0, inA = false, inB = false, pos = -1e9;\n    let result = [];\n    for (;;) {\n        let nextA = iA == a.length ? 1e9 : inA ? a[iA].to : a[iA].from;\n        let nextB = iB == b.length ? 1e9 : inB ? b[iB].to : b[iB].from;\n        if (inA != inB) {\n            let start = Math.max(pos, from), end = Math.min(nextA, nextB, to);\n            if (start < end)\n                result.push(new Range(start, end));\n        }\n        pos = Math.min(nextA, nextB);\n        if (pos == 1e9)\n            break;\n        if (nextA == pos) {\n            if (!inA)\n                inA = true;\n            else {\n                inA = false;\n                iA++;\n            }\n        }\n        if (nextB == pos) {\n            if (!inB)\n                inB = true;\n            else {\n                inB = false;\n                iB++;\n            }\n        }\n    }\n    return result;\n}\n// Given a number of fragments for the outer tree, and a set of ranges\n// to parse, find fragments for inner trees mounted around those\n// ranges, if any.\nfunction enterFragments(mounts, ranges) {\n    let result = [];\n    for (let { pos, mount, frag } of mounts) {\n        let startPos = pos + (mount.overlay ? mount.overlay[0].from : 0), endPos = startPos + mount.tree.length;\n        let from = Math.max(frag.from, startPos), to = Math.min(frag.to, endPos);\n        if (mount.overlay) {\n            let overlay = mount.overlay.map(r => new Range(r.from + pos, r.to + pos));\n            let changes = findCoverChanges(ranges, overlay, from, to);\n            for (let i = 0, pos = from;; i++) {\n                let last = i == changes.length, end = last ? to : changes[i].from;\n                if (end > pos)\n                    result.push(new TreeFragment(pos, end, mount.tree, -startPos, frag.from >= pos || frag.openStart, frag.to <= end || frag.openEnd));\n                if (last)\n                    break;\n                pos = changes[i].to;\n            }\n        }\n        else {\n            result.push(new TreeFragment(from, to, mount.tree, -startPos, frag.from >= startPos || frag.openStart, frag.to <= endPos || frag.openEnd));\n        }\n    }\n    return result;\n}\n\nexports.DefaultBufferLength = DefaultBufferLength;\nexports.MountedTree = MountedTree;\nexports.NodeProp = NodeProp;\nexports.NodeSet = NodeSet;\nexports.NodeType = NodeType;\nexports.NodeWeakMap = NodeWeakMap;\nexports.Parser = Parser;\nexports.Tree = Tree;\nexports.TreeBuffer = TreeBuffer;\nexports.TreeCursor = TreeCursor;\nexports.TreeFragment = TreeFragment;\nexports.parseMixed = parseMixed;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar common = require('@lezer/common');\n\nlet nextTagID = 0;\n/**\nHighlighting tags are markers that denote a highlighting category.\nThey are [associated](#highlight.styleTags) with parts of a syntax\ntree by a language mode, and then mapped to an actual CSS style by\na [highlighter](#highlight.Highlighter).\n\nBecause syntax tree node types and highlight styles have to be\nable to talk the same language, CodeMirror uses a mostly _closed_\n[vocabulary](#highlight.tags) of syntax tags (as opposed to\ntraditional open string-based systems, which make it hard for\nhighlighting themes to cover all the tokens produced by the\nvarious languages).\n\nIt _is_ possible to [define](#highlight.Tag^define) your own\nhighlighting tags for system-internal use (where you control both\nthe language package and the highlighter), but such tags will not\nbe picked up by regular highlighters (though you can derive them\nfrom standard tags to allow highlighters to fall back to those).\n*/\nclass Tag {\n    /**\n    @internal\n    */\n    constructor(\n    /**\n    The set of this tag and all its parent tags, starting with\n    this one itself and sorted in order of decreasing specificity.\n    */\n    set, \n    /**\n    The base unmodified tag that this one is based on, if it's\n    modified @internal\n    */\n    base, \n    /**\n    The modifiers applied to this.base @internal\n    */\n    modified) {\n        this.set = set;\n        this.base = base;\n        this.modified = modified;\n        /**\n        @internal\n        */\n        this.id = nextTagID++;\n    }\n    /**\n    Define a new tag. If `parent` is given, the tag is treated as a\n    sub-tag of that parent, and\n    [highlighters](#highlight.tagHighlighter) that don't mention\n    this tag will try to fall back to the parent tag (or grandparent\n    tag, etc).\n    */\n    static define(parent) {\n        if (parent === null || parent === void 0 ? void 0 : parent.base)\n            throw new Error(\"Can not derive from a modified tag\");\n        let tag = new Tag([], null, []);\n        tag.set.push(tag);\n        if (parent)\n            for (let t of parent.set)\n                tag.set.push(t);\n        return tag;\n    }\n    /**\n    Define a tag _modifier_, which is a function that, given a tag,\n    will return a tag that is a subtag of the original. Applying the\n    same modifier to a twice tag will return the same value (`m1(t1)\n    == m1(t1)`) and applying multiple modifiers will, regardless or\n    order, produce the same tag (`m1(m2(t1)) == m2(m1(t1))`).\n    \n    When multiple modifiers are applied to a given base tag, each\n    smaller set of modifiers is registered as a parent, so that for\n    example `m1(m2(m3(t1)))` is a subtype of `m1(m2(t1))`,\n    `m1(m3(t1)`, and so on.\n    */\n    static defineModifier() {\n        let mod = new Modifier;\n        return (tag) => {\n            if (tag.modified.indexOf(mod) > -1)\n                return tag;\n            return Modifier.get(tag.base || tag, tag.modified.concat(mod).sort((a, b) => a.id - b.id));\n        };\n    }\n}\nlet nextModifierID = 0;\nclass Modifier {\n    constructor() {\n        this.instances = [];\n        this.id = nextModifierID++;\n    }\n    static get(base, mods) {\n        if (!mods.length)\n            return base;\n        let exists = mods[0].instances.find(t => t.base == base && sameArray(mods, t.modified));\n        if (exists)\n            return exists;\n        let set = [], tag = new Tag(set, base, mods);\n        for (let m of mods)\n            m.instances.push(tag);\n        let configs = powerSet(mods);\n        for (let parent of base.set)\n            if (!parent.modified.length)\n                for (let config of configs)\n                    set.push(Modifier.get(parent, config));\n        return tag;\n    }\n}\nfunction sameArray(a, b) {\n    return a.length == b.length && a.every((x, i) => x == b[i]);\n}\nfunction powerSet(array) {\n    let sets = [[]];\n    for (let i = 0; i < array.length; i++) {\n        for (let j = 0, e = sets.length; j < e; j++) {\n            sets.push(sets[j].concat(array[i]));\n        }\n    }\n    return sets.sort((a, b) => b.length - a.length);\n}\n/**\nThis function is used to add a set of tags to a language syntax\nvia [`NodeSet.extend`](#common.NodeSet.extend) or\n[`LRParser.configure`](#lr.LRParser.configure).\n\nThe argument object maps node selectors to [highlighting\ntags](#highlight.Tag) or arrays of tags.\n\nNode selectors may hold one or more (space-separated) node paths.\nSuch a path can be a [node name](#common.NodeType.name), or\nmultiple node names (or `*` wildcards) separated by slash\ncharacters, as in `\"Block/Declaration/VariableName\"`. Such a path\nmatches the final node but only if its direct parent nodes are the\nother nodes mentioned. A `*` in such a path matches any parent,\nbut only a single level—wildcards that match multiple parents\naren't supported, both for efficiency reasons and because Lezer\ntrees make it rather hard to reason about what they would match.)\n\nA path can be ended with `/...` to indicate that the tag assigned\nto the node should also apply to all child nodes, even if they\nmatch their own style (by default, only the innermost style is\nused).\n\nWhen a path ends in `!`, as in `Attribute!`, no further matching\nhappens for the node's child nodes, and the entire node gets the\ngiven style.\n\nIn this notation, node names that contain `/`, `!`, `*`, or `...`\nmust be quoted as JSON strings.\n\nFor example:\n\n```javascript\nparser.withProps(\n  styleTags({\n    // Style Number and BigNumber nodes\n    \"Number BigNumber\": tags.number,\n    // Style Escape nodes whose parent is String\n    \"String/Escape\": tags.escape,\n    // Style anything inside Attributes nodes\n    \"Attributes!\": tags.meta,\n    // Add a style to all content inside Italic nodes\n    \"Italic/...\": tags.emphasis,\n    // Style InvalidString nodes as both `string` and `invalid`\n    \"InvalidString\": [tags.string, tags.invalid],\n    // Style the node named \"/\" as punctuation\n    '\"/\"': tags.punctuation\n  })\n)\n```\n*/\nfunction styleTags(spec) {\n    let byName = Object.create(null);\n    for (let prop in spec) {\n        let tags = spec[prop];\n        if (!Array.isArray(tags))\n            tags = [tags];\n        for (let part of prop.split(\" \"))\n            if (part) {\n                let pieces = [], mode = 2 /* Normal */, rest = part;\n                for (let pos = 0;;) {\n                    if (rest == \"...\" && pos > 0 && pos + 3 == part.length) {\n                        mode = 1 /* Inherit */;\n                        break;\n                    }\n                    let m = /^\"(?:[^\"\\\\]|\\\\.)*?\"|[^\\/!]+/.exec(rest);\n                    if (!m)\n                        throw new RangeError(\"Invalid path: \" + part);\n                    pieces.push(m[0] == \"*\" ? \"\" : m[0][0] == '\"' ? JSON.parse(m[0]) : m[0]);\n                    pos += m[0].length;\n                    if (pos == part.length)\n                        break;\n                    let next = part[pos++];\n                    if (pos == part.length && next == \"!\") {\n                        mode = 0 /* Opaque */;\n                        break;\n                    }\n                    if (next != \"/\")\n                        throw new RangeError(\"Invalid path: \" + part);\n                    rest = part.slice(pos);\n                }\n                let last = pieces.length - 1, inner = pieces[last];\n                if (!inner)\n                    throw new RangeError(\"Invalid path: \" + part);\n                let rule = new Rule(tags, mode, last > 0 ? pieces.slice(0, last) : null);\n                byName[inner] = rule.sort(byName[inner]);\n            }\n    }\n    return ruleNodeProp.add(byName);\n}\nconst ruleNodeProp = new common.NodeProp();\nclass Rule {\n    constructor(tags, mode, context, next) {\n        this.tags = tags;\n        this.mode = mode;\n        this.context = context;\n        this.next = next;\n    }\n    get opaque() { return this.mode == 0 /* Opaque */; }\n    get inherit() { return this.mode == 1 /* Inherit */; }\n    sort(other) {\n        if (!other || other.depth < this.depth) {\n            this.next = other;\n            return this;\n        }\n        other.next = this.sort(other.next);\n        return other;\n    }\n    get depth() { return this.context ? this.context.length : 0; }\n}\nRule.empty = new Rule([], 2 /* Normal */, null);\n/**\nDefine a [highlighter](#highlight.Highlighter) from an array of\ntag/class pairs. Classes associated with more specific tags will\ntake precedence.\n*/\nfunction tagHighlighter(tags, options) {\n    let map = Object.create(null);\n    for (let style of tags) {\n        if (!Array.isArray(style.tag))\n            map[style.tag.id] = style.class;\n        else\n            for (let tag of style.tag)\n                map[tag.id] = style.class;\n    }\n    let { scope, all = null } = options || {};\n    return {\n        style: (tags) => {\n            let cls = all;\n            for (let tag of tags) {\n                for (let sub of tag.set) {\n                    let tagClass = map[sub.id];\n                    if (tagClass) {\n                        cls = cls ? cls + \" \" + tagClass : tagClass;\n                        break;\n                    }\n                }\n            }\n            return cls;\n        },\n        scope\n    };\n}\nfunction highlightTags(highlighters, tags) {\n    let result = null;\n    for (let highlighter of highlighters) {\n        let value = highlighter.style(tags);\n        if (value)\n            result = result ? result + \" \" + value : value;\n    }\n    return result;\n}\n/**\nHighlight the given [tree](#common.Tree) with the given\n[highlighter](#highlight.Highlighter).\n*/\nfunction highlightTree(tree, highlighter, \n/**\nAssign styling to a region of the text. Will be called, in order\nof position, for any ranges where more than zero classes apply.\n`classes` is a space separated string of CSS classes.\n*/\nputStyle, \n/**\nThe start of the range to highlight.\n*/\nfrom = 0, \n/**\nThe end of the range.\n*/\nto = tree.length) {\n    let builder = new HighlightBuilder(from, Array.isArray(highlighter) ? highlighter : [highlighter], putStyle);\n    builder.highlightRange(tree.cursor(), from, to, \"\", builder.highlighters);\n    builder.flush(to);\n}\nclass HighlightBuilder {\n    constructor(at, highlighters, span) {\n        this.at = at;\n        this.highlighters = highlighters;\n        this.span = span;\n        this.class = \"\";\n    }\n    startSpan(at, cls) {\n        if (cls != this.class) {\n            this.flush(at);\n            if (at > this.at)\n                this.at = at;\n            this.class = cls;\n        }\n    }\n    flush(to) {\n        if (to > this.at && this.class)\n            this.span(this.at, to, this.class);\n    }\n    highlightRange(cursor, from, to, inheritedClass, highlighters) {\n        let { type, from: start, to: end } = cursor;\n        if (start >= to || end <= from)\n            return;\n        if (type.isTop)\n            highlighters = this.highlighters.filter(h => !h.scope || h.scope(type));\n        let cls = inheritedClass;\n        let rule = getStyleTags(cursor) || Rule.empty;\n        let tagCls = highlightTags(highlighters, rule.tags);\n        if (tagCls) {\n            if (cls)\n                cls += \" \";\n            cls += tagCls;\n            if (rule.mode == 1 /* Inherit */)\n                inheritedClass += (inheritedClass ? \" \" : \"\") + tagCls;\n        }\n        this.startSpan(Math.max(from, start), cls);\n        if (rule.opaque)\n            return;\n        let mounted = cursor.tree && cursor.tree.prop(common.NodeProp.mounted);\n        if (mounted && mounted.overlay) {\n            let inner = cursor.node.enter(mounted.overlay[0].from + start, 1);\n            let innerHighlighters = this.highlighters.filter(h => !h.scope || h.scope(mounted.tree.type));\n            let hasChild = cursor.firstChild();\n            for (let i = 0, pos = start;; i++) {\n                let next = i < mounted.overlay.length ? mounted.overlay[i] : null;\n                let nextPos = next ? next.from + start : end;\n                let rangeFrom = Math.max(from, pos), rangeTo = Math.min(to, nextPos);\n                if (rangeFrom < rangeTo && hasChild) {\n                    while (cursor.from < rangeTo) {\n                        this.highlightRange(cursor, rangeFrom, rangeTo, inheritedClass, highlighters);\n                        this.startSpan(Math.min(rangeTo, cursor.to), cls);\n                        if (cursor.to >= nextPos || !cursor.nextSibling())\n                            break;\n                    }\n                }\n                if (!next || nextPos > to)\n                    break;\n                pos = next.to + start;\n                if (pos > from) {\n                    this.highlightRange(inner.cursor(), Math.max(from, next.from + start), Math.min(to, pos), \"\", innerHighlighters);\n                    this.startSpan(Math.min(to, pos), cls);\n                }\n            }\n            if (hasChild)\n                cursor.parent();\n        }\n        else if (cursor.firstChild()) {\n            if (mounted)\n                inheritedClass = \"\";\n            do {\n                if (cursor.to <= from)\n                    continue;\n                if (cursor.from >= to)\n                    break;\n                this.highlightRange(cursor, from, to, inheritedClass, highlighters);\n                this.startSpan(Math.min(to, cursor.to), cls);\n            } while (cursor.nextSibling());\n            cursor.parent();\n        }\n    }\n}\n/**\nMatch a syntax node's [highlight rules](#highlight.styleTags). If\nthere's a match, return its set of tags, and whether it is\nopaque (uses a `!`) or applies to all child nodes (`/...`).\n*/\nfunction getStyleTags(node) {\n    let rule = node.type.prop(ruleNodeProp);\n    while (rule && rule.context && !node.matchContext(rule.context))\n        rule = rule.next;\n    return rule || null;\n}\nconst t = Tag.define;\nconst comment = t(), name = t(), typeName = t(name), propertyName = t(name), literal = t(), string = t(literal), number = t(literal), content = t(), heading = t(content), keyword = t(), operator = t(), punctuation = t(), bracket = t(punctuation), meta = t();\n/**\nThe default set of highlighting [tags](#highlight.Tag).\n\nThis collection is heavily biased towards programming languages,\nand necessarily incomplete. A full ontology of syntactic\nconstructs would fill a stack of books, and be impractical to\nwrite themes for. So try to make do with this set. If all else\nfails, [open an\nissue](https://github.com/codemirror/codemirror.next) to propose a\nnew tag, or [define](#highlight.Tag^define) a local custom tag for\nyour use case.\n\nNote that it is not obligatory to always attach the most specific\ntag possible to an element—if your grammar can't easily\ndistinguish a certain type of element (such as a local variable),\nit is okay to style it as its more general variant (a variable).\n\nFor tags that extend some parent tag, the documentation links to\nthe parent.\n*/\nconst tags = {\n    /**\n    A comment.\n    */\n    comment,\n    /**\n    A line [comment](#highlight.tags.comment).\n    */\n    lineComment: t(comment),\n    /**\n    A block [comment](#highlight.tags.comment).\n    */\n    blockComment: t(comment),\n    /**\n    A documentation [comment](#highlight.tags.comment).\n    */\n    docComment: t(comment),\n    /**\n    Any kind of identifier.\n    */\n    name,\n    /**\n    The [name](#highlight.tags.name) of a variable.\n    */\n    variableName: t(name),\n    /**\n    A type [name](#highlight.tags.name).\n    */\n    typeName: typeName,\n    /**\n    A tag name (subtag of [`typeName`](#highlight.tags.typeName)).\n    */\n    tagName: t(typeName),\n    /**\n    A property or field [name](#highlight.tags.name).\n    */\n    propertyName: propertyName,\n    /**\n    An attribute name (subtag of [`propertyName`](#highlight.tags.propertyName)).\n    */\n    attributeName: t(propertyName),\n    /**\n    The [name](#highlight.tags.name) of a class.\n    */\n    className: t(name),\n    /**\n    A label [name](#highlight.tags.name).\n    */\n    labelName: t(name),\n    /**\n    A namespace [name](#highlight.tags.name).\n    */\n    namespace: t(name),\n    /**\n    The [name](#highlight.tags.name) of a macro.\n    */\n    macroName: t(name),\n    /**\n    A literal value.\n    */\n    literal,\n    /**\n    A string [literal](#highlight.tags.literal).\n    */\n    string,\n    /**\n    A documentation [string](#highlight.tags.string).\n    */\n    docString: t(string),\n    /**\n    A character literal (subtag of [string](#highlight.tags.string)).\n    */\n    character: t(string),\n    /**\n    An attribute value (subtag of [string](#highlight.tags.string)).\n    */\n    attributeValue: t(string),\n    /**\n    A number [literal](#highlight.tags.literal).\n    */\n    number,\n    /**\n    An integer [number](#highlight.tags.number) literal.\n    */\n    integer: t(number),\n    /**\n    A floating-point [number](#highlight.tags.number) literal.\n    */\n    float: t(number),\n    /**\n    A boolean [literal](#highlight.tags.literal).\n    */\n    bool: t(literal),\n    /**\n    Regular expression [literal](#highlight.tags.literal).\n    */\n    regexp: t(literal),\n    /**\n    An escape [literal](#highlight.tags.literal), for example a\n    backslash escape in a string.\n    */\n    escape: t(literal),\n    /**\n    A color [literal](#highlight.tags.literal).\n    */\n    color: t(literal),\n    /**\n    A URL [literal](#highlight.tags.literal).\n    */\n    url: t(literal),\n    /**\n    A language keyword.\n    */\n    keyword,\n    /**\n    The [keyword](#highlight.tags.keyword) for the self or this\n    object.\n    */\n    self: t(keyword),\n    /**\n    The [keyword](#highlight.tags.keyword) for null.\n    */\n    null: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) denoting some atomic value.\n    */\n    atom: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that represents a unit.\n    */\n    unit: t(keyword),\n    /**\n    A modifier [keyword](#highlight.tags.keyword).\n    */\n    modifier: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that acts as an operator.\n    */\n    operatorKeyword: t(keyword),\n    /**\n    A control-flow related [keyword](#highlight.tags.keyword).\n    */\n    controlKeyword: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) that defines something.\n    */\n    definitionKeyword: t(keyword),\n    /**\n    A [keyword](#highlight.tags.keyword) related to defining or\n    interfacing with modules.\n    */\n    moduleKeyword: t(keyword),\n    /**\n    An operator.\n    */\n    operator,\n    /**\n    An [operator](#highlight.tags.operator) that dereferences something.\n    */\n    derefOperator: t(operator),\n    /**\n    Arithmetic-related [operator](#highlight.tags.operator).\n    */\n    arithmeticOperator: t(operator),\n    /**\n    Logical [operator](#highlight.tags.operator).\n    */\n    logicOperator: t(operator),\n    /**\n    Bit [operator](#highlight.tags.operator).\n    */\n    bitwiseOperator: t(operator),\n    /**\n    Comparison [operator](#highlight.tags.operator).\n    */\n    compareOperator: t(operator),\n    /**\n    [Operator](#highlight.tags.operator) that updates its operand.\n    */\n    updateOperator: t(operator),\n    /**\n    [Operator](#highlight.tags.operator) that defines something.\n    */\n    definitionOperator: t(operator),\n    /**\n    Type-related [operator](#highlight.tags.operator).\n    */\n    typeOperator: t(operator),\n    /**\n    Control-flow [operator](#highlight.tags.operator).\n    */\n    controlOperator: t(operator),\n    /**\n    Program or markup punctuation.\n    */\n    punctuation,\n    /**\n    [Punctuation](#highlight.tags.punctuation) that separates\n    things.\n    */\n    separator: t(punctuation),\n    /**\n    Bracket-style [punctuation](#highlight.tags.punctuation).\n    */\n    bracket,\n    /**\n    Angle [brackets](#highlight.tags.bracket) (usually `<` and `>`\n    tokens).\n    */\n    angleBracket: t(bracket),\n    /**\n    Square [brackets](#highlight.tags.bracket) (usually `[` and `]`\n    tokens).\n    */\n    squareBracket: t(bracket),\n    /**\n    Parentheses (usually `(` and `)` tokens). Subtag of\n    [bracket](#highlight.tags.bracket).\n    */\n    paren: t(bracket),\n    /**\n    Braces (usually `{` and `}` tokens). Subtag of\n    [bracket](#highlight.tags.bracket).\n    */\n    brace: t(bracket),\n    /**\n    Content, for example plain text in XML or markup documents.\n    */\n    content,\n    /**\n    [Content](#highlight.tags.content) that represents a heading.\n    */\n    heading,\n    /**\n    A level 1 [heading](#highlight.tags.heading).\n    */\n    heading1: t(heading),\n    /**\n    A level 2 [heading](#highlight.tags.heading).\n    */\n    heading2: t(heading),\n    /**\n    A level 3 [heading](#highlight.tags.heading).\n    */\n    heading3: t(heading),\n    /**\n    A level 4 [heading](#highlight.tags.heading).\n    */\n    heading4: t(heading),\n    /**\n    A level 5 [heading](#highlight.tags.heading).\n    */\n    heading5: t(heading),\n    /**\n    A level 6 [heading](#highlight.tags.heading).\n    */\n    heading6: t(heading),\n    /**\n    A prose separator (such as a horizontal rule).\n    */\n    contentSeparator: t(content),\n    /**\n    [Content](#highlight.tags.content) that represents a list.\n    */\n    list: t(content),\n    /**\n    [Content](#highlight.tags.content) that represents a quote.\n    */\n    quote: t(content),\n    /**\n    [Content](#highlight.tags.content) that is emphasized.\n    */\n    emphasis: t(content),\n    /**\n    [Content](#highlight.tags.content) that is styled strong.\n    */\n    strong: t(content),\n    /**\n    [Content](#highlight.tags.content) that is part of a link.\n    */\n    link: t(content),\n    /**\n    [Content](#highlight.tags.content) that is styled as code or\n    monospace.\n    */\n    monospace: t(content),\n    /**\n    [Content](#highlight.tags.content) that has a strike-through\n    style.\n    */\n    strikethrough: t(content),\n    /**\n    Inserted text in a change-tracking format.\n    */\n    inserted: t(),\n    /**\n    Deleted text.\n    */\n    deleted: t(),\n    /**\n    Changed text.\n    */\n    changed: t(),\n    /**\n    An invalid or unsyntactic element.\n    */\n    invalid: t(),\n    /**\n    Metadata or meta-instruction.\n    */\n    meta,\n    /**\n    [Metadata](#highlight.tags.meta) that applies to the entire\n    document.\n    */\n    documentMeta: t(meta),\n    /**\n    [Metadata](#highlight.tags.meta) that annotates or adds\n    attributes to a given syntactic element.\n    */\n    annotation: t(meta),\n    /**\n    Processing instruction or preprocessor directive. Subtag of\n    [meta](#highlight.tags.meta).\n    */\n    processingInstruction: t(meta),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates that a\n    given element is being defined. Expected to be used with the\n    various [name](#highlight.tags.name) tags.\n    */\n    definition: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates that\n    something is constant. Mostly expected to be used with\n    [variable names](#highlight.tags.variableName).\n    */\n    constant: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) used to indicate that\n    a [variable](#highlight.tags.variableName) or [property\n    name](#highlight.tags.propertyName) is being called or defined\n    as a function.\n    */\n    function: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that can be applied to\n    [names](#highlight.tags.name) to indicate that they belong to\n    the language's standard environment.\n    */\n    standard: Tag.defineModifier(),\n    /**\n    [Modifier](#highlight.Tag^defineModifier) that indicates a given\n    [names](#highlight.tags.name) is local to some scope.\n    */\n    local: Tag.defineModifier(),\n    /**\n    A generic variant [modifier](#highlight.Tag^defineModifier) that\n    can be used to tag language-specific alternative variants of\n    some common tag. It is recommended for themes to define special\n    forms of at least the [string](#highlight.tags.string) and\n    [variable name](#highlight.tags.variableName) tags, since those\n    come up a lot.\n    */\n    special: Tag.defineModifier()\n};\n/**\nThis is a highlighter that adds stable, predictable classes to\ntokens, for styling with external CSS.\n\nThe following tags are mapped to their name prefixed with `\"tok-\"`\n(for example `\"tok-comment\"`):\n\n* [`link`](#highlight.tags.link)\n* [`heading`](#highlight.tags.heading)\n* [`emphasis`](#highlight.tags.emphasis)\n* [`strong`](#highlight.tags.strong)\n* [`keyword`](#highlight.tags.keyword)\n* [`atom`](#highlight.tags.atom)\n* [`bool`](#highlight.tags.bool)\n* [`url`](#highlight.tags.url)\n* [`labelName`](#highlight.tags.labelName)\n* [`inserted`](#highlight.tags.inserted)\n* [`deleted`](#highlight.tags.deleted)\n* [`literal`](#highlight.tags.literal)\n* [`string`](#highlight.tags.string)\n* [`number`](#highlight.tags.number)\n* [`variableName`](#highlight.tags.variableName)\n* [`typeName`](#highlight.tags.typeName)\n* [`namespace`](#highlight.tags.namespace)\n* [`className`](#highlight.tags.className)\n* [`macroName`](#highlight.tags.macroName)\n* [`propertyName`](#highlight.tags.propertyName)\n* [`operator`](#highlight.tags.operator)\n* [`comment`](#highlight.tags.comment)\n* [`meta`](#highlight.tags.meta)\n* [`punctuation`](#highlight.tags.punctuation)\n* [`invalid`](#highlight.tags.invalid)\n\nIn addition, these mappings are provided:\n\n* [`regexp`](#highlight.tags.regexp),\n  [`escape`](#highlight.tags.escape), and\n  [`special`](#highlight.tags.special)[`(string)`](#highlight.tags.string)\n  are mapped to `\"tok-string2\"`\n* [`special`](#highlight.tags.special)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName2\"`\n* [`local`](#highlight.tags.local)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName tok-local\"`\n* [`definition`](#highlight.tags.definition)[`(variableName)`](#highlight.tags.variableName)\n  to `\"tok-variableName tok-definition\"`\n* [`definition`](#highlight.tags.definition)[`(propertyName)`](#highlight.tags.propertyName)\n  to `\"tok-propertyName tok-definition\"`\n*/\nconst classHighlighter = tagHighlighter([\n    { tag: tags.link, class: \"tok-link\" },\n    { tag: tags.heading, class: \"tok-heading\" },\n    { tag: tags.emphasis, class: \"tok-emphasis\" },\n    { tag: tags.strong, class: \"tok-strong\" },\n    { tag: tags.keyword, class: \"tok-keyword\" },\n    { tag: tags.atom, class: \"tok-atom\" },\n    { tag: tags.bool, class: \"tok-bool\" },\n    { tag: tags.url, class: \"tok-url\" },\n    { tag: tags.labelName, class: \"tok-labelName\" },\n    { tag: tags.inserted, class: \"tok-inserted\" },\n    { tag: tags.deleted, class: \"tok-deleted\" },\n    { tag: tags.literal, class: \"tok-literal\" },\n    { tag: tags.string, class: \"tok-string\" },\n    { tag: tags.number, class: \"tok-number\" },\n    { tag: [tags.regexp, tags.escape, tags.special(tags.string)], class: \"tok-string2\" },\n    { tag: tags.variableName, class: \"tok-variableName\" },\n    { tag: tags.local(tags.variableName), class: \"tok-variableName tok-local\" },\n    { tag: tags.definition(tags.variableName), class: \"tok-variableName tok-definition\" },\n    { tag: tags.special(tags.variableName), class: \"tok-variableName2\" },\n    { tag: tags.definition(tags.propertyName), class: \"tok-propertyName tok-definition\" },\n    { tag: tags.typeName, class: \"tok-typeName\" },\n    { tag: tags.namespace, class: \"tok-namespace\" },\n    { tag: tags.className, class: \"tok-className\" },\n    { tag: tags.macroName, class: \"tok-macroName\" },\n    { tag: tags.propertyName, class: \"tok-propertyName\" },\n    { tag: tags.operator, class: \"tok-operator\" },\n    { tag: tags.comment, class: \"tok-comment\" },\n    { tag: tags.meta, class: \"tok-meta\" },\n    { tag: tags.invalid, class: \"tok-invalid\" },\n    { tag: tags.punctuation, class: \"tok-punctuation\" }\n]);\n\nexports.Tag = Tag;\nexports.classHighlighter = classHighlighter;\nexports.getStyleTags = getStyleTags;\nexports.highlightTree = highlightTree;\nexports.styleTags = styleTags;\nexports.tagHighlighter = tagHighlighter;\nexports.tags = tags;\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar common = require('@lezer/common');\n\n/// A parse stack. These are used internally by the parser to track\n/// parsing progress. They also provide some properties and methods\n/// that external code such as a tokenizer can use to get information\n/// about the parse state.\nclass Stack {\n    /// @internal\n    constructor(\n    /// The parse that this stack is part of @internal\n    p, \n    /// Holds state, input pos, buffer index triplets for all but the\n    /// top state @internal\n    stack, \n    /// The current parse state @internal\n    state, \n    // The position at which the next reduce should take place. This\n    // can be less than `this.pos` when skipped expressions have been\n    // added to the stack (which should be moved outside of the next\n    // reduction)\n    /// @internal\n    reducePos, \n    /// The input position up to which this stack has parsed.\n    pos, \n    /// The dynamic score of the stack, including dynamic precedence\n    /// and error-recovery penalties\n    /// @internal\n    score, \n    // The output buffer. Holds (type, start, end, size) quads\n    // representing nodes created by the parser, where `size` is\n    // amount of buffer array entries covered by this node.\n    /// @internal\n    buffer, \n    // The base offset of the buffer. When stacks are split, the split\n    // instance shared the buffer history with its parent up to\n    // `bufferBase`, which is the absolute offset (including the\n    // offset of previous splits) into the buffer at which this stack\n    // starts writing.\n    /// @internal\n    bufferBase, \n    /// @internal\n    curContext, \n    /// @internal\n    lookAhead = 0, \n    // A parent stack from which this was split off, if any. This is\n    // set up so that it always points to a stack that has some\n    // additional buffer content, never to a stack with an equal\n    // `bufferBase`.\n    /// @internal\n    parent) {\n        this.p = p;\n        this.stack = stack;\n        this.state = state;\n        this.reducePos = reducePos;\n        this.pos = pos;\n        this.score = score;\n        this.buffer = buffer;\n        this.bufferBase = bufferBase;\n        this.curContext = curContext;\n        this.lookAhead = lookAhead;\n        this.parent = parent;\n    }\n    /// @internal\n    toString() {\n        return `[${this.stack.filter((_, i) => i % 3 == 0).concat(this.state)}]@${this.pos}${this.score ? \"!\" + this.score : \"\"}`;\n    }\n    // Start an empty stack\n    /// @internal\n    static start(p, state, pos = 0) {\n        let cx = p.parser.context;\n        return new Stack(p, [], state, pos, pos, 0, [], 0, cx ? new StackContext(cx, cx.start) : null, 0, null);\n    }\n    /// The stack's current [context](#lr.ContextTracker) value, if\n    /// any. Its type will depend on the context tracker's type\n    /// parameter, or it will be `null` if there is no context\n    /// tracker.\n    get context() { return this.curContext ? this.curContext.context : null; }\n    // Push a state onto the stack, tracking its start position as well\n    // as the buffer base at that point.\n    /// @internal\n    pushState(state, start) {\n        this.stack.push(this.state, start, this.bufferBase + this.buffer.length);\n        this.state = state;\n    }\n    // Apply a reduce action\n    /// @internal\n    reduce(action) {\n        var _a;\n        let depth = action >> 19 /* Action.ReduceDepthShift */, type = action & 65535 /* Action.ValueMask */;\n        let { parser } = this.p;\n        let dPrec = parser.dynamicPrecedence(type);\n        if (dPrec)\n            this.score += dPrec;\n        if (depth == 0) {\n            this.pushState(parser.getGoto(this.state, type, true), this.reducePos);\n            // Zero-depth reductions are a special case—they add stuff to\n            // the stack without popping anything off.\n            if (type < parser.minRepeatTerm)\n                this.storeNode(type, this.reducePos, this.reducePos, 4, true);\n            this.reduceContext(type, this.reducePos);\n            return;\n        }\n        // Find the base index into `this.stack`, content after which will\n        // be dropped. Note that with `StayFlag` reductions we need to\n        // consume two extra frames (the dummy parent node for the skipped\n        // expression and the state that we'll be staying in, which should\n        // be moved to `this.state`).\n        let base = this.stack.length - ((depth - 1) * 3) - (action & 262144 /* Action.StayFlag */ ? 6 : 0);\n        let start = base ? this.stack[base - 2] : this.p.ranges[0].from, size = this.reducePos - start;\n        // This is a kludge to try and detect overly deep left-associative\n        // trees, which will not increase the parse stack depth and thus\n        // won't be caught by the regular stack-depth limit check.\n        if (size >= 2000 /* Recover.MinBigReduction */ && !((_a = this.p.parser.nodeSet.types[type]) === null || _a === void 0 ? void 0 : _a.isAnonymous)) {\n            if (start == this.p.lastBigReductionStart) {\n                this.p.bigReductionCount++;\n                this.p.lastBigReductionSize = size;\n            }\n            else if (this.p.lastBigReductionSize < size) {\n                this.p.bigReductionCount = 1;\n                this.p.lastBigReductionStart = start;\n                this.p.lastBigReductionSize = size;\n            }\n        }\n        let bufferBase = base ? this.stack[base - 1] : 0, count = this.bufferBase + this.buffer.length - bufferBase;\n        // Store normal terms or `R -> R R` repeat reductions\n        if (type < parser.minRepeatTerm || (action & 131072 /* Action.RepeatFlag */)) {\n            let pos = parser.stateFlag(this.state, 1 /* StateFlag.Skipped */) ? this.pos : this.reducePos;\n            this.storeNode(type, start, pos, count + 4, true);\n        }\n        if (action & 262144 /* Action.StayFlag */) {\n            this.state = this.stack[base];\n        }\n        else {\n            let baseStateID = this.stack[base - 3];\n            this.state = parser.getGoto(baseStateID, type, true);\n        }\n        while (this.stack.length > base)\n            this.stack.pop();\n        this.reduceContext(type, start);\n    }\n    // Shift a value into the buffer\n    /// @internal\n    storeNode(term, start, end, size = 4, isReduce = false) {\n        if (term == 0 /* Term.Err */ &&\n            (!this.stack.length || this.stack[this.stack.length - 1] < this.buffer.length + this.bufferBase)) {\n            // Try to omit/merge adjacent error nodes\n            let cur = this, top = this.buffer.length;\n            if (top == 0 && cur.parent) {\n                top = cur.bufferBase - cur.parent.bufferBase;\n                cur = cur.parent;\n            }\n            if (top > 0 && cur.buffer[top - 4] == 0 /* Term.Err */ && cur.buffer[top - 1] > -1) {\n                if (start == end)\n                    return;\n                if (cur.buffer[top - 2] >= start) {\n                    cur.buffer[top - 2] = end;\n                    return;\n                }\n            }\n        }\n        if (!isReduce || this.pos == end) { // Simple case, just append\n            this.buffer.push(term, start, end, size);\n        }\n        else { // There may be skipped nodes that have to be moved forward\n            let index = this.buffer.length;\n            if (index > 0 && this.buffer[index - 4] != 0 /* Term.Err */)\n                while (index > 0 && this.buffer[index - 2] > end) {\n                    // Move this record forward\n                    this.buffer[index] = this.buffer[index - 4];\n                    this.buffer[index + 1] = this.buffer[index - 3];\n                    this.buffer[index + 2] = this.buffer[index - 2];\n                    this.buffer[index + 3] = this.buffer[index - 1];\n                    index -= 4;\n                    if (size > 4)\n                        size -= 4;\n                }\n            this.buffer[index] = term;\n            this.buffer[index + 1] = start;\n            this.buffer[index + 2] = end;\n            this.buffer[index + 3] = size;\n        }\n    }\n    // Apply a shift action\n    /// @internal\n    shift(action, next, nextEnd) {\n        let start = this.pos;\n        if (action & 131072 /* Action.GotoFlag */) {\n            this.pushState(action & 65535 /* Action.ValueMask */, this.pos);\n        }\n        else if ((action & 262144 /* Action.StayFlag */) == 0) { // Regular shift\n            let nextState = action, { parser } = this.p;\n            if (nextEnd > this.pos || next <= parser.maxNode) {\n                this.pos = nextEnd;\n                if (!parser.stateFlag(nextState, 1 /* StateFlag.Skipped */))\n                    this.reducePos = nextEnd;\n            }\n            this.pushState(nextState, start);\n            this.shiftContext(next, start);\n            if (next <= parser.maxNode)\n                this.buffer.push(next, start, nextEnd, 4);\n        }\n        else { // Shift-and-stay, which means this is a skipped token\n            this.pos = nextEnd;\n            this.shiftContext(next, start);\n            if (next <= this.p.parser.maxNode)\n                this.buffer.push(next, start, nextEnd, 4);\n        }\n    }\n    // Apply an action\n    /// @internal\n    apply(action, next, nextEnd) {\n        if (action & 65536 /* Action.ReduceFlag */)\n            this.reduce(action);\n        else\n            this.shift(action, next, nextEnd);\n    }\n    // Add a prebuilt (reused) node into the buffer.\n    /// @internal\n    useNode(value, next) {\n        let index = this.p.reused.length - 1;\n        if (index < 0 || this.p.reused[index] != value) {\n            this.p.reused.push(value);\n            index++;\n        }\n        let start = this.pos;\n        this.reducePos = this.pos = start + value.length;\n        this.pushState(next, start);\n        this.buffer.push(index, start, this.reducePos, -1 /* size == -1 means this is a reused value */);\n        if (this.curContext)\n            this.updateContext(this.curContext.tracker.reuse(this.curContext.context, value, this, this.p.stream.reset(this.pos - value.length)));\n    }\n    // Split the stack. Due to the buffer sharing and the fact\n    // that `this.stack` tends to stay quite shallow, this isn't very\n    // expensive.\n    /// @internal\n    split() {\n        let parent = this;\n        let off = parent.buffer.length;\n        // Because the top of the buffer (after this.pos) may be mutated\n        // to reorder reductions and skipped tokens, and shared buffers\n        // should be immutable, this copies any outstanding skipped tokens\n        // to the new buffer, and puts the base pointer before them.\n        while (off > 0 && parent.buffer[off - 2] > parent.reducePos)\n            off -= 4;\n        let buffer = parent.buffer.slice(off), base = parent.bufferBase + off;\n        // Make sure parent points to an actual parent with content, if there is such a parent.\n        while (parent && base == parent.bufferBase)\n            parent = parent.parent;\n        return new Stack(this.p, this.stack.slice(), this.state, this.reducePos, this.pos, this.score, buffer, base, this.curContext, this.lookAhead, parent);\n    }\n    // Try to recover from an error by 'deleting' (ignoring) one token.\n    /// @internal\n    recoverByDelete(next, nextEnd) {\n        let isNode = next <= this.p.parser.maxNode;\n        if (isNode)\n            this.storeNode(next, this.pos, nextEnd, 4);\n        this.storeNode(0 /* Term.Err */, this.pos, nextEnd, isNode ? 8 : 4);\n        this.pos = this.reducePos = nextEnd;\n        this.score -= 190 /* Recover.Delete */;\n    }\n    /// Check if the given term would be able to be shifted (optionally\n    /// after some reductions) on this stack. This can be useful for\n    /// external tokenizers that want to make sure they only provide a\n    /// given token when it applies.\n    canShift(term) {\n        for (let sim = new SimulatedStack(this);;) {\n            let action = this.p.parser.stateSlot(sim.state, 4 /* ParseState.DefaultReduce */) || this.p.parser.hasAction(sim.state, term);\n            if (action == 0)\n                return false;\n            if ((action & 65536 /* Action.ReduceFlag */) == 0)\n                return true;\n            sim.reduce(action);\n        }\n    }\n    // Apply up to Recover.MaxNext recovery actions that conceptually\n    // inserts some missing token or rule.\n    /// @internal\n    recoverByInsert(next) {\n        if (this.stack.length >= 300 /* Recover.MaxInsertStackDepth */)\n            return [];\n        let nextStates = this.p.parser.nextStates(this.state);\n        if (nextStates.length > 4 /* Recover.MaxNext */ << 1 || this.stack.length >= 120 /* Recover.DampenInsertStackDepth */) {\n            let best = [];\n            for (let i = 0, s; i < nextStates.length; i += 2) {\n                if ((s = nextStates[i + 1]) != this.state && this.p.parser.hasAction(s, next))\n                    best.push(nextStates[i], s);\n            }\n            if (this.stack.length < 120 /* Recover.DampenInsertStackDepth */)\n                for (let i = 0; best.length < 4 /* Recover.MaxNext */ << 1 && i < nextStates.length; i += 2) {\n                    let s = nextStates[i + 1];\n                    if (!best.some((v, i) => (i & 1) && v == s))\n                        best.push(nextStates[i], s);\n                }\n            nextStates = best;\n        }\n        let result = [];\n        for (let i = 0; i < nextStates.length && result.length < 4 /* Recover.MaxNext */; i += 2) {\n            let s = nextStates[i + 1];\n            if (s == this.state)\n                continue;\n            let stack = this.split();\n            stack.pushState(s, this.pos);\n            stack.storeNode(0 /* Term.Err */, stack.pos, stack.pos, 4, true);\n            stack.shiftContext(nextStates[i], this.pos);\n            stack.score -= 200 /* Recover.Insert */;\n            result.push(stack);\n        }\n        return result;\n    }\n    // Force a reduce, if possible. Return false if that can't\n    // be done.\n    /// @internal\n    forceReduce() {\n        let { parser } = this.p;\n        let reduce = parser.stateSlot(this.state, 5 /* ParseState.ForcedReduce */);\n        if ((reduce & 65536 /* Action.ReduceFlag */) == 0)\n            return false;\n        if (!parser.validAction(this.state, reduce)) {\n            let depth = reduce >> 19 /* Action.ReduceDepthShift */, term = reduce & 65535 /* Action.ValueMask */;\n            let target = this.stack.length - depth * 3;\n            if (target < 0 || parser.getGoto(this.stack[target], term, false) < 0) {\n                let backup = this.findForcedReduction();\n                if (backup == null)\n                    return false;\n                reduce = backup;\n            }\n            this.storeNode(0 /* Term.Err */, this.reducePos, this.reducePos, 4, true);\n            this.score -= 100 /* Recover.Reduce */;\n        }\n        this.reducePos = this.pos;\n        this.reduce(reduce);\n        return true;\n    }\n    /// Try to scan through the automaton to find some kind of reduction\n    /// that can be applied. Used when the regular ForcedReduce field\n    /// isn't a valid action. @internal\n    findForcedReduction() {\n        let { parser } = this.p, seen = [];\n        let explore = (state, depth) => {\n            if (seen.includes(state))\n                return;\n            seen.push(state);\n            return parser.allActions(state, (action) => {\n                if (action & (262144 /* Action.StayFlag */ | 131072 /* Action.GotoFlag */)) ;\n                else if (action & 65536 /* Action.ReduceFlag */) {\n                    let rDepth = (action >> 19 /* Action.ReduceDepthShift */) - depth;\n                    if (rDepth > 1) {\n                        let term = action & 65535 /* Action.ValueMask */, target = this.stack.length - rDepth * 3;\n                        if (target >= 0 && parser.getGoto(this.stack[target], term, false) >= 0)\n                            return (rDepth << 19 /* Action.ReduceDepthShift */) | 65536 /* Action.ReduceFlag */ | term;\n                    }\n                }\n                else {\n                    let found = explore(action, depth + 1);\n                    if (found != null)\n                        return found;\n                }\n            });\n        };\n        return explore(this.state, 0);\n    }\n    /// @internal\n    forceAll() {\n        while (!this.p.parser.stateFlag(this.state, 2 /* StateFlag.Accepting */)) {\n            if (!this.forceReduce()) {\n                this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n                break;\n            }\n        }\n        return this;\n    }\n    /// Check whether this state has no further actions (assumed to be a direct descendant of the\n    /// top state, since any other states must be able to continue\n    /// somehow). @internal\n    get deadEnd() {\n        if (this.stack.length != 3)\n            return false;\n        let { parser } = this.p;\n        return parser.data[parser.stateSlot(this.state, 1 /* ParseState.Actions */)] == 65535 /* Seq.End */ &&\n            !parser.stateSlot(this.state, 4 /* ParseState.DefaultReduce */);\n    }\n    /// Restart the stack (put it back in its start state). Only safe\n    /// when this.stack.length == 3 (state is directly below the top\n    /// state). @internal\n    restart() {\n        this.state = this.stack[0];\n        this.stack.length = 0;\n    }\n    /// @internal\n    sameState(other) {\n        if (this.state != other.state || this.stack.length != other.stack.length)\n            return false;\n        for (let i = 0; i < this.stack.length; i += 3)\n            if (this.stack[i] != other.stack[i])\n                return false;\n        return true;\n    }\n    /// Get the parser used by this stack.\n    get parser() { return this.p.parser; }\n    /// Test whether a given dialect (by numeric ID, as exported from\n    /// the terms file) is enabled.\n    dialectEnabled(dialectID) { return this.p.parser.dialect.flags[dialectID]; }\n    shiftContext(term, start) {\n        if (this.curContext)\n            this.updateContext(this.curContext.tracker.shift(this.curContext.context, term, this, this.p.stream.reset(start)));\n    }\n    reduceContext(term, start) {\n        if (this.curContext)\n            this.updateContext(this.curContext.tracker.reduce(this.curContext.context, term, this, this.p.stream.reset(start)));\n    }\n    /// @internal\n    emitContext() {\n        let last = this.buffer.length - 1;\n        if (last < 0 || this.buffer[last] != -3)\n            this.buffer.push(this.curContext.hash, this.pos, this.pos, -3);\n    }\n    /// @internal\n    emitLookAhead() {\n        let last = this.buffer.length - 1;\n        if (last < 0 || this.buffer[last] != -4)\n            this.buffer.push(this.lookAhead, this.pos, this.pos, -4);\n    }\n    updateContext(context) {\n        if (context != this.curContext.context) {\n            let newCx = new StackContext(this.curContext.tracker, context);\n            if (newCx.hash != this.curContext.hash)\n                this.emitContext();\n            this.curContext = newCx;\n        }\n    }\n    /// @internal\n    setLookAhead(lookAhead) {\n        if (lookAhead > this.lookAhead) {\n            this.emitLookAhead();\n            this.lookAhead = lookAhead;\n        }\n    }\n    /// @internal\n    close() {\n        if (this.curContext && this.curContext.tracker.strict)\n            this.emitContext();\n        if (this.lookAhead > 0)\n            this.emitLookAhead();\n    }\n}\nclass StackContext {\n    constructor(tracker, context) {\n        this.tracker = tracker;\n        this.context = context;\n        this.hash = tracker.strict ? tracker.hash(context) : 0;\n    }\n}\nvar Recover;\n(function (Recover) {\n    Recover[Recover[\"Insert\"] = 200] = \"Insert\";\n    Recover[Recover[\"Delete\"] = 190] = \"Delete\";\n    Recover[Recover[\"Reduce\"] = 100] = \"Reduce\";\n    Recover[Recover[\"MaxNext\"] = 4] = \"MaxNext\";\n    Recover[Recover[\"MaxInsertStackDepth\"] = 300] = \"MaxInsertStackDepth\";\n    Recover[Recover[\"DampenInsertStackDepth\"] = 120] = \"DampenInsertStackDepth\";\n    Recover[Recover[\"MinBigReduction\"] = 2000] = \"MinBigReduction\";\n})(Recover || (Recover = {}));\n// Used to cheaply run some reductions to scan ahead without mutating\n// an entire stack\nclass SimulatedStack {\n    constructor(start) {\n        this.start = start;\n        this.state = start.state;\n        this.stack = start.stack;\n        this.base = this.stack.length;\n    }\n    reduce(action) {\n        let term = action & 65535 /* Action.ValueMask */, depth = action >> 19 /* Action.ReduceDepthShift */;\n        if (depth == 0) {\n            if (this.stack == this.start.stack)\n                this.stack = this.stack.slice();\n            this.stack.push(this.state, 0, 0);\n            this.base += 3;\n        }\n        else {\n            this.base -= (depth - 1) * 3;\n        }\n        let goto = this.start.p.parser.getGoto(this.stack[this.base - 3], term, true);\n        this.state = goto;\n    }\n}\n// This is given to `Tree.build` to build a buffer, and encapsulates\n// the parent-stack-walking necessary to read the nodes.\nclass StackBufferCursor {\n    constructor(stack, pos, index) {\n        this.stack = stack;\n        this.pos = pos;\n        this.index = index;\n        this.buffer = stack.buffer;\n        if (this.index == 0)\n            this.maybeNext();\n    }\n    static create(stack, pos = stack.bufferBase + stack.buffer.length) {\n        return new StackBufferCursor(stack, pos, pos - stack.bufferBase);\n    }\n    maybeNext() {\n        let next = this.stack.parent;\n        if (next != null) {\n            this.index = this.stack.bufferBase - next.bufferBase;\n            this.stack = next;\n            this.buffer = next.buffer;\n        }\n    }\n    get id() { return this.buffer[this.index - 4]; }\n    get start() { return this.buffer[this.index - 3]; }\n    get end() { return this.buffer[this.index - 2]; }\n    get size() { return this.buffer[this.index - 1]; }\n    next() {\n        this.index -= 4;\n        this.pos -= 4;\n        if (this.index == 0)\n            this.maybeNext();\n    }\n    fork() {\n        return new StackBufferCursor(this.stack, this.pos, this.index);\n    }\n}\n\n// See lezer-generator/src/encode.ts for comments about the encoding\n// used here\nfunction decodeArray(input, Type = Uint16Array) {\n    if (typeof input != \"string\")\n        return input;\n    let array = null;\n    for (let pos = 0, out = 0; pos < input.length;) {\n        let value = 0;\n        for (;;) {\n            let next = input.charCodeAt(pos++), stop = false;\n            if (next == 126 /* Encode.BigValCode */) {\n                value = 65535 /* Encode.BigVal */;\n                break;\n            }\n            if (next >= 92 /* Encode.Gap2 */)\n                next--;\n            if (next >= 34 /* Encode.Gap1 */)\n                next--;\n            let digit = next - 32 /* Encode.Start */;\n            if (digit >= 46 /* Encode.Base */) {\n                digit -= 46 /* Encode.Base */;\n                stop = true;\n            }\n            value += digit;\n            if (stop)\n                break;\n            value *= 46 /* Encode.Base */;\n        }\n        if (array)\n            array[out++] = value;\n        else\n            array = new Type(value);\n    }\n    return array;\n}\n\nclass CachedToken {\n    constructor() {\n        this.start = -1;\n        this.value = -1;\n        this.end = -1;\n        this.extended = -1;\n        this.lookAhead = 0;\n        this.mask = 0;\n        this.context = 0;\n    }\n}\nconst nullToken = new CachedToken;\n/// [Tokenizers](#lr.ExternalTokenizer) interact with the input\n/// through this interface. It presents the input as a stream of\n/// characters, tracking lookahead and hiding the complexity of\n/// [ranges](#common.Parser.parse^ranges) from tokenizer code.\nclass InputStream {\n    /// @internal\n    constructor(\n    /// @internal\n    input, \n    /// @internal\n    ranges) {\n        this.input = input;\n        this.ranges = ranges;\n        /// @internal\n        this.chunk = \"\";\n        /// @internal\n        this.chunkOff = 0;\n        /// Backup chunk\n        this.chunk2 = \"\";\n        this.chunk2Pos = 0;\n        /// The character code of the next code unit in the input, or -1\n        /// when the stream is at the end of the input.\n        this.next = -1;\n        /// @internal\n        this.token = nullToken;\n        this.rangeIndex = 0;\n        this.pos = this.chunkPos = ranges[0].from;\n        this.range = ranges[0];\n        this.end = ranges[ranges.length - 1].to;\n        this.readNext();\n    }\n    /// @internal\n    resolveOffset(offset, assoc) {\n        let range = this.range, index = this.rangeIndex;\n        let pos = this.pos + offset;\n        while (pos < range.from) {\n            if (!index)\n                return null;\n            let next = this.ranges[--index];\n            pos -= range.from - next.to;\n            range = next;\n        }\n        while (assoc < 0 ? pos > range.to : pos >= range.to) {\n            if (index == this.ranges.length - 1)\n                return null;\n            let next = this.ranges[++index];\n            pos += next.from - range.to;\n            range = next;\n        }\n        return pos;\n    }\n    /// @internal\n    clipPos(pos) {\n        if (pos >= this.range.from && pos < this.range.to)\n            return pos;\n        for (let range of this.ranges)\n            if (range.to > pos)\n                return Math.max(pos, range.from);\n        return this.end;\n    }\n    /// Look at a code unit near the stream position. `.peek(0)` equals\n    /// `.next`, `.peek(-1)` gives you the previous character, and so\n    /// on.\n    ///\n    /// Note that looking around during tokenizing creates dependencies\n    /// on potentially far-away content, which may reduce the\n    /// effectiveness incremental parsing—when looking forward—or even\n    /// cause invalid reparses when looking backward more than 25 code\n    /// units, since the library does not track lookbehind.\n    peek(offset) {\n        let idx = this.chunkOff + offset, pos, result;\n        if (idx >= 0 && idx < this.chunk.length) {\n            pos = this.pos + offset;\n            result = this.chunk.charCodeAt(idx);\n        }\n        else {\n            let resolved = this.resolveOffset(offset, 1);\n            if (resolved == null)\n                return -1;\n            pos = resolved;\n            if (pos >= this.chunk2Pos && pos < this.chunk2Pos + this.chunk2.length) {\n                result = this.chunk2.charCodeAt(pos - this.chunk2Pos);\n            }\n            else {\n                let i = this.rangeIndex, range = this.range;\n                while (range.to <= pos)\n                    range = this.ranges[++i];\n                this.chunk2 = this.input.chunk(this.chunk2Pos = pos);\n                if (pos + this.chunk2.length > range.to)\n                    this.chunk2 = this.chunk2.slice(0, range.to - pos);\n                result = this.chunk2.charCodeAt(0);\n            }\n        }\n        if (pos >= this.token.lookAhead)\n            this.token.lookAhead = pos + 1;\n        return result;\n    }\n    /// Accept a token. By default, the end of the token is set to the\n    /// current stream position, but you can pass an offset (relative to\n    /// the stream position) to change that.\n    acceptToken(token, endOffset = 0) {\n        let end = endOffset ? this.resolveOffset(endOffset, -1) : this.pos;\n        if (end == null || end < this.token.start)\n            throw new RangeError(\"Token end out of bounds\");\n        this.token.value = token;\n        this.token.end = end;\n    }\n    getChunk() {\n        if (this.pos >= this.chunk2Pos && this.pos < this.chunk2Pos + this.chunk2.length) {\n            let { chunk, chunkPos } = this;\n            this.chunk = this.chunk2;\n            this.chunkPos = this.chunk2Pos;\n            this.chunk2 = chunk;\n            this.chunk2Pos = chunkPos;\n            this.chunkOff = this.pos - this.chunkPos;\n        }\n        else {\n            this.chunk2 = this.chunk;\n            this.chunk2Pos = this.chunkPos;\n            let nextChunk = this.input.chunk(this.pos);\n            let end = this.pos + nextChunk.length;\n            this.chunk = end > this.range.to ? nextChunk.slice(0, this.range.to - this.pos) : nextChunk;\n            this.chunkPos = this.pos;\n            this.chunkOff = 0;\n        }\n    }\n    readNext() {\n        if (this.chunkOff >= this.chunk.length) {\n            this.getChunk();\n            if (this.chunkOff == this.chunk.length)\n                return this.next = -1;\n        }\n        return this.next = this.chunk.charCodeAt(this.chunkOff);\n    }\n    /// Move the stream forward N (defaults to 1) code units. Returns\n    /// the new value of [`next`](#lr.InputStream.next).\n    advance(n = 1) {\n        this.chunkOff += n;\n        while (this.pos + n >= this.range.to) {\n            if (this.rangeIndex == this.ranges.length - 1)\n                return this.setDone();\n            n -= this.range.to - this.pos;\n            this.range = this.ranges[++this.rangeIndex];\n            this.pos = this.range.from;\n        }\n        this.pos += n;\n        if (this.pos >= this.token.lookAhead)\n            this.token.lookAhead = this.pos + 1;\n        return this.readNext();\n    }\n    setDone() {\n        this.pos = this.chunkPos = this.end;\n        this.range = this.ranges[this.rangeIndex = this.ranges.length - 1];\n        this.chunk = \"\";\n        return this.next = -1;\n    }\n    /// @internal\n    reset(pos, token) {\n        if (token) {\n            this.token = token;\n            token.start = pos;\n            token.lookAhead = pos + 1;\n            token.value = token.extended = -1;\n        }\n        else {\n            this.token = nullToken;\n        }\n        if (this.pos != pos) {\n            this.pos = pos;\n            if (pos == this.end) {\n                this.setDone();\n                return this;\n            }\n            while (pos < this.range.from)\n                this.range = this.ranges[--this.rangeIndex];\n            while (pos >= this.range.to)\n                this.range = this.ranges[++this.rangeIndex];\n            if (pos >= this.chunkPos && pos < this.chunkPos + this.chunk.length) {\n                this.chunkOff = pos - this.chunkPos;\n            }\n            else {\n                this.chunk = \"\";\n                this.chunkOff = 0;\n            }\n            this.readNext();\n        }\n        return this;\n    }\n    /// @internal\n    read(from, to) {\n        if (from >= this.chunkPos && to <= this.chunkPos + this.chunk.length)\n            return this.chunk.slice(from - this.chunkPos, to - this.chunkPos);\n        if (from >= this.chunk2Pos && to <= this.chunk2Pos + this.chunk2.length)\n            return this.chunk2.slice(from - this.chunk2Pos, to - this.chunk2Pos);\n        if (from >= this.range.from && to <= this.range.to)\n            return this.input.read(from, to);\n        let result = \"\";\n        for (let r of this.ranges) {\n            if (r.from >= to)\n                break;\n            if (r.to > from)\n                result += this.input.read(Math.max(r.from, from), Math.min(r.to, to));\n        }\n        return result;\n    }\n}\n/// @internal\nclass TokenGroup {\n    constructor(data, id) {\n        this.data = data;\n        this.id = id;\n    }\n    token(input, stack) {\n        let { parser } = stack.p;\n        readToken(this.data, input, stack, this.id, parser.data, parser.tokenPrecTable);\n    }\n}\nTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/// @hide\nclass LocalTokenGroup {\n    constructor(data, precTable, elseToken) {\n        this.precTable = precTable;\n        this.elseToken = elseToken;\n        this.data = typeof data == \"string\" ? decodeArray(data) : data;\n    }\n    token(input, stack) {\n        let start = input.pos, skipped = 0;\n        for (;;) {\n            let nextPos = input.resolveOffset(1, -1);\n            readToken(this.data, input, stack, 0, this.data, this.precTable);\n            if (input.token.value > -1)\n                break;\n            if (this.elseToken == null)\n                return;\n            if (nextPos == null)\n                break;\n            input.reset(nextPos, input.token);\n            skipped++;\n        }\n        if (skipped) {\n            input.reset(start, input.token);\n            input.acceptToken(this.elseToken, skipped);\n        }\n    }\n}\nLocalTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/// `@external tokens` declarations in the grammar should resolve to\n/// an instance of this class.\nclass ExternalTokenizer {\n    /// Create a tokenizer. The first argument is the function that,\n    /// given an input stream, scans for the types of tokens it\n    /// recognizes at the stream's position, and calls\n    /// [`acceptToken`](#lr.InputStream.acceptToken) when it finds\n    /// one.\n    constructor(\n    /// @internal\n    token, options = {}) {\n        this.token = token;\n        this.contextual = !!options.contextual;\n        this.fallback = !!options.fallback;\n        this.extend = !!options.extend;\n    }\n}\n// Tokenizer data is stored a big uint16 array containing, for each\n// state:\n//\n//  - A group bitmask, indicating what token groups are reachable from\n//    this state, so that paths that can only lead to tokens not in\n//    any of the current groups can be cut off early.\n//\n//  - The position of the end of the state's sequence of accepting\n//    tokens\n//\n//  - The number of outgoing edges for the state\n//\n//  - The accepting tokens, as (token id, group mask) pairs\n//\n//  - The outgoing edges, as (start character, end character, state\n//    index) triples, with end character being exclusive\n//\n// This function interprets that data, running through a stream as\n// long as new states with the a matching group mask can be reached,\n// and updating `input.token` when it matches a token.\nfunction readToken(data, input, stack, group, precTable, precOffset) {\n    let state = 0, groupMask = 1 << group, { dialect } = stack.p.parser;\n    scan: for (;;) {\n        if ((groupMask & data[state]) == 0)\n            break;\n        let accEnd = data[state + 1];\n        // Check whether this state can lead to a token in the current group\n        // Accept tokens in this state, possibly overwriting\n        // lower-precedence / shorter tokens\n        for (let i = state + 3; i < accEnd; i += 2)\n            if ((data[i + 1] & groupMask) > 0) {\n                let term = data[i];\n                if (dialect.allows(term) &&\n                    (input.token.value == -1 || input.token.value == term ||\n                        overrides(term, input.token.value, precTable, precOffset))) {\n                    input.acceptToken(term);\n                    break;\n                }\n            }\n        let next = input.next, low = 0, high = data[state + 2];\n        // Special case for EOF\n        if (input.next < 0 && high > low && data[accEnd + high * 3 - 3] == 65535 /* Seq.End */ && data[accEnd + high * 3 - 3] == 65535 /* Seq.End */) {\n            state = data[accEnd + high * 3 - 1];\n            continue scan;\n        }\n        // Do a binary search on the state's edges\n        for (; low < high;) {\n            let mid = (low + high) >> 1;\n            let index = accEnd + mid + (mid << 1);\n            let from = data[index], to = data[index + 1] || 0x10000;\n            if (next < from)\n                high = mid;\n            else if (next >= to)\n                low = mid + 1;\n            else {\n                state = data[index + 2];\n                input.advance();\n                continue scan;\n            }\n        }\n        break;\n    }\n}\nfunction findOffset(data, start, term) {\n    for (let i = start, next; (next = data[i]) != 65535 /* Seq.End */; i++)\n        if (next == term)\n            return i - start;\n    return -1;\n}\nfunction overrides(token, prev, tableData, tableOffset) {\n    let iPrev = findOffset(tableData, tableOffset, prev);\n    return iPrev < 0 || findOffset(tableData, tableOffset, token) < iPrev;\n}\n\n// Environment variable used to control console output\nconst verbose = typeof process != \"undefined\" && process.env && /\\bparse\\b/.test(process.env.LOG);\nlet stackIDs = null;\nvar Safety;\n(function (Safety) {\n    Safety[Safety[\"Margin\"] = 25] = \"Margin\";\n})(Safety || (Safety = {}));\nfunction cutAt(tree, pos, side) {\n    let cursor = tree.cursor(common.IterMode.IncludeAnonymous);\n    cursor.moveTo(pos);\n    for (;;) {\n        if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos)))\n            for (;;) {\n                if ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError)\n                    return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 25 /* Safety.Margin */))\n                        : Math.min(tree.length, Math.max(cursor.from + 1, pos + 25 /* Safety.Margin */));\n                if (side < 0 ? cursor.prevSibling() : cursor.nextSibling())\n                    break;\n                if (!cursor.parent())\n                    return side < 0 ? 0 : tree.length;\n            }\n    }\n}\nclass FragmentCursor {\n    constructor(fragments, nodeSet) {\n        this.fragments = fragments;\n        this.nodeSet = nodeSet;\n        this.i = 0;\n        this.fragment = null;\n        this.safeFrom = -1;\n        this.safeTo = -1;\n        this.trees = [];\n        this.start = [];\n        this.index = [];\n        this.nextFragment();\n    }\n    nextFragment() {\n        let fr = this.fragment = this.i == this.fragments.length ? null : this.fragments[this.i++];\n        if (fr) {\n            this.safeFrom = fr.openStart ? cutAt(fr.tree, fr.from + fr.offset, 1) - fr.offset : fr.from;\n            this.safeTo = fr.openEnd ? cutAt(fr.tree, fr.to + fr.offset, -1) - fr.offset : fr.to;\n            while (this.trees.length) {\n                this.trees.pop();\n                this.start.pop();\n                this.index.pop();\n            }\n            this.trees.push(fr.tree);\n            this.start.push(-fr.offset);\n            this.index.push(0);\n            this.nextStart = this.safeFrom;\n        }\n        else {\n            this.nextStart = 1e9;\n        }\n    }\n    // `pos` must be >= any previously given `pos` for this cursor\n    nodeAt(pos) {\n        if (pos < this.nextStart)\n            return null;\n        while (this.fragment && this.safeTo <= pos)\n            this.nextFragment();\n        if (!this.fragment)\n            return null;\n        for (;;) {\n            let last = this.trees.length - 1;\n            if (last < 0) { // End of tree\n                this.nextFragment();\n                return null;\n            }\n            let top = this.trees[last], index = this.index[last];\n            if (index == top.children.length) {\n                this.trees.pop();\n                this.start.pop();\n                this.index.pop();\n                continue;\n            }\n            let next = top.children[index];\n            let start = this.start[last] + top.positions[index];\n            if (start > pos) {\n                this.nextStart = start;\n                return null;\n            }\n            if (next instanceof common.Tree) {\n                if (start == pos) {\n                    if (start < this.safeFrom)\n                        return null;\n                    let end = start + next.length;\n                    if (end <= this.safeTo) {\n                        let lookAhead = next.prop(common.NodeProp.lookAhead);\n                        if (!lookAhead || end + lookAhead < this.fragment.to)\n                            return next;\n                    }\n                }\n                this.index[last]++;\n                if (start + next.length >= Math.max(this.safeFrom, pos)) { // Enter this node\n                    this.trees.push(next);\n                    this.start.push(start);\n                    this.index.push(0);\n                }\n            }\n            else {\n                this.index[last]++;\n                this.nextStart = start + next.length;\n            }\n        }\n    }\n}\nclass TokenCache {\n    constructor(parser, stream) {\n        this.stream = stream;\n        this.tokens = [];\n        this.mainToken = null;\n        this.actions = [];\n        this.tokens = parser.tokenizers.map(_ => new CachedToken);\n    }\n    getActions(stack) {\n        let actionIndex = 0;\n        let main = null;\n        let { parser } = stack.p, { tokenizers } = parser;\n        let mask = parser.stateSlot(stack.state, 3 /* ParseState.TokenizerMask */);\n        let context = stack.curContext ? stack.curContext.hash : 0;\n        let lookAhead = 0;\n        for (let i = 0; i < tokenizers.length; i++) {\n            if (((1 << i) & mask) == 0)\n                continue;\n            let tokenizer = tokenizers[i], token = this.tokens[i];\n            if (main && !tokenizer.fallback)\n                continue;\n            if (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) {\n                this.updateCachedToken(token, tokenizer, stack);\n                token.mask = mask;\n                token.context = context;\n            }\n            if (token.lookAhead > token.end + 25 /* Safety.Margin */)\n                lookAhead = Math.max(token.lookAhead, lookAhead);\n            if (token.value != 0 /* Term.Err */) {\n                let startIndex = actionIndex;\n                if (token.extended > -1)\n                    actionIndex = this.addActions(stack, token.extended, token.end, actionIndex);\n                actionIndex = this.addActions(stack, token.value, token.end, actionIndex);\n                if (!tokenizer.extend) {\n                    main = token;\n                    if (actionIndex > startIndex)\n                        break;\n                }\n            }\n        }\n        while (this.actions.length > actionIndex)\n            this.actions.pop();\n        if (lookAhead)\n            stack.setLookAhead(lookAhead);\n        if (!main && stack.pos == this.stream.end) {\n            main = new CachedToken;\n            main.value = stack.p.parser.eofTerm;\n            main.start = main.end = stack.pos;\n            actionIndex = this.addActions(stack, main.value, main.end, actionIndex);\n        }\n        this.mainToken = main;\n        return this.actions;\n    }\n    getMainToken(stack) {\n        if (this.mainToken)\n            return this.mainToken;\n        let main = new CachedToken, { pos, p } = stack;\n        main.start = pos;\n        main.end = Math.min(pos + 1, p.stream.end);\n        main.value = pos == p.stream.end ? p.parser.eofTerm : 0 /* Term.Err */;\n        return main;\n    }\n    updateCachedToken(token, tokenizer, stack) {\n        let start = this.stream.clipPos(stack.pos);\n        tokenizer.token(this.stream.reset(start, token), stack);\n        if (token.value > -1) {\n            let { parser } = stack.p;\n            for (let i = 0; i < parser.specialized.length; i++)\n                if (parser.specialized[i] == token.value) {\n                    let result = parser.specializers[i](this.stream.read(token.start, token.end), stack);\n                    if (result >= 0 && stack.p.parser.dialect.allows(result >> 1)) {\n                        if ((result & 1) == 0 /* Specialize.Specialize */)\n                            token.value = result >> 1;\n                        else\n                            token.extended = result >> 1;\n                        break;\n                    }\n                }\n        }\n        else {\n            token.value = 0 /* Term.Err */;\n            token.end = this.stream.clipPos(start + 1);\n        }\n    }\n    putAction(action, token, end, index) {\n        // Don't add duplicate actions\n        for (let i = 0; i < index; i += 3)\n            if (this.actions[i] == action)\n                return index;\n        this.actions[index++] = action;\n        this.actions[index++] = token;\n        this.actions[index++] = end;\n        return index;\n    }\n    addActions(stack, token, end, index) {\n        let { state } = stack, { parser } = stack.p, { data } = parser;\n        for (let set = 0; set < 2; set++) {\n            for (let i = parser.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */);; i += 3) {\n                if (data[i] == 65535 /* Seq.End */) {\n                    if (data[i + 1] == 1 /* Seq.Next */) {\n                        i = pair(data, i + 2);\n                    }\n                    else {\n                        if (index == 0 && data[i + 1] == 2 /* Seq.Other */)\n                            index = this.putAction(pair(data, i + 2), token, end, index);\n                        break;\n                    }\n                }\n                if (data[i] == token)\n                    index = this.putAction(pair(data, i + 1), token, end, index);\n            }\n        }\n        return index;\n    }\n}\nvar Rec;\n(function (Rec) {\n    Rec[Rec[\"Distance\"] = 5] = \"Distance\";\n    Rec[Rec[\"MaxRemainingPerStep\"] = 3] = \"MaxRemainingPerStep\";\n    // When two stacks have been running independently long enough to\n    // add this many elements to their buffers, prune one.\n    Rec[Rec[\"MinBufferLengthPrune\"] = 500] = \"MinBufferLengthPrune\";\n    Rec[Rec[\"ForceReduceLimit\"] = 10] = \"ForceReduceLimit\";\n    // Once a stack reaches this depth (in .stack.length) force-reduce\n    // it back to CutTo to avoid creating trees that overflow the stack\n    // on recursive traversal.\n    Rec[Rec[\"CutDepth\"] = 15000] = \"CutDepth\";\n    Rec[Rec[\"CutTo\"] = 9000] = \"CutTo\";\n    Rec[Rec[\"MaxLeftAssociativeReductionCount\"] = 300] = \"MaxLeftAssociativeReductionCount\";\n    // The maximum number of non-recovering stacks to explore (to avoid\n    // getting bogged down with exponentially multiplying stacks in\n    // ambiguous content)\n    Rec[Rec[\"MaxStackCount\"] = 12] = \"MaxStackCount\";\n})(Rec || (Rec = {}));\nclass Parse {\n    constructor(parser, input, fragments, ranges) {\n        this.parser = parser;\n        this.input = input;\n        this.ranges = ranges;\n        this.recovering = 0;\n        this.nextStackID = 0x2654; // ♔, ♕, ♖, ♗, ♘, ♙, ♠, ♡, ♢, ♣, ♤, ♥, ♦, ♧\n        this.minStackPos = 0;\n        this.reused = [];\n        this.stoppedAt = null;\n        this.lastBigReductionStart = -1;\n        this.lastBigReductionSize = 0;\n        this.bigReductionCount = 0;\n        this.stream = new InputStream(input, ranges);\n        this.tokens = new TokenCache(parser, this.stream);\n        this.topTerm = parser.top[1];\n        let { from } = ranges[0];\n        this.stacks = [Stack.start(this, parser.top[0], from)];\n        this.fragments = fragments.length && this.stream.end - from > parser.bufferLength * 4\n            ? new FragmentCursor(fragments, parser.nodeSet) : null;\n    }\n    get parsedPos() {\n        return this.minStackPos;\n    }\n    // Move the parser forward. This will process all parse stacks at\n    // `this.pos` and try to advance them to a further position. If no\n    // stack for such a position is found, it'll start error-recovery.\n    //\n    // When the parse is finished, this will return a syntax tree. When\n    // not, it returns `null`.\n    advance() {\n        let stacks = this.stacks, pos = this.minStackPos;\n        // This will hold stacks beyond `pos`.\n        let newStacks = this.stacks = [];\n        let stopped, stoppedTokens;\n        // If a large amount of reductions happened with the same start\n        // position, force the stack out of that production in order to\n        // avoid creating a tree too deep to recurse through.\n        // (This is an ugly kludge, because unfortunately there is no\n        // straightforward, cheap way to check for this happening, due to\n        // the history of reductions only being available in an\n        // expensive-to-access format in the stack buffers.)\n        if (this.bigReductionCount > 300 /* Rec.MaxLeftAssociativeReductionCount */ && stacks.length == 1) {\n            let [s] = stacks;\n            while (s.forceReduce() && s.stack.length && s.stack[s.stack.length - 2] >= this.lastBigReductionStart) { }\n            this.bigReductionCount = this.lastBigReductionSize = 0;\n        }\n        // Keep advancing any stacks at `pos` until they either move\n        // forward or can't be advanced. Gather stacks that can't be\n        // advanced further in `stopped`.\n        for (let i = 0; i < stacks.length; i++) {\n            let stack = stacks[i];\n            for (;;) {\n                this.tokens.mainToken = null;\n                if (stack.pos > pos) {\n                    newStacks.push(stack);\n                }\n                else if (this.advanceStack(stack, newStacks, stacks)) {\n                    continue;\n                }\n                else {\n                    if (!stopped) {\n                        stopped = [];\n                        stoppedTokens = [];\n                    }\n                    stopped.push(stack);\n                    let tok = this.tokens.getMainToken(stack);\n                    stoppedTokens.push(tok.value, tok.end);\n                }\n                break;\n            }\n        }\n        if (!newStacks.length) {\n            let finished = stopped && findFinished(stopped);\n            if (finished)\n                return this.stackToTree(finished);\n            if (this.parser.strict) {\n                if (verbose && stopped)\n                    console.log(\"Stuck with token \" + (this.tokens.mainToken ? this.parser.getName(this.tokens.mainToken.value) : \"none\"));\n                throw new SyntaxError(\"No parse at \" + pos);\n            }\n            if (!this.recovering)\n                this.recovering = 5 /* Rec.Distance */;\n        }\n        if (this.recovering && stopped) {\n            let finished = this.stoppedAt != null && stopped[0].pos > this.stoppedAt ? stopped[0]\n                : this.runRecovery(stopped, stoppedTokens, newStacks);\n            if (finished)\n                return this.stackToTree(finished.forceAll());\n        }\n        if (this.recovering) {\n            let maxRemaining = this.recovering == 1 ? 1 : this.recovering * 3 /* Rec.MaxRemainingPerStep */;\n            if (newStacks.length > maxRemaining) {\n                newStacks.sort((a, b) => b.score - a.score);\n                while (newStacks.length > maxRemaining)\n                    newStacks.pop();\n            }\n            if (newStacks.some(s => s.reducePos > pos))\n                this.recovering--;\n        }\n        else if (newStacks.length > 1) {\n            // Prune stacks that are in the same state, or that have been\n            // running without splitting for a while, to avoid getting stuck\n            // with multiple successful stacks running endlessly on.\n            outer: for (let i = 0; i < newStacks.length - 1; i++) {\n                let stack = newStacks[i];\n                for (let j = i + 1; j < newStacks.length; j++) {\n                    let other = newStacks[j];\n                    if (stack.sameState(other) ||\n                        stack.buffer.length > 500 /* Rec.MinBufferLengthPrune */ && other.buffer.length > 500 /* Rec.MinBufferLengthPrune */) {\n                        if (((stack.score - other.score) || (stack.buffer.length - other.buffer.length)) > 0) {\n                            newStacks.splice(j--, 1);\n                        }\n                        else {\n                            newStacks.splice(i--, 1);\n                            continue outer;\n                        }\n                    }\n                }\n            }\n            if (newStacks.length > 12 /* Rec.MaxStackCount */)\n                newStacks.splice(12 /* Rec.MaxStackCount */, newStacks.length - 12 /* Rec.MaxStackCount */);\n        }\n        this.minStackPos = newStacks[0].pos;\n        for (let i = 1; i < newStacks.length; i++)\n            if (newStacks[i].pos < this.minStackPos)\n                this.minStackPos = newStacks[i].pos;\n        return null;\n    }\n    stopAt(pos) {\n        if (this.stoppedAt != null && this.stoppedAt < pos)\n            throw new RangeError(\"Can't move stoppedAt forward\");\n        this.stoppedAt = pos;\n    }\n    // Returns an updated version of the given stack, or null if the\n    // stack can't advance normally. When `split` and `stacks` are\n    // given, stacks split off by ambiguous operations will be pushed to\n    // `split`, or added to `stacks` if they move `pos` forward.\n    advanceStack(stack, stacks, split) {\n        let start = stack.pos, { parser } = this;\n        let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n        if (this.stoppedAt != null && start > this.stoppedAt)\n            return stack.forceReduce() ? stack : null;\n        if (this.fragments) {\n            let strictCx = stack.curContext && stack.curContext.tracker.strict, cxHash = strictCx ? stack.curContext.hash : 0;\n            for (let cached = this.fragments.nodeAt(start); cached;) {\n                let match = this.parser.nodeSet.types[cached.type.id] == cached.type ? parser.getGoto(stack.state, cached.type.id) : -1;\n                if (match > -1 && cached.length && (!strictCx || (cached.prop(common.NodeProp.contextHash) || 0) == cxHash)) {\n                    stack.useNode(cached, match);\n                    if (verbose)\n                        console.log(base + this.stackID(stack) + ` (via reuse of ${parser.getName(cached.type.id)})`);\n                    return true;\n                }\n                if (!(cached instanceof common.Tree) || cached.children.length == 0 || cached.positions[0] > 0)\n                    break;\n                let inner = cached.children[0];\n                if (inner instanceof common.Tree && cached.positions[0] == 0)\n                    cached = inner;\n                else\n                    break;\n            }\n        }\n        let defaultReduce = parser.stateSlot(stack.state, 4 /* ParseState.DefaultReduce */);\n        if (defaultReduce > 0) {\n            stack.reduce(defaultReduce);\n            if (verbose)\n                console.log(base + this.stackID(stack) + ` (via always-reduce ${parser.getName(defaultReduce & 65535 /* Action.ValueMask */)})`);\n            return true;\n        }\n        if (stack.stack.length >= 15000 /* Rec.CutDepth */) {\n            while (stack.stack.length > 9000 /* Rec.CutTo */ && stack.forceReduce()) { }\n        }\n        let actions = this.tokens.getActions(stack);\n        for (let i = 0; i < actions.length;) {\n            let action = actions[i++], term = actions[i++], end = actions[i++];\n            let last = i == actions.length || !split;\n            let localStack = last ? stack : stack.split();\n            localStack.apply(action, term, end);\n            if (verbose)\n                console.log(base + this.stackID(localStack) + ` (via ${(action & 65536 /* Action.ReduceFlag */) == 0 ? \"shift\"\n                    : `reduce of ${parser.getName(action & 65535 /* Action.ValueMask */)}`} for ${parser.getName(term)} @ ${start}${localStack == stack ? \"\" : \", split\"})`);\n            if (last)\n                return true;\n            else if (localStack.pos > start)\n                stacks.push(localStack);\n            else\n                split.push(localStack);\n        }\n        return false;\n    }\n    // Advance a given stack forward as far as it will go. Returns the\n    // (possibly updated) stack if it got stuck, or null if it moved\n    // forward and was given to `pushStackDedup`.\n    advanceFully(stack, newStacks) {\n        let pos = stack.pos;\n        for (;;) {\n            if (!this.advanceStack(stack, null, null))\n                return false;\n            if (stack.pos > pos) {\n                pushStackDedup(stack, newStacks);\n                return true;\n            }\n        }\n    }\n    runRecovery(stacks, tokens, newStacks) {\n        let finished = null, restarted = false;\n        for (let i = 0; i < stacks.length; i++) {\n            let stack = stacks[i], token = tokens[i << 1], tokenEnd = tokens[(i << 1) + 1];\n            let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n            if (stack.deadEnd) {\n                if (restarted)\n                    continue;\n                restarted = true;\n                stack.restart();\n                if (verbose)\n                    console.log(base + this.stackID(stack) + \" (restarted)\");\n                let done = this.advanceFully(stack, newStacks);\n                if (done)\n                    continue;\n            }\n            let force = stack.split(), forceBase = base;\n            for (let j = 0; force.forceReduce() && j < 10 /* Rec.ForceReduceLimit */; j++) {\n                if (verbose)\n                    console.log(forceBase + this.stackID(force) + \" (via force-reduce)\");\n                let done = this.advanceFully(force, newStacks);\n                if (done)\n                    break;\n                if (verbose)\n                    forceBase = this.stackID(force) + \" -> \";\n            }\n            for (let insert of stack.recoverByInsert(token)) {\n                if (verbose)\n                    console.log(base + this.stackID(insert) + \" (via recover-insert)\");\n                this.advanceFully(insert, newStacks);\n            }\n            if (this.stream.end > stack.pos) {\n                if (tokenEnd == stack.pos) {\n                    tokenEnd++;\n                    token = 0 /* Term.Err */;\n                }\n                stack.recoverByDelete(token, tokenEnd);\n                if (verbose)\n                    console.log(base + this.stackID(stack) + ` (via recover-delete ${this.parser.getName(token)})`);\n                pushStackDedup(stack, newStacks);\n            }\n            else if (!finished || finished.score < stack.score) {\n                finished = stack;\n            }\n        }\n        return finished;\n    }\n    // Convert the stack's buffer to a syntax tree.\n    stackToTree(stack) {\n        stack.close();\n        return common.Tree.build({ buffer: StackBufferCursor.create(stack),\n            nodeSet: this.parser.nodeSet,\n            topID: this.topTerm,\n            maxBufferLength: this.parser.bufferLength,\n            reused: this.reused,\n            start: this.ranges[0].from,\n            length: stack.pos - this.ranges[0].from,\n            minRepeatType: this.parser.minRepeatTerm });\n    }\n    stackID(stack) {\n        let id = (stackIDs || (stackIDs = new WeakMap)).get(stack);\n        if (!id)\n            stackIDs.set(stack, id = String.fromCodePoint(this.nextStackID++));\n        return id + stack;\n    }\n}\nfunction pushStackDedup(stack, newStacks) {\n    for (let i = 0; i < newStacks.length; i++) {\n        let other = newStacks[i];\n        if (other.pos == stack.pos && other.sameState(stack)) {\n            if (newStacks[i].score < stack.score)\n                newStacks[i] = stack;\n            return;\n        }\n    }\n    newStacks.push(stack);\n}\nclass Dialect {\n    constructor(source, flags, disabled) {\n        this.source = source;\n        this.flags = flags;\n        this.disabled = disabled;\n    }\n    allows(term) { return !this.disabled || this.disabled[term] == 0; }\n}\nconst id = x => x;\n/// Context trackers are used to track stateful context (such as\n/// indentation in the Python grammar, or parent elements in the XML\n/// grammar) needed by external tokenizers. You declare them in a\n/// grammar file as `@context exportName from \"module\"`.\n///\n/// Context values should be immutable, and can be updated (replaced)\n/// on shift or reduce actions.\n///\n/// The export used in a `@context` declaration should be of this\n/// type.\nclass ContextTracker {\n    /// Define a context tracker.\n    constructor(spec) {\n        this.start = spec.start;\n        this.shift = spec.shift || id;\n        this.reduce = spec.reduce || id;\n        this.reuse = spec.reuse || id;\n        this.hash = spec.hash || (() => 0);\n        this.strict = spec.strict !== false;\n    }\n}\n/// Holds the parse tables for a given grammar, as generated by\n/// `lezer-generator`, and provides [methods](#common.Parser) to parse\n/// content with.\nclass LRParser extends common.Parser {\n    /// @internal\n    constructor(spec) {\n        super();\n        /// @internal\n        this.wrappers = [];\n        if (spec.version != 14 /* File.Version */)\n            throw new RangeError(`Parser version (${spec.version}) doesn't match runtime version (${14 /* File.Version */})`);\n        let nodeNames = spec.nodeNames.split(\" \");\n        this.minRepeatTerm = nodeNames.length;\n        for (let i = 0; i < spec.repeatNodeCount; i++)\n            nodeNames.push(\"\");\n        let topTerms = Object.keys(spec.topRules).map(r => spec.topRules[r][1]);\n        let nodeProps = [];\n        for (let i = 0; i < nodeNames.length; i++)\n            nodeProps.push([]);\n        function setProp(nodeID, prop, value) {\n            nodeProps[nodeID].push([prop, prop.deserialize(String(value))]);\n        }\n        if (spec.nodeProps)\n            for (let propSpec of spec.nodeProps) {\n                let prop = propSpec[0];\n                if (typeof prop == \"string\")\n                    prop = common.NodeProp[prop];\n                for (let i = 1; i < propSpec.length;) {\n                    let next = propSpec[i++];\n                    if (next >= 0) {\n                        setProp(next, prop, propSpec[i++]);\n                    }\n                    else {\n                        let value = propSpec[i + -next];\n                        for (let j = -next; j > 0; j--)\n                            setProp(propSpec[i++], prop, value);\n                        i++;\n                    }\n                }\n            }\n        this.nodeSet = new common.NodeSet(nodeNames.map((name, i) => common.NodeType.define({\n            name: i >= this.minRepeatTerm ? undefined : name,\n            id: i,\n            props: nodeProps[i],\n            top: topTerms.indexOf(i) > -1,\n            error: i == 0,\n            skipped: spec.skippedNodes && spec.skippedNodes.indexOf(i) > -1\n        })));\n        if (spec.propSources)\n            this.nodeSet = this.nodeSet.extend(...spec.propSources);\n        this.strict = false;\n        this.bufferLength = common.DefaultBufferLength;\n        let tokenArray = decodeArray(spec.tokenData);\n        this.context = spec.context;\n        this.specializerSpecs = spec.specialized || [];\n        this.specialized = new Uint16Array(this.specializerSpecs.length);\n        for (let i = 0; i < this.specializerSpecs.length; i++)\n            this.specialized[i] = this.specializerSpecs[i].term;\n        this.specializers = this.specializerSpecs.map(getSpecializer);\n        this.states = decodeArray(spec.states, Uint32Array);\n        this.data = decodeArray(spec.stateData);\n        this.goto = decodeArray(spec.goto);\n        this.maxTerm = spec.maxTerm;\n        this.tokenizers = spec.tokenizers.map(value => typeof value == \"number\" ? new TokenGroup(tokenArray, value) : value);\n        this.topRules = spec.topRules;\n        this.dialects = spec.dialects || {};\n        this.dynamicPrecedences = spec.dynamicPrecedences || null;\n        this.tokenPrecTable = spec.tokenPrec;\n        this.termNames = spec.termNames || null;\n        this.maxNode = this.nodeSet.types.length - 1;\n        this.dialect = this.parseDialect();\n        this.top = this.topRules[Object.keys(this.topRules)[0]];\n    }\n    createParse(input, fragments, ranges) {\n        let parse = new Parse(this, input, fragments, ranges);\n        for (let w of this.wrappers)\n            parse = w(parse, input, fragments, ranges);\n        return parse;\n    }\n    /// Get a goto table entry @internal\n    getGoto(state, term, loose = false) {\n        let table = this.goto;\n        if (term >= table[0])\n            return -1;\n        for (let pos = table[term + 1];;) {\n            let groupTag = table[pos++], last = groupTag & 1;\n            let target = table[pos++];\n            if (last && loose)\n                return target;\n            for (let end = pos + (groupTag >> 1); pos < end; pos++)\n                if (table[pos] == state)\n                    return target;\n            if (last)\n                return -1;\n        }\n    }\n    /// Check if this state has an action for a given terminal @internal\n    hasAction(state, terminal) {\n        let data = this.data;\n        for (let set = 0; set < 2; set++) {\n            for (let i = this.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */), next;; i += 3) {\n                if ((next = data[i]) == 65535 /* Seq.End */) {\n                    if (data[i + 1] == 1 /* Seq.Next */)\n                        next = data[i = pair(data, i + 2)];\n                    else if (data[i + 1] == 2 /* Seq.Other */)\n                        return pair(data, i + 2);\n                    else\n                        break;\n                }\n                if (next == terminal || next == 0 /* Term.Err */)\n                    return pair(data, i + 1);\n            }\n        }\n        return 0;\n    }\n    /// @internal\n    stateSlot(state, slot) {\n        return this.states[(state * 6 /* ParseState.Size */) + slot];\n    }\n    /// @internal\n    stateFlag(state, flag) {\n        return (this.stateSlot(state, 0 /* ParseState.Flags */) & flag) > 0;\n    }\n    /// @internal\n    validAction(state, action) {\n        return !!this.allActions(state, a => a == action ? true : null);\n    }\n    /// @internal\n    allActions(state, action) {\n        let deflt = this.stateSlot(state, 4 /* ParseState.DefaultReduce */);\n        let result = deflt ? action(deflt) : undefined;\n        for (let i = this.stateSlot(state, 1 /* ParseState.Actions */); result == null; i += 3) {\n            if (this.data[i] == 65535 /* Seq.End */) {\n                if (this.data[i + 1] == 1 /* Seq.Next */)\n                    i = pair(this.data, i + 2);\n                else\n                    break;\n            }\n            result = action(pair(this.data, i + 1));\n        }\n        return result;\n    }\n    /// Get the states that can follow this one through shift actions or\n    /// goto jumps. @internal\n    nextStates(state) {\n        let result = [];\n        for (let i = this.stateSlot(state, 1 /* ParseState.Actions */);; i += 3) {\n            if (this.data[i] == 65535 /* Seq.End */) {\n                if (this.data[i + 1] == 1 /* Seq.Next */)\n                    i = pair(this.data, i + 2);\n                else\n                    break;\n            }\n            if ((this.data[i + 2] & (65536 /* Action.ReduceFlag */ >> 16)) == 0) {\n                let value = this.data[i + 1];\n                if (!result.some((v, i) => (i & 1) && v == value))\n                    result.push(this.data[i], value);\n            }\n        }\n        return result;\n    }\n    /// Configure the parser. Returns a new parser instance that has the\n    /// given settings modified. Settings not provided in `config` are\n    /// kept from the original parser.\n    configure(config) {\n        // Hideous reflection-based kludge to make it easy to create a\n        // slightly modified copy of a parser.\n        let copy = Object.assign(Object.create(LRParser.prototype), this);\n        if (config.props)\n            copy.nodeSet = this.nodeSet.extend(...config.props);\n        if (config.top) {\n            let info = this.topRules[config.top];\n            if (!info)\n                throw new RangeError(`Invalid top rule name ${config.top}`);\n            copy.top = info;\n        }\n        if (config.tokenizers)\n            copy.tokenizers = this.tokenizers.map(t => {\n                let found = config.tokenizers.find(r => r.from == t);\n                return found ? found.to : t;\n            });\n        if (config.specializers) {\n            copy.specializers = this.specializers.slice();\n            copy.specializerSpecs = this.specializerSpecs.map((s, i) => {\n                let found = config.specializers.find(r => r.from == s.external);\n                if (!found)\n                    return s;\n                let spec = Object.assign(Object.assign({}, s), { external: found.to });\n                copy.specializers[i] = getSpecializer(spec);\n                return spec;\n            });\n        }\n        if (config.contextTracker)\n            copy.context = config.contextTracker;\n        if (config.dialect)\n            copy.dialect = this.parseDialect(config.dialect);\n        if (config.strict != null)\n            copy.strict = config.strict;\n        if (config.wrap)\n            copy.wrappers = copy.wrappers.concat(config.wrap);\n        if (config.bufferLength != null)\n            copy.bufferLength = config.bufferLength;\n        return copy;\n    }\n    /// Tells you whether any [parse wrappers](#lr.ParserConfig.wrap)\n    /// are registered for this parser.\n    hasWrappers() {\n        return this.wrappers.length > 0;\n    }\n    /// Returns the name associated with a given term. This will only\n    /// work for all terms when the parser was generated with the\n    /// `--names` option. By default, only the names of tagged terms are\n    /// stored.\n    getName(term) {\n        return this.termNames ? this.termNames[term] : String(term <= this.maxNode && this.nodeSet.types[term].name || term);\n    }\n    /// The eof term id is always allocated directly after the node\n    /// types. @internal\n    get eofTerm() { return this.maxNode + 1; }\n    /// The type of top node produced by the parser.\n    get topNode() { return this.nodeSet.types[this.top[1]]; }\n    /// @internal\n    dynamicPrecedence(term) {\n        let prec = this.dynamicPrecedences;\n        return prec == null ? 0 : prec[term] || 0;\n    }\n    /// @internal\n    parseDialect(dialect) {\n        let values = Object.keys(this.dialects), flags = values.map(() => false);\n        if (dialect)\n            for (let part of dialect.split(\" \")) {\n                let id = values.indexOf(part);\n                if (id >= 0)\n                    flags[id] = true;\n            }\n        let disabled = null;\n        for (let i = 0; i < values.length; i++)\n            if (!flags[i]) {\n                for (let j = this.dialects[values[i]], id; (id = this.data[j++]) != 65535 /* Seq.End */;)\n                    (disabled || (disabled = new Uint8Array(this.maxTerm + 1)))[id] = 1;\n            }\n        return new Dialect(dialect, flags, disabled);\n    }\n    /// Used by the output of the parser generator. Not available to\n    /// user code. @hide\n    static deserialize(spec) {\n        return new LRParser(spec);\n    }\n}\nfunction pair(data, off) { return data[off] | (data[off + 1] << 16); }\nfunction findFinished(stacks) {\n    let best = null;\n    for (let stack of stacks) {\n        let stopped = stack.p.stoppedAt;\n        if ((stack.pos == stack.p.stream.end || stopped != null && stack.pos > stopped) &&\n            stack.p.parser.stateFlag(stack.state, 2 /* StateFlag.Accepting */) &&\n            (!best || best.score < stack.score))\n            best = stack;\n    }\n    return best;\n}\nfunction getSpecializer(spec) {\n    if (spec.external) {\n        let mask = spec.extend ? 1 /* Specialize.Extend */ : 0 /* Specialize.Specialize */;\n        return (value, stack) => (spec.external(value, stack) << 1) | mask;\n    }\n    return spec.get;\n}\n\nexports.ContextTracker = ContextTracker;\nexports.ExternalTokenizer = ExternalTokenizer;\nexports.InputStream = InputStream;\nexports.LRParser = LRParser;\nexports.LocalTokenGroup = LocalTokenGroup;\nexports.Stack = Stack;\n","\"use strict\";\n// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar node_worker_1 = require(\"./node-worker.cjs\");\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\n// see fleb note\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n    var b = new u16(31);\n    for (var i = 0; i < 31; ++i) {\n        b[i] = start += 1 << eb[i - 1];\n    }\n    // numbers here are at max 18 bits\n    var r = new u32(b[30]);\n    for (var i = 1; i < 30; ++i) {\n        for (var j = b[i]; j < b[i + 1]; ++j) {\n            r[j] = ((j - b[i]) << 5) | i;\n        }\n    }\n    return [b, r];\n};\nvar _a = freb(fleb, 2), fl = _a[0], revfl = _a[1];\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b[0], revfd = _b[1];\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n    // reverse table algorithm from SO\n    var x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);\n    x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);\n    x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);\n    rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n    var s = cd.length;\n    // index\n    var i = 0;\n    // u16 \"map\": index -> # of codes with bit length = index\n    var l = new u16(mb);\n    // length of cd must be 288 (total # of codes)\n    for (; i < s; ++i) {\n        if (cd[i])\n            ++l[cd[i] - 1];\n    }\n    // u16 \"map\": index -> minimum code for bit length = index\n    var le = new u16(mb);\n    for (i = 0; i < mb; ++i) {\n        le[i] = (le[i - 1] + l[i - 1]) << 1;\n    }\n    var co;\n    if (r) {\n        // u16 \"map\": index -> number of actual bits, symbol for code\n        co = new u16(1 << mb);\n        // bits to remove for reverser\n        var rvb = 15 - mb;\n        for (i = 0; i < s; ++i) {\n            // ignore 0 lengths\n            if (cd[i]) {\n                // num encoding both symbol and bits read\n                var sv = (i << 4) | cd[i];\n                // free bits\n                var r_1 = mb - cd[i];\n                // start value\n                var v = le[cd[i] - 1]++ << r_1;\n                // m is end value\n                for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n                    // every 16 bit value starting with the code yields the same result\n                    co[rev[v] >>> rvb] = sv;\n                }\n            }\n        }\n    }\n    else {\n        co = new u16(s);\n        for (i = 0; i < s; ++i) {\n            if (cd[i]) {\n                co[i] = rev[le[cd[i] - 1]++] >>> (15 - cd[i]);\n            }\n        }\n    }\n    return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n    flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n    flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n    flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n    flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n    fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n    var m = a[0];\n    for (var i = 1; i < a.length; ++i) {\n        if (a[i] > m)\n            m = a[i];\n    }\n    return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n    var o = (p / 8) | 0;\n    return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n    var o = (p / 8) | 0;\n    return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n    if (s == null || s < 0)\n        s = 0;\n    if (e == null || e > v.length)\n        e = v.length;\n    // can't use .constructor in case user-supplied\n    var n = new (v.BYTES_PER_ELEMENT == 2 ? u16 : v.BYTES_PER_ELEMENT == 4 ? u32 : u8)(e - s);\n    n.set(v.subarray(s, e));\n    return n;\n};\n/**\n * Codes for errors generated within this library\n */\nexports.FlateErrorCode = {\n    UnexpectedEOF: 0,\n    InvalidBlockType: 1,\n    InvalidLengthLiteral: 2,\n    InvalidDistance: 3,\n    StreamFinished: 4,\n    NoStreamHandler: 5,\n    InvalidHeader: 6,\n    NoCallback: 7,\n    InvalidUTF8: 8,\n    ExtraFieldTooLong: 9,\n    InvalidDate: 10,\n    FilenameTooLong: 11,\n    StreamFinishing: 12,\n    InvalidZipData: 13,\n    UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n    'unexpected EOF',\n    'invalid block type',\n    'invalid length/literal',\n    'invalid distance',\n    'stream finished',\n    'no stream handler',\n    ,\n    'no callback',\n    'invalid UTF-8 data',\n    'extra field too long',\n    'date not in range 1980-2099',\n    'filename too long',\n    'stream finishing',\n    'invalid zip data'\n    // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n    var e = new Error(msg || ec[ind]);\n    e.code = ind;\n    if (Error.captureStackTrace)\n        Error.captureStackTrace(e, err);\n    if (!nt)\n        throw e;\n    return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, buf, st) {\n    // source length\n    var sl = dat.length;\n    if (!sl || (st && st.f && !st.l))\n        return buf || new u8(0);\n    // have to estimate size\n    var noBuf = !buf || st;\n    // no state\n    var noSt = !st || st.i;\n    if (!st)\n        st = {};\n    // Assumes roughly 33% compression ratio average\n    if (!buf)\n        buf = new u8(sl * 3);\n    // ensure buffer can fit at least l elements\n    var cbuf = function (l) {\n        var bl = buf.length;\n        // need to increase size to fit\n        if (l > bl) {\n            // Double or set to necessary, whichever is greater\n            var nbuf = new u8(Math.max(bl * 2, l));\n            nbuf.set(buf);\n            buf = nbuf;\n        }\n    };\n    //  last chunk         bitpos           bytes\n    var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n    // total bits\n    var tbts = sl * 8;\n    do {\n        if (!lm) {\n            // BFINAL - this is only 1 when last chunk is next\n            final = bits(dat, pos, 1);\n            // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n            var type = bits(dat, pos + 1, 3);\n            pos += 3;\n            if (!type) {\n                // go to end of byte boundary\n                var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n                if (t > sl) {\n                    if (noSt)\n                        err(0);\n                    break;\n                }\n                // ensure size\n                if (noBuf)\n                    cbuf(bt + l);\n                // Copy over uncompressed data\n                buf.set(dat.subarray(s, t), bt);\n                // Get new bitpos, update byte count\n                st.b = bt += l, st.p = pos = t * 8, st.f = final;\n                continue;\n            }\n            else if (type == 1)\n                lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n            else if (type == 2) {\n                //  literal                            lengths\n                var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n                var tl = hLit + bits(dat, pos + 5, 31) + 1;\n                pos += 14;\n                // length+distance tree\n                var ldt = new u8(tl);\n                // code length tree\n                var clt = new u8(19);\n                for (var i = 0; i < hcLen; ++i) {\n                    // use index map to get real code\n                    clt[clim[i]] = bits(dat, pos + i * 3, 7);\n                }\n                pos += hcLen * 3;\n                // code lengths bits\n                var clb = max(clt), clbmsk = (1 << clb) - 1;\n                // code lengths map\n                var clm = hMap(clt, clb, 1);\n                for (var i = 0; i < tl;) {\n                    var r = clm[bits(dat, pos, clbmsk)];\n                    // bits read\n                    pos += r & 15;\n                    // symbol\n                    var s = r >>> 4;\n                    // code length to copy\n                    if (s < 16) {\n                        ldt[i++] = s;\n                    }\n                    else {\n                        //  copy   count\n                        var c = 0, n = 0;\n                        if (s == 16)\n                            n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n                        else if (s == 17)\n                            n = 3 + bits(dat, pos, 7), pos += 3;\n                        else if (s == 18)\n                            n = 11 + bits(dat, pos, 127), pos += 7;\n                        while (n--)\n                            ldt[i++] = c;\n                    }\n                }\n                //    length tree                 distance tree\n                var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n                // max length bits\n                lbt = max(lt);\n                // max dist bits\n                dbt = max(dt);\n                lm = hMap(lt, lbt, 1);\n                dm = hMap(dt, dbt, 1);\n            }\n            else\n                err(1);\n            if (pos > tbts) {\n                if (noSt)\n                    err(0);\n                break;\n            }\n        }\n        // Make sure the buffer can hold this + the largest possible addition\n        // Maximum chunk size (practically, theoretically infinite) is 2^17;\n        if (noBuf)\n            cbuf(bt + 131072);\n        var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n        var lpos = pos;\n        for (;; lpos = pos) {\n            // bits read, code\n            var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n            pos += c & 15;\n            if (pos > tbts) {\n                if (noSt)\n                    err(0);\n                break;\n            }\n            if (!c)\n                err(2);\n            if (sym < 256)\n                buf[bt++] = sym;\n            else if (sym == 256) {\n                lpos = pos, lm = null;\n                break;\n            }\n            else {\n                var add = sym - 254;\n                // no extra bits needed if less\n                if (sym > 264) {\n                    // index\n                    var i = sym - 257, b = fleb[i];\n                    add = bits(dat, pos, (1 << b) - 1) + fl[i];\n                    pos += b;\n                }\n                // dist\n                var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n                if (!d)\n                    err(3);\n                pos += d & 15;\n                var dt = fd[dsym];\n                if (dsym > 3) {\n                    var b = fdeb[dsym];\n                    dt += bits16(dat, pos) & ((1 << b) - 1), pos += b;\n                }\n                if (pos > tbts) {\n                    if (noSt)\n                        err(0);\n                    break;\n                }\n                if (noBuf)\n                    cbuf(bt + 131072);\n                var end = bt + add;\n                for (; bt < end; bt += 4) {\n                    buf[bt] = buf[bt - dt];\n                    buf[bt + 1] = buf[bt + 1 - dt];\n                    buf[bt + 2] = buf[bt + 2 - dt];\n                    buf[bt + 3] = buf[bt + 3 - dt];\n                }\n                bt = end;\n            }\n        }\n        st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n        if (lm)\n            final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n    } while (!final);\n    return bt == buf.length ? buf : slc(buf, 0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n    v <<= p & 7;\n    var o = (p / 8) | 0;\n    d[o] |= v;\n    d[o + 1] |= v >>> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n    v <<= p & 7;\n    var o = (p / 8) | 0;\n    d[o] |= v;\n    d[o + 1] |= v >>> 8;\n    d[o + 2] |= v >>> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n    // Need extra info to make a tree\n    var t = [];\n    for (var i = 0; i < d.length; ++i) {\n        if (d[i])\n            t.push({ s: i, f: d[i] });\n    }\n    var s = t.length;\n    var t2 = t.slice();\n    if (!s)\n        return [et, 0];\n    if (s == 1) {\n        var v = new u8(t[0].s + 1);\n        v[t[0].s] = 1;\n        return [v, 1];\n    }\n    t.sort(function (a, b) { return a.f - b.f; });\n    // after i2 reaches last ind, will be stopped\n    // freq must be greater than largest possible number of symbols\n    t.push({ s: -1, f: 25001 });\n    var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n    t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n    // efficient algorithm from UZIP.js\n    // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n    // symbols that combined have high freq, will start processing i2 (high-freq,\n    // non-composite) symbols instead\n    // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n    while (i1 != s - 1) {\n        l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n        r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n        t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n    }\n    var maxSym = t2[0].s;\n    for (var i = 1; i < s; ++i) {\n        if (t2[i].s > maxSym)\n            maxSym = t2[i].s;\n    }\n    // code lengths\n    var tr = new u16(maxSym + 1);\n    // max bits in tree\n    var mbt = ln(t[i1 - 1], tr, 0);\n    if (mbt > mb) {\n        // more algorithms from UZIP.js\n        // TODO: find out how this code works (debt)\n        //  ind    debt\n        var i = 0, dt = 0;\n        //    left            cost\n        var lft = mbt - mb, cst = 1 << lft;\n        t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n        for (; i < s; ++i) {\n            var i2_1 = t2[i].s;\n            if (tr[i2_1] > mb) {\n                dt += cst - (1 << (mbt - tr[i2_1]));\n                tr[i2_1] = mb;\n            }\n            else\n                break;\n        }\n        dt >>>= lft;\n        while (dt > 0) {\n            var i2_2 = t2[i].s;\n            if (tr[i2_2] < mb)\n                dt -= 1 << (mb - tr[i2_2]++ - 1);\n            else\n                ++i;\n        }\n        for (; i >= 0 && dt; --i) {\n            var i2_3 = t2[i].s;\n            if (tr[i2_3] == mb) {\n                --tr[i2_3];\n                ++dt;\n            }\n        }\n        mbt = mb;\n    }\n    return [new u8(tr), mbt];\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n    return n.s == -1\n        ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n        : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n    var s = c.length;\n    // Note that the semicolon was intentional\n    while (s && !c[--s])\n        ;\n    var cl = new u16(++s);\n    //  ind      num         streak\n    var cli = 0, cln = c[0], cls = 1;\n    var w = function (v) { cl[cli++] = v; };\n    for (var i = 1; i <= s; ++i) {\n        if (c[i] == cln && i != s)\n            ++cls;\n        else {\n            if (!cln && cls > 2) {\n                for (; cls > 138; cls -= 138)\n                    w(32754);\n                if (cls > 2) {\n                    w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n                    cls = 0;\n                }\n            }\n            else if (cls > 3) {\n                w(cln), --cls;\n                for (; cls > 6; cls -= 6)\n                    w(8304);\n                if (cls > 2)\n                    w(((cls - 3) << 5) | 8208), cls = 0;\n            }\n            while (cls--)\n                w(cln);\n            cls = 1;\n            cln = c[i];\n        }\n    }\n    return [cl.subarray(0, cli), s];\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n    var l = 0;\n    for (var i = 0; i < cl.length; ++i)\n        l += cf[i] * cl[i];\n    return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n    // no need to write 00 as type: TypedArray defaults to 0\n    var s = dat.length;\n    var o = shft(pos + 2);\n    out[o] = s & 255;\n    out[o + 1] = s >>> 8;\n    out[o + 2] = out[o] ^ 255;\n    out[o + 3] = out[o + 1] ^ 255;\n    for (var i = 0; i < s; ++i)\n        out[o + i + 4] = dat[i];\n    return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n    wbits(out, p++, final);\n    ++lf[256];\n    var _a = hTree(lf, 15), dlt = _a[0], mlb = _a[1];\n    var _b = hTree(df, 15), ddt = _b[0], mdb = _b[1];\n    var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n    var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n    var lcfreq = new u16(19);\n    for (var i = 0; i < lclt.length; ++i)\n        lcfreq[lclt[i] & 31]++;\n    for (var i = 0; i < lcdt.length; ++i)\n        lcfreq[lcdt[i] & 31]++;\n    var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n    var nlcc = 19;\n    for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n        ;\n    var flen = (bl + 5) << 3;\n    var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n    var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n    if (flen <= ftlen && flen <= dtlen)\n        return wfblk(out, p, dat.subarray(bs, bs + bl));\n    var lm, ll, dm, dl;\n    wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n    if (dtlen < ftlen) {\n        lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n        var llm = hMap(lct, mlcb, 0);\n        wbits(out, p, nlc - 257);\n        wbits(out, p + 5, ndc - 1);\n        wbits(out, p + 10, nlcc - 4);\n        p += 14;\n        for (var i = 0; i < nlcc; ++i)\n            wbits(out, p + 3 * i, lct[clim[i]]);\n        p += 3 * nlcc;\n        var lcts = [lclt, lcdt];\n        for (var it = 0; it < 2; ++it) {\n            var clct = lcts[it];\n            for (var i = 0; i < clct.length; ++i) {\n                var len = clct[i] & 31;\n                wbits(out, p, llm[len]), p += lct[len];\n                if (len > 15)\n                    wbits(out, p, (clct[i] >>> 5) & 127), p += clct[i] >>> 12;\n            }\n        }\n    }\n    else {\n        lm = flm, ll = flt, dm = fdm, dl = fdt;\n    }\n    for (var i = 0; i < li; ++i) {\n        if (syms[i] > 255) {\n            var len = (syms[i] >>> 18) & 31;\n            wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n            if (len > 7)\n                wbits(out, p, (syms[i] >>> 23) & 31), p += fleb[len];\n            var dst = syms[i] & 31;\n            wbits16(out, p, dm[dst]), p += dl[dst];\n            if (dst > 3)\n                wbits16(out, p, (syms[i] >>> 5) & 8191), p += fdeb[dst];\n        }\n        else {\n            wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n        }\n    }\n    wbits16(out, p, lm[256]);\n    return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n    var s = dat.length;\n    var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n    // writing to this writes to the output buffer\n    var w = o.subarray(pre, o.length - post);\n    var pos = 0;\n    if (!lvl || s < 8) {\n        for (var i = 0; i <= s; i += 65535) {\n            // end\n            var e = i + 65535;\n            if (e >= s) {\n                // write final block\n                w[pos >> 3] = lst;\n            }\n            pos = wfblk(w, pos + 1, dat.subarray(i, e));\n        }\n    }\n    else {\n        var opt = deo[lvl - 1];\n        var n = opt >>> 13, c = opt & 8191;\n        var msk_1 = (1 << plvl) - 1;\n        //    prev 2-byte val map    curr 2-byte val map\n        var prev = new u16(32768), head = new u16(msk_1 + 1);\n        var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n        var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n        // 24576 is an arbitrary number of maximum symbols per block\n        // 424 buffer for last block\n        var syms = new u32(25000);\n        // length/literal freq   distance freq\n        var lf = new u16(288), df = new u16(32);\n        //  l/lcnt  exbits  index  l/lind  waitdx  bitpos\n        var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n        for (; i < s; ++i) {\n            // hash value\n            // deopt when i > s - 3 - at end, deopt acceptable\n            var hv = hsh(i);\n            // index mod 32768    previous index mod\n            var imod = i & 32767, pimod = head[hv];\n            prev[imod] = pimod;\n            head[hv] = imod;\n            // We always should modify head and prev, but only add symbols if\n            // this data is not yet processed (\"wait\" for wait index)\n            if (wi <= i) {\n                // bytes remaining\n                var rem = s - i;\n                if ((lc_1 > 7000 || li > 24576) && rem > 423) {\n                    pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n                    li = lc_1 = eb = 0, bs = i;\n                    for (var j = 0; j < 286; ++j)\n                        lf[j] = 0;\n                    for (var j = 0; j < 30; ++j)\n                        df[j] = 0;\n                }\n                //  len    dist   chain\n                var l = 2, d = 0, ch_1 = c, dif = (imod - pimod) & 32767;\n                if (rem > 2 && hv == hsh(i - dif)) {\n                    var maxn = Math.min(n, rem) - 1;\n                    var maxd = Math.min(32767, i);\n                    // max possible length\n                    // not capped at dif because decompressors implement \"rolling\" index population\n                    var ml = Math.min(258, rem);\n                    while (dif <= maxd && --ch_1 && imod != pimod) {\n                        if (dat[i + l] == dat[i + l - dif]) {\n                            var nl = 0;\n                            for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n                                ;\n                            if (nl > l) {\n                                l = nl, d = dif;\n                                // break out early when we reach \"nice\" (we are satisfied enough)\n                                if (nl > maxn)\n                                    break;\n                                // now, find the rarest 2-byte sequence within this\n                                // length of literals and search for that instead.\n                                // Much faster than just using the start\n                                var mmd = Math.min(dif, nl - 2);\n                                var md = 0;\n                                for (var j = 0; j < mmd; ++j) {\n                                    var ti = (i - dif + j + 32768) & 32767;\n                                    var pti = prev[ti];\n                                    var cd = (ti - pti + 32768) & 32767;\n                                    if (cd > md)\n                                        md = cd, pimod = ti;\n                                }\n                            }\n                        }\n                        // check the previous match\n                        imod = pimod, pimod = prev[imod];\n                        dif += (imod - pimod + 32768) & 32767;\n                    }\n                }\n                // d will be nonzero only when a match was found\n                if (d) {\n                    // store both dist and len data in one Uint32\n                    // Make sure this is recognized as a len/dist with 28th bit (2^28)\n                    syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n                    var lin = revfl[l] & 31, din = revfd[d] & 31;\n                    eb += fleb[lin] + fdeb[din];\n                    ++lf[257 + lin];\n                    ++df[din];\n                    wi = i + l;\n                    ++lc_1;\n                }\n                else {\n                    syms[li++] = dat[i];\n                    ++lf[dat[i]];\n                }\n            }\n        }\n        pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n        // this is the easiest way to avoid needing to maintain state\n        if (!lst && pos & 7)\n            pos = wfblk(w, pos + 1, et);\n    }\n    return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n    var t = new Int32Array(256);\n    for (var i = 0; i < 256; ++i) {\n        var c = i, k = 9;\n        while (--k)\n            c = ((c & 1) && -306674912) ^ (c >>> 1);\n        t[i] = c;\n    }\n    return t;\n})();\n// CRC32\nvar crc = function () {\n    var c = -1;\n    return {\n        p: function (d) {\n            // closures have awful performance\n            var cr = c;\n            for (var i = 0; i < d.length; ++i)\n                cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n            c = cr;\n        },\n        d: function () { return ~c; }\n    };\n};\n// Alder32\nvar adler = function () {\n    var a = 1, b = 0;\n    return {\n        p: function (d) {\n            // closures have awful performance\n            var n = a, m = b;\n            var l = d.length | 0;\n            for (var i = 0; i != l;) {\n                var e = Math.min(i + 2655, l);\n                for (; i < e; ++i)\n                    m += n += d[i];\n                n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n            }\n            a = n, b = m;\n        },\n        d: function () {\n            a %= 65521, b %= 65521;\n            return (a & 255) << 24 | (a >>> 8) << 16 | (b & 255) << 8 | (b >>> 8);\n        }\n    };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n    return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : (12 + opt.mem), pre, post, !st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n    var o = {};\n    for (var k in a)\n        o[k] = a[k];\n    for (var k in b)\n        o[k] = b[k];\n    return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n    var dt = fn();\n    var st = fn.toString();\n    var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n    for (var i = 0; i < dt.length; ++i) {\n        var v = dt[i], k = ks[i];\n        if (typeof v == 'function') {\n            fnStr += ';' + k + '=';\n            var st_1 = v.toString();\n            if (v.prototype) {\n                // for global objects\n                if (st_1.indexOf('[native code]') != -1) {\n                    var spInd = st_1.indexOf(' ', 8) + 1;\n                    fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n                }\n                else {\n                    fnStr += st_1;\n                    for (var t in v.prototype)\n                        fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n                }\n            }\n            else\n                fnStr += st_1;\n        }\n        else\n            td[k] = v;\n    }\n    return [fnStr, td];\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n    var tl = [];\n    for (var k in v) {\n        if (v[k].buffer) {\n            tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n        }\n    }\n    return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n    var _a;\n    if (!ch[id]) {\n        var fnStr = '', td_1 = {}, m = fns.length - 1;\n        for (var i = 0; i < m; ++i)\n            _a = wcln(fns[i], fnStr, td_1), fnStr = _a[0], td_1 = _a[1];\n        ch[id] = wcln(fns[m], fnStr, td_1);\n    }\n    var td = mrg({}, ch[id][1]);\n    return node_worker_1[\"default\"](ch[id][0] + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, u32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gu8]; };\nvar bDflt = function () { return [u8, u16, u32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zlv]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get u8\nvar gu8 = function (o) { return o && o.size && new u8(o.size); };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n    var w = wrkr(fns, init, id, function (err, dat) {\n        w.terminate();\n        cb(err, dat);\n    });\n    w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n    return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n    strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n    return function (ev) { return strm.push(ev.data[0], ev.data[1]); };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id) {\n    var t;\n    var w = wrkr(fns, init, id, function (err, dat) {\n        if (err)\n            w.terminate(), strm.ondata.call(strm, err);\n        else {\n            if (dat[1])\n                w.terminate();\n            strm.ondata.call(strm, err, dat[0], dat[1]);\n        }\n    });\n    w.postMessage(opts);\n    strm.push = function (d, f) {\n        if (!strm.ondata)\n            err(5);\n        if (t)\n            strm.ondata(err(4, 0, 1), null, !!f);\n        w.postMessage([d, t = f], [d.buffer]);\n    };\n    strm.terminate = function () { w.terminate(); };\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n    for (; v; ++b)\n        d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n    var fn = o.filename;\n    c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n    if (o.mtime != 0)\n        wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n    if (fn) {\n        c[3] = 8;\n        for (var i = 0; i <= fn.length; ++i)\n            c[i + 10] = fn.charCodeAt(i);\n    }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n    if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n        err(6, 'invalid gzip data');\n    var flg = d[3];\n    var st = 10;\n    if (flg & 4)\n        st += d[10] | (d[11] << 8) + 2;\n    for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n        ;\n    return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n    var l = d.length;\n    return ((d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16) | (d[l - 1] << 24)) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + ((o.filename && (o.filename.length + 1)) || 0); };\n// zlib header\nvar zlh = function (c, o) {\n    var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n    c[0] = 120, c[1] = (fl << 6) | (fl ? (32 - 2 * fl) : 1);\n};\n// zlib valid\nvar zlv = function (d) {\n    if ((d[0] & 15) != 8 || (d[0] >>> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n        err(6, 'invalid zlib data');\n    if (d[1] & 32)\n        err(6, 'invalid zlib data: preset dictionaries not supported');\n};\nfunction AsyncCmpStrm(opts, cb) {\n    if (!cb && typeof opts == 'function')\n        cb = opts, opts = {};\n    this.ondata = cb;\n    return opts;\n}\n// zlib footer: -4 to -0 is Adler32\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n    function Deflate(opts, cb) {\n        if (!cb && typeof opts == 'function')\n            cb = opts, opts = {};\n        this.ondata = cb;\n        this.o = opts || {};\n    }\n    Deflate.prototype.p = function (c, f) {\n        this.ondata(dopt(c, this.o, 0, 0, !f), f);\n    };\n    /**\n     * Pushes a chunk to be deflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Deflate.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        if (this.d)\n            err(4);\n        this.d = final;\n        this.p(chunk, final || false);\n    };\n    return Deflate;\n}());\nexports.Deflate = Deflate;\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n    function AsyncDeflate(opts, cb) {\n        astrmify([\n            bDflt,\n            function () { return [astrm, Deflate]; }\n        ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n            var strm = new Deflate(ev.data);\n            onmessage = astrm(strm);\n        }, 6);\n    }\n    return AsyncDeflate;\n}());\nexports.AsyncDeflate = AsyncDeflate;\nfunction deflate(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bDflt,\n    ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\nexports.deflate = deflate;\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nfunction deflateSync(data, opts) {\n    return dopt(data, opts || {}, 0, 0);\n}\nexports.deflateSync = deflateSync;\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates an inflation stream\n     * @param cb The callback to call whenever data is inflated\n     */\n    function Inflate(cb) {\n        this.s = {};\n        this.p = new u8(0);\n        this.ondata = cb;\n    }\n    Inflate.prototype.e = function (c) {\n        if (!this.ondata)\n            err(5);\n        if (this.d)\n            err(4);\n        var l = this.p.length;\n        var n = new u8(l + c.length);\n        n.set(this.p), n.set(c, l), this.p = n;\n    };\n    Inflate.prototype.c = function (final) {\n        this.d = this.s.i = final || false;\n        var bts = this.s.b;\n        var dt = inflt(this.p, this.o, this.s);\n        this.ondata(slc(dt, bts, this.s.b), this.d);\n        this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n        this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n    };\n    /**\n     * Pushes a chunk to be inflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the final chunk\n     */\n    Inflate.prototype.push = function (chunk, final) {\n        this.e(chunk), this.c(final);\n    };\n    return Inflate;\n}());\nexports.Inflate = Inflate;\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates an asynchronous inflation stream\n     * @param cb The callback to call whenever data is deflated\n     */\n    function AsyncInflate(cb) {\n        this.ondata = cb;\n        astrmify([\n            bInflt,\n            function () { return [astrm, Inflate]; }\n        ], this, 0, function () {\n            var strm = new Inflate();\n            onmessage = astrm(strm);\n        }, 7);\n    }\n    return AsyncInflate;\n}());\nexports.AsyncInflate = AsyncInflate;\nfunction inflate(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bInflt\n    ], function (ev) { return pbf(inflateSync(ev.data[0], gu8(ev.data[1]))); }, 1, cb);\n}\nexports.inflate = inflate;\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nfunction inflateSync(data, out) {\n    return inflt(data, out);\n}\nexports.inflateSync = inflateSync;\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n    function Gzip(opts, cb) {\n        this.c = crc();\n        this.l = 0;\n        this.v = 1;\n        Deflate.call(this, opts, cb);\n    }\n    /**\n     * Pushes a chunk to be GZIPped\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Gzip.prototype.push = function (chunk, final) {\n        Deflate.prototype.push.call(this, chunk, final);\n    };\n    Gzip.prototype.p = function (c, f) {\n        this.c.p(c);\n        this.l += c.length;\n        var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, !f);\n        if (this.v)\n            gzh(raw, this.o), this.v = 0;\n        if (f)\n            wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n        this.ondata(raw, f);\n    };\n    return Gzip;\n}());\nexports.Gzip = Gzip;\nexports.Compress = Gzip;\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n    function AsyncGzip(opts, cb) {\n        astrmify([\n            bDflt,\n            gze,\n            function () { return [astrm, Deflate, Gzip]; }\n        ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n            var strm = new Gzip(ev.data);\n            onmessage = astrm(strm);\n        }, 8);\n    }\n    return AsyncGzip;\n}());\nexports.AsyncGzip = AsyncGzip;\nexports.AsyncCompress = AsyncGzip;\nfunction gzip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bDflt,\n        gze,\n        function () { return [gzipSync]; }\n    ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\nexports.gzip = gzip;\nexports.compress = gzip;\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nfunction gzipSync(data, opts) {\n    if (!opts)\n        opts = {};\n    var c = crc(), l = data.length;\n    c.p(data);\n    var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n    return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\nexports.gzipSync = gzipSync;\nexports.compressSync = gzipSync;\n/**\n * Streaming GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n    /**\n     * Creates a GUNZIP stream\n     * @param cb The callback to call whenever data is inflated\n     */\n    function Gunzip(cb) {\n        this.v = 1;\n        Inflate.call(this, cb);\n    }\n    /**\n     * Pushes a chunk to be GUNZIPped\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Gunzip.prototype.push = function (chunk, final) {\n        Inflate.prototype.e.call(this, chunk);\n        if (this.v) {\n            var s = this.p.length > 3 ? gzs(this.p) : 4;\n            if (s >= this.p.length && !final)\n                return;\n            this.p = this.p.subarray(s), this.v = 0;\n        }\n        if (final) {\n            if (this.p.length < 8)\n                err(6, 'invalid gzip data');\n            this.p = this.p.subarray(0, -8);\n        }\n        // necessary to prevent TS from using the closure value\n        // This allows for workerization to function correctly\n        Inflate.prototype.c.call(this, final);\n    };\n    return Gunzip;\n}());\nexports.Gunzip = Gunzip;\n/**\n * Asynchronous streaming GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n    /**\n     * Creates an asynchronous GUNZIP stream\n     * @param cb The callback to call whenever data is deflated\n     */\n    function AsyncGunzip(cb) {\n        this.ondata = cb;\n        astrmify([\n            bInflt,\n            guze,\n            function () { return [astrm, Inflate, Gunzip]; }\n        ], this, 0, function () {\n            var strm = new Gunzip();\n            onmessage = astrm(strm);\n        }, 9);\n    }\n    return AsyncGunzip;\n}());\nexports.AsyncGunzip = AsyncGunzip;\nfunction gunzip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bInflt,\n        guze,\n        function () { return [gunzipSync]; }\n    ], function (ev) { return pbf(gunzipSync(ev.data[0])); }, 3, cb);\n}\nexports.gunzip = gunzip;\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param out Where to write the data. GZIP already encodes the output size, so providing this doesn't save memory.\n * @returns The decompressed version of the data\n */\nfunction gunzipSync(data, out) {\n    return inflt(data.subarray(gzs(data), -8), out || new u8(gzl(data)));\n}\nexports.gunzipSync = gunzipSync;\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n    function Zlib(opts, cb) {\n        this.c = adler();\n        this.v = 1;\n        Deflate.call(this, opts, cb);\n    }\n    /**\n     * Pushes a chunk to be zlibbed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Zlib.prototype.push = function (chunk, final) {\n        Deflate.prototype.push.call(this, chunk, final);\n    };\n    Zlib.prototype.p = function (c, f) {\n        this.c.p(c);\n        var raw = dopt(c, this.o, this.v && 2, f && 4, !f);\n        if (this.v)\n            zlh(raw, this.o), this.v = 0;\n        if (f)\n            wbytes(raw, raw.length - 4, this.c.d());\n        this.ondata(raw, f);\n    };\n    return Zlib;\n}());\nexports.Zlib = Zlib;\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n    function AsyncZlib(opts, cb) {\n        astrmify([\n            bDflt,\n            zle,\n            function () { return [astrm, Deflate, Zlib]; }\n        ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n            var strm = new Zlib(ev.data);\n            onmessage = astrm(strm);\n        }, 10);\n    }\n    return AsyncZlib;\n}());\nexports.AsyncZlib = AsyncZlib;\nfunction zlib(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bDflt,\n        zle,\n        function () { return [zlibSync]; }\n    ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\nexports.zlib = zlib;\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nfunction zlibSync(data, opts) {\n    if (!opts)\n        opts = {};\n    var a = adler();\n    a.p(data);\n    var d = dopt(data, opts, 2, 4);\n    return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\nexports.zlibSync = zlibSync;\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n    /**\n     * Creates a Zlib decompression stream\n     * @param cb The callback to call whenever data is inflated\n     */\n    function Unzlib(cb) {\n        this.v = 1;\n        Inflate.call(this, cb);\n    }\n    /**\n     * Pushes a chunk to be unzlibbed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Unzlib.prototype.push = function (chunk, final) {\n        Inflate.prototype.e.call(this, chunk);\n        if (this.v) {\n            if (this.p.length < 2 && !final)\n                return;\n            this.p = this.p.subarray(2), this.v = 0;\n        }\n        if (final) {\n            if (this.p.length < 4)\n                err(6, 'invalid zlib data');\n            this.p = this.p.subarray(0, -4);\n        }\n        // necessary to prevent TS from using the closure value\n        // This allows for workerization to function correctly\n        Inflate.prototype.c.call(this, final);\n    };\n    return Unzlib;\n}());\nexports.Unzlib = Unzlib;\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n    /**\n     * Creates an asynchronous Zlib decompression stream\n     * @param cb The callback to call whenever data is deflated\n     */\n    function AsyncUnzlib(cb) {\n        this.ondata = cb;\n        astrmify([\n            bInflt,\n            zule,\n            function () { return [astrm, Inflate, Unzlib]; }\n        ], this, 0, function () {\n            var strm = new Unzlib();\n            onmessage = astrm(strm);\n        }, 11);\n    }\n    return AsyncUnzlib;\n}());\nexports.AsyncUnzlib = AsyncUnzlib;\nfunction unzlib(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return cbify(data, opts, [\n        bInflt,\n        zule,\n        function () { return [unzlibSync]; }\n    ], function (ev) { return pbf(unzlibSync(ev.data[0], gu8(ev.data[1]))); }, 5, cb);\n}\nexports.unzlib = unzlib;\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nfunction unzlibSync(data, out) {\n    return inflt((zlv(data), data.subarray(2, -4)), out);\n}\nexports.unzlibSync = unzlibSync;\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n    /**\n     * Creates a decompression stream\n     * @param cb The callback to call whenever data is decompressed\n     */\n    function Decompress(cb) {\n        this.G = Gunzip;\n        this.I = Inflate;\n        this.Z = Unzlib;\n        this.ondata = cb;\n    }\n    /**\n     * Pushes a chunk to be decompressed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Decompress.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        if (!this.s) {\n            if (this.p && this.p.length) {\n                var n = new u8(this.p.length + chunk.length);\n                n.set(this.p), n.set(chunk, this.p.length);\n            }\n            else\n                this.p = chunk;\n            if (this.p.length > 2) {\n                var _this_1 = this;\n                var cb = function () { _this_1.ondata.apply(_this_1, arguments); };\n                this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n                    ? new this.G(cb)\n                    : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n                        ? new this.I(cb)\n                        : new this.Z(cb);\n                this.s.push(this.p, final);\n                this.p = null;\n            }\n        }\n        else\n            this.s.push(chunk, final);\n    };\n    return Decompress;\n}());\nexports.Decompress = Decompress;\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n    /**\n   * Creates an asynchronous decompression stream\n   * @param cb The callback to call whenever data is decompressed\n   */\n    function AsyncDecompress(cb) {\n        this.G = AsyncGunzip;\n        this.I = AsyncInflate;\n        this.Z = AsyncUnzlib;\n        this.ondata = cb;\n    }\n    /**\n     * Pushes a chunk to be decompressed\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    AsyncDecompress.prototype.push = function (chunk, final) {\n        Decompress.prototype.push.call(this, chunk, final);\n    };\n    return AsyncDecompress;\n}());\nexports.AsyncDecompress = AsyncDecompress;\nfunction decompress(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n        ? gunzip(data, opts, cb)\n        : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n            ? inflate(data, opts, cb)\n            : unzlib(data, opts, cb);\n}\nexports.decompress = decompress;\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nfunction decompressSync(data, out) {\n    return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n        ? gunzipSync(data, out)\n        : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n            ? inflateSync(data, out)\n            : unzlibSync(data, out);\n}\nexports.decompressSync = decompressSync;\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n    for (var k in d) {\n        var val = d[k], n = p + k, op = o;\n        if (Array.isArray(val))\n            op = mrg(o, val[1]), val = val[0];\n        if (val instanceof u8)\n            t[n] = [val, op];\n        else {\n            t[n += '/'] = [new u8(0), op];\n            fltn(val, n, t, o);\n        }\n    }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n    td.decode(et, { stream: true });\n    tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n    for (var r = '', i = 0;;) {\n        var c = d[i++];\n        var eb = (c > 127) + (c > 223) + (c > 239);\n        if (i + eb > d.length)\n            return [r, slc(d, i - 1)];\n        if (!eb)\n            r += String.fromCharCode(c);\n        else if (eb == 3) {\n            c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n                r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n        }\n        else if (eb & 1)\n            r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n        else\n            r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n    }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n    /**\n     * Creates a UTF-8 decoding stream\n     * @param cb The callback to call whenever data is decoded\n     */\n    function DecodeUTF8(cb) {\n        this.ondata = cb;\n        if (tds)\n            this.t = new TextDecoder();\n        else\n            this.p = et;\n    }\n    /**\n     * Pushes a chunk to be decoded from UTF-8 binary\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    DecodeUTF8.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        final = !!final;\n        if (this.t) {\n            this.ondata(this.t.decode(chunk, { stream: true }), final);\n            if (final) {\n                if (this.t.decode().length)\n                    err(8);\n                this.t = null;\n            }\n            return;\n        }\n        if (!this.p)\n            err(4);\n        var dat = new u8(this.p.length + chunk.length);\n        dat.set(this.p);\n        dat.set(chunk, this.p.length);\n        var _a = dutf8(dat), ch = _a[0], np = _a[1];\n        if (final) {\n            if (np.length)\n                err(8);\n            this.p = null;\n        }\n        else\n            this.p = np;\n        this.ondata(ch, final);\n    };\n    return DecodeUTF8;\n}());\nexports.DecodeUTF8 = DecodeUTF8;\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n    /**\n     * Creates a UTF-8 decoding stream\n     * @param cb The callback to call whenever data is encoded\n     */\n    function EncodeUTF8(cb) {\n        this.ondata = cb;\n    }\n    /**\n     * Pushes a chunk to be encoded to UTF-8\n     * @param chunk The string data to push\n     * @param final Whether this is the last chunk\n     */\n    EncodeUTF8.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        if (this.d)\n            err(4);\n        this.ondata(strToU8(chunk), this.d = final || false);\n    };\n    return EncodeUTF8;\n}());\nexports.EncodeUTF8 = EncodeUTF8;\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n *               not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nfunction strToU8(str, latin1) {\n    if (latin1) {\n        var ar_1 = new u8(str.length);\n        for (var i = 0; i < str.length; ++i)\n            ar_1[i] = str.charCodeAt(i);\n        return ar_1;\n    }\n    if (te)\n        return te.encode(str);\n    var l = str.length;\n    var ar = new u8(str.length + (str.length >> 1));\n    var ai = 0;\n    var w = function (v) { ar[ai++] = v; };\n    for (var i = 0; i < l; ++i) {\n        if (ai + 5 > ar.length) {\n            var n = new u8(ai + 8 + ((l - i) << 1));\n            n.set(ar);\n            ar = n;\n        }\n        var c = str.charCodeAt(i);\n        if (c < 128 || latin1)\n            w(c);\n        else if (c < 2048)\n            w(192 | (c >> 6)), w(128 | (c & 63));\n        else if (c > 55295 && c < 57344)\n            c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n                w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n        else\n            w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n    }\n    return slc(ar, 0, ai);\n}\nexports.strToU8 = strToU8;\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n *               not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nfunction strFromU8(dat, latin1) {\n    if (latin1) {\n        var r = '';\n        for (var i = 0; i < dat.length; i += 16384)\n            r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n        return r;\n    }\n    else if (td)\n        return td.decode(dat);\n    else {\n        var _a = dutf8(dat), out = _a[0], ext = _a[1];\n        if (ext.length)\n            err(8);\n        return out;\n    }\n}\nexports.strFromU8 = strFromU8;\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n    var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);\n    var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n    return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n    for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n        ;\n    return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];\n};\n// extra field length\nvar exfl = function (ex) {\n    var le = 0;\n    if (ex) {\n        for (var k in ex) {\n            var l = ex[k].length;\n            if (l > 65535)\n                err(9);\n            le += l + 4;\n        }\n    }\n    return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n    var fl = fn.length, ex = f.extra, col = co && co.length;\n    var exl = exfl(ex);\n    wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n    if (ce != null)\n        d[b++] = 20, d[b++] = f.os;\n    d[b] = 20, b += 2; // spec compliance? what's that?\n    d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n    d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n    var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n    if (y < 0 || y > 119)\n        err(10);\n    wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >>> 1)), b += 4;\n    if (c != -1) {\n        wbytes(d, b, f.crc);\n        wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n        wbytes(d, b + 8, f.size);\n    }\n    wbytes(d, b + 12, fl);\n    wbytes(d, b + 14, exl), b += 16;\n    if (ce != null) {\n        wbytes(d, b, col);\n        wbytes(d, b + 6, f.attrs);\n        wbytes(d, b + 10, ce), b += 14;\n    }\n    d.set(fn, b);\n    b += fl;\n    if (exl) {\n        for (var k in ex) {\n            var exf = ex[k], l = exf.length;\n            wbytes(d, b, +k);\n            wbytes(d, b + 2, l);\n            d.set(exf, b + 4), b += 4 + l;\n        }\n    }\n    if (col)\n        d.set(co, b), b += col;\n    return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n    wbytes(o, b, 0x6054B50); // skip disk\n    wbytes(o, b + 8, c);\n    wbytes(o, b + 10, c);\n    wbytes(o, b + 12, d);\n    wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n    /**\n     * Creates a pass-through stream that can be added to ZIP archives\n     * @param filename The filename to associate with this data stream\n     */\n    function ZipPassThrough(filename) {\n        this.filename = filename;\n        this.c = crc();\n        this.size = 0;\n        this.compression = 0;\n    }\n    /**\n     * Processes a chunk and pushes to the output stream. You can override this\n     * method in a subclass for custom behavior, but by default this passes\n     * the data through. You must call this.ondata(err, chunk, final) at some\n     * point in this method.\n     * @param chunk The chunk to process\n     * @param final Whether this is the last chunk\n     */\n    ZipPassThrough.prototype.process = function (chunk, final) {\n        this.ondata(null, chunk, final);\n    };\n    /**\n     * Pushes a chunk to be added. If you are subclassing this with a custom\n     * compression algorithm, note that you must push data from the source\n     * file only, pre-compression.\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    ZipPassThrough.prototype.push = function (chunk, final) {\n        if (!this.ondata)\n            err(5);\n        this.c.p(chunk);\n        this.size += chunk.length;\n        if (final)\n            this.crc = this.c.d();\n        this.process(chunk, final || false);\n    };\n    return ZipPassThrough;\n}());\nexports.ZipPassThrough = ZipPassThrough;\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates a DEFLATE stream that can be added to ZIP archives\n     * @param filename The filename to associate with this data stream\n     * @param opts The compression options\n     */\n    function ZipDeflate(filename, opts) {\n        var _this_1 = this;\n        if (!opts)\n            opts = {};\n        ZipPassThrough.call(this, filename);\n        this.d = new Deflate(opts, function (dat, final) {\n            _this_1.ondata(null, dat, final);\n        });\n        this.compression = 8;\n        this.flag = dbf(opts.level);\n    }\n    ZipDeflate.prototype.process = function (chunk, final) {\n        try {\n            this.d.push(chunk, final);\n        }\n        catch (e) {\n            this.ondata(e, null, final);\n        }\n    };\n    /**\n     * Pushes a chunk to be deflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    ZipDeflate.prototype.push = function (chunk, final) {\n        ZipPassThrough.prototype.push.call(this, chunk, final);\n    };\n    return ZipDeflate;\n}());\nexports.ZipDeflate = ZipDeflate;\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates a DEFLATE stream that can be added to ZIP archives\n     * @param filename The filename to associate with this data stream\n     * @param opts The compression options\n     */\n    function AsyncZipDeflate(filename, opts) {\n        var _this_1 = this;\n        if (!opts)\n            opts = {};\n        ZipPassThrough.call(this, filename);\n        this.d = new AsyncDeflate(opts, function (err, dat, final) {\n            _this_1.ondata(err, dat, final);\n        });\n        this.compression = 8;\n        this.flag = dbf(opts.level);\n        this.terminate = this.d.terminate;\n    }\n    AsyncZipDeflate.prototype.process = function (chunk, final) {\n        this.d.push(chunk, final);\n    };\n    /**\n     * Pushes a chunk to be deflated\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    AsyncZipDeflate.prototype.push = function (chunk, final) {\n        ZipPassThrough.prototype.push.call(this, chunk, final);\n    };\n    return AsyncZipDeflate;\n}());\nexports.AsyncZipDeflate = AsyncZipDeflate;\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n    /**\n     * Creates an empty ZIP archive to which files can be added\n     * @param cb The callback to call whenever data for the generated ZIP archive\n     *           is available\n     */\n    function Zip(cb) {\n        this.ondata = cb;\n        this.u = [];\n        this.d = 1;\n    }\n    /**\n     * Adds a file to the ZIP archive\n     * @param file The file stream to add\n     */\n    Zip.prototype.add = function (file) {\n        var _this_1 = this;\n        if (!this.ondata)\n            err(5);\n        // finishing or finished\n        if (this.d & 2)\n            this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n        else {\n            var f = strToU8(file.filename), fl_1 = f.length;\n            var com = file.comment, o = com && strToU8(com);\n            var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n            var hl_1 = fl_1 + exfl(file.extra) + 30;\n            if (fl_1 > 65535)\n                this.ondata(err(11, 0, 1), null, false);\n            var header = new u8(hl_1);\n            wzh(header, 0, file, f, u, -1);\n            var chks_1 = [header];\n            var pAll_1 = function () {\n                for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n                    var chk = chks_2[_i];\n                    _this_1.ondata(null, chk, false);\n                }\n                chks_1 = [];\n            };\n            var tr_1 = this.d;\n            this.d = 0;\n            var ind_1 = this.u.length;\n            var uf_1 = mrg(file, {\n                f: f,\n                u: u,\n                o: o,\n                t: function () {\n                    if (file.terminate)\n                        file.terminate();\n                },\n                r: function () {\n                    pAll_1();\n                    if (tr_1) {\n                        var nxt = _this_1.u[ind_1 + 1];\n                        if (nxt)\n                            nxt.r();\n                        else\n                            _this_1.d = 1;\n                    }\n                    tr_1 = 1;\n                }\n            });\n            var cl_1 = 0;\n            file.ondata = function (err, dat, final) {\n                if (err) {\n                    _this_1.ondata(err, dat, final);\n                    _this_1.terminate();\n                }\n                else {\n                    cl_1 += dat.length;\n                    chks_1.push(dat);\n                    if (final) {\n                        var dd = new u8(16);\n                        wbytes(dd, 0, 0x8074B50);\n                        wbytes(dd, 4, file.crc);\n                        wbytes(dd, 8, cl_1);\n                        wbytes(dd, 12, file.size);\n                        chks_1.push(dd);\n                        uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n                        if (tr_1)\n                            uf_1.r();\n                        tr_1 = 1;\n                    }\n                    else if (tr_1)\n                        pAll_1();\n                }\n            };\n            this.u.push(uf_1);\n        }\n    };\n    /**\n     * Ends the process of adding files and prepares to emit the final chunks.\n     * This *must* be called after adding all desired files for the resulting\n     * ZIP file to work properly.\n     */\n    Zip.prototype.end = function () {\n        var _this_1 = this;\n        if (this.d & 2) {\n            this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n            return;\n        }\n        if (this.d)\n            this.e();\n        else\n            this.u.push({\n                r: function () {\n                    if (!(_this_1.d & 1))\n                        return;\n                    _this_1.u.splice(-1, 1);\n                    _this_1.e();\n                },\n                t: function () { }\n            });\n        this.d = 3;\n    };\n    Zip.prototype.e = function () {\n        var bt = 0, l = 0, tl = 0;\n        for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n            var f = _a[_i];\n            tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n        }\n        var out = new u8(tl + 22);\n        for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n            var f = _c[_b];\n            wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n            bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n        }\n        wzf(out, bt, this.u.length, tl, l);\n        this.ondata(null, out, true);\n        this.d = 2;\n    };\n    /**\n     * A method to terminate any internal workers used by the stream. Subsequent\n     * calls to add() will fail.\n     */\n    Zip.prototype.terminate = function () {\n        for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n            var f = _a[_i];\n            f.t();\n        }\n        this.d = 2;\n    };\n    return Zip;\n}());\nexports.Zip = Zip;\nfunction zip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    var r = {};\n    fltn(data, '', r, opts);\n    var k = Object.keys(r);\n    var lft = k.length, o = 0, tot = 0;\n    var slft = lft, files = new Array(lft);\n    var term = [];\n    var tAll = function () {\n        for (var i = 0; i < term.length; ++i)\n            term[i]();\n    };\n    var cbd = function (a, b) {\n        mt(function () { cb(a, b); });\n    };\n    mt(function () { cbd = cb; });\n    var cbf = function () {\n        var out = new u8(tot + 22), oe = o, cdl = tot - o;\n        tot = 0;\n        for (var i = 0; i < slft; ++i) {\n            var f = files[i];\n            try {\n                var l = f.c.length;\n                wzh(out, tot, f, f.f, f.u, l);\n                var badd = 30 + f.f.length + exfl(f.extra);\n                var loc = tot + badd;\n                out.set(f.c, loc);\n                wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n            }\n            catch (e) {\n                return cbd(e, null);\n            }\n        }\n        wzf(out, o, files.length, cdl, oe);\n        cbd(null, out);\n    };\n    if (!lft)\n        cbf();\n    var _loop_1 = function (i) {\n        var fn = k[i];\n        var _a = r[fn], file = _a[0], p = _a[1];\n        var c = crc(), size = file.length;\n        c.p(file);\n        var f = strToU8(fn), s = f.length;\n        var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n        var exl = exfl(p.extra);\n        var compression = p.level == 0 ? 0 : 8;\n        var cbl = function (e, d) {\n            if (e) {\n                tAll();\n                cbd(e, null);\n            }\n            else {\n                var l = d.length;\n                files[i] = mrg(p, {\n                    size: size,\n                    crc: c.d(),\n                    c: d,\n                    f: f,\n                    m: m,\n                    u: s != fn.length || (m && (com.length != ms)),\n                    compression: compression\n                });\n                o += 30 + s + exl + l;\n                tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n                if (!--lft)\n                    cbf();\n            }\n        };\n        if (s > 65535)\n            cbl(err(11, 0, 1), null);\n        if (!compression)\n            cbl(null, file);\n        else if (size < 160000) {\n            try {\n                cbl(null, deflateSync(file, p));\n            }\n            catch (e) {\n                cbl(e, null);\n            }\n        }\n        else\n            term.push(deflate(file, p, cbl));\n    };\n    // Cannot use lft because it can decrease\n    for (var i = 0; i < slft; ++i) {\n        _loop_1(i);\n    }\n    return tAll;\n}\nexports.zip = zip;\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nfunction zipSync(data, opts) {\n    if (!opts)\n        opts = {};\n    var r = {};\n    var files = [];\n    fltn(data, '', r, opts);\n    var o = 0;\n    var tot = 0;\n    for (var fn in r) {\n        var _a = r[fn], file = _a[0], p = _a[1];\n        var compression = p.level == 0 ? 0 : 8;\n        var f = strToU8(fn), s = f.length;\n        var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n        var exl = exfl(p.extra);\n        if (s > 65535)\n            err(11);\n        var d = compression ? deflateSync(file, p) : file, l = d.length;\n        var c = crc();\n        c.p(file);\n        files.push(mrg(p, {\n            size: file.length,\n            crc: c.d(),\n            c: d,\n            f: f,\n            m: m,\n            u: s != fn.length || (m && (com.length != ms)),\n            o: o,\n            compression: compression\n        }));\n        o += 30 + s + exl + l;\n        tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n    }\n    var out = new u8(tot + 22), oe = o, cdl = tot - o;\n    for (var i = 0; i < files.length; ++i) {\n        var f = files[i];\n        wzh(out, f.o, f, f.f, f.u, f.c.length);\n        var badd = 30 + f.f.length + exfl(f.extra);\n        out.set(f.c, f.o + badd);\n        wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n    }\n    wzf(out, o, files.length, cdl, oe);\n    return out;\n}\nexports.zipSync = zipSync;\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n    function UnzipPassThrough() {\n    }\n    UnzipPassThrough.prototype.push = function (data, final) {\n        this.ondata(null, data, final);\n    };\n    UnzipPassThrough.compression = 0;\n    return UnzipPassThrough;\n}());\nexports.UnzipPassThrough = UnzipPassThrough;\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates a DEFLATE decompression that can be used in ZIP archives\n     */\n    function UnzipInflate() {\n        var _this_1 = this;\n        this.i = new Inflate(function (dat, final) {\n            _this_1.ondata(null, dat, final);\n        });\n    }\n    UnzipInflate.prototype.push = function (data, final) {\n        try {\n            this.i.push(data, final);\n        }\n        catch (e) {\n            this.ondata(e, null, final);\n        }\n    };\n    UnzipInflate.compression = 8;\n    return UnzipInflate;\n}());\nexports.UnzipInflate = UnzipInflate;\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n    /**\n     * Creates a DEFLATE decompression that can be used in ZIP archives\n     */\n    function AsyncUnzipInflate(_, sz) {\n        var _this_1 = this;\n        if (sz < 320000) {\n            this.i = new Inflate(function (dat, final) {\n                _this_1.ondata(null, dat, final);\n            });\n        }\n        else {\n            this.i = new AsyncInflate(function (err, dat, final) {\n                _this_1.ondata(err, dat, final);\n            });\n            this.terminate = this.i.terminate;\n        }\n    }\n    AsyncUnzipInflate.prototype.push = function (data, final) {\n        if (this.i.terminate)\n            data = slc(data, 0);\n        this.i.push(data, final);\n    };\n    AsyncUnzipInflate.compression = 8;\n    return AsyncUnzipInflate;\n}());\nexports.AsyncUnzipInflate = AsyncUnzipInflate;\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n    /**\n     * Creates a ZIP decompression stream\n     * @param cb The callback to call whenever a file in the ZIP archive is found\n     */\n    function Unzip(cb) {\n        this.onfile = cb;\n        this.k = [];\n        this.o = {\n            0: UnzipPassThrough\n        };\n        this.p = et;\n    }\n    /**\n     * Pushes a chunk to be unzipped\n     * @param chunk The chunk to push\n     * @param final Whether this is the last chunk\n     */\n    Unzip.prototype.push = function (chunk, final) {\n        var _this_1 = this;\n        if (!this.onfile)\n            err(5);\n        if (!this.p)\n            err(4);\n        if (this.c > 0) {\n            var len = Math.min(this.c, chunk.length);\n            var toAdd = chunk.subarray(0, len);\n            this.c -= len;\n            if (this.d)\n                this.d.push(toAdd, !this.c);\n            else\n                this.k[0].push(toAdd);\n            chunk = chunk.subarray(len);\n            if (chunk.length)\n                return this.push(chunk, final);\n        }\n        else {\n            var f = 0, i = 0, is = void 0, buf = void 0;\n            if (!this.p.length)\n                buf = chunk;\n            else if (!chunk.length)\n                buf = this.p;\n            else {\n                buf = new u8(this.p.length + chunk.length);\n                buf.set(this.p), buf.set(chunk, this.p.length);\n            }\n            var l = buf.length, oc = this.c, add = oc && this.d;\n            var _loop_2 = function () {\n                var _a;\n                var sig = b4(buf, i);\n                if (sig == 0x4034B50) {\n                    f = 1, is = i;\n                    this_1.d = null;\n                    this_1.c = 0;\n                    var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n                    if (l > i + 30 + fnl + es) {\n                        var chks_3 = [];\n                        this_1.k.unshift(chks_3);\n                        f = 2;\n                        var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);\n                        var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n                        if (sc_1 == 4294967295) {\n                            _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];\n                        }\n                        else if (dd)\n                            sc_1 = -1;\n                        i += es;\n                        this_1.c = sc_1;\n                        var d_1;\n                        var file_1 = {\n                            name: fn_1,\n                            compression: cmp_1,\n                            start: function () {\n                                if (!file_1.ondata)\n                                    err(5);\n                                if (!sc_1)\n                                    file_1.ondata(null, et, true);\n                                else {\n                                    var ctr = _this_1.o[cmp_1];\n                                    if (!ctr)\n                                        file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n                                    d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n                                    d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n                                    for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n                                        var dat = chks_4[_i];\n                                        d_1.push(dat, false);\n                                    }\n                                    if (_this_1.k[0] == chks_3 && _this_1.c)\n                                        _this_1.d = d_1;\n                                    else\n                                        d_1.push(et, true);\n                                }\n                            },\n                            terminate: function () {\n                                if (d_1 && d_1.terminate)\n                                    d_1.terminate();\n                            }\n                        };\n                        if (sc_1 >= 0)\n                            file_1.size = sc_1, file_1.originalSize = su_1;\n                        this_1.onfile(file_1);\n                    }\n                    return \"break\";\n                }\n                else if (oc) {\n                    if (sig == 0x8074B50) {\n                        is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n                        return \"break\";\n                    }\n                    else if (sig == 0x2014B50) {\n                        is = i -= 4, f = 3, this_1.c = 0;\n                        return \"break\";\n                    }\n                }\n            };\n            var this_1 = this;\n            for (; i < l - 4; ++i) {\n                var state_1 = _loop_2();\n                if (state_1 === \"break\")\n                    break;\n            }\n            this.p = et;\n            if (oc < 0) {\n                var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n                if (add)\n                    add.push(dat, !!f);\n                else\n                    this.k[+(f == 2)].push(dat);\n            }\n            if (f & 2)\n                return this.push(buf.subarray(i), final);\n            this.p = buf.subarray(i);\n        }\n        if (final) {\n            if (this.c)\n                err(13);\n            this.p = null;\n        }\n    };\n    /**\n     * Registers a decoder with the stream, allowing for files compressed with\n     * the compression type provided to be expanded correctly\n     * @param decoder The decoder constructor\n     */\n    Unzip.prototype.register = function (decoder) {\n        this.o[decoder.compression] = decoder;\n    };\n    return Unzip;\n}());\nexports.Unzip = Unzip;\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nfunction unzip(data, opts, cb) {\n    if (!cb)\n        cb = opts, opts = {};\n    if (typeof cb != 'function')\n        err(7);\n    var term = [];\n    var tAll = function () {\n        for (var i = 0; i < term.length; ++i)\n            term[i]();\n    };\n    var files = {};\n    var cbd = function (a, b) {\n        mt(function () { cb(a, b); });\n    };\n    mt(function () { cbd = cb; });\n    var e = data.length - 22;\n    for (; b4(data, e) != 0x6054B50; --e) {\n        if (!e || data.length - e > 65558) {\n            cbd(err(13, 0, 1), null);\n            return tAll;\n        }\n    }\n    ;\n    var lft = b2(data, e + 8);\n    if (lft) {\n        var c = lft;\n        var o = b4(data, e + 16);\n        var z = o == 4294967295 || c == 65535;\n        if (z) {\n            var ze = b4(data, e - 12);\n            z = b4(data, ze) == 0x6064B50;\n            if (z) {\n                c = lft = b4(data, ze + 32);\n                o = b4(data, ze + 48);\n            }\n        }\n        var fltr = opts && opts.filter;\n        var _loop_3 = function (i) {\n            var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n            o = no;\n            var cbl = function (e, d) {\n                if (e) {\n                    tAll();\n                    cbd(e, null);\n                }\n                else {\n                    if (d)\n                        files[fn] = d;\n                    if (!--lft)\n                        cbd(null, files);\n                }\n            };\n            if (!fltr || fltr({\n                name: fn,\n                size: sc,\n                originalSize: su,\n                compression: c_1\n            })) {\n                if (!c_1)\n                    cbl(null, slc(data, b, b + sc));\n                else if (c_1 == 8) {\n                    var infl = data.subarray(b, b + sc);\n                    if (sc < 320000) {\n                        try {\n                            cbl(null, inflateSync(infl, new u8(su)));\n                        }\n                        catch (e) {\n                            cbl(e, null);\n                        }\n                    }\n                    else\n                        term.push(inflate(infl, { size: su }, cbl));\n                }\n                else\n                    cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n            }\n            else\n                cbl(null, null);\n        };\n        for (var i = 0; i < c; ++i) {\n            _loop_3(i);\n        }\n    }\n    else\n        cbd(null, {});\n    return tAll;\n}\nexports.unzip = unzip;\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nfunction unzipSync(data, opts) {\n    var files = {};\n    var e = data.length - 22;\n    for (; b4(data, e) != 0x6054B50; --e) {\n        if (!e || data.length - e > 65558)\n            err(13);\n    }\n    ;\n    var c = b2(data, e + 8);\n    if (!c)\n        return {};\n    var o = b4(data, e + 16);\n    var z = o == 4294967295 || c == 65535;\n    if (z) {\n        var ze = b4(data, e - 12);\n        z = b4(data, ze) == 0x6064B50;\n        if (z) {\n            c = b4(data, ze + 32);\n            o = b4(data, ze + 48);\n        }\n    }\n    var fltr = opts && opts.filter;\n    for (var i = 0; i < c; ++i) {\n        var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n        o = no;\n        if (!fltr || fltr({\n            name: fn,\n            size: sc,\n            originalSize: su,\n            compression: c_2\n        })) {\n            if (!c_2)\n                files[fn] = slc(data, b, b + sc);\n            else if (c_2 == 8)\n                files[fn] = inflateSync(data.subarray(b, b + sc), new u8(su));\n            else\n                err(14, 'unknown compression type ' + c_2);\n        }\n    }\n    return files;\n}\nexports.unzipSync = unzipSync;\n","\"use strict\";\nvar ch2 = {};\nexports[\"default\"] = (function (c, id, msg, transfer, cb) {\n    var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([\n        c + ';addEventListener(\"error\",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'\n    ], { type: 'text/javascript' }))));\n    w.onmessage = function (e) {\n        var d = e.data, ed = d.$e$;\n        if (ed) {\n            var err = new Error(ed[0]);\n            err['code'] = ed[1];\n            err.stack = ed[2];\n            cb(err, null);\n        }\n        else\n            cb(null, d);\n    };\n    w.postMessage(msg, transfer);\n    return w;\n});\n","\n//#region src/storages/globalConfig/globalConfig.ts\nlet store$4;\nconst DEFAULT_CONFIG = {\n\tlang: void 0,\n\tmessage: void 0,\n\tabortEarly: void 0,\n\tabortPipeEarly: void 0\n};\n/**\n* Sets the global configuration.\n*\n* @param config The configuration.\n*/\nfunction setGlobalConfig(config$1) {\n\tstore$4 = {\n\t\t...store$4,\n\t\t...config$1\n\t};\n}\n/**\n* Returns the global configuration.\n*\n* @param config The config to merge.\n*\n* @returns The configuration.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getGlobalConfig(config$1) {\n\tif (!config$1 && !store$4) return DEFAULT_CONFIG;\n\treturn {\n\t\tlang: config$1?.lang ?? store$4?.lang,\n\t\tmessage: config$1?.message,\n\t\tabortEarly: config$1?.abortEarly ?? store$4?.abortEarly,\n\t\tabortPipeEarly: config$1?.abortPipeEarly ?? store$4?.abortPipeEarly\n\t};\n}\n/**\n* Deletes the global configuration.\n*/\nfunction deleteGlobalConfig() {\n\tstore$4 = void 0;\n}\n\n//#endregion\n//#region src/storages/globalMessage/globalMessage.ts\nlet store$3;\n/**\n* Sets a global error message.\n*\n* @param message The error message.\n* @param lang The language of the message.\n*/\nfunction setGlobalMessage(message$1, lang) {\n\tif (!store$3) store$3 = /* @__PURE__ */ new Map();\n\tstore$3.set(lang, message$1);\n}\n/**\n* Returns a global error message.\n*\n* @param lang The language of the message.\n*\n* @returns The error message.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getGlobalMessage(lang) {\n\treturn store$3?.get(lang);\n}\n/**\n* Deletes a global error message.\n*\n* @param lang The language of the message.\n*/\nfunction deleteGlobalMessage(lang) {\n\tstore$3?.delete(lang);\n}\n\n//#endregion\n//#region src/storages/schemaMessage/schemaMessage.ts\nlet store$2;\n/**\n* Sets a schema error message.\n*\n* @param message The error message.\n* @param lang The language of the message.\n*/\nfunction setSchemaMessage(message$1, lang) {\n\tif (!store$2) store$2 = /* @__PURE__ */ new Map();\n\tstore$2.set(lang, message$1);\n}\n/**\n* Returns a schema error message.\n*\n* @param lang The language of the message.\n*\n* @returns The error message.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getSchemaMessage(lang) {\n\treturn store$2?.get(lang);\n}\n/**\n* Deletes a schema error message.\n*\n* @param lang The language of the message.\n*/\nfunction deleteSchemaMessage(lang) {\n\tstore$2?.delete(lang);\n}\n\n//#endregion\n//#region src/storages/specificMessage/specificMessage.ts\nlet store$1;\n/**\n* Sets a specific error message.\n*\n* @param reference The identifier reference.\n* @param message The error message.\n* @param lang The language of the message.\n*/\nfunction setSpecificMessage(reference, message$1, lang) {\n\tif (!store$1) store$1 = /* @__PURE__ */ new Map();\n\tif (!store$1.get(reference)) store$1.set(reference, /* @__PURE__ */ new Map());\n\tstore$1.get(reference).set(lang, message$1);\n}\n/**\n* Returns a specific error message.\n*\n* @param reference The identifier reference.\n* @param lang The language of the message.\n*\n* @returns The error message.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getSpecificMessage(reference, lang) {\n\treturn store$1?.get(reference)?.get(lang);\n}\n/**\n* Deletes a specific error message.\n*\n* @param reference The identifier reference.\n* @param lang The language of the message.\n*/\nfunction deleteSpecificMessage(reference, lang) {\n\tstore$1?.get(reference)?.delete(lang);\n}\n\n//#endregion\n//#region src/utils/_stringify/_stringify.ts\n/**\n* Stringifies an unknown input to a literal or type string.\n*\n* @param input The unknown input.\n*\n* @returns A literal or type string.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _stringify(input) {\n\tconst type = typeof input;\n\tif (type === \"string\") return `\"${input}\"`;\n\tif (type === \"number\" || type === \"bigint\" || type === \"boolean\") return `${input}`;\n\tif (type === \"object\" || type === \"function\") return (input && Object.getPrototypeOf(input)?.constructor?.name) ?? \"null\";\n\treturn type;\n}\n\n//#endregion\n//#region src/utils/_addIssue/_addIssue.ts\n/**\n* Adds an issue to the dataset.\n*\n* @param context The issue context.\n* @param label The issue label.\n* @param dataset The input dataset.\n* @param config The configuration.\n* @param other The optional props.\n*\n* @internal\n*/\nfunction _addIssue(context, label, dataset, config$1, other) {\n\tconst input = other && \"input\" in other ? other.input : dataset.value;\n\tconst expected = other?.expected ?? context.expects ?? null;\n\tconst received = other?.received ?? /* @__PURE__ */ _stringify(input);\n\tconst issue = {\n\t\tkind: context.kind,\n\t\ttype: context.type,\n\t\tinput,\n\t\texpected,\n\t\treceived,\n\t\tmessage: `Invalid ${label}: ${expected ? `Expected ${expected} but r` : \"R\"}eceived ${received}`,\n\t\trequirement: context.requirement,\n\t\tpath: other?.path,\n\t\tissues: other?.issues,\n\t\tlang: config$1.lang,\n\t\tabortEarly: config$1.abortEarly,\n\t\tabortPipeEarly: config$1.abortPipeEarly\n\t};\n\tconst isSchema = context.kind === \"schema\";\n\tconst message$1 = other?.message ?? context.message ?? /* @__PURE__ */ getSpecificMessage(context.reference, issue.lang) ?? (isSchema ? /* @__PURE__ */ getSchemaMessage(issue.lang) : null) ?? config$1.message ?? /* @__PURE__ */ getGlobalMessage(issue.lang);\n\tif (message$1 !== void 0) issue.message = typeof message$1 === \"function\" ? message$1(issue) : message$1;\n\tif (isSchema) dataset.typed = false;\n\tif (dataset.issues) dataset.issues.push(issue);\n\telse dataset.issues = [issue];\n}\n\n//#endregion\n//#region src/utils/_cloneDataset/_cloneDataset.ts\n/**\n* Creates a shallow copy of a dataset.\n*\n* Hint: The `value` is copied by reference, but the `issues` array is cloned\n* to avoid reusing mutable dataset state across multiple runs. Mutating a\n* returned object or array value can therefore affect later cache hits that\n* reuse the same cached output.\n*\n* @param dataset The output dataset.\n*\n* @returns The copied output dataset.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _cloneDataset(dataset) {\n\treturn {\n\t\ttyped: dataset.typed,\n\t\tvalue: dataset.value,\n\t\tissues: dataset.issues && [...dataset.issues]\n\t};\n}\n\n//#endregion\n//#region src/utils/_formatCase/_formatCase.ts\n/**\n* Splits a string into lowercase words and rejoins them with the given\n* separator and capitalization rules.\n*\n* Words are separated by `_`, `-` and ASCII whitespace, as well as by case\n* and acronym boundaries. Whether the first or subsequent words are\n* capitalized is controlled by `capFirst` and `capRest`.\n*\n* Hint: Implemented in a single pass that emits directly to the result\n* string to avoid an intermediate `string[]` allocation. ASCII chars are\n* classified via char codes to skip `.toLowerCase()` and `.toUpperCase()`\n* method calls in the common case.\n*\n* Hint: Digits are treated as a separate character class, so `item2Name`\n* yields `item2` and `name` rather than `item`, `2` and `name`.\n*\n* @param input The input string.\n* @param separator The string inserted between words.\n* @param capFirst Whether to capitalize the first word.\n* @param capRest Whether to capitalize subsequent words.\n*\n* @returns The formatted string.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _formatCase(input, separator, capFirst, capRest) {\n\tlet result = \"\";\n\tlet firstWord = true;\n\tlet start = 0;\n\tlet prev = 0;\n\tlet prevPrev = 0;\n\tconst flush = (end) => {\n\t\tif (end > start) {\n\t\t\tlet word = input.slice(start, end).toLowerCase();\n\t\t\tif (firstWord ? capFirst : capRest) {\n\t\t\t\tconst firstCode = word.charCodeAt(0);\n\t\t\t\tif (firstCode >= 97 && firstCode <= 122) word = String.fromCharCode(firstCode - 32) + word.slice(1);\n\t\t\t\telse {\n\t\t\t\t\tconst charLen = firstCode >= 55296 && firstCode <= 56319 ? 2 : 1;\n\t\t\t\t\tword = word.slice(0, charLen).toUpperCase() + word.slice(charLen);\n\t\t\t\t}\n\t\t\t}\n\t\t\tresult += firstWord ? word : separator + word;\n\t\t\tfirstWord = false;\n\t\t}\n\t};\n\tfor (let index = 0; index < input.length; index++) {\n\t\tconst code = input.charCodeAt(index);\n\t\tlet type;\n\t\tif (code === 32 || code === 9 || code === 10 || code === 11 || code === 12 || code === 13 || code === 45 || code === 95) {\n\t\t\tflush(index);\n\t\t\tstart = index + 1;\n\t\t\ttype = 0;\n\t\t} else if (code < 128) type = code >= 65 && code <= 90 ? 1 : code >= 97 && code <= 122 ? 2 : 3;\n\t\telse {\n\t\t\tconst char = input[index];\n\t\t\tconst charLower = char.toLowerCase();\n\t\t\ttype = charLower === char.toUpperCase() ? 3 : char === charLower ? 2 : 1;\n\t\t}\n\t\tif (type === 1 && (prev === 2 || prev === 3) && index > start) {\n\t\t\tflush(index);\n\t\t\tstart = index;\n\t\t} else if (type === 2 && prev === 1 && prevPrev === 1 && index - 1 > start) {\n\t\t\tflush(index - 1);\n\t\t\tstart = index - 1;\n\t\t}\n\t\tprevPrev = prev;\n\t\tprev = type;\n\t}\n\tflush(input.length);\n\treturn result;\n}\n\n//#endregion\n//#region src/utils/_getByteCount/_getByteCount.ts\nlet textEncoder;\n/**\n* Returns the byte count of the input.\n*\n* @param input The input to be measured.\n*\n* @returns The byte count.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _getByteCount(input) {\n\tif (!textEncoder) textEncoder = new TextEncoder();\n\treturn textEncoder.encode(input).length;\n}\n\n//#endregion\n//#region src/utils/_getGraphemeCount/_getGraphemeCount.ts\nlet segmenter;\n/**\n* Returns the grapheme count of the input.\n*\n* @param input The input to be measured.\n*\n* @returns The grapheme count.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _getGraphemeCount(input) {\n\tif (!segmenter) segmenter = new Intl.Segmenter();\n\tconst segments = segmenter.segment(input);\n\tlet count = 0;\n\tfor (const _ of segments) count++;\n\treturn count;\n}\n\n//#endregion\n//#region src/utils/_getLastMetadata/_getLastMetadata.ts\n/**\n* Returns the last top-level value of a given metadata type from a schema\n* using a breadth-first search that starts with the last item in the pipeline.\n*\n* @param schema The schema to search.\n* @param type The metadata type.\n*\n* @returns The value, if any.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _getLastMetadata(schema, type) {\n\tif (\"pipe\" in schema) {\n\t\tconst nestedSchemas = [];\n\t\tfor (let index = schema.pipe.length - 1; index >= 0; index--) {\n\t\t\tconst item = schema.pipe[index];\n\t\t\tif (item.kind === \"schema\" && \"pipe\" in item) nestedSchemas.push(item);\n\t\t\telse if (item.kind === \"metadata\" && item.type === type) return item[type];\n\t\t}\n\t\tfor (const nestedSchema of nestedSchemas) {\n\t\t\tconst result = /* @__PURE__ */ _getLastMetadata(nestedSchema, type);\n\t\t\tif (result !== void 0) return result;\n\t\t}\n\t}\n}\n\n//#endregion\n//#region src/utils/_getStandardProps/_getStandardProps.ts\nconst _standardCache = /* @__PURE__ */ new WeakMap();\n/**\n* Returns the Standard Schema properties.\n*\n* @param context The schema context.\n*\n* @returns The Standard Schema properties.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _getStandardProps(context) {\n\tlet cached = _standardCache.get(context);\n\tif (!cached) {\n\t\tcached = {\n\t\t\tversion: 1,\n\t\t\tvendor: \"valibot\",\n\t\t\tvalidate(value$1) {\n\t\t\t\treturn context[\"~run\"]({ value: value$1 }, /* @__PURE__ */ getGlobalConfig());\n\t\t\t}\n\t\t};\n\t\t_standardCache.set(context, cached);\n\t}\n\treturn cached;\n}\n\n//#endregion\n//#region src/utils/_getWordCount/_getWordCount.ts\nlet store;\n/**\n* Returns the word count of the input.\n*\n* @param locales The locales to be used.\n* @param input The input to be measured.\n*\n* @returns The word count.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _getWordCount(locales, input) {\n\tif (!store) store = /* @__PURE__ */ new Map();\n\tif (!store.get(locales)) store.set(locales, new Intl.Segmenter(locales, { granularity: \"word\" }));\n\tconst segments = store.get(locales).segment(input);\n\tlet count = 0;\n\tfor (const segment of segments) if (segment.isWordLike) count++;\n\treturn count;\n}\n\n//#endregion\n//#region src/utils/_isLuhnAlgo/_isLuhnAlgo.ts\n/**\n* Non-digit regex.\n*/\nconst NON_DIGIT_REGEX = /\\D/gu;\n/**\n* Checks whether a string with numbers corresponds to the luhn algorithm.\n*\n* @param input The input to be checked.\n*\n* @returns Whether input is valid.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _isLuhnAlgo(input) {\n\tconst number$1 = input.replace(NON_DIGIT_REGEX, \"\");\n\tlet length$1 = number$1.length;\n\tlet bit = 1;\n\tlet sum = 0;\n\twhile (length$1) {\n\t\tconst value$1 = +number$1[--length$1];\n\t\tbit ^= 1;\n\t\tsum += bit ? [\n\t\t\t0,\n\t\t\t2,\n\t\t\t4,\n\t\t\t6,\n\t\t\t8,\n\t\t\t1,\n\t\t\t3,\n\t\t\t5,\n\t\t\t7,\n\t\t\t9\n\t\t][value$1] : value$1;\n\t}\n\treturn sum % 10 === 0;\n}\n\n//#endregion\n//#region src/utils/_isValidObjectKey/_isValidObjectKey.ts\n/**\n* Disallows inherited object properties and prevents object prototype\n* pollution by disallowing certain keys.\n*\n* @param object The object to check.\n* @param key The key to check.\n*\n* @returns Whether the key is allowed.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _isValidObjectKey(object$1, key) {\n\treturn Object.prototype.hasOwnProperty.call(object$1, key) && key !== \"__proto__\" && key !== \"prototype\" && key !== \"constructor\";\n}\n\n//#endregion\n//#region src/utils/_joinExpects/_joinExpects.ts\n/**\n* Joins multiple `expects` values with the given separator.\n*\n* @param values The `expects` values.\n* @param separator The separator.\n*\n* @returns The joined `expects` property.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _joinExpects(values$1, separator) {\n\tconst list = [...new Set(values$1)];\n\tif (list.length > 1) return `(${list.join(` ${separator} `)})`;\n\treturn list[0] ?? \"never\";\n}\n\n//#endregion\n//#region src/utils/entriesFromList/entriesFromList.ts\n/**\n* Creates an object entries definition from a list of keys and a schema.\n*\n* @param list A list of keys.\n* @param schema The schema of the keys.\n*\n* @returns The object entries.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction entriesFromList(list, schema) {\n\tconst entries$1 = {};\n\tfor (const key of list) entries$1[key] = schema;\n\treturn entries$1;\n}\n\n//#endregion\n//#region src/utils/entriesFromObjects/entriesFromObjects.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction entriesFromObjects(schemas) {\n\tconst entries$1 = {};\n\tfor (const schema of schemas) Object.assign(entries$1, schema.entries);\n\treturn entries$1;\n}\n\n//#endregion\n//#region src/utils/getDotPath/getDotPath.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction getDotPath(issue) {\n\tif (issue.path) {\n\t\tlet key = \"\";\n\t\tfor (const item of issue.path) if (typeof item.key === \"string\" || typeof item.key === \"number\") if (key) key += `.${item.key}`;\n\t\telse key += item.key;\n\t\telse return null;\n\t\treturn key;\n\t}\n\treturn null;\n}\n\n//#endregion\n//#region src/utils/isOfKind/isOfKind.ts\n/**\n* A generic type guard to check the kind of an object.\n*\n* @param kind The kind to check for.\n* @param object The object to check.\n*\n* @returns Whether it matches.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isOfKind(kind, object$1) {\n\treturn object$1.kind === kind;\n}\n\n//#endregion\n//#region src/utils/isOfType/isOfType.ts\n/**\n* A generic type guard to check the type of an object.\n*\n* @param type The type to check for.\n* @param object The object to check.\n*\n* @returns Whether it matches.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isOfType(type, object$1) {\n\treturn object$1.type === type;\n}\n\n//#endregion\n//#region src/utils/isValiError/isValiError.ts\n/**\n* A type guard to check if an error is a ValiError.\n*\n* @param error The error to check.\n*\n* @returns Whether its a ValiError.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction isValiError(error) {\n\treturn error instanceof ValiError;\n}\n\n//#endregion\n//#region src/utils/ValiError/ValiError.ts\n/**\n* A Valibot error with useful information.\n*/\nvar ValiError = class extends Error {\n\t/**\n\t* Creates a Valibot error with useful information.\n\t*\n\t* @param issues The error issues.\n\t*/\n\tconstructor(issues) {\n\t\tsuper(issues[0].message);\n\t\tthis.name = \"ValiError\";\n\t\tthis.issues = issues;\n\t}\n};\n\n//#endregion\n//#region src/actions/args/args.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction args(schema) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"args\",\n\t\treference: args,\n\t\tasync: false,\n\t\tschema,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst func = dataset.value;\n\t\t\tdataset.value = (...args_) => {\n\t\t\t\tconst argsDataset = this.schema[\"~run\"]({ value: args_ }, config$1);\n\t\t\t\tif (argsDataset.issues) throw new ValiError(argsDataset.issues);\n\t\t\t\treturn func(...argsDataset.value);\n\t\t\t};\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/args/argsAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction argsAsync(schema) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"args\",\n\t\treference: argsAsync,\n\t\tasync: false,\n\t\tschema,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst func = dataset.value;\n\t\t\tdataset.value = async (...args$1) => {\n\t\t\t\tconst argsDataset = await schema[\"~run\"]({ value: args$1 }, config$1);\n\t\t\t\tif (argsDataset.issues) throw new ValiError(argsDataset.issues);\n\t\t\t\treturn func(...argsDataset.value);\n\t\t\t};\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/await/awaitAsync.ts\n/**\n* Creates an await transformation action.\n*\n* @returns An await action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction awaitAsync() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"await\",\n\t\treference: awaitAsync,\n\t\tasync: true,\n\t\tasync \"~run\"(dataset) {\n\t\t\tdataset.value = await dataset.value;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/regex.ts\n/**\n* [Base64](https://en.wikipedia.org/wiki/Base64) regex.\n*/\nconst BASE64_REGEX = /^(?:[\\da-z+/]{4})*(?:[\\da-z+/]{2}==|[\\da-z+/]{3}=)?$/iu;\n/**\n* [BIC](https://en.wikipedia.org/wiki/ISO_9362) regex.\n*/\nconst BIC_REGEX = /^[A-Z]{6}(?!00)[\\dA-Z]{2}(?:[\\dA-Z]{3})?$/u;\n/**\n* [Cuid2](https://github.com/paralleldrive/cuid2) regex.\n*/\nconst CUID2_REGEX = /^[a-z][\\da-z]*$/u;\n/**\n* [Decimal](https://en.wikipedia.org/wiki/Decimal) regex.\n*/\nconst DECIMAL_REGEX = /^[+-]?(?:\\d*\\.)?\\d+$/u;\n/**\n* [Digits](https://en.wikipedia.org/wiki/Numerical_digit) regex.\n*/\nconst DIGITS_REGEX = /^\\d+$/u;\n/**\n* [Domain name](https://en.wikipedia.org/wiki/Domain_name) regex.\n*\n* Hint: We decided against the `i` flag for better JSON Schema compatibility.\n* ASCII-only validation. Internationalized domain names (IDNs) are not\n* supported, including Punycode-encoded labels.\n*/\nconst DOMAIN_REGEX = /^(?=.{1,253}$)(?:(?![Xx][Nn]--)[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)+[A-Za-z]{2,63}$/u;\n/**\n* [Email address](https://en.wikipedia.org/wiki/Email_address) regex.\n*/\nconst EMAIL_REGEX = /^[\\w+-]+(?:\\.[\\w+-]+)*@[\\da-z]+(?:[.-][\\da-z]+)*\\.[a-z]{2,}$/iu;\n/**\n* Emoji regex from [emoji-regex-xs](https://github.com/slevithan/emoji-regex-xs) v1.0.0 (MIT license).\n*\n* Hint: We decided against the newer `/^\\p{RGI_Emoji}+$/v` regex because it is\n* not supported in older runtimes and does not match all emoji.\n*/\nconst EMOJI_REGEX = /^(?:[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|(?![\\p{Emoji_Modifier_Base}\\u{1F1E6}-\\u{1F1FF}])\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|(?![\\p{Emoji_Modifier_Base}\\u{1F1E6}-\\u{1F1FF}])\\p{Emoji_Presentation}))*)+$/u;\n/**\n* [Hexadecimal](https://en.wikipedia.org/wiki/Hexadecimal) regex.\n*\n* Hint: We decided against the `i` flag for better JSON Schema compatibility.\n*/\nconst HEXADECIMAL_REGEX = /^(?:0[hx])?[\\da-fA-F]+$/u;\n/**\n* [Hex color](https://en.wikipedia.org/wiki/Web_colors#Hex_triplet) regex.\n*\n* Hint: We decided against the `i` flag for better JSON Schema compatibility.\n*/\nconst HEX_COLOR_REGEX = /^#(?:[\\da-fA-F]{3,4}|[\\da-fA-F]{6}|[\\da-fA-F]{8})$/u;\n/**\n* [IMEI](https://en.wikipedia.org/wiki/International_Mobile_Equipment_Identity) regex.\n*/\nconst IMEI_REGEX = /^\\d{15}$|^\\d{2}-\\d{6}-\\d{6}-\\d$/u;\n/**\n* [IPv4](https://en.wikipedia.org/wiki/IPv4) regex.\n*/\nconst IPV4_REGEX = /^(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])(?:\\.(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])){3}$/u;\n/**\n* [IPv6](https://en.wikipedia.org/wiki/IPv6) regex.\n*/\nconst IPV6_REGEX = /^(?:(?:[\\da-f]{1,4}:){7}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,7}:|(?:[\\da-f]{1,4}:){1,6}:[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,5}(?::[\\da-f]{1,4}){1,2}|(?:[\\da-f]{1,4}:){1,4}(?::[\\da-f]{1,4}){1,3}|(?:[\\da-f]{1,4}:){1,3}(?::[\\da-f]{1,4}){1,4}|(?:[\\da-f]{1,4}:){1,2}(?::[\\da-f]{1,4}){1,5}|[\\da-f]{1,4}:(?::[\\da-f]{1,4}){1,6}|:(?:(?::[\\da-f]{1,4}){1,7}|:)|fe80:(?::[\\da-f]{0,4}){0,4}%[\\da-z]+|::(?:f{4}(?::0{1,4})?:)?(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)|(?:[\\da-f]{1,4}:){1,4}:(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d))$/iu;\n/**\n* [IP](https://en.wikipedia.org/wiki/IP_address) regex.\n*/\nconst IP_REGEX = /^(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])(?:\\.(?:(?:[1-9]|1\\d|2[0-4])?\\d|25[0-5])){3}$|^(?:(?:[\\da-f]{1,4}:){7}[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,7}:|(?:[\\da-f]{1,4}:){1,6}:[\\da-f]{1,4}|(?:[\\da-f]{1,4}:){1,5}(?::[\\da-f]{1,4}){1,2}|(?:[\\da-f]{1,4}:){1,4}(?::[\\da-f]{1,4}){1,3}|(?:[\\da-f]{1,4}:){1,3}(?::[\\da-f]{1,4}){1,4}|(?:[\\da-f]{1,4}:){1,2}(?::[\\da-f]{1,4}){1,5}|[\\da-f]{1,4}:(?::[\\da-f]{1,4}){1,6}|:(?:(?::[\\da-f]{1,4}){1,7}|:)|fe80:(?::[\\da-f]{0,4}){0,4}%[\\da-z]+|::(?:f{4}(?::0{1,4})?:)?(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)|(?:[\\da-f]{1,4}:){1,4}:(?:(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d)\\.){3}(?:25[0-5]|(?:2[0-4]|1?\\d)?\\d))$/iu;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date regex.\n*/\nconst ISO_DATE_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])$/u;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time regex.\n*/\nconst ISO_DATE_TIME_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])[T ](?:0\\d|1\\d|2[0-3]):[0-5]\\d$/u;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) date-time with seconds regex.\n*/\nconst ISO_DATE_TIME_SECOND_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])[T ](?:0\\d|1\\d|2[0-3])(?::[0-5]\\d){2}$/u;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) time regex.\n*/\nconst ISO_TIME_REGEX = /^(?:0\\d|1\\d|2[0-3]):[0-5]\\d$/u;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) time with seconds regex.\n*/\nconst ISO_TIME_SECOND_REGEX = /^(?:0\\d|1\\d|2[0-3])(?::[0-5]\\d){2}$/u;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) timestamp regex. Allows a\n* space as a date/time separator and an optional space before the UTC offset.\n*/\nconst ISO_TIMESTAMP_REGEX = /^\\d{4}-(?:0[1-9]|1[0-2])-(?:[12]\\d|0[1-9]|3[01])[T ](?:0\\d|1\\d|2[0-3])(?::[0-5]\\d){2}(?:\\.\\d{1,9})?(?:Z| ?[+-](?:0\\d|1\\d|2[0-3])(?::?[0-5]\\d)?)$/u;\n/**\n* [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) week regex.\n*/\nconst ISO_WEEK_REGEX = /^\\d{4}-W(?:0[1-9]|[1-4]\\d|5[0-3])$/u;\n/**\n* [JWS compact serialization](https://datatracker.ietf.org/doc/html/rfc7515#section-3.1)\n* regex.\n*\n* Hint: Empty payload and signature segments are allowed because the\n* Base64URL-encoded representation of an empty octet sequence is an empty\n* string.\n*/\nconst JWS_COMPACT_REGEX = /^(?:[\\w-]{2,3}|(?:[\\w-]{4})+(?:[\\w-]{2,3})?)\\.(?:[\\w-]{2,3}|(?:[\\w-]{4})+(?:[\\w-]{2,3})?)?\\.(?:[\\w-]{2,3}|(?:[\\w-]{4})+(?:[\\w-]{2,3})?)?$/u;\n/**\n* [ISRC](https://en.wikipedia.org/wiki/International_Standard_Recording_Code) regex.\n*/\nconst ISRC_REGEX = /^(?:[A-Z]{2}[A-Z\\d]{3}\\d{7}|[A-Z]{2}-[A-Z\\d]{3}-\\d{2}-\\d{5})$/u;\n/**\n* [MAC](https://en.wikipedia.org/wiki/MAC_address) 48 bit regex.\n*\n* Hint: We decided against the `i` flag for better JSON Schema compatibility.\n*/\nconst MAC48_REGEX = /^(?:[\\da-fA-F]{2}:){5}[\\da-fA-F]{2}$|^(?:[\\da-fA-F]{2}-){5}[\\da-fA-F]{2}$|^(?:[\\da-fA-F]{4}\\.){2}[\\da-fA-F]{4}$/u;\n/**\n* [MAC](https://en.wikipedia.org/wiki/MAC_address) 64 bit regex.\n*\n* Hint: We decided against the `i` flag for better JSON Schema compatibility.\n*/\nconst MAC64_REGEX = /^(?:[\\da-fA-F]{2}:){7}[\\da-fA-F]{2}$|^(?:[\\da-fA-F]{2}-){7}[\\da-fA-F]{2}$|^(?:[\\da-fA-F]{4}\\.){3}[\\da-fA-F]{4}$|^(?:[\\da-fA-F]{4}:){3}[\\da-fA-F]{4}$/u;\n/**\n* [MAC](https://en.wikipedia.org/wiki/MAC_address) regex.\n*\n* Hint: We decided against the `i` flag for better JSON Schema compatibility.\n*/\nconst MAC_REGEX = /^(?:[\\da-fA-F]{2}:){5}[\\da-fA-F]{2}$|^(?:[\\da-fA-F]{2}-){5}[\\da-fA-F]{2}$|^(?:[\\da-fA-F]{4}\\.){2}[\\da-fA-F]{4}$|^(?:[\\da-fA-F]{2}:){7}[\\da-fA-F]{2}$|^(?:[\\da-fA-F]{2}-){7}[\\da-fA-F]{2}$|^(?:[\\da-fA-F]{4}\\.){3}[\\da-fA-F]{4}$|^(?:[\\da-fA-F]{4}:){3}[\\da-fA-F]{4}$/u;\n/**\n* [Nano ID](https://github.com/ai/nanoid) regex.\n*/\nconst NANO_ID_REGEX = /^[\\w-]+$/u;\n/**\n* [Octal](https://en.wikipedia.org/wiki/Octal) regex.\n*/\nconst OCTAL_REGEX = /^(?:0o)?[0-7]+$/u;\n/**\n* [RFC 5322 email address](https://datatracker.ietf.org/doc/html/rfc5322#section-3.4.1) regex.\n*\n* Hint: This regex was taken from the [HTML Living Standard Specification](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address) and does not perfectly represent RFC 5322.\n*/\nconst RFC_EMAIL_REGEX = /^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/**\n* [Slug](https://en.wikipedia.org/wiki/Clean_URL#Slug) regex.\n*/\nconst SLUG_REGEX = /^[\\da-z]+(?:[-_][\\da-z]+)*$/u;\n/**\n* [ULID](https://github.com/ulid/spec) regex.\n*\n* Hint: We decided against the `i` flag for better JSON Schema compatibility.\n*/\nconst ULID_REGEX = /^[\\da-hjkmnp-tv-zA-HJKMNP-TV-Z]{26}$/u;\n/**\n* [UUID](https://en.wikipedia.org/wiki/Universally_unique_identifier) regex.\n*/\nconst UUID_REGEX = /^[\\da-f]{8}(?:-[\\da-f]{4}){3}-[\\da-f]{12}$/iu;\n\n//#endregion\n//#region src/actions/base64/base64.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction base64(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"base64\",\n\t\treference: base64,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: BASE64_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"Base64\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/bic/bic.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction bic(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"bic\",\n\t\treference: bic,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: BIC_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"BIC\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/brand/brand.ts\n/**\n* Creates a brand transformation action.\n*\n* @param name The brand name.\n*\n* @returns A brand action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction brand(name) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"brand\",\n\t\treference: brand,\n\t\tasync: false,\n\t\tname,\n\t\t\"~run\"(dataset) {\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/bytes/bytes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction bytes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"bytes\",\n\t\treference: bytes,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst length$1 = /* @__PURE__ */ _getByteCount(dataset.value);\n\t\t\t\tif (length$1 !== this.requirement) _addIssue(this, \"bytes\", dataset, config$1, { received: `${length$1}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/check/check.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction check(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"check\",\n\t\treference: check,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"input\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/check/checkAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction checkAsync(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"check\",\n\t\treference: checkAsync,\n\t\tasync: true,\n\t\texpects: null,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !await this.requirement(dataset.value)) _addIssue(this, \"input\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/checkItems/checkItems.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction checkItems(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"check_items\",\n\t\treference: checkItems,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) for (let index = 0; index < dataset.value.length; index++) {\n\t\t\t\tconst item = dataset.value[index];\n\t\t\t\tif (!this.requirement(item, index, dataset.value)) _addIssue(this, \"item\", dataset, config$1, {\n\t\t\t\t\tinput: item,\n\t\t\t\t\tpath: [{\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\tinput: dataset.value,\n\t\t\t\t\t\tkey: index,\n\t\t\t\t\t\tvalue: item\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/checkItems/checkItemsAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction checkItemsAsync(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"check_items\",\n\t\treference: checkItemsAsync,\n\t\tasync: true,\n\t\texpects: null,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst requirementResults = await Promise.all(dataset.value.map(this.requirement));\n\t\t\t\tfor (let index = 0; index < dataset.value.length; index++) if (!requirementResults[index]) {\n\t\t\t\t\tconst item = dataset.value[index];\n\t\t\t\t\t_addIssue(this, \"item\", dataset, config$1, {\n\t\t\t\t\t\tinput: item,\n\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput: dataset.value,\n\t\t\t\t\t\t\tkey: index,\n\t\t\t\t\t\t\tvalue: item\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/creditCard/creditCard.ts\n/**\n* Credit card regex.\n*/\nconst CREDIT_CARD_REGEX = /^(?:\\d{13,19}|\\d{4}(?: \\d{3,6}){2,4}|\\d{4}(?:-\\d{3,6}){2,4})$/u;\n/**\n* Sanitize regex.\n*/\nconst SANITIZE_REGEX = /[- ]/gu;\n/**\n* Provider regex list.\n*/\nconst PROVIDER_REGEX_LIST = [\n\t/^3[47]\\d{13}$/u,\n\t/^3(?:0[0-5]|[68]\\d)\\d{11,13}$/u,\n\t/^6(?:011|5\\d{2})\\d{12,15}$/u,\n\t/^(?:2131|1800|35\\d{3})\\d{11}$/u,\n\t/^(?:5[1-5]\\d{2}|222\\d|22[3-9]\\d|2[3-6]\\d{2}|27[01]\\d|2720)\\d{12}$/u,\n\t/^(?:6[27]\\d{14,17}|81\\d{14,17})$/u,\n\t/^4\\d{12}(?:\\d{3,6})?$/u\n];\n/* @__NO_SIDE_EFFECTS__ */\nfunction creditCard(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"credit_card\",\n\t\treference: creditCard,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement(input) {\n\t\t\tlet sanitized;\n\t\t\treturn CREDIT_CARD_REGEX.test(input) && (sanitized = input.replace(SANITIZE_REGEX, \"\")) && PROVIDER_REGEX_LIST.some((regex$1) => regex$1.test(sanitized)) && /* @__PURE__ */ _isLuhnAlgo(sanitized);\n\t\t},\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"credit card\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/cuid2/cuid2.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction cuid2(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"cuid2\",\n\t\treference: cuid2,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: CUID2_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"Cuid2\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/decimal/decimal.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction decimal(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"decimal\",\n\t\treference: decimal,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: DECIMAL_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"decimal\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/description/description.ts\n/**\n* Creates a description metadata action.\n*\n* @param description_ The description text.\n*\n* @returns A description action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction description(description_) {\n\treturn {\n\t\tkind: \"metadata\",\n\t\ttype: \"description\",\n\t\treference: description,\n\t\tdescription: description_\n\t};\n}\n\n//#endregion\n//#region src/actions/digits/digits.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction digits(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"digits\",\n\t\treference: digits,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: DIGITS_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"digits\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/domain/domain.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction domain(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"domain\",\n\t\treference: domain,\n\t\texpects: null,\n\t\tasync: false,\n\t\trequirement: DOMAIN_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"domain\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/email/email.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction email(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"email\",\n\t\treference: email,\n\t\texpects: null,\n\t\tasync: false,\n\t\trequirement: EMAIL_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"email\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/emoji/emoji.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction emoji(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"emoji\",\n\t\treference: emoji,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: EMOJI_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"emoji\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/empty/empty.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction empty(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"empty\",\n\t\treference: empty,\n\t\tasync: false,\n\t\texpects: \"0\",\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.length > 0) _addIssue(this, \"length\", dataset, config$1, { received: `${dataset.value.length}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/endsWith/endsWith.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction endsWith(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"ends_with\",\n\t\treference: endsWith,\n\t\tasync: false,\n\t\texpects: `\"${requirement}\"`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !dataset.value.endsWith(this.requirement)) _addIssue(this, \"end\", dataset, config$1, { received: `\"${dataset.value.slice(-this.requirement.length)}\"` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/entries/entries.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction entries(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"entries\",\n\t\treference: entries,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (!dataset.typed) return dataset;\n\t\t\tconst count = Object.keys(dataset.value).length;\n\t\t\tif (dataset.typed && count !== this.requirement) _addIssue(this, \"entries\", dataset, config$1, { received: `${count}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/everyItem/everyItem.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction everyItem(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"every_item\",\n\t\treference: everyItem,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !dataset.value.every(this.requirement)) _addIssue(this, \"item\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/examples/examples.ts\n/**\n* Creates an examples metadata action.\n*\n* @param examples_ The examples.\n*\n* @returns An examples action.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction examples(examples_) {\n\treturn {\n\t\tkind: \"metadata\",\n\t\ttype: \"examples\",\n\t\treference: examples,\n\t\texamples: examples_\n\t};\n}\n\n//#endregion\n//#region src/actions/excludes/excludes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction excludes(requirement, message$1) {\n\tconst received = /* @__PURE__ */ _stringify(requirement);\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"excludes\",\n\t\treference: excludes,\n\t\tasync: false,\n\t\texpects: `!${received}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.includes(this.requirement)) _addIssue(this, \"content\", dataset, config$1, { received });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/filterItems/filterItems.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction filterItems(operation) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"filter_items\",\n\t\treference: filterItems,\n\t\tasync: false,\n\t\toperation,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.filter(this.operation);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/findItem/findItem.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction findItem(operation) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"find_item\",\n\t\treference: findItem,\n\t\tasync: false,\n\t\toperation,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.find(this.operation);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/finite/finite.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction finite(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"finite\",\n\t\treference: finite,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: Number.isFinite,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"finite\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/flavor/flavor.ts\n/**\n* Creates a flavor transformation action.\n*\n* @param name The flavor name.\n*\n* @returns A flavor action.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction flavor(name) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"flavor\",\n\t\treference: flavor,\n\t\tasync: false,\n\t\tname,\n\t\t\"~run\"(dataset) {\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/graphemes/graphemes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction graphemes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"graphemes\",\n\t\treference: graphemes,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getGraphemeCount(dataset.value);\n\t\t\t\tif (count !== this.requirement) _addIssue(this, \"graphemes\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/gtValue/gtValue.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction gtValue(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"gt_value\",\n\t\treference: gtValue,\n\t\tasync: false,\n\t\texpects: `>${requirement instanceof Date ? requirement.toJSON() : /* @__PURE__ */ _stringify(requirement)}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !(dataset.value > this.requirement)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/guard/guard.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction guard(requirement, message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"guard\",\n\t\treference: guard,\n\t\tasync: false,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) {\n\t\t\t\t_addIssue(this, \"input\", dataset, config$1);\n\t\t\t\tdataset.typed = false;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/hash/hash.ts\n/**\n* Hash lengths object.\n*/\nconst HASH_LENGTHS = {\n\tmd4: 32,\n\tmd5: 32,\n\tsha1: 40,\n\tsha256: 64,\n\tsha384: 96,\n\tsha512: 128,\n\tripemd128: 32,\n\tripemd160: 40,\n\ttiger128: 32,\n\ttiger160: 40,\n\ttiger192: 48,\n\tcrc32: 8,\n\tcrc32b: 8,\n\tadler32: 8\n};\n/* @__NO_SIDE_EFFECTS__ */\nfunction hash(types, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"hash\",\n\t\treference: hash,\n\t\texpects: null,\n\t\tasync: false,\n\t\trequirement: RegExp(types.map((type) => `^[a-fA-F0-9]{${HASH_LENGTHS[type]}}$`).join(\"|\"), \"u\"),\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"hash\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/hexadecimal/hexadecimal.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction hexadecimal(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"hexadecimal\",\n\t\treference: hexadecimal,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: HEXADECIMAL_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"hexadecimal\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/hexColor/hexColor.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction hexColor(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"hex_color\",\n\t\treference: hexColor,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: HEX_COLOR_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"hex color\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/imei/imei.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction imei(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"imei\",\n\t\treference: imei,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement(input) {\n\t\t\treturn IMEI_REGEX.test(input) && /* @__PURE__ */ _isLuhnAlgo(input);\n\t\t},\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"IMEI\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/includes/includes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction includes(requirement, message$1) {\n\tconst expects = /* @__PURE__ */ _stringify(requirement);\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"includes\",\n\t\treference: includes,\n\t\tasync: false,\n\t\texpects,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !dataset.value.includes(this.requirement)) _addIssue(this, \"content\", dataset, config$1, { received: `!${expects}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/integer/integer.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction integer(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"integer\",\n\t\treference: integer,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: Number.isInteger,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"integer\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/ip/ip.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction ip(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"ip\",\n\t\treference: ip,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: IP_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"IP\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/ipv4/ipv4.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction ipv4(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"ipv4\",\n\t\treference: ipv4,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: IPV4_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"IPv4\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/ipv6/ipv6.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction ipv6(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"ipv6\",\n\t\treference: ipv6,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: IPV6_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"IPv6\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isbn/utils/_isIsbn10.ts\n/**\n* [Validates an ISBN-10](https://en.wikipedia.org/wiki/ISBN#ISBN-10_check_digits).\n*\n* @param input The input value.\n*\n* @returns `true` if the input is a valid ISBN-10, `false` otherwise.\n*\n* @internal\n*/\nfunction _isIsbn10(input) {\n\tconst digits$1 = input.split(\"\").map((c) => c === \"X\" ? 10 : parseInt(c));\n\tlet sum = 0;\n\tfor (let i = 0; i < 10; i++) sum += digits$1[i] * (10 - i);\n\treturn sum % 11 === 0;\n}\n\n//#endregion\n//#region src/actions/isbn/utils/_isIsbn13.ts\n/**\n* [Validates an ISBN-13](https://en.wikipedia.org/wiki/ISBN#ISBN-13_check_digit_calculation).\n*\n* @param input The input value.\n*\n* @returns `true` if the input is a valid ISBN-13, `false` otherwise.\n*\n* @internal\n*/\nfunction _isIsbn13(input) {\n\tconst digits$1 = input.split(\"\").map((c) => parseInt(c));\n\tlet sum = 0;\n\tfor (let i = 0; i < 13; i++) sum += digits$1[i] * (i % 2 === 0 ? 1 : 3);\n\treturn sum % 10 === 0;\n}\n\n//#endregion\n//#region src/actions/isbn/isbn.ts\n/**\n* ISBN separator regex.\n*/\nconst ISBN_SEPARATOR_REGEX = /[- ]/gu;\n/**\n* ISBN-10 detection regex.\n*/\nconst ISBN_10_DETECTION_REGEX = /^\\d{9}[\\dX]$/u;\n/**\n* ISBN-13 detection regex.\n*/\nconst ISBN_13_DETECTION_REGEX = /^\\d{13}$/u;\n/* @__NO_SIDE_EFFECTS__ */\nfunction isbn(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"isbn\",\n\t\treference: isbn,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement(input) {\n\t\t\tconst replacedInput = input.replace(ISBN_SEPARATOR_REGEX, \"\");\n\t\t\tif (ISBN_10_DETECTION_REGEX.test(replacedInput)) return _isIsbn10(replacedInput);\n\t\t\telse if (ISBN_13_DETECTION_REGEX.test(replacedInput)) return _isIsbn13(replacedInput);\n\t\t\treturn false;\n\t\t},\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"ISBN\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isrc/isrc.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isrc(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"isrc\",\n\t\treference: isrc,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISRC_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"ISRC\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoDate/isoDate.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoDate(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_date\",\n\t\treference: isoDate,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_DATE_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"date\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoDateTime/isoDateTime.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoDateTime(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_date_time\",\n\t\treference: isoDateTime,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_DATE_TIME_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"date-time\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoDateTimeSecond/isoDateTimeSecond.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoDateTimeSecond(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_date_time_second\",\n\t\treference: isoDateTimeSecond,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_DATE_TIME_SECOND_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"date-time-second\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoTime/isoTime.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoTime(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_time\",\n\t\treference: isoTime,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_TIME_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"time\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoTimeSecond/isoTimeSecond.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoTimeSecond(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_time_second\",\n\t\treference: isoTimeSecond,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_TIME_SECOND_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"time-second\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoTimestamp/isoTimestamp.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoTimestamp(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_timestamp\",\n\t\treference: isoTimestamp,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_TIMESTAMP_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"timestamp\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/isoWeek/isoWeek.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction isoWeek(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"iso_week\",\n\t\treference: isoWeek,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ISO_WEEK_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"week\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/jwsCompact/jwsCompact.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction jwsCompact(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"jws_compact\",\n\t\treference: jwsCompact,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: JWS_COMPACT_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"JWS compact\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/length/length.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction length(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"length\",\n\t\treference: length,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.length !== this.requirement) _addIssue(this, \"length\", dataset, config$1, { received: `${dataset.value.length}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/ltValue/ltValue.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction ltValue(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"lt_value\",\n\t\treference: ltValue,\n\t\tasync: false,\n\t\texpects: `<${requirement instanceof Date ? requirement.toJSON() : /* @__PURE__ */ _stringify(requirement)}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !(dataset.value < this.requirement)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/mac/mac.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction mac(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"mac\",\n\t\treference: mac,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: MAC_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"MAC\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/mac48/mac48.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction mac48(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"mac48\",\n\t\treference: mac48,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: MAC48_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"48-bit MAC\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/mac64/mac64.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction mac64(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"mac64\",\n\t\treference: mac64,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: MAC64_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"64-bit MAC\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/mapItems/mapItems.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction mapItems(operation) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"map_items\",\n\t\treference: mapItems,\n\t\tasync: false,\n\t\toperation,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.map(this.operation);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxBytes/maxBytes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxBytes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_bytes\",\n\t\treference: maxBytes,\n\t\tasync: false,\n\t\texpects: `<=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst length$1 = /* @__PURE__ */ _getByteCount(dataset.value);\n\t\t\t\tif (length$1 > this.requirement) _addIssue(this, \"bytes\", dataset, config$1, { received: `${length$1}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxEntries/maxEntries.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxEntries(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_entries\",\n\t\treference: maxEntries,\n\t\tasync: false,\n\t\texpects: `<=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (!dataset.typed) return dataset;\n\t\t\tconst count = Object.keys(dataset.value).length;\n\t\t\tif (dataset.typed && count > this.requirement) _addIssue(this, \"entries\", dataset, config$1, { received: `${count}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxGraphemes/maxGraphemes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxGraphemes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_graphemes\",\n\t\treference: maxGraphemes,\n\t\tasync: false,\n\t\texpects: `<=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getGraphemeCount(dataset.value);\n\t\t\t\tif (count > this.requirement) _addIssue(this, \"graphemes\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxLength/maxLength.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxLength(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_length\",\n\t\treference: maxLength,\n\t\tasync: false,\n\t\texpects: `<=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.length > this.requirement) _addIssue(this, \"length\", dataset, config$1, { received: `${dataset.value.length}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxSize/maxSize.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxSize(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_size\",\n\t\treference: maxSize,\n\t\tasync: false,\n\t\texpects: `<=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.size > this.requirement) _addIssue(this, \"size\", dataset, config$1, { received: `${dataset.value.size}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxValue/maxValue.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxValue(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_value\",\n\t\treference: maxValue,\n\t\tasync: false,\n\t\texpects: `<=${requirement instanceof Date ? requirement.toJSON() : /* @__PURE__ */ _stringify(requirement)}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !(dataset.value <= this.requirement)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/maxWords/maxWords.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction maxWords(locales, requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"max_words\",\n\t\treference: maxWords,\n\t\tasync: false,\n\t\texpects: `<=${requirement}`,\n\t\tlocales,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getWordCount(this.locales, dataset.value);\n\t\t\t\tif (count > this.requirement) _addIssue(this, \"words\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/metadata/metadata.ts\n/**\n* Creates a custom metadata action.\n*\n* @param metadata_ The metadata object.\n*\n* @returns A metadata action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction metadata(metadata_) {\n\treturn {\n\t\tkind: \"metadata\",\n\t\ttype: \"metadata\",\n\t\treference: metadata,\n\t\tmetadata: metadata_\n\t};\n}\n\n//#endregion\n//#region src/actions/mimeType/mimeType.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction mimeType(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"mime_type\",\n\t\treference: mimeType,\n\t\tasync: false,\n\t\texpects: /* @__PURE__ */ _joinExpects(requirement.map((option) => `\"${option}\"`), \"|\"),\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.includes(dataset.value.type)) _addIssue(this, \"MIME type\", dataset, config$1, { received: `\"${dataset.value.type}\"` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minBytes/minBytes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minBytes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_bytes\",\n\t\treference: minBytes,\n\t\tasync: false,\n\t\texpects: `>=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst length$1 = /* @__PURE__ */ _getByteCount(dataset.value);\n\t\t\t\tif (length$1 < this.requirement) _addIssue(this, \"bytes\", dataset, config$1, { received: `${length$1}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minEntries/minEntries.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minEntries(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_entries\",\n\t\treference: minEntries,\n\t\tasync: false,\n\t\texpects: `>=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (!dataset.typed) return dataset;\n\t\t\tconst count = Object.keys(dataset.value).length;\n\t\t\tif (dataset.typed && count < this.requirement) _addIssue(this, \"entries\", dataset, config$1, { received: `${count}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minGraphemes/minGraphemes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minGraphemes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_graphemes\",\n\t\treference: minGraphemes,\n\t\tasync: false,\n\t\texpects: `>=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getGraphemeCount(dataset.value);\n\t\t\t\tif (count < this.requirement) _addIssue(this, \"graphemes\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minLength/minLength.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minLength(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_length\",\n\t\treference: minLength,\n\t\tasync: false,\n\t\texpects: `>=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.length < this.requirement) _addIssue(this, \"length\", dataset, config$1, { received: `${dataset.value.length}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minSize/minSize.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minSize(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_size\",\n\t\treference: minSize,\n\t\tasync: false,\n\t\texpects: `>=${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.size < this.requirement) _addIssue(this, \"size\", dataset, config$1, { received: `${dataset.value.size}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minValue/minValue.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minValue(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_value\",\n\t\treference: minValue,\n\t\tasync: false,\n\t\texpects: `>=${requirement instanceof Date ? requirement.toJSON() : /* @__PURE__ */ _stringify(requirement)}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !(dataset.value >= this.requirement)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/minWords/minWords.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction minWords(locales, requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"min_words\",\n\t\treference: minWords,\n\t\tasync: false,\n\t\texpects: `>=${requirement}`,\n\t\tlocales,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getWordCount(this.locales, dataset.value);\n\t\t\t\tif (count < this.requirement) _addIssue(this, \"words\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/multipleOf/multipleOf.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction multipleOf(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"multiple_of\",\n\t\treference: multipleOf,\n\t\tasync: false,\n\t\texpects: `%${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value % this.requirement != 0) _addIssue(this, \"multiple\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/nanoid/nanoid.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nanoid(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"nanoid\",\n\t\treference: nanoid,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: NANO_ID_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"Nano ID\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/nonEmpty/nonEmpty.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonEmpty(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"non_empty\",\n\t\treference: nonEmpty,\n\t\tasync: false,\n\t\texpects: \"!0\",\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.length === 0) _addIssue(this, \"length\", dataset, config$1, { received: \"0\" });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/normalize/normalize.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction normalize(form) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"normalize\",\n\t\treference: normalize,\n\t\tasync: false,\n\t\tform,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.normalize(this.form);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notBytes/notBytes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notBytes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_bytes\",\n\t\treference: notBytes,\n\t\tasync: false,\n\t\texpects: `!${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst length$1 = /* @__PURE__ */ _getByteCount(dataset.value);\n\t\t\t\tif (length$1 === this.requirement) _addIssue(this, \"bytes\", dataset, config$1, { received: `${length$1}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notEntries/notEntries.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notEntries(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_entries\",\n\t\treference: notEntries,\n\t\tasync: false,\n\t\texpects: `!${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (!dataset.typed) return dataset;\n\t\t\tconst count = Object.keys(dataset.value).length;\n\t\t\tif (dataset.typed && count === this.requirement) _addIssue(this, \"entries\", dataset, config$1, { received: `${count}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notGraphemes/notGraphemes.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notGraphemes(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_graphemes\",\n\t\treference: notGraphemes,\n\t\tasync: false,\n\t\texpects: `!${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getGraphemeCount(dataset.value);\n\t\t\t\tif (count === this.requirement) _addIssue(this, \"graphemes\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notLength/notLength.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notLength(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_length\",\n\t\treference: notLength,\n\t\tasync: false,\n\t\texpects: `!${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.length === this.requirement) _addIssue(this, \"length\", dataset, config$1, { received: `${dataset.value.length}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notSize/notSize.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notSize(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_size\",\n\t\treference: notSize,\n\t\tasync: false,\n\t\texpects: `!${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.size === this.requirement) _addIssue(this, \"size\", dataset, config$1, { received: `${dataset.value.size}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notValue/notValue.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notValue(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_value\",\n\t\treference: notValue,\n\t\tasync: false,\n\t\texpects: requirement instanceof Date ? `!${requirement.toJSON()}` : `!${/* @__PURE__ */ _stringify(requirement)}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && this.requirement <= dataset.value && this.requirement >= dataset.value) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notValues/notValues.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notValues(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_values\",\n\t\treference: notValues,\n\t\tasync: false,\n\t\texpects: `!${/* @__PURE__ */ _joinExpects(requirement.map((value$1) => value$1 instanceof Date ? value$1.toJSON() : /* @__PURE__ */ _stringify(value$1)), \"|\")}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && this.requirement.some((value$1) => value$1 <= dataset.value && value$1 >= dataset.value)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/notWords/notWords.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction notWords(locales, requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"not_words\",\n\t\treference: notWords,\n\t\tasync: false,\n\t\texpects: `!${requirement}`,\n\t\tlocales,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getWordCount(this.locales, dataset.value);\n\t\t\t\tif (count === this.requirement) _addIssue(this, \"words\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/octal/octal.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction octal(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"octal\",\n\t\treference: octal,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: OCTAL_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"octal\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/parseBoolean/parseBoolean.ts\nconst TRUTHY = [\n\ttrue,\n\t1,\n\t\"true\",\n\t\"1\",\n\t\"yes\",\n\t\"y\",\n\t\"on\",\n\t\"enabled\"\n];\nconst FALSY = [\n\tfalse,\n\t0,\n\t\"false\",\n\t\"0\",\n\t\"no\",\n\t\"n\",\n\t\"off\",\n\t\"disabled\"\n];\n/* @__NO_SIDE_EFFECTS__ */\nfunction parseBoolean(config$1, message$1) {\n\tconst normalize$1 = (v) => typeof v === \"string\" ? v.toLowerCase() : v;\n\tconst truthyRaw = config$1?.truthy ?? TRUTHY;\n\tconst falsyRaw = config$1?.falsy ?? FALSY;\n\tconst truthy = config$1?.truthy ? config$1.truthy.map(normalize$1) : TRUTHY;\n\tconst falsy = config$1?.falsy ? config$1.falsy.map(normalize$1) : FALSY;\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"parse_boolean\",\n\t\treference: parseBoolean,\n\t\texpects: /* @__PURE__ */ _joinExpects([...truthyRaw, ...falsyRaw].map(_stringify), \"|\"),\n\t\tconfig: config$1,\n\t\tmessage: message$1,\n\t\tasync: false,\n\t\t\"~run\"(dataset, config$2) {\n\t\t\tconst input = normalize$1(dataset.value);\n\t\t\tif (truthy.includes(input)) dataset.value = true;\n\t\t\telse if (falsy.includes(input)) dataset.value = false;\n\t\t\telse {\n\t\t\t\t_addIssue(this, \"boolean\", dataset, config$2);\n\t\t\t\tdataset.typed = false;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/parseJson/parseJson.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction parseJson(config$1, message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"parse_json\",\n\t\treference: parseJson,\n\t\tconfig: config$1,\n\t\tmessage: message$1,\n\t\tasync: false,\n\t\t\"~run\"(dataset, config$2) {\n\t\t\ttry {\n\t\t\t\tdataset.value = JSON.parse(dataset.value, this.config?.reviver);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\t_addIssue(this, \"JSON\", dataset, config$2, { received: `\"${error.message}\"` });\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t} else throw error;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/partialCheck/utils/_isPartiallyTyped/_isPartiallyTyped.ts\n/**\n* Checks if a dataset is partially typed.\n*\n* @param dataset The dataset to check.\n* @param paths The paths to check.\n*\n* @returns Whether it is partially typed.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _isPartiallyTyped(dataset, paths) {\n\tif (dataset.issues) for (const path of paths) for (const issue of dataset.issues) {\n\t\tlet typed = false;\n\t\tconst bound = Math.min(path.length, issue.path?.length ?? 0);\n\t\tfor (let index = 0; index < bound; index++) if (path[index] !== issue.path[index].key && (path[index] !== \"$\" || issue.path[index].type !== \"array\")) {\n\t\t\ttyped = true;\n\t\t\tbreak;\n\t\t}\n\t\tif (!typed) return false;\n\t}\n\treturn true;\n}\n\n//#endregion\n//#region src/actions/partialCheck/partialCheck.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction partialCheck(paths, requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"partial_check\",\n\t\treference: partialCheck,\n\t\tasync: false,\n\t\texpects: null,\n\t\tpaths,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif ((dataset.typed || /* @__PURE__ */ _isPartiallyTyped(dataset, paths)) && !this.requirement(dataset.value)) _addIssue(this, \"input\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/partialCheck/partialCheckAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction partialCheckAsync(paths, requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"partial_check\",\n\t\treference: partialCheckAsync,\n\t\tasync: true,\n\t\texpects: null,\n\t\tpaths,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif ((dataset.typed || /* @__PURE__ */ _isPartiallyTyped(dataset, paths)) && !await this.requirement(dataset.value)) _addIssue(this, \"input\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/rawCheck/rawCheck.ts\n/**\n* Creates a raw check validation action.\n*\n* @param action The validation action.\n*\n* @returns A raw check action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction rawCheck(action) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"raw_check\",\n\t\treference: rawCheck,\n\t\tasync: false,\n\t\texpects: null,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\taction({\n\t\t\t\tdataset,\n\t\t\t\tconfig: config$1,\n\t\t\t\taddIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config$1, info)\n\t\t\t});\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/rawCheck/rawCheckAsync.ts\n/**\n* Creates a raw check validation action.\n*\n* @param action The validation action.\n*\n* @returns A raw check action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction rawCheckAsync(action) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"raw_check\",\n\t\treference: rawCheckAsync,\n\t\tasync: true,\n\t\texpects: null,\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tawait action({\n\t\t\t\tdataset,\n\t\t\t\tconfig: config$1,\n\t\t\t\taddIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config$1, info)\n\t\t\t});\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/rawTransform/rawTransform.ts\n/**\n* Creates a raw transformation action.\n*\n* @param action The transformation action.\n*\n* @returns A raw transform action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction rawTransform(action) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"raw_transform\",\n\t\treference: rawTransform,\n\t\tasync: false,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst output = action({\n\t\t\t\tdataset,\n\t\t\t\tconfig: config$1,\n\t\t\t\taddIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config$1, info),\n\t\t\t\tNEVER: null\n\t\t\t});\n\t\t\tif (dataset.issues) dataset.typed = false;\n\t\t\telse dataset.value = output;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/rawTransform/rawTransformAsync.ts\n/**\n* Creates a raw transformation action.\n*\n* @param action The transformation action.\n*\n* @returns A raw transform action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction rawTransformAsync(action) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"raw_transform\",\n\t\treference: rawTransformAsync,\n\t\tasync: true,\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst output = await action({\n\t\t\t\tdataset,\n\t\t\t\tconfig: config$1,\n\t\t\t\taddIssue: (info) => _addIssue(this, info?.label ?? \"input\", dataset, config$1, info),\n\t\t\t\tNEVER: null\n\t\t\t});\n\t\t\tif (dataset.issues) dataset.typed = false;\n\t\t\telse dataset.value = output;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/readonly/readonly.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction readonly() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"readonly\",\n\t\treference: readonly,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/reduceItems/reduceItems.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction reduceItems(operation, initial) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"reduce_items\",\n\t\treference: reduceItems,\n\t\tasync: false,\n\t\toperation,\n\t\tinitial,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.reduce(this.operation, this.initial);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/regex/regex.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction regex(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"regex\",\n\t\treference: regex,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"format\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/returns/returns.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction returns(schema) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"returns\",\n\t\treference: returns,\n\t\tasync: false,\n\t\tschema,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst func = dataset.value;\n\t\t\tdataset.value = (...args_) => {\n\t\t\t\tconst returnsDataset = this.schema[\"~run\"]({ value: func(...args_) }, config$1);\n\t\t\t\tif (returnsDataset.issues) throw new ValiError(returnsDataset.issues);\n\t\t\t\treturn returnsDataset.value;\n\t\t\t};\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/returns/returnsAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction returnsAsync(schema) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"returns\",\n\t\treference: returnsAsync,\n\t\tasync: false,\n\t\tschema,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst func = dataset.value;\n\t\t\tdataset.value = async (...args_) => {\n\t\t\t\tconst returnsDataset = await this.schema[\"~run\"]({ value: await func(...args_) }, config$1);\n\t\t\t\tif (returnsDataset.issues) throw new ValiError(returnsDataset.issues);\n\t\t\t\treturn returnsDataset.value;\n\t\t\t};\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/rfcEmail/rfcEmail.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction rfcEmail(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"rfc_email\",\n\t\treference: rfcEmail,\n\t\texpects: null,\n\t\tasync: false,\n\t\trequirement: RFC_EMAIL_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"email\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/safeInteger/safeInteger.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction safeInteger(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"safe_integer\",\n\t\treference: safeInteger,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: Number.isSafeInteger,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"safe integer\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/size/size.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction size(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"size\",\n\t\treference: size,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && dataset.value.size !== this.requirement) _addIssue(this, \"size\", dataset, config$1, { received: `${dataset.value.size}` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/slug/slug.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction slug(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"slug\",\n\t\treference: slug,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: SLUG_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"slug\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/someItem/someItem.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction someItem(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"some_item\",\n\t\treference: someItem,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !dataset.value.some(this.requirement)) _addIssue(this, \"item\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/sortItems/sortItems.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction sortItems(operation) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"sort_items\",\n\t\treference: sortItems,\n\t\tasync: false,\n\t\toperation,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.sort(this.operation);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/startsWith/startsWith.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction startsWith(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"starts_with\",\n\t\treference: startsWith,\n\t\tasync: false,\n\t\texpects: `\"${requirement}\"`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !dataset.value.startsWith(this.requirement)) _addIssue(this, \"start\", dataset, config$1, { received: `\"${dataset.value.slice(0, this.requirement.length)}\"` });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/stringifyJson/stringifyJson.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction stringifyJson(config$1, message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"stringify_json\",\n\t\treference: stringifyJson,\n\t\tmessage: message$1,\n\t\tconfig: config$1,\n\t\tasync: false,\n\t\t\"~run\"(dataset, config$2) {\n\t\t\ttry {\n\t\t\t\tconst output = JSON.stringify(dataset.value, this.config?.replacer, this.config?.space);\n\t\t\t\tif (output === void 0) {\n\t\t\t\t\t_addIssue(this, \"JSON\", dataset, config$2);\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t}\n\t\t\t\tdataset.value = output;\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\t_addIssue(this, \"JSON\", dataset, config$2, { received: `\"${error.message}\"` });\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t} else throw error;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/title/title.ts\n/**\n* Creates a title metadata action.\n*\n* @param title_ The title text.\n*\n* @returns A title action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction title(title_) {\n\treturn {\n\t\tkind: \"metadata\",\n\t\ttype: \"title\",\n\t\treference: title,\n\t\ttitle: title_\n\t};\n}\n\n//#endregion\n//#region src/actions/toBigint/toBigint.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction toBigint(message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_bigint\",\n\t\treference: toBigint,\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\ttry {\n\t\t\t\tdataset.value = BigInt(dataset.value);\n\t\t\t} catch {\n\t\t\t\t_addIssue(this, \"bigint\", dataset, config$1);\n\t\t\t\tdataset.typed = false;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toBoolean/toBoolean.ts\n/**\n* Creates a to boolean transformation action.\n*\n* @returns A to boolean action.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toBoolean() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_boolean\",\n\t\treference: toBoolean,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = Boolean(dataset.value);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toCamelCase/toCamelCase.ts\n/**\n* Creates a to camel case transformation action.\n*\n* Words are separated by `_`, `-` and ASCII whitespace, as well as by case\n* and acronym boundaries.\n*\n* Hint: Acronym runs are normalized to lowercase (e.g. `parseURLValue` →\n* `parseUrlValue`) and digits stay attached to the preceding token (e.g.\n* `item2Name` → `item2Name`).\n*\n* @returns A to camel case action.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toCamelCase() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_camel_case\",\n\t\treference: toCamelCase,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = /* @__PURE__ */ _formatCase(dataset.value, \"\", false, true);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toDate/toDate.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction toDate(message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_date\",\n\t\treference: toDate,\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\ttry {\n\t\t\t\tdataset.value = new Date(dataset.value);\n\t\t\t\tif (isNaN(dataset.value)) {\n\t\t\t\t\t_addIssue(this, \"date\", dataset, config$1, { received: \"\\\"Invalid Date\\\"\" });\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t_addIssue(this, \"date\", dataset, config$1);\n\t\t\t\tdataset.typed = false;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toKebabCase/toKebabCase.ts\n/**\n* Creates a to kebab case transformation action.\n*\n* Words are separated by `_`, `-` and ASCII whitespace, as well as by case\n* and acronym boundaries.\n*\n* Hint: Acronym runs are normalized to lowercase (e.g. `parseURLValue` →\n* `parse-url-value`) and digits stay attached to the preceding token (e.g.\n* `item2Name` → `item2-name`).\n*\n* @returns A to kebab case action.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toKebabCase() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_kebab_case\",\n\t\treference: toKebabCase,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = /* @__PURE__ */ _formatCase(dataset.value, \"-\", false, false);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toLowerCase/toLowerCase.ts\n/**\n* Creates a to lower case transformation action.\n*\n* @returns A to lower case action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toLowerCase() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_lower_case\",\n\t\treference: toLowerCase,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.toLowerCase();\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toMaxValue/toMaxValue.ts\n/**\n* Creates a to max value transformation action.\n*\n* @param requirement The maximum value.\n*\n* @returns A to max value action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toMaxValue(requirement) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_max_value\",\n\t\treference: toMaxValue,\n\t\tasync: false,\n\t\trequirement,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value > this.requirement ? this.requirement : dataset.value;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toMinValue/toMinValue.ts\n/**\n* Creates a to min value transformation action.\n*\n* @param requirement The minimum value.\n*\n* @returns A to min value action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toMinValue(requirement) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_min_value\",\n\t\treference: toMinValue,\n\t\tasync: false,\n\t\trequirement,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value < this.requirement ? this.requirement : dataset.value;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toNumber/toNumber.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction toNumber(message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_number\",\n\t\treference: toNumber,\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\ttry {\n\t\t\t\tdataset.value = Number(dataset.value);\n\t\t\t\tif (isNaN(dataset.value)) {\n\t\t\t\t\t_addIssue(this, \"number\", dataset, config$1);\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t_addIssue(this, \"number\", dataset, config$1);\n\t\t\t\tdataset.typed = false;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toPascalCase/toPascalCase.ts\n/**\n* Creates a to pascal case transformation action.\n*\n* Words are separated by `_`, `-` and ASCII whitespace, as well as by case\n* and acronym boundaries.\n*\n* Hint: Acronym runs are normalized to lowercase (e.g. `parseURLValue` →\n* `ParseUrlValue`) and digits stay attached to the preceding token (e.g.\n* `item2Name` → `Item2Name`).\n*\n* @returns A to pascal case action.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toPascalCase() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_pascal_case\",\n\t\treference: toPascalCase,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = /* @__PURE__ */ _formatCase(dataset.value, \"\", true, true);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toSnakeCase/toSnakeCase.ts\n/**\n* Creates a to snake case transformation action.\n*\n* Words are separated by `_`, `-` and ASCII whitespace, as well as by case\n* and acronym boundaries.\n*\n* Hint: Acronym runs are normalized to lowercase (e.g. `parseURLValue` →\n* `parse_url_value`) and digits stay attached to the preceding token (e.g.\n* `item2Name` → `item2_name`).\n*\n* @returns A to snake case action.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toSnakeCase() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_snake_case\",\n\t\treference: toSnakeCase,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = /* @__PURE__ */ _formatCase(dataset.value, \"_\", false, false);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toString/toString.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction toString(message$1) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_string\",\n\t\treference: toString,\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\ttry {\n\t\t\t\tdataset.value = String(dataset.value);\n\t\t\t} catch {\n\t\t\t\t_addIssue(this, \"string\", dataset, config$1);\n\t\t\t\tdataset.typed = false;\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/toUpperCase/toUpperCase.ts\n/**\n* Creates a to upper case transformation action.\n*\n* @returns A to upper case action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction toUpperCase() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"to_upper_case\",\n\t\treference: toUpperCase,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.toUpperCase();\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/transform/transform.ts\n/**\n* Creates a custom transformation action.\n*\n* @param operation The transformation operation.\n*\n* @returns A transform action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction transform(operation) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"transform\",\n\t\treference: transform,\n\t\tasync: false,\n\t\toperation,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = this.operation(dataset.value);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/transform/transformAsync.ts\n/**\n* Creates a custom transformation action.\n*\n* @param operation The transformation operation.\n*\n* @returns A transform action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction transformAsync(operation) {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"transform\",\n\t\treference: transformAsync,\n\t\tasync: true,\n\t\toperation,\n\t\tasync \"~run\"(dataset) {\n\t\t\tdataset.value = await this.operation(dataset.value);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/trim/trim.ts\n/**\n* Creates a trim transformation action.\n*\n* @returns A trim action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction trim() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"trim\",\n\t\treference: trim,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.trim();\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/trimEnd/trimEnd.ts\n/**\n* Creates a trim end transformation action.\n*\n* @returns A trim end action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction trimEnd() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"trim_end\",\n\t\treference: trimEnd,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.trimEnd();\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/trimStart/trimStart.ts\n/**\n* Creates a trim start transformation action.\n*\n* @returns A trim start action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction trimStart() {\n\treturn {\n\t\tkind: \"transformation\",\n\t\ttype: \"trim_start\",\n\t\treference: trimStart,\n\t\tasync: false,\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.value = dataset.value.trimStart();\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/ulid/ulid.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction ulid(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"ulid\",\n\t\treference: ulid,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: ULID_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"ULID\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/url/url.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction url(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"url\",\n\t\treference: url,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement(input) {\n\t\t\ttry {\n\t\t\t\tnew URL(input);\n\t\t\t\treturn true;\n\t\t\t} catch {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement(dataset.value)) _addIssue(this, \"URL\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/uuid/uuid.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction uuid(message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"uuid\",\n\t\treference: uuid,\n\t\tasync: false,\n\t\texpects: null,\n\t\trequirement: UUID_REGEX,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.test(dataset.value)) _addIssue(this, \"UUID\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/value/value.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction value(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"value\",\n\t\treference: value,\n\t\tasync: false,\n\t\texpects: requirement instanceof Date ? requirement.toJSON() : /* @__PURE__ */ _stringify(requirement),\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !(this.requirement <= dataset.value && this.requirement >= dataset.value)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/values/values.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction values(requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"values\",\n\t\treference: values,\n\t\tasync: false,\n\t\texpects: `${/* @__PURE__ */ _joinExpects(requirement.map((value$1) => value$1 instanceof Date ? value$1.toJSON() : /* @__PURE__ */ _stringify(value$1)), \"|\")}`,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed && !this.requirement.some((value$1) => value$1 <= dataset.value && value$1 >= dataset.value)) _addIssue(this, \"value\", dataset, config$1, { received: dataset.value instanceof Date ? dataset.value.toJSON() : /* @__PURE__ */ _stringify(dataset.value) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/actions/words/words.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction words(locales, requirement, message$1) {\n\treturn {\n\t\tkind: \"validation\",\n\t\ttype: \"words\",\n\t\treference: words,\n\t\tasync: false,\n\t\texpects: `${requirement}`,\n\t\tlocales,\n\t\trequirement,\n\t\tmessage: message$1,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.typed) {\n\t\t\t\tconst count = /* @__PURE__ */ _getWordCount(this.locales, dataset.value);\n\t\t\t\tif (count !== this.requirement) _addIssue(this, \"words\", dataset, config$1, { received: `${count}` });\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/const.ts\nconst ABORT_EARLY_CONFIG = { abortEarly: true };\n\n//#endregion\n//#region src/methods/assert/assert.ts\n/**\n* Checks if the input matches the schema. As this is an assertion function, it\n* can be used as a type guard.\n*\n* @param schema The schema to be used.\n* @param input The input to be tested.\n*/\nfunction assert(schema, input) {\n\tconst issues = schema[\"~run\"]({ value: input }, ABORT_EARLY_CONFIG).issues;\n\tif (issues) throw new ValiError(issues);\n}\n\n//#endregion\n//#region src/methods/cache/_LruCache.ts\n/**\n* Efficient LRU cache using Map iteration order.\n*/\nvar _LruCache = class {\n\tconstructor(config$1) {\n\t\tthis.refCount = 0;\n\t\tthis.maxSize = config$1?.maxSize ?? 1e3;\n\t\tthis.maxAge = config$1?.maxAge ?? Infinity;\n\t\tthis.hasMaxAge = isFinite(this.maxAge);\n\t}\n\t/**\n\t* Stringifies an unknown input to a cache key component.\n\t*\n\t* @param input The unknown input.\n\t*\n\t* @returns A cache key component.\n\t*/\n\tstringify(input) {\n\t\tconst type = typeof input;\n\t\tif (type === \"string\") return `\"${input}\"`;\n\t\tif (type === \"number\" || type === \"boolean\") return `${input}`;\n\t\tif (type === \"bigint\") return `${input}n`;\n\t\tif (type === \"object\" || type === \"function\") {\n\t\t\tif (input) {\n\t\t\t\tthis.refIds ?? (this.refIds = /* @__PURE__ */ new WeakMap());\n\t\t\t\tlet id = this.refIds.get(input);\n\t\t\t\tif (!id) {\n\t\t\t\t\tid = ++this.refCount;\n\t\t\t\t\tthis.refIds.set(input, id);\n\t\t\t\t}\n\t\t\t\treturn `#${id}`;\n\t\t\t}\n\t\t\treturn \"null\";\n\t\t}\n\t\treturn type;\n\t}\n\t/**\n\t* Creates a cache key from input and config.\n\t*\n\t* @param input The input value.\n\t* @param config The parse configuration.\n\t*\n\t* @returns The cache key.\n\t*/\n\tkey(input, config$1 = {}) {\n\t\treturn `${this.stringify(input)}|${this.stringify(config$1.lang)}|${this.stringify(config$1.message)}|${this.stringify(config$1.abortEarly)}|${this.stringify(config$1.abortPipeEarly)}`;\n\t}\n\t/**\n\t* Gets a value from the cache by key.\n\t*\n\t* @param key The cache key.\n\t*\n\t* @returns The cached value.\n\t*/\n\tget(key) {\n\t\tif (!this.store) return void 0;\n\t\tconst entry = this.store.get(key);\n\t\tif (!entry) return void 0;\n\t\tif (this.hasMaxAge && Date.now() - entry[1] > this.maxAge) {\n\t\t\tthis.store.delete(key);\n\t\t\treturn;\n\t\t}\n\t\tthis.store.delete(key);\n\t\tthis.store.set(key, entry);\n\t\treturn entry[0];\n\t}\n\t/**\n\t* Sets a value in the cache by key.\n\t*\n\t* @param key The cache key.\n\t* @param value The cached value.\n\t*/\n\tset(key, value$1) {\n\t\tthis.store ?? (this.store = /* @__PURE__ */ new Map());\n\t\tthis.store.delete(key);\n\t\tconst timestamp = this.hasMaxAge ? Date.now() : 0;\n\t\tthis.store.set(key, [value$1, timestamp]);\n\t\tif (this.store.size > this.maxSize) this.store.delete(this.store.keys().next().value);\n\t}\n\t/**\n\t* Clears all entries from the cache.\n\t*/\n\tclear() {\n\t\tthis.store?.clear();\n\t}\n};\n\n//#endregion\n//#region src/methods/cache/cache.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction cache(schema, config$1) {\n\treturn {\n\t\t...schema,\n\t\tcacheConfig: config$1,\n\t\tcache: new _LruCache(config$1),\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, runConfig) {\n\t\t\tconst key = this.cache.key(dataset.value, runConfig);\n\t\t\tlet outputDataset = this.cache.get(key);\n\t\t\tif (!outputDataset) this.cache.set(key, outputDataset = schema[\"~run\"](dataset, runConfig));\n\t\t\treturn /* @__PURE__ */ _cloneDataset(outputDataset);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/cache/cacheAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction cacheAsync(schema, config$1) {\n\tlet activeRuns;\n\treturn {\n\t\t...schema,\n\t\tasync: true,\n\t\tcacheConfig: config$1,\n\t\tcache: new _LruCache(config$1),\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, runConfig) {\n\t\t\tconst key = this.cache.key(dataset.value, runConfig);\n\t\t\tconst cached = this.cache.get(key);\n\t\t\tif (cached) return /* @__PURE__ */ _cloneDataset(cached);\n\t\t\tlet promise$1 = activeRuns?.get(key);\n\t\t\tif (!promise$1) {\n\t\t\t\tactiveRuns ?? (activeRuns = /* @__PURE__ */ new Map());\n\t\t\t\tpromise$1 = Promise.resolve(schema[\"~run\"](dataset, runConfig));\n\t\t\t\tactiveRuns.set(key, promise$1);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst outputDataset = await promise$1;\n\t\t\t\tthis.cache.set(key, outputDataset);\n\t\t\t\treturn /* @__PURE__ */ _cloneDataset(outputDataset);\n\t\t\t} finally {\n\t\t\t\tactiveRuns?.delete(key);\n\t\t\t}\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/config/config.ts\n/**\n* Changes the local configuration of a schema.\n*\n* @param schema The schema to configure.\n* @param config The parse configuration.\n*\n* @returns The configured schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction config(schema, config$1) {\n\treturn {\n\t\t...schema,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config_) {\n\t\t\treturn schema[\"~run\"](dataset, {\n\t\t\t\t...config_,\n\t\t\t\t...config$1\n\t\t\t});\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/getFallback/getFallback.ts\n/**\n* Returns the fallback value of the schema.\n*\n* @param schema The schema to get it from.\n* @param dataset The output dataset if available.\n* @param config The config if available.\n*\n* @returns The fallback value.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getFallback(schema, dataset, config$1) {\n\treturn typeof schema.fallback === \"function\" ? schema.fallback(dataset, config$1) : schema.fallback;\n}\n\n//#endregion\n//#region src/methods/fallback/fallback.ts\n/**\n* Returns a fallback value as output if the input does not match the schema.\n*\n* @param schema The schema to catch.\n* @param fallback The fallback value.\n*\n* @returns The passed schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction fallback(schema, fallback$1) {\n\treturn {\n\t\t...schema,\n\t\tfallback: fallback$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst outputDataset = schema[\"~run\"](dataset, config$1);\n\t\t\treturn outputDataset.issues ? {\n\t\t\t\ttyped: true,\n\t\t\t\tvalue: /* @__PURE__ */ getFallback(this, outputDataset, config$1)\n\t\t\t} : outputDataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/fallback/fallbackAsync.ts\n/**\n* Returns a fallback value as output if the input does not match the schema.\n*\n* @param schema The schema to catch.\n* @param fallback The fallback value.\n*\n* @returns The passed schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction fallbackAsync(schema, fallback$1) {\n\treturn {\n\t\t...schema,\n\t\tfallback: fallback$1,\n\t\tasync: true,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst outputDataset = await schema[\"~run\"](dataset, config$1);\n\t\t\treturn outputDataset.issues ? {\n\t\t\t\ttyped: true,\n\t\t\t\tvalue: await /* @__PURE__ */ getFallback(this, outputDataset, config$1)\n\t\t\t} : outputDataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/flatten/flatten.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction flatten(issues) {\n\tconst flatErrors = {};\n\tfor (const issue of issues) if (issue.path) {\n\t\tconst dotPath = /* @__PURE__ */ getDotPath(issue);\n\t\tif (dotPath) {\n\t\t\tif (!flatErrors.nested) flatErrors.nested = {};\n\t\t\tif (flatErrors.nested[dotPath]) flatErrors.nested[dotPath].push(issue.message);\n\t\t\telse flatErrors.nested[dotPath] = [issue.message];\n\t\t} else if (flatErrors.other) flatErrors.other.push(issue.message);\n\t\telse flatErrors.other = [issue.message];\n\t} else if (flatErrors.root) flatErrors.root.push(issue.message);\n\telse flatErrors.root = [issue.message];\n\treturn flatErrors;\n}\n\n//#endregion\n//#region src/methods/forward/forward.ts\n/**\n* Forwards the issues of the passed validation action.\n*\n* @param action The validation action.\n* @param path The path to forward the issues to.\n*\n* @returns The modified action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction forward(action, path) {\n\treturn {\n\t\t...action,\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst prevIssues = dataset.issues && [...dataset.issues];\n\t\t\tdataset = action[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.issues) {\n\t\t\t\tfor (const issue of dataset.issues) if (!prevIssues?.includes(issue)) {\n\t\t\t\t\tlet pathInput = dataset.value;\n\t\t\t\t\tfor (const key of path) {\n\t\t\t\t\t\tconst pathValue = pathInput[key];\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"unknown\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput: pathInput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: pathValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (issue.path) issue.path.push(pathItem);\n\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\tif (!pathValue) break;\n\t\t\t\t\t\tpathInput = pathValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/forward/forwardAsync.ts\n/**\n* Forwards the issues of the passed validation action.\n*\n* @param action The validation action.\n* @param path The path to forward the issues to.\n*\n* @returns The modified action.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction forwardAsync(action, path) {\n\treturn {\n\t\t...action,\n\t\tasync: true,\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst prevIssues = dataset.issues && [...dataset.issues];\n\t\t\tdataset = await action[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.issues) {\n\t\t\t\tfor (const issue of dataset.issues) if (!prevIssues?.includes(issue)) {\n\t\t\t\t\tlet pathInput = dataset.value;\n\t\t\t\t\tfor (const key of path) {\n\t\t\t\t\t\tconst pathValue = pathInput[key];\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"unknown\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput: pathInput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: pathValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (issue.path) issue.path.push(pathItem);\n\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\tif (!pathValue) break;\n\t\t\t\t\t\tpathInput = pathValue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/getDefault/getDefault.ts\n/**\n* Returns the default value of the schema.\n*\n* @param schema The schema to get it from.\n* @param dataset The input dataset if available.\n* @param config The config if available.\n*\n* @returns The default value.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getDefault(schema, dataset, config$1) {\n\treturn typeof schema.default === \"function\" ? schema.default(dataset, config$1) : schema.default;\n}\n\n//#endregion\n//#region src/methods/getDefaults/getDefaults.ts\n/**\n* Returns the default values of the schema.\n*\n* Hint: The difference to `getDefault` is that for object and tuple schemas\n* this function recursively returns the default values of the subschemas\n* instead of `undefined`.\n*\n* @param schema The schema to get them from.\n*\n* @returns The default values.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getDefaults(schema) {\n\tif (\"entries\" in schema) {\n\t\tconst object$1 = {};\n\t\tfor (const key in schema.entries) object$1[key] = /* @__PURE__ */ getDefaults(schema.entries[key]);\n\t\treturn object$1;\n\t}\n\tif (\"items\" in schema) return schema.items.map(getDefaults);\n\treturn /* @__PURE__ */ getDefault(schema);\n}\n\n//#endregion\n//#region src/methods/getDefaults/getDefaultsAsync.ts\n/**\n* Returns the default values of the schema.\n*\n* Hint: The difference to `getDefault` is that for object and tuple schemas\n* this function recursively returns the default values of the subschemas\n* instead of `undefined`.\n*\n* @param schema The schema to get them from.\n*\n* @returns The default values.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nasync function getDefaultsAsync(schema) {\n\tif (\"entries\" in schema) return Object.fromEntries(await Promise.all(Object.entries(schema.entries).map(async ([key, value$1]) => [key, await /* @__PURE__ */ getDefaultsAsync(value$1)])));\n\tif (\"items\" in schema) return Promise.all(schema.items.map(getDefaultsAsync));\n\treturn /* @__PURE__ */ getDefault(schema);\n}\n\n//#endregion\n//#region src/methods/getDescription/getDescription.ts\n/**\n* Returns the description of the schema.\n*\n* If multiple descriptions are defined, the last one of the highest level is\n* returned. If no description is defined, `undefined` is returned.\n*\n* @param schema The schema to get the description from.\n*\n* @returns The description, if any.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getDescription(schema) {\n\treturn /* @__PURE__ */ _getLastMetadata(schema, \"description\");\n}\n\n//#endregion\n//#region src/methods/getExamples/getExamples.ts\n/**\n* Returns the examples of a schema.\n*\n* If multiple examples are defined, it concatenates them using depth-first\n* search. If no examples are defined, an empty array is returned.\n*\n* @param schema The schema to get the examples from.\n*\n* @returns The examples, if any.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getExamples(schema) {\n\tconst examples$1 = [];\n\tfunction depthFirstCollect(schema$1) {\n\t\tif (\"pipe\" in schema$1) {\n\t\t\tfor (const item of schema$1.pipe) if (item.kind === \"schema\" && \"pipe\" in item) depthFirstCollect(item);\n\t\t\telse if (item.kind === \"metadata\" && item.type === \"examples\") for (const example of item.examples) examples$1.push(example);\n\t\t}\n\t}\n\tdepthFirstCollect(schema);\n\treturn examples$1;\n}\n\n//#endregion\n//#region src/methods/getFallbacks/getFallbacks.ts\n/**\n* Returns the fallback values of the schema.\n*\n* Hint: The difference to `getFallback` is that for object and tuple schemas\n* this function recursively returns the fallback values of the subschemas\n* instead of `undefined`.\n*\n* @param schema The schema to get them from.\n*\n* @returns The fallback values.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getFallbacks(schema) {\n\tif (\"entries\" in schema) {\n\t\tconst object$1 = {};\n\t\tfor (const key in schema.entries) object$1[key] = /* @__PURE__ */ getFallbacks(schema.entries[key]);\n\t\treturn object$1;\n\t}\n\tif (\"items\" in schema) return schema.items.map(getFallbacks);\n\treturn /* @__PURE__ */ getFallback(schema);\n}\n\n//#endregion\n//#region src/methods/getFallbacks/getFallbacksAsync.ts\n/**\n* Returns the fallback values of the schema.\n*\n* Hint: The difference to `getFallback` is that for object and tuple schemas\n* this function recursively returns the fallback values of the subschemas\n* instead of `undefined`.\n*\n* @param schema The schema to get them from.\n*\n* @returns The fallback values.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nasync function getFallbacksAsync(schema) {\n\tif (\"entries\" in schema) return Object.fromEntries(await Promise.all(Object.entries(schema.entries).map(async ([key, value$1]) => [key, await /* @__PURE__ */ getFallbacksAsync(value$1)])));\n\tif (\"items\" in schema) return Promise.all(schema.items.map(getFallbacksAsync));\n\treturn /* @__PURE__ */ getFallback(schema);\n}\n\n//#endregion\n//#region src/methods/getMetadata/getMetadata.ts\n/**\n* Returns the metadata of a schema.\n*\n* If multiple metadata are defined, it shallowly merges them using depth-first\n* search. If no metadata is defined, an empty object is returned.\n*\n* @param schema Schema to get the metadata from.\n*\n* @returns The metadata, if any.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getMetadata(schema) {\n\tconst result = {};\n\tfunction depthFirstMerge(schema$1) {\n\t\tif (\"pipe\" in schema$1) {\n\t\t\tfor (const item of schema$1.pipe) if (item.kind === \"schema\" && \"pipe\" in item) depthFirstMerge(item);\n\t\t\telse if (item.kind === \"metadata\" && item.type === \"metadata\") Object.assign(result, item.metadata);\n\t\t}\n\t}\n\tdepthFirstMerge(schema);\n\treturn result;\n}\n\n//#endregion\n//#region src/methods/getTitle/getTitle.ts\n/**\n* Returns the title of the schema.\n*\n* If multiple titles are defined, the last one of the highest level is\n* returned. If no title is defined, `undefined` is returned.\n*\n* @param schema The schema to get the title from.\n*\n* @returns The title, if any.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction getTitle(schema) {\n\treturn /* @__PURE__ */ _getLastMetadata(schema, \"title\");\n}\n\n//#endregion\n//#region src/methods/is/is.ts\n/**\n* Checks if the input matches the schema. By using a type predicate, this\n* function can be used as a type guard.\n*\n* @param schema The schema to be used.\n* @param input The input to be tested.\n*\n* @returns Whether the input matches the schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction is(schema, input) {\n\treturn !schema[\"~run\"]({ value: input }, ABORT_EARLY_CONFIG).issues;\n}\n\n//#endregion\n//#region src/schemas/any/any.ts\n/**\n* Creates an any schema.\n*\n* Hint: This schema function exists only for completeness and is not\n* recommended in practice. Instead, `unknown` should be used to accept\n* unknown data.\n*\n* @returns An any schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction any() {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"any\",\n\t\treference: any,\n\t\texpects: \"any\",\n\t\tasync: false,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.typed = true;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/array/array.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction array(item, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"array\",\n\t\treference: array,\n\t\texpects: \"Array\",\n\t\tasync: false,\n\t\titem,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tfor (let key = 0; key < input.length; key++) {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\tconst itemDataset = this.item[\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/array/arrayAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction arrayAsync(item, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"array\",\n\t\treference: arrayAsync,\n\t\texpects: \"Array\",\n\t\tasync: true,\n\t\titem,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tconst itemDatasets = await Promise.all(input.map((value$1) => this.item[\"~run\"]({ value: value$1 }, config$1)));\n\t\t\t\tfor (let key = 0; key < itemDatasets.length; key++) {\n\t\t\t\t\tconst itemDataset = itemDatasets[key];\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/bigint/bigint.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction bigint(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"bigint\",\n\t\treference: bigint,\n\t\texpects: \"bigint\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (typeof dataset.value === \"bigint\") dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/blob/blob.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction blob(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"blob\",\n\t\treference: blob,\n\t\texpects: \"Blob\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value instanceof Blob) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/boolean/boolean.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction boolean(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"boolean\",\n\t\treference: boolean,\n\t\texpects: \"boolean\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (typeof dataset.value === \"boolean\") dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/custom/custom.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction custom(check$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"custom\",\n\t\treference: custom,\n\t\texpects: \"unknown\",\n\t\tasync: false,\n\t\tcheck: check$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (this.check(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/custom/customAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction customAsync(check$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"custom\",\n\t\treference: customAsync,\n\t\texpects: \"unknown\",\n\t\tasync: true,\n\t\tcheck: check$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (await this.check(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/date/date.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction date(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"date\",\n\t\treference: date,\n\t\texpects: \"Date\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value instanceof Date) if (!isNaN(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1, { received: \"\\\"Invalid Date\\\"\" });\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/enum/enum.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction enum_(enum__, message$1) {\n\tconst options = [];\n\tfor (const key in enum__) if (`${+key}` !== key || typeof enum__[key] !== \"string\" || !Object.is(enum__[enum__[key]], +key)) options.push(enum__[key]);\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"enum\",\n\t\treference: enum_,\n\t\texpects: /* @__PURE__ */ _joinExpects(options.map(_stringify), \"|\"),\n\t\tasync: false,\n\t\tenum: enum__,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (this.options.includes(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/exactOptional/exactOptional.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction exactOptional(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"exact_optional\",\n\t\treference: exactOptional,\n\t\texpects: wrapped.expects,\n\t\tasync: false,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/exactOptional/exactOptionalAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction exactOptionalAsync(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"exact_optional\",\n\t\treference: exactOptionalAsync,\n\t\texpects: wrapped.expects,\n\t\tasync: true,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/file/file.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction file(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"file\",\n\t\treference: file,\n\t\texpects: \"File\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value instanceof File) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/function/function.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction function_(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"function\",\n\t\treference: function_,\n\t\texpects: \"Function\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (typeof dataset.value === \"function\") dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/instance/instance.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction instance(class_, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"instance\",\n\t\treference: instance,\n\t\texpects: class_.name,\n\t\tasync: false,\n\t\tclass: class_,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value instanceof this.class) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/intersect/utils/_merge/_merge.ts\n/**\n* Merges two values into one single output.\n*\n* @param value1 First value.\n* @param value2 Second value.\n*\n* @returns The merge dataset.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _merge(value1, value2) {\n\tif (typeof value1 === typeof value2) {\n\t\tif (value1 === value2 || value1 instanceof Date && value2 instanceof Date && +value1 === +value2) return { value: value1 };\n\t\tif (value1 && value2 && value1.constructor === Object && value2.constructor === Object) {\n\t\t\tconst nextValue = { ...value1 };\n\t\t\tfor (const key in value2) if (key in value1) {\n\t\t\t\tconst dataset = /* @__PURE__ */ _merge(value1[key], value2[key]);\n\t\t\t\tif (dataset.issue) return dataset;\n\t\t\t\tnextValue[key] = dataset.value;\n\t\t\t} else nextValue[key] = value2[key];\n\t\t\treturn { value: nextValue };\n\t\t}\n\t\tif (Array.isArray(value1) && Array.isArray(value2)) {\n\t\t\tif (value1.length === value2.length) {\n\t\t\t\tconst nextValue = [...value1];\n\t\t\t\tfor (let index = 0; index < value1.length; index++) {\n\t\t\t\t\tconst dataset = /* @__PURE__ */ _merge(value1[index], value2[index]);\n\t\t\t\t\tif (dataset.issue) return dataset;\n\t\t\t\t\tnextValue[index] = dataset.value;\n\t\t\t\t}\n\t\t\t\treturn { value: nextValue };\n\t\t\t}\n\t\t}\n\t}\n\treturn { issue: true };\n}\n\n//#endregion\n//#region src/schemas/intersect/intersect.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction intersect(options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"intersect\",\n\t\treference: intersect,\n\t\texpects: /* @__PURE__ */ _joinExpects(options.map((option) => option.expects), \"&\"),\n\t\tasync: false,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (this.options.length) {\n\t\t\t\tconst input = dataset.value;\n\t\t\t\tlet outputs;\n\t\t\t\tdataset.typed = true;\n\t\t\t\tfor (const schema of this.options) {\n\t\t\t\t\tconst optionDataset = schema[\"~run\"]({ value: input }, config$1);\n\t\t\t\t\tif (optionDataset.issues) {\n\t\t\t\t\t\tif (dataset.issues) for (const issue of optionDataset.issues) dataset.issues.push(issue);\n\t\t\t\t\t\telse dataset.issues = optionDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!optionDataset.typed) dataset.typed = false;\n\t\t\t\t\tif (dataset.typed) if (outputs) outputs.push(optionDataset.value);\n\t\t\t\t\telse outputs = [optionDataset.value];\n\t\t\t\t}\n\t\t\t\tif (dataset.typed) {\n\t\t\t\t\tdataset.value = outputs[0];\n\t\t\t\t\tfor (let index = 1; index < outputs.length; index++) {\n\t\t\t\t\t\tconst mergeDataset = /* @__PURE__ */ _merge(dataset.value, outputs[index]);\n\t\t\t\t\t\tif (mergeDataset.issue) {\n\t\t\t\t\t\t\t_addIssue(this, \"type\", dataset, config$1, { received: \"unknown\" });\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataset.value = mergeDataset.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/intersect/intersectAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction intersectAsync(options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"intersect\",\n\t\treference: intersectAsync,\n\t\texpects: /* @__PURE__ */ _joinExpects(options.map((option) => option.expects), \"&\"),\n\t\tasync: true,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (this.options.length) {\n\t\t\t\tconst input = dataset.value;\n\t\t\t\tlet outputs;\n\t\t\t\tdataset.typed = true;\n\t\t\t\tconst optionDatasets = await Promise.all(this.options.map((schema) => schema[\"~run\"]({ value: input }, config$1)));\n\t\t\t\tfor (const optionDataset of optionDatasets) {\n\t\t\t\t\tif (optionDataset.issues) {\n\t\t\t\t\t\tif (dataset.issues) for (const issue of optionDataset.issues) dataset.issues.push(issue);\n\t\t\t\t\t\telse dataset.issues = optionDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!optionDataset.typed) dataset.typed = false;\n\t\t\t\t\tif (dataset.typed) if (outputs) outputs.push(optionDataset.value);\n\t\t\t\t\telse outputs = [optionDataset.value];\n\t\t\t\t}\n\t\t\t\tif (dataset.typed) {\n\t\t\t\t\tdataset.value = outputs[0];\n\t\t\t\t\tfor (let index = 1; index < outputs.length; index++) {\n\t\t\t\t\t\tconst mergeDataset = /* @__PURE__ */ _merge(dataset.value, outputs[index]);\n\t\t\t\t\t\tif (mergeDataset.issue) {\n\t\t\t\t\t\t\t_addIssue(this, \"type\", dataset, config$1, { received: \"unknown\" });\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdataset.value = mergeDataset.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/lazy/lazy.ts\n/**\n* Creates a lazy schema.\n*\n* @param getter The schema getter.\n*\n* @returns A lazy schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction lazy(getter) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"lazy\",\n\t\treference: lazy,\n\t\texpects: \"unknown\",\n\t\tasync: false,\n\t\tgetter,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\treturn this.getter(dataset.value)[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/lazy/lazyAsync.ts\n/**\n* Creates a lazy schema.\n*\n* @param getter The schema getter.\n*\n* @returns A lazy schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction lazyAsync(getter) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"lazy\",\n\t\treference: lazyAsync,\n\t\texpects: \"unknown\",\n\t\tasync: true,\n\t\tgetter,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\treturn (await this.getter(dataset.value))[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/literal/literal.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction literal(literal_, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"literal\",\n\t\treference: literal,\n\t\texpects: /* @__PURE__ */ _stringify(literal_),\n\t\tasync: false,\n\t\tliteral: literal_,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === this.literal) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/looseObject/looseObject.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction looseObject(entries$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"loose_object\",\n\t\treference: looseObject,\n\t\texpects: \"Object\",\n\t\tasync: false,\n\t\tentries: entries$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tfor (const key in this.entries) {\n\t\t\t\t\tconst valueSchema = this.entries[key];\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\tconst valueDataset = valueSchema[\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) {\n\t\t\t\t\tfor (const key in input) if (/* @__PURE__ */ _isValidObjectKey(input, key) && !(key in this.entries)) dataset.value[key] = input[key];\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/looseObject/looseObjectAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction looseObjectAsync(entries$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"loose_object\",\n\t\treference: looseObjectAsync,\n\t\texpects: \"Object\",\n\t\tasync: true,\n\t\tentries: entries$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tconst valueDatasets = await Promise.all(Object.entries(this.entries).map(async ([key, valueSchema]) => {\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : await /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\t\tawait valueSchema[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tinput[key],\n\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\tnull\n\t\t\t\t\t];\n\t\t\t\t}));\n\t\t\t\tfor (const [key, value$1, valueSchema, valueDataset] of valueDatasets) if (valueDataset) {\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = await /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) {\n\t\t\t\t\tfor (const key in input) if (/* @__PURE__ */ _isValidObjectKey(input, key) && !(key in this.entries)) dataset.value[key] = input[key];\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/looseTuple/looseTuple.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction looseTuple(items, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"loose_tuple\",\n\t\treference: looseTuple,\n\t\texpects: \"Array\",\n\t\tasync: false,\n\t\titems,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tfor (let key = 0; key < this.items.length; key++) {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\tconst itemDataset = this.items[key][\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) for (let key = this.items.length; key < input.length; key++) dataset.value.push(input[key]);\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/looseTuple/looseTupleAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction looseTupleAsync(items, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"loose_tuple\",\n\t\treference: looseTupleAsync,\n\t\texpects: \"Array\",\n\t\tasync: true,\n\t\titems,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tconst itemDatasets = await Promise.all(this.items.map(async (item, key) => {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\tawait item[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t];\n\t\t\t\t}));\n\t\t\t\tfor (const [key, value$1, itemDataset] of itemDatasets) {\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) for (let key = this.items.length; key < input.length; key++) dataset.value.push(input[key]);\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/map/map.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction map(key, value$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"map\",\n\t\treference: map,\n\t\texpects: \"Map\",\n\t\tasync: false,\n\t\tkey,\n\t\tvalue: value$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input instanceof Map) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = /* @__PURE__ */ new Map();\n\t\t\t\tfor (const [inputKey, inputValue] of input) {\n\t\t\t\t\tconst keyDataset = this.key[\"~run\"]({ value: inputKey }, config$1);\n\t\t\t\t\tif (keyDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"map\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: inputKey,\n\t\t\t\t\t\t\tvalue: inputValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of keyDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = keyDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst valueDataset = this.value[\"~run\"]({ value: inputValue }, config$1);\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"map\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: inputKey,\n\t\t\t\t\t\t\tvalue: inputValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!keyDataset.typed || !valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.set(keyDataset.value, valueDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/map/mapAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction mapAsync(key, value$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"map\",\n\t\treference: mapAsync,\n\t\texpects: \"Map\",\n\t\tasync: true,\n\t\tkey,\n\t\tvalue: value$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input instanceof Map) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = /* @__PURE__ */ new Map();\n\t\t\t\tconst datasets = await Promise.all([...input].map(([inputKey, inputValue]) => Promise.all([\n\t\t\t\t\tinputKey,\n\t\t\t\t\tinputValue,\n\t\t\t\t\tthis.key[\"~run\"]({ value: inputKey }, config$1),\n\t\t\t\t\tthis.value[\"~run\"]({ value: inputValue }, config$1)\n\t\t\t\t])));\n\t\t\t\tfor (const [inputKey, inputValue, keyDataset, valueDataset] of datasets) {\n\t\t\t\t\tif (keyDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"map\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: inputKey,\n\t\t\t\t\t\t\tvalue: inputValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of keyDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = keyDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"map\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: inputKey,\n\t\t\t\t\t\t\tvalue: inputValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!keyDataset.typed || !valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.set(keyDataset.value, valueDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nan/nan.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nan(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"nan\",\n\t\treference: nan,\n\t\texpects: \"NaN\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (Number.isNaN(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/never/never.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction never(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"never\",\n\t\treference: never,\n\t\texpects: \"never\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\t_addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nonNullable/nonNullable.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonNullable(wrapped, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"non_nullable\",\n\t\treference: nonNullable,\n\t\texpects: \"!null\",\n\t\tasync: false,\n\t\twrapped,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value !== null) dataset = this.wrapped[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.value === null) _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nonNullable/nonNullableAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonNullableAsync(wrapped, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"non_nullable\",\n\t\treference: nonNullableAsync,\n\t\texpects: \"!null\",\n\t\tasync: true,\n\t\twrapped,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value !== null) dataset = await this.wrapped[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.value === null) _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nonNullish/nonNullish.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonNullish(wrapped, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"non_nullish\",\n\t\treference: nonNullish,\n\t\texpects: \"(!null & !undefined)\",\n\t\tasync: false,\n\t\twrapped,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (!(dataset.value === null || dataset.value === void 0)) dataset = this.wrapped[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.value === null || dataset.value === void 0) _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nonNullish/nonNullishAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonNullishAsync(wrapped, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"non_nullish\",\n\t\treference: nonNullishAsync,\n\t\texpects: \"(!null & !undefined)\",\n\t\tasync: true,\n\t\twrapped,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (!(dataset.value === null || dataset.value === void 0)) dataset = await this.wrapped[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.value === null || dataset.value === void 0) _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nonOptional/nonOptional.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonOptional(wrapped, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"non_optional\",\n\t\treference: nonOptional,\n\t\texpects: \"!undefined\",\n\t\tasync: false,\n\t\twrapped,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value !== void 0) dataset = this.wrapped[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.value === void 0) _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nonOptional/nonOptionalAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nonOptionalAsync(wrapped, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"non_optional\",\n\t\treference: nonOptionalAsync,\n\t\texpects: \"!undefined\",\n\t\tasync: true,\n\t\twrapped,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value !== void 0) dataset = await this.wrapped[\"~run\"](dataset, config$1);\n\t\t\tif (dataset.value === void 0) _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/null/null.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction null_(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"null\",\n\t\treference: null_,\n\t\texpects: \"null\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === null) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nullable/nullable.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nullable(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"nullable\",\n\t\treference: nullable,\n\t\texpects: `(${wrapped.expects} | null)`,\n\t\tasync: false,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === null) {\n\t\t\t\tif (this.default !== void 0) dataset.value = /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === null) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nullable/nullableAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nullableAsync(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"nullable\",\n\t\treference: nullableAsync,\n\t\texpects: `(${wrapped.expects} | null)`,\n\t\tasync: true,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === null) {\n\t\t\t\tif (this.default !== void 0) dataset.value = await /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === null) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nullish/nullish.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nullish(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"nullish\",\n\t\treference: nullish,\n\t\texpects: `(${wrapped.expects} | null | undefined)`,\n\t\tasync: false,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === null || dataset.value === void 0) {\n\t\t\t\tif (this.default !== void 0) dataset.value = /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === null || dataset.value === void 0) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/nullish/nullishAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction nullishAsync(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"nullish\",\n\t\treference: nullishAsync,\n\t\texpects: `(${wrapped.expects} | null | undefined)`,\n\t\tasync: true,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === null || dataset.value === void 0) {\n\t\t\t\tif (this.default !== void 0) dataset.value = await /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === null || dataset.value === void 0) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/number/number.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction number(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"number\",\n\t\treference: number,\n\t\texpects: \"number\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (typeof dataset.value === \"number\" && !isNaN(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/object/object.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction object(entries$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"object\",\n\t\treference: object,\n\t\texpects: \"Object\",\n\t\tasync: false,\n\t\tentries: entries$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tfor (const key in this.entries) {\n\t\t\t\t\tconst valueSchema = this.entries[key];\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\tconst valueDataset = valueSchema[\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/object/objectAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction objectAsync(entries$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"object\",\n\t\treference: objectAsync,\n\t\texpects: \"Object\",\n\t\tasync: true,\n\t\tentries: entries$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tconst valueDatasets = await Promise.all(Object.entries(this.entries).map(async ([key, valueSchema]) => {\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : await /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\t\tawait valueSchema[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tinput[key],\n\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\tnull\n\t\t\t\t\t];\n\t\t\t\t}));\n\t\t\t\tfor (const [key, value$1, valueSchema, valueDataset] of valueDatasets) if (valueDataset) {\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = await /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/objectWithRest/objectWithRest.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction objectWithRest(entries$1, rest, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"object_with_rest\",\n\t\treference: objectWithRest,\n\t\texpects: \"Object\",\n\t\tasync: false,\n\t\tentries: entries$1,\n\t\trest,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tfor (const key in this.entries) {\n\t\t\t\t\tconst valueSchema = this.entries[key];\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\tconst valueDataset = valueSchema[\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) {\n\t\t\t\t\tfor (const key in input) if (/* @__PURE__ */ _isValidObjectKey(input, key) && !(key in this.entries)) {\n\t\t\t\t\t\tconst valueDataset = this.rest[\"~run\"]({ value: input[key] }, config$1);\n\t\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/objectWithRest/objectWithRestAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction objectWithRestAsync(entries$1, rest, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"object_with_rest\",\n\t\treference: objectWithRestAsync,\n\t\texpects: \"Object\",\n\t\tasync: true,\n\t\tentries: entries$1,\n\t\trest,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tconst [normalDatasets, restDatasets] = await Promise.all([Promise.all(Object.entries(this.entries).map(async ([key, valueSchema]) => {\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : await /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\t\tawait valueSchema[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tinput[key],\n\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\tnull\n\t\t\t\t\t];\n\t\t\t\t})), Promise.all(Object.entries(input).filter(([key]) => /* @__PURE__ */ _isValidObjectKey(input, key) && !(key in this.entries)).map(async ([key, value$1]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\tvalue$1,\n\t\t\t\t\tawait this.rest[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t]))]);\n\t\t\t\tfor (const [key, value$1, valueSchema, valueDataset] of normalDatasets) if (valueDataset) {\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = await /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) for (const [key, value$1, valueDataset] of restDatasets) {\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/optional/optional.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction optional(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"optional\",\n\t\treference: optional,\n\t\texpects: `(${wrapped.expects} | undefined)`,\n\t\tasync: false,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === void 0) {\n\t\t\t\tif (this.default !== void 0) dataset.value = /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === void 0) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/optional/optionalAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction optionalAsync(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"optional\",\n\t\treference: optionalAsync,\n\t\texpects: `(${wrapped.expects} | undefined)`,\n\t\tasync: true,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === void 0) {\n\t\t\t\tif (this.default !== void 0) dataset.value = await /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === void 0) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/picklist/picklist.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction picklist(options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"picklist\",\n\t\treference: picklist,\n\t\texpects: /* @__PURE__ */ _joinExpects(options.map(_stringify), \"|\"),\n\t\tasync: false,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (this.options.includes(dataset.value)) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/promise/promise.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction promise(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"promise\",\n\t\treference: promise,\n\t\texpects: \"Promise\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value instanceof Promise) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/record/record.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction record(key, value$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"record\",\n\t\treference: record,\n\t\texpects: \"Object\",\n\t\tasync: false,\n\t\tkey,\n\t\tvalue: value$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tfor (const entryKey in input) if (/* @__PURE__ */ _isValidObjectKey(input, entryKey)) {\n\t\t\t\t\tconst entryValue = input[entryKey];\n\t\t\t\t\tconst keyDataset = this.key[\"~run\"]({ value: entryKey }, config$1);\n\t\t\t\t\tif (keyDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: entryKey,\n\t\t\t\t\t\t\tvalue: entryValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of keyDataset.issues) {\n\t\t\t\t\t\t\tissue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = keyDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst valueDataset = this.value[\"~run\"]({ value: entryValue }, config$1);\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: entryKey,\n\t\t\t\t\t\t\tvalue: entryValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!keyDataset.typed || !valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tif (keyDataset.typed) dataset.value[keyDataset.value] = valueDataset.value;\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/record/recordAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction recordAsync(key, value$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"record\",\n\t\treference: recordAsync,\n\t\texpects: \"Object\",\n\t\tasync: true,\n\t\tkey,\n\t\tvalue: value$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tconst datasets = await Promise.all(Object.entries(input).filter(([key$1]) => /* @__PURE__ */ _isValidObjectKey(input, key$1)).map(([entryKey, entryValue]) => Promise.all([\n\t\t\t\t\tentryKey,\n\t\t\t\t\tentryValue,\n\t\t\t\t\tthis.key[\"~run\"]({ value: entryKey }, config$1),\n\t\t\t\t\tthis.value[\"~run\"]({ value: entryValue }, config$1)\n\t\t\t\t])));\n\t\t\t\tfor (const [entryKey, entryValue, keyDataset, valueDataset] of datasets) {\n\t\t\t\t\tif (keyDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: entryKey,\n\t\t\t\t\t\t\tvalue: entryValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of keyDataset.issues) {\n\t\t\t\t\t\t\tissue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = keyDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: entryKey,\n\t\t\t\t\t\t\tvalue: entryValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!keyDataset.typed || !valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tif (keyDataset.typed) dataset.value[keyDataset.value] = valueDataset.value;\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/set/set.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction set(value$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"set\",\n\t\treference: set,\n\t\texpects: \"Set\",\n\t\tasync: false,\n\t\tvalue: value$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input instanceof Set) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = /* @__PURE__ */ new Set();\n\t\t\t\tfor (const inputValue of input) {\n\t\t\t\t\tconst valueDataset = this.value[\"~run\"]({ value: inputValue }, config$1);\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"set\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: null,\n\t\t\t\t\t\t\tvalue: inputValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.add(valueDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/set/setAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction setAsync(value$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"set\",\n\t\treference: setAsync,\n\t\texpects: \"Set\",\n\t\tasync: true,\n\t\tvalue: value$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input instanceof Set) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = /* @__PURE__ */ new Set();\n\t\t\t\tconst valueDatasets = await Promise.all([...input].map(async (inputValue) => [inputValue, await this.value[\"~run\"]({ value: inputValue }, config$1)]));\n\t\t\t\tfor (const [inputValue, valueDataset] of valueDatasets) {\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"set\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey: null,\n\t\t\t\t\t\t\tvalue: inputValue\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.add(valueDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/strictObject/strictObject.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction strictObject(entries$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"strict_object\",\n\t\treference: strictObject,\n\t\texpects: \"Object\",\n\t\tasync: false,\n\t\tentries: entries$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tfor (const key in this.entries) {\n\t\t\t\t\tconst valueSchema = this.entries[key];\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\tconst valueDataset = valueSchema[\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) {\n\t\t\t\t\tfor (const key in input) if (!(key in this.entries)) {\n\t\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\t\tinput: key,\n\t\t\t\t\t\t\texpected: \"never\",\n\t\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/strictObject/strictObjectAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction strictObjectAsync(entries$1, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"strict_object\",\n\t\treference: strictObjectAsync,\n\t\texpects: \"Object\",\n\t\tasync: true,\n\t\tentries: entries$1,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = {};\n\t\t\t\tconst valueDatasets = await Promise.all(Object.entries(this.entries).map(async ([key, valueSchema]) => {\n\t\t\t\t\tif (key in input || (valueSchema.type === \"exact_optional\" || valueSchema.type === \"optional\" || valueSchema.type === \"nullish\") && valueSchema.default !== void 0) {\n\t\t\t\t\t\tconst value$1 = key in input ? input[key] : await /* @__PURE__ */ getDefault(valueSchema);\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\t\tawait valueSchema[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t\t];\n\t\t\t\t\t}\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tinput[key],\n\t\t\t\t\t\tvalueSchema,\n\t\t\t\t\t\tnull\n\t\t\t\t\t];\n\t\t\t\t}));\n\t\t\t\tfor (const [key, value$1, valueSchema, valueDataset] of valueDatasets) if (valueDataset) {\n\t\t\t\t\tif (valueDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of valueDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = valueDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!valueDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value[key] = valueDataset.value;\n\t\t\t\t} else if (valueSchema.fallback !== void 0) dataset.value[key] = await /* @__PURE__ */ getFallback(valueSchema);\n\t\t\t\telse if (valueSchema.type !== \"exact_optional\" && valueSchema.type !== \"optional\" && valueSchema.type !== \"nullish\") {\n\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\tinput: void 0,\n\t\t\t\t\t\texpected: `\"${key}\"`,\n\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t\t\tif (config$1.abortEarly) break;\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) {\n\t\t\t\t\tfor (const key in input) if (!(key in this.entries)) {\n\t\t\t\t\t\t_addIssue(this, \"key\", dataset, config$1, {\n\t\t\t\t\t\t\tinput: key,\n\t\t\t\t\t\t\texpected: \"never\",\n\t\t\t\t\t\t\tpath: [{\n\t\t\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\t\t\torigin: \"key\",\n\t\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue: input[key]\n\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/strictTuple/strictTuple.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction strictTuple(items, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"strict_tuple\",\n\t\treference: strictTuple,\n\t\texpects: \"Array\",\n\t\tasync: false,\n\t\titems,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tfor (let key = 0; key < this.items.length; key++) {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\tconst itemDataset = this.items[key][\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t\tif (!(dataset.issues && config$1.abortEarly) && this.items.length < input.length) _addIssue(this, \"type\", dataset, config$1, {\n\t\t\t\t\tinput: input[this.items.length],\n\t\t\t\t\texpected: \"never\",\n\t\t\t\t\tpath: [{\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\tkey: this.items.length,\n\t\t\t\t\t\tvalue: input[this.items.length]\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/strictTuple/strictTupleAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction strictTupleAsync(items, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"strict_tuple\",\n\t\treference: strictTupleAsync,\n\t\texpects: \"Array\",\n\t\tasync: true,\n\t\titems,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tconst itemDatasets = await Promise.all(this.items.map(async (item, key) => {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\tawait item[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t];\n\t\t\t\t}));\n\t\t\t\tfor (const [key, value$1, itemDataset] of itemDatasets) {\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t\tif (!(dataset.issues && config$1.abortEarly) && this.items.length < input.length) _addIssue(this, \"type\", dataset, config$1, {\n\t\t\t\t\tinput: input[this.items.length],\n\t\t\t\t\texpected: \"never\",\n\t\t\t\t\tpath: [{\n\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\tkey: this.items.length,\n\t\t\t\t\t\tvalue: input[this.items.length]\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/string/string.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction string(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"string\",\n\t\treference: string,\n\t\texpects: \"string\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (typeof dataset.value === \"string\") dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/symbol/symbol.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction symbol(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"symbol\",\n\t\treference: symbol,\n\t\texpects: \"symbol\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (typeof dataset.value === \"symbol\") dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/tuple/tuple.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction tuple(items, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"tuple\",\n\t\treference: tuple,\n\t\texpects: \"Array\",\n\t\tasync: false,\n\t\titems,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tfor (let key = 0; key < this.items.length; key++) {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\tconst itemDataset = this.items[key][\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/tuple/tupleAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction tupleAsync(items, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"tuple\",\n\t\treference: tupleAsync,\n\t\texpects: \"Array\",\n\t\tasync: true,\n\t\titems,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tconst itemDatasets = await Promise.all(this.items.map(async (item, key) => {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\tawait item[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t];\n\t\t\t\t}));\n\t\t\t\tfor (const [key, value$1, itemDataset] of itemDatasets) {\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/tupleWithRest/tupleWithRest.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction tupleWithRest(items, rest, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"tuple_with_rest\",\n\t\treference: tupleWithRest,\n\t\texpects: \"Array\",\n\t\tasync: false,\n\t\titems,\n\t\trest,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tfor (let key = 0; key < this.items.length; key++) {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\tconst itemDataset = this.items[key][\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) for (let key = this.items.length; key < input.length; key++) {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\tconst itemDataset = this.rest[\"~run\"]({ value: value$1 }, config$1);\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/tupleWithRest/tupleWithRestAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction tupleWithRestAsync(items, rest, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"tuple_with_rest\",\n\t\treference: tupleWithRestAsync,\n\t\texpects: \"Array\",\n\t\tasync: true,\n\t\titems,\n\t\trest,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (Array.isArray(input)) {\n\t\t\t\tdataset.typed = true;\n\t\t\t\tdataset.value = [];\n\t\t\t\tconst [normalDatasets, restDatasets] = await Promise.all([Promise.all(this.items.map(async (item, key) => {\n\t\t\t\t\tconst value$1 = input[key];\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\tawait item[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t];\n\t\t\t\t})), Promise.all(input.slice(this.items.length).map(async (value$1, key) => {\n\t\t\t\t\treturn [\n\t\t\t\t\t\tkey + this.items.length,\n\t\t\t\t\t\tvalue$1,\n\t\t\t\t\t\tawait this.rest[\"~run\"]({ value: value$1 }, config$1)\n\t\t\t\t\t];\n\t\t\t\t}))]);\n\t\t\t\tfor (const [key, value$1, itemDataset] of normalDatasets) {\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly) for (const [key, value$1, itemDataset] of restDatasets) {\n\t\t\t\t\tif (itemDataset.issues) {\n\t\t\t\t\t\tconst pathItem = {\n\t\t\t\t\t\t\ttype: \"array\",\n\t\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\tvalue: value$1\n\t\t\t\t\t\t};\n\t\t\t\t\t\tfor (const issue of itemDataset.issues) {\n\t\t\t\t\t\t\tif (issue.path) issue.path.unshift(pathItem);\n\t\t\t\t\t\t\telse issue.path = [pathItem];\n\t\t\t\t\t\t\tdataset.issues?.push(issue);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!dataset.issues) dataset.issues = itemDataset.issues;\n\t\t\t\t\t\tif (config$1.abortEarly) {\n\t\t\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!itemDataset.typed) dataset.typed = false;\n\t\t\t\t\tdataset.value.push(itemDataset.value);\n\t\t\t\t}\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/undefined/undefined.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction undefined_(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"undefined\",\n\t\treference: undefined_,\n\t\texpects: \"undefined\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === void 0) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/undefinedable/undefinedable.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction undefinedable(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"undefinedable\",\n\t\treference: undefinedable,\n\t\texpects: `(${wrapped.expects} | undefined)`,\n\t\tasync: false,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === void 0) {\n\t\t\t\tif (this.default !== void 0) dataset.value = /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === void 0) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/undefinedable/undefinedableAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction undefinedableAsync(wrapped, default_) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"undefinedable\",\n\t\treference: undefinedableAsync,\n\t\texpects: `(${wrapped.expects} | undefined)`,\n\t\tasync: true,\n\t\twrapped,\n\t\tdefault: default_,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === void 0) {\n\t\t\t\tif (this.default !== void 0) dataset.value = await /* @__PURE__ */ getDefault(this, dataset, config$1);\n\t\t\t\tif (dataset.value === void 0) {\n\t\t\t\t\tdataset.typed = true;\n\t\t\t\t\treturn dataset;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.wrapped[\"~run\"](dataset, config$1);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/union/utils/_subIssues/_subIssues.ts\n/**\n* Returns the sub issues of the provided datasets for the union issue.\n*\n* @param datasets The datasets.\n*\n* @returns The sub issues.\n*\n* @internal\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction _subIssues(datasets) {\n\tlet issues;\n\tif (datasets) for (const dataset of datasets) if (issues) for (const issue of dataset.issues) issues.push(issue);\n\telse issues = dataset.issues;\n\treturn issues;\n}\n\n//#endregion\n//#region src/schemas/union/union.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction union(options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"union\",\n\t\treference: union,\n\t\texpects: /* @__PURE__ */ _joinExpects(options.map((option) => option.expects), \"|\"),\n\t\tasync: false,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tlet validDataset;\n\t\t\tlet typedDatasets;\n\t\t\tlet untypedDatasets;\n\t\t\tfor (const schema of this.options) {\n\t\t\t\tconst optionDataset = schema[\"~run\"]({ value: dataset.value }, config$1);\n\t\t\t\tif (optionDataset.typed) if (optionDataset.issues) if (typedDatasets) typedDatasets.push(optionDataset);\n\t\t\t\telse typedDatasets = [optionDataset];\n\t\t\t\telse {\n\t\t\t\t\tvalidDataset = optionDataset;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse if (untypedDatasets) untypedDatasets.push(optionDataset);\n\t\t\t\telse untypedDatasets = [optionDataset];\n\t\t\t}\n\t\t\tif (validDataset) return validDataset;\n\t\t\tif (typedDatasets) {\n\t\t\t\tif (typedDatasets.length === 1) return typedDatasets[0];\n\t\t\t\t_addIssue(this, \"type\", dataset, config$1, { issues: /* @__PURE__ */ _subIssues(typedDatasets) });\n\t\t\t\tdataset.typed = true;\n\t\t\t} else if (untypedDatasets?.length === 1) return untypedDatasets[0];\n\t\t\telse _addIssue(this, \"type\", dataset, config$1, { issues: /* @__PURE__ */ _subIssues(untypedDatasets) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/union/unionAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction unionAsync(options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"union\",\n\t\treference: unionAsync,\n\t\texpects: /* @__PURE__ */ _joinExpects(options.map((option) => option.expects), \"|\"),\n\t\tasync: true,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tlet validDataset;\n\t\t\tlet typedDatasets;\n\t\t\tlet untypedDatasets;\n\t\t\tfor (const schema of this.options) {\n\t\t\t\tconst optionDataset = await schema[\"~run\"]({ value: dataset.value }, config$1);\n\t\t\t\tif (optionDataset.typed) if (optionDataset.issues) if (typedDatasets) typedDatasets.push(optionDataset);\n\t\t\t\telse typedDatasets = [optionDataset];\n\t\t\t\telse {\n\t\t\t\t\tvalidDataset = optionDataset;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse if (untypedDatasets) untypedDatasets.push(optionDataset);\n\t\t\t\telse untypedDatasets = [optionDataset];\n\t\t\t}\n\t\t\tif (validDataset) return validDataset;\n\t\t\tif (typedDatasets) {\n\t\t\t\tif (typedDatasets.length === 1) return typedDatasets[0];\n\t\t\t\t_addIssue(this, \"type\", dataset, config$1, { issues: /* @__PURE__ */ _subIssues(typedDatasets) });\n\t\t\t\tdataset.typed = true;\n\t\t\t} else if (untypedDatasets?.length === 1) return untypedDatasets[0];\n\t\t\telse _addIssue(this, \"type\", dataset, config$1, { issues: /* @__PURE__ */ _subIssues(untypedDatasets) });\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/unknown/unknown.ts\n/**\n* Creates a unknown schema.\n*\n* @returns A unknown schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction unknown() {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"unknown\",\n\t\treference: unknown,\n\t\texpects: \"unknown\",\n\t\tasync: false,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset) {\n\t\t\tdataset.typed = true;\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/variant/variant.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction variant(key, options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"variant\",\n\t\treference: variant,\n\t\texpects: \"Object\",\n\t\tasync: false,\n\t\tkey,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tlet outputDataset;\n\t\t\t\tlet maxDiscriminatorPriority = 0;\n\t\t\t\tlet invalidDiscriminatorKey = this.key;\n\t\t\t\tlet expectedDiscriminators = [];\n\t\t\t\tconst parseOptions = (variant$1, allKeys) => {\n\t\t\t\t\tfor (const schema of variant$1.options) {\n\t\t\t\t\t\tif (schema.type === \"variant\") parseOptions(schema, new Set(allKeys).add(schema.key));\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tlet keysAreValid = true;\n\t\t\t\t\t\t\tlet currentPriority = 0;\n\t\t\t\t\t\t\tfor (const currentKey of allKeys) {\n\t\t\t\t\t\t\t\tconst discriminatorSchema = schema.entries[currentKey];\n\t\t\t\t\t\t\t\tif (currentKey in input ? discriminatorSchema[\"~run\"]({\n\t\t\t\t\t\t\t\t\ttyped: false,\n\t\t\t\t\t\t\t\t\tvalue: input[currentKey]\n\t\t\t\t\t\t\t\t}, ABORT_EARLY_CONFIG).issues : discriminatorSchema.type !== \"exact_optional\" && discriminatorSchema.type !== \"optional\" && discriminatorSchema.type !== \"nullish\") {\n\t\t\t\t\t\t\t\t\tkeysAreValid = false;\n\t\t\t\t\t\t\t\t\tif (invalidDiscriminatorKey !== currentKey && (maxDiscriminatorPriority < currentPriority || maxDiscriminatorPriority === currentPriority && currentKey in input && !(invalidDiscriminatorKey in input))) {\n\t\t\t\t\t\t\t\t\t\tmaxDiscriminatorPriority = currentPriority;\n\t\t\t\t\t\t\t\t\t\tinvalidDiscriminatorKey = currentKey;\n\t\t\t\t\t\t\t\t\t\texpectedDiscriminators = [];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (invalidDiscriminatorKey === currentKey) expectedDiscriminators.push(schema.entries[currentKey].expects);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcurrentPriority++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (keysAreValid) {\n\t\t\t\t\t\t\t\tconst optionDataset = schema[\"~run\"]({ value: input }, config$1);\n\t\t\t\t\t\t\t\tif (!outputDataset || !outputDataset.typed && optionDataset.typed) outputDataset = optionDataset;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (outputDataset && !outputDataset.issues) break;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tparseOptions(this, new Set([this.key]));\n\t\t\t\tif (outputDataset) return outputDataset;\n\t\t\t\t_addIssue(this, \"type\", dataset, config$1, {\n\t\t\t\t\tinput: input[invalidDiscriminatorKey],\n\t\t\t\t\texpected: /* @__PURE__ */ _joinExpects(expectedDiscriminators, \"|\"),\n\t\t\t\t\tpath: [{\n\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\tkey: invalidDiscriminatorKey,\n\t\t\t\t\t\tvalue: input[invalidDiscriminatorKey]\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/variant/variantAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction variantAsync(key, options, message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"variant\",\n\t\treference: variantAsync,\n\t\texpects: \"Object\",\n\t\tasync: true,\n\t\tkey,\n\t\toptions,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tconst input = dataset.value;\n\t\t\tif (input && typeof input === \"object\") {\n\t\t\t\tlet outputDataset;\n\t\t\t\tlet maxDiscriminatorPriority = 0;\n\t\t\t\tlet invalidDiscriminatorKey = this.key;\n\t\t\t\tlet expectedDiscriminators = [];\n\t\t\t\tconst parseOptions = async (variant$1, allKeys) => {\n\t\t\t\t\tfor (const schema of variant$1.options) {\n\t\t\t\t\t\tif (schema.type === \"variant\") await parseOptions(schema, new Set(allKeys).add(schema.key));\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tlet keysAreValid = true;\n\t\t\t\t\t\t\tlet currentPriority = 0;\n\t\t\t\t\t\t\tfor (const currentKey of allKeys) {\n\t\t\t\t\t\t\t\tconst discriminatorSchema = schema.entries[currentKey];\n\t\t\t\t\t\t\t\tif (currentKey in input ? (await discriminatorSchema[\"~run\"]({\n\t\t\t\t\t\t\t\t\ttyped: false,\n\t\t\t\t\t\t\t\t\tvalue: input[currentKey]\n\t\t\t\t\t\t\t\t}, ABORT_EARLY_CONFIG)).issues : discriminatorSchema.type !== \"exact_optional\" && discriminatorSchema.type !== \"optional\" && discriminatorSchema.type !== \"nullish\") {\n\t\t\t\t\t\t\t\t\tkeysAreValid = false;\n\t\t\t\t\t\t\t\t\tif (invalidDiscriminatorKey !== currentKey && (maxDiscriminatorPriority < currentPriority || maxDiscriminatorPriority === currentPriority && currentKey in input && !(invalidDiscriminatorKey in input))) {\n\t\t\t\t\t\t\t\t\t\tmaxDiscriminatorPriority = currentPriority;\n\t\t\t\t\t\t\t\t\t\tinvalidDiscriminatorKey = currentKey;\n\t\t\t\t\t\t\t\t\t\texpectedDiscriminators = [];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (invalidDiscriminatorKey === currentKey) expectedDiscriminators.push(schema.entries[currentKey].expects);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcurrentPriority++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (keysAreValid) {\n\t\t\t\t\t\t\t\tconst optionDataset = await schema[\"~run\"]({ value: input }, config$1);\n\t\t\t\t\t\t\t\tif (!outputDataset || !outputDataset.typed && optionDataset.typed) outputDataset = optionDataset;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (outputDataset && !outputDataset.issues) break;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tawait parseOptions(this, new Set([this.key]));\n\t\t\t\tif (outputDataset) return outputDataset;\n\t\t\t\t_addIssue(this, \"type\", dataset, config$1, {\n\t\t\t\t\tinput: input[invalidDiscriminatorKey],\n\t\t\t\t\texpected: /* @__PURE__ */ _joinExpects(expectedDiscriminators, \"|\"),\n\t\t\t\t\tpath: [{\n\t\t\t\t\t\ttype: \"object\",\n\t\t\t\t\t\torigin: \"value\",\n\t\t\t\t\t\tinput,\n\t\t\t\t\t\tkey: invalidDiscriminatorKey,\n\t\t\t\t\t\tvalue: input[invalidDiscriminatorKey]\n\t\t\t\t\t}]\n\t\t\t\t});\n\t\t\t} else _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/schemas/void/void.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction void_(message$1) {\n\treturn {\n\t\tkind: \"schema\",\n\t\ttype: \"void\",\n\t\treference: void_,\n\t\texpects: \"void\",\n\t\tasync: false,\n\t\tmessage: message$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tif (dataset.value === void 0) dataset.typed = true;\n\t\t\telse _addIssue(this, \"type\", dataset, config$1);\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/keyof/keyof.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction keyof(schema, message$1) {\n\treturn /* @__PURE__ */ picklist(Object.keys(schema.entries), message$1);\n}\n\n//#endregion\n//#region src/methods/message/message.ts\n/**\n* Changes the local message configuration of a schema.\n*\n* @param schema The schema to configure.\n* @param message_ The error message.\n*\n* @returns The configured schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction message(schema, message_) {\n\treturn {\n\t\t...schema,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\treturn schema[\"~run\"](dataset, {\n\t\t\t\t...config$1,\n\t\t\t\tmessage: message_\n\t\t\t});\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/omit/omit.ts\n/**\n* Creates a modified copy of an object schema that does not contain the\n* selected entries.\n*\n* @param schema The schema to omit from.\n* @param keys The selected entries.\n*\n* @returns An object schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction omit(schema, keys) {\n\tconst entries$1 = { ...schema.entries };\n\tfor (const key of keys) delete entries$1[key];\n\treturn {\n\t\t...schema,\n\t\tentries: entries$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/parse/parse.ts\n/**\n* Parses an unknown input based on a schema.\n*\n* @param schema The schema to be used.\n* @param input The input to be parsed.\n* @param config The parse configuration.\n*\n* @returns The parsed input.\n*/\nfunction parse(schema, input, config$1) {\n\tconst dataset = schema[\"~run\"]({ value: input }, /* @__PURE__ */ getGlobalConfig(config$1));\n\tif (dataset.issues) throw new ValiError(dataset.issues);\n\treturn dataset.value;\n}\n\n//#endregion\n//#region src/methods/parse/parseAsync.ts\n/**\n* Parses an unknown input based on a schema.\n*\n* @param schema The schema to be used.\n* @param input The input to be parsed.\n* @param config The parse configuration.\n*\n* @returns The parsed input.\n*/\nasync function parseAsync(schema, input, config$1) {\n\tconst dataset = await schema[\"~run\"]({ value: input }, /* @__PURE__ */ getGlobalConfig(config$1));\n\tif (dataset.issues) throw new ValiError(dataset.issues);\n\treturn dataset.value;\n}\n\n//#endregion\n//#region src/methods/parser/parser.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction parser(schema, config$1) {\n\tconst func = (input) => parse(schema, input, config$1);\n\tfunc.schema = schema;\n\tfunc.config = config$1;\n\treturn func;\n}\n\n//#endregion\n//#region src/methods/parser/parserAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction parserAsync(schema, config$1) {\n\tconst func = (input) => parseAsync(schema, input, config$1);\n\tfunc.schema = schema;\n\tfunc.config = config$1;\n\treturn func;\n}\n\n//#endregion\n//#region src/methods/partial/partial.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction partial(schema, keys) {\n\tconst entries$1 = {};\n\tfor (const key in schema.entries) entries$1[key] = !keys || keys.includes(key) ? /* @__PURE__ */ optional(schema.entries[key]) : schema.entries[key];\n\treturn {\n\t\t...schema,\n\t\tentries: entries$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/partial/partialAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction partialAsync(schema, keys) {\n\tconst entries$1 = {};\n\tfor (const key in schema.entries) entries$1[key] = !keys || keys.includes(key) ? /* @__PURE__ */ optionalAsync(schema.entries[key]) : schema.entries[key];\n\treturn {\n\t\t...schema,\n\t\tentries: entries$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/pick/pick.ts\n/**\n* Creates a modified copy of an object schema that contains only the selected\n* entries.\n*\n* @param schema The schema to pick from.\n* @param keys The selected entries.\n*\n* @returns An object schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction pick(schema, keys) {\n\tconst entries$1 = {};\n\tfor (const key of keys) entries$1[key] = schema.entries[key];\n\treturn {\n\t\t...schema,\n\t\tentries: entries$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/pipe/pipe.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction pipe(...pipe$1) {\n\treturn {\n\t\t...pipe$1[0],\n\t\tpipe: pipe$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\t\"~run\"(dataset, config$1) {\n\t\t\tfor (const item of pipe$1) if (item.kind !== \"metadata\") {\n\t\t\t\tif (dataset.issues && (item.kind === \"schema\" || item.kind === \"transformation\")) {\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly && !config$1.abortPipeEarly) dataset = item[\"~run\"](dataset, config$1);\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/pipe/pipeAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction pipeAsync(...pipe$1) {\n\treturn {\n\t\t...pipe$1[0],\n\t\tpipe: pipe$1,\n\t\tasync: true,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t},\n\t\tasync \"~run\"(dataset, config$1) {\n\t\t\tfor (const item of pipe$1) if (item.kind !== \"metadata\") {\n\t\t\t\tif (dataset.issues && (item.kind === \"schema\" || item.kind === \"transformation\")) {\n\t\t\t\t\tdataset.typed = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!dataset.issues || !config$1.abortEarly && !config$1.abortPipeEarly) dataset = await item[\"~run\"](dataset, config$1);\n\t\t\t}\n\t\t\treturn dataset;\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/required/required.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction required(schema, arg2, arg3) {\n\tconst keys = Array.isArray(arg2) ? arg2 : void 0;\n\tconst message$1 = Array.isArray(arg2) ? arg3 : arg2;\n\tconst entries$1 = {};\n\tfor (const key in schema.entries) entries$1[key] = !keys || keys.includes(key) ? /* @__PURE__ */ nonOptional(schema.entries[key], message$1) : schema.entries[key];\n\treturn {\n\t\t...schema,\n\t\tentries: entries$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/required/requiredAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction requiredAsync(schema, arg2, arg3) {\n\tconst keys = Array.isArray(arg2) ? arg2 : void 0;\n\tconst message$1 = Array.isArray(arg2) ? arg3 : arg2;\n\tconst entries$1 = {};\n\tfor (const key in schema.entries) entries$1[key] = !keys || keys.includes(key) ? /* @__PURE__ */ nonOptionalAsync(schema.entries[key], message$1) : schema.entries[key];\n\treturn {\n\t\t...schema,\n\t\tentries: entries$1,\n\t\tget \"~standard\"() {\n\t\t\treturn /* @__PURE__ */ _getStandardProps(this);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/methods/safeParse/safeParse.ts\n/**\n* Parses an unknown input based on a schema.\n*\n* @param schema The schema to be used.\n* @param input The input to be parsed.\n* @param config The parse configuration.\n*\n* @returns The parse result.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction safeParse(schema, input, config$1) {\n\tconst dataset = schema[\"~run\"]({ value: input }, /* @__PURE__ */ getGlobalConfig(config$1));\n\treturn {\n\t\ttyped: dataset.typed,\n\t\tsuccess: !dataset.issues,\n\t\toutput: dataset.value,\n\t\tissues: dataset.issues\n\t};\n}\n\n//#endregion\n//#region src/methods/safeParse/safeParseAsync.ts\n/**\n* Parses an unknown input based on a schema.\n*\n* @param schema The schema to be used.\n* @param input The input to be parsed.\n* @param config The parse configuration.\n*\n* @returns The parse result.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nasync function safeParseAsync(schema, input, config$1) {\n\tconst dataset = await schema[\"~run\"]({ value: input }, /* @__PURE__ */ getGlobalConfig(config$1));\n\treturn {\n\t\ttyped: dataset.typed,\n\t\tsuccess: !dataset.issues,\n\t\toutput: dataset.value,\n\t\tissues: dataset.issues\n\t};\n}\n\n//#endregion\n//#region src/methods/safeParser/safeParser.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction safeParser(schema, config$1) {\n\tconst func = (input) => /* @__PURE__ */ safeParse(schema, input, config$1);\n\tfunc.schema = schema;\n\tfunc.config = config$1;\n\treturn func;\n}\n\n//#endregion\n//#region src/methods/safeParser/safeParserAsync.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction safeParserAsync(schema, config$1) {\n\tconst func = (input) => /* @__PURE__ */ safeParseAsync(schema, input, config$1);\n\tfunc.schema = schema;\n\tfunc.config = config$1;\n\treturn func;\n}\n\n//#endregion\n//#region src/methods/summarize/summarize.ts\n/**\n* Summarize the error messages of issues in a pretty-printable multi-line string.\n*\n* @param issues The list of issues.\n*\n* @returns A summary of the issues.\n*\n* @beta\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction summarize(issues) {\n\tlet summary = \"\";\n\tfor (const issue of issues) {\n\t\tif (summary) summary += \"\\n\";\n\t\tsummary += `× ${issue.message}`;\n\t\tconst dotPath = /* @__PURE__ */ getDotPath(issue);\n\t\tif (dotPath) summary += `\\n  → at ${dotPath}`;\n\t}\n\treturn summary;\n}\n\n//#endregion\n//#region src/methods/unwrap/unwrap.ts\n/**\n* Unwraps the wrapped schema.\n*\n* @param schema The schema to be unwrapped.\n*\n* @returns The unwrapped schema.\n*/\n/* @__NO_SIDE_EFFECTS__ */\nfunction unwrap(schema) {\n\treturn schema.wrapped;\n}\n\n//#endregion\nexports.BASE64_REGEX = BASE64_REGEX;\nexports.BIC_REGEX = BIC_REGEX;\nexports.CUID2_REGEX = CUID2_REGEX;\nexports.DECIMAL_REGEX = DECIMAL_REGEX;\nexports.DIGITS_REGEX = DIGITS_REGEX;\nexports.DOMAIN_REGEX = DOMAIN_REGEX;\nexports.EMAIL_REGEX = EMAIL_REGEX;\nexports.EMOJI_REGEX = EMOJI_REGEX;\nexports.HEXADECIMAL_REGEX = HEXADECIMAL_REGEX;\nexports.HEX_COLOR_REGEX = HEX_COLOR_REGEX;\nexports.IMEI_REGEX = IMEI_REGEX;\nexports.IPV4_REGEX = IPV4_REGEX;\nexports.IPV6_REGEX = IPV6_REGEX;\nexports.IP_REGEX = IP_REGEX;\nexports.ISO_DATE_REGEX = ISO_DATE_REGEX;\nexports.ISO_DATE_TIME_REGEX = ISO_DATE_TIME_REGEX;\nexports.ISO_DATE_TIME_SECOND_REGEX = ISO_DATE_TIME_SECOND_REGEX;\nexports.ISO_TIMESTAMP_REGEX = ISO_TIMESTAMP_REGEX;\nexports.ISO_TIME_REGEX = ISO_TIME_REGEX;\nexports.ISO_TIME_SECOND_REGEX = ISO_TIME_SECOND_REGEX;\nexports.ISO_WEEK_REGEX = ISO_WEEK_REGEX;\nexports.ISRC_REGEX = ISRC_REGEX;\nexports.JWS_COMPACT_REGEX = JWS_COMPACT_REGEX;\nexports.MAC48_REGEX = MAC48_REGEX;\nexports.MAC64_REGEX = MAC64_REGEX;\nexports.MAC_REGEX = MAC_REGEX;\nexports.NANO_ID_REGEX = NANO_ID_REGEX;\nexports.OCTAL_REGEX = OCTAL_REGEX;\nexports.RFC_EMAIL_REGEX = RFC_EMAIL_REGEX;\nexports.SLUG_REGEX = SLUG_REGEX;\nexports.ULID_REGEX = ULID_REGEX;\nexports.UUID_REGEX = UUID_REGEX;\nexports.ValiError = ValiError;\nexports._addIssue = _addIssue;\nexports._cloneDataset = _cloneDataset;\nexports._formatCase = _formatCase;\nexports._getByteCount = _getByteCount;\nexports._getGraphemeCount = _getGraphemeCount;\nexports._getLastMetadata = _getLastMetadata;\nexports._getStandardProps = _getStandardProps;\nexports._getWordCount = _getWordCount;\nexports._isLuhnAlgo = _isLuhnAlgo;\nexports._isValidObjectKey = _isValidObjectKey;\nexports._joinExpects = _joinExpects;\nexports._stringify = _stringify;\nexports.any = any;\nexports.args = args;\nexports.argsAsync = argsAsync;\nexports.array = array;\nexports.arrayAsync = arrayAsync;\nexports.assert = assert;\nexports.awaitAsync = awaitAsync;\nexports.base64 = base64;\nexports.bic = bic;\nexports.bigint = bigint;\nexports.blob = blob;\nexports.boolean = boolean;\nexports.brand = brand;\nexports.bytes = bytes;\nexports.cache = cache;\nexports.cacheAsync = cacheAsync;\nexports.check = check;\nexports.checkAsync = checkAsync;\nexports.checkItems = checkItems;\nexports.checkItemsAsync = checkItemsAsync;\nexports.config = config;\nexports.creditCard = creditCard;\nexports.cuid2 = cuid2;\nexports.custom = custom;\nexports.customAsync = customAsync;\nexports.date = date;\nexports.decimal = decimal;\nexports.deleteGlobalConfig = deleteGlobalConfig;\nexports.deleteGlobalMessage = deleteGlobalMessage;\nexports.deleteSchemaMessage = deleteSchemaMessage;\nexports.deleteSpecificMessage = deleteSpecificMessage;\nexports.description = description;\nexports.digits = digits;\nexports.domain = domain;\nexports.email = email;\nexports.emoji = emoji;\nexports.empty = empty;\nexports.endsWith = endsWith;\nexports.entries = entries;\nexports.entriesFromList = entriesFromList;\nexports.entriesFromObjects = entriesFromObjects;\nexports.enum = enum_;\nexports.enum_ = enum_;\nexports.everyItem = everyItem;\nexports.exactOptional = exactOptional;\nexports.exactOptionalAsync = exactOptionalAsync;\nexports.examples = examples;\nexports.excludes = excludes;\nexports.fallback = fallback;\nexports.fallbackAsync = fallbackAsync;\nexports.file = file;\nexports.filterItems = filterItems;\nexports.findItem = findItem;\nexports.finite = finite;\nexports.flatten = flatten;\nexports.flavor = flavor;\nexports.forward = forward;\nexports.forwardAsync = forwardAsync;\nexports.function = function_;\nexports.function_ = function_;\nexports.getDefault = getDefault;\nexports.getDefaults = getDefaults;\nexports.getDefaultsAsync = getDefaultsAsync;\nexports.getDescription = getDescription;\nexports.getDotPath = getDotPath;\nexports.getExamples = getExamples;\nexports.getFallback = getFallback;\nexports.getFallbacks = getFallbacks;\nexports.getFallbacksAsync = getFallbacksAsync;\nexports.getGlobalConfig = getGlobalConfig;\nexports.getGlobalMessage = getGlobalMessage;\nexports.getMetadata = getMetadata;\nexports.getSchemaMessage = getSchemaMessage;\nexports.getSpecificMessage = getSpecificMessage;\nexports.getTitle = getTitle;\nexports.graphemes = graphemes;\nexports.gtValue = gtValue;\nexports.guard = guard;\nexports.hash = hash;\nexports.hexColor = hexColor;\nexports.hexadecimal = hexadecimal;\nexports.imei = imei;\nexports.includes = includes;\nexports.instance = instance;\nexports.integer = integer;\nexports.intersect = intersect;\nexports.intersectAsync = intersectAsync;\nexports.ip = ip;\nexports.ipv4 = ipv4;\nexports.ipv6 = ipv6;\nexports.is = is;\nexports.isOfKind = isOfKind;\nexports.isOfType = isOfType;\nexports.isValiError = isValiError;\nexports.isbn = isbn;\nexports.isoDate = isoDate;\nexports.isoDateTime = isoDateTime;\nexports.isoDateTimeSecond = isoDateTimeSecond;\nexports.isoTime = isoTime;\nexports.isoTimeSecond = isoTimeSecond;\nexports.isoTimestamp = isoTimestamp;\nexports.isoWeek = isoWeek;\nexports.isrc = isrc;\nexports.jwsCompact = jwsCompact;\nexports.keyof = keyof;\nexports.lazy = lazy;\nexports.lazyAsync = lazyAsync;\nexports.length = length;\nexports.literal = literal;\nexports.looseObject = looseObject;\nexports.looseObjectAsync = looseObjectAsync;\nexports.looseTuple = looseTuple;\nexports.looseTupleAsync = looseTupleAsync;\nexports.ltValue = ltValue;\nexports.mac = mac;\nexports.mac48 = mac48;\nexports.mac64 = mac64;\nexports.map = map;\nexports.mapAsync = mapAsync;\nexports.mapItems = mapItems;\nexports.maxBytes = maxBytes;\nexports.maxEntries = maxEntries;\nexports.maxGraphemes = maxGraphemes;\nexports.maxLength = maxLength;\nexports.maxSize = maxSize;\nexports.maxValue = maxValue;\nexports.maxWords = maxWords;\nexports.message = message;\nexports.metadata = metadata;\nexports.mimeType = mimeType;\nexports.minBytes = minBytes;\nexports.minEntries = minEntries;\nexports.minGraphemes = minGraphemes;\nexports.minLength = minLength;\nexports.minSize = minSize;\nexports.minValue = minValue;\nexports.minWords = minWords;\nexports.multipleOf = multipleOf;\nexports.nan = nan;\nexports.nanoid = nanoid;\nexports.never = never;\nexports.nonEmpty = nonEmpty;\nexports.nonNullable = nonNullable;\nexports.nonNullableAsync = nonNullableAsync;\nexports.nonNullish = nonNullish;\nexports.nonNullishAsync = nonNullishAsync;\nexports.nonOptional = nonOptional;\nexports.nonOptionalAsync = nonOptionalAsync;\nexports.normalize = normalize;\nexports.notBytes = notBytes;\nexports.notEntries = notEntries;\nexports.notGraphemes = notGraphemes;\nexports.notLength = notLength;\nexports.notSize = notSize;\nexports.notValue = notValue;\nexports.notValues = notValues;\nexports.notWords = notWords;\nexports.null = null_;\nexports.null_ = null_;\nexports.nullable = nullable;\nexports.nullableAsync = nullableAsync;\nexports.nullish = nullish;\nexports.nullishAsync = nullishAsync;\nexports.number = number;\nexports.object = object;\nexports.objectAsync = objectAsync;\nexports.objectWithRest = objectWithRest;\nexports.objectWithRestAsync = objectWithRestAsync;\nexports.octal = octal;\nexports.omit = omit;\nexports.optional = optional;\nexports.optionalAsync = optionalAsync;\nexports.parse = parse;\nexports.parseAsync = parseAsync;\nexports.parseBoolean = parseBoolean;\nexports.parseJson = parseJson;\nexports.parser = parser;\nexports.parserAsync = parserAsync;\nexports.partial = partial;\nexports.partialAsync = partialAsync;\nexports.partialCheck = partialCheck;\nexports.partialCheckAsync = partialCheckAsync;\nexports.pick = pick;\nexports.picklist = picklist;\nexports.pipe = pipe;\nexports.pipeAsync = pipeAsync;\nexports.promise = promise;\nexports.rawCheck = rawCheck;\nexports.rawCheckAsync = rawCheckAsync;\nexports.rawTransform = rawTransform;\nexports.rawTransformAsync = rawTransformAsync;\nexports.readonly = readonly;\nexports.record = record;\nexports.recordAsync = recordAsync;\nexports.reduceItems = reduceItems;\nexports.regex = regex;\nexports.required = required;\nexports.requiredAsync = requiredAsync;\nexports.returns = returns;\nexports.returnsAsync = returnsAsync;\nexports.rfcEmail = rfcEmail;\nexports.safeInteger = safeInteger;\nexports.safeParse = safeParse;\nexports.safeParseAsync = safeParseAsync;\nexports.safeParser = safeParser;\nexports.safeParserAsync = safeParserAsync;\nexports.set = set;\nexports.setAsync = setAsync;\nexports.setGlobalConfig = setGlobalConfig;\nexports.setGlobalMessage = setGlobalMessage;\nexports.setSchemaMessage = setSchemaMessage;\nexports.setSpecificMessage = setSpecificMessage;\nexports.size = size;\nexports.slug = slug;\nexports.someItem = someItem;\nexports.sortItems = sortItems;\nexports.startsWith = startsWith;\nexports.strictObject = strictObject;\nexports.strictObjectAsync = strictObjectAsync;\nexports.strictTuple = strictTuple;\nexports.strictTupleAsync = strictTupleAsync;\nexports.string = string;\nexports.stringifyJson = stringifyJson;\nexports.summarize = summarize;\nexports.symbol = symbol;\nexports.title = title;\nexports.toBigint = toBigint;\nexports.toBoolean = toBoolean;\nexports.toCamelCase = toCamelCase;\nexports.toDate = toDate;\nexports.toKebabCase = toKebabCase;\nexports.toLowerCase = toLowerCase;\nexports.toMaxValue = toMaxValue;\nexports.toMinValue = toMinValue;\nexports.toNumber = toNumber;\nexports.toPascalCase = toPascalCase;\nexports.toSnakeCase = toSnakeCase;\nexports.toString = toString;\nexports.toUpperCase = toUpperCase;\nexports.transform = transform;\nexports.transformAsync = transformAsync;\nexports.trim = trim;\nexports.trimEnd = trimEnd;\nexports.trimStart = trimStart;\nexports.tuple = tuple;\nexports.tupleAsync = tupleAsync;\nexports.tupleWithRest = tupleWithRest;\nexports.tupleWithRestAsync = tupleWithRestAsync;\nexports.ulid = ulid;\nexports.undefined = undefined_;\nexports.undefined_ = undefined_;\nexports.undefinedable = undefinedable;\nexports.undefinedableAsync = undefinedableAsync;\nexports.union = union;\nexports.unionAsync = unionAsync;\nexports.unknown = unknown;\nexports.unwrap = unwrap;\nexports.url = url;\nexports.uuid = uuid;\nexports.value = value;\nexports.values = values;\nexports.variant = variant;\nexports.variantAsync = variantAsync;\nexports.void = void_;\nexports.void_ = void_;\nexports.words = words;","// 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// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\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__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"chunks/\" + chunkId + \".\" + {\"311\":\"a5e0ba29dc55ada75a0c\",\"498\":\"d6f810a73bf4407725f3\",\"634\":\"045830ebb32682c30ee6\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\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};","__webpack_require__.p = \"/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t303: 0,\n\t666: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkliftosaur\"] = self[\"webpackChunkliftosaur\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"],"names":["inProgress","dataWebpackPrefix","_hydrate","_aiPromptContent","_pageWrapper","_jsxRuntime","module","exports","r","a","length","e","n","Array","__esModule","isArray","ReferenceError","asyncGeneratorStep","t","o","c","i","u","value","done","Promise","resolve","then","this","arguments","apply","_next","_throw","TypeError","isNativeReflectConstruct","setPrototypeOf","Reflect","construct","push","p","bind","prototype","toPropertyKey","_defineProperties","enumerable","configurable","writable","Object","defineProperty","key","_arrayLikeToArray","_createForOfIteratorHelperLoose","Symbol","iterator","call","next","toString","slice","constructor","name","from","test","_extends","assign","hasOwnProperty","_typeof","_defineProperty","toPrimitive","String","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","_objectSpread2","forEach","getOwnPropertyDescriptors","defineProperties","_objectWithoutPropertiesLoose","indexOf","_getPrototypeOf","getPrototypeOf","__proto__","create","Function","_isNativeReflectConstruct","Boolean","valueOf","l","f","objectWithoutPropertiesLoose","propertyIsEnumerable","assertThisInitialized","_setPrototypeOf","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","iterableToArray","Number","arrayLikeToArray","isNativeFunction","_wrapNativeSuper","Map","has","get","set","Wrapper","adminKey","userId","undefined","_reactNative","require","_url","_collection","_encoder","_historyDelta","_historyIds","Service_nativeClientHeaders","Platform","OS","_deleteApiKey","_createApiKey","_deletePushToken","_postPushToken","_getApiKeys","_getUserContext","_getMuscles","_programDetail","_programsIndex","_getDataFromShortUrl","_postShortUrl","_deleteAccount","_verifySubscriptionKey","_verifyGooglePurchaseToken","_verifyAppleReceipt","_postImageUploadUrl","_getUploadedImages","_postEvent","_cacheVerdict","_getExceptionData","_getDebugSnapshotStorage","_getDebugSnapshotList","_getStorage","_postClaimCoupon","_deleteProgram","_postSaveSettings","_postSaveProgram","_postAddFreeUser","_checkAdminKey","_postClaimKey","_postDebug","_postSetupTestAccount","_createDebugSession","_completeSyncHistory","_postSync","_getProgramRevision","_getProgramRevisions","_refreshGoogleSubscription","_signout","_changePassword","_verifyEmail","_resetPassword","_forgotPassword","_emailAuth","_emailSignIn","_emailSignUp","_appleSignIn","_getHistoryByIds","_getHistory","_getAllHistoryRecords","_googleSignIn","cachePromises","Service_withAdminTarget","rawUrl","admin","url","UrlUtils_build","searchParams","_createClass2","default","Service","client","_classCallCheck2","_asyncToGenerator2","token","id","args","body","JSON","stringify","forceuseremail","forcedUserEmail","historylimit","response","method","credentials","headers","json","storage","history","getAllHistoryRecords","alreadyFetchedHistory","historyLimit","email","user_id","is_new_user","session","_x","_x2","_x3","historyResponse","getHistory","after","limit","CollectionUtils_uniqBy","_x4","_x5","ids","_ref","_this","chunks","CollectionUtils_inGroupsOf","HistoryIds_MAX","pages","all","map","chunk","join","status","Error","_x7","flat","_x6","code","idToken","_x8","_x9","_x0","password","emailAuth","_x1","_x10","_x11","_x12","_x13","_x14","type","error","ok","providers","_x15","_x16","catch","_x17","_x18","_x19","_x20","currentPassword","newPassword","_x21","_x22","googlePurchaseToken","result","subscription","_x23","_x24","programId","success","data","text","message","_x25","_x26","revision","_x27","_x28","_x29","tempUserId","storageUpdate","timestamp","Date","now","deviceId","compressedBody","Encoder_encode","payload","signal","completeSyncHistory","mode","_x30","missingIds","HistoryDelta_missingIds","local","_versions","fetched","getHistoryByIds","HistoryDelta_unresolvedIds","full","HistoryDelta_apply","_x31","_x32","_x33","_x34","apiKey","authorization","_x35","_x36","state","meta","compressed","_x37","_x38","_x39","userid","claim","_x40","_","_x41","_x42","_x43","program","source","_x44","_x45","_x46","_x47","_x48","platform","_ref2","expires","appleOffer","googleOffer","affiliate","_x49","_x50","storageId","_x51","_x52","_x53","_x54","list","_x55","_x56","parse","Encoder_decode","_x57","_x58","_x59","apiUrl","_x60","_x61","fn","_x62","_x63","event","window","location","href","_x64","images","fileName","contentType","_x65","_x66","appleReceipt","_this2","cacheVerdict","_x67","_x68","_this3","_x69","_x70","enforce","user","clear","_x71","_x72","urlToShorten","src","__HOST__","_x73","_x74","_x75","_x76","_x77","category","_x78","exercise","_x79","account","units","_x80","encodeURIComponent","_x81","_x82","_x83","props","service","jsx","View","style","minWidth","maxWidth","alignSelf","width","children","AccountLoggedInView","dispatch","AccountLoggedOutView","redirectUrl","onSignIn","onOpenEmailAuth","_react","_text","_service","_generator","_googleAccessToken","_button","_input","_linkButton","_iconApple","_iconDoc","_iconDumbbell","_iconGoogle","_iconSpinner","_thunks","_posthog","_tailwindConfig","_appleAuth","_dialog","isWeb","changePasswordErrorMessages","invalid_credentials","invalid_password","password_too_long","not_authorized","network_error","ChangePasswordForm","_useState","useState","_useState2","_slicedToArray2","isSubmitting","setIsSubmitting","_useState3","_useState4","setError","_useState5","_useState6","setDone","currentRef","useRef","newRef","repeatRef","_submit","current","err","changePassword","jsxs","className","Text","Button","kind","onClick","onDone","Input","label","identifier","changeType","autoCapitalize","autoCorrect","changeHandler","testID","disabled","submit","IconSpinner","height","color","Tailwind_semantic","alwayswhite","_useState7","_useState8","isLoading","setIsLoading","_useState9","_useState0","showChangePassword","setShowChangePassword","LinkButton","onPress","Fragment","numberOfPrograms","IconDoc","numberOfWorkouts","IconDumbbell","signout","reload","Thunk_logOut","_useState1","_useState10","_useState11","_useState12","showEmailForm","setShowEmailForm","useEffect","AppleAuth_init","EmailAuthForm","Pressable","select","ios","shadowColor","shadowOffset","shadowOpacity","shadowRadius","android","elevation","boxShadow","track","Thunk_googleSignIn","newState","accessToken","getGoogleAccessToken","UidFactory_generateUid","googleSignIn","IconGoogle","Thunk_appleSignIn","appleResult","AppleAuth_signIn","Dialog_alert","appleSignIn","id_token","marginTop","IconApple","EmailAuthButton","emailAuthErrorMessages","invalid_email","account_exists","account_not_found","wrong_password","too_many_attempts","email_send_failed","_useState13","_useState14","setMode","_useState15","_useState16","_useState17","_useState18","_useState19","_useState20","info","setInfo","emailRef","passwordRef","switchMode","newMode","onModeChange","handleResult","confirmationSent","_submit2","trim","Thunk_emailAuth","emailSignUp","emailSignIn","onSent","Thunk_forgotPassword","forgotPassword","buttonSize","textSize","includes","containerCn","textCn","accessibilityLabel","trackClick","useTrackClick","userOnPress","PressableComponent","sticky","StickyPressable","accessibilityRole","containsString","_pressable","_clickTracking","some","backgroundColor","alt","target","_iconInstagramFlat","IconInstagramFlat","size","_iconYoutube","IconYoutube","secondaryColor","_iconReddit","IconReddit","_iconDiscord","IconDiscord","footerLinks","link","startsWith","preventDefault","lftConsent","open","_iconSvg","IconSvg","viewBox","fill","_svg","Path","d","icon","neutral","bgColor","background","subtle","Rect","rx","fillRule","clipRule","stroke","strokeWidth","strokeLinecap","strokeLinejoin","white","scale","useRemScale","spinValue","Animated","Value","animation","loop","timing","toValue","duration","easing","Easing","linear","useNativeDriver","start","stop","rotate","interpolate","inputRange","outputRange","Math","round","transform","_useRem","Circle","cx","cy","noRemScale","rest","_objectWithoutProperties2","_excluded","Svg","IconSvg_scale","WeakMap","_t","_interopRequireWildcard","_string","_math","selectInputOnFocus","HTMLInputElement","handleNumber","setSelectionRange","forwardRef","ref","inputSize","errorMessage","patternMessage","requiredMessage","changeTypeProp","isLabelOutside","labelSizeProp","labelSize","identifierProp","multiline","valueProp","defaultValue","handleRef","otherProps","autoCorrectStr","StringUtils_dashcase","toLowerCase","Set","validationErrors","setValidationErrors","touched","setTouched","internalInputRef","setInputRef","useCallback","el","useImperativeHandle","touch","validateTarget","isControlled","localValue","setLocalValue","displayMode","normalized","MathUtils_normalizeNumStr","errors","validity","patternMismatch","add","valueMissing","prev","onInputHandler","errorMessages","containerClassName","labelSizeVal","minHeight","marginBottom","top","left","onChange","onBlur","onInput","onFocus","fontSize","isFontNormal","isNoUnderline","hitSlop","bottom","right","modalRef","isHidden","prevProps","document","classList","remove","preautofocus","callback","autofocusInputRef","focus","containerRef","getElementById","element","zIndex","shouldShowClose","closeOnOverlayClick","onClose","noPaddings","maxHeight","isFullWidth","isFullHeight","overflowHidden","innerClassName","_iconCloseCircleOutline","IconCloseCircleOutline","createPortal","_reactDom","initialOnelink","Platform_onelink","onelink","setOnelink","_platform","userContext","setUserContext","isLoggedIn","setIsLoggedIn","getUserContext","ctx","display","flexDirection","skipTopNavMenu","_topNavMenu","TopNavMenu","maxBodyWidth","margin","flex","skipFooter","_footerPage","FooterPage","React","createElement","every","cl","xmlns","uri","xml","lineHeight","dangerouslySetInnerHTML","__html","_interopRequireDefault","defaults","textColorPattern","textSizePattern","effectiveClassName","fontFamily","resolveFontFamily","dataTestid","allowFontScaling","isBold","isSemiBold","isItalic","isWhite","primary","title","PageTheme_toggle","_iconMoon","IconMoon","_iconSun","IconSun","_pageTheme","isMenuOpen","setIsMenuOpen","isAccountModalOpen","setIsAccountModalOpen","mobileRight","_themeToggle","ThemeToggle","_iconHamburger","IconHamburger","_iconClose","IconClose","getMenuItems","affiliateEnabled","_onelink","Onelink","redditname","googlename","_iconGooglePlay","IconGooglePlay","DesktopNav","onAccountClick","ModalAccount","_account","_iconUser","_modal","hideClass","purple","IconUser","green","Modal","Account","env","action","oldState","isFinishDayAction","isExternalStorageMerge","Storage_isChanged","Thunk_sync2","log","settings","gyms","converted","EquipmentUnits_follow","updateState","lb","record","identity","PushRegistration_identityChanged","setIdentity","progress","Progress_getCurrentProgress","Progress_isSetTimerCheckDue","Thunk_checkSetTimer","programs","newProgramIds","lg","programIds","lastReducerActions","Diagnostics_getLastActions","desc","newPrograms","pi","oldProgram","Program_getProgram","newProgram","ObjectUtils_isEqual","oldDayKeys","planner","Program_getDayExerciseKeys","Program_evaluate","day","stats","weight","currentBodyweight","oldBodyweight","Stats_getCurrentMovingAverageBodyweight","Weight_build","newBodyweight","Weight_eq","Progress_getProgress","oldExerciseData","exerciseData","newExerciseData","changes","ObjectUtils_changedKeys","ObjectUtils_isNotEmpty","changedExercises","ObjectUtils_keys","affectedEntries","entries","entry","Exercise_toKey","programExerciseIds","CollectionUtils_compact","programExerciseId","oldEquipment","Equipment_getCurrentGym","equipment","newEquipment","changedEquipmentIds","equipmentId","Equipment_getEquipmentIdForExerciseType","google","Subscriptions_cleanupOutdatedGooglePurchaseTokens","setTimeout","UndoingFlag_set","workoutOutcomes","isOwnFinish","isMerge","payloads","WorkoutOutcome_healthSaves","Thunk_saveWorkoutToHealth","_getIdbKey","_getInitialState","_program2","_progress0","_storage","_lensShmens","_state","_indexeddb","_basicBeginnerProgram","_adminDebug","_log","_runner","_object","_date","_pushRegistration","_subscriptions","_undoingFlag","_diagnostics","_exercise","_nativeEffects","_history","_workoutOutcome","_equipment","_stats","_weight","_perfTracker","_perfEnabled","_perfSetCompleteProbe","_hermesProfile","_perfScorecard","_equipmentUnits","isLoggingEnabled","isAdmin","currentAccount","IndexedDBUtils_get","messageerror","messagesuccess","nosync","localStorage","rawStorage","notification","content","finalStorage","hasUnrunMigrations","unrunMigrations","maybeStorage","Storage_get","serverStorage","getStorage","maybeServerStorage","corruptedstorage","backup","postDebug","confirmed","Storage_getDefault","lastSynced","oldProgress","migratedProgress","Storage_getHistoryRecord","vtype","loading","items","basicBeginnerProgram","programsIndex","revisions","freshMigrations","AdminDebug_isDebugAccountId","editProgramStates","buildState","LogUtils_log","buildCardsReducer","effects","Progress_completeSetAction","Progress_changeAmrapAction","Progress_checkSetTimer","programExercise","otherStates","isPlayground","Progress_closeTimedSet","Progress_startSetTimerWork","startedAt","lensRecordings","reduce","memo","recording","reducerWrapper","storeToLocalStorage","persistence","applyEffects","Diagnostics_setLastState","Diagnostics_recordAction","time","DateUtils_formatHHMMSS","perfOn","PerfEnabled_isEnabled","perfActionType","perfActionDesc","perfSyncStart","reducer","NativeEffects_withoutWatchWorkout","oldHistoryLen","newHistoryLen","actionDesc","oldLen","newLen","versions","Storage_updateVersions","scheduleSave","perfDurationMs","PerfScorecard_recordAction","PerfProbe_onAction","HermesProfile_captureOnce","PerfEnabled_tier2","PerfTracker_recordEvent","PerfTracker_getSessionId","duration_ms","ts","Progress_setProgress","currentProgramId","newProgress","Program_nextHistoryRecord","historyRecord","ui","Progress_getProgressById","startTime","newStorage","Progress_finishWorkout","healthSync","Progress_isCurrent","Progress_stop","Progress_showUpdateDate","date","Progress_changeDate","h","WorkoutOutcome_add","outcome","endTime","History_deleteRecords","Progress_stopTimer","intervals","History_resumeWorkout","timers","reminder","hasSubscription","console","lensRecording","v","Progress_applyProgramDay","Progress_runInitialUpdateScripts","cb","_ref73","getState","isValid","load","checkAdminKey","_x182","_x183","_x184","_ref76","createDebugSession","force","_x191","_x192","_x193","_ref74","snapshots","getDebugSnapshotList","_x185","_x186","_x187","debugTimestamp","_ref75","AdminDebug_fetchDebugSnapshotStorage","AdminDebug_fetchStorage","debugStorage","Thunk_postevent","unregisterBeforeSignout","IndexedDBUtils_set","saveFull","getInitialState","Thunk_fetchInitial","navigateTo","getNavigationService","tab","_x188","_x189","_x190","_ref7","signInResult","SignIn_apple","AppleID","auth","_response$authorizati","signIn","handleLogin","historyRecords","customExercises","_ref61","applied","ImportSession_apply","exercises","importSessions","_x155","_x156","_ref86","IapHelpers_setLoading","lifetime","iap","getAvailablePurchases","IapHelpers_alertAlreadySubscribed","IapHelpers_clearLoading","requestInAppProduct","sku","IapHelpers_getSkus","warn","_x228","_x229","_x230","_ref24","Progress_getProgressId","hadSetTimer","setTimer","hadGetReady","setTimerGetReady","_resolveTimedSetProgr2","resolveTimedSetProgramContext","entryIndex","timerEntryIndex","setTimerClosed","amrapModal","workStarted","audio","play","volume","vibration","Thunk_refreshLiveActivity","_ref78","postClaimKey","finishFreeAccess","Thunk_log","_x197","_x198","_x199","screens","_ref42","screen","cleanupScreenEditState","_x111","_x112","setIndex","restTimer","restTimerSince","_ref22","isWarmup","warmupSets","adjustedSetIndex","Program_getFullProgram","evaluatedProgram","Program_getProgramExercise","sets","isCompleted","Thunk_updateLiveActivity","states","forceUpdateEntryIndex","isExternal","_ref44","confirmation","Screen_shouldConfirmNavigation","Dialog_confirm","navigationRef","_x113","_x114","_x115","_ref65","_x166","_x167","_x168","_ref77","setup","postSetupTestAccount","apiKeyBound","_x194","_x195","_x196","_ref67","delete","_x169","_x170","_x171","_ref69","_ref70","deleteAccount","_x178","_x175","_x176","_x177","_ref48","_x123","_ref45","_x116","_ref4","_ref55","csv","CSV_toString","History_exportAsCSV","Exporter_toFile","DateUtils_formatYYYYMMDD","_x139","_x140","_x141","_ref53","Program_exportProgramToFile","version","_x133","_x134","_x135","_ref54","Program_exportProgramToLink","ClipboardUtils_copy","_x136","_x137","_x138","_ref56","PlannerProgram_generateFullText","weeks","_x142","_x143","_x144","_ref52","ImportExporter_exportStorage","_x130","_x131","_x132","_ref68","Account_getAll","_x172","_x173","_x174","_ref51","programRevisions","getProgramRevisions","Service_adminTarget","recordModify","context","Rollbar","_x127","_x128","_x129","_ref30","_x86","_x87","_x88","_ref46","isCurrent","workout","pauseWorkout","finishWorkout","_yield$getNavigationS7","goBack","onStale","_x117","_x118","_x119","_ref5","editProgram","_ref63","getLatestMigrationVersion","postShortUrl","_x160","_x161","_x162","SignIn_google","loginResult","storageJson","isLiveActivity","_ref29","watchStorage","runMigrations","WatchStorageAccount_isOtherAccount","phoneUserId","watchUserId","phoneHistoryLen","watchHistoryLen","wasOnProgressScreen","getCurrentScreenData","hadProgress","mergedStorage","Storage_mergeStorage","prevEntryIndex","currentEntryIndex","mergedHistoryLen","beforeProgress","afterProgress","timer","timerSince","timerMode","Subscriptions_hasSubscription","remaining","timerEffects","Progress_scheduleTimerNotification","NativeEffects_apply","stopTimer","liveActivityEffects","LiveActivityManager_updateLiveActivityForNextEntry","progressIsNowEmpty","discardWorkout","Thunk_pushScreen","mergedIds","ackedIds","watch","sendStorageAckToWatch","_x84","_x85","_ref90","subscriptionLoading","_x238","_x239","_ref92","skus","subs","fetchSubscriptions","monthly","yearly","inApp","fetchInAppProducts","newPrices","newOffers","sub","displayPrice","mapped","subscriptionOffers","offerId","formattedPrice","product","storedPrices","subscriptionPrices","k","_x243","_x244","_x245","purchase","_ref88","_getState","keepScreen","keepSubscriptionScreenOpen","renewsAsProductId","receipt","IapHelpers_readReceiptOrJwsIOS","Thunk_setAppleReceipt","purchaseToken","productId","Thunk_setGooglePurchaseToken","price","currency","resolved","getProductPrice","Analytics_trackPurchase","transactionId","transactionDate","finishTransaction","Thunk_iapRefreshActiveSubscriptions","_x234","_x235","_x236","_ref89","_x237","_ref80","apple","Thunk_restorePurchases","_x203","_x204","_x205","rawCsv","_ref58","importWithSpinner","ImportFromLiftosaur_convertLiftosaurCsvToHistoryRecords","ImportFileError","_x148","_x149","_x150","_ref62","ImportFromLink_importFromLink","Storage_setAffiliate","Thunk_importProgram","_x157","_x158","_x159","_ref59","ImportFromHevy_convertHevyCsvToHistoryRecords","_x151","_x152","_ref57","parsedMaybeStorage","_x145","_ref38","reviewRequests","lastReviewRequest","InAppReview_request","_x103","_x104","_ref39","signupRequests","lastsignupRequest","_x105","_x106","_ref40","OnloadModal_getNext","Thunk_maybeRequestHearAboutUs","_x107","_x108","progressId","exerciseType","_ref34","Progress_lbProgress","navigateToModal","_x95","_ref95","_dispatch","openManageSubscriptions","StoreRuntime_storeName","_x252","_x253","_x254","_ref47","History_pauseWorkoutState","_x120","_x121","_x122","_ref28","_ref26","_ref10","_ref83","_x212","_x213","_x214","_ref31","currentProgram","Program_isEmpty","Program_editAction","_x89","_x90","workoutProgramId","_ref35","isFromWorkout","editProgramIds","fromWorkout","_x96","_x97","dayData","opts","_ref33","editProgramId","editProgramState","_x93","_x94","keepTiming","recordedSeconds","phaseId","_ref23","setTimerModal","_resolveTimedSetProgr","keepSetTimerRunning","_ref81","StoreRuntime_isIos","StoreRuntime_isAndroid","postClaimCoupon","_result$data2","_x206","_x207","_x208","_ref91","presentCodeRedemptionSheetIOS","_x240","_x241","_x242","_ref14","health","requestPermissions","_ref13","bodyweight","bodyfat","waist","saveMeasurements","_ref12","intervalsCount","saveWorkout","successAlert","_ref32","_x91","_x92","queuedTap","_ref27","getReady","countdownStartedAt","tappedAt","buildSubscribeThunk","_ref71","_x179","_x180","_x181","_ref94","requestSubscription","active","subscriptionStatus","getActiveSubscriptions","find","s","isActive","purchaseTokenAndroid","isDeferred","androidOldPurchaseToken","androidOldProductId","androidReplacementMode","until","_x249","_x250","_x251","_ref15","appleSyncEnabled","appleHealthSyncMeasurements","appleHealthSyncSleepNutrition","googleSyncEnabled","googleHealthSyncMeasurements","googleHealthSyncSleepNutrition","HealthSync_eligibleForAppleHealth","HealthSync_eligibleForGoogleHealth","queue","enqueue","_syncHealthKit2","_syncHealthKit","sessionId","_ref60","editedCount","ImportSession_findEditedRecordIds","editedWarning","sourceName","workoutCount","StringUtils_pluralize","DateUtils_format","undone","ImportSession_undo","_x153","_x154","params","_ref37","isReady","setParams","_x100","_x101","_x102","newTimer","skipLiveActivityUpdate","_ref20","Progress_updateTimer","updateProgress","_navUtils","_program","_signIn","_inAppReview","_state3","_importexporter","_importSession","_importTypes","_csv","_exporter","_reducer","_whatsnewUtils","_watchAuthHandoff","_onloadModal","_screen","_iapHelpers","_storeRuntime","_clipboard","_progress","_set","_importFromLink","_migrations","_watchStorageAccount","_rollbar","_importFromLiftosaur","_importFromHevy","_sync3","_syncBaseline","_syncAccountMismatch","_editStats","_healthSync","_plannerProgram","_deviceId","_liveActivityManager","_analytics","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","NoRetryError","_Error","noretry","_inherits2","_wrapNativeSuper2","extra","_ref6","detail","_ref9","affiliates","Subscriptions_listOfSubscriptions","referrer","landingPage","Thunk_verifySubscriptionKey","_ref0","verifySubscriptionKey","_ref1","isDebugAccount","keychain","clearAuthToken","SignOut_google","sendClearAuthToWatch","_sync2","_sync","handleResponse","baseline","SyncBaseline_afterClean","sent","new_original_id","SyncBaseline_fromServer","currentStorage","currentHistoryLen","serverHistoryLen","historyVersions","serverDeletedHistory","deleted","probeMergeTarget","PerfProbe_isTarget","probeMergeT0","merged","HistoryDelta_sortNewestFirst","merge_ms","history_len","oldPrograms","oldVersions","newVersions","switchedAccount","_x255","_switchedAccount","mismatch","SyncAccountMismatch_fromResponse","_switchToSyncAccount","switchToSyncAccount","fetchReason","SyncBaseline_needsFetch","reason","lastUserId","newUserId","postSync","aborted","probeSyncTarget","probeSyncT0","Sync_getStorageUpdate2","build_ms","has_update","sentStorage","sentTempUserId","localUserId","serverUserId","flushSave","localCopy","localStorageResult","plan","SyncAccountMismatch_plan","currentTempUserId","hasLocalCopy","syncMeasurements","syncSleepNutrition","anchor","appleHealthAnchor","googleHealthAnchor","weightUnit","lengthUnit","lengthUnits","EditStats_uploadHealthStats","versionStats","statType","concat","getDeletedStats","windowDays","daily","syncDailyMetrics","metrics","EditStats_uploadDailyMetrics","_ref17","isProcessing","getIsProcessing","queueLength","_ref18","args2","_ref21","LiveActivityManager_updateProgressLiveActivity","_ref25","Reps_findNextEntryAndSetIndex","timerSetIndex","Progress_getFirstIncompleteWorkoutSet","absoluteSetIndex","_ref36","stack","scroll","_x98","_x99","_ref41","OnloadModal_shouldShowHearAboutUs","_x109","_x110","progresses","ObjectUtils_omit","Thunk_pullScreen","Thunk_fetchPrograms","_ref49","index","details","programDetail","Program_create","author","shortDescription","description","isMultiweek","tags","_x124","_x125","_x126","_x146","_x147","_importWithSpinner","importLinkData","_ref64","maybeProgram","decoded","ImportExporter_getExportedProgram","_result$data","existingCustomExerciseNames","ObjectUtils_values","newCustomExercises","ObjectUtils_filter","authorid","ObjectUtils_clone","clonedAt","PlannerProgram_hasNonSelectedWeightUnit","fromUnit","Weight_oppositeUnit","toUnit","PlannerProgram_switchToUnit","findIndex","CollectionUtils_setAt","_x163","_x164","_x165","_ref79","whatsNew","WhatsNew_updateStorage","Subscriptions_verifyAppleReceipt","Subscriptions_setAppleReceipt","Subscriptions_cleanupOutdatedAppleReceipts","_x200","_x201","_x202","_ref82","_x209","_x210","_x211","_ref84","Subscriptions_verifyGooglePurchaseToken","Subscriptions_setGooglePurchaseToken","_x215","_x216","_x217","_x218","_x219","_x220","_load2","reject","_load","attempt","_x221","_x222","_x223","_x224","_handleLogin","oldUserId","configure","RollbarUtils_config","person","storageResult","Analytics_trackSignUp","new_userid","DeviceId_get","expiresAt","floor","setAuthToken","WatchAuthHandoff_accountId","sendAuthToWatch","loadingKey","_ref85","applePromo","IapHelpers_applePromoToAdapter","googleOfferId","googlePromo","_x225","_x226","_x227","_ref87","interactive","purchases","_x231","_x232","_x233","_ref93","serverPending","_yield$Promise$all","_yield$Promise$all2","owned","lifetimeSku","ownedLifetime","patchedSubs","activeStoreSub","refreshGoogleSubscription","pendingProduct","expirationDate","hint","subscriptionPendingHint","hintValid","keepHint","effectivePending","pendingProductId","_x246","_x247","_x248","parseFloat","Version","_ImportExporter_getExportedProgram","_ImportExporter_handleUniversalLink","_settings","parsedMaybeProgram","exportedProgram","PlannerProgram_convertExportedPlannerToProgram","Settings_build","ObjectUtils_pick","pathname","_lr","spec_Keyword","if","else","for","LRParser","deserialize","stateData","goto","nodeNames","maxTerm","skippedNodes","repeatNodeCount","tokenData","tokenizers","topRules","Program","specialized","term","tokenPrec","_liftoscriptFns","_liftoscript","_liftoscriptPrint","NodeName","LiftoscriptSyntaxError","_SyntaxError","line","offset","to","SyntaxError","getChildren","node","cur","cursor","firstChild","nextSibling","assert","LiftoscriptEvaluator","script","bindings","fns","fnContext","unit","vars","updates","getValue","_this$getLineAndOffse","getLineAndOffset","_this$getLineAndOffse2","NumberExpression","WeightExpression","Percentage","ParenthesisExpression","_getChildren","inner","staticTypeOfNode","Ternary","_getChildren3","_getChildren4","or","thenType","BinaryExpression","_getChildren5","_getChildren6","operator","side","VariableExpression","VariableIndex","nameNode","getChild","Keyword","LiftoscriptFns_bindingStaticType","stringNotAllowed","LiftoscriptFns_isValidArg","LiftoscriptFns_acceptsTypeAt","argText","argSignature","LiftoscriptFns_argSignature","printedValue","Weight_is","Weight_isPct","Weight_print","argName","got","linesLengths","split","lineLength","expr","numberNode","unitNode","Unit","num","evaluate","programNode","shift","getWeight","oldWeightStr","newWeightStr","Weight_smartConvert","substring","stateKeys","StateVariable","stateKey","getStateKey","StateVariableIndex","stateKeyNode","_getChildren7","_getChildren8","AndOr","isLeftString","isStaticString","op","Cmp","other","otherType","AssignmentExpression","IncAssignmentExpression","Variable","opNode","IncAssignment","_getChildren9","_loop","checkStaticStrings","isError","BuiltinFunctionExpression","_getChildren1","_getChildren10","_toArray2","keyword","fnArgs","LiftoscriptFns_isFnName","arity","LiftoscriptFns_arity","min","max","expected","fnArg","staticType","ForExpression","variableNode","_getChildren11","indexExprs","variableKey","_getChildren13","_getChildren14","indexExpr","rejectString","v1","expression","oldNumberOfSets","weights","evaluatedValue","MathUtils_applyOp","numberOfSets","evaluateToNumber","originalWeights","reps","minReps","RPE","w","mr","setTime","amraps","logrpes","askweights","completedReps","completedRepsLeft","cr","cw","completedWeights","completedRPE","ns","Weight_buildAny","indexes","ie","indexValues","calculateIndexValues","normalizedIndexValues","normalizeTarget","evalutedValue","evaluateToNumberOrWeightOrPercentage","newValue","Weight_applyOp","rm1","Weight_convertToWeight","roundWeight","MathUtils_round","MathUtils_clamp","maxTargetLength","_normalizedIndexValue2","week","setVariationIndex","_normalizedIndexValue3","exerciseVariationIndex","_normalizedIndexValue4","descriptionIndex","_normalizedIndexValue5","Wildcard","newTarget","unshift","toNumber","isEqual","LiftoscriptPrint_formatValue","subtract","multiply","divide","modulo","BlockExpression","child","isSkipped","_getChildren15","_getChildren16","evalLeft","evalRight","Plus","Times","operate","compareText","comparator","Weight_gt","Weight_lt","Weight_gte","Weight_lte","comparing","plusNode","MathUtils_roundFloat","Weight_buildPct","getValueRaw","_getChildren17","_getChildren18","condition","forInExpression","ForInExpression","blockNode","forIn","varKey","replace","IfExpression","parenthesisNodes","blockNodes","parenthesisNode","lastBlock","_getChildren19","_getChildren21","_getChildren23","_getChildren24","indexNode","indexEval","variable","recordVariableUpdate","changeNumberOfSets","changeBinding","_getChildren25","_getChildren26","stateVar","incAssignmentExpr","currentValue","_getChildren27","_getChildren28","argValues","validateFnArg","UnaryExpression","_getChildren29","_getChildren31","_getChildren32","Current","binding","one","two","operation","b","onerm","Weight_op","oldScript","LiftoscriptParser","keywordNode","parent","pattern","colonIndex","nameAndEquipment","Exercise_resolveNameAndEquipment","defaultEquipment","programExerciseKey","PlannerKey_fromFullName","_plannerKey","number","percentage","array","string","sample","signature","liftoscriptFnSignatures","optional","VScriptBindings","schema","is","_types","optionalNumbers","optionalWeights","VWeight","object","dayInWeek","union","VPercentage","completedSetTime","completedSetTimeLeft","picklist","programNumberOfSets","completedNumberOfSets","scalar","numberOrWeight","numberOrWeightArray","nullish","aggregatable","boolean","returns","roundConvertWeight","calculateTrainingMax","calculate1RM","rpeMultiplier","ceil","sum","variadic","zeroOrGte","print","any","isProgramExercise","isExercise","increment","decrement","lines","legacy","LiftoscriptPrint_formatLegacy","LiftoscriptPrint_formatLine","values","prints","latestMigrationVersion","CollectionUtils_sort","migrations","parseInt","_plannerExerciseEvaluator","_muscleGroupSplit","aStorage","originalWeight","deletedGyms","plannerProgram","customExerciseKey","customExercise","updatedAt","graphs","graph","completedWeight","workoutSettings","targetType","days","newExerciseStr","PlannerExerciseEvaluator","changeWeightsToCompletedWeights","exerciseText","createdAt","gym","random","muscleGroups","progressUi","muscleMultipliers","oldMultipliers","newMultipliers","mm","muscle","multiplier","Progress_getEntryId","legacyUi","renames","sort","escapeRegExp","rename","RegExp","records","showWorkoutNotes","notes","showExerciseNotes","EquipmentUnits_attachSetups","MuscleGroupSplit_migrate","maxVersion","Storage_partialStorageToStorage","currentVersion","maxVersionInt","versionStr","_Account_getAll","nickname","getAccountSummaries","summary","_AdminDebug_fetchDebugSnapshotStorage","_AdminDebug_fetchStorage","adminDebugPrefix","AdminDebug_scrambledTempUserId","snapshotStorage","getDebugSnapshotStorage","pgms","Thunk_pushToEditProgram","Program_createFromHistoryRecord","customPrograms","emptyProgramId","weekIndex","exerciseUi","edit","collapsed","dayUi","past","future","PlannerProgramExercise_getState","ObjectUtils_diff","newEvalutedProgram","PP_iterate2","ex","ObjectUtils_entries","stateMetadata","updateStateVariable","ProgramToPlanner","convertToPlanner","findBy","nextDay","_editProgramLenses","_pp","_plannerProgramExercise","_programToPlanner","prefix","oldExerciseType","newExerciseType","oldExercise","Exercise_get","startingWeightKg","startingWeightLb","oldName","flatMap","removeStateVariableMetadata","editStateVariable","isNaN","sharedTime","st","Stats_insertByTimestamp","coll","hidden","byKey","sleep","calories","protein","upsert","existing","incoming","existingByTimestamp","incomingByTimestamp","inc","prevUuid","appleUuid","googleUuid","uuid","kept","CollectionUtils_sortBy","statsHealthDef","upserted","dataAny","deletedStatsArr","deletedStats","added","weightValues","bodyfatValues","waistValues","Weight_roundTo005","Weight_convertTo","Length_convertTo","applyValues","_length","gymId","isDeleted","bar","kg","plates","fixed","isFixed","equipmentSettings","Equipment_isBuiltIn","builtInEquipmentKey","equipments","eq","builtInEquipmentName","equipmentName","Equipment_currentEquipment","gymEquipment","firstEquipment","g","Equipment_getEquipmentDataForExerciseType","equipmentUnit","acc","newEquipmentData","oldEquipmentData","CollectionUtils_concatBy","Equipment_setupIn","_equipmentSetup","Equipment_getGymByIdOrCurrent","currentGymId","exerciseEquipment","currentGym","Equipment_legacyChanged","setupLegacyHash","EquipmentSetup_legacyHash","EquipmentSetup_fromLegacy","pairs","EquipmentDefaults_build","legacyDefaultSetup","_equipmentLegacyDefaults","_equipmentSetupEdit","typedSetup","ranges","step","EquipmentSetupEdit_default","bands","combine","EquipmentLegacyDefaults_all","band","Equipment_build","EquipmentSetup_save","barbell","trapbar","leverageMachine","smith","dumbbell","ezbar","cable","kettlebell","combinations","item","MAX_COMBINATIONS","query","withAllPlates","attempts","warmup","selectIn","exact","scaleFor","plateLoad","sides","horns","heaviest","mergePlates","onePlatePerHornLoad","option","withinBounds","pickerFor","effective","EquipmentLoadSolver_reachable","rounding","LB_PER_KG","EPSILON","STEP_OFFSET","clean","convertExact","convertForCaller","MathUtils_roundTo000005","plate","lastInRange","range","rangeFloor","x","rangeCeil","valuesFloor","best","candidate","valuesCeil","total","sorted","before","combination","count","pinNumber","pin","previousLast","last","abs","addOnOptions","builtin","addOn","builtins","plateSets","options","rangesPicker","addOns","toInstruction","pick","direction","chosen","build","largestPlatesAtMost","inventory","types","precision","maxDecimals","dot","pow","precisionOf","intTarget","intWeights","maxFrom","bestRemaining","iterations","search","newRemaining","platesTotal","subtractPlates","used","taken","splitByHorns","loaded","ratio","ratioSum","shares","greedy","loadedSoFar","deviation","isLast","goal","picked","loadHornByHorn","closestSplit","steps","Infinity","byHorn","loads","singles","_loop2","handOut","plateCount","budget","maxDeviation","restShares","deviationOf","lowerBoundOf","candidates","maxTotal","subset","plateSubsets","_ret","y","diff","compareHeavierFirst","skipAddOnsInWarmups","stacks","stackCount","showPinNumbers","warmupPlates","perSide","toOption","leftOut","smallestPlatesAtLeast","reverse","bandsPicker","pullRatio","base","hasBodyweight","share","sign","maxLoad","isMirroredTarget","isAssistanceOnly","loadFor","roundLoad","picker","loadTarget","below","above","capLoad","cap","capLoadValue","callerValueOf","caller","isMirrored","matchingCallerValue","toResult","instruction","roundingTarget","CONVERTED_ROUNDING_STEP","workingValue","firstWorkingWeight","pickers","hasWarmupInventory","capped","towards","truncated","EquipmentLoadText_line","bars","EquipmentLoadText_hornBars","chips","EquipmentLoadText_bandChips","main","EquipmentLoadText_format","roundForText","hasPullRatio","hidesWeight","handle","isOver","difference","roundingReason","singlePlates","platesText","CollectionUtils_compressArray","EquipmentSetupEdit_bandColor","addOnText","instructionText","convertWeight","convertRanges","convertValues","convertPlates","_convertRanges","fixedUnit","weightsIn","usesBodyweight","useBodyweightForBar","heaviestFirst","isAssisting","unsortedSetup","EquipmentSetup_sortPlates","saved","EquipmentSetup_toLegacy","parts","rangesText","ratioText","loadedHorns","bodyweightText","typeErrors","isNumber","_equipmentLoadSolver","PLATE_EQUIVALENTS","pair","legacyBar","otherValue","legacyPlates","rangeValues","legacyAssisting","legacyStepPlates","legacyFixed","unique","first","stackToLegacy","canonical","StringUtils_hashString","previous","convertStep","end","isFinite","rangeErrors","countErrors","what","isInteger","toUpperCase","combinationErrors","EquipmentLoadSolver_hasTooManyTotals","names","usedColors","EquipmentSetupEdit_bandColors","withFirst","newHorn","EquipmentSetupEdit_addPlates","EquipmentSetupEdit_addValue","isBodyweightLogged","example","roundForHelp","counted","EquipmentSetupEdit_bodyweightPercent","supported","EquipmentSetupEdit_bodyweightMode","appUnit","EquipmentSetupEdit_apply","EquipmentSetupEdit_types","pins","examples","isBridged","logAsTotal","_excluded3","withBodyweight","percent","trimmed","isTaken","horn","_excluded2","choice","patch","change","updated","DEFAULT_HORN_NAMES","defaultPlates","defaultBands","EquipmentSetupEdit_bandColorName","isLb","pinUnit","EquipmentSetupEdit_setPlateCount","others","mapEquipment","EquipmentDefaults_inUnit","EquipmentSetup_convertUnit","_equipmentDefaults","isChanged","allExercises","tMuscles","sMuscles","smallImageUrl","largeImageUrl","newExercise","Exercise_editCustomExercise","deletedExerciseKey","deletedExercise","targetMuscles","bodyParts","synergistMuscles","Exercise_createCustomExercise","Exercise_getById","sortedEquipment","Exercise_getMetadata","medicineball","eqp","Equipment_getUnitOrDefaultForExerciseType","muscles","Exercise_defaultSynergistMuscles","allMuscleGroups","Muscle_getScreenMusclesFromMuscle","muscleGroup","Exercise_defaultTargetMuscles","allExercisesList","parsed","tokenizeQuery","tokens","scored","score","scoreExerciseAgainstTokens","fullName","byName","localeCompare","StringUtils_fuzzySearch","filterTypes","_id","targetMuscleGroups","CollectionUtils_flat","m","Muscle_getMuscleGroupName","synergistMuscleGroups","ft","StringUtils_capitalize","isSubstitute","Exercise_allExpanded","Exercise_filterExercises","Exercise_filterExercisesByType","Exercise_sortExercises","maybeGetExercise","exerciseId","Exercise_findIdByName","Exercise_findById","_type$split","_type$split2","slug","possibleEquipments","equipmentKey","StringUtils_camelCase","StringUtils_undashcase","Exercise_buildName","getExercise","override","volumeMultiplier","programExerciseWarmupSets","defaultWarmup","warmupValues","warmup10","warmup45","warmup95","Exercise_applyCustomExerciseChange","updateSettings","EditProgram_updateProgram","forbiddenExerciseNameChars","allEquipment","rm","forbiddenExerciseNameCharsAll","ce","tm","Exercise_targetMuscles","sm","Exercise_synergistMuscles","rated","Exercise_all","Exercise_similarRating","Muscle_getMusclesFromScreenMuscle","rating","Exercise_synergistMuscleMultipliers","Exercise_toUrlSlug","_muscle4","_exerciseImage","_editProgram","abWheel","arnoldPress","aroundTheWorld","backExtension","ballSlams","battleRopes","behindTheNeckPress","benchDip","benchPress","benchPressCloseGrip","benchPressWideGrip","bentOverOneArmRow","bentOverRow","bicepCurl","bicycleCrunch","boxJump","boxSquat","bulgarianSplitSquat","burpee","cableCrossover","cableCrunch","cableKickback","cablePullThrough","cableTwist","calfPressOnLegPress","calfPressOnSeatedLegPress","chestDip","chestFly","chestPress","chestSupportedRow","chinUp","cleanandJerk","concentrationCurl","crossBodyCrunch","crunch","cycling","deadlift","deadliftHighPull","declineBenchPress","declineCrunch","deficitDeadlift","ellipticalMachine","facePull","flatKneeRaise","flatLegRaise","frontRaise","frontSquat","gobletSquat","goodMorning","gluteBridge","gluteBridgeMarch","gluteKickback","hackSquat","hammerCurl","handstandPushUp","hangClean","hangSnatch","hangingLegRaise","highKneeSkips","highRow","hipAbductor","hipAdductor","hipThrust","inclineBenchPress","inclineBenchPressWideGrip","inclineChestFly","inclineChestPress","inclineCurl","inclineRow","invertedRow","isoLateralChestPress","isoLateralRow","jackknifeSitUp","jumpRope","jumpSquat","jumpingJack","kettlebellSwing","kettlebellTurkishGetUp","kippingPullUp","kneeRaise","kneelingPulldown","kneestoElbows","latPulldown","lateralBoxJump","lateralRaise","legsUpBenchPress","legCurl","legExtension","legPress","lunge","lyingBicepCurl","lyingLegCurl","mountainClimber","muscleUp","obliqueCrunch","overheadPress","overheadSquat","pecDeck","pendlayRow","pistolSquat","plank","powerClean","powerSnatch","preacherCurl","pressUnder","pullUp","pullover","pushPress","pushUp","reverseCrunch","reverseCurl","reverseFly","reverseGripConcentrationCurl","reversePlank","reverseLatPulldown","reverseLunge","reverseWristCurl","romanianDeadlift","reverseHyperextension","rowing","russianTwist","safetySquatBarSquat","seatedCalfRaise","seatedFrontRaise","seatedLegCurl","seatedLegPress","seatedOverheadPress","seatedPalmsUpWristCurl","seatedRow","seatedWideGripRow","shoulderPress","shoulderPressParallelGrip","shrug","sideBend","sideCrunch","sideHipAbductor","sideLyingClam","sidePlank","singleLegBridge","singleLegCalfRaise","singleLegDeadlift","singleLegGluteBridgeBench","singleLegGluteBridgeStraight","singleLegGluteBridgeBentKnee","singleLegHipThrust","sissySquat","sitUp","skullcrusher","slingShotBenchPress","snatch","snatchPull","splitSquat","splitJerk","squat","squatRow","standingCalfRaise","standingRow","standingRowCloseGrip","standingRowRearDeltWithRope","standingRowRearHorizontalDeltWithRope","standingRowVBar","stepUp","stiffLegDeadlift","straightLegDeadlift","sumoDeadlift","sumoDeadliftHighPull","superman","tBarRow","thruster","toesToBar","torsoRotation","trapBarDeadlift","tricepsDip","tricepsExtension","tricepsPushdown","uprightRow","vUp","widePullUp","wristCurl","wristRoller","zercherSquat","wallPushup","inclinePushup","kneePushup","diamondPushup","pseudoPlanchePushup","pikePushup","ringDip","negativeDip","verticalRow","wideRow","ringRow","tuckFrontLeverRow","frontLeverRow","scapularPullUp","deadHang","negativePullup","assistedSquat","shrimpSquat","nordicCurl","handstand","wallHandstand","crowPose","dragonFlag","copenhagenPlank","hangingKneeRaise","archHang","supportHold","pallofPress","renegadeRow","ringAbRollout","kneelingRingAbRollout","archerPullUp","skinTheCat","hollowBodyHold","deadBug","shoulderPassThrough","nameToIdMapping","metadata","equipmentData","threshold","shouldSkipThreshold","programExerciseWarmupSet","isLessAssistance","warmupWeight","Weight_multiply","roundedWeight","Weight_roundWarmup","isUnilateral","Exercise_getIsUnilateral","custom","str","normalizeExerciseName","customExercisesNameIndexCache","getCustomExercisesNameIndex","live","foundEquipment","bareNameCustom","fullNameKey","fullNameExerciseId","fullNameExercise","hasExplicitEquipment","ExerciseImageUtils_exists","StringUtils_uncamelCase","Exercise_targetMusclesGroups","Exercise_muscleGroupFilterNames","Exercise_defaultSynergistMuscleMultipliers","synergistMultiplier","Exercise_synergistMusclesGroups","etm","esm","Exercise_deleteCustomExercise","existingExercise","Exercise_upsertCustomExercise","sameNameDeletedExercise","newSettings","Program_changeExerciseName","scoreTokenAgainstWords","words","fullText","isDefaultEquipment","normalizedQuery","nameWords","equipmentWords","normalizedFullName","totalScore","nameScore","equipmentScore","currentExerciseType","aRating","Muscle_getAvailableMuscleGroups","lowercaseFilterTypes","aTargetMuscleGroups","bTargetMuscleGroups","ExerciseImageUtils_id","ExerciseImageUtils_existsCustom","availableSmallImages","availableLargeImages","checkDomain","imageUrl","beforeTime","sameDay","onlyKeys","twoMonthsAgo","hr","isBefore","isSameDay","History_isSameProgramDay","seenKeys","bestByReps","Reps_isStarted","lastEntryTimestamp","lastEntry","lastWarmupEntryTimestamp","lastWarmupEntry","sameDayTimestamp","sameDayEntry","History_recordBestSets","lastNoteTimestamp","lastNote","timeMs","History_workoutTime","all1RMs","Exercise_eq","Weight_getOneRepMax","max1RM","Weight_compare","max1RMHistoryRecord","max1RMSet","initial","lastHistoryEntry","lastHistoryRecord","maxTime","minTime","maxSet","History_getMaxWeightSet","maxWeight","maxWeightHistoryRecord","idSet","setsWithWarmupFlag","programName","dayName","Exercise_fullName","isAmrap","rpe","completedRpe","logRpe","askWeight","toISOString","isOverflowSetTimer","completedSetTimer","completedSetTimerLeft","maxSets","entryMaxSet","History_getMaxWeightSetFromEntry","prs","History_findPersonalRecord","excludeRecordId","resultTime","forceEndTime","deletedProgramExercises","originalUpdatePrints","LiftoscriptPrint_lines","updatePrintLines","updatePrints","Program_getProgramExerciseForKeyAndDay","_entry","useRm1","ProgramExercise_isUsingVariable","descriptionSnapshot","PlannerProgramExercise_currentDescription","progressSnapshot","userPromptedStateVars","snapshot","Program_computeProgressStateChanges","diffState","History_compactDiff","diffVars","printLines","History_buildProgressSnapshot","Exercise_onerm","History_pauseWorkout","currentEntry","nextSet","startWeekFromMonday","setDate","setMonth","getMonth","getDate","getDay","setHours","recordDate","lensGetters","lbu","getters","History_isPaused","isStart","newIntervals","History_totalEntryReps","History_totalEntrySets","Weight_add","History_totalEntryWeight","_collector","_programExercise","_microMemoize","_muscle","History_getMax1RMSetFromEntry","History_getMax1RMSet","History_maxSetBy","weightOf","bestWeight","weightDiff","Reps_avgUnilateralCompletedReps","History_collectProgramChangeTimes","changeProgramTimes","getTime","History_collectMuscleGroups","synergistMuscleGroupToMultiplier","Exercise_synergistMusclesGroupMultipliers","muscleGroupAcc","lastTs","finishedSets","lastDate","DateUtils_firstDayOfWeekTimestamp","Reps_volume","Exercise_getVolumeMultiplier","History_amrapScore","History_bothSidesReps","byReps","byRepsWeight","amrap","bestAmrap","amrapWeight","amrapReps","amrapScore","isMax","Reps_setVolume","History_getFinishedSets","Reps_isFinishedSet","lastInterval","interval","memoize","maxSize","History_getPersonalRecords","sortedHistory","CollectionUtils_sortByExpr","max1RMSets","maxWeightSets","thisMaxWeightSet","thisMaxWeight","lastMaxWeight","prevMaxWeightSet","maxWeightSet","thisMax1RMSet","thisMax1RM","lastMax1RMSet","lastMax1RM","prevMax1RMSet","_Collector$build$addF","Collector","addFn","run","_Collector$build$addF2","muscleGroupsData","programChangeTimes","sortedHistoryDesc","weeksData","firstDayOfWeeksSet","historyRecordDateToFirstDayOfWeek","firstDayOfWeekToHistoryRecord","firstDayOfWeek","today","firstDayOfWeeks","buildHomeWeekData","existingIds","addedHistoryIds","addedCustomExerciseIds","historyRecordIds","customExerciseIds","importedIds","isExerciseReferenced","Length_operation","comparison","objLen","Length_printUnit","prebuiltLengths","Length_build","prebuiltLength","toFixed","points","screenMusclePoints","strength","hypertrophy","exercisePoints","ungroupedMusclePoints","muscleGroupSettings","Muscle_isBuiltInMuscleGroup","newMuscleGroups","screenMuscles","builtinMuscleGroupNames","screenMuscleToMuscleMapping","mergePoints","Muscle_getPointsForDay","programDay","Program_getProgramDayUsedExercises","oldPoints","newPoints","Muscle_getUnifiedPointsForExercise","Muscle_mergeScreenMusclePoints","mergeExercisePoints","UngroupedMuscles_add","maxValues","ObjectUtils_findMaxValue","normalize","UngroupedMuscles_divide","isDefault","Muscle_isDefaultMuscles","_ungroupedMuscles","_setUtils","chest","lats","upperBack","frontDelts","sideDelts","rearDelts","biceps","triceps","quadriceps","hamstrings","glutes","calves","upperTraps","lowerBack","neck","rotatorCuff","forearmFlexors","forearmExtensors","obliques","hipFlexors","abductors","adductors","obj","maxValue","mg","defaultMuscles","SetUtils_areEqual","Muscle_getPointsForExercise","Muscle_screenMusclesByRole","screenTargetMuscles","screenSynergistMuscles","historyEntry","Program_nextHistoryEntry","_Muscle_screenMuscles","UngroupedMuscles_pointsPerSet","_Muscle_screenMuscles2","perSet","hypertrophySets","ObjectUtils_combinedKeys","screenMuscle","oldValue","points1","points2","defaultRange","MuscleRangePresets_range","copyLegacyValues","weeklyRangeSets","fieldVersions","weeklyFrequency","MuscleRangePresets_frequency","migratePlanner","MuscleGroupSplit_replaceGraphs","legacyKey","MuscleGroupSplit_legacyKeys","removeUndefinedLegacyGroups","_muscleRangePresets","rangeSources","shoulders","back","graphReplacements","forearms","ensureVersionsObject","created","isFieldVersion","isCollectionVersions","versionsObject","field","fieldVersion","sourceValue","sourceVersion","Muscle_groupsWithDefaultRange","graphKey","seen","replacements","replacement","preset","frequency","MuscleRangePresets_all","_presetRanges$preset2","presetRanges","low","moderate","high","_presetRanges$preset","maxWeeklySets","exhausted","effect","bridges","startTimer","updateLiveActivity","resumeWorkout","OnloadModal_shouldShowWhatsNew","_whatsnew","WhatsNew_doesHaveNewUpdates","hearAboutUs","requests","lastRequest","evaluatedWeeks","dayIndex","dayInWeekIndex","exerciseIndex","groupedTopLines","group","afterDay","Program_getDayData","newDayData","newDay","PlannerProgramExercise_createExerciseFromEntry","splice","newPlanner","PlannerEvaluator_changeExerciseName","newProgramId","Program_runExerciseFinishDayScript","Program_getDiffState","Program_getDiffVars","variations","Program_createVariation","finishDayExpr","variationExpr","descriptions","reuseLogic","selected","dayApproxTimes","Program_dayApproxTimeMs","minDays","maxDays","plannerState","EditProgram_initPlannerState","Program_exerciseRangeFormat","Program_exportProgram","_Program_exportProgramToLink","exportedPlannerProgram","aNextDay","plannerSettings","Program_evaluatePlannerWeeks","Program_getDayExercisesInOrder","plannerProgramExercise","Program_getCurrentProgram","exerciseTypes","exType","et","Program_getAllProgramExercises","Program_fullProgram","isReallyMultiweek","exerciseKey","Program_getProgramDay","Program_getDayNumber","Program_getAllUsedProgramExercises","Program_getWeekFromDay","isRepeat","reuse","update","reuseSetCandidate","weekAndDays","reusingCustomProgressExercises","Program_getReusingCustomProgressExercises","reusingSetProgressExercises","Program_getReusingSetProgressExercises","notused","evalutedProgram","plannerExercise","superset","excludeExercise","dayExercises","groups","aProgram","bProgram","cleanedAProgram","_objectDestructuringEmpty2","cleanedBProgram","ObjectUtils_diffPaths","match","Program_nextHistoryRecordFromEvaluated","showCustomPrograms","onError","newEvaluatedProgram","Program_forceEvaluate","Progress_getDayData","isSuppressed","newStateResult","Program_runFinishDayScript","_newStateResult$data","ProgramExercise_applyVariables","theNextDay","Program_nextDay","Program_selectProgram","numValue","Program_cleanPlannerProgram","_Program_toUrl","isEvaluatedProgram","_parser","_workoutTimeEstimate","_plannerEvaluator","_programSet","encodedProgramHashToShortUrl","Program_createEmptyProgram","programSets","PlannerProgramExercise_currentEvaluatedSetVariation","PlannerProgramExercise_programWarmups","programSet","minrep","maxrep","ProgramSet_getEvaluatedWeight","auto","programSetIndex","Exercise_getWarmupSets","Progress_runUpdateScriptForEntry","Program_numberOfDays","fullDayName","Program_getDayName","PlannerProgramExercise_getProgressScript","PlannerProgramExercise_currentEvaluatedSetVariationIndex","PlannerProgramExercise_currentDescriptionIndex","PlannerProgramExercise_currentExerciseVariationIndex","Progress_createScriptBindings","evaluatedSetVariations","Progress_createScriptFunctions","Progress_scriptExerciseContext","runner","ScriptRunner","execute","getUpdates","diffOtherStates","memo2","key2","WorkoutTimeEstimate_dayMs","pe","Program_getAllProgramExercisesWithType","useStateWeight","repsExpr","weightExpr","Program_emptyEvaluatedProgram","Program_buildWeeks","dayNum","evaluatedWeek","evaluatedDay","evaluatedExercises","PlannerEvaluator_evaluate","Program_buildEvaluatedProgram","_Program_buildWeeks","PP_iterate","tag","PlannerEvaluator_forceEvaluate","minExs","maxExs","daysTotal","Program_getDayInWeek","aDay","nd","Encoder_encodeIntoUrl","baseUrl","hash","encodedProgramUrl","shortUrl","ProgramExercise_doesUse1RM","ProgramExercise_doesUseRPE","oldValueStr","Weight_display","newValueStr","oldOnerm","Weight_printOrNumber","_target","variation","programWeek","Program_getProgramDayExercises","variationIndex","defaultSet","isQuickAddSet","lastSet","indexValue","currentSetVariationIndex","sv","exerciseVariations","currentExerciseVariationIndex","nextVariation","currentDescriptionIndex","usesPercentageWeights","ProgramSet_isEligibleForInferredWeight","usesRM1Var","globals","PlannerProgramExercise_sets","repRange","lastKey","warmupSetToKey","PlannerProgramExercise_getStateMetadata","userPrompted","results","currentVariationIndex","PlannerProgramExercise_getUpdateScript","hasKeyword","evaluatedWeight","Weight_evaluateWeight","Weight_rpePct","Weight_roundConvertTo","lastGroup","rpeExpr","lastWeekExercise","getCurrentDescriptionExercise","dereuseDecisions","reuseExercise","getGlobals","reusedGlobals","PlannerProgramExercise_getOnlyChangedState","programVariation","reuseVariation","j","reuseSet","Weight_eqNull","Weight_zero","groupedTopLine","reorders","reorder","groupedDay","indexMap","fromIndex","toIndex","adds","renamedValue","renameMapping","addedCurrentDescription","currentIndex","getCurrentDescriptionIndex","part","reusedExercise","reusedDayData","currentWeekReusedExercisesCount","groupedTopLineMap","PP_iterateTopLineExercises","getRenamedValue","shouldReuseSets","getDereuseDecisions","addPropertyCandidate","isOrigin","progressPoint","updatePoint","warmupPoint","idPoint","targets","property","origin","fallback","plannerWeeks","msg","topLineMap","PlannerProgram_topLineItems","PlannerProgram_groupedTopLines","reorderGroupedTopLine","addGroupedTopLine","propertyTargets","getPropertyTargets","addedProgressMap","addedUpdateMap","addedWarmupsMap","addedIdMap","plannerWeek","plannerDay","finishedToAddDescription","groupTextArr","groupLoop","groupIndex","exerciseTextArr","lineIndex","addExerciseDescriptions","evalExercise","isInheritedDescription","getExerciseName","reuseToStr","variationToString","overriddenGlobals","weightExprToStr","setTimerGlobalToStr","setVariations","globalsStr","warmupSource","getPropertySource","getWarmupSets","idSource","idToStr","updateStr","getUpdate","progressStr","getProgress","repeatingExercises","repeat","PlannerKey_fromPlannerExercise","PlannerProgram_compact","warmupSetsToStr","PlannerProgramExercise_warmups","activeIndex","segment","order","firstWeight","firstRpe","firstLogRpe","firstAskWeight","firstTimer","hasAnySetTimer","firstSetTimer","firstIsOverflowSetTimer","setTimerIsGlobal","originalSets","setToKey","groupWarmupsSets","strs","overflow","restPart","groupedVariationSets","groupVariationSets","setStr","weightValue","resultStr","Weight_printNull","hideScript","resolveReuse","argsState","successes","successCounter","failures","failureCounter","maxReps","resolvedScript","numberOfEntries","History_createCustomEntry","structural","newDayKeys","changed","Progress_hasCompletedWork","at","predecessor","commonBefore","commonAfter","inherited","sortKeys","own","sortKey","reconcileStructure","Stats_getEmpty","reindexed","Progress_reindexEntries","newEntries","Progress_applyProgramExercise","amrapValue","amrapLeftValue","rpeValue","userVars","Progress_updateAmrapRepsInExercise","Progress_updateAmrapRepsLeftInExercise","Progress_updateRpeInExercise","Progress_updateWeightInExercise","Progress_updateUserPromptedStateVars","Progress_completeAmrapSet","Progress_runUpdateScript","Progress_isFullyEmptyOrFinishedSet","amrapSetTimerModal","Progress_maybeApplySuperset","Progress_startTimer","dateStr","startTimeDate","DateUtils_fromYYYYMMDD","getFullYear","getHours","getMinutes","getSeconds","DateUtils_fromYYYYMMDDStr","dateModal","shouldKeepProgramExerciseId","prevEntry","History_findLastEntryForExerciseType","programWarmups","Progress_programWarmupsForExerciseType","Progress_updateSetWeights","nowArg","Progress_reconcileTimedSet","stm","TimedSet_recordedFor","restSet","Progress_getNextTimedSet","Progress_advanceTimedSet","Progress_getAutoGetReadySeconds","programIndex","newHistory","History_finishProgramDay","Program_runAllFinishDayScripts","lf","newSettingsExerciseData","deepmerge","Progress_getSupersetGroups","ObjectUtils_entriesNonnull","Progress_supersetColors","supersetGroups","supersetGroup","supersetIndex","aProgress","bProgress","Progress_isCompletedSet","Reps_isEmpty","oldKey","newKey","programExercises","durations","pass","phase","Progress_getActiveSetTimer","setsKey","reported","liveActivityEntryIndex","liveActivitySetIndex","nativeNotificationScheduled","_weight2","_equipmentLoadText","_timedSet","_liftoscriptExerciseName","_deepmerge","entryExercise","applyRounding","rounder","isScriptValue","flattenScriptArgs","arg","Progress_createEmptyScriptBindings","toWeight","Equipment_getUnitForExerciseType","Weight_round","Weight_getTrainingMax","repsRaw","rpeRaw","Weight_rpeMultiplier","vals","Weight_increment","Weight_decrement","aVal","bVal","flatArgs","LiftoscriptExerciseName_isProgramExercise","LiftoscriptExerciseName_isExercise","timerSinceMs","timerSeconds","subtitle","subtitleHeader","bodyHeader","nextEntryAndSet","Reps_findNextEntryAndSet","nextEntry","aSet","Weight_realizeLoad","loadText","ignoreDoNotDisturb","isAdjusting","timerForPush","Progress_getNextEntry","shouldGoToNextEntry","visitedAndFinished","isInitial","Reps_isEmptyOrFinished","Progress_getNextEntryIndex","nextEntryIndex","Progress_stopTimerPure","Reps_isCompleted","Progress_isEmptyOrFinishedSet","Progress_hasLastUnfinishedSet","editIds","_Progress_applyBindin","Progress_applyBindings","newEntry","oldEntry","lastCompletedIndex","CollectionUtils_findIndexReverse","modify","progressSet","Progress_shouldShowAmrapModal","hasUserPromptedVars","shouldLogRpe","shouldPromptUserVars","shouldAskWeight","Progress_completeSet","hasOpenSetTimer","opened","TimedSet_open","getReadySeconds","nonce","Progress_resolveTimedSetPhase","setId","Progress_getNextTimedSetInSuperset","freshNonce","phaseStartedAt","prevNonce","entryChanged","Progress_handOffToOtherSide","endedAt","Progress_proceedAfterTimedSet","clockStartedAt","endedOffsetSeconds","timedSetEndedAt","autoGetReady","_progress$amrapModal","_progress$amrapModal2","_progress$amrapModal3","_progress$amrapModal4","Progress_isEligibleForInferredWeight","warmups","newSets","targetReps","targetRpe","bestOnerm","bestDistance","distance","findSwapSourceSet","sourceWeight","sourceReps","sourceRpe","swapDerivedWeight","newIndexOf","remap","keepAt","clamp","pickerState","exercisePicker","editModal","editSetModal","setTimerEditModal","roundingModal","exerciseBottomSheet","entryIndexEditMode","progressEntry","forceWarmupSets","PlannerProgramExercise_currentSetVariationIndex","newSetsNum","newWarmupSets","ws","wasSetTimerOpen","countdown","oldSet","timedSide","recordedThisSide","recorded","banked","handedOff","stopped","ProgramExercise_hasUserPromptedVars","newSet","didFinish","startedTimer","alreadyFlipped","Screen_tab","currentScreen","oldHistoryRecord","progressWithoutUi","dequal","oldCleanedProgram","newCleanedProgram","_dequal","previousWorkoutSet","convertSetWeightsTo","Reps_newSet","maxIndex","isNext","Reps_areSameReps","arr","Reps_displayReps","Reps_displayCompletedReps","Reps_findNextSet","Reps_findNextSetIndex","keyFn","displaySets","CollectionUtils_groupBy","setTimerLeft","Reps_isFinished","set1","set2","completedOrRequiredWeight","Reps_isCompletedSet","isRpeFailed","isInRange","Reps_isInRangeCompleted","firstRep","Reps_isInRangeCompletedSet","totalReps","recentExercises","Settings_withRecentSwap","mergeWithDeletions","exerciseDataKeys","starredExercises","starredExerciseKeys","applyPlannerUpdate","applyMuscleGroupsUpdate","muscleGroupKeys","Settings_getExercisesWithUnset1RMs","Settings_getNextTargetType","skipPlatesCalculator","nextTargetType","targetTypes","osFontScale","clampTextSize","scaled","TEXT_SIZE_STEP","Exercise_nameWithEquipment","starred","Settings_toggleStarred","request","Settings_webEditorSettingsRequest","_request$settings","diffs","deletedExerciseDataKeys","deletedStarredExerciseKeys","deletedMuscleGroupKeys","isSameValue","stored","programCustomExercises","Settings_programContentBuild","Settings_buildPlannerSettings","graphsSettings","isSameXAxis","isWithBodyweight","isWithOneRm","graphOptions","exerciseStatsSettings","ascendingSort","statsEnabled","MuscleRangePresets_apply","strengthSetsPct","hypertrophySetsPct","deletedKeys","plannerUpdate","muscleGroupsUpdate","pickerSettingsKeys","changedEntries","plannerScalarKeys","pickerSettings","settingsRecentExercisesLimit","fromKey","toKey","plannerExercises","CollectionUtils_uniqByExpr","TEXT_SIZE_MIN","TEXT_SIZE_MAX","movingAverageWindowSize","Stats_getCurrentBodyweight","recentWeights","totalWeight","Weight_divide","versionTracker","VersionTracker","STORAGE_VERSION_TYPES","filledVersions","fillVersions","shouldReportError","Storage_validate","VStorage","Storage_validateAndReport","migratedRecord","VHistoryRecord","bStorage","cleanedAStorage","originalId","cleanedBStorage","oldStorage","migratedOldStorage","migratedNewStorage","oldId","oldOriginalId","oldCleanedStorage","_excluded5","newId","newOriginalId","newCleanedStorage","_excluded6","updatedVersions","mergeVersions","updatedStorage","mergeByVersions","sortedProgress","head","byIndex","entriesWithSortedSets","sortedSets","CollectionUtils_immutableSort","sortedEntries","sortProgressByIndex","partialStorage","_excluded4","updateVersions","_versionTracker","safeParse","abortEarly","issues","issue","path","formatIssuePath","lastActions","Diagnostics_setLastValidationErrors","dateNow","deletedHistory","deletedPrograms","bicepLeft","bicepRight","forearmLeft","forearmRight","hips","thighLeft","thighRight","calfLeft","calfRight","helps","TimedSet_sideToTime","stage","targetSeconds","restSeconds","isOverflow","exerciseName","exerciseShortName","ExerciseImageUtils_url","currentSet","totalSets","seconds","times","divisor","ungrouped","UngroupedMuscles_list","_muscle2","grouped","availableMuscles","_versionTrackerDiffVersions","_versionTrackerExtractByVersions","_versionTrackerFillVersions","_versionTrackerMergeByVersions","_versionTrackerMergeVersions","_versionTrackerUpdateVersions","_exportNames","versionTypes","oldObj","newObj","currentVersions","VersionTrackerUpdateVersions","fullObj","VersionTrackerFillVersions","VersionTrackerDiffVersions","versionsDiff","VersionTrackerExtractByVersions","fullVersions","versionDiff","extractedObj","VersionTrackerMergeByVersions","VersionTrackerMergeVersions","isVectorClock","collection","currentTimestamp","compactionThresholds","deletionTimestamp","VersionTrackerUtils_SERVER_DEVICE_ID","newClock","vc","VersionTrackerUtils_normalizeVersion","isVersionsObject","VersionTrackerUtils_isTypedObject","idField","typeIdMapping","VersionTrackerUtils_isControlledType","idVersion","isIdVersion","nukedeleted","VersionTrackerUtils_NUKEDELETED_THRESHOLD","atomicTypes","VersionTrackerUtils_compareVersions","aNorm","bNorm","allDevices","mergedVc","controlledTypes","aDevices","bDevices","aHasVc","bHasVc","aHasHigher","bHasHigher","aCount","bCount","_utils","hasChanges","oldVersion","newVersion","fieldDiff","diffFieldVersion","oldCollection","diffCollection","oldDeletedKeys","newDeletedKeys","oldItemVersion","newItemVersion","itemDiff","diffObj","extractedValue","extractFieldByVersion","extractCollectionByVersion","VersionTrackerUtils_isRecord","extractControlledTypeByVersion","controlledFields","excludedFields","excludedFieldsSet","collectionVersion","hasItemChanges","hasDeletions","itemId","VersionTrackerUtils_getId","itemVersion","extracted","itemValue","resultObj","VersionTrackerUtils_asVersionsObject","fieldStr","filledVersion","fillFieldVersion","hasTrackableItems","collectionVersions","VersionTrackerUtils_ensureCollectionVersions","itemPath","getInitialItemVersion","filledItemVersion","fillControlledObjectVersion","VersionTrackerUtils_createVersion","dictionaryFields","dictValue","VersionTrackerUtils_isAtomicType","fillNestedVersions","VersionTrackerUtils_ensureVersionsObject","VersionTrackerUtils_getIdFieldName","idValue","VersionTrackerUtils_getIdValue","VersionTrackerUtils_createIdVersion","controlledField","fieldValue","fieldPath","fillControlledFieldVersion","_ref3","parentPath","hasAnyVersion","currentPath","writeKey","deleteKey","diffVersion","fullVersion","mergedValue","mergeFieldByVersion","diffNorm","fullNorm","fullValue","mergeCollectionByVersion","fullCollection","fullVersionObj","diffVersionObj","fullIdVersion","VersionTrackerUtils_getIdVersionFromVersions","diffIdVersion","VersionTrackerUtils_pickWinningIdVersion","controlledFieldSet","fullIsRecord","fullRecord","mergedItem","writeField","fullFieldVersion","fullFieldValue","extractedFieldValue","validator","typeValidators","dedupedFull","dedupedExtracted","dedupedFullById","processedIds","allSame","pushItem","idx","extractedItem","diffItemVersion","fullItemVersion","fullItem","shouldTakeExtractedItem","ensureResult","dk","mergedVersion","mergeVersionField","VersionTrackerUtils_mergeFieldVersions","mergeCollectionVersions","findIdVersion","mergedField","mergedItemVersion","fullDeletedTime","diffDeletedTime","versionsObj","newVersionsObj","VersionTrackerUtils_areEqual","updatedVersion","updateFieldVersion","oldFull","newFull","oldFullVersion","newFullVersion","oldHasTrackableItems","updateArrayCollectionVersion","updateDictionaryCollectionVersion","updateControlledObjectVersion","oldObjValue","updateNestedVersions","VersionTrackerUtils_incrementNukedeleted","newIds","deletedInThisUpdate","oldItemsById","oldItem","oldItemId","deletedCount","newCollectionVersion","getItemVersion","compactedCollection","VersionTrackerUtils_applyCompaction","oldDict","newItem","currentItemVersion","currentIdVersion","oldFieldValue","newFieldValue","currentFieldVersion","updateControlledFieldVersion","opr","MathUtils_roundTo005","knownReps","knownRpe","knownWeight","targetRpeMultiplier","stepWeight","withUnit","oneRepMax","objWeight","Weight_compareReverse","Weight_parse","Weight_setupForExercise","EquipmentLoadSolver_realize","calculateLoad","Weight_operation","prebuiltWeights","prebuiltWeight","Weight_calculatePlates","rounded","EquipmentLoadSolver_select","EquipmentLoadSolver_next","EquipmentLoadSolver_previous","Exercise_defaultRounding","Weight_loadPlates","allWeight","lastDateStr","WhatsNew_newUpdates","cached","_whatsnewParser","WhatsNew_all","WhatsNewParser_parseAll","exec","bodyLines","isFrontmatterStart","changelogMarkdown","latestDateStr","outcomes","oldOutcomes","newOutcomes","nowMs","oldIds","WorkoutOutcome_healthPayload","WorkoutOutcome_syncId","closed","startMs","endMs","History_calories","syncId","setWorkMs","straightSetsMs","totalMs","visitedSupersets","rounds","roundMembers","supersetMs","mod","NavigationContext","PlannerProgram_evaluate","PlannerProgram_usedExercises","Program_exportedPlannerProgramToExportedProgram","oldPlannerProgram","additionalRepeatingExercises","newEvaluatedWeeks","ev","declaringWeekIndexes","oldKeyFor","ObjectUtils_findKeyByExpression","declaringKey","lastDescriptions","mapping","tree","plannerExerciseParser","evaluator","topNode","declaringPass","_loop3","declaringWeeks","claimWeek","repeatWeekIndex","repeatDay","repeatedExercises","sectionsToReuse","oldDay","repeating","firstWeek","lastWeek","repeatRanges","ongoingDescriptions","repeatStr","repeatParts","sections","fullProgramText","PlannerEvaluator_evaluateFull","textWeeksToPlanner","PlannerExerciseEvaluatorText","fullResult","_PlannerProgram_getExportedPlannerProgram","topLine","topLineWeek","topLineDay","reset","group1","group2","ex1","ex2","PlannerEvaluator_compareExerciseOrder","hasWeightInUnit","aPlannerProgram","firstPass","newLine","PlannerProgram_topLineItemToText","isStrict","PlannerSyntaxError","toExerciseType","PlannerProgram_replaceExercise","weightChanges","wc","setVariation","weightChange","newPlannerProgram","switchWeightsToUnit","_loop4","reuseDay","di","_plannerExerciseParser","_plannerExerciseEvaluatorText","newLabel","labelSuffix","noConflicts","getLabel","PlannerKey_fromLabelNameAndEquipment","PlannerKey_fromExerciseType","newLabel2","newName","PlannerDayDataError","evaluatedSetVariation","lastEvaluatedSet","Weight_parsePct","_PlannerExerciseEvalu","fnArgsToStateVars","reuseFullname","shortName","PlannerProgramExercise_shortNameFromFullName","_PlannerExerciseEvalu3","extractNameParts","groupedWarmupSets","CollectionUtils_groupByExpr","PlannerProgramExercise_evaluateSetVariations","ProgramExercise_groupWarmupsSets","dimReps","dimRpe","dimWeight","dimTimer","Reps_groupDisplaySets","Exercise_findByName","visited","acc2","PlannerProgramExercise_numberOfSets","exerciseWarmups","MathUtils_roundTo0005","increase","successesRequired","successesCounter","decrease","failuresRequired","failuresCounter","rep","originalSetVariations","reuseSetVariations","hasCurrentSets","evaluatedSets","reusedSets","currentSets","currentGlobals","originalState","originalStateMetadata","_PlannerExerciseEvalu2","_value$split$map","_value$split$map2","fnArgKey","fnArgValStr","endsWith","fnArgVal","changeExerciseName","_PlannerEvaluator_get","PlannerEvaluator_getFullEvaluatedWeeks","perDayEvaluatedWeeks","PlannerProgram_fullToWeekEvalResult","PlannerEvaluator_postProcess","exerciseFullNames","fullNames","_liftoscriptEvaluator","PlannerEvaluator_fillInMetadata","PlannerProgramExercise_buildDpRangeScript","byWeekDayExercise","fromPoint","tagsProp","existingTags","properties","point","progressProp","existingProgress","isEqualProgress","updateProp","existingUpdate","isEqualUpdate","scheme","PlannerEvaluator_setByWeekDayExercise","PlannerEvaluator_setByExerciseWeekDay","byExerciseWeekDay","PlannerEvaluator_evaluateDay","PlannerEvaluator_getPerDayEvaluatedWeeks","PlannerEvaluator_getDayIndexFromWeekAndDayInWeekIndex","PlannerEvaluator_fillRepeats","repeatWeek","repeatedExercise","PlannerEvaluator_checkSelfReuse","originalExercise","section","PlannerEvaluator_fillSetReuses","reuseSetPoint","originalExercises","PlannerEvaluator_findOriginalExercisesAtWeekDay","sharedProgressReuse","originalProgress","PlannerEvaluator_forEachSiblingInstance","sharedUpdateReuse","originalUpdate","weekKey","weekEntry","dayKey","PlannerEvaluator_fillEvaluatedSetVariations","PlannerProgramExercise_setVariations","PlannerEvaluator_fillDescriptions","PlannerEvaluator_findLastWeekExercise","PlannerEvaluator_fillDescriptionReuses","PlannerEvaluator_findReusedDescriptions","PlannerEvaluator_isDescriptionReuse","PlannerEvaluator_fillSingleProperties","PlannerEvaluator_fillProgressReuses","originalProperty","originalReuseKey","Weight_type","PlannerEvaluator_checkUpdateScript","liftoscriptNode","PlannerProgramExercise_getExercise","liftoscriptEvaluator","PlannerEvaluator_fillUpdateReuses","PlannerEvaluator_checkReuseLoops","PlannerEvaluator_checkReusesResolve","PlannerEvaluator_iterateOverExercises","PlannerEvaluator_checkUnknownExercises","_weekIndex","_dayInWeekIndex","_dayIndex","_index","reusingName","currentWeekIndex","weekDayMatch","_weekDayMatch$1$split","_weekDayMatch$1$split2","dayOrWeekStr","dayStr","weekExercises","weekDescriptions","atWeek","atDay","candidateDays","originalKey","cond","lastWeekDay","val","_PlannerEvaluator_get2","W","_plannerExerciseStyles","_plannerStateVars","subject","latestDescriptions","getValueTrim","getPoint","setParts","_setParts$split","_setParts$split2","numberOfSetsStr","repsStr","_setParts$split3","_setParts$split4","reprange","minrepStr","maxrepStr","PlannerNodeName","WeightWithPlus","Weight","WarmupExerciseSet","WarmupSetPart","setPartNode","_this$getWarmupReps","getWarmupReps","percentageNode","weightNode","ExerciseSection","ExerciseSet","SetPart","getRepRange","rpeNode","Rpe","timerNode","Timer","setTimerNode","SetTimer","autoNode","Auto","PercentageWithPlus","labelNode","SetLabel","AskWeight","_this$getValue$split","_this$getValue$split2","leftRaw","rightRaw","ExerciseProperty","valueNode","FunctionExpression","fnNameNode","FunctionName","fnName","FunctionArgument","argNode","Liftoscript","reuseLiftoscriptNode","ReuseLiftoscript","ReuseSection","ExerciseName","getStateVariableKeys","evaluateProgressImpl","None","PlannerProgramExercise_buildProgress","validateProgress","_this$getLineAndOffse3","setsNode","WarmupExerciseSets","evaluateWarmupSet","Superset","exerciseNameNode","ExercisePropertyName","evaluateProgress","evaluateUpdate","evaluateWarmup","evaluateId","weekDayNode","WeekOrDay","Int","ReuseSectionWithWeekDay","_this$getReuseWeekDay","getReuseWeekDay","WeekDay","reuseNode","evaluateReuseNode","ExerciseSets","CurrentVariation","evaluateSet","evaluateSuperset","evaluateProperty","ExerciseExpression","repeatNode","Repeat","childNode","Rep","RepRange","_getChildren$map","_getChildren$map2","numbers","rangeStart","rangeEnd","EmptyExpression","TripleLineComment","Week","weekName","_this$getLineAndOffse5","Day","_this$getLineAndOffse7","LineComment","addDescription","variationsNode","ExerciseVariations","variationNodes","ExerciseVariation","variationNode","variationNameNode","variationFullName","variationShortName","variationExerciseType","Exercise_findByNameAndEquipment","allWarmupSets","activeVariation","PlannerKey_fromExerciseVariations","getIsNotUsed","sectionNodes","allSets","getRepeat","getOrder","sectionNode","evaluateSection","_this$getLineAndOffse9","rawDescriptions","StringUtils_unindent","fullNamePoint","reuseSetsNode","progressNode","updateNode","idNode","warmupNode","supersetNode","supersetPoint","evaluateExercise","evaluateProgram","oldLiftoscript","newLiftoscript","fromNode","toNode","getRepeatRanges","isUsed","sectionsNode","propertyNameNode","pickA","pickB","PlannerStateVars_fromArgs","changeWeightsToCompleteWeights","_str$split","_str$split2","nameEquipmentItems","nameEquipment","matchingExercise","fullTextLineToWeekdayDescription","ongoingLines","anyCommentStarted","commentStarted","linesToPreviousExercise","nextLines","pop","_this$getWeekDayOngoi","getWeekDayOngoingLines","lastDay","getLastDay","getWeekDayDescriptionAndFillLastDay","evaluateLine","none","_highlight","atom","lineComment","blockComment","SupersetKeyword","SectionSeparator","attributeName","attributeValue","annotation","docComment","segments","keyParts","cleaned","segmentLabel","Exercise_findByNameEquipment","lastAlertDisplayedTs","parseLiftoscript","validateLiftoscript","_script","_mode","_stateKeys","_bindingKeys","validate","transformKey","hasOnlyOwnKeys","hasKeywordMemoized","liftoscriptTree","_this$parse","_this$parse2","rawResult","output","convertResult","errorMsg","lastAlertTs","reportError","availableBodyParts","exerciseKinds","graphExerciseSelectedTypes","graphMuscleGroupSelectedTypes","percentageUnits","historyRecordChange","exercisePickerSorts","statsWeightDef","statsLengthDef","statsPercentageDef","VUnit","VPercentageUnit","VLengthUnit","VExerciseKind","VMuscle","VBodyPart","VBuiltinEquipment","VExercisePickerSort","VExercisePickerScreen","VHistoryRecordChange","VTargetType","VProgressMode","VTimedSetSide","VProgramTag","VGraphExerciseSelectedType","VGraphMuscleGroupSelectedType","VScreenMuscle","VEquipment","VExerciseId","_VWeight","_VPercentage","_VLength","VLength","_VPlate","_VMetaExercises","VMetaExercises","_VExerciseType","VExerciseType","_VCustomExercise","literal","clonedFrom","reuseImageFrom","VCustomExercise","_VSet","VSet","VProgramState","_VHistoryEntryProgressSnapshot","VHistoryEntryProgressSnapshot","_VHistoryEntry","VHistoryEntry","_VProgramStateMetadataValue","VProgramStateMetadataValue","VProgramStateMetadata","_VProgramSet","minRepsExpr","timerExpr","VProgramSet","_VProgramExerciseVariation","quickAddSets","VProgramExerciseVariation","_VProgramExerciseWarmupSet","VProgramExerciseWarmupSet","_VProgramExerciseReuseLogic","VProgramExerciseReuseLogic","_VProgramExercise","updateDayExpr","diffPaths","descriptionExpr","enableRepRanges","enableRpe","reuseFinishDayScript","reuseUpdateDayScript","VProgramExercise","_VExercisePickerFilters","isStarred","VExercisePickerFilters","_VExercisePickerProgramExercise","VExercisePickerProgramExercise","_VExercisePickerAdhocExercise","VExercisePickerAdhocExercise","_VExercisePickerTemplate","VExercisePickerTemplate","VExercisePickerSelectedExercise","_VExercisePickerState","screenStack","filters","selectedExercises","showMuscles","customExerciseName","templateName","selectedTab","editCustomExercise","hideLabel","hideTemplate","VExercisePickerState","_VProgressUi","equipmentModal","rm1Modal","showSupersetPicker","lazy","VProgressUi","VIntervals","tuple","null","_VHistoryRecord","_VProgramDayEntry","_VProgramWeek","VProgramWeek","_VProgramDay","VProgramDay","_VPlannerProgramDay","VPlannerProgramDay","_VPlannerProgramWeek","VPlannerProgramWeek","_VPlannerProgram","VPlannerProgram","_VProgram","VProgram","_VStatsWeightValue","VStatsWeightValue","VStatsWeight","_VStatsLengthValue","VStatsLengthValue","VStatsLength","_VStatsPercentageValue","VStatsPercentageValue","VStatsPercentage","_VStatsHealthValue","VStatsHealthValue","VStatsHealth","buildBoolPartial","VStatsWeightEnabled","VStatsLengthEnabled","VStatsPercentageEnabled","_VStatsEnabled","VStatsEnabled","_VSettingsTimers","VSettingsTimers","VGraph","_VWeightRange","_VPlateCount","_equipmentSetupBaseEntries","_VStackSetup","_VPlatesSetup","_VFixedSetup","_VElectricSetup","_VBandsSetup","_VEquipmentSetup","variant","_VEquipmentData","similarTo","VEquipmentData","_VGraphOptions","VGraphOptions","_VMuscleMultiplier","_VExerciseDataValue","VExerciseDataValue","_VPlannerSettings","VPlannerSettings","_VGym","VGym","_VWorkoutSettings","shouldHideGraphs","shouldShowInvisibleEquipment","pickerSort","shouldCollapseSets","VWorkoutSettings","_VGraphs","VGraphs","_VMuscleGroupsSettings","VMuscleGroupsSettings","_VSettings","isWithProgramLines","defaultType","defaultMuscleGroupType","hideWithoutWorkoutNotes","hideWithoutExerciseNotes","appleHealthSyncWorkout","googleHealthSyncWorkout","healthConfirmation","isPublicProfile","alwaysOnDisplay","theme","VSettings","_VStats","VStats","_VSubscriptionReceipt","VSubscriptionReceipt","_VSubscription","VSubscription","_VAffiliateData","VAffiliateData","_VImportSession","VImportSession","_VWorkoutOutcome","VWorkoutOutcome","_VHearAboutUs","freeform","_VStorage","attribution","unknown","_VMuscleGeneratorResponse","vIs","_VWebEditorSettings","partial","ATOMIC_TYPES","CONTROLLED_TYPES","CONTROLLED_FIELDS","history_entry","TYPE_ID_MAPPING","history_record","progress_ui","custom_exercise","stat","equipment_data","subscription_receipt","muscle_groups_settings","import_session","workout_outcome","DICTIONARY_FIELDS","EXCLUDED_FIELDS","_opts","_userId","_event","isWatch","WatchHost_isAvailable","isMobile","iOSVersion","WatchHost_appVersion","_watchHost","_AppleAuth_signIn","cancelErrorCodes","_waitForSdk","timeoutMs","deadline","_AppleAuth_init","waitForSdk","init","clientId","scope","redirectURI","usePopup","useContext","ClickTrackingContext","lsClass","eventName","createContext","_ClipboardUtils_canReadTextFromClipboard","_ClipboardUtils_copy","_ClipboardUtils_paste","navigator","clipboard","fallbackReadTextFromClipboard","_readTextFromClipboard","readTextFromClipboard","permissions","writeText","copyTextToClipboard","fallbackCopyTextToClipboard","disableCopying","textArea","position","appendChild","execCommand","removeChild","queryResult","readText","contentEditableElement","contentEditable","innerText","coll1","coll2","areEqual","transformer","keyOf","previousByKey","nextKeys","removedKeys","compare","shouldFill","lastColl","newDays","_newDays$splice","daysToMove","CollectionUtils_setBy","compareFn","arrCopy","isReverse","aIndex","bIndex","numberOfGroups","callbacks","shouldWrapIntoQuotes","months","UTC","getUTCFullYear","getUTCMonth","toLocaleDateString","weekday","weekDay","beginningOfWeekDay","withMs","minutes","hours","getMilliseconds","startDate","endDate","month","getUTCDate","year","getUTCMinutes","getUTCHours","hour","minute","separator","endOfWeekDay","meridiem","monthIndexFromName","_time","_time2","rawHour","_time2$","second","_match","hideWeekday","hideYear","monthNames","word","regexp","regexpMatchArray","_regexpMatchArray","_DeviceId_get","DeviceId_cachedId","DeviceId_getDeviceType","storageKey","DeviceId_STORAGE_KEY","DeviceId_generate","webeditor","lastState","lastValidationErrors","MAX_ACTIONS","alert","_Dialog_choice","_Dialog_confirm","_Dialog_prompt","confirm","spelled","prompt","uintarray","dataUrl","atob","isBrowser","fetch","blob","Uint8Array","arrayBuffer","b64","binary","charCodeAt","gunzip","gunzipSync","TextDecoder","decode","str2","fromCharCode","decodeURIComponent","escape","_Encoder_encodeIntoUrlAndSetUrl","_fflate","FileReader","Worker","replaceState","_Encoder_encodeIntoUrl","base64data","urlParams","URLSearchParams","input","TextEncoder","encode","gzipSync","btoa","gzip","reader","onload","readAsDataURL","Blob","_handler","_data","filename","contents","objectUrl","URL","createObjectURL","setAttribute","click","uid","domain","useBrowserCallback","callbackPath","urlBuilder","append","receiveMessage","removeEventListener","windowOpts","windowRef","windowUrl","exUrl","addEventListener","_label","_sampleMs","serverVersions","present","server","localItems","localIds","presentIds","missing","localVersion","isSameVersion","requestedIds","fetchedIds","raw","isSafeInteger","PageTheme_restore","escapedRawData","querySelector","innerHTML","escapedPageWrapperProps","parser","DOMParser","unescapedRawData","parseFromString","documentElement","textContent","unescapedPageWrapperProps","pageWrapperProps","hydrateRoot","_client","promo","keyIdentifier","_IapHelpers_readReceiptOrJwsIOS","unref","jws","getReceiptDataIOS","refreshed","getReceiptIOS","hevyCsvRaw","Papa","header","skipEmptyLines","ImportUtils_detectCsvKind","fields","hevyRecords","row","warnings","validRecords","validateHevyRecord","collectHevyWarnings","hevyWorkouts","CollectionUtils_groupByKey","hevyExercises","set_type","set_index","exercise_title","exercise_notes","weight_lbs","parseHevyNumber","weight_kg","start_time","end_time","backMap","hevyWorkout","startTs","parseHevyDate","endTs","column","exerciseNameAndEquipment","exerciseMapping","_exerciseNameAndEquip","sanitizedTitle","Exercise_sanitizeName","maybeExerciseId","_exerciseNameAndEquip3","buildHevyWeight","History_generateId","validation","_papaparse","_exercise2","Burpee","Clamshell","Clean","Crunch","Lunge","Plank","Snatch","Superman","Cycling","DateUtils_parseNamedMonthDateTime","ImportUtils_isSuspiciousTimestamp","ImportUtils_isSuspiciousWeight","ImportUtils_isSuspiciousReps","liftosaurCsvRaw","rows","liftosaurRecords","cells","columns","columnIndex","validateRecord","collectWarnings","groupedRecords","rawSets","firstSet","rawWarmupSets","isWarmupSet","rawWorkoutSets","buildSet","completedWeightValue","completedWeightUnit","optionalNumber","requiredReps","parseTimestamp","completedRepsTime","workoutDateTime","firstRecord","dayname","numericColumns","unitColumns","valueColumn","unitColumn","_ImportFromLink_importFromLink","base64","getDecodedData","_url$pathname$split$f","_url$pathname$split$f2","getDataFromShortUrl","_getDecodedData","referencedIds","hevySignatureHeaders","liftosaurSignatureHeaders","minTimestamp","existingHistory","minStartTime","maxStartTime","customExerciseNames","duplicateIds","ImportUtils_findDuplicates","existingStartTimes","duplicates","lo","hi","mid","_IndexedDBUtils_get","_IndexedDBUtils_getAllKeys","indexedDB","connection","handler","close","createObjectStore","_IndexedDBUtils_remove","_IndexedDBUtils_set","_IndexedDBUtils_setMany","runTransaction","db","IndexedDBUtils_initialize","transaction","objectStore","logIndexedDBError","errorDetails","withTransaction","_withTransaction","getAllKeys","getAll","put","LiveActivityManager_updateLiveActivity","LiveActivityManager_getLiveActivityEntry","isNextSetWarmup","weightForPlates","exerciseImageUrl","canCompleteFromLiveActivity","currentReps","currentWeight","completedSets","Reps_setsStatus","targetWeight","targetRPE","targetTimer","isSetTimer","setTimerState","getReadyState","liveActivityEntry","view","TimedSet_toView","setTimerSince","getReadySince","restingSet","attributes","workoutStartTimestamp","historyEntryState","isAuto","subscriptions","EventManager_isAvailable","commithash","__COMMIT_HASH__","EventManager_log","_eventManager","fractionDigits","structuredCloneLike","obj1","obj2","fromEntries","chKeys","obj1original","obj2original","newPath","ignoreKeys","currentObj1","currentObj2","keys1","keys2","ObjectUtils_isEmpty","theKeys","sortedKeys","copyObj","oldKeys","newKeys","CollectionUtils_remove","flags","ArrayBuffer","isView","buffer","DataView","byteOffset","byteLength","SafeLocalStorage_getItem","PAGE_THEME_STORAGE_KEY","PageTheme_set","PageTheme_current","_tailwindSemanticGenerated","_safeLocalStorage","_theme","PageTheme_backgroundColor","semanticColors","contains","SafeLocalStorage_setItem","Theme_apply","decision","tier1","tier2","_perfSampling","PerfSampling_decide","PerfSampling_decideFor","_durationMs","_window","_recent","_provider","windowActive","reducerMs","flush","triggerLabel","triggerReducerMs","scheduleFlush","durationMs","agg","byId","commits","sumMs","maxMs","mounts","component","changedKeys","renderCounts","renderChanges","flushTimer","TARGET_USER_IDS","globalThis","ms","clearTimeout","renderComps","trigger","reducer_ms","comp","_n","_name","userAgent","noparams","afr","currentSearchParams","utmSource","utmMedium","utmCampaign","utmContent","utmTerm","landing","Platform_landingPageParams","programMatch","exerciseMatch","repMaxMatch","trackedEvents","gtag","rdt","_appAttribution","AppAttribution_get","WatchHost_send","postEvent","PushRegistration_identityOf","syncing","deliveries","withPostIfNeeded","posted","lastPosted","localOriginalId","deliveryIds","deliveryId","newData","pendingOriginalId","pending","registration","enabled","__ENV__","environment","javascript","source_map_enabled","code_version","__FULL_COMMIT_HASH__","guess_uncaught_frames","pld","RollbarUtils_checkIgnore","liftosaur_exception_id","Diagnostics_getLastState","Diagnostics_getLastValidationErrors","checkIgnore","exceptionIgnores","RollbarUtils_load","_RollbarUtils_load","accept","getExceptionData","_JSON$parse","isUncaught","firstArg","loadRollbar","getItem","removeItem","setItem","_sets","within","_SignIn_apple","_SignIn_google","_SignOut_google","StringUtils_hashCode","letter","needle","haystack","outer","nch","Uint32Array","spaces","indent2","trimEnd","verdicts","newestValid","newest","SubscriptionReceipts_cleanupApple","CollectionUtils_removeBy","hasApple","hasAppleSubscription","hasGoogle","hasGoogleSubscription","_subscriptionReceipts","verifyAppleReceipt","verifyGooglePurchaseToken","lastVersions","diffVersions","storageDiff","extractByVersions","filledVersionsDiff","duplicatedPrograms","duplicateInfo","serverVersionsFetchedAt","SyncBaseline_MAX_AGE_MS","baseColors","black","isPageRenderContext","light","_tailwindColors","TAILWIND_PAGE_MARKER_CLASS","semanticVars","shape","buildSemanticVars","root","Theme_system","setTheme","darkSchemeQuery","matchMedia","matches","isUndoing","isUndoingRef","_urlPolyfill","URLConstructor","URLPolyfill","parseURL","authority","userInfo","host","atIndex","username","hostname","port","portMatch","protocol","URLSearchParamsPolyfill","_parseFromString","eqIndex","filtered","thisArg","_protocol","_hostname","_port","_pathname","_search","_hash","_username","_password","baseP","urlPart","hashIndex","searchIndex","basePath","lastIndexOf","_searchParams","userinfo","SCALED_SPACINGS","SCALED_LEADINGS","setProperty","currentRem","listeners","useRem","_scaledSpacings","useSyncExternalStore","remSubscribe","remGet","remServerGet","fs","getComputedStyle","accountId","storedUserId","lftIosAppVersion","webkit","messageHandlers","liftosaurMessage","postMessage","_toConsumableArray","_arrayWithoutHoles","iter","_iterableToArray","minLen","_unsupportedIterableToArray","_nonIterableSpread","len","arr2","filterUniqueArray","assignStyle","baseValue","DASH","MS","cache","toUpper","camelCaseProperty","camelProp","hyphenateProperty","cssifyDeclaration","cssifyObject","css","RE","isPrefixedProperty","isPrefixedValue","unitlessProperties","borderImageOutset","borderImageSlice","borderImageWidth","fontWeight","opacity","orphans","tabSize","widows","zoom","fillOpacity","floodOpacity","stopOpacity","strokeDasharray","strokeDashoffset","strokeMiterlimit","strokeOpacity","prefixedUnitlessProperties","prefixes","getPrefixedProperty","charAt","jLen","_property","isUnitlessProperty","unprefixProperty","propertyWithoutPrefix","normalizeProperty","resolveArrayValue","unprefixValue","_hyphenateStyleName2","alpha","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","whitesmoke","yellow","yellowgreen","hex","per","num_per","hue","rgb_num_old","rgb_per_old","target_mode","converters","rgb","modes","parsers","colorProfiles","useMode","definition","toMode","fromMode","channels","channel","use","fixup","useParser","IdentStartCodePoint","IdentCodePoint","Tok","_i","is_num","chars","ch","ch1","is_ident","huenits","deg","rad","PI","grad","turn","digits","ident","identlike","consumeCoords","includeHue","coords","tokenize","parseModernSyntax","res","getMode","ii","parseColorSyntax","interpolatorLinear","interpolator","classes","get_classes","cls","fixupAlpha","some_defined","serialize","gamut","linearize","a98","z","gamma","xyz65","fixupHueShorter","hues","curr","M","degToRad","radToDeg","DE","BE","BCAD","differenceHueSaturation","std","smp","std_h","smp_h","dH","sin","sqrt","differenceHueChroma","averageAngle","cos","angle","atan2","amp","cosh","sinh","average","D50","D65","fy","fz","lab","cbrt","f0","f1","factor","exp","G","convertDlabToLab65","convertLab65ToDlab","lab65","dlab","hsl_old","m1","m2","convertHsvToRgb","convertRgbToHsv","rgba","hsv","M1","M2","C1","C2","C3","transferPqDecode","transferPqEncode","toRel","toAbs","absX","absY","absZ","jabPqEncode","vn","xp","yp","jabPqDecode","vp","rel","jab","xyz50","u_fn","v_fn","un","up","luv","lchuv","L","S","toe","k_1","k_3","toe_inv","find_cusp","S_cusp","k0","k1","k2","k3","k4","wl","wm","k_l","k_m","k_s","l_","m_","s_","compute_max_saturation","L_cusp","get_ST_max","a_","b_","cusp","C","get_Cs","C_max","L1","L0","dL","l_dt","m_dt","s_dt","ldt","mdt","sdt","ldt2","mdt2","sdt2","r1","u_r","t_r","g1","u_g","t_g","b1","u_b","t_b","find_gamut_intersection","ST_max","C_a","C_b","C_mid","convertOklabToOkhsl","ret","C_0","k_0","convertOkhslToOklab","hsl","k_2","modeOkhsl","oklab","convertOklabToOkhsv","S_max","T","L_v","C_v","L_vt","C_vt","rgb_scale","scale_L","convertOkhsvToOklab","S_0","L_new","modeOkhsv","lrgb","prophoto","rec2020","bias","bias_cbrt","transfer","q","serializeHex","formatHex","formatHex8","serializeHex8","isMergeableObject","isNonNullObject","stringValue","$$typeof","REACT_ELEMENT_TYPE","isReactElement","isSpecial","cloneUnlessOtherwiseSpecified","clone","defaultArrayMerge","getKeys","symbol","getEnumerableOwnPropertySymbols","propertyIsOnObject","arrayMerge","sourceIsArray","destination","propertyIsUnsafe","customMerge","getMergeFunction","mergeObject","deepmerge_1","tar","foo","ctor","tmp","getInt8","makeEmptyFunction","emptyFunction","thatReturns","thatReturnsFalse","thatReturnsTrue","thatReturnsNull","thatReturnsThis","thatReturnsArgument","format","_len","_key","argIndex","framesToPop","warning","uppercasePattern","msPattern","toHyphenLower","hName","prefixMap","plugins","_isObject2","combinedValue","processedValue","_prefixValue2","_addNewValuesOnly2","_processedValue","_prefixProperty2","_cssInJsUtils","CROSS_FADE_REGEX","_isPrefixedValue2","alternativeProps","alternativePropList","marginBlockStart","marginBlockEnd","marginInlineStart","marginInlineEnd","paddingBlockStart","paddingBlockEnd","paddingInlineStart","paddingInlineEnd","borderBlockStart","borderBlockStartColor","borderBlockStartStyle","borderBlockStartWidth","borderBlockEnd","borderBlockEndColor","borderBlockEndStyle","borderBlockEndWidth","borderInlineStart","borderInlineStartColor","borderInlineStartStyle","borderInlineStartWidth","borderInlineEnd","borderInlineEndColor","borderInlineEndStyle","borderInlineEndWidth","columnWidth","propertyPrefixMap","outputValue","multipleValues","singleValue","dashCaseProperty","_hyphenateProperty2","pLen","prefixMapping","prefixValue","webkitOutput","mozOutput","_capitalizeString2","transition","transitionProperty","WebkitTransition","WebkitTransitionProperty","MozTransition","MozTransitionProperty","Webkit","Moz","addIfNew","prefixProperties","requiredPrefixes","capitalizedProperty","prefixedProperty","metaData","extendStatics","__extends","__","__assign","__spreadArrays","il","jl","Lens","LensBuilder","LensBuilderWithObject","LensError","object_1","LENS_OPTIONAL_BREAK","_super","lens","AbstractLensBuilder","lensFactory","baseLens","_a","_optional","buildLensRecording","buildLensModifyRecording","prop","propLens","getter","setter","_getRaw","nestedErr","aLens","modifyFn","ObjectUtils","startName","lensGetterStr","prepend","newLensOrBuilder","newLens","combinedLens","newLensGetters","newGetter","propKey","isOptional","thisGetRaw","thisSet","nextObj","newParent","DEFAULT_OPTIONS_KEYS","isMatchingKey","isPromise","onCacheAdd","onCacheChange","onCacheHit","cloneArray","arrayLike","isSameValueZero","object1","object2","mergeOptions","existingOptions","newOptions","Cache","isMatchingKeyFunction","getKeyIndex","_getKeyIndexFromMatchingKey","_getKeyIndexForMany","_getKeyIndexForSingle","canTransformKey","shouldCloneArguments","shouldUpdateOnAdd","shouldUpdateOnChange","shouldUpdateOnHit","keyToMatch","keysLength","existingKey","keyLength","orderByLru","startingIndex","currentLength","updateAsyncCache","memoized","firstKey","firstValue","keyIndex","createMemoizedFunction","isMemoized","_b","_c","normalizedOptions","customOptions","getCustomOptions","factory","nullthrows","self","IS_PAPA_WORKER","dynamicTyping","J","dynamicTypingFunction","worker","WORKERS_SUPPORTED","webkitURL","BLOB_URL","onmessage","userStep","userChunk","userComplete","complete","userError","config","workerId","NODE_STREAM_INPUT","download","readable","read","on","File","stream","unparse","delimiter","BAD_DELIMITERS","quotes","newline","quoteChar","escapeChar","escapeFormulae","Q","RECORD_SEP","UNIT_SEP","BYTE_ORDER_MARK","LocalChunkSize","RemoteChunkSize","DefaultDelimiter","Parser","E","ParserHandle","NetworkStreamer","FileStreamer","StringStreamer","ReadableStreamStreamer","jQuery","each","attr","files","file","inputElem","instanceConfig","extend","_handle","_finished","_completed","_halted","_baseIndex","_partialLine","_rowCount","_start","_nextChunk","isFirstChunk","_completeResults","chunkSize","streamer","_config","parseChunk","beforeFirstChunk","paused","preview","WORKER_ID","finished","_sendError","_readChunk","_chunkLoaded","XMLHttpRequest","withCredentials","onerror","_chunkError","downloadRequestBody","downloadRequestHeaders","setRequestHeader","send","readyState","responseText","getResponseHeader","statusText","webkitSlice","mozSlice","FileReaderSync","readAsText","encoding","pause","resume","_streamData","_streamEnd","_streamError","_checkIsFinished","_streamCleanUp","removeListener","abort","transformHeader","comments","successful","bestDelimiter","delimitersToGuess","getCharIndex","P","U","N","B","fastMode","K","H","I","F","R","D","O","A","substr","linebreak","terminate","Scheduler","ReactDOM","formatProdErrorMessage","isValidContainer","nodeType","getNearestMountedFiber","fiber","nearestMounted","alternate","return","getSuspenseInstanceFromFiber","suspenseState","memoizedState","dehydrated","getActivityInstanceFromFiber","activityState","assertIsMounted","findCurrentHostFiberImpl","sibling","REACT_LEGACY_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_CONSUMER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_ACTIVITY_TYPE","REACT_MEMO_CACHE_SENTINEL","MAYBE_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","REACT_CLIENT_REFERENCE","getComponentNameFromType","displayName","_context","innerType","render","_payload","_init","isArrayImpl","ReactSharedInternals","__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","ReactDOMSharedInternals","__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","sharedNotPendingObject","valueStack","createCursor","suffix","contextStackCursor","contextFiberStackCursor","rootInstanceStackCursor","hostTransitionProviderCursor","pushHostContainer","nextRootInstance","namespaceURI","getOwnHostContext","tagName","getChildHostContextProd","popHostContainer","pushHostContext","JSCompiler_inline_result","popHostContext","HostTransitionContext","_currentValue","describeBuiltInComponentFrame","reentry","describeNativeComponentFrame","previousPrepareStackTrace","prepareStackTrace","RunInRootFrame","DetermineComponentFrameRoot","Fake","control","x$1","x$2","namePropDescriptor","_RunInRootFrame$Deter","sampleStack","controlStack","sampleLines","controlLines","frame","describeFiber","childFiber","getStackByFiberInDevAndProd","workInProgress","scheduleCallback$3","unstable_scheduleCallback","cancelCallback$1","unstable_cancelCallback","shouldYield","unstable_shouldYield","requestPaint","unstable_requestPaint","unstable_now","getCurrentPriorityLevel","unstable_getCurrentPriorityLevel","ImmediatePriority","unstable_ImmediatePriority","UserBlockingPriority","unstable_UserBlockingPriority","NormalPriority$1","unstable_NormalPriority","LowPriority","unstable_LowPriority","IdlePriority","unstable_IdlePriority","log$1","unstable_setDisableYieldValue","rendererID","injectedHook","setIsStrictModeForDevtools","newIsStrictMode","setStrictMode","clz32","LN2","nextTransitionUpdateLane","nextTransitionDeferredLane","nextRetryLane","getHighestPriorityLanes","lanes","pendingSyncLanes","getNextLanes","wipLanes","rootHasPendingCommit","pendingLanes","nextLanes","suspendedLanes","pingedLanes","warmLanes","nonIdlePendingLanes","checkIfRootIsPrerendering","renderLanes","computeExpirationTime","lane","currentTime","claimNextRetryLane","createLaneMap","laneMap","markRootUpdated$1","updateLane","markSpawnedDeferredLane","spawnedLane","entangledLanes","spawnedLaneIndex","entanglements","markRootEntangled","rootEntangledLanes","index$8","getBumpedLaneForHydration","renderLane","getBumpedLaneForHydrationByLane","lanesToEventPriority","resolveUpdatePriority","updatePriority","getEventPriority","runWithPriority","priority","previousPriority","randomKey","internalInstanceKey","internalPropsKey","internalContainerInstanceKey","internalEventHandlersKey","internalEventHandlerListenersKey","internalEventHandlesSetKey","internalRootNodeResourcesKey","internalHoistableMarker","detachDeletedInstance","getClosestInstanceFromNode","targetNode","targetInst","parentNode","getParentHydrationBoundary","getInstanceFromNode","getNodeFromInstance","inst","stateNode","getResourcesFromRoot","resources","hoistableStyles","hoistableScripts","markNodeAsHoistable","allNativeEvents","registrationNameDependencies","registerTwoPhaseEvent","registrationName","dependencies","registerDirectEvent","VALID_ATTRIBUTE_NAME_REGEX","illegalAttributeNameCache","validatedAttributeNameCache","setValueForAttribute","removeAttribute","prefix$10","setValueForKnownAttribute","setValueForNamespacedAttribute","namespace","setAttributeNS","getToStringValue","isCheckable","elem","nodeName","_valueTracker","valueField","descriptor","setValue","stopTracking","trackValueOnNode","updateValueIfChanged","tracker","lastValue","checked","getActiveElement","doc","activeElement","escapeSelectorAttributeValueInsideDoubleQuotesRegex","escapeSelectorAttributeValueInsideDoubleQuotes","updateInput","lastDefaultValue","defaultChecked","setDefaultValue","initInput","isHydrating","ownerDocument","updateOptions","multiple","propValue","setDefaultSelected","defaultSelected","updateTextarea","initTextarea","setTextContent","lastChild","nodeValue","unitlessNumbers","setValueForStyle","styleName","isCustomProperty","cssFloat","setValueForStyles","styles","prevStyles","styleName$16","styleName$17","isCustomElement","aliases","isJavaScriptProtocol","sanitizeURL","noop$1","currentReplayingEvent","getEventTarget","nativeEvent","srcElement","correspondingUseElement","restoreTarget","restoreQueue","restoreStateOfTarget","internalInstance","querySelectorAll","otherNode","form","isInsideEventHandler","batchedUpdates$1","flushSyncWork$1","getListener","canUseDOM","passiveBrowserEventsSupported","startText","fallbackText","getData","startValue","startLength","endValue","endLength","minEnd","getEventCharCode","keyCode","charCode","functionThatReturnsTrue","functionThatReturnsFalse","createSyntheticEvent","Interface","SyntheticBaseEvent","reactName","reactEventType","nativeEventTarget","propName","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","returnValue","isPropagationStopped","stopPropagation","cancelBubble","persist","isPersistent","lastMovementX","lastMovementY","lastMouseEvent","EventInterface","eventPhase","bubbles","cancelable","timeStamp","isTrusted","SyntheticEvent","UIEventInterface","SyntheticUIEvent","MouseEventInterface","screenX","screenY","clientX","clientY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","getEventModifierState","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","SyntheticMouseEvent","SyntheticDragEvent","dataTransfer","SyntheticFocusEvent","SyntheticAnimationEvent","animationName","elapsedTime","pseudoElement","SyntheticClipboardEvent","clipboardData","SyntheticCompositionEvent","normalizeKey","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","translateToKey","modifierKeyToProp","Alt","Control","Meta","Shift","modifierStateGetter","keyArg","SyntheticKeyboardEvent","locale","which","SyntheticPointerEvent","pointerId","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","SyntheticTouchEvent","touches","targetTouches","changedTouches","SyntheticTransitionEvent","propertyName","SyntheticWheelEvent","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","SyntheticToggleEvent","END_KEYCODES","canUseCompositionEvent","documentMode","canUseTextInputEvent","useFallbackCompositionData","SPACEBAR_CHAR","hasSpaceKeypress","isFallbackCompositionEnd","domEventName","getDataFromCustomEvent","isComposing","supportedInputTypes","datetime","tel","isTextInputElement","createAndAccumulateChangeEvent","dispatchQueue","accumulateTwoPhaseListeners","activeElement$1","activeElementInst$1","runEventInBatch","processDispatchQueue","getInstIfValueChanged","getTargetInstForChangeEvent","isInputEventSupported","JSCompiler_inline_result$jscomp$286","isSupported$jscomp$inline_427","element$jscomp$inline_428","oninput","stopWatchingForValueChange","detachEvent","handlePropertyChange","handleEventsForInputEventPolyfill","attachEvent","getTargetInstForInputEventPolyfill","getTargetInstForClickEvent","getTargetInstForInputOrChangeEvent","objectIs","shallowEqual","objA","objB","keysA","keysB","currentKey","getLeafNode","getNodeForCharacterOffset","nodeEnd","containsNode","outerNode","innerNode","compareDocumentPosition","getActiveElementDeep","containerInfo","defaultView","HTMLIFrameElement","contentWindow","hasSelectionCapabilities","skipSelectionChangeEvent","activeElementInst","lastSelection","mouseDown","constructSelectEvent","selectionStart","selectionEnd","anchorNode","getSelection","anchorOffset","focusNode","focusOffset","makePrefixMap","styleProp","vendorPrefixes","animationend","animationiteration","animationstart","transitionrun","transitionstart","transitioncancel","transitionend","prefixedEventNames","getVendorPrefixedEventName","ANIMATION_END","ANIMATION_ITERATION","ANIMATION_START","TRANSITION_RUN","TRANSITION_START","TRANSITION_CANCEL","TRANSITION_END","topLevelEventsToReactNames","simpleEventPluginEvents","registerSimpleEvent","reportGlobalError","ErrorEvent","dispatchEvent","process","emit","concurrentQueues","concurrentQueuesIndex","concurrentlyUpdatedLanes","finishQueueingConcurrentUpdates","endIndex","markUpdateLaneFromFiberToRoot","enqueueUpdate$1","enqueueConcurrentHookUpdate","getRootForUpdatedFiber","enqueueConcurrentRenderForLane","sourceFiber","childLanes","_visibility","hiddenUpdates","nestedUpdateCount","rootWithNestedUpdates","emptyContextObject","FiberNode","pendingProps","elementType","refCleanup","updateQueue","memoizedProps","subtreeFlags","deletions","createFiberImplClass","shouldConstruct","Component","isReactComponent","createWorkInProgress","firstContext","resetWorkInProgress","createFiberFromTypeAndProps","owner","fiberTag","hostContext","itemProp","precedence","onLoad","async","isHostHoistableType","createFiberFromFragment","elements","createFiberFromText","createFiberFromDehydratedFragment","dehydratedNode","createFiberFromPortal","portal","pendingChildren","implementation","CapturedStacks","createCapturedValueAtFiber","forkStack","forkStackIndex","treeForkProvider","treeForkCount","idStack","idStackIndex","treeContextProvider","treeContextId","treeContextOverflow","pushTreeFork","totalChildren","pushTreeId","baseIdWithLeadingBit","baseLength","numberOfOverflowBits","pushMaterializedTreeId","popTreeContext","restoreSuspendedTreeContext","suspendedContext","hydrationParentFiber","nextHydratableInstance","hydrationErrors","rootOrSingletonContext","HydrationMismatchException","throwOnHydrationMismatch","queueHydrationError","prepareToHydrateHostInstance","instance","listenToNonDelegatedEvent","mediaEventTypes","suppressHydrationWarning","checkForUnmatchedText","popover","onScroll","onScrollEnd","onclick","popToNextHostParent","popHydrationState","JSCompiler_temp","shouldSetTextContent","getNextHydratableInstanceAfterHydrationBoundary","isSingletonScope","previousHydratableOnEnteringScopedSingleton","getNextHydratable","resetHydrationState","upgradeHydrationErrorsToRecoverable","queuedErrors","workInProgressRootRecoverableErrors","valueCursor","currentlyRenderingFiber$1","lastContextDependency","pushProvider","providerFiber","nextValue","popProvider","scheduleContextWorkOnParentPath","propagationRoot","propagateContextChanges","contexts","forcePropagateEntireTree","nextFiber","dependency","propagateParentContextChanges","isInsidePropagationBailout","currentParent","checkIfContextChanged","currentDependencies","memoizedValue","prepareToReadContext","readContext","readContextForConsumer","readContextDuringReconciliation","consumer","AbortControllerLocal","AbortController","listener","scheduleCallback$2","NormalPriority","CacheContext","Consumer","Provider","_currentValue2","_threadCount","createCache","controller","refCount","releaseCache","currentEntangledListeners","currentEntangledPendingCount","currentEntangledLane","currentEntangledActionThenable","pingEngtangledActionScope","prevOnStartTransitionFinish","globalMostRecentTransitionTime","thenable","entangledListeners","requestTransitionLane","entangleAsyncAction","resumedCache","peekCacheFromPool","cacheResumedFromPreviousRender","workInProgressRoot","pooledCache","pushTransition","offscreenWorkInProgress","prevCachePool","pool","getSuspendedCache","cacheFromPool","SuspenseException","SuspenseyCommitException","SuspenseActionException","noopSuspenseyCommitThenable","isThenableResolved","trackUsedThenable","thenableState","checkIfUseWrappedInAsyncCatch","shellSuspendCounter","fulfilledValue","fulfilledThenable","rejectedThenable","suspendedThenable","resolveLazy","lazyType","getSuspendedThenable","rejectedReason","thenableState$1","thenableIndexCounter$1","unwrapThenable","coerceRef","throwOnInvalidObjectTypeImpl","returnFiber","newChild","createChildReconciler","shouldTrackSideEffects","deleteChild","childToDelete","deleteRemainingChildren","currentFirstChild","mapRemainingChildren","existingChildren","useFiber","placeChild","newFiber","lastPlacedIndex","newIndex","placeSingleChild","updateTextNode","updateElement","updateFragment","updatePortal","fragment","createChild","updateSlot","oldFiber","updateFromMap","newIdx","reconcileChildFibersImpl","newChildren","resultingFirstChild","previousNewFiber","nextOldFiber","reconcileChildrenArray","reconcileChildrenIterator","firstChildFiber","reconcileChildFibers","mountChildFibers","hasForceUpdate","initializeUpdateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","hiddenCallbacks","cloneUpdateQueue","createUpdate","enqueueUpdate","executionContext","entangleTransitions","queueLanes","enqueueCapturedUpdate","capturedUpdate","newFirst","newLast","didReadFromEntangledAsyncAction","suspendIfUpdateReadFromEntangledAsyncAction","processUpdateQueue","workInProgress$jscomp$0","instance$jscomp$0","pendingQueue","lastPendingUpdate","firstPendingUpdate","isHiddenUpdate","workInProgressRootRenderLanes","workInProgressRootSkippedLanes","callCallback","commitCallbacks","currentTreeHiddenStackCursor","prevEntangledRenderLanesCursor","pushHiddenContext","entangledRenderLanes","baseLanes","reuseHiddenContextOnStack","popHiddenContext","suspenseHandlerStackCursor","shellBoundary","pushPrimaryTreeSuspenseHandler","suspenseStackCursor","pushDehydratedActivitySuspenseHandler","pushOffscreenSuspenseHandler","reuseSuspenseHandlerOnStack","popSuspenseHandler","findFirstSuspended","isSuspenseInstancePending","isSuspenseInstanceFallback","revealOrder","currentlyRenderingFiber","currentHook","workInProgressHook","didScheduleRenderPhaseUpdate","didScheduleRenderPhaseUpdateDuringThisPass","shouldDoubleInvokeUserFnsInHooksDEV","localIdCounter","thenableIndexCounter","globalClientIdCounter","throwInvalidHookError","areHookInputsEqual","nextDeps","prevDeps","renderWithHooks","secondArg","nextRenderLanes","HooksDispatcherOnMount","HooksDispatcherOnUpdate","renderWithHooksAgain","finishRenderingHooks","ContextOnlyDispatcher","didRenderTooFewHooks","didReceiveUpdate","numberOfReRenders","lastEffect","events","stores","memoCache","HooksDispatcherOnRerender","TransitionAwareHostComponent","dispatcher","maybeThenable","useThenable","checkDidRenderIdHook","didRenderIdHook","bailoutHooks","resetHooksOnUnwind","mountWorkInProgressHook","hook","baseQueue","updateWorkInProgressHook","nextCurrentHook","nextWorkInProgressHook","usable","useMemoCache","basicStateReducer","updateReducer","updateReducerImpl","lastRenderedReducer","baseFirst","newBaseQueueFirst","newBaseQueueLast","didReadFromEntangledAsyncAction$60","revertLane","gesture","hasEagerState","eagerState","lastRenderedState","rerenderReducer","lastRenderPhaseUpdate","updateSyncExternalStore","subscribe","getSnapshot","getServerSnapshot","isHydrating$jscomp$0","snapshotChanged","updateEffect","subscribeToStore","pushSimpleEffect","destroy","updateStoreInstance","pushStoreConsistencyCheck","renderedSnapshot","nextSnapshot","checkIfSnapshotChanged","forceStoreRerender","latestGetSnapshot","scheduleUpdateOnFiber","mountStateImpl","initialState","initialStateInitializer","updateOptimisticImpl","passthrough","dispatchActionState","actionQueue","setPendingState","setState","isRenderPhaseUpdate","actionNode","isTransition","runActionStateAction","prevState","prevTransition","currentTransition","onStartTransitionFinish","handleActionReturnValue","onActionError","error$66","nextState","onActionSuccess","notifyActionListeners","actionStateReducer","mountActionState","initialStateProp","ssrFormState","formState","JSCompiler_inline_result$jscomp$0","inRootOrSingleton","dispatchSetState","dispatchOptimisticSetState","updateActionState","updateActionStateImpl","stateHook","currentStateHook","actionStateActionEffect","rerenderActionState","deps","updateRef","mountEffectImpl","fiberFlags","hookFlags","updateEffectImpl","mountEffect","updateEvent","componentUpdateQueue","useEffectEventImpl","nextImpl","impl","updateInsertionEffect","updateLayoutEffect","imperativeHandleEffect","updateImperativeHandle","mountDebugValue","updateCallback","updateMemo","nextCreate","mountDeferredValueImpl","initialValue","requestDeferredLane","updateDeferredValueImpl","prevValue","startTransition","pendingState","finishedState","thenableWithOverride","dispatchSetStateInternal","requestUpdateLane","noop","startHostTransition","formFiber","formData","ensureFormComponentIsStateful","requestFormReset$1","existingStateHook","initialResetState","useHostTransitionStatus","updateId","updateRefresh","refreshCache","provider","root$69","dispatchReducerAction","enqueueRenderPhaseUpdate","entangleTransitionUpdate","currentState","throwIfDuringRender","useLayoutEffect","useInsertionEffect","useMemo","useReducer","useDebugValue","useDeferredValue","useTransition","useId","useFormState","useActionState","useOptimistic","useCacheRefresh","useEffectEvent","initialArg","identifierPrefix","booleanOrThenable","applyDerivedStateFromProps","getDerivedStateFromProps","nextProps","classComponentUpdater","enqueueSetState","_reactInternals","enqueueReplaceState","enqueueForceUpdate","checkShouldComponentUpdate","oldProps","newProps","nextContext","shouldComponentUpdate","isPureReactComponent","callComponentWillReceiveProps","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","resolveClassComponentProps","baseProps","defaultProps","propName$73","defaultOnUncaughtError","defaultOnCaughtError","defaultOnRecoverableError","logUncaughtError","errorInfo","onUncaughtError","componentStack","e$74","logCaughtError","boundary","onCaughtError","errorBoundary","e$75","createRootErrorUpdate","createClassErrorUpdate","initializeClassErrorUpdate","getDerivedStateFromError","componentDidCatch","legacyErrorBoundariesThatAlreadyFailed","SelectiveHydrationException","reconcileChildren","nextChildren","updateForwardRef","propsWithoutRef","bailoutOnAlreadyFinishedWork","updateMemoComponent","updateSimpleMemoComponent","checkScheduledUpdateOrContext","updateFunctionComponent","updateOffscreenComponent","_pendingMarkers","_retryCache","_transitions","deferHiddenOffscreenComponent","cachePool","bailoutOffscreenComponent","nextBaseLanes","remainingChildLanes","mountActivityChildren","mountWorkInProgressOffscreenFiber","retryActivityComponentWithoutHydrating","markRef","replayFunctionComponent","updateClassComponent","contextType","updater","refs","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","unresolvedOldProps","oldContext","contextType$jscomp$0","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","mountHostRootWithoutHydrating","SUSPENDED_MARKER","treeContext","retryLane","mountSuspenseOffscreenState","getRemainingWorkInPrimaryTree","primaryTreeDidDefer","workInProgressDeferredLane","updateSuspenseComponent","showFallback","didSuspend","canHydrateHydrationBoundary","nextPrimaryChildren","mountSuspensePrimaryChildren","retrySuspenseComponentWithoutHydrating","dataset","digest","dgst","renderDidSuspendDelayIfPossible","primaryChildren","offscreenProps","scheduleSuspenseWorkOnFiber","initSuspenseListRenderState","isBackwards","tail","lastContentRow","tailMode","renderState","rendering","renderingStartTime","updateSuspenseListComponent","suspenseContext","shouldForceFallback","beginWork","state$102","didSuspendBefore","attemptEarlyBailoutIfNoScheduledUpdate","isDehydrated","getResource","getOwnerDocumentFromRootContainer","setInitialProperties","resolveSingletonInstance","anyProps","hasAttribute","getAttribute","crossOrigin","canHydrateInstance","canHydrateTextInstance","updateActivityComponent","pooledCacheLanes","markUpdate","preloadInstanceAndSuspendIfNeeded","shouldRemainOnPreviousScreen","preloadResourceAndSuspendIfNeeded","resource","preloadResource","scheduleRetryEffect","retryQueue","workInProgressSuspendedRetryLanes","cutOffTailIfNeeded","hasRenderedATailFallback","lastTailNode","lastTailNode$106","bubbleProperties","completedWork","didBailout","newChildLanes","child$107","completeWork","pendingContext","nextResource","createElementNS","autoFocus","createTextNode","listenToAllSupportedEvents","workInProgressRootExitStatus","workInProgressRootRenderTargetTime","unwindWork","unwindInterruptedWork","interruptedWork","commitHookEffectListMount","finishedWork","firstEffect","captureCommitPhaseError","commitHookEffectListUnmount","nearestMountedAncestor$jscomp$0","nearestMountedAncestor","destroy_","commitClassCallbacks","safelyCallComponentWillUnmount","componentWillUnmount","safelyAttachRef","instanceToUse","safelyDetachRef","error$140","commitHostMount","srcSet","srcset","commitHostUpdate","domElement","lastProps","lastProp","setProp","propKey$201","propKey$217","propKey$222","propKey$227","setPropOnCustomElement","propKey$232","updateProperties","isHostParent","getHostSibling","insertOrAppendPlacementNodeIntoContainer","insertBefore","_reactRootContainer","insertOrAppendPlacementNode","commitHostSingletonAcquisition","singleton","removeAttributeNode","offscreenSubtreeIsHidden","offscreenSubtreeWasHidden","needsFormReset","PossiblyWeakSet","WeakSet","nextEffect","commitLayoutEffectOnFiber","finishedRoot","recursivelyTraverseLayoutEffects","__reactInternalSnapshotBeforeUpdate","error$139","commitActivityHydrationCallbacks","commitSuspenseHydrationCallbacks","_reactRetry","registerSuspenseInstanceRetry","retryDehydratedSuspenseBoundary","prevOffscreenSubtreeWasHidden","recursivelyTraverseReappearLayoutEffects","detachFiberAfterEffects","hostParent","hostParentIsContainer","recursivelyTraverseDeletionEffects","commitDeletionEffectsOnFiber","deletedFiber","onCommitFiberUnmount","prevHostParent","prevHostParentIsContainer","releaseSingletonInstance","clearHydrationBoundary","retryIfBlockedOn","attachSuspenseRetryListeners","wakeables","retryCache","getRetryCache","wakeable","retry","resolveRetryWakeable","recursivelyTraverseMutationEffects","root$jscomp$0","parentFiber","commitMutationEffectsOnFiber","currentHoistableRoot","commitReconciliationEffects","hoistableRoot","currentResource","getElementsByTagName","maybeNodes","getHydratableHoistableCache","httpEquiv","charSet","mountHoistable","acquireResource","tagCaches","getHoistableRoot","recursivelyResetForms","globalMostRecentFallbackTime","wasHidden","prevOffscreenSubtreeIsHidden","recursivelyTraverseDisappearLayoutEffects","hideOrUnhideDehydratedBoundary","hostParentFiber","parent$141","parent$143","finishedRoot$jscomp$0","includeWorkInProgressEffects","commitOffscreenPassiveMountEffects","previousCache","commitCachePassiveMountEffect","recursivelyTraversePassiveMountEffects","committedLanes","committedTransitions","commitPassiveMountOnFiber","_finishedWork$memoize2","onPostCommit","passiveEffectDuration","recursivelyTraverseAtomicPassiveEffects","recursivelyTraverseReconnectPassiveEffects","committedLanes$jscomp$0","committedTransitions$jscomp$0","suspenseyCommitFlag","recursivelyAccumulateSuspenseyCommit","suspendedState","accumulateSuspenseyCommitOnFiber","media","getStyleKey","getStylesheetSelectorFromKey","_p","onUnsuspend","stylesheetPropsFromRawProps","preloadPropsMap","adoptPreloadPropsForStylesheet","linkInstance","stylesheets","preload","suspendResource","previousHoistableRoot","detachAlternateSiblings","previousFiber","recursivelyTraversePassiveUnmountEffects","commitPassiveUnmountEffectsInsideOfDeletedTree_begin","commitPassiveUnmountOnFiber","recursivelyTraverseDisconnectPassiveEffects","deletedSubtreeRoot","DefaultAsyncDispatcher","getCacheForType","resourceType","cacheForType","cacheSignal","PossiblyWeakMap","workInProgressSuspendedReason","workInProgressThrownValue","workInProgressRootDidSkipSuspendedSiblings","workInProgressRootIsPrerendering","workInProgressRootDidAttachPingListener","workInProgressRootInterleavedUpdatedLanes","workInProgressRootPingedLanes","workInProgressRootConcurrentErrors","workInProgressRootDidIncludeRecursiveRenderUpdate","workInProgressTransitions","pendingEffectsStatus","pendingEffectsRoot","pendingFinishedWork","pendingEffectsLanes","pendingEffectsRemainingLanes","pendingPassiveTransitions","pendingRecoverableErrors","cancelPendingCommit","prepareFreshStack","markRootSuspended","ensureRootIsScheduled","performWorkOnRoot","forceSync","shouldTimeSlice","expiredLanes","exitStatus","prevExecutionContext","prevDispatcher","pushDispatcher","prevAsyncDispatcher","pushAsyncDispatcher","thrownValue","throwAndUnwindWorkLoop","replaySuspendedUnitOfWork","hostFiber","completeUnitOfWork","resetWorkInProgressStack","workLoopConcurrentByScheduler","thrownValue$167","handleThrow","renderRootConcurrent","renderRootSync","renderWasConcurrent","isRenderConsistentWithExternalStores","errorRecoveryDisabledLanes","wasRootDehydrated","timeoutHandle","scheduleTimeout","commitRootWhenReady","recoverableErrors","transitions","didIncludeRenderPhaseUpdate","updatedLanes","suspendedRetryLanes","didSkipSuspendedSiblings","suspendedCommitReason","completedRenderStartTime","completedRenderEndTime","imgCount","imgBytes","suspenseyImages","waitingForImages","waitingForViewTransition","unsuspend","timeoutOffset","insertSuspendedStylesheets","commit","stylesheetTimer","estimatedBytesWithinLimit","performance","getEntriesByType","bits","resourceEntries","transferSize","initiatorType","isLikelyStaticResource","responseEnd","overlapEntry","overlapStartTime","overlapTransferSize","overlapInitiatorType","downlink","estimateBandwidth","imgTimer","waitForCommitToBeReady","commitRoot","check","didAttemptEntireTree","expirationTimes","index$6","flushSyncWorkAcrossRoots_impl","cancelTimeout","allEntangledLanes","index$4","shouldYieldForPrerendering","unitOfWork","workLoopSync","thrownValue$165","performUnitOfWork","suspendedReason","rootRenderLanes","attachPingListener","markerInstances","cause","wrapperError","throwException","unwindUnitOfWork","skipSiblings","flushPendingEffects","finishedLanes","remainingLanes","previouslyPendingLanes","index$7","hiddenUpdatesForLane","markRootFinished","callbackNode","callbackPriority","flushPassiveEffects","eventsEnabled","_enabled","selection","rangeCount","e$20","indexWithinAnchor","indexWithinFocus","selectionInformation","focusedElem","selectionRange","resolvedPrevProps","clearContainerSparingly","commitBeforeMutationEffects","flushMutationEffects","flushLayoutEffects","flushSpawnedWork","rootMutationHasEffect","priorSelectionInformation","curFocusedElem","priorFocusedElem","priorSelectionRange","win","start$jscomp$0","end$jscomp$0","startMarker","endMarker","createRange","setStart","removeAllRanges","addRange","setEnd","scrollLeft","scrollTop","rootHasLayoutEffect","releaseRootPooledCache","onCommitFiberRoot","onRecoverableError","recoverableError","renderPriority","onPostCommitFiberRoot","captureCommitPhaseErrorOnRoot","rootFiber","pingCache","threadIDs","pingSuspendedRoot","retryTimedOutBoundary","boundaryFiber","firstScheduledRoot","lastScheduledRoot","didScheduleMicrotask","mightHavePendingSyncWork","isFlushingWork","currentEventTransitionLane","scheduleMicrotask","processRootScheduleInImmediateTask","processRootScheduleInMicrotask","syncTransitionLanes","onlyLegacy","didPerformSomeWork","root$170","performSyncWorkOnRoot","currentPopstateTransitionEvent","scheduleTaskForRootDuringMicrotask","index$5","expirationTime","performWorkOnRootViaSchedulerTask","didTimeout","originalCallbackNode","workInProgressRootRenderLanes$jscomp$0","actionScopeLane","coerceFormActionProp","actionProp","createFormDataWithSubmitter","submitter","temp","FormData","i$jscomp$inline_1577","eventName$jscomp$inline_1578","nonDelegatedEvents","eventSystemFlags","_dispatchQueue$i","previousInstance","i$jscomp$0","_dispatchListeners$i","targetElement","listenerSetKey","addTrappedEventListener","listenToNativeEvent","isCapturePhaseListener","listeningMarker","rootContainerElement","targetContainer","listenerWrapper","dispatchDiscreteEvent","dispatchContinuousEvent","capture","passive","dispatchEventForPluginEventSystem","targetInst$jscomp$0","ancestorInst","nodeTag","container","grandTag","SyntheticEventCtor","inCapturePhase","accumulateTargetOnly","reactEventName","lastHostComponent","_instance","createDispatchListener","parentWindow","getParent","tempB","accumulateEnterLeaveListenersForEvent","getTargetInstFunc","handleEventFunc","fallbackData","eventType","getNativeBeforeInputChars","char","getFallbackBeforeInputChars","maybeTargetInst","formAction","extractEvents$1","targetFiber","captureName","_instance2","common","_instance3","NORMALIZE_NEWLINES_REGEX","NORMALIZE_NULL_AND_REPLACEMENT_REGEX","normalizeMarkupForTextOrAttribute","markup","serverText","clientText","formEncType","formMethod","formTarget","encType","muted","hasSrc","hasSrcSet","propValue$184","parentNamespace","localPromise","queueMicrotask","handleErrorInNextTick","parentInstance","hydrationInstance","depth","nextNode","node$jscomp$0","nextNode$jscomp$0","suspenseInstance","_stashedDisplay","_stashedText","targetInstance","previousSibling","rootContainerInstance","preconnectsSet","getRootNode","previousDispatcher","previousWasRendering","wasRendering","formInst","preconnectAs","as","globalDocument","preloadSelector","imageSrcSet","imageSizes","getScriptKey","getScriptSelectorFromKey","X","scripts","adoptPreloadPropsForScript","insertStylesheet","limitedEscapedHref","currentProps","preloadProps","styles$243","resource$244","integrity","hrefLang","referrerPolicy","rawProps","styleProps","instance$249","nodes","prior","stylesheetProps","scriptProps","keyAttribute","caches","nodeKey","precedencesByRoot","insertStylesheetIntoRoot","precedences","FiberRootNode","hydrate","onDefaultTransitionIndicator","incompleteTransitions","createFiberRoot","initialChildren","hydrationCallbacks","isStrictMode","getContextForSubtree","parentComponent","updateContainerImpl","markRetryLaneImpl","markRetryLaneIfNotHydrated","attemptContinuousHydration","attemptHydrationAtCurrentPriority","blockedOn","findInstanceBlockingEvent","return_targetInst","clearIfContinuousEvent","queuedFocus","accumulateOrCreateContinuousQueuedReplayableEvent","queuedDrag","queuedMouse","queuedPointers","queuedPointerCaptures","queueIfContinuousEvent","discreteReplayableEvents","findInstanceBlockingTarget","hasScheduledReplayAttempt","queuedExplicitHydrationTargets","existingQueuedEvent","targetContainers","attemptExplicitHydrationTarget","queuedTarget","attemptReplayContinuousQueuedEvent","queuedEvent","nextBlockedOn","nativeEventClone","attemptReplayContinuousQueuedEventInMap","replayUnblockedEvents","scheduleCallbackIfUnblocked","unblocked","lastScheduledReplayQueue","scheduleReplayQueueIfNeeded","formReplayingQueue","submitterOrAction","unblock","$$reactFormReplay","formProps","defaultOnDefaultTransitionIndicator","handleNavigate","canIntercept","intercept","pendingResolve","focusReset","handleNavigateComplete","isCancelled","startFakeNavigation","navigation","navigate","ReactDOMRoot","internalRoot","_internalRoot","ReactDOMHydrationRoot","unmount","unstable_scheduleHydration","isomorphicReactPackageVersion$jscomp$inline_1840","findDOMNode","componentOrElement","parentA","parentB","didFindChild","child$0","findCurrentFiberUsingSlowPath","internals$jscomp$inline_2347","bundleType","rendererPackageName","currentDispatcherRef","reconcilerVersion","__REACT_DEVTOOLS_GLOBAL_HOOK__","hook$jscomp$inline_2348","isDisabled","supportsFiber","inject","createRoot","unstable_strictMode","Internals","getCrossOriginStringAs","createPortal$1","flushSync","previousTransition","previousUpdatePriority","preconnect","prefetchDNS","preinit","fetchPriority","preinitModule","preloadModule","requestFormReset","unstable_batchedUpdates","permalink","useFormStatus","checkDCE","listenerMapping","getColorScheme","addChangeListener","mappedListener","colorScheme","addListener","exitApp","dimensions","fontScale","shouldInit","visualViewport","docEl","clientHeight","clientWidth","devicePixelRatio","handleResize","Dimensions","dimension","initialDimensions","ease","kSampleStepSize","float32ArraySupported","Float32Array","aA1","aA2","calcBezier","aT","getSlope","bezier","mX1","mY1","mX2","mY2","sampleValues","aX","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","_aGuessT","aGuessT","currentSlope","newtonRaphsonIterate","_aA","_aB","currentX","currentT","aA","aB","binarySubdivide","getTForX","step0","step1","quad","cubic","poly","circle","elastic","bounciness","bounce","_t2","t2","x1","y1","x2","y2","out","inOut","deepDiffer","maxDepth","twoKey","safeIsNaN","areInputsEqual","newInputs","lastInputs","numColumnsOrDefault","numColumns","FlatList","scrollToEnd","_listRef","scrollToIndex","scrollToItem","scrollToOffset","recordInteraction","flashScrollIndicators","getScrollResponder","getNativeScrollRef","getScrollRef","getScrollableNode","_props","super","_virtualizedListPairs","_captureRef","_getItem","kk","itemIndex","_item","_getItemCount","isArrayLike","_keyExtractor","_this$props$keyExtrac","keyExtractor","_renderer","ListItemComponent","renderItem","columnWrapperStyle","extraData","cols","renderProp","_item2","it","separators","_memoizedRenderer","resultFn","newArgs","lastThis","lastArgs","lastResult","memoizeOne","_checkProps","viewabilityConfigCallbackPairs","viewabilityConfig","onViewableItemsChanged","_createOnViewableItemsChanged","getItemCount","horizontal","_pushMultiColumnViewable","_this$props$keyExtrac2","viewableItems","removeClippedSubviews","_this$props","_removeClippedSubviews","_this$props$strictMod","strictMode","restProps","renderer","VirtualizedList","StyleSheet","allowRTL","forceRTL","getConstants","isRTL","assets","getAssetByID","assetId","dataUriPattern","ImageUriCache","_entries","lastUsedTimestamp","_cleanUpIfNeeded","leastRecentlyUsedKey","leastRecentlyUsedEntry","imageUris","_maximumEntries","ImageLoader","requestId","image","getSize","failure","setInterval","clearInterval","naturalHeight","naturalWidth","Image","onDecode","prefetch","queryCache","uris","LOADED","LOADING","_filterId","svgDataUriPattern","resolveAssetUri","asset","scales","preferredScale","PixelRatio","scaleSuffix","httpServerLocation","svg","_ariaLabel","blurRadius","defaultSource","draggable","onLayout","onLoadEnd","onLoadStart","pointerEvents","ariaLabel","_React$useState","_React$useState2","layout","updateLayout","hasTextAncestor","TextAncestorContext","hiddenImageRef","filterRef","requestRef","shouldDisplaySource","_extractNonStandardSt","filterId","tintColorProp","flatStyle","flatten","resizeMode","tintColor","warnOnce","_filter","shadowString","extractNonStandardStyleProps","_resizeMode","_tintColor","selectedSource","displayImageUri","imageSizeStyle","_getAssetByID","resolveAssetDimensions","backgroundImage","backgroundSize","_hiddenImageRef$curre","_height3","_width3","scaleFactor","getBackgroundSize","hiddenImage","accessibilityImage$raw","abortPendingRequest","_layout","inline","undo","resizeModeStyles","visibility","floodColor","in2","createTintColorSVG","ImageWithStatics","flexBasis","overlayColor","absoluteFillObject","backgroundPosition","backgroundRepeat","center","contain","cover","stretch","isSupported","requestIdleCallback","timeRemaining","cancelIdleCallback","_emitter","EventEmitter","InteractionManager","Events","interactionStart","interactionComplete","runAfterInteractions","task","tasks","promise","_scheduleUpdate","_taskQueue","enqueueTasks","cancel","cancelTasks","createInteractionHandle","_inc","_addInteractionSet","clearInteractionHandle","_deleteInteractionSet","setDeadline","_deadline","_interactionSet","onMoreTasks","_onMoreTasks","_queueStack","popable","_getCurrentQueue","tasksToCancel","hasTasksToProcess","processNext","gen","_genPromise","stackIdx","stackItem","_nextUpdateHandle","_processUpdate","interactionCount","nextInteractionCount","begin","isVisible","dismiss","removeAllListeners","getFontScale","getPixelSizeForLayoutSize","layoutSize","roundToNearestPixel","web","isTesting","colors","onRefresh","progressBackgroundColor","progressViewOffset","refreshing","titleColor","normalizeScrollEvent","contentOffset","contentSize","scrollHeight","scrollWidth","layoutMeasurement","offsetHeight","offsetWidth","ScrollViewBase","forwardedRef","onTouchMove","onWheel","_props$scrollEnabled","scrollEnabled","_props$scrollEventThr","scrollEventThrottle","showsHorizontalScrollIndicator","showsVerticalScrollIndicator","scrollState","isScrolling","scrollLastTick","scrollTimeout","scrollRef","createPreventableScrollHandler","handleScrollTick","hideScrollbar","lastTick","eventThrottle","timeSinceLastTick","handleScrollEnd","handleScrollStart","useMergeRefs","scrollDisabled","overflowX","overflowY","touchAction","scrollbarWidth","emptyObject","ScrollView","_scrollNodeRef","_innerViewRef","isTouching","lastMomentumScrollBeginTime","lastMomentumScrollEndTime","observedScrollSinceBecomingResponder","becameResponderWhileAnimating","scrollResponderHandleScrollShouldSetResponder","scrollResponderHandleStartShouldSetResponderCapture","scrollResponderIsAnimating","scrollResponderHandleTerminationRequest","scrollResponderHandleTouchEnd","onTouchEnd","scrollResponderHandleResponderRelease","onResponderRelease","currentlyFocusedTextInput","TextInputState","currentlyFocusedField","keyboardShouldPersistTaps","onScrollResponderKeyboardDismissed","blurTextInput","scrollResponderHandleScroll","scrollResponderHandleResponderGrant","onResponderGrant","scrollResponderHandleScrollBeginDrag","onScrollBeginDrag","scrollResponderHandleScrollEndDrag","onScrollEndDrag","scrollResponderHandleMomentumScrollBegin","onMomentumScrollBegin","scrollResponderHandleMomentumScrollEnd","onMomentumScrollEnd","scrollResponderHandleTouchStart","onTouchStart","scrollResponderHandleTouchMove","scrollResponderScrollTo","animated","behavior","scrollResponderZoomTo","rect","scrollResponderScrollNativeHandleToKeyboard","nodeHandle","additionalOffset","preventNegativeScrollOffset","additionalScrollOffset","UIManager","measureLayout","getInnerViewNode","scrollResponderTextInputFocusError","scrollResponderInputMeasureAndScrollToKeyboard","keyboardScreenY","keyboardWillOpenTo","endCoordinates","scrollOffsetY","scrollResponderKeyboardWillShow","onKeyboardWillShow","scrollResponderKeyboardWillHide","onKeyboardWillHide","scrollResponderKeyboardDidShow","onKeyboardDidShow","scrollResponderKeyboardDidHide","onKeyboardDidHide","scrollResponderFlashScrollIndicators","getInnerViewRef","scrollTo","scrollResponderNode","_handleContentOnLayout","_e$nativeEvent$layout","onContentSizeChange","_handleScroll","keyboardDismissMode","dismissKeyboard","_setInnerViewRef","_setScrollNodeRef","mergeRefs","scrollResponderHandleStartShouldSetResponder","scrollResponderHandleResponderReject","contentContainerStyle","refreshControl","stickyHeaderIndices","pagingEnabled","centerContent","contentSizeChangeProps","hasStickyHeaderIndices","isSticky","stickyHeader","pagingEnabledChild","contentContainer","collapsable","contentContainerHorizontal","contentContainerCenterContent","baseStyle","baseHorizontal","baseVertical","pagingEnabledStyle","pagingEnabledHorizontal","pagingEnabledVertical","onStartShouldSetResponder","onStartShouldSetResponderCapture","onScrollShouldSetResponder","onResponderTerminationRequest","onResponderTerminate","scrollResponderHandleTerminate","onResponderReject","ScrollViewClass","scrollView","commonStyle","flexGrow","flexShrink","WebkitOverflowScrolling","justifyContent","scrollSnapType","scrollSnapAlign","ForwardedScrollView","VirtualizedSectionList","_subExtractor","_convertViewable","viewable","_info$index","keyExtractorWithNullableIndex","keyExtractorWithNonNullableIndex","_onViewableItemsChanged","_renderItem","listItemCount","infoIndex","renderSectionHeader","renderSectionFooter","SeparatorComponent","_getSeparatorComponent","ItemWithSeparator","LeadingSeparatorComponent","SectionSeparatorComponent","cellKey","leadingItem","leadingSection","prevCellKey","setSelfHighlightCallback","_setUpdateHighlightFor","setSelfUpdatePropsCallback","_setUpdatePropsFor","updateHighlightFor","_updateHighlightFor","updatePropsFor","_updatePropsFor","trailingItem","trailingSection","inverted","updateProps","_updatePropsMap","updateHighlight","_updateHighlightMap","updateHighlightFn","updatePropsFn","scrollToLocation","sectionIndex","viewOffset","stickySectionHeadersEnabled","__getFrameMetricsApprox","toIndexParams","getListRef","_step","passThroughProps","ItemSeparatorComponent","listHeaderOffset","ListHeaderComponent","itemCount","_iterator","itemIdx","sectionData","_this$props2","isLastItemInList","isLastItemInSection","leadingSeparatorHiglighted","setLeadingSeparatorHighlighted","separatorHighlighted","setSeparatorHighlighted","_React$useState3","leadingSeparatorProps","setLeadingSeparatorProps","_React$useState4","separatorProps","setSeparatorProps","highlight","unhighlight","leadingSeparator","highlighted","SectionList","_wrapperListRef","listRef","_stickySectionHeadersEnabled","StatusBar","setBackgroundColor","setBarStyle","setHidden","setNetworkActivityIndicatorVisible","setTranslucent","supportsCSS3TextDecoration","CSS","supports","SYSTEM_FONT_STACK","STYLE_SHORT_FORM_EXPANSIONS","borderColor","borderBlockColor","borderInlineColor","borderRadius","borderStyle","borderBlockStyle","borderInlineStyle","borderWidth","borderBlockWidth","borderInlineWidth","insetBlock","insetInline","marginBlock","marginInline","paddingBlock","paddingInline","overscrollBehavior","borderEndStartRadius","borderEndEndRadius","borderStartStartRadius","borderStartEndRadius","insetBlockEnd","insetBlockStart","isInline","resolvedStyle","backgroundClip","WebkitBackgroundClip","textDecorationLine","textDecoration","_value","longFormProperties","marginLeft","marginRight","paddingLeft","paddingRight","paddingTop","paddingBottom","longForm","colorInt","processColor","animationIterationCount","aspectRatio","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","flexOrder","flexPositive","flexNegative","gridRow","gridRowEnd","gridRowGap","gridRowStart","gridColumn","gridColumnEnd","gridColumnGap","gridColumnStart","lineClamp","scaleX","scaleY","scaleZ","prefixKey","colorProps","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","textDecorationColor","textShadowColor","normalizeValueWithProperty","normalizeColor","createCSSStyleSheet","rootNode","ShadowRoot","sheet","createOrderedCSSStyleSheet","selectors","sheetInsert","orderedGroups","getOrderedGroups","nextGroupIndex","nextGroup","cssRules","isInserted","cssText","insertRule","insertRuleAt","groupNumber","previousStart","cssRule","selectorText","groupPattern","decodeGroupRule","rules","getSelectorText","OrderedCSSStyleSheet","getTextContent","marker","insert","groupValue","markerRule","encodeGroupRule","selectorPattern","selector","layerRule","fakeSheet","CSSLayerBlockRule","layerIndex","originalLayered","original","roots","sheets","initialRules","createSheet","rule","initialSheet","wms","crossFade","imageSet","logical","sizing","appearance","userSelect","textEmphasisPosition","textEmphasis","textEmphasisStyle","textEmphasisColor","boxDecorationBreak","clipPath","maskImage","maskMode","maskRepeat","maskPosition","maskClip","maskOrigin","maskSize","maskComposite","mask","maskBorderSource","maskBorderMode","maskBorderSlice","maskBorderWidth","maskBorderOutset","maskBorderRepeat","maskBorder","maskType","textDecorationStyle","textDecorationSkip","breakAfter","breakBefore","breakInside","columnFill","columnGap","columnRule","columnRuleColor","columnRuleStyle","columnRuleWidth","columnSpan","backdropFilter","hyphens","flowInto","flowFrom","regionFragment","textOrientation","fontKerning","textSizeAdjust","createPrefixer","customGroup","inset","padding","insetInlineEnd","insetInlineStart","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","borderLeftStyle","borderLeftWidth","borderRightStyle","borderRightWidth","PROPERTIES_FLIP","PROPERTIES_I18N","PROPERTIES_VALUE","createDeclarationBlock","domStyle","prefixStyles","createReactDOMStyle","createIdentifier","murmurhash2_32_gc","processKeyframesValue","keyframesValue","animationNames","keyframes","_createKeyframes","stepName","createKeyframes","keyframesRules","staticStyleMap","defaultPreprocessOptions","shadow","textShadow","insertRules","compiledOrderedRules","absoluteFill","compiledStyles","_atomic","compiledStyle","styleObj","$$css","_classic","compiledRules","animationKeyframes","_processKeyframesValu","block","classic","compileAndInsertReset","atomicCompile","srcProp","valueString","normalizedValue","stringifyValueWithProperty","cacheKey","cachedResult","_processKeyframesValu2","_block","finalValue","_block2","_block3","_block4","_block5","_block6","_block7","createAtomicRules","orderedRules","localizeableValue","_left","_right","propPolyfill","ltr","rtl","polyfillIndices","ltrPolyfillValues","rtlPolyfillValues","ltrVal","ltrPolyfill","rtlPolyfill","_ltr","_rtl","atomic","preprocess","writingDirection","_options","preprocessOptions","styleq","customStyleq","originalStyle","frozenProps","nextStyle","originalValue","originalProp","originalValues","valuePolyfill","compose","style1","style2","flatArray","getSheet","hairlineWidth","resolveRNStyle","defaultOffset","createBoxShadowValue","offsetX","offsetY","mapBoxShadow","spreadDistance","createBoxShadowArrayValue","mapTransform","createTransformValue","createTransformOriginValue","PROPERTIES_STANDARD","borderBottomEndRadius","borderBottomStartRadius","borderTopEndRadius","borderTopStartRadius","borderEndColor","borderEndStyle","borderEndWidth","borderStartColor","borderStartStyle","borderStartWidth","marginEnd","marginHorizontal","marginStart","marginVertical","paddingEnd","paddingHorizontal","paddingStart","paddingVertical","ignoredProps","boxShadowValue","textShadowOffset","textShadowRadius","textShadowValue","radius","createTextShadowValue","verticalAlign","transformOrigin","forwardPropsList","lang","hrefAttrs","numberOfLines","onMoveShouldSetResponder","onMoveShouldSetResponderCapture","onResponderEnd","onResponderMove","onResponderStart","onScrollShouldSetResponderCapture","onSelectionChangeShouldSetResponder","onSelectionChangeShouldSetResponderCapture","selectable","hostRef","contextDirection","handleClick","langDirection","componentDirection","dir","supportedProps","pickProps","WebkitLineClamp","textHasAncestor$raw","text$raw","textOneLine","textMultiLine","notSelectable","pressable","platformMethodsRef","setRef","textStyle","border","boxSizing","font","listStyle","textAlign","whiteSpace","wordWrap","textOverflow","WebkitBoxOrient","twoArgumentPooler","a1","a2","Klass","instancePool","standardReleaser","destructor","poolSize","DEFAULT_POOLER","addPoolingTo","CopyConstructor","pooler","NewKlass","getPooled","release","BoundingDimensions","getPooledFromElement","Position","extractSingleTouch","hasTouches","hasChangedTouches","States","baseStatesConditions","NOT_RESPONDER","RESPONDER_INACTIVE_PRESS_IN","RESPONDER_INACTIVE_PRESS_OUT","RESPONDER_ACTIVE_PRESS_IN","RESPONDER_ACTIVE_PRESS_OUT","RESPONDER_ACTIVE_LONG_PRESS_IN","RESPONDER_ACTIVE_LONG_PRESS_OUT","ERROR","IsActive","IsPressingIn","IsLongPressingIn","Signals","Transitions","DELAY","RESPONDER_GRANT","RESPONDER_RELEASE","RESPONDER_TERMINATED","ENTER_PRESS_RECT","LEAVE_PRESS_RECT","LONG_PRESS_DETECTED","TouchableMixin","touchableNode","getTouchableNode","_touchableBlurListener","_isTouchableKeyboardActive","touchable","touchState","touchableHandleResponderTerminate","touchableDelayTimeout","longPressDelayTimeout","pressOutDelayTimeout","pressInLocation","responderID","touchableGetInitialState","touchableHandleResponderTerminationRequest","rejectResponderTermination","touchableHandleStartShouldSetResponder","touchableLongPressCancelsPress","touchableHandleResponderGrant","dispatchID","_receiveSignal","delayMS","touchableGetHighlightDelayMS","_handleDelay","longDelayMS","touchableGetLongPressDelayMS","LONG_PRESS_THRESHOLD","_handleLongDelay","touchableHandleResponderRelease","touchableHandleResponderMove","positionOnActivate","dimensionsOnActivate","pressRectOffset","touchableGetPressRectOffset","pressExpandLeft","pressExpandTop","pressExpandRight","pressExpandBottom","touchableGetHitSlop","_getDistanceBetweenPoints","_cancelLongPressDelayTimeout","touchableHandleFocus","touchableHandleBlur","_remeasureMetricsOnActivation","measure","_handleQueryLayout","globalX","globalY","curState","_performSideEffectsForTransition","_isHighlight","_savePressInLocation","locationX","locationY","aY","bX","bY","curIsHighlight","newIsHighlight","isInitialTransition","isActiveTransition","touchableHandleLongPress","_startHighlight","_endHighlight","hasLongPressHandler","onLongPress","pressIsLongButStillCallOnPress","touchableHandlePress","_playTouchSound","playTouchSound","touchableHandleActivePressIn","touchableHandleActivePressOut","touchableGetPressOutDelayMS","touchableHandleKeyEvent","AccessibilityUtil","propsToAriaRole","withoutDefaultFocusAndBlur","TouchableMixinWithoutDefaultFocusAndBlur","Touchable","Mixin","TOUCH_TARGET_DEBUG","renderDebugView","debugHitSlopStyle","normalizedColor","hexColor","styleValue","getRect","offsetLeft","offsetTop","offsetParent","clientLeft","clientTop","scrollY","scrollX","relativeToNativeNode","relativeNode","isConnected","relativeRect","_getRect","elementsToIgnore","BODY","INPUT","SELECT","TEXTAREA","blur","isContentEditable","measureInWindow","_getBoundingClientRec","getBoundingClientRect","onFail","onSuccess","updateView","configureNextLayoutAnimation","onAnimationDidEnd","setLayoutAnimationEnabledExperimental","view$raw","alignContent","alignItems","hyphenateString","processIDRefList","idRefList","pointerEventsStyles","accessibilityComponent","propsToAccessibilityComponent","domProps","ariaActiveDescendant","accessibilityActiveDescendant","ariaAtomic","accessibilityAtomic","ariaAutoComplete","accessibilityAutoComplete","ariaBusy","accessibilityBusy","ariaChecked","accessibilityChecked","ariaColumnCount","accessibilityColumnCount","ariaColumnIndex","accessibilityColumnIndex","ariaColumnSpan","accessibilityColumnSpan","ariaControls","accessibilityControls","ariaCurrent","accessibilityCurrent","ariaDescribedBy","accessibilityDescribedBy","ariaDetails","accessibilityDetails","ariaDisabled","accessibilityDisabled","ariaErrorMessage","accessibilityErrorMessage","ariaExpanded","accessibilityExpanded","ariaFlowTo","accessibilityFlowTo","ariaHasPopup","accessibilityHasPopup","ariaHidden","accessibilityHidden","ariaInvalid","accessibilityInvalid","ariaKeyShortcuts","accessibilityKeyShortcuts","ariaLabelledBy","accessibilityLabelledBy","ariaLevel","accessibilityLevel","ariaLive","accessibilityLiveRegion","ariaModal","accessibilityModal","ariaMultiline","accessibilityMultiline","ariaMultiSelectable","accessibilityMultiSelectable","ariaOrientation","accessibilityOrientation","ariaOwns","accessibilityOwns","ariaPlaceholder","accessibilityPlaceholder","ariaPosInSet","accessibilityPosInSet","ariaPressed","accessibilityPressed","ariaReadOnly","accessibilityReadOnly","ariaRequired","accessibilityRequired","ariaRoleDescription","role","accessibilityRoleDescription","ariaRowCount","accessibilityRowCount","ariaRowIndex","accessibilityRowIndex","ariaRowSpan","accessibilityRowSpan","ariaSelected","accessibilitySelected","ariaSetSize","accessibilitySetSize","ariaSort","accessibilitySort","ariaValueMax","accessibilityValueMax","ariaValueMin","accessibilityValueMin","ariaValueNow","accessibilityValueNow","ariaValueText","accessibilityValueText","dataSet","focusable","nativeID","tabIndex","_ariaActiveDescendant","_ariaAtomic","_ariaAutoComplete","_ariaBusy","_ariaChecked","_ariaColumnCount","_ariaColumnIndex","_ariaColumnSpan","_ariaControls","_ariaCurrent","_ariaDescribedBy","_ariaDetails","_ariaErrorMessage","_ariaExpanded","_ariaFlowTo","_ariaHasPopup","_ariaHidden","_ariaInvalid","_ariaKeyShortcuts","_ariaLabelledBy","_ariaLevel","_ariaLive","_ariaModal","_ariaMultiline","_ariaMultiSelectable","_ariaOrientation","_ariaOwns","_ariaPlaceholder","_ariaPosInSet","_ariaPressed","_ariaReadOnly","readOnly","_ariaRequired","required","_ariaRoleDescription","_ariaRowCount","_ariaRowIndex","_ariaRowSpan","_ariaSelected","_ariaSetSize","_ariaSort","_ariaValueMax","_ariaValueMin","_ariaValueNow","_ariaValueText","dataProp","dataName","dataValue","_StyleSheet","inlineStyle","int32Color","accessibilityRoleToWebRole","adjustable","imagebutton","keyboardkey","_role","inferredRole","roleComponents","article","banner","blockquote","complementary","contentinfo","deletion","emphasis","figure","insertion","listitem","paragraph","region","strong","accessibilityStates","level","_currentlyFocusedNode","focusTextInput","textFieldNode","unimplementedViewStyles","accessibilityProps","inert","clickProps","onAuxClick","onContextMenu","onGotPointerCapture","onLostPointerCapture","onPointerCancel","onPointerDown","onPointerEnter","onPointerMove","onPointerLeave","onPointerOut","onPointerOver","onPointerUp","focusProps","keyboardProps","onKeyDown","onKeyDownCapture","onKeyUp","onKeyUpCapture","mouseProps","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOver","onMouseOut","onMouseUp","touchProps","onTouchCancel","onTouchCancelCapture","onTouchEndCapture","onTouchMoveCapture","onTouchStartCapture","DOM_LAYOUT_HANDLER_NAME","resizeObserver","useElementLayout","observer","ResizeObserver","observe","unobserve","rtlScripts","rtlLangs","defaultLocale","LocaleContext","getLocaleDirection","cachedRTL","Intl","Locale","maximize","_unused","_lang","isLocaleRTL","LocaleProvider","useLocaleContext","usePlatformMethods","hostNode","relativeToNode","RESPONDER_ACTIVE_LONG_PRESS_START","RESPONDER_ACTIVE_PRESS_START","RESPONDER_INACTIVE_PRESS_START","freeze","getElementRole","getElementType","isActiveSignal","isButtonRole","isPressStartSignal","isValidKeyPress","isSpacebar","isButtonish","PressResponder","_eventHandlers","_isPointerTouch","_longPressDelayTimeout","_longPressDispatched","_pressDelayTimeout","_pressOutDelayTimeout","_touchState","_responderElement","_cancelPressDelayTimeout","_cancelPressOutDelayTimeout","getEventHandlers","_createEventHandlers","shouldDelay","_selectionTerminated","delayPressStart","normalizeDelay","delayLongPress","_handleLongPress","keyupHandler","isNativeInteractiveElement","isActiveElement","isSpacebarKey","onPressMove","getTouchFromResponderEvent","_touchActivatePosition","hypot","_this$_config","_this$_config2","_this$_config3","_performTransitionSideEffects","isTerminalSignal","isPrevActive","isNextActive","_activate","_deactivate","_this$_config4","_onLongPress","_this$_config5","onPressChange","onPressStart","_this$_config6","onPressEnd","delayPressEnd","delay","_event$nativeEvent","usePressEvents","pressResponderRef","pressResponder","emptyArray","normalizeIdentifier","createResponderEvent","domEvent","responderTouchHistoryStore","propagationWasStopped","domEventChangedTouches","domEventType","normalizeTouches","emulatedTouches","responderEvent","dispatchConfig","touchHistory","isStartish","isMoveish","isEndish","isCancelish","keyName","composedPathFallback","getResponderId","timestampForTouch","getTouchIdentifier","printTouch","printTouchBank","touchBank","printed","startRegistration","moveRegistration","shouldSetResponderEvents","touchstart","mousedown","touchmove","mousemove","emptyResponder","idPath","responderListenersMap","isEmulatingMouseEvents","trackedTouchCount","currentResponder","_touchHistory","numberActiveTouches","indexOfSingleActiveTouch","mostRecentTimeStamp","recordTouchTrack","topLevelType","touchRecord","touchActive","previousPageX","currentPageX","previousPageY","currentPageY","previousTimeStamp","currentTimeStamp","recordTouchMove","startPageX","startPageY","startTimeStamp","resetTouchRecord","createTouchRecord","recordTouchStart","recordTouchEnd","touchTrackToCheck","changeCurrentResponder","responder","getResponderConfig","eventListener","eventTarget","isStartEvent","noModifiers","isPrimaryPointerDown","isMoveEvent","isEndEvent","isScrollEvent","isScroll","isSelectionChangeEvent","isSelectionChange","wantsResponder","eventPaths","nodePath","eventPath","composedPath","getEventPath","getResponderPaths","wasNegotiated","currentResponderIdPath","eventIdPath","lowestCommonAncestor","pathA","pathB","pathALength","pathBLength","itemA","indexA","itemB","indexB","getLowestCommonAncestor","shouldSetCallbacks","shouldSetCallbackCaptureName","shouldSetCallbackBubbleName","callbackName","shouldSetCallback","_result","_id2","_node2","findWantsResponder","_currentResponder2","currentId","currentNode","_getResponderConfig2","_getResponderConfig3","allowTransfer","attemptTransfer","_currentResponder","_getResponderConfig","isTerminateEvent","isTextNode","Node","TEXT_NODE","hasValidSelection","isReleaseEvent","hasTargetTouches","shouldTerminate","documentEventsCapturePhase","documentEventsBubblePhase","removeNode","_currentResponder3","terminateResponder","idCounter","useResponderEvents","getInitialValue","isAttachedRef","__reactResponderSystemActive","requiresResponderSystem","setResponderId","isResponder","UNINITIALIZED","useStable","NativeEventEmitter","nativeModule","_nativeModule","_this$_nativeModule","_this$_nativeModule2","removeListeners","_this$_nativeModule3","_this$_nativeModule4","listenerCount","computeWindowedRenderLimits","maxToRenderPerBatch","windowSize","getFrameMetricsApprox","scrollMetrics","velocity","visibleLength","_scrollMetrics$zoomSc","zoomScale","visibleBegin","visibleEnd","overscanLength","fillPreference","overscanBegin","overscanEnd","_elementsThatOverlapO","offsets","getFrameMetrics","offsetIndex","currentOffset","scaledOffsetStart","scaledOffsetEnd","elementsThatOverlapOffsets","overscanFirst","overscanLast","visible","newCellCount","newRangeCount","maxNewCells","firstWillAddMore","firstShouldIncrement","lastWillAddMore","lastShouldIncrement","_delay","_callback","dispose","_taskHandle","schedule","CellRenderMask","numCells","_numCells","_regions","isSpacer","enumerateRegions","addCells","_this$_findRegion","_findRegion","firstIntersect","firstIntersectIdx","_this$_findRegion2","lastIntersect","lastIntersectIdx","newLeadRegion","newTailRegion","newMainRegion","replacementRegions","numRegionsToDelete","equals","cellIdx","firstIdx","lastIdx","middleIdx","middleRegion","ChildListCollection","_cellKeyToChildren","_childrenToCellKey","_this$_cellKeyToChild","cellLists","_step2","listSet","_iterator2","forEachInCell","_this$_cellKeyToChild2","_step3","_iterator3","anyInCell","_this$_cellKeyToChild3","_step4","_iterator4","Info","any_blank_count","any_blank_ms","any_blank_speed_sum","mostly_blank_count","mostly_blank_ms","pixels_blank","pixels_sampled","pixels_scrolled","total_time_spent","sample_count","_listeners","_minSampleCount","_sampleRate","setSampleRate","sampleRate","setMinSampleCount","minSampleCount","_anyBlankStartTime","_info","_mostlyBlankStartTime","_samplesStartTime","_getFrameMetrics","_resetData","activate","deactivateAndFlush","computeBlankness","cellsAroundViewport","dOffset","scrollSpeed","blankTop","firstFrame","inLayout","blankBottom","lastFrame","bottomEdge","blankness","StateSafePureComponent","_inAsyncStateUpdate","_installSetStateHooks","partialState","that","_isViewable","viewAreaMode","viewablePercentThreshold","viewportHeight","itemLength","_isEntirelyVisible","pixels","visibleHeight","_getPixelsVisible","viewAreaCoveragePercentThreshold","_hasInteracted","_timers","_viewableIndices","_viewableItems","computeViewableItems","scrollOffset","renderRange","itemVisiblePercentThreshold","viewableIndices","firstVisible","onUpdate","createViewToken","waitForInteraction","minimumViewTime","_onUpdateSync","resetViewableIndices","viewableIndicesToCheck","prevItems","nextItems","_step$value","_step2$value","_viewable","isViewable","VirtualizedListContext","VirtualizedListContextProvider","getScrollMetrics","getOutermostParentListRef","registerAsNestedChild","unregisterAsNestedChild","VirtualizedListCellContextProvider","currContext","CellRenderer","_separators","onUpdateSeparators","_this$props3","_onLayout","onCellLayout","updateSeparatorProps","onUnmount","_renderElement","_this$props4","CellRendererComponent","inversionStyle","onCellFocusCapture","itemSeparator","cellStyle","rowReverse","columnReverse","onFocusCapture","_usedIndexForKey","_keylessItemComponentName","horizontalOrDefault","maxToRenderPerBatchOrDefault","onEndReachedThresholdOrDefault","onEndReachedThreshold","getScrollingThreshold","windowSizeOrDefault","veryLast","_footerLength","_scrollMetrics","_scrollRef","getItemLayout","onScrollToIndexFailed","viewPosition","_highestMeasuredFrameIndex","averageItemLength","_averageCellLength","highestMeasuredFrameIndex","_getOffsetApprox","_nestedChildLists","childList","_viewabilityTuples","viewabilityHelper","_updateViewableItems","_getCellKey","_this$context","hasMore","_hasMore","_this$props$updateCel","_getScrollMetrics","_getOutermostParentListRef","_isNestedWithSameOrientation","_registerAsNestedChild","_unregisterAsNestedChild","_onUpdateSeparators","_cellRefs","_getSpacerKey","isVertical","_frames","_hasTriggeredInitialScrollToIndex","_hasWarned","_headerLength","_hiPriInProgress","_indicesToKeys","_lastFocusedCellKey","_offsetFromParentVirtualizedList","_prevParentOffset","contentLength","dt","_sentStartForContentLength","_sentEndForContentLength","_totalCellLength","_totalCellsMeasured","_captureScrollRef","_defaultRenderScrollComponent","_props$refreshing","RefreshControl","_onCellLayout","_selectOffset","_selectLength","_scheduleCellsToRenderUpdate","_triggerRemeasureForChildListsInCell","_computeBlankness","_onCellUnmount","measureLayoutRelativeToContainingList","_maybeCallOnEdgeReached","_onLayoutEmpty","_onLayoutFooter","_getFooterCellKey","_onLayoutHeader","_onContentSizeChange","initialScrollIndex","_convertParentScrollMetrics","_onScroll","_this$_convertParentS","perf","prevDt","_fillRateHelper","_onScrollBeginDrag","_onScrollEndDrag","_onMomentumScrollBegin","_onMomentumScrollEnd","_updateCellsToRender","_adjustCellsAroundViewport","renderMask","_createRenderMask","_getNonViewportRenderRegions","_createViewToken","frameMetrics","remainder","focusedCellIndex","heightOfCellsBeforeFocused","heightOfCellsAfterFocused","_updateCellsToRenderBatcher","updateCellsBatchingPeriod","initialRenderRegion","_initialRenderRegion","invertedWheelEventHandler","scrollLength","clientLength","isEventTargetScrollable","delta","leftoverDelta","targetDelta","nextScrollLeft","nextScrollTop","__isNative","additionalRegions","_i2","_allRegions","initialRegion","stickyIndicesSet","_ensureClosestStickyHeader","_props$initialScrollI","initialNumToRender","firstCellIndex","stickyOffset","newCellsAroundViewport","_this$_scrollMetrics","distanceFromEnd","_constrainToItemCount","disableVirtualization","renderAhead","childIdx","_findFirstChildWithMore","cellKeyForIndex","setupWebWheelHandler","teardownWebWheelHandler","constrainedCells","_pushCells","stickyIndicesFromProps","debug","shouldListenForLayout","_onCellFocusCapture","nestedContext","_this$props5","ListEmptyComponent","ListFooterComponent","_this$props6","horizontallyInverted","verticallyInverted","_element","ListHeaderComponentStyle","_element2","spacerKey","renderRegions","lastSpacer","predicate","findLastWhere","firstMetrics","lastMetrics","spacerSize","_element3","ListFooterComponentStyle","scrollProps","invertStickyHeaders","renderScrollComponent","_renderDebugOverlay","_this$props7","hiPriInProgress","framesInLayout","windowTop","frameLast","windowLen","visTop","visLen","debugOverlayBase","debugOverlay","debugOverlayFrame","debugOverlayFrameLast","debugOverlayFrameVis","_this$props8","onStartReached","onStartReachedThreshold","onEndReached","_this$_scrollMetrics2","distanceFromStart","isWithinStartThreshold","isWithinEndThreshold","_this$state$cellsArou","_this$_scrollMetrics3","hiPri","onStartReachedThresholdOrDefault","distTop","distBottom","_registry","registrations","registry","allocate","_arr","hue2rgb","hslToRgb","NUMBER","PERCENTAGE","callWithSlashSeparator","commaSeparatedCall","cachedMatchers","parse255","int","parse360","parse1","parsePercentage","matchers","hsla","hwb","hex3","hex4","hex6","hex8","colorFromKeyword","normalizeKeyword","hwbToRgb","jsxProd","maybeKey","ReactNoopUpdateQueue","isMounted","ComponentDummy","PureComponent","forceUpdate","pureComponentPrototype","ReactElement","refProp","isValidElement","userProvidedKeyEscapeRegex","getElementKey","escaperLookup","mapIntoArray","escapedPrefix","nameSoFar","oldElement","invokeCallback","nextNamePrefix","resolveThenable","mapChildren","func","lazyInitializer","_status","moduleObject","Children","forEachFunc","forEachContext","toArray","only","Activity","Profiler","StrictMode","Suspense","__COMPILER_RUNTIME","cloneElement","childArray","childrenLength","createRef","unstable_useCacheRefresh","Context","heap","parentIndex","peek","halfLength","leftIndex","rightIndex","sortIndex","localPerformance","localDate","initialTime","taskQueue","timerQueue","taskIdCounter","currentTask","currentPriorityLevel","isPerformingWork","isHostCallbackScheduled","isHostTimeoutScheduled","needsPaint","localSetTimeout","localClearTimeout","localSetImmediate","setImmediate","advanceTimers","handleTimeout","isMessageLoopRunning","schedulePerformWorkUntilDeadline","requestHostTimeout","taskTimeoutID","frameInterval","shouldYieldToHost","performWorkUntilDeadline","hasMoreWork","previousPriorityLevel","priorityLevel","continuationCallback","MessageChannel","port2","port1","unstable_Profiling","unstable_forceFrameRate","fps","unstable_next","eventHandler","unstable_runWithPriority","timeout","unstable_wrapCallback","parentPriorityLevel","createStyleq","disableCache","disableMix","definedProperties","nextCache","possibleStyle","classNameChunk","cacheEntry","definedPropertiesChunk","weakMap","subStyle","_prop","markerProp","compiledStyleIndex","_cachedStyles","_compiledStyle","compileStyle","cachedStyles","copyComponentProperties","UniwindComponent","nativeEventEmitter","RN$Bridgeless","__nativeAnimatedNodeTagCount","__nativeAnimationIdCount","waitingForQueuedOperations","queueOperations","queueAndExecuteBatchedOperations","flushQueueTimeout","nativeOps","API","saveValueCallback","queueOperation","setWaitingForIdentifier","unsetWaitingForIdentifier","disableQueue","clearImmediate","flushQueue","createAnimatedNode","updateAnimatedNodeConfig","startListeningToAnimatedNodeValue","stopListeningToAnimatedNodeValue","connectAnimatedNodes","parentTag","childTag","disconnectAnimatedNodes","startAnimatingNode","animationId","endCallback","stopAnimation","setAnimatedNodeValue","setAnimatedNodeOffset","flattenAnimatedNodeOffset","extractAnimatedNodeOffset","connectAnimatedNodeToView","viewTag","disconnectAnimatedNodeFromView","restoreDefaultValues","dropAnimatedNode","addAnimatedEventToView","eventMapping","removeAnimatedEventFromView","animatedNodeTag","SUPPORTED_COLOR_STYLES","SUPPORTED_STYLES","translateX","translateY","SUPPORTED_TRANSFORMS","rotateX","rotateY","rotateZ","perspective","SUPPORTED_INTERPOLATION_PARAMS","extrapolate","extrapolateRight","extrapolateLeft","isSupportedStyleProp","isSupportedTransformProp","isSupportedInterpolationParam","param","generateNewAnimationId","_warnedMissingNativeAnimated","shouldUseNativeDriver","isSupportedColorStyleProp","addWhitelistedStyleProp","addWhitelistedTransformProp","addWhitelistedInterpolationParam","validateStyles","_key2","validateTransform","configs","validateInterpolation","_key3","generateNewNodeTag","assertNativeAnimatedModule","transformDataType","NativeAnimatedAPI","NativeAnimatedHelper","_uniqueId","__attach","__detach","__nativeTag","__getValue","__getAnimatedValue","__addChild","__removeChild","__getChildren","__makeNative","platformConfig","_platformConfig","hasListeners","_startListeningToNativeValueUpdates","_stopListeningForNativeValueUpdates","__nativeAnimatedValueListener","__shouldUpdateListenersForNewNativeTag","__getNativeTag","__onAnimatedValueUpdateReceived","__callListeners","_this$__nativeTag","nativeTag","__getNativeConfig","toJSON","__getPlatformConfig","__setPlatformConfig","_children","createInterpolation","stringShapeRegex","checkPattern","colorToRgba","outputRanges","interpolations","shouldRound","createInterpolationFromStringOutputRange","findRange","inputMin","inputMax","outputMin","outputMax","AnimatedInterpolation","_parent","_interpolation","parentValue","__transformDataType","__createInterpolation","_startingValue","_offset","_animation","_updateValue","setOffset","flattenOffset","extractOffset","resetAnimation","animate","__isInteraction","previousAnimation","_tracking","tracking","animatedStyles","findAnimatedStyles","animatedStyle","attachNativeEvent","viewRef","argMapping","eventMappings","traverse","nativeEventPath","animatedValueTag","detach","AnimatedEvent","_argMapping","__addListener","_callListeners","_attachedEvent","__removeListener","__getHandler","_len2","recMapping","recEvt","mappingKey","_len3","_key4","transforms","_transforms","transConfigs","flattenStyle","createAnimatedStyle","inputStyle","_inputStyle","_style","_walkStyleAndGetValues","updatedStyle","_walkStyleAndGetAnimatedValues","styleConfig","styleKey","_animatedView","__disconnectAnimatedView","__connectAnimatedView","setNativeView","animatedView","nativeViewTag","__restoreDefaultValues","propsConfig","reduceAnimatedProps","createAnimatedComponent","_useAnimatedProps","scheduleUpdate","onUpdateRef","prevNodeRef","isUnmountingRef","prevNode","useAnimatedPropsLifecycle","cleanupRef","refEffect","_events","_events$_i","_propName","callbackRef","useAnimatedProps","reducedProps","_refs","passthroughAnimatedPropExplicitValues","passthroughStyle","passthroughProps","mergedStyle","_min","_max","_lastValue","_warnedAboutDivideByZero","modulus","_modulus","animationClass","animationConfig","_animationClass","_animationConfig","_useNativeDriver","__getNativeAnimationConfig","valueIn","jointCallback","getLayout","getTranslateTransform","startNativeAnimationNextId","fromValue","onEnd","animatedValue","__nativeId","__debouncedOnEnd","__onEnd","__startNativeAnimation","startNativeAnimationWaitId","_config$deceleration","_config$isInteraction","_config$iterations","_deceleration","deceleration","_velocity","isInteraction","__iterations","__active","_fromValue","_onUpdate","_startTime","_animationFrame","requestAnimationFrame","cancelAnimationFrame","stiffnessFromOrigamiValue","oValue","dampingFromOrigamiValue","tension","friction","stiffness","damping","speed","projectNormal","bouncyTension","bouncyFriction","linearInterpolation","b3Friction2","b3Friction3","SpringAnimation","_config$overshootClam","_config$restDisplacem","_config$restSpeedThre","_config$velocity","_config$velocity2","_config$delay","_config$stiffness","_config$damping","_config$mass","_overshootClamping","overshootClamping","_restDisplacementThreshold","restDisplacementThreshold","_restSpeedThreshold","restSpeedThreshold","_initialVelocity","_lastVelocity","_toValue","mass","_stiffness","_damping","_mass","_config$bounciness","_config$speed","springConfig","SpringConfig","_config$tension","_config$friction","_springConfig","_this$_initialVelocit","initialVelocity","_startPosition","_lastPosition","_lastTime","_frameTime","internalState","getInternalState","lastPosition","lastVelocity","lastTime","_timeout","deltaTime","v0","zeta","omega0","omega1","x0","envelope","_envelope","isOvershooting","isVelocity","isDisplacement","_easeInOut","_config$easing","_config$duration","_easing","_duration","frames","numFrames","defaultColor","isRgbaValue","AnimatedColor","isRgbaAnimatedValue","rgbaAnimatedValue","_processColor","processedColor","initColor","nativeColor","_processColor2","shouldUpdateNodeConfig","rgbaValue","_nativeTag","_combineCallbacks","onComplete","maybeVectorAnim","anim","configX","configY","_config$key","parallel","stopTogether","configR","configG","configB","configA","_config$_key","aR","aG","_start2","configuration","singleConfig","_startNativeLoop","_isUsingNativeDriver","sequence","animations","doneCount","hasEnded","endResult","ValueXY","Color","Interpolation","decay","_start3","spring","diffClamp","stagger","_temp","_ref$iterations","_ref$resetBeforeItera","resetBeforeIteration","isFinished","iterationsSoFar","restart","animatedEvent","forkEvent","unforkEvent","Event","inAnimationCallback","mockAnimationStart","guardedCallback","emptyAnimation","mockCompositeAnimation","anyValue","AnimatedImplementation","AnimatedMock","hasSingleColumn","columnWrapperClassName","contentContainerClassName","ListFooterComponentClassName","ListHeaderComponentClassName","tintColorClassName","styleReset","canUsePassiveEvents","supportsPassiveEvents","getOptions","compatListener","previousModality","previousActiveModality","activeModality","modality","KEYBOARD","MOUSE","TOUCH","CONTEXTMENU","MOUSEDOWN","MOUSEMOVE","MOUSEUP","POINTERDOWN","POINTERMOVE","SCROLL","SELECTIONCHANGE","TOUCHCANCEL","TOUCHMOVE","TOUCHSTART","bubbleOptions","captureOptions","restoreModality","callListeners","onPointerish","PointerEvent","visibilityState","useEvent","targetListeners","removeTargetListener","lockEventType","unlockEventType","dispatchCustomEvent","createEvent","_ref$bubbles","_ref$cancelable","initCustomEvent","getPointerType","delayPressIn","delayPressOut","onHoverIn","onHoverOut","onPressIn","onPressOut","testOnly_hovered","testOnly_pressed","_useForceableState","useForceableState","hovered","setHovered","_useForceableState2","focused","setFocused","_useForceableState3","pressed","setPressed","pressConfig","pressEventHandlers","onContextMenuPress","onKeyDownPress","targetRef","onHoverStart","onHoverChange","onHoverUpdate","onHoverEnd","canUsePE","addMoveListener","addEnterListener","addLeaveListener","addLockListener","addUnlockListener","hoverEnd","leaveListener","moveListener","hoverStart","lockEvent","useHover","_tabIndex","interactionState","blurHandler","focusHandler","contextMenuHandler","keyDownHandler","forced","MemoedPressable","generateDataSet","CSS_UNIT_RE","thumbDefaultBoxShadow","thumbFocusedBoxShadow","defaultDisabledTrackColor","defaultDisabledThumbColor","Switch","activeThumbColor","activeTrackColor","_props$disabled","onValueChange","_props$style","thumbColor","trackColor","_props$value","thumbRef","handleFocusState","_StyleSheet$flatten","styleHeight","styleWidth","trackBorderRadius","trackCurrentColor","true","false","thumbCurrentColor","thumbHeight","thumbWidth","rootStyle","cursorDefault","disabledTrackColor","disabledThumbColor","trackStyle","thumbStyle","thumb","thumbActive","nativeControl","cursorInherit","forcedColorAdjust","transitionDuration","trackColorOn","useUniwindAccent","trackColorOnClassName","trackColorOff","trackColorOffClassName","thumbColorClassName","setSelection","isSelectionStale","forwardedProps","autoComplete","maxLength","placeholder","spellCheck","focusTimeout","TextInput","_inputMode","_props$autoCapitalize","autoCompleteType","_props$autoCorrect","blurOnSubmit","caretHidden","clearTextOnFocus","editable","enterKeyHint","inputMode","keyboardType","_props$multiline","onChangeText","onKeyPress","onSelectionChange","onSubmitEditing","placeholderTextColor","_props$readOnly","returnKeyType","_props$secureTextEntr","secureTextEntry","selectTextOnFocus","showSoftInputOnFocus","prevSelection","prevSecureTextEntry","handleContentSizeChange","newHeight","newWidth","imperativeRef","isFocused","useLocale","shouldBlurOnSubmit","isEventComposing","onSelect","_e$target","_selection","textinput$raw","virtualkeyboardpolicy","State","MozAppearance","WebkitAppearance","resize","caretColor","placeholderTextColorClassName","reactRoot","unmountComponentAtNode","rootTag","isScreenReaderEnabled","prefersReducedMotionMedia","handlers","AccessibilityInfo","isReduceMotionEnabled","setAccessibilityFocus","reactTag","announceForAccessibility","announcement","RootTagContext","AppContainer","WrapperComponent","innerView","appContainer","wrapperComponentProvider","runnables","componentProviderInstrumentationHook","AppRegistry","getAppKeys","getApplication","appKey","appParameters","registerComponent","componentProvider","RootComponent","initialProps","getStyleElement","renderApplication","renderFn","registerConfig","registerRunnable","runApplication","setComponentProviderInstrumentationHook","setWrapperComponentProvider","unmountApplicationComponentAtRootTag","isPrefixed","EVENT_TYPES","VISIBILITY_CHANGE_EVENT","VISIBILITY_STATE_PROPERTY","AppStates","changeEmitter","AppState","isAvailable","clipboardAvailable","Clipboard","queryCommandSupported","getString","setString","selectNodeContents","configureNext","Presets","easeInEaseOut","springDamping","Types","easeIn","easeOut","keyboard","Properties","scaleXY","checkConfig","initialURL","_eventCallbacks","_dispatchEvent","filteredCallbacks","canOpenURL","getInitialURL","openURL","urlToOpen","_validateURL","TouchHistoryMath","centroidDimension","touchesChangedAfter","isXAxis","ofCurrent","oneTouchData","touchTrack","noCentroid","currentCentroidXOfTouchesChangedAfter","currentCentroidYOfTouchesChangedAfter","previousCentroidXOfTouchesChangedAfter","previousCentroidYOfTouchesChangedAfter","currentCentroidX","currentCentroidY","PanResponder","_initializeGestureState","gestureState","moveX","moveY","y0","dx","dy","vx","vy","_accountsForMovesUpTo","_updateGestureStateOnMove","movedAfter","prevX","prevY","nextDX","nextDY","shouldCancelClick","stateID","panHandlers","onStartShouldSetPanResponder","onMoveShouldSetPanResponder","onStartShouldSetPanResponderCapture","onMoveShouldSetPanResponderCapture","clearInteractionTimeout","onPanResponderGrant","onShouldBlockNativeResponder","onPanResponderReject","onPanResponderRelease","setInteractionTimeout","onPanResponderStart","onPanResponderMove","onPanResponderEnd","onPanResponderTerminate","onPanResponderTerminationRequest","onClickCapture","getInteractionHandle","sharedAction","dismissedAction","vibrate","CheckBox","fakeControl","fakeControlChecked","fakeControlDisabled","fakeControlCheckedAndDisabled","Picker","selectedValue","itemStyle","selectedIndex","Item","ProgressBar","_props$color","_props$indeterminate","indeterminate","_props$progress","_props$trackColor","percentageProgress","animationDuration","animationTimingFunction","YellowBox","UnimplementedView","ignoreWarnings","ignoreLogs","ignoreAllLogs","uninstall","install","useColorScheme","Appearance","setColorScheme","useWindowDimensions","dims","setDims","handleChange","createSvgCircle","ActivityIndicator","_props$animating","animating","_props$hidesWhenStopp","hidesWhenStopped","_props$size","indicatorSizes","animationPause","animationPlayState","small","large","colorClassName","TouchableOpacity","activeOpacity","setDuration","opacityOverride","setOpacityOverride","setOpacityTo","setOpacityActive","setOpacityInactive","isGrant","actionable","MemoedTouchableOpacity","buttonDisabled","textDisabled","textTransform","ImageBackground","imageStyle","imageRef","imageClassName","KeyboardAvoidingView","relativeKeyboardHeight","keyboardFrame","keyboardY","keyboardVerticalOffset","onKeyboardChange","elementRef","getAnimationStyle","animationType","animatedSlideInStyles","animatedSlideOutStyles","animatedFadeInStyles","animatedFadeOutStyles","animatedIn","ANIMATION_DURATION","animatedOut","fadeIn","fadeOut","slideIn","slideOut","onDismiss","onShow","isRendering","setIsRendering","wasVisible","isAnimated","animationEndCallback","onAnimationEnd","ModalContent","onRequestClose","transparent","closeOnEscape","modal","modalTransparent","modalOpaque","FocusBracket","focusBracket","attemptFocus","focusFirstDescendant","childNodes","focusLastDescendant","trapElementRef","focusRef","trapFocusInProgress","lastFocusedElement","trapFocus","hasFocused","lastFocusedElementOutsideTrap","outlineStyle","uniqueModalIdentifier","activeModalStack","activeModalListeners","notifyActiveModalListeners","activeModalId","modalId","removeActiveModal","_props$visible","setIsActive","onDismissCallback","onShowCallback","addActiveModal","cssFunction","SafeAreaView","createExtraStyles","underlayColor","underlay","hasPressHandler","TouchableHighlight","onHideUnderlay","onShowUnderlay","extraStyles","setExtraStyles","showUnderlay","hideUnderlay","MemoedTouchableHighlight","underlayColorClassName","accessibilityState","accessibilityValue","TouchableWithoutFeedback","elementProps","MemoedTouchableWithoutFeedback","getVariableValue","UNSPECIFIED_THEME","constants","reactNativeVersion","minor","_themes","Light","prevTheme","onThemeChange","notify","Theme","themes","hasAdaptiveThemes","currentTheme","prevHasAdaptiveThemes","isAdaptiveTheme","AdaptiveThemes","updateCSSVariables","cssVariables","updateInsets","insets","getCSSVariable","variableName","uniwindContext","name2","scopedTheme","__reinit","variables","uniwindRules","getUniwindDynamicCSSRules","varName","varValue","existingRules","Variables","generateStyleSheetCallback","oldThemes","styleElement","addClassNameToRoot","toRNWClassName","tailwind","accentColor","UniwindListener","ColorScheme","Orientation","Insets","FontScale","Rtl","dep","notifyAll","listenerSet","wrappedListeners","wrappedListener","once","CSSListener","activeRules","classNameMediaQueryListeners","registeredRulesMediaQueries","processedStyleSheets","pendingInitialization","MutationObserver","mutations","mutation","scheduleInitialization","initialize","subtree","attributeFilter","subscribeToClassName","classNames","disposables","mediaQuery","disposeThemeListener","disposable","cancelPendingInitialization","pruneStaleRules","activeSheets","styleSheets","parentStyleSheet","addMediaQueriesDeep","isStyleRule","isMediaRule","isSupportsRule","collectParentMediaQueries","parentRule","mediaQueries","addMediaQuery","conditionText","CSSRuleList","parsedClassName","cachedMediaQueryList","toggleRule","mediaQueryList","isRuleLive","mqList","formatColor","parsedColor","parseCSSValue","dummyParent","dummy","getWebStyles","componentProps","computedStyles","extractedStyles","safeSelector","getPropertyValue","getActiveStylesForClass","getWebVariable","UniwindContext","emptyState","useResolveClassNames","recreate","StyleDependency","StyleDependency2","ColorScheme2","DefaultBufferLength","nextPropID","Range","NodeProp","perNode","RangeError","NodeType","closedBy","openedBy","isolate","contextHash","lookAhead","mounted","MountedTree","overlay","noProps","define","spec","skipped","isTop","isAnonymous","direct","found","NodeSet","newTypes","CachedNode","CachedInnerNode","IterMode","Tree","positions","TreeCursor","cursorAt","pos","moveTo","_tree","TreeNode","resolveNode","resolveInner","resolveStack","layers","scan","mount","iterStack","stackIterator","iterate","enter","leave","anon","IncludeAnonymous","entered","propValues","balance","balanceRange","makeTree","nodeSet","maxBufferLength","reused","minRepeatType","FlatBufferCursor","takeNode","parentStart","minPos","inRepeat","lookAheadAtStart","contextAtStart","startPos","fork","skip","minStart","nodeSize","localSkipped","nodeStart","findBufferSize","Uint16Array","endPos","copyToBuffer","TreeBuffer","localChildren","localPositions","localInRepeat","lastEnd","makeRepeatLeaf","takeFlatNode","make","lookAheadProp","lastI","makeBalanced","nodeCount","stopAt","bufferStart","startIndex","topID","buildTree","empty","childString","findChild","checkSide","startI","endI","copy","overlays","IgnoreOverlays","BaseNode","matchContext","matchNodeContext","enterUnfinishedNodesBefore","childBefore","prevSibling","nextChild","ExcludeBuffers","BufferNode","BufferContext","hasChild","IgnoreMounts","childAfter","rPos","nextSignificantParent","toTree","externalSibling","heads","newHeads","StackIterator","bufferNode","yieldNode","yieldBuf","yield","enterChild","atLastNode","move","mustLeave","nodeSizeCache","balanceType","mkTop","mkTree","maxChild","groupFrom","groupStart","groupSize","nextSize","TreeFragment","openStart","openEnd","addTree","fragments","applyChanges","minGap","fI","nextF","cI","off","nextC","nextPos","fromA","cut","fFrom","fTo","toA","toB","StringInput","lineChunks","InnerParse","checkRanges","ActiveOverlay","stoppedInner","MixedParse","nest","innerDone","baseTree","stoppedAt","baseParse","advance","startInner","parsedPos","fragmentCursor","FragmentCursor","covered","isCovered","hasNode","frag","checkCover","materialize","oldMounts","findMounts","punchRanges","startParse","enterFragments","sliceBuf","buf","newStack","innerOffset","stackPos","targetI","StructureCursor","curTo","fragI","curFrag","nextFrag","gapFrom","gapTo","findCoverChanges","iA","iB","inA","inB","nextA","nextB","NodeWeakMap","setBuffer","getBuffer","cursorSet","cursorGet","createParse","parseMixed","nextTagID","Tag","modified","defineModifier","Modifier","nextModifierID","instances","mods","exists","powerSet","ruleNodeProp","Rule","opaque","inherit","tagHighlighter","class","tagClass","HighlightBuilder","highlighters","span","startSpan","highlightRange","inheritedClass","getStyleTags","tagCls","highlighter","highlightTags","innerHighlighters","rangeFrom","rangeTo","comment","typeName","heading","punctuation","bracket","labelName","macroName","docString","character","integer","float","bool","modifier","operatorKeyword","controlKeyword","definitionKeyword","moduleKeyword","derefOperator","arithmeticOperator","logicOperator","bitwiseOperator","compareOperator","updateOperator","definitionOperator","typeOperator","controlOperator","angleBracket","squareBracket","paren","brace","heading1","heading2","heading3","heading4","heading5","heading6","contentSeparator","quote","monospace","strikethrough","inserted","invalid","documentMeta","processingInstruction","constant","function","standard","special","classHighlighter","highlightTree","putStyle","builder","styleTags","pieces","Recover","Stack","reducePos","bufferBase","curContext","StackContext","pushState","dPrec","dynamicPrecedence","getGoto","minRepeatTerm","storeNode","reduceContext","lastBigReductionStart","bigReductionCount","lastBigReductionSize","stateFlag","baseStateID","isReduce","nextEnd","shiftContext","maxNode","useNode","updateContext","recoverByDelete","isNode","canShift","sim","SimulatedStack","stateSlot","hasAction","recoverByInsert","nextStates","forceReduce","validAction","findForcedReduction","explore","allActions","rDepth","forceAll","deadEnd","sameState","dialectEnabled","dialectID","dialect","emitContext","emitLookAhead","newCx","setLookAhead","strict","StackBufferCursor","maybeNext","decodeArray","Type","digit","CachedToken","extended","nullToken","InputStream","chunkOff","chunk2","chunk2Pos","rangeIndex","chunkPos","readNext","resolveOffset","assoc","clipPos","acceptToken","endOffset","getChunk","nextChunk","TokenGroup","readToken","tokenPrecTable","contextual","LocalTokenGroup","precTable","elseToken","precOffset","groupMask","accEnd","allows","overrides","findOffset","tableData","tableOffset","iPrev","verbose","LOG","stackIDs","Safety","Rec","cutAt","safeFrom","safeTo","trees","nextFragment","fr","nextStart","nodeAt","TokenCache","mainToken","actions","getActions","actionIndex","tokenizer","updateCachedToken","addActions","eofTerm","getMainToken","specializers","putAction","Parse","recovering","nextStackID","minStackPos","topTerm","bufferLength","stoppedTokens","newStacks","advanceStack","tok","findFinished","stackToTree","getName","runRecovery","maxRemaining","stackID","strictCx","cxHash","defaultReduce","localStack","advanceFully","pushStackDedup","restarted","tokenEnd","forceBase","fromCodePoint","Dialect","wrappers","topTerms","nodeProps","nodeID","propSpec","propSources","tokenArray","specializerSpecs","getSpecializer","dialects","dynamicPrecedences","termNames","parseDialect","loose","table","groupTag","terminal","slot","flag","deflt","external","contextTracker","wrap","hasWrappers","prec","ContextTracker","ExternalTokenizer","node_worker_1","u8","u16","u32","fleb","fdeb","clim","freb","eb","fl","revfl","fd","revfd","rev","hMap","cd","mb","co","le","rvb","r_1","flt","fdt","flm","flrm","fdm","fdrm","bits16","shft","slc","BYTES_PER_ELEMENT","subarray","FlateErrorCode","UnexpectedEOF","InvalidBlockType","InvalidLengthLiteral","InvalidDistance","StreamFinished","NoStreamHandler","InvalidHeader","NoCallback","InvalidUTF8","ExtraFieldTooLong","InvalidDate","FilenameTooLong","StreamFinishing","InvalidZipData","UnknownCompressionMethod","ec","ind","nt","captureStackTrace","inflt","dat","sl","noBuf","noSt","cbuf","bl","nbuf","final","bt","lm","dm","lbt","dbt","tbts","hLit","hcLen","tl","clt","clb","clbmsk","clm","lt","lms","dms","lpos","sym","dsym","wbits","wbits16","hTree","i0","i1","i2","maxSym","tr","mbt","ln","lft","cst","i2_1","i2_2","i2_3","lc","cli","cln","clen","cf","wfblk","wblk","syms","df","li","bs","dlt","mlb","ddt","mdb","lclt","nlc","_d","lcdt","ndc","lcfreq","_e","lct","mlcb","nlcc","ll","dl","flen","ftlen","dtlen","llm","lcts","clct","dst","deo","dflt","lvl","plvl","pre","post","lst","opt","msk_1","bs1_1","bs2_1","hsh","lc_1","wi","hv","imod","pimod","rem","ch_1","dif","maxn","maxd","ml","nl","mmd","md","ti","lin","din","crct","Int32Array","crc","adler","dopt","mem","mrg","wcln","fnStr","td","ks","st_1","spInd","wrkr","td_1","cbfs","bInflt","inflateSync","pbf","gu8","bDflt","deflateSync","gze","gzh","gzhl","wbytes","guze","gzs","gzl","zle","zlh","zule","zlv","cbify","consume","astrm","strm","ondata","astrmify","b2","b4","b8","mtime","flg","zs","lv","AsyncCmpStrm","Deflate","AsyncDeflate","deflate","Inflate","bts","AsyncInflate","inflate","Gzip","Compress","AsyncGzip","AsyncCompress","compress","compressSync","Gunzip","AsyncGunzip","Zlib","AsyncZlib","zlibSync","zlib","Unzlib","AsyncUnzlib","unzlib","unzlibSync","Decompress","Z","_this_1","AsyncDecompress","decompress","decompressSync","fltn","te","tds","dutf8","DecodeUTF8","np","EncodeUTF8","strToU8","latin1","ar_1","ar","ai","strFromU8","dbf","slzh","zh","fnl","es","z64e","sc","su","exfl","wzh","col","exl","os","compression","attrs","exf","wzf","ZipPassThrough","ZipDeflate","AsyncZipDeflate","Zip","fl_1","com","hl_1","chks_1","pAll_1","chks_2","chk","tr_1","ind_1","uf_1","nxt","cl_1","dd","zip","tot","slft","tAll","cbd","mt","cbf","oe","cdl","badd","loc","_loop_1","cbl","zipSync","UnzipPassThrough","UnzipInflate","AsyncUnzipInflate","sz","Unzip","onfile","toAdd","oc","_loop_2","sig","this_1","bf","cmp_1","chks_3","d_1","sc_1","su_1","fn_1","file_1","ctr","chks_4","originalSize","register","decoder","unzip","ze","fltr","_loop_3","c_1","no","infl","unzipSync","c_2","ch2","ed","$e$","store$4","DEFAULT_CONFIG","abortPipeEarly","getGlobalConfig","config$1","store$3","store$2","store$1","textEncoder","segmenter","getGlobalMessage","getSchemaMessage","getSpecificMessage","reference","_stringify","_addIssue","expects","received","requirement","isSchema","message$1","typed","_cloneDataset","_formatCase","capFirst","capRest","firstWord","prevPrev","firstCode","charLen","charLower","_getByteCount","_getGraphemeCount","Segmenter","_getLastMetadata","nestedSchemas","pipe","nestedSchema","_standardCache","_getStandardProps","vendor","value$1","store","_getWordCount","locales","granularity","isWordLike","NON_DIGIT_REGEX","_isLuhnAlgo","number$1","length$1","bit","_isValidObjectKey","object$1","_joinExpects","values$1","getDotPath","ValiError","BASE64_REGEX","BIC_REGEX","CUID2_REGEX","DECIMAL_REGEX","DIGITS_REGEX","DOMAIN_REGEX","EMAIL_REGEX","EMOJI_REGEX","HEXADECIMAL_REGEX","HEX_COLOR_REGEX","IMEI_REGEX","IPV4_REGEX","IPV6_REGEX","IP_REGEX","ISO_DATE_REGEX","ISO_DATE_TIME_REGEX","ISO_DATE_TIME_SECOND_REGEX","ISO_TIME_REGEX","ISO_TIME_SECOND_REGEX","ISO_TIMESTAMP_REGEX","ISO_WEEK_REGEX","JWS_COMPACT_REGEX","ISRC_REGEX","MAC48_REGEX","MAC64_REGEX","MAC_REGEX","NANO_ID_REGEX","OCTAL_REGEX","RFC_EMAIL_REGEX","SLUG_REGEX","ULID_REGEX","UUID_REGEX","CREDIT_CARD_REGEX","SANITIZE_REGEX","PROVIDER_REGEX_LIST","HASH_LENGTHS","md4","md5","sha1","sha256","sha384","sha512","ripemd128","ripemd160","tiger128","tiger160","tiger192","crc32","crc32b","adler32","ISBN_SEPARATOR_REGEX","ISBN_10_DETECTION_REGEX","ISBN_13_DETECTION_REGEX","TRUTHY","FALSY","_isPartiallyTyped","paths","bound","ABORT_EARLY_CONFIG","_LruCache","maxAge","hasMaxAge","refIds","getFallback","getDefault","enum_","enum__","enum","function_","_merge","value1","value2","nonOptional","wrapped","nonOptionalAsync","null_","default_","optionalAsync","undefined_","_subIssues","datasets","void_","parseAsync","safeParseAsync","args_","argsDataset","argsAsync","args$1","itemDataset","pathItem","arrayAsync","itemDatasets","awaitAsync","bic","bigint","brand","bytes","cacheConfig","runConfig","outputDataset","cacheAsync","activeRuns","promise$1","checkAsync","checkItems","checkItemsAsync","requirementResults","config_","creditCard","sanitized","regex$1","cuid2","check$1","customAsync","decimal","deleteGlobalConfig","deleteGlobalMessage","deleteSchemaMessage","deleteSpecificMessage","description_","emoji","entriesFromList","entries$1","entriesFromObjects","schemas","everyItem","exactOptional","exactOptionalAsync","examples_","excludes","fallback$1","fallbackAsync","filterItems","findItem","finite","flatErrors","dotPath","nested","flavor","forward","prevIssues","pathInput","pathValue","forwardAsync","getDefaults","getDefaultsAsync","getDescription","getExamples","examples$1","depthFirstCollect","schema$1","getFallbacks","getFallbacksAsync","getMetadata","depthFirstMerge","getTitle","graphemes","gtValue","guard","hexadecimal","imei","class_","intersect","outputs","optionDataset","mergeDataset","intersectAsync","optionDatasets","ip","ipv4","ipv6","isOfKind","isOfType","isValiError","isbn","replacedInput","digits$1","_isIsbn10","_isIsbn13","isoDate","isoDateTime","isoDateTimeSecond","isoTime","isoTimeSecond","isoTimestamp","isoWeek","isrc","jwsCompact","keyof","lazyAsync","literal_","looseObject","valueSchema","valueDataset","looseObjectAsync","valueDatasets","looseTuple","looseTupleAsync","ltValue","mac","mac48","mac64","inputKey","inputValue","keyDataset","mapAsync","mapItems","maxBytes","maxEntries","maxGraphemes","maxWords","message_","metadata_","mimeType","minBytes","minEntries","minGraphemes","minLength","minSize","minValue","minWords","multipleOf","nan","nanoid","never","nonEmpty","nonNullable","nonNullableAsync","nonNullish","nonNullishAsync","notBytes","notEntries","notGraphemes","notLength","notSize","notValue","notValues","notWords","nullable","nullableAsync","nullishAsync","objectAsync","objectWithRest","objectWithRestAsync","normalDatasets","restDatasets","octal","omit","parseBoolean","normalize$1","truthyRaw","truthy","falsyRaw","falsy","config$2","parseJson","reviver","parserAsync","partialAsync","partialCheck","partialCheckAsync","pipe$1","pipeAsync","rawCheck","addIssue","rawCheckAsync","rawTransform","NEVER","rawTransformAsync","readonly","entryKey","entryValue","recordAsync","key$1","reduceItems","regex","arg2","arg3","requiredAsync","returnsDataset","returnsAsync","rfcEmail","safeInteger","safeParser","safeParserAsync","setAsync","setGlobalConfig","setGlobalMessage","setSchemaMessage","setSpecificMessage","someItem","sortItems","strictObject","strictObjectAsync","strictTuple","strictTupleAsync","stringifyJson","replacer","space","summarize","title_","toBigint","BigInt","toBoolean","toCamelCase","toDate","toKebabCase","toMaxValue","toMinValue","toPascalCase","toSnakeCase","transformAsync","trimStart","tupleAsync","tupleWithRest","tupleWithRestAsync","ulid","undefinedable","undefinedableAsync","validDataset","typedDatasets","untypedDatasets","unionAsync","unwrap","maxDiscriminatorPriority","invalidDiscriminatorKey","expectedDiscriminators","parseOptions","variant$1","allKeys","keysAreValid","currentPriority","discriminatorSchema","variantAsync","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","chunkId","promises","miniCssF","needAttach","charset","nc","onScriptComplete","doneFns","toStringTag","installedChunks","installedChunkData","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","HydrateUtils_hydratePage","PageWrapper","AiPromptContent"],"sourceRoot":""}