{"version":3,"mappings":"4wGAMO,MAAMA,EAA6D,CACxEC,SAGUD,EAA6BE,UAAYC,aAAaF,MAEhEC,cAAUE,iBCkEN,WAA0BC,GAC9B,OAAOA,EAAoBC,EAAuBD,GAAqBE,EAOzE,WAAgCF,GAC9B,MAAQG,YAAaC,IACrB,OAAO,IAAIC,IAAmDC,IAC5D,MAAMC,EAAe,IAAIC,KAInBC,EAAWT,GAAqBL,EAKhCe,EAAQD,EAASb,MACjBe,EAAOC,IAQX,MAAMhB,EAAMa,EAASb,MACrBU,EAAWO,KAAK,CACdD,UAAWZ,EAAoBJ,EAAMgB,EACrCE,QAASlB,EAAMc,IAEZJ,EAAWS,QACdR,EAAaS,IAAIb,EAASQ,KAG9BJ,SAAaS,IAAIb,EAASQ,IACnBJ,IAQX,MAAML,EAA2BD,qCCpH3B,gBAA+BgB,IAArCC,kCACUC,YAAmB,KACnBA,gBAAY,EACZA,kBAAc,EAGZC,wBAAwBd,GAChC,MAAQe,WAAUC,YAAWC,SAAQC,cAAaC,YAAWC,eAAgBP,KACzEE,EACFf,EAAWqB,MAAMH,IACRC,GAAaC,KACtBJ,GAAahB,EAAWO,KAAKU,GAC7BjB,EAAWsB,YAIff,KAAKgB,GACEV,KAAKM,YACRN,KAAKI,OAASM,EACdV,KAAKG,WAAY,GAIrBM,WACE,MAAQN,YAAWC,SAAQG,eAAgBP,KACtCO,IACHP,KAAKO,aAAc,EACnBJ,GAAaQ,MAAMjB,KAAKU,GACxBO,MAAMF,yDC6BL,MAAMG,EAAiB,IChExB,gBAA8BC,MCG9B,gBAA8BC,IAElCf,YAAsBgB,EACAC,GACpBL,MAAMI,EAAWC,GAFGhB,iBACAA,YAIfhB,SAASiC,EAAWC,EAAgB,GACzC,OAAIA,EAAQ,EACHP,MAAM3B,SAASiC,EAAOC,IAE/BlB,KAAKkB,MAAQA,EACblB,KAAKiB,MAAQA,EACbjB,KAAKe,UAAUI,MAAMnB,MACdA,MAGFoB,QAAQH,EAAUC,GACvB,OAAQA,EAAQ,GAAKlB,KAAKJ,OACxBe,MAAMS,QAAQH,EAAOC,GACrBlB,KAAKqB,SAASJ,EAAOC,GAGfI,eAAeP,EAA2BQ,EAAUL,EAAgB,GAK5E,OAAc,MAATA,GAAiBA,EAAQ,GAAgB,MAATA,GAAiBlB,KAAKkB,MAAQ,EAC1DP,MAAMW,eAAeP,EAAWQ,EAAIL,GAGtCH,EAAUI,MAAMnB,SFkCdwB,EAAQZ,gBGlEd,IAAMa,GAAb,MAAM,gBAAoCZ,IAyBxCd,YAAY2B,EAA0CC,GAA6BC,EAAoBC,KACrGlB,MAAMe,EAAqB,IAAM1B,KAAK8B,OAD2C9B,iBAf5EA,WAAgB,EAMhBA,YAAgB,EAkBhBmB,QACL,MAAQY,UAASH,aAAc5B,KAC/B,IAAIQ,EACAwB,EAEJ,MAAQA,EAASD,EAAQ,KAAOC,EAAOd,OAASU,IAC9CG,EAAQE,QACRjC,KAAK8B,MAAQE,EAAOd,QAEfV,EAAQwB,EAAOZ,QAAQY,EAAOf,MAAOe,EAAOd,WAKnD,GAAIV,EAAO,CACT,KAAQwB,EAASD,EAAQE,SACvBD,EAAOE,cAET,MAAM1B,IAlDHiB,yBAAkB,GAFdA,GAAb,GAyDM,iBAAgCX,IAGpCf,YACYgB,EACAC,EACAmB,GAAiBpB,EAAUoB,OAAS,IAE9CxB,MAAMI,EAAWC,GAJPhB,iBACAA,YACAA,aALFA,aAAkB,EAQ1BA,KAAKmC,MAAQpB,EAAUoB,MAAQA,EAG1BnD,SAASiC,EAAWC,EAAgB,GACzC,GAAIkB,OAAOC,SAASnB,GAAQ,CAC1B,IAAKlB,KAAKuB,GACR,OAAOZ,MAAM3B,SAASiC,EAAOC,GAE/BlB,KAAKsC,QAAS,EAKd,MAAMN,EAAS,IAAIL,GAAc3B,KAAKe,UAAWf,KAAKgB,MACtD,YAAKnB,IAAImC,GACFA,EAAOhD,SAASiC,EAAOC,GAI9B,OAAO7B,WAIDiC,eAAeP,EAAiCQ,EAAUL,EAAgB,GAClFlB,KAAKkB,MAAQH,EAAUe,MAAQZ,EAC/B,MAAQa,WAAYhB,EACpBgB,SAAQQ,KAAKvC,MACZ+B,EAAoCS,KAAKb,GAAcc,cACjD,EAGCC,eAAe3B,EAAiCQ,EAAUL,EAAgB,IAI1EG,SAASJ,EAAUC,GAC3B,IAAoB,IAAhBlB,KAAKsC,OACP,OAAO3B,MAAMU,SAASJ,EAAOC,sBAIHyB,EAAqBC,GACjD,OAAID,EAAEzB,QAAU0B,EAAE1B,MACZyB,EAAER,QAAUS,EAAET,MACT,EACEQ,EAAER,MAAQS,EAAET,MACd,GAEA,EAEAQ,EAAEzB,MAAQ0B,EAAE1B,MACd,GAEA,mEChHD2B,EAIX,MAJD,OAAYA,QAAgB,KAC1BA,SACAA,YACAA,eAHUA,EAAZ,IAAYA,GAIX,GAkBK,QA6BJ9C,YAA4B+C,EAAuCpC,EAA2BF,GAAlER,YAAuCA,aAA2BA,aAC5FA,KAAK+C,SAAoB,MAATD,EASlBE,QAAQC,GACN,OAAOC,GAAoBlD,KAAmCiD,GA6BhEE,GAAGC,EAAiCC,EAAmCC,GACrE,MAAQR,OAAMpC,QAAOF,SAAUR,KAC/B,MAAgB,MAAT8C,EAA0B,MAAXM,OAAW,EAAXT,EAAcjC,GAAmB,MAAToC,EAA2B,MAAZO,OAAY,EAAZE,EAAe/C,GAAwB,MAAf8C,OAAe,EAAfE,IAsCvFC,OAAOC,EAA2DlD,EAA4BC,SAC5F,OAAOkD,OAAkC,QAAvBC,EAACF,SAAsBG,eAAEnE,MACvCM,KAAKgD,QAAQU,GACb1D,KAAKmD,GAAGO,EAAsClD,EAAcC,GAUlEqD,eACE,MAAQhB,OAAMpC,QAAOF,SAAUR,KAEzB+D,EACK,MAATjB,GAEIkB,QAAGtD,GAEI,MAAToC,GAEEmB,OAAW,IAAMzD,GAEV,MAATsC,EAEEoB,IAEA,EACN,IAAKH,EAIH,MAAM,IAAII,UAAU,gCAAgCrB,KAEtD,OAAOiB,oBAgBYrD,GACnB,OAAO,IAAI0D,EAAa,IAAK1D,sBAeZ2D,GACjB,OAAO,IAAID,EAAa,SAAKxF,EAAWyF,2BAaxC,OAAOD,EAAaE,sBAWlB,YAAiCC,EAAyCtB,aAC9E,MAAQH,OAAMpC,QAAOF,SAAU+D,EAC/B,GAAoB,iBAATzB,EACT,MAAM,IAAIqB,UAAU,wCAEb,MAATrB,EAA4B,QAAbS,IAAS7D,YAAImE,cAAbZ,EAAgBvC,GAAmB,MAAToC,EAA6B,QAAdU,IAAShD,aAAKgE,cAAdvB,EAAiBzC,GAA0B,QAAjBoD,IAASnD,gBAAQgE,cAAjBxB,GA3DnEmB,uBAAuB,IAAIA,EAAa,+DChInD,YAA8BM,EAAuBC,GACzD,MAAMC,EAA8B,iBAAXD,EACzB,OAAO,IAAIE,QAAe,CAACC,EAASC,KAClC,IACI3E,EADAD,GAAY,EAEhBuE,EAAOM,UAAU,CACftF,KAAOgB,IACLN,EAASM,EACTP,GAAY,GAEdK,MAAOuE,EACPtE,SAAU,KACJN,EACF2E,EAAQ1E,GACHmD,EACLuB,EAAQH,EAAQM,cAEhBF,EAAO,IAAIG,WChBf,YAA+BR,EAAuBC,GAC1D,MAAMC,EAA8B,iBAAXD,EACzB,OAAO,IAAIE,QAAe,CAACC,EAASC,KAClC,MAAM5F,EAAa,IAAIgG,MAAkB,CACvCzF,KAAOgB,IACLoE,EAAQpE,GACRvB,EAAW+C,eAEb1B,MAAOuE,EACPtE,SAAU,KACJmE,EACFE,EAAQH,EAAQM,cAEhBF,EAAO,IAAIG,SAIjBR,EAAOM,UAAU7F,oBClDd,MAAMiG,IAAuDC,QACjEC,GACC,WACEA,EAAOtF,MACPA,KAAKuF,KAAO,0BACZvF,KAAKwF,QAAU,0BCPRC,IAAmCJ,QAC7CC,GACC,SAAsCE,GACpCF,EAAOtF,MACPA,KAAKuF,KAAO,gBACZvF,KAAKwF,QAAUA,mBCLd,MAAME,IAAmCL,QAC7CC,GACC,SAAsCE,GACpCF,EAAOtF,MACPA,KAAKuF,KAAO,gBACZvF,KAAKwF,QAAUA,+DC8Dd,MAAMG,IAAiCN,QAC3CC,GACC,SAAqCM,EAAgC,MACnEN,EAAOtF,MACPA,KAAKwF,QAAU,uBACfxF,KAAKuF,KAAO,eACZvF,KAAK4F,KAAOA,IAoNZ,YACJjB,EACAkB,GASA,MAAQC,QAAOC,OAAMC,KAAMC,EAAQC,GAAqBnF,aAAwB,MAAZ8E,IAAgBM,KAAgBC,OAAO,OAAWC,QAAY1B,GAC9H,CAAEmB,MAAOnB,GACS,iBAAXA,EACP,CAAEoB,KAAMpB,GACRA,EAEJ,GAAa,MAATmB,GAAyB,MAARC,EAEnB,MAAM,IAAI5B,UAAU,wBAGtB,OAAOmC,QAAQ,CAAC5B,EAAQvF,KAMtB,IAAIoH,GAGAC,GAGAC,GAAsB,KAGtBC,GAAO,EACX,MAAMC,GAAczF,KAClBsF,IAAoBI,QAClBzH,EACA4B,EACA,KACE,IACEwF,GAA2BrE,eAC3B2E,SACEZ,EAAO,CACLG,OACAK,aACAC,WAEF1B,UAAU7F,SACLkF,IACPlF,EAAWqB,MAAM6D,MAGrBnD,KAIJqF,GAA6B7B,EAAOM,UAClC,IAAI8B,KACF3H,EACCuB,KAEkB,MAAjB8F,OAAmBtE,cACnBwE,KAEAvH,EAAWO,KAAM+G,GAAY/F,IAE7BqF,EAAQ,GAAKY,GAAWZ,SAE1BnH,OACAA,EACA,MACwB,MAAjB4H,QAAiB,EAAjBO,GAAmBnH,SACL,MAAjB4G,OAAmBtE,cAIrBuE,GAAY,QASlBE,GAAoB,MAATb,EAAkC,iBAAVA,EAAqBA,GAASA,EAAQ/E,EAAWtC,MAASsH,KASjG,YAA6BH,GAC3B,MAAM,IAAID,GAAaC,8DC5YnB,YACJoB,EACAC,EACAC,EACAnG,GAEA,GAAImG,EACF,QAAIC,MAAYD,GAId,OAAO,YAAwBE,GAC7B,OAAQC,GAAsBL,EAAaC,EAAclG,GACtDuG,MAAMtH,KAAMoH,GACZG,QAAKC,MAAiBN,KAN3BnG,EAAYmG,EAahB,OAAInG,EACK,YAAwBqG,GAC7B,OAAQC,GAAsBL,EAAaC,GACxCK,MAAMtH,KAAMoH,GACZG,QAAKE,MAAY1G,MAAa2G,MAAU3G,KAIxC,YAAwBqG,GAG7B,MAAMO,EAAU,IAAIC,EAGpB,IAAIC,GAAgB,EACpB,OAAO,IAAI3I,IAAYC,IAErB,MAAM2I,EAAOH,EAAQ3C,UAAU7F,GAE/B,GAAI0I,EAAe,CACjBA,GAAgB,EAMhB,IAAIE,IAAU,EAGVC,IAAa,EAKjBf,EAAaK,MAEXtH,KACA,IAEKoH,EAEH,IAAIa,MACF,GAAIjB,EAAa,CAIf,MAAM3C,GAAM4D,GAAQhG,QACpB,GAAW,MAAPoC,GAIF,YAHAsD,EAAQnH,MAAM6D,IAUlBsD,EAAQjI,KAAK,EAAIuI,GAAQC,OAASD,GAAUA,GAAQ,IAGpDD,IAAa,EAMTD,IACFJ,EAAQlH,cAQZuH,IACFL,EAAQlH,WAKVsH,IAAU,EAIZ,OAAOD,KCuBP,YACJb,EACAC,EACAnG,GAEA,OAAOsG,IAAsB,EAAOJ,EAAcC,EAAgBnG,GCtB9D,YACJkG,EACAC,EACAnG,GAEA,OAAOsG,IAAsB,EAAMJ,EAAcC,EAAgBnG,wCCpGnE,MAAMoH,GAA6C,CACjDC,UAAW,IAAM,IAAItI,IACrBuI,mBAAmB,GAWf,YAAyB3D,EAA4BC,EAA+BwD,IAExF,IAAIG,EAAkC,KACtC,MAAQF,YAAWC,qBAAoB,GAAS1D,EAChD,IAAIgD,EAAUS,IAEd,MAAMrE,EAAc,IAAI7E,IAAeC,GAC9BwI,EAAQ3C,UAAU7F,IAM3B4E,SAAOwE,QAAU,OACVD,GAAcA,EAAW1I,UAC5B0I,GAAaE,QAAM,IAAM9D,GAAQM,UAAU2C,GACvCU,GACFC,EAAWzI,IAAI,IAAO8H,EAAUS,MAG7BE,GAGFvE,uCC+EH,YACJ0E,EACAC,EACAxB,GAEA,OAAIA,EACKyB,GAAoBF,EAAYC,GAAenB,QAAKC,MAAiBN,IAGvE,IAAIhI,IAAqBC,IAC9B,MAAMyJ,EAAU,IAAIC,IAAW1J,EAAWO,KAAkB,IAAbmJ,EAAEX,OAAeW,EAAE,GAAKA,GACjEC,EAAWL,EAAWG,GAC5B,SAAOjF,KAAW+E,GAAiB,IAAMA,EAAcE,EAASE,QAAYlK,mBCoL1E,YACJmK,EACAC,EACAC,EACAC,EACAnI,GAEA,IAAImG,EACAiC,EA2BJ,aACE,QAASlI,EAAQkI,GAAeH,GAAaA,EAAU/H,GAAQA,EAAQgI,EAAShI,SACxEiG,EAAejG,GAKzB,OA9ByB,IAArBmI,UAAUlB,SAIViB,eACAH,YACAC,UACA/B,iBAAiBmC,KACjBtI,aACEgI,IAIJI,EAAeJ,GACVG,MAA6B/B,MAAY+B,IAC5ChC,EAAiBmC,KACjBtI,EAAYmI,GAEZhC,EAAiBgC,MAYdV,MACJzH,EAGG,KAAMuI,QAAiBC,IAAOxI,GAG9BwI,2DCvTF,cACDC,GAEH,OCQI,cACDA,GAMH,MAAMC,KAAeC,KAAeF,GAEpC,OAAOlD,QAAQ,CAAC5B,EAAQvF,KACtB,MAAMwK,EAAY,CAACjF,KAAW+E,GACxBG,EAAgB,KACpB,IAAKzK,EAAWS,OACd,GAAI+J,EAAUzB,OAAS,EAAG,CACxB,IAAI2B,EACJ,IACEA,GAAahD,SAAyB8C,EAAU1H,eACzCoC,GAEP,YADAuF,IAQF,MAAME,EAAW,IAAIhD,KAAmB3H,OAAYP,EAAWmL,KAAMA,MACrE5K,EAAWU,IAAIgK,EAAW7E,UAAU8E,IACpCA,EAASjK,IAAI+J,QAEbzK,EAAWsB,YAKjBmJ,MD3CKI,EAAsBN,OAAeF,GAArCQ,CAA+C9F,KEGlD,WAAgB+F,EAAUlJ,GAC9B,OAAOmJ,QAAKC,OAAOC,QAAQH,GAAMlJ,GC9E7B,WAAiBsJ,EAA4CC,GACjE,MAAO,CAAC5J,EAAUyB,KAAmBkI,EAAKE,KAAKD,EAAS5J,EAAOyB,iBC2E3D,YACJuC,EACA8F,EACAF,GAEA,MAAO,IAACG,MAAOD,EAAWF,IAASzD,SAAUnC,OAAU+F,MAAOC,EAAIF,EAAWF,KAAUzD,SAAUnC,oBC1B7F,YAAgBnF,EAAeoL,EAAgB5J,GAOnD,GANa,MAAT4J,IAEFA,EAAQpL,EACRA,EAAQ,GAGNoL,GAAS,EAEX,OAAOzG,IAIT,MAAM0G,EAAMD,EAAQpL,EAEpB,OAAO,IAAIL,IACT6B,EAEK5B,IACC,IAAI0L,EAAItL,EACR,OAAOwB,EAAU/B,SAAS,WACpB6L,EAAID,GACNzL,EAAWO,KAAKmL,KAChB7K,KAAKhB,YAELG,EAAWsB,cAKhBtB,IACC,IAAI0L,EAAItL,EACR,KAAOsL,EAAID,IAAQzL,EAAWS,QAC5BT,EAAWO,KAAKmL,KAElB1L,EAAWsB,4BCzDf,YACJqK,EACAC,GAEA,OAAO,IAAI7L,IAAgCC,IACzC,MAAM6L,EAAWF,IACX/G,EAASgH,EAAkBC,GAEjCtG,OADeX,KAAS8C,OAAU9C,GAAUG,KACrCc,UAAU7F,GACV,KAGD6L,GACFA,EAAS9I,0ECFX,YAAoB+I,GACxB,OAAO3E,QAAQ,CAAC5B,EAAQvF,KAEtB,IAAI+L,EAAqB,GAGzBxG,SAAOM,UACL,IAAI8B,KACF3H,EACCuB,GAAUwK,EAAc3I,KAAK7B,GAC9B,KACEvB,EAAWO,KAAKwL,GAChB/L,EAAWsB,cAMjBwK,EAAgBjG,UACd,IAAI8B,KACF3H,EACA,KAEE,MAAMyD,EAAIsI,EACVA,EAAgB,GAChB/L,EAAWO,KAAKkD,IAElBmH,OAIG,KAELmB,EAAgB,uBCnBhB,YAAyBC,EAAoBC,EAAkC,MAGnFA,SAAmC,MAAhBA,IAAoBD,GAEhC7E,QAAQ,CAAC5B,EAAQvF,KACtB,IAAIkM,EAAiB,GACjBV,EAAQ,EAEZjG,EAAOM,UACL,IAAI8B,KACF3H,EACCuB,IACC,IAAI4K,EAAuB,KAKvBX,IAAUS,GAAsB,GAClCC,EAAQ9I,KAAK,IAIf,UAAWgJ,KAAUF,EACnBE,EAAOhJ,KAAK7B,GAMRyK,GAAcI,EAAOrD,SACvBoD,EAAe,MAANA,IAAU,GACnBA,EAAO/I,KAAKgJ,IAIhB,GAAID,EAIF,UAAWC,KAAUD,GACnBE,QAAUH,EAASE,GACnBpM,EAAWO,KAAK6L,IAItB,KAGE,UAAWA,KAAUF,EACnBlM,EAAWO,KAAK6L,GAElBpM,EAAWsB,iBAGb7B,EACA,KAEEyM,EAAU,wBCrCd,YAAwBI,KAA2BC,WACvD,MAAM3K,EAAmC,QAAvBwC,YAAamI,UAAU7H,QAAIsC,IACvCwF,EAAiD,QAAxBnI,EAACkI,EAAU,UAAalH,QAAI,KACrDoH,EAAiBF,EAAU,IAAiB7J,IAElD,OAAOyE,QAAQ,CAAC5B,EAAQvF,KAEtB,IAAI0M,GAA8D,GAG9DC,IAAgB,EAQpB,MAAMC,GAAQC,KACZ,MAAQT,UAAQzD,SAASkE,GACzBlE,GAAK5F,iBACLsJ,MAAUK,GAAeG,IACzB7M,EAAWO,KAAK6L,IAChBO,IAAiBG,MAQbA,GAAc,KAClB,GAAIJ,GAAe,CACjB,MAAM/D,GAAO,IAAIzI,KACjBF,EAAWU,IAAIiI,IAEf,MAAMkE,GAAS,CACbT,OAFkB,GAGlBzD,SAEF+D,GAActJ,KAAKyJ,OACnBpF,MAAgBkB,GAAM/G,EAAW,IAAMgL,GAAKC,IAASP,KAI1B,OAA3BE,GAAmCA,GAA0B,KAI/D/E,MAAgBzH,EAAY4B,EAAWkL,GAAaN,GAAwB,GAE5EG,IAAgB,EAGlBG,KAEA,MAAMC,GAAuB,IAAIpF,KAC/B3H,EACCuB,KAKC,MAAMyL,GAAcN,GAAeO,QACnC,UAAWJ,MAAUG,GAAa,CAEhC,MAAQZ,WAAWS,GACnBT,GAAOhJ,KAAK7B,IAEZkL,GAAiBL,GAAOrD,QAAU6D,GAAKC,MAG3C,KAGE,KAAoB,MAAbH,QAAa,EAAbQ,GAAenE,QACpB/I,EAAWO,KAAKmM,GAAc5J,QAASsJ,QAErB,MAApBW,OAAsBhK,cACtB/C,EAAWsB,WACXtB,EAAW+C,oBAGbtD,EAEA,IAAOiN,GAAgB,MAGzBnH,EAAOM,UAAUkH,MClHf,YACJI,EACAC,GAEA,OAAOjG,QAAQ,CAAC5B,EAAQvF,KACtB,MAAMkM,EAAiB,MAGvBxE,OAAUyF,GAAUtH,UAClB,IAAI8B,KACF3H,EACCqN,IACC,MAAMjB,EAAc,GACpBF,EAAQ9I,KAAKgJ,GAGb,MAAMkB,EAAsB,IAAIpN,KAShCoN,EAAoB5M,KAAIgH,SAAU0F,EAAgBC,IAAYxH,UAAU,IAAI8B,KAAmB3H,EAP5E,QACjBqM,MAAUH,EAASE,GACnBpM,EAAWO,KAAK6L,GAChBkB,EAAoBvK,eAIiG6H,SAEzHA,OAIJrF,EAAOM,UACL,IAAI8B,KACF3H,EACCuB,IAEC,UAAW6K,KAAUF,EACnBE,EAAOhJ,KAAK7B,IAGhB,KAEE,KAAO2K,EAAQnD,OAAS,GACtB/I,EAAWO,KAAK2L,EAAQpJ,SAE1B9C,EAAWsB,gBCnDf,YAAwB8L,GAC5B,OAAOjG,QAAQ,CAAC5B,EAAQvF,KAEtB,IAAIoM,EAAqB,KAIrBmB,EAA0C,KAM9C,MAAMC,EAAa,KAGA,MAAjBD,KAAmBxK,cAEnB,MAAMU,EAAI2I,EACVA,EAAS,GACT3I,GAAKzD,EAAWO,KAAKkD,IAGrBiE,SAAU0F,KAAmBvH,UAAW0H,EAAoB,IAAI5F,KAAmB3H,EAAYwN,EAAY5C,QAI7G4C,IAGAjI,EAAOM,UACL,IAAI8B,KACF3H,EAECuB,GAAgB,MAAN6K,OAAM,EAAN/H,EAAQjB,KAAK7B,GAGxB,KACE6K,GAAUpM,EAAWO,KAAK6L,GAC1BpM,EAAWsB,iBAGb7B,EAEA,IAAO2M,EAASmB,EAAoB,mCC9EtC,YACJE,EACAC,EACAC,EACAC,EACAC,GAEA,MAAO,CAACtI,EAAuBvF,KAI7B,IAAI8N,EAAWH,EAIX7L,EAAa4L,EAEb1K,GAAQ,EAGZuC,EAAOM,UACL,IAAI8B,KACF3H,EACCuB,KAEC,MAAMwM,GAAI/K,KAEVlB,EAAQgM,EAEJL,EAAY3L,EAAOP,GAAOwM,KAIxBD,GAAW,EAAOvM,IAGxBqM,GAAc5N,EAAWO,KAAKuB,IAIhC+L,GACG,MACCC,GAAY9N,EAAWO,KAAKuB,GAC5B9B,EAAWsB,gBCCjB,YAAuBmM,EAAyDC,GACpF,SAAOvG,MAAQ6G,GAAcP,EAAaC,EAAMzD,UAAUlB,QAAU,GAAG,GAAO,ICtDhF,MAAMkF,GAAa,CAACC,EAAY3M,KAAgB2M,EAAI9K,KAAK7B,GAAQ2M,GAgC3D,cAIJ,OAAO/G,QAAQ,CAAC5B,EAAQvF,KACtBmO,GAAOF,GAAY,GAAnBE,CAA8B5I,GAAQM,UAAU7F,KCvB9C,YAAiCoO,EAA0DC,GAC/F,OAAOjG,QAGLkG,MAEAC,QAAUlE,GAAY+D,EAAO/D,IAE7BgE,GAAUhG,QAAiBgG,GAAYnE,MC8BrC,YAA8BmE,GAClC,OAAOG,GAAiBC,KAAeJ,GCpDlC,MAAMK,GAAaC,GCqBpB,eAAiC1G,GACrC,MAAMF,KAAiB6G,OAAkB3G,GACzC,OAAOF,GACHK,QAAKqG,MAAkBxG,MAAuCI,MAAiBN,KAC/EZ,QAAQ,CAAC5B,EAAQvF,QACf6O,MAAkB,CAACtJ,QAAWgF,KAAetC,KAAQjI,KCavD,eACD8O,GAEH,OAAOL,MAAiBK,4BCyBpB,WACJC,EACAhH,GAEA,OAAOvD,OAAWuD,MAAkBiH,KAAU,IAAMD,EAAiBhH,IAAkBiH,OAAU,IAAMD,GChCnG,eACDD,GAEH,OC/BI,eAA0B7G,GAC9B,MAAMrG,KAAYqN,OAAahH,GAC/B,OAAOd,QAAQ,CAAC5B,EAAQvF,MACtBkP,aAAYnE,MAAK,CAACxF,KAAW0C,GAAOrG,IAAYiE,UAAU7F,KD4BrDmP,IAAUL,kBEWb,WAAmBzD,GACvB,OAAO8C,GAAO,CAACiB,EAAO7N,EAAOwM,KAAQ1C,GAAaA,EAAU9J,EAAOwM,GAAKqB,EAAQ,EAAIA,EAAQ,GCKxF,WAAsBC,GAC1B,OAAOlI,QAAQ,CAAC5B,EAAQvF,KACtB,IAAI4D,GAAW,EACX0D,EAAsB,KAEtBgI,EAA6C,KAEjD,MAAM1C,EAAO,KAMX,GAFkB,MAAlB0C,KAAoBvM,cACpBuM,EAAqB,KACjB1L,EAAU,CAEZA,GAAW,EACX,MAAMrC,EAAQ+F,EACdA,EAAY,KACZtH,EAAWO,KAAKgB,KAIpBgE,EAAOM,UACL,IAAI8B,KACF3H,EACCuB,IAImB,MAAlB+N,KAAoBvM,cACpBa,GAAW,EACX0D,EAAY/F,EAGZ+N,EAAqB,IAAI3H,KAAmB3H,EAAY4M,EAAMhC,OAE9DlD,SAAU2H,EAAiB9N,IAAQsE,UAAUyJ,IAE/C,KAGE1C,IACA5M,EAAWsB,iBAGb7B,EACA,KAEE6H,EAAYgI,EAAqB,wDC3DrC,cACJ,OAAOnI,QAAQ,CAAC5B,EAAQvF,KACtBuF,EAAOM,UAAU,IAAI8B,KAAmB3H,EAAaoF,GAAiBrB,GAAoBqB,EAAcpF,OCkBtG,YAAyBuP,EAA+BC,GAC5D,OAAOrI,QAAQ,CAAC5B,EAAQvF,KACtB,MAAMyP,EAAe,IAAIC,IACzBnK,EAAOM,UACL,IAAI8B,KAAmB3H,EAAauB,IAClC,MAAMoO,EAAMJ,EAAcA,EAAYhO,GAASA,EAC1CkO,EAAaG,IAAID,KACpBF,EAAa/O,IAAIiP,GACjB3P,EAAWO,KAAKgB,OAKf,MAAPiO,KAAS3J,UAAU,IAAI8B,KAAmB3H,EAAY,IAAMyP,EAAaI,QAASjF,yDC/BhF,YAA8B5H,EAAe8C,GACjD,GAAI9C,EAAQ,EACV,MAAM,IAAIiD,GAEZ,MAAM6J,EAAkB7F,UAAUlB,QAAU,EAC5C,OAAQxD,GACNA,EAAO6C,QACLkD,MAAO,CAACyE,EAAGhC,IAAMA,IAAM/K,IACvBgN,QAAK,GACLF,KAAkBG,KAAenK,IAAiBoK,QAAa,IAAM,IAAIjK,KCEzE,eAAwBkK,GAC5B,OAAQ5K,MAA0B4J,MAAO5J,GAAQV,WAAMsL,ICxBnD,YACJ9E,EACAF,GAEA,OAAOhE,QAAQ,CAAC5B,EAAQvF,KACtB,IAAIgD,EAAQ,EACZuC,EAAOM,UACL,IAAI8B,KACF3H,EACCuB,IACM8J,EAAUD,KAAKD,EAAS5J,EAAOyB,IAASuC,KAC3CvF,EAAWO,MAAK,GAChBP,EAAWsB,aAGf,KACEtB,EAAWO,MAAK,GAChBP,EAAWsB,gBCXf,cACJ,OAAO6F,QAAQ,CAAC5B,EAAQvF,KACtB,IAAI6I,GAAa,EACb8B,EAAgC,KACpCpF,EAAOM,UACL,IAAI8B,KACF3H,EACCoQ,IACMzF,IACHA,KAAWjD,OAAU0I,GAAOvK,UAC1B,IAAI8B,KAAmB3H,OAAYP,EAAW,KAC5CkL,EAAW,KACX9B,GAAc7I,EAAWsB,gBAKjC,KACEuH,GAAa,GACZ8B,GAAY3K,EAAWsB,gBC/D3B,MAAM+O,GAAUC,wCC0DjB,YACJjF,EACAF,GAEA,OAAOhE,QAAQoJ,GAAWlF,EAAWF,EAAS,UAG1C,YACJE,EACAF,EACAyB,GAEA,MAAM4D,EAAqB,UAAT5D,EAClB,MAAO,CAACrH,EAAuBvF,KAC7B,IAAIgD,EAAQ,EACZuC,EAAOM,UACL,IAAI8B,KACF3H,EACCuB,IACC,MAAMwM,EAAI/K,IACNqI,EAAUD,KAAKD,EAAS5J,EAAOwM,EAAGxI,KACpCvF,EAAWO,KAAKiQ,EAAYzC,EAAIxM,GAChCvB,EAAWsB,aAGf,KACEtB,EAAWO,KAAKiQ,GAAY,OAAK/Q,GACjCO,EAAWsB,eCjCf,YACJ+J,EACAF,GAEA,OAAOhE,QAAQoJ,GAAWlF,EAAWF,EAAS,wBCwF1C,YACJoE,EACAkB,EACAC,EACAzH,GAEA,OAAO9B,QAAQ,CAAC5B,EAAQvF,KACtB,IAAI2Q,EACCF,GAAgD,mBAArBA,IAG3BC,WAAUC,UAAS1H,aAAcwH,GAFpCE,EAAUF,EAMZ,MAAMG,EAAS,IAAIC,IAGbC,EAAUC,KACdH,EAAOI,QAAQD,IACfA,GAAG/Q,IAKCiR,GAAe/L,IAAa4L,EAAQI,IAAaA,GAAS7P,MAAM6D,KAShEiM,GAA0B,IAAIC,GAClCpR,EACCuB,KAIC,IACE,MAAMoO,GAAMJ,EAAYhO,IAExB,IAAI8P,GAAQT,EAAOU,IAAI3B,IACvB,IAAK0B,GAAO,CAEVT,EAAOW,IAAI5B,GAAM0B,GAAQpI,EAAYA,IAAc,IAAItI,KAKvD,MAAM6Q,GAwDd,YAAiC7B,GAAQ8B,IACvC,MAAM7M,GAAc,IAAI7E,IAAe2R,KACrCP,GAAwBQ,eACxB,MAAMhH,GAAW8G,GAAa5L,UAAU6L,IACxC,MAAO,KACL/G,GAAS5H,cAIkC,KAAzCoO,GAAwBQ,cACxBR,GAAwBS,mBACxBT,GAAwBpO,iBAG9B6B,UAAO+K,IAAMA,GACN/K,GAvEeiN,CAAwBlC,GAAK0B,IAG7C,GAFArR,EAAWO,KAAKiR,IAEZd,EAAU,CACZ,MAAMpB,GAAqB,IAAI3H,KAM7B0J,GACA,KAGEA,GAAO/P,WACW,MAAlBgO,OAAoBvM,oBAGtBtD,OAGAA,EAEA,IAAMmR,EAAOkB,OAAOnC,KAItBwB,GAAwBzQ,KAAIgH,SAAUgJ,EAASc,KAAU3L,UAAUyJ,MAKvE+B,GAAM9Q,KAAKoQ,EAAUA,EAAQpP,IAASA,UAC/B2D,IACP+L,GAAY/L,MAIhB,IAAM4L,EAAQI,IAAaA,GAAS5P,YAEpC2P,GAKA,IAAML,EAAOf,SAIftK,EAAOM,UAAUsL,MAgCrB,iBAAmCxJ,KAAnC/G,kCAIEC,kBAAe,EAIfA,wBAAoB,EAEpBkC,cACElC,KAAK+Q,mBAAoB,EAIH,IAAtB/Q,KAAK8Q,cAAsBnQ,MAAMuB,4BCrO/B,cACJ,OAAOoE,QAAQ,CAAC5B,EAAQvF,KACtBuF,EAAOM,UACL,IAAI8B,KACF3H,EACA,KACEA,EAAWO,MAAK,GAChBP,EAAWsB,YAEb,KACEtB,EAAWO,MAAK,GAChBP,EAAWsB,kDCvBf,cACJ,OAAO6F,QAAQ,CAAC5B,EAAQvF,KACtBuF,EAAOM,UACL,IAAI8B,KACF3H,EACCuB,IACCvB,EAAWO,KAAK0E,aAAwB1D,KAE1C,KACEvB,EAAWO,KAAK0E,oBAChBjF,EAAWsB,YAEZ4D,IACClF,EAAWO,KAAK0E,cAAyBC,IACzClF,EAAWsB,gBCrBf,YAAiByQ,GACrB,OAAO5D,IAAO3J,OAAWuN,GAAY,CAACC,EAAGC,IAAOF,EAASC,EAAGC,GAAK,EAAID,EAAIC,EAAK,CAACD,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,kBC5ChG,MAAMC,GAAU3D,KCkDjB,YACJQ,EACAhH,EACAoK,EAAqBzP,KAErB,SAAI8B,KAAWuD,IACNwG,QAAS,IAAMQ,EAAiBhH,EAAgBoK,IAE3B,iBAAnBpK,IACToK,EAAapK,IAERwG,QAAS,IAAMQ,EAAiBoD,mBCtBnC,eACDrD,GAEH,OCzBI,eAAsB7G,GAC1B,MAAMrG,KAAYqN,OAAahH,GACzBkK,GAAaC,SAAUnK,EAAMvF,KACnCuF,YAAOsC,KAAetC,IAEfd,QAAQ,CAAC5B,EAAQvF,MACtBqS,QAASF,MAAYpH,MAAK,CAACxF,KAAY0C,GAAgCrG,IAAYiE,UAAU7F,KDmBxFsS,IAASxD,GEAZ,YAAiBiD,GACrB,OAAO5D,IAAO3J,OAAWuN,GAAY,CAACC,EAAGC,IAAOF,EAASC,EAAGC,GAAK,EAAID,EAAIC,EAAK,CAACD,EAAGC,IAAOD,EAAIC,EAAID,EAAIC,4BC8BjG,eAAyBM,GAC7B,MAAMxJ,EAASwJ,EAAWxJ,OAC1B,GAAe,IAAXA,EACF,MAAM,IAAIyJ,MAAM,uCAElB,OAAOC,QAAKT,IACV,IAAIU,EAAmBV,EACvB,QAASjE,EAAI,EAAGA,EAAIhF,EAAQgF,IAAK,CAC/B,MAAMtJ,EAAe,MAAXiO,OAAW,EAAXrO,EAAckO,EAAWxE,IACnC,QAAiB,IAANtJ,EAGT,OAFAiO,EAAcjO,EAKlB,OAAOiO,mBC1EL,YAA6BC,GAEjC,OAAQpN,IACN,MAAMiD,EAAU,IAAIoK,IAAmBD,GACvC,OAAO,IAAIE,IAAsBtN,EAAQ,IAAMiD,IC6C7C,cAEJ,OAAQjD,IACN,MAAMiD,EAAU,IAAIC,EACpB,OAAO,IAAIoK,IAAsBtN,EAAQ,IAAMiD,ICU7C,YACJwD,EACA8G,EACAC,EACArT,GAEIqT,KAAwBvO,OAAWuO,KACrCrT,EAAoBqT,GAEtB,MAAMC,GAAWxO,OAAWuO,GAAuBA,OAAsBtT,EAGzE,OAAQ8F,MAA0B0N,MAAU,IAAIC,IAAiBlH,EAAY8G,EAAYpT,GAAoBsT,EAA3EC,CAAsF1N,GC3DpH,eACDuJ,GAEH,OAAQA,EAAa/F,QAEjB5B,QAAQ,CAAC5B,EAAQvF,MACfmT,QAAwB,CAAC5N,KAAWuJ,GAApCqE,CAAmDnT,KAFrDkK,oBCFA,YAAwBkJ,GAC5B,OAAOjM,QAAQ,CAAC5B,EAAQvF,KACtB,IAAI2K,EAEA0I,EADAC,GAAY,EAEZC,GAAqB,EACrBC,GAAiB,EAKrB,MAAMC,EAAgB,IAAMD,GAAkBD,IAAuBvT,EAAWsB,YAAY,GAmCtFoS,GAAyB,KAC7BF,GAAiB,EAEjB7I,EAAWpF,EAAOM,UAChB,IAAI8B,KAAmB3H,OAAYP,EAAW,KAC5C+T,GAAiB,GAMhBC,MAxCAJ,IACHA,EAAe,IAAI1S,IAInByS,EAASC,GAAcxN,UACrB,IAAI8B,KACF3H,EACA,KACM2K,EACF+I,KAMAJ,GAAY,GAGhB,KACEC,GAAqB,EACrBE,QAKDJ,GAcwC9S,UAI3C+S,IAKF3I,EAAS5H,cAIT4H,EAAW,KAEX2I,GAAY,EAEZI,OAKJA,OC/BE,YAAmBC,EAAsCjR,KAC7D,IAAI8C,EAEFA,EADEmO,GAA0C,iBAAlBA,EACjBA,EAEA,CACPnI,MAAOmI,GAGX,MAAQnI,QAAQ9I,IAAUX,QAAuB6R,kBAAiB,GAAUpO,EAE5E,OAAOgG,GAAS,EACZtB,MACA/C,QAAQ,CAAC5B,EAAQvF,KACf,IACI2K,EADAkJ,EAAQ,EAEZ,MAAMC,GAAoB,KACxB,IAAIC,IAAY,EAChBpJ,EAAWpF,EAAOM,UAChB,IAAI8B,KACF3H,EACCuB,KAEKqS,IACFC,EAAQ,GAEV7T,EAAWO,KAAKgB,UAGlB9B,EACCyF,KACC,GAAI2O,IAAUrI,EAAO,CAEnB,MAAMwI,GAAQ,KACRrJ,GACFA,EAAS5H,cACT4H,EAAW,KACXmJ,MAEAC,IAAY,GAIhB,GAAa,MAAThS,EAAe,CAIjB,MAAMqR,GAA4B,iBAAVrR,GAAqBkS,QAAMlS,IAAS2F,SAAU3F,EAAMmD,GAAK2O,IAC3EK,GAAqB,IAAIvM,KAC7B3H,EACA,KAIEkU,GAAmBnR,cACnBiR,MAEF,KAGEhU,EAAWsB,aAGf8R,GAASvN,UAAUqO,SAGnBF,UAKFhU,EAAWqB,MAAM6D,OAKrB6O,KACFpJ,EAAS5H,cACT4H,EAAW,KACXmJ,OAGJA,OC3GF,YAAuBV,GAC3B,OAAOjM,QAAQ,CAAC5B,EAAQvF,KACtB,IAAI2K,EAEAwJ,EADAb,GAAY,EAGhB,MAAMc,EAAwB,KAC5BzJ,EAAWpF,EAAOM,UAChB,IAAI8B,KAAmB3H,OAAYP,OAAWA,EAAYyF,IACnDiP,IACHA,EAAU,IAAIxT,IACdyS,EAASe,GAAStO,UAChB,IAAI8B,KAAmB3H,EAAY,IAMjC2K,EAAWyJ,IAA2Bd,GAAY,KAIpDa,GAEFA,EAAQ5T,KAAK2E,MAKfoO,IAKF3I,EAAS5H,cACT4H,EAAW,KAEX2I,GAAY,EAEZc,MAKJA,qBC5DE,YAAoBhB,GACxB,OAAOjM,QAAQ,CAAC5B,EAAQvF,KACtB,IAAI4D,GAAW,EACX0D,EAAsB,KAC1B/B,EAAOM,UACL,IAAI8B,KAAmB3H,EAAauB,IAClCqC,GAAW,EACX0D,EAAY/F,KAWhB6R,EAASvN,UAAU,IAAI8B,KAAmB3H,EAR7B,KACX,GAAI4D,EAAU,CACZA,GAAW,EACX,MAAMrC,EAAQ+F,EACdA,EAAY,KACZtH,EAAWO,KAAKgB,KAGwCqJ,SChB1D,YAAwByJ,EAAgBzS,EAA2BoF,KACvE,OAAOsN,IAAOC,QAASF,EAAQzS,IC6C3B,YAAwB6L,EAA6DC,GAMzF,SAAOvG,MAAQ6G,GAAcP,EAAaC,EAAWzD,UAAUlB,QAAU,GAAG,ICpCxE,YACJyL,EACAC,EAAsC,EAACjR,EAAGC,IAAMD,IAAMC,IAEtD,OAAO0D,QAAQ,CAAC5B,EAAQvF,KAEtB,MAAM0U,EAyED,CACLtI,OAAQ,GACR9K,UAAU,GAzEJqT,EAuED,CACLvI,OAAQ,GACR9K,UAAU,GAtEJsL,EAAQgI,IACZ5U,EAAWO,KAAKqU,GAChB5U,EAAWsB,YAQPuT,EAAmB,CAACC,EAA6BC,MACrD,MAAMC,GAA0B,IAAIrN,KAClC3H,EACCwD,KACC,MAAQ4I,UAAQ9K,aAAayT,GACP,IAAlB3I,GAAOrD,OAOTzH,GAAWsL,GAAK,GAASkI,EAAU1I,OAAOhJ,KAAKI,KAK9CiR,EAAWjR,GAAG4I,GAAOtJ,UAAa8J,GAAK,IAG5C,KAEEkI,EAAUxT,UAAW,EACrB,MAAQA,YAAU8K,WAAW2I,GAK7BzT,IAAYsL,EAAuB,IAAlBR,GAAOrD,QAED,MAAvBiM,OAAyBjS,gBAI7B,OAAOiS,IAITzP,EAAOM,UAAUgP,EAAiBH,EAAQC,IAC1CH,EAAU3O,UAAUgP,EAAiBF,EAAQD,gCC9B3C,YAAoBrJ,GACxB,OAAOlE,QAAQ,CAAC5B,EAAQvF,KACtB,IACIiV,EADArR,GAAW,EAEXsR,GAAY,EACZlS,EAAQ,EACZuC,EAAOM,UACL,IAAI8B,KACF3H,EACCuB,IACC2T,GAAY,IACP7J,GAAaA,EAAU9J,EAAOyB,IAASuC,MAC1C3B,GAAY5D,EAAWqB,MAAM,IAAIkF,GAAc,6BAC/C3C,GAAW,EACXqR,EAAc1T,IAGlB,KACMqC,GACF5D,EAAWO,KAAK0U,GAChBjV,EAAWsB,YAEXtB,EAAWqB,MAAM6T,EAAY,IAAI5O,GAAc,sBAAwB,IAAIP,0BClEjF,YAAsBoP,GAC1B,OAAOA,GAAa,EAEhBjL,MACA/C,QAAQ,CAAC5B,EAAQvF,KAIf,IAAIoV,EAAY,IAAIC,MAAMF,GAGtB5N,EAAO,EACXhC,SAAOM,UACL,IAAI8B,KAAmB3H,EAAauB,IAKlC,MAAM+T,EAAa/N,IACnB,GAAI+N,EAAaH,EAIfC,EAAKE,GAAc/T,MACd,CAIL,MAAMyB,EAAQsS,EAAaH,EAGrBI,EAAWH,EAAKpS,GACtBoS,EAAKpS,GAASzB,EAKdvB,EAAWO,KAAKgV,OAKf,KAELH,EAAO,QC/CX,YAAuBhC,GAC3B,OAAOjM,QAAQ,CAAC5B,EAAQvF,KACtB,IAAIwV,GAAS,EAEb,MAAMC,EAAiB,IAAI9N,KACzB3H,EACA,KACgB,MAAdyV,KAAgB1S,cAChByS,GAAS,GAEX5K,OAGFlD,SAAU0L,GAAUvN,UAAU4P,GAE9BlQ,EAAOM,UAAU,IAAI8B,KAAmB3H,EAAauB,GAAUiU,GAAUxV,EAAWO,KAAKgB,4CCGvF,cACJ,OAAOmU,QAAUxL,qBCzCb,YACJuD,EACAC,GAEA,OAAOvG,QAAQ,CAAC5B,EAAQvF,KAGtB,IAAI8B,EAAQ4L,EAKZgI,eAGE,CAACnU,EAAUyB,IAAUyK,EAAY3L,EAAOP,EAAOyB,GAG/C,CAACqB,EAAGsR,KAAiB7T,EAAQ6T,EAAaA,GAN5CD,CAOEnQ,GAAQM,UAAU7F,GAEb,KAEL8B,EAAQ,8ECSR,YAA0BF,EAA2BgU,KACzD,OAAQrQ,MACN8D,MAAM,IACG9D,EAAO6C,KAEZyN,GAAK,EAAGC,WAAWvU,KAAW,CAAEA,QAAOuU,QAASlU,EAAUtC,MAAOyW,KAAMD,IAAY,CACjFA,QAASlU,EAAUtC,MACnBiC,WAAO9B,EACPsW,UAAMtW,KAERgT,QAA0B,EAAGqD,UAASC,OAAMxU,WAAY,IAAIyU,GAAazU,EAAOuU,EAAUC,MAQ5F,SAIJnV,YAAmBW,EAAiBgT,GAAjB1T,aAAiBA,iBCQhC,YACJoV,EACAC,EACAtU,GAEA,IAAI+E,EACAC,EACAE,EASJ,GARAlF,EAAqB,MAATA,IAAagU,OAErB1O,MAAY+O,GACdtP,EAAQsP,EACgB,iBAARA,IAChBrP,EAAOqP,IAGLC,EAGF,MAAM,IAAIlR,UAAU,uCAGtB,GALE8B,EAAQ,IAAMoP,EAKH,MAATvP,GAAyB,MAARC,EAEnB,MAAM,IAAI5B,UAAU,wBAGtB,OAAOmR,GAA+B,CACpCxP,QACAC,OACAhF,YACAiF,KAAMC,mBC/EJ,YAAuBpH,EAAuC0W,MAClE,OAAO3D,QAAKlR,IAAc,CAAEA,QAAOjB,UAAWZ,EAAkBJ,SCU5D,YAAoB+W,GACxB,OAAOlP,QAAQ,CAAC5B,EAAQvF,KACtB,IAAIsW,EAA4B,IAAI3V,IAEpCX,EAAWO,KAAK+V,EAAcC,gBAE9B,MAAMrS,EAAgBgB,IACpBoR,EAAcjV,MAAM6D,GACpBlF,EAAWqB,MAAM6D,IAInBK,SAAOM,UACL,IAAI8B,KACF3H,EACCuB,GAAuB,MAAb+U,OAAa,EAAbjS,EAAe9D,KAAKgB,GAC/B,KACE+U,EAAchV,WACdtB,EAAWsB,YAEb4C,IAKJmS,EAAiBxQ,UACf,IAAI8B,KACF3H,EACA,KACEsW,EAAchV,WACdtB,EAAWO,KAAM+V,EAAgB,IAAI3V,MAEvCiK,KACA1G,IAIG,KAIQ,MAAboS,KAAevT,cACfuT,EAAgB,QCvBhB,YAAyBE,EAAoBC,EAA2B,GAC5E,MAAMC,EAAaD,EAAmB,EAAIA,EAAmBD,EAE7D,OAAOrP,QAAQ,CAAC5B,EAAQvF,KACtB,IAAI2W,EAAU,CAAC,IAAIhW,KACfiW,EAAmB,GACnBpL,EAAQ,EAGZxL,EAAWO,KAAKoW,EAAQ,GAAGJ,gBAE3BhR,EAAOM,UACL,IAAI8B,KACF3H,EACCuB,IAIC,UAAWsV,MAAUF,EACnBE,GAAOtW,KAAKgB,GAOd,MAAMuV,GAAItL,EAAQgL,EAAa,EAU/B,GATIM,IAAK,GAAKA,GAAIJ,GAAe,GAC/BC,EAAQ7T,QAASxB,aAQbkK,EAAQkL,GAAe,EAAG,CAC9B,MAAMG,GAAS,IAAIlW,IACnBgW,EAAQvT,KAAKyT,IACb7W,EAAWO,KAAKsW,GAAON,kBAG3B,KACE,KAAOI,EAAQ5N,OAAS,GACtB4N,EAAQ7T,QAASxB,WAEnBtB,EAAWsB,YAEZ4D,IACC,KAAOyR,EAAQ5N,OAAS,GACtB4N,EAAQ7T,QAASzB,MAAM6D,GAEzBlF,EAAWqB,MAAM6D,IAEnB,KACE0R,EAAS,KACTD,EAAU,UCpBd,YAAwBI,KAA2BxK,WACvD,MAAM3K,EAAmC,QAAvBwC,YAAamI,UAAU7H,QAAIsC,IACvCgQ,EAAiD,QAAxB3S,EAACkI,EAAU,UAAalH,QAAI,KACrD4R,EAAiB1K,EAAU,IAAiB7J,IAElD,OAAOyE,QAAQ,CAAC5B,EAAQvF,KAEtB,IAAIkX,GAA0C,GAG1CC,IAAiB,EAErB,MAAMC,GAAevK,KACnB,MAAQgK,UAAQlO,SAASkE,GACzBgK,GAAOvV,WACPqH,GAAK5F,eACLsJ,QAAU6K,GAAerK,IACzBsK,IAAkBE,MAOdA,GAAc,KAClB,GAAIH,GAAe,CACjB,MAAMvO,GAAO,IAAIzI,KACjBF,EAAWU,IAAIiI,IACf,MAAMkO,GAAS,IAAIlW,IACbkM,GAAS,CACbgK,UACAlO,QACApB,KAAM,GAER2P,GAAc9T,KAAKyJ,IACnB7M,EAAWO,KAAKsW,GAAON,mBACvB9O,MAAgBkB,GAAM/G,EAAW,IAAMwV,GAAYvK,IAASkK,KAIjC,OAA3BC,GAAmCA,GAA0B,KAI/DvP,MAAgBzH,EAAY4B,EAAWyV,GAAaL,GAAwB,GAE5EG,IAAiB,EAGnBE,KAQA,MAAMC,GAAQvG,IAA0CmG,GAAejK,QAAQ+D,QAAQD,IAMjFwG,GAAaxG,KACjBuG,GAAK,EAAGT,aAAa9F,GAAG8F,KACxB9F,GAAG/Q,GACHA,EAAW+C,eAGbwC,SAAOM,UACL,IAAI8B,KACF3H,EACCuB,KAEC+V,GAAMzK,KACJA,GAAOgK,OAAOtW,KAAKgB,IAEnB0V,KAAmBpK,GAAOtF,MAAQ6P,GAAYvK,OAIlD,IAAM0K,GAAWrG,IAAaA,GAAS5P,YAEtC4D,IAAQqS,GAAWrG,IAAaA,GAAS7P,MAAM6D,OAO7C,KAELgS,GAAgB,QC3IhB,YACJ/J,EACAC,GAEA,OAAOjG,QAAQ,CAAC5B,EAAQvF,KACtB,MAAM2W,EAAwB,GAExB1F,EAAe/L,IACnB,KAAO,EAAIyR,EAAQ5N,QACjB4N,EAAQ7T,QAASzB,MAAM6D,GAEzBlF,EAAWqB,MAAM6D,OAGnBwC,OAAUyF,GAAUtH,UAClB,IAAI8B,KACF3H,EACCqN,IACC,MAAMwJ,EAAS,IAAIlW,IACnBgW,EAAQvT,KAAKyT,GACb,MAAMvJ,EAAsB,IAAIpN,KAOhC,IAAI4L,GACJ,IACEA,IAAkBpE,SAAU0F,EAAgBC,UACrCnI,IAEP,YADA+L,EAAY/L,IAIdlF,EAAWO,KAAKsW,EAAON,gBAEvBjJ,EAAoB5M,IAAIoL,GAAgBjG,UAAU,IAAI8B,KAAmB3H,EAhBrD,QAClBqM,MAAUsK,EAASE,GACnBA,EAAOvV,WACPgM,EAAoBvK,eAa4E6H,KAAMqG,MAE1GrG,OAKJrF,EAAOM,UACL,IAAI8B,KACF3H,EACCuB,IAGC,MAAMiW,EAAcb,EAAQ1J,QAC5B,UAAW4J,KAAUW,EACnBX,EAAOtW,KAAKgB,IAGhB,KAEE,KAAO,EAAIoV,EAAQ5N,QACjB4N,EAAQ7T,QAASxB,WAEnBtB,EAAWsB,YAEb2P,EACA,KAME,KAAO,EAAI0F,EAAQ5N,QACjB4N,EAAQ7T,QAASC,mBC3EvB,YAAwBqK,GAC5B,OAAOjG,QAAQ,CAAC5B,EAAQvF,KACtB,IAAI6W,EACAtJ,EAMJ,MAAM0D,EAAe/L,IACnB2R,EAAQxV,MAAM6D,GACdlF,EAAWqB,MAAM6D,IASbuS,EAAa,KAajB,IAAI3L,EAVa,MAAjByB,KAAmBxK,cAGb,MAAN8T,KAAQvV,WAGRuV,EAAS,IAAIlW,IACbX,EAAWO,KAAKsW,EAAON,gBAIvB,IACEzK,KAAkBpE,OAAU0F,WACrBlI,GAEP,YADA+L,EAAY/L,GAQd4G,EAAgBjG,UAAW0H,EAAoB,IAAI5F,KAAmB3H,EAAYyX,EAAYA,EAAYxG,KAI5GwG,IAGAlS,EAAOM,UACL,IAAI8B,KACF3H,EACCuB,GAAUsV,EAAQtW,KAAKgB,GACxB,KAEEsV,EAAQvV,WACRtB,EAAWsB,YAEb2P,EACA,KAGmB,MAAjB1D,KAAmBxK,cACnB8T,EAAS,wBCpGb,YAAuBxI,GAC3B,OAAOG,GAAiBkJ,KAAKrJ,GCQzB,eAAsDsJ,GAC1D,OCNI,eAAuBtN,GAC3B,OAAOlD,QAAQ,CAAC5B,EAAQvF,MAEtB4X,QAAUrS,KAAY8E,GAAmBxE,UAAU7F,KDG9C0X,IAAOC,kDEjBV,gBAAkChX,IACtCC,YAAoBK,GAClBO,QADkBX,cAIhBU,YACF,OAAOV,KAAKgX,WAIJC,WAAW9X,GACnB,MAAMC,EAAeuB,MAAMsW,WAAW9X,GACtC,OAACC,EAAaQ,QAAUT,EAAWO,KAAKM,KAAKI,QACtChB,EAGT4X,WACE,MAAQ9W,WAAUG,cAAaD,UAAWJ,KAC1C,GAAIE,EACF,MAAMG,EAER,YAAK6W,iBACE9W,EAGTV,KAAKgB,GACHC,MAAMjB,KAAMM,KAAKI,OAASM,8GCjBvB,IAAMxB,EAAb,MAAM,QAkBJa,YAAYiF,GACNA,IACFhF,KAAKiX,WAAajS,GA8BtBmS,KAAQC,GACN,MAAMC,EAAa,IAAInY,EACvBmY,SAAW3S,OAAS1E,KACpBqX,EAAWD,SAAWA,EACfC,EA2ITrS,UACEsS,EACA9W,EACAC,GAEA,MAAMtB,EAwRV,WAAyBuB,GACvB,OAAQA,GAASA,aAAiB6W,MALpC,WAAuB7W,GACrB,OAAOA,IAASiD,OAAWjD,EAAMhB,UAASiE,KAAWjD,EAAMF,SAAUmD,OAAWjD,EAAMD,UAIpC+W,CAAW9W,OAAU+W,MAAe/W,GAzRjEgX,CAAaJ,GAAkBA,EAAiB,IAAInS,KAAemS,EAAgB9W,EAAOC,GAE7GkX,cAAa,KACX,MAAQP,WAAU1S,UAAW1E,KAC7Bb,EAAWU,IACTuX,EAGIA,EAAS7M,KAAKpL,EAAYuF,GAC1BA,EAIA1E,KAAKiX,WAAW9X,GAGhBa,KAAK4X,cAAczY,MAIpBA,EAICyY,cAAcC,GACtB,IACE,OAAO7X,KAAKiX,WAAWY,SAChBxT,GAIPwT,EAAKrX,MAAM6D,IA+Df8L,QAAQzQ,EAA0BoY,GAChCA,OAEO,IAFPA,EAAcC,EAAeD,IAEA,CAAChT,EAASC,KAGrC,IAAI3F,EACJA,EAAeY,KAAKgF,UACjBtE,IACC,IACEhB,EAAKgB,SACE2D,GACPU,EAAOV,GACK,MAAZjF,KAAc8C,gBAGlB6C,EACAD,KAMImS,WAAW9X,SACnB,OAAkB,QAAX6Y,OAAKtT,cAAMb,eAAEmB,UAAU7F,IAQ/B8Y,OACC,OAAOjY,KA6FTuH,QAAQ2Q,GACN,OAAOC,OAAcD,GAAYlY,MA8BnCoY,UAAUN,GACRA,OAEO,IAFPA,EAAcC,EAAeD,IAEN,CAAChT,EAASC,KAC/B,IAAIrE,EACJV,KAAKgF,UACFmM,GAAUzQ,EAAQyQ,EAClB9M,GAAaU,EAAOV,GACrB,IAAMS,EAAQpE,OAtabxB,gBAAsC8F,GACpC,IAAI9F,EAAc8F,GApChB9F,GAAb,GAsdA,WAAwB4Y,SACtB,OAAoC,QAA7BO,EAAW,MAAXzV,IAAe+B,mBAAcd,QAAIgB,iECtcpC,gBAAgC/E,IAUpCC,YACUuY,EAAczW,IACd0W,EAAc1W,IACd2W,EAAwCjD,KAEhD5U,QAJQX,mBACAA,mBACAA,0BAZFA,aAA0B,GAC1BA,0BAAsB,EAc5BA,KAAKyY,oBAAsBF,IAAgB1W,IAC3C7B,KAAKsY,YAAcI,KAAKC,IAAI,EAAGL,GAC/BtY,KAAKuY,YAAcG,KAAKC,IAAI,EAAGJ,GAGjC7Y,KAAKgB,GACH,MAAQJ,YAAWsY,UAASH,sBAAqBD,qBAAoBD,eAAgBvY,KAChFM,IACHsY,EAAQrW,KAAK7B,IACZ+X,GAAuBG,EAAQrW,KAAKiW,EAAmB/Z,MAAQ8Z,IAElEvY,KAAK6Y,cACLlY,MAAMjB,KAAKgB,GAIHuW,WAAW9X,GACnBa,KAAKkX,iBACLlX,KAAK6Y,cAEL,MAAMzZ,EAAeY,KAAK8Y,gBAAgB3Z,IAElCsZ,sBAAqBG,WAAY5Y,KAGnC+Y,EAAOH,EAAQxM,QACrB,QAASc,EAAI,EAAGA,EAAI6L,EAAK7Q,SAAW/I,EAAWS,OAAQsN,GAAKuL,EAAsB,EAAI,EACpFtZ,EAAWO,KAAKqZ,EAAK7L,IAGvB,YAAKjN,wBAAwBd,GAEtBC,EAGDyZ,cACN,MAAQP,cAAaE,qBAAoBI,UAASH,uBAAwBzY,KAKpEgZ,GAAsBP,EAAsB,EAAI,GAAKH,EAK3D,GAJAA,EAAczW,KAAYmX,EAAqBJ,EAAQ1Q,QAAU0Q,EAAQK,OAAO,EAAGL,EAAQ1Q,OAAS8Q,IAI/FP,EAAqB,CACxB,MAAMha,EAAM+Z,EAAmB/Z,MAC/B,IAAIyW,EAAO,EAGX,QAAShI,EAAI,EAAGA,EAAI0L,EAAQ1Q,QAAW0Q,EAAQ1L,IAAiBzO,EAAKyO,GAAK,EACxEgI,EAAOhI,EAETgI,GAAQ0D,EAAQK,OAAO,EAAG/D,EAAO,qDClFjC,QAGJnV,YAAoB2B,EAAoCjD,EAAoBya,EAAUza,KAAlEuB,2BAClBA,KAAKvB,IAAMA,EA8BNO,SAAYgC,EAAqDE,EAAgB,EAAGD,GACzF,OAAO,IAAIjB,KAAK0B,oBAAuB1B,KAAMgB,GAAMhC,SAASiC,EAAOC,IAlCvDgY,MAAoB3D,6FCT7B,IAAMzV,EAAb,MAAM,gBAA0BZ,IAqB9Ba,cAEEY,QAtBFX,aAAS,EAETA,eAA2B,GAE3BA,gBAAY,EAEZA,eAAW,EAEXA,iBAAmB,KAkBnBmX,KAAQC,GACN,MAAMzP,EAAU,IAAIwR,EAAiBnZ,KAAMA,MAC3C2H,SAAQyP,SAAWA,EACZzP,EAICuP,iBACR,GAAIlX,KAAKJ,OACP,MAAM,IAAIwZ,IAId1Z,KAAKgB,IACHiX,OAAa,KAEX,GADA3X,KAAKkX,kBACAlX,KAAKM,UAAW,CACnB,MAAMyY,EAAO/Y,KAAKqZ,UAAUjN,QAC5B,UAAWnJ,KAAY8V,EACrB9V,EAASvD,KAAKgB,MAMtBF,MAAM6D,IACJsT,OAAa,KAEX,GADA3X,KAAKkX,kBACAlX,KAAKM,UAAW,CACnBN,KAAKE,SAAWF,KAAKM,WAAY,EACjCN,KAAKK,YAAcgE,EACnB,MAAQgV,aAAcrZ,KACtB,KAAOqZ,EAAUnR,QACfmR,EAAUpX,QAASzB,MAAM6D,MAMjC5D,YACEkX,OAAa,KAEX,GADA3X,KAAKkX,kBACAlX,KAAKM,UAAW,CACnBN,KAAKM,WAAY,EACjB,MAAQ+Y,aAAcrZ,KACtB,KAAOqZ,EAAUnR,QACfmR,EAAUpX,QAASxB,cAM3ByB,cACElC,KAAKM,UAAYN,KAAKJ,QAAS,EAC/BI,KAAKqZ,UAAY,KAGfC,qBACF,OAAqB,QAAdC,OAAKF,iBAASxV,eAAEqE,QAAS,EAIxB0P,cAAczY,GACtB,YAAK+X,iBACEvW,MAAMiX,cAAczY,GAInB8X,WAAW9X,GACnB,YAAK+X,iBACLlX,KAAKC,wBAAwBd,GACtBa,KAAK8Y,gBAAgB3Z,GAIpB2Z,gBAAgB3Z,GACxB,MAAQe,WAAUI,YAAW+Y,aAAcrZ,KAC3C,OAAOE,GAAYI,EACfkZ,MACCH,EAAU9W,KAAKpD,GAAa,IAAIE,KAAa,KAAMmM,OAAU6N,EAAWla,KAIrEc,wBAAwBd,GAChC,MAAQe,WAAUG,cAAaC,aAAcN,KACzCE,EACFf,EAAWqB,MAAMH,GACRC,GACTnB,EAAWsB,WAUfiV,eACE,MAAM2B,EAAkB,IAAInY,IAC5BmY,SAAW3S,OAAS1E,KACbqX,GA/GFvX,gBAAkC,CAAI2Z,EAA0B/U,IAC9D,IAAIyU,EAAoBM,EAAa/U,GAlBnC5E,GAAb,GAuIM,gBAAmCA,EACvCC,YAES0Z,EACP/U,GAEA/D,QAHOX,mBAIPA,KAAK0E,OAASA,EAGhBhF,KAAKgB,WACmB,QAAtB0Q,EAAgB,QAAhBmI,OAAKE,mBAAW5V,eAAEnE,YAAI8E,gBAAG9D,GAG3BF,MAAM6D,WACmB,QAAvB+M,EAAgB,QAAhBmI,OAAKE,mBAAW5V,eAAErD,aAAKgE,gBAAGH,GAG5B5D,mBAC4B,QAA1B8Y,EAAgB,QAAhBG,OAAKD,mBAAW5V,eAAEpD,gBAAQ+D,iBAIlByS,WAAW9X,WACnB,OAAyC,QAAlCiS,EAAW,QAAXmI,OAAK7U,cAAMb,eAAEmB,UAAU7F,UAAWqF,QAAIgV,wGCxK1C,MAAMG,EAA+BC,EAAmB,SAAKhb,OAAWA,GA0BzE,WAA6BkE,EAAuBpC,EAAYF,GACpE,MAAO,CACLsC,OACApC,QACAF,iCCjBE,gBAA6BnB,KA6BjCU,YAAY0Z,GACV9Y,QATQX,gBAAqB,EAU7B6Z,GACE7Z,KAAKyZ,YAAcA,KAGfhC,MAAegC,IACjBA,EAAY5Z,IAAIG,OAGlBA,KAAKyZ,YAAcK,gBAvBNpa,EAAwBc,EAA2BC,GAClE,OAAO,IAAI0E,EAAezF,EAAMc,EAAOC,GAiCzCf,KAAKgB,GACCV,KAAKM,UACPyZ,EDjDA,WAA8BrZ,GAClC,OAAOkZ,EAAmB,IAAKlZ,OAAO9B,GCgDRob,CAAiBtZ,GAAQV,MAEnDA,KAAKia,MAAMvZ,GAWfF,MAAM6D,GACArE,KAAKM,UACPyZ,EDzEA,WAA4BvZ,GAChC,OAAOoZ,EAAmB,SAAKhb,EAAW4B,GCwEZ0Z,CAAkB7V,GAAMrE,OAElDA,KAAKM,WAAY,EACjBN,KAAKma,OAAO9V,IAUhB5D,WACMT,KAAKM,UACPyZ,EAA0BJ,EAAuB3Z,OAEjDA,KAAKM,WAAY,EACjBN,KAAKoa,aAITlY,cACOlC,KAAKJ,SACRI,KAAKM,WAAY,EACjBK,MAAMuB,cACNlC,KAAKyZ,YAAc,MAIbQ,MAAMvZ,GACdV,KAAKyZ,YAAY/Z,KAAKgB,GAGdyZ,OAAO9V,GACf,IACErE,KAAKyZ,YAAYjZ,MAAM6D,WAEvBrE,KAAKkC,eAICkY,YACR,IACEpa,KAAKyZ,YAAYhZ,mBAEjBT,KAAKkC,gBAKL,gBAAiCqV,EACrCxX,YACEuX,EACA9W,EACAC,GAIA,IAAIf,EACJ,GAHAiB,WAGIgD,KAAW2T,GAGb5X,EAAO4X,UACEA,EAAgB,CAOzB,IAAI+C,KADD3a,OAAMc,QAAOC,YAAa6W,GAEzBtX,MAAQ2E,8BAIV0V,GAAUlQ,OAAOmQ,OAAOhD,GACxB+C,GAAQnY,YAAc,IAAMlC,KAAKkC,eAEjCmY,GAAU/C,EAEZ5X,EAAW,MAAJA,OAAI,EAAJ6a,EAAMC,KAAKH,IAClB7Z,EAAa,MAALA,OAAK,EAALia,EAAOD,KAAKH,IACpB5Z,EAAmB,MAARA,OAAQ,EAARia,EAAUF,KAAKH,IAK5Bra,KAAKyZ,YAAc,CACjB/Z,KAAMA,EAAOib,EAAqBjb,GAAcqK,IAChDvJ,MAAOma,EAA0B,MAALna,IAASoa,GACrCna,SAAUA,EAAWka,EAAqBla,GAAkBsJ,MAYlE,WAA8BnB,EAA8BiS,GAC1D,MAAO,IAAIzT,KACT,IACEwB,KAAWxB,SACJ/C,GACHM,6CACFmW,KAAazW,MAIb0W,KAAqB1W,KAW7B,WAA6BA,GAC3B,MAAMA,EAQR,WAAmCE,EAA2CpF,GAC5E,MAAQ6b,yBAA0BrW,IAClCqW,GAAyBC,eAA2B,IAAMD,EAAsBzW,EAAcpF,IAQzF,MAAM2a,EAA6D,CACxEla,QAAQ,EACRF,KAAMqK,IACNvJ,MAAOoa,EACPna,SAAUsJ,2FCzNN,QAyBJhK,YAAoBmb,0BAdblb,aAAS,EAERA,gBAAmD,KAMnDA,gBAAoD,KAc5DkC,cACE,IAAIiZ,EAEJ,IAAKnb,KAAKJ,OAAQ,CAChBI,KAAKJ,QAAS,EAGd,MAAQwb,cAAepb,KACvB,GAAIob,EAEF,GADApb,KAAKob,WAAa,KACd5G,MAAM6G,QAAQD,GAChB,UAAWE,KAAUF,EACnBE,EAAOC,OAAOvb,WAGhBob,EAAWG,OAAOvb,MAItB,MAAQkb,mBAAoBlb,KAC5B,MAAI2D,KAAWuX,GACb,IACEA,UACOrS,GACPsS,EAAStS,aAAa2S,IAAsB3S,EAAEsS,OAAS,CAACtS,GAI5D,MAAQ4S,cAAezb,KACvB,GAAIyb,EAAY,CACdzb,KAAKyb,WAAa,KAClB,UAAWC,KAAYD,EACrB,IACEE,EAAaD,SACNrX,GACP8W,EAAe,MAANA,IAAU,GACnBS,aAAmBJ,IACjBL,EAAS,IAAIA,KAAW9W,EAAI8W,QAE5BA,EAAO5Y,KAAK8B,IAMpB,GAAI8W,EACF,MAAM,IAAIK,IAAoBL,IAuBpCtb,IAAI6b,SAGF,GAAIA,GAAYA,IAAa1b,KAC3B,GAAIA,KAAKJ,OAGP+b,EAAaD,OACR,CACL,GAAIA,aAAoBrc,EAAc,CAGpC,GAAIqc,EAAS9b,QAAU8b,EAASG,WAAW7b,MACzC,OAEF0b,EAASI,WAAW9b,OAErBA,KAAKyb,WAA4B,QAAflC,OAAKkC,kBAAU5X,QAAI,IAAItB,KAAKmZ,IAU7CG,WAAWP,GACjB,MAAQF,cAAepb,KACvB,OAAOob,IAAeE,GAAW9G,MAAM6G,QAAQD,IAAeA,EAAWW,SAAST,GAU5EQ,WAAWR,GACjB,MAAQF,cAAepb,KACvBA,KAAKob,WAAa5G,MAAM6G,QAAQD,IAAeA,EAAW7Y,KAAK+Y,GAASF,GAAcA,EAAa,CAACA,EAAYE,GAAUA,EAOpHU,cAAcV,GACpB,MAAQF,cAAepb,KACnBob,IAAeE,EACjBtb,KAAKob,WAAa,KACT5G,MAAM6G,QAAQD,KACvB5P,OAAU4P,EAAYE,GAkB1BC,OAAOG,GACL,MAAQD,cAAezb,KACvByb,MAAcjQ,KAAUiQ,EAAYC,GAEhCA,aAAoBrc,GACtBqc,EAASM,cAAchc,OAhLbX,QAAS,MACrB,MAAM4c,EAAQ,IAAI5c,EAClB4c,SAAMrc,QAAS,EACRqc,GAHc,GAqLlB,MAAMzC,EAAqBna,EAAa6E,MAEzC,WAAyBxD,GAC7B,OACEA,aAAiBrB,GAChBqB,GAAS,WAAYA,IAASiD,OAAWjD,EAAM6a,YAAW5X,KAAWjD,EAAMb,OAAQ8D,OAAWjD,EAAMwB,aAIzG,WAAsBwZ,IAChB/X,OAAW+X,GACbA,IAEAA,EAASxZ,gDC9MN,MAAMyC,EAAuB,CAClCuX,iBAAkB,KAClBlB,sBAAuB,KACvBnW,aAASjG,EACTud,uCAAuC,EACvCC,0BAA0B,yFCGtB,gBAAwCld,IAgB5Ca,YAAmB2E,EAAiC2X,GAClD1b,QADiBX,cAAiCA,sBAf1CA,cAA8B,KAC9BA,eAAoB,EACpBA,iBAAmC,MAkBvCsc,OAAQ5X,KACV1E,KAAKmX,KAAOzS,EAAOyS,MAKbF,WAAW9X,GACnB,OAAOa,KAAKuc,aAAavX,UAAU7F,GAG3Bod,aACR,MAAM5U,EAAU3H,KAAKwc,SACrB,QAAK7U,GAAWA,EAAQrH,aACtBN,KAAKwc,SAAWxc,KAAKqc,kBAEhBrc,KAAKwc,SAGJC,YACRzc,KAAK0c,UAAY,EACjB,MAAQC,eAAgB3c,KACxBA,KAAKwc,SAAWxc,KAAK2c,YAAc,KACxB,MAAXA,KAAaza,cAOfqG,UACE,IAAID,EAAatI,KAAK2c,YACtB,IAAKrU,EAAY,CACfA,EAAatI,KAAK2c,YAAc,IAAItd,KACpC,MAAMsI,EAAU3H,KAAKuc,aACrBjU,EAAWzI,IACTG,KAAK0E,OAAOM,UACV,IAAI8B,IACFa,OACA/I,EACA,KACEoB,KAAKyc,YACL9U,EAAQlH,YAET4D,IACCrE,KAAKyc,YACL9U,EAAQnH,MAAM6D,IAEhB,IAAMrE,KAAKyc,eAKbnU,EAAW1I,SACbI,KAAK2c,YAAc,KACnBrU,EAAajJ,YAGjB,OAAOiJ,EAOTsU,WACE,SAAOC,OAAsB7c,6ICgG3B,cAA8DoH,GAClE,MAAMrG,KAAYqN,MAAahH,GACzBF,GAAiB6G,QAAkB3G,IAEjCA,KAAM0V,EAAaC,WAASC,KAAqB5V,GAEzD,GAA2B,IAAvB0V,EAAY5U,OAId,OAAOgC,OAAK,GAAInJ,GAGlB,MAAMgD,EAAS,IAAI7E,IACjB8O,EACE8O,EACA/b,EACAgc,EAEKzN,IAAW2N,OAAaF,EAAMzN,GAE/BjG,MAIR,OAAOnC,EAAkBnD,EAAOwD,MAAKC,OAAiBN,IAAqCnD,EAGvF,WACJ+Y,EACA/b,EACAmc,EAAyC7T,KAEzC,OAAQlK,IAGNge,EACEpc,EACA,KACE,MAAQmH,UAAW4U,EAEbxN,EAAS,IAAIkF,MAAMtM,GAGzB,IAAI5F,EAAS4F,EAITkV,EAAuBlV,EAG3B,QAASgF,EAAI,EAAGA,EAAIhF,EAAQgF,IAC1BiQ,EACEpc,EACA,KACE,MAAM2D,GAASwF,OAAK4S,EAAY5P,GAAInM,GACpC,IAAIsc,IAAgB,EACpB3Y,EAAOM,UACL,IAAI8B,IACF3H,EACCuB,KAEC4O,EAAOpC,GAAKxM,GACP2c,KAEHA,IAAgB,EAChBD,KAEGA,GAGHje,EAAWO,KAAKwd,EAAe5N,EAAOlD,WAG1C,OACS9J,GAGLnD,EAAWsB,eAMrBtB,IAINA,IASN,WAAuB4B,EAAsCK,EAAqBhC,GAC5E2B,GACF6F,OAAgBxH,EAAc2B,EAAWK,GAEzCA,uECtLE,cAAoBgG,GACxB,OAAOiH,YAAYnE,KAAK9C,KAAMgH,MAAahH,8DCnEvC,WAAgD2D,GACpD,OAAO,IAAI7L,IAAgCC,KACzC0H,QAAUkE,KAAqB/F,UAAU7F,2DCzBtC,MAAM+E,EAAQ,IAAIhF,IAAmBC,GAAeA,EAAWsB,YA2DhE,WAAgBM,GACpB,OAAOA,EAGT,WAAwBA,GACtB,OAAO,IAAI7B,IAAmBC,GAAe4B,EAAU/B,SAAS,IAAMG,EAAWsB,aAJ9D6c,CAAevc,GAAamD,4GCyD3C,cAAsBkD,GAC1B,MAAMF,GAAiB6G,QAAkB3G,IACjCA,KAAMoC,EAASuT,WAASC,KAAqB5V,GAC/CrD,EAAS,IAAI7E,IAAYC,IAC7B,MAAQ+I,UAAWsB,EACnB,IAAKtB,EAEH,YADA/I,EAAWsB,WAGb,MAAM6O,EAAS,IAAIkF,MAAMtM,GACzB,IAAIqV,EAAuBrV,EACvBsV,EAAqBtV,EACzB,QAASuV,EAAc,EAAGA,EAAcvV,EAAQuV,IAAe,CAC7D,IAAI1a,GAAW,KACf8D,MAAU2C,EAAQiU,IAAczY,UAC9B,IAAI8B,IACF3H,EACCuB,IACMqC,IACHA,GAAW,EACXya,KAEFlO,EAAOmO,GAAe/c,GAExB,IAAM6c,SACN3e,EACA,OACO2e,IAAyBxa,KACvBya,GACHre,EAAWO,KAAKqd,GAAOE,OAAaF,EAAMzN,GAAUA,GAEtDnQ,EAAWsB,kBAOvB,OAAOyG,EAAiBnD,EAAOwD,MAAKC,OAAiBN,IAAmBnD,4DC5EpE,WAAkB2Z,EAA2B3c,GACjD,OAAOA,KAAY4c,KAAUD,EAAO3c,MAAa8F,MAAU6W,oGCnG7D,MAAME,EAA0B,CAAC,cAAe,kBAC1CC,EAAqB,CAAC,mBAAoB,uBAC1CC,EAAgB,CAAC,KAAM,OA2NvB,WACJC,EACAC,EACAC,EACA/W,GAMA,MAJIvD,KAAWsa,KACb/W,EAAiB+W,EACjBA,OAAUrf,GAERsI,EACF,OAAOgX,EAAaH,EAAQC,EAAWC,GAAiC1W,QAAKC,KAAiBN,IAUhG,MAAOrH,EAAK0b,GA4Ed,WAAuBwC,GACrB,SAAOpa,KAAWoa,EAAOI,oBAAqBxa,OAAWoa,EAAOK,qBA3E9DC,CAAcN,GACVF,EAAmBjM,IAAK0M,GAAgB1V,GAAiBmV,EAAOO,GAAYN,EAAWpV,EAASqV,IAuDxG,WAAiCF,GAC/B,SAAOpa,KAAWoa,EAAOQ,eAAgB5a,OAAWoa,EAAOS,gBAtDvDC,CAAwBV,GACtBH,EAAwBhM,IAAI8M,EAAwBX,EAAQC,IA6DpE,WAAmCD,GACjC,SAAOpa,KAAWoa,EAAOY,MAAOhb,OAAWoa,EAAOa,KA7D5CC,CAA0Bd,GAC1BD,EAAclM,IAAI8M,EAAwBX,EAAQC,IAClD,GAON,IAAKne,MACCif,KAAYf,GACd,OAAOrQ,OAAUqR,GAAmBb,EAAUa,EAAWf,EAAWC,GAA7DvQ,IACL7G,MAAUkX,IAOhB,IAAKle,EACH,MAAM,IAAIsE,UAAU,wBAGtB,OAAO,IAAIjF,IAAeC,IAIxB,MAAMyJ,EAAU,IAAIxB,KAAgBjI,EAAWO,KAAK,EAAI0H,GAAKc,OAASd,GAAOA,GAAK,IAElFvH,SAAI+I,GAEG,IAAM2S,EAAQ3S,KAWzB,WAAiCmV,EAAaC,GAC5C,OAAQM,GAAwB1V,GAAiBmV,EAAOO,GAAYN,EAAWpV,mDC1N3E,WAAoBI,EAA0BgW,EAAgCC,GAClF,OAAOzW,OAAM,IAAOQ,IAAcgW,EAAaC,+JCrE3C,WAAuBvB,GAC3B,GAAIA,aAAiBxe,IACnB,OAAOwe,EAET,GAAa,MAATA,EAAe,CACjB,MAAIwB,KAAoBxB,GACtB,OA0BA,WAAmCzT,GACvC,OAAO,IAAI/K,IAAYC,IACrB,MAAMggB,GAAMlV,EAAIgO,OAChB,IAAItU,OAAWwb,GAAIna,WACjB,OAAOma,GAAIna,UAAU7F,GAGvB,MAAM,IAAIgF,UAAU,oEAjCXib,CAAsB1B,GAE/B,MAAIoB,KAAYpB,GACd,OAyCA,WAA2B2B,GAC/B,OAAO,IAAIngB,IAAYC,IAUrB,QAAS+N,GAAI,EAAGA,GAAImS,EAAMnX,SAAW/I,EAAWS,OAAQsN,KACtD/N,EAAWO,KAAK2f,EAAMnS,KAExB/N,EAAWsB,aAvDF6e,CAAc5B,GAEvB,MAAI6B,KAAU7B,GACZ,OAwDA,WAAyB8B,GAC7B,OAAO,IAAItgB,IAAYC,IACrBqgB,EACGC,KACE/e,KACMvB,EAAWS,SACdT,EAAWO,KAAKgB,IAChBvB,EAAWsB,aAGd4D,IAAalF,EAAWqB,MAAM6D,KAEhCob,KAAK,KAAM1E,OApEL2E,CAAYhC,GAErB,MAAIiC,KAAgBjC,GAClB,OAAOkC,EAAkBlC,GAE3B,MAAImC,KAAWnC,GACb,OAkEA,WAA0BoC,GAC9B,OAAO,IAAI5gB,IAAYC,IACrB,UAAWuB,MAASof,EAElB,GADA3gB,EAAWO,KAAKgB,IACZvB,EAAWS,OACb,OAGJT,EAAWsB,aA1EFsf,CAAarC,GAEtB,MAAIsC,KAAqBtC,GACvB,OAiFA,WAAoCuC,GACxC,OAAOL,KAAkBM,KAAmCD,IAlFjDE,CAAuBzC,GAIlC,QAAM0C,KAAiC1C,GAuEnC,WAA+B2C,GACnC,OAAO,IAAInhB,IAAYC,KASzB,WAA0BkhB,EAAiClhB,qEACzD,IAA0BmhB,iBAAaC,0BAIrC,GAHAphB,EAAWO,KADS8gB,UAIhBrhB,EAAWS,OACb,yHAGJT,EAAWsB,cAjBTggB,CAAQJ,EAAelhB,GAAYuhB,MAAOrc,IAAQlF,EAAWqB,MAAM6D,iEC9DjE,WAAmBmP,EAAS,EAAGzS,EAA2BoF,KAC9D,OAAIqN,EAAS,IAEXA,EAAS,IAGJJ,OAAMI,EAAQA,EAAQzS,yFC8BzB,cAAmBqG,GACvB,MAAMrG,GAAYqN,QAAahH,GACzBkK,GAAaC,QAAUnK,EAAMvF,KAC7B2H,EAAUpC,EAChB,OAAQoC,EAAQtB,OAGO,IAAnBsB,EAAQtB,QAERrB,QAAU2C,EAAQ,OAElBgI,KAASF,EAATE,IAAqBtH,KAAKV,EAASzI,IALnCmD,qEC3DC,MAAMyc,EAAQ,IAAIzhB,IAAkB6K,KAKrC,aACJ,OAAO4W,2DCwCH,cAAmBvZ,GACvB,MAAMrG,KAAYqN,MAAahH,GAC/B,OAAO8C,OAAK9C,EAAarG,wFC7BrB,cAAqByI,GACzBA,OAE0B,KAF1BA,GAAUE,OAAeF,IAEVtB,QAAerB,QAAU2C,EAAQ,IAA4B,IAAItK,IAAcoT,EAAS9I,IAQnG,WAAsBA,GAC1B,OAAQrK,IACN,IAAIyhB,EAAgC,GAMpC,QAAS1T,EAAI,EAAG0T,IAAkBzhB,EAAWS,QAAUsN,EAAI1D,EAAQtB,OAAQgF,IACzE0T,EAAcre,QACZsE,MAAU2C,EAAQ0D,IAA0BlI,UAC1C,IAAI8B,IAAmB3H,EAAauB,IAClC,GAAIkgB,EAAe,CAGjB,QAASC,EAAI,EAAGA,EAAID,EAAc1Y,OAAQ2Y,IACxCA,IAAM3T,GAAK0T,EAAcC,GAAG3e,cAE9B0e,EAAgB,KAElBzhB,EAAWO,KAAKgB,iECuCtB,WAAqBogB,EAA0B/f,GACnD,MAAMggB,KAAepd,KAAWmd,GAAuBA,EAAsB,IAAMA,EAC7EE,EAAQ7hB,GAAkCA,EAAWqB,MAAMugB,KACjE,OAAO,IAAI7hB,IAAW6B,EAAa5B,GAAe4B,EAAU/B,SAASgiB,EAAa,EAAG7hB,GAAc6hB,gFCU/F,WACJC,EAAyB,EACzBC,EACAngB,EAA2BoF,KAI3B,IAAIgb,GAAmB,EAEvB,OAA2B,MAAvBD,KAIE/Z,OAAY+Z,GACdngB,EAAYmgB,EAIZC,EAAmBD,GAIhB,IAAIhiB,IAAYC,IAIrB,IAAIiW,KAAM/O,KAAY4a,IAAYA,EAAUlgB,EAAWtC,MAAQwiB,EAE3D7L,EAAM,IAERA,EAAM,GAIR,IAAIvK,EAAI,EAGR,OAAO9J,EAAU/B,SAAS,WACnBG,EAAWS,SAEdT,EAAWO,KAAKmL,KAEhB,GAASsW,EAGPnhB,KAAKhB,cAASJ,EAAWuiB,GAGzBhiB,EAAWsB,aAGd2U,oGCxID,cAAiBhO,GACrB,MAAMF,KAAiB6G,MAAkB3G,GAEnCoC,KAAUE,KAAetC,GAE/B,OAAOoC,EAAQtB,OACX,IAAIhJ,IAAuBC,IAGzB,IAAIkM,EAAuB7B,EAAQoI,IAAI,IAAM,IAKzCwP,EAAY5X,EAAQoI,IAAI,KAAM,GAGlCzS,EAAWU,IAAI,KACbwL,EAAU+V,EAAY,OAMxB,QAAS3D,EAAc,GAAIte,EAAWS,QAAU6d,EAAcjU,EAAQtB,OAAQuV,OAC5E5W,MAAU2C,EAAQiU,IAAczY,UAC9B,IAAI8B,IACF3H,EACCuB,IAKC,GAJA2K,EAAQoS,GAAalb,KAAK7B,GAItB2K,EAAQgW,MAAO9V,GAAWA,EAAOrD,QAAS,CAC5C,MAAMnE,EAAcsH,EAAQuG,IAAKrG,GAAWA,EAAOtJ,SAEnD9C,EAAWO,KAAKwH,EAAiBA,KAAkBnD,GAAUA,GAIzDsH,EAAQiW,KAAK,CAAC/V,EAAQ2B,KAAO3B,EAAOrD,QAAUkZ,EAAUlU,KAC1D/N,EAAWsB,aAIjB,KAGE2gB,EAAU3D,IAAe,GAIxBpS,EAAQoS,GAAavV,QAAU/I,EAAWsB,cAOnD,MAAO,KACL4K,EAAU+V,EAAY,QAG1Bld,oDC3GA,gBAAqCqT,KAazCxX,YACE0Z,EACA8H,EACAC,EACAC,EACQC,GAcR/gB,MAAM8Y,GAdEzZ,kBAeRA,KAAKia,MAAQsH,EACT,SAAuC7gB,GACrC,IACE6gB,EAAO7gB,SACA2D,GACPoV,EAAYjZ,MAAM6D,KAGtB1D,MAAMsZ,MACVja,KAAKma,OAASsH,EACV,SAAuCpd,GACrC,IACEod,EAAQpd,SACDA,GAEPoV,EAAYjZ,MAAM6D,WAGlBrE,KAAKkC,gBAGTvB,MAAMwZ,OACVna,KAAKoa,UAAYoH,EACb,WACE,IACEA,UACOnd,GAEPoV,EAAYjZ,MAAM6D,WAGlBrE,KAAKkC,gBAGTvB,MAAMyZ,UAGZlY,oBACE,MAAQtC,UAAWI,KACnBW,MAAMuB,eAELtC,IAAyB,QAAf+hB,OAAKD,kBAAU7d,cAAf7D,4EC7BT,WAAmBwO,GACvB,OAAOlI,OAAQ,CAAC5B,EAAQvF,KACtB,IAAI4D,GAAW,EACX0D,EAAsB,KACtBgI,EAA6C,KAC7CzG,GAAa,EAEjB,MAAM4Z,EAAc,KAGlB,GAFkB,MAAlBnT,KAAoBvM,cACpBuM,EAAqB,KACjB1L,EAAU,CACZA,GAAW,EACX,MAAMrC,EAAQ+F,EACdA,EAAY,KACZtH,EAAWO,KAAKgB,GAElBsH,GAAc7I,EAAWsB,YAGrBohB,EAAkB,KACtBpT,EAAqB,KACrBzG,GAAc7I,EAAWsB,YAG3BiE,EAAOM,UACL,IAAI8B,IACF3H,EACCuB,IACCqC,GAAW,EACX0D,EAAY/F,EACP+N,IACH5H,QAAU2H,EAAiB9N,IAAQsE,UAChCyJ,EAAqB,IAAI3H,IAAmB3H,EAAYyiB,EAAaC,KAI5E,KACE7Z,GAAa,IACXjF,IAAa0L,GAAsBA,EAAmB7O,SAAWT,EAAWsB,mFCrClF,WAAuBoP,EAAkB9O,EAA2BgU,KACxE,SAAO+M,KAAM,KAAM1O,OAAMvD,EAAU9O,wECoD/B,WACJoR,GAEA,OAAO7L,OAAQ,CAAC5B,EAAQvF,KACtB,IAEI4iB,EAFAjY,EAAgC,KAChCoJ,GAAY,EAGhBpJ,EAAWpF,EAAOM,UAChB,IAAI8B,IAAmB3H,OAAYP,OAAWA,EAAYyF,IACxD0d,GAAgBlb,QAAUsL,EAAS9N,EAAK2d,EAAW7P,EAAX6P,CAAqBtd,KACzDoF,GACFA,EAAS5H,cACT4H,EAAW,KACXiY,EAAc/c,UAAU7F,IAIxB+T,GAAY,KAKdA,IAMFpJ,EAAS5H,cACT4H,EAAW,KACXiY,EAAe/c,UAAU7F,sDC7EzB,aACJ,SAAOqS,KAAS,6DCkBZ,WACJhE,EACAtG,GAEA,OAAOvD,OAAWuD,MAAkBwG,KAASF,EAAStG,EAAgB,IAAKwG,OAASF,EAAS,+EChE/F,MAAMrF,EAAyC,CAC7CC,UAAW,IAAM,IAAItI,KA6EjB,WACJqS,EACAxN,EAA2BwD,GAE3B,MAAQC,aAAczD,EACtB,OAAO2B,OAAQ,CAAC5B,EAAQvF,KACtB,MAAMwI,EAAUS,KAChB8B,OAAKiI,ECzFH,WAA8B8P,GAClC,OAAO,IAAI/iB,IAAYC,GAA8B8iB,EAAajd,UAAU7F,IDwF5D+iB,CAAiBva,KAAW3C,UAAU7F,GACpDA,EAAWU,IAAI6E,EAAOM,UAAU2C,0EEzC9B,WAA0BsZ,EAAiBlgB,EAA2BoF,KAC1E,OAAOG,OAAQ,CAAC5B,EAAQvF,KACtB,IAAIgjB,EAAkC,KAClC1b,EAAsB,KACtB2b,EAA0B,KAE9B,MAAMrW,EAAO,KACX,GAAIoW,EAAY,CAEdA,EAAWjgB,cACXigB,EAAa,KACb,MAAMzhB,EAAQ+F,EACdA,EAAY,KACZtH,EAAWO,KAAKgB,KAGpB,aAIE,MAAM2hB,EAAaD,EAAYnB,EACzBxiB,EAAMsC,EAAUtC,MACtB,GAAIA,EAAM4jB,EAIR,OAFAF,EAAaniB,KAAKhB,cAASJ,EAAWyjB,EAAa5jB,QACnDU,EAAWU,IAAIsiB,GAIjBpW,IAGFrH,EAAOM,UACL,IAAI8B,IACF3H,EACCuB,IACC+F,EAAY/F,EACZ0hB,EAAWrhB,EAAUtC,MAGhB0jB,IACHA,EAAaphB,EAAU/B,SAASsjB,EAAcrB,GAC9C9hB,EAAWU,IAAIsiB,KAGnB,KAGEpW,IACA5M,EAAWsB,iBAGb7B,EACA,KAEE6H,EAAY0b,EAAa,oEChF7B,WAA+Bld,GACnC,OAAOqB,OAAQ,CAAC5B,EAAQvF,KACtB,IAAI4D,GAAW,EACf2B,EAAOM,UACL,IAAI8B,IACF3H,EACCuB,IACCqC,GAAW,EACX5D,EAAWO,KAAKgB,IAElB,KACOqC,GACH5D,EAAWO,KAAKuF,GAElB9F,EAAWsB,oFCQf,WAAmB2U,EAAoBrU,EAA2BoF,KACtE,MAAM0J,GAAWuD,OAAMgC,EAAKrU,GAC5B,OAAOwhB,OAAU,IAAM1S,uFCWnB,WACJ2S,EACAC,GAEA,OAAIA,EAEM/d,IACN4J,OAAOmU,EAAkBlb,MAAK4H,OAAK,MAAIuT,QAAmBhe,EAAO6C,KAAKgb,EAAUC,MAG7E9U,OAAS,CAAChN,EAAOyB,IAAUqgB,EAAsB9hB,EAAOyB,GAAOoF,QAAK4H,KAAK,MAAIwT,KAAMjiB,yEC+DtF,WACJkT,EACAlF,EAA+BrF,KAK/BuK,SAAuB,MAAVA,IAAcgP,GAEpBtc,OAAQ,CAAC5B,EAAQvF,KAGtB,IAAI0jB,EAEA/c,GAAQ,EAEZpB,EAAOM,UACL,IAAI8B,IAAmB3H,EAAauB,IAElC,MAAMoiB,EAAapU,EAAYhO,IAK3BoF,IAAU8N,EAAYiP,EAAaC,MAMrChd,GAAQ,EACR+c,EAAcC,EAGd3jB,EAAWO,KAAKgB,SAO1B,WAAwBiC,EAAQC,GAC9B,OAAOD,IAAMC,kDC/GT,WAAwDkM,EAAQiU,GACpE,OAAOC,OAAqB,CAAC7R,EAAMC,IAAS2R,EAAUA,EAAQ5R,EAAErC,GAAMsC,EAAEtC,IAAQqC,EAAErC,KAASsC,EAAEtC,iFCXzF,WACJtB,EACAtG,GAEA,OAAIA,EAEMxC,GACNA,EAAO6C,KAAK0b,EAAW,CAACtgB,EAAGuK,OAAMrG,MAAU2G,EAAQ7K,EAAGuK,IAAI3F,MAAKqK,OAAI,CAAChP,EAAQsgB,IAAYhc,EAAevE,EAAGC,EAAGsK,EAAGgW,QAE7G5c,OAAQ,CAAC5B,EAAQvF,KACtB,IAAIgD,EAAQ,EACR2H,EAAiC,KACjC9B,GAAa,EACjBtD,EAAOM,UACL,IAAI8B,IACF3H,EACCgkB,IACMrZ,IACHA,EAAW,IAAIhD,IAAmB3H,OAAYP,EAAW,KACvDkL,EAAW,KACX9B,GAAc7I,EAAWsB,cAE3BoG,QAAU2G,EAAQ2V,EAAYhhB,MAAU6C,UAAU8E,KAGtD,KACE9B,GAAa,GACZ8B,GAAY3K,EAAWsB,0ECtB5B,WACJ+M,EACA8D,EAAazP,IACbd,GAEAuQ,UAAcA,GAAc,GAAK,EAAIzP,IAAWyP,GACzChL,OAAQ,CAAC5B,EAAQvF,OACtBikB,KAEE1e,EACAvF,EACAqO,EACA8D,OAGA1S,GAGA,EACAmC,6DChCA,WAAoByJ,EAAiDF,GACzE,OAAOhE,OAAQ,CAAC5B,EAAQvF,KAEtB,IAAIgD,EAAQ,EAIZuC,EAAOM,UAIL,IAAI8B,IAAmB3H,EAAauB,GAAU8J,EAAUD,KAAKD,EAAS5J,EAAOyB,MAAYhD,EAAWO,KAAKgB,uDCLzG,WAAsB2iB,GAC1B,OAAO/c,OAAQ,CAAC5B,EAAQvF,KAGtB,IACEuF,EAAOM,UAAU7F,WAEjBA,EAAWU,IAAIwjB,sGCOf,WACJ7Y,EACAvF,GAEA,MAAMgK,EAAkB7F,UAAUlB,QAAU,EAC5C,OAAQxD,GACNA,EAAO6C,KACLiD,GAAYC,OAAO,CAACyE,EAAGhC,IAAM1C,EAAU0E,EAAGhC,EAAGxI,IAAW2E,KACxD8F,OAAK,GACLF,KAAkBG,KAAenK,IAAiBoK,OAAa,IAAM,IAAInK,wECnDzE,aACJ,OAAOoB,OAAQ,CAAC5B,EAAQvF,KACtBuF,EAAOM,UAAU,IAAI8B,IAAmB3H,EAAY4K,yGCgClD,WACJS,EACAvF,GAEA,MAAMgK,EAAkB7F,UAAUlB,QAAU,EAC5C,OAAQxD,GACNA,EAAO6C,KACLiD,GAAYC,OAAO,CAACyE,EAAGhC,IAAM1C,EAAU0E,EAAGhC,EAAGxI,IAAW2E,KACxDia,OAAS,GACTrU,KAAkBG,KAAenK,IAAiBoK,OAAa,IAAM,IAAInK,+DCnCzE,WAAoBsI,EAAyClD,GACjE,OAAOhE,OAAQ,CAAC5B,EAAQvF,KAEtB,IAAIgD,EAAQ,EAGZuC,EAAOM,UACL,IAAI8B,IAAmB3H,EAAauB,IAGlCvB,EAAWO,KAAK8N,EAAQjD,KAAKD,EAAS5J,EAAOyB,wDClB/C,WAAmBzB,GACvB,OAAOkR,OAAI,IAAMlR,6DCsBb,WAAmD4Q,EAAqBzP,KAC5E,OAAO6L,OAASrE,IAAUiI,uECzCtB,WACJ5M,EACAvF,EACAqO,EACA8D,EACAiS,EACAC,EACAC,EACAC,GAGA,MAAMnY,EAAc,GAEpB,IAAIjJ,EAAS,EAETH,EAAQ,EAER6F,GAAa,EAKjB,MAAM4K,EAAgB,KAIhB5K,IAAeuD,EAAOrD,SAAW5F,GACnCnD,EAAWsB,YAKTkjB,EAAajjB,GAAc4B,EAASgP,EAAasS,EAAWljB,GAAS6K,EAAOhJ,KAAK7B,GAEjFkjB,EAAcljB,IAIlB8iB,GAAUrkB,EAAWO,KAAKgB,GAI1B4B,IAKA,IAAIuhB,GAAgB,GAGpBhd,QAAU2G,EAAQ9M,EAAOyB,MAAU6C,UACjC,IAAI8B,IACF3H,EACC2V,IAGa,MAAZyO,KAAezO,GAEfyE,EAGEoK,EAAU7O,GAGV3V,EAAWO,KAAKoV,IAGpB,KAGE+O,GAAgB,QAGlBjlB,EACA,KAIE,GAAIilB,EAKF,IASE,IALAvhB,IAKOiJ,EAAOrD,QAAU5F,EAASgP,GAAY,CAC3C,MAAMwS,EAAgBvY,EAAOtJ,QAIzBwhB,KACF7c,KAAgBzH,EAAYskB,EAAmB,IAAMG,EAAWE,IAEhEF,EAAWE,GAIflR,UACOvO,GACPlF,EAAWqB,MAAM6D,QAS7BK,SAAOM,UACL,IAAI8B,IAAmB3H,EAAYwkB,EAAW,KAE5C3b,GAAa,EACb4K,OAMG,KACa,MAAlB8Q,+FClEE,WACJlW,EACAtG,EACAoK,EAAqBzP,KAErB,SAAI8B,KAAWuD,GAENwG,EAAS,CAAC/K,EAAGuK,KAAM0E,OAAI,CAAChP,EAAQsgB,IAAehc,EAAevE,EAAGC,EAAGsK,EAAGgW,GAApDtR,EAAyD/K,QAAU2G,EAAQ7K,EAAGuK,KAAMoE,IAC3E,iBAAnBpK,IAChBoK,EAAapK,IAGRZ,OAAQ,CAAC5B,EAAQvF,KAAeikB,OAAe1e,EAAQvF,EAAYqO,EAAS8D,+DCxB/E,WACJ1E,EACAC,EACAyE,EAAazP,KAEb,OAAOyE,OAAQ,CAAC5B,EAAQvF,KAEtB,IAAI8B,EAAQ4L,EAEZ,OAAOuW,OACL1e,EACAvF,EACA,CAACuB,EAAOyB,IAAUyK,EAAY3L,EAAOP,EAAOyB,GAC5CmP,EACC5Q,IACCO,EAAQP,IAEV,OACA9B,EACA,IAAOqC,EAAQ,4ECNf,WACJ8iB,EACA5R,GAEA,MAAMkK,GAAiB1Y,OAAWogB,GAA2BA,EAA0B,IAAMA,EAE7F,SAAIpgB,KAAWwO,IAIN5J,OAAQ4J,EAAU,CACvB/J,UAAWiU,IAIP3X,GAA0B,IAAIsN,IAA2BtN,EAAQ2X,uECpCrE,WAAuBtb,EAA0BG,EAAQ,GAC7D,OAAOoF,OAAQ,CAAC5B,EAAQvF,KACtBuF,EAAOM,UACL,IAAI8B,IACF3H,EACCuB,IAAUkG,OAAgBzH,EAAY4B,EAAW,IAAM5B,EAAWO,KAAKgB,GAAQQ,GAChF,OAAM0F,KAAgBzH,EAAY4B,EAAW,IAAM5B,EAAWsB,WAAYS,GACzEmD,MAAQuC,KAAgBzH,EAAY4B,EAAW,IAAM5B,EAAWqB,MAAM6D,GAAMnD,gECtB/E,aACJ,OAAOoF,OAAQ,CAAC5B,EAAQvF,KACtB,IAAI6kB,EACAC,GAAU,EACdvf,EAAOM,UACL,IAAI8B,IAAmB3H,EAAauB,IAClC,MAAMkD,EAAIogB,EACVA,EAAOtjB,EACPujB,GAAW9kB,EAAWO,KAAK,CAACkE,EAAGlD,IAC/BujB,GAAU,0ECgCZ,WAAwB9R,GAC5B,OAAOA,EAAYzN,IAAW6D,OAAQ4J,EAAR5J,CAAkB7D,GAAWA,IAAW0N,OAAU,IAAItS,IAAdsS,CAA4B1N,6DCtB9F,aACJ,OAAO4B,OAAQ,CAAC5B,EAAQvF,KACtB,IAAImJ,EAAkC,KAErC5D,EAAegY,YAEhB,MAAMwH,EAAa,IAAIpd,IAAmB3H,OAAYP,OAAWA,OAAWA,EAAW,KACrF,IAAK8F,GAAWA,EAAegY,WAAa,GAAK,IAAOhY,EAAegY,UAErE,YADApU,EAAa,MA6Bf,MAAM6b,EAAoBzf,EAAeiY,YACnCyH,EAAO9b,EACbA,EAAa,KAET6b,KAAsBC,GAAQD,IAAqBC,IACrDD,EAAiBjiB,cAGnB/C,EAAW+C,gBAGbwC,EAAOM,UAAUkf,GAEZA,EAAWtkB,SACd0I,EAAc5D,EAAoC6D,gFCxDlD,WAAoBoC,EAAQ9I,KAChC,OAAO8I,GAAS,EACZ,IAAMzG,KACNoC,OAAQ,CAAC5B,EAAQvF,KACf,IACI2K,EADAkJ,EAAQ,EAEZ,MAAMqR,EAAqB,KACzB,IAAInR,GAAY,EAChBpJ,EAAWpF,EAAOM,UAChB,IAAI8B,IAAmB3H,OAAYP,EAAW,OACtCoU,EAAQrI,EACRb,GACFA,EAAS5H,cACT4H,EAAW,KACXua,KAEAnR,GAAY,EAGd/T,EAAWsB,cAKbyS,IACFpJ,EAAS5H,cACT4H,EAAW,KACXua,MAGJA,6FC6CF,WAAmBpG,EAA0B,IACjD,MAAQ7V,YAAY,KAAM,IAAItI,KAAcwkB,gBAAe,EAAMC,mBAAkB,EAAMC,uBAAsB,GAASvG,EAUxH,OAAQwG,IACN,IAAInc,EAAuC,KACvCoc,EAAuC,KACvC/c,EAAiC,KACjCiV,EAAW,EACX+H,GAAe,EACfC,GAAa,EAEjB,MAAMC,EAAc,KACH,MAAfH,KAAiBxiB,cACjBwiB,EAAkB,MAIdI,EAAQ,KACZD,IACAvc,EAAaX,EAAU,KACvBgd,EAAeC,GAAa,GAExBG,EAAsB,KAG1B,MAAMX,GAAO9b,EACbwc,IACI,MAAJV,OAAMliB,eAGR,OAAOoE,OAAc,CAAC5B,GAAQvF,MAC5Byd,KACKgI,IAAeD,GAClBE,IAOF,MAAMG,GAAQrd,EAAiB,MAAPA,IAAWS,IAOnCjJ,GAAWU,IAAI,KACb+c,IAKiB,IAAbA,IAAmBgI,IAAeD,IACpCD,EAAkBO,EAAYF,EAAqBP,MAMvDQ,GAAKhgB,UAAU7F,IAEVmJ,IAMHA,EAAa,IAAInD,KAAe,CAC9BzF,KAAOgB,IAAUskB,GAAKtlB,KAAKgB,IAC3BF,MAAQ6D,KACNugB,GAAa,EACbC,IACAH,EAAkBO,EAAYH,EAAOR,EAAcjgB,IACnD2gB,GAAKxkB,MAAM6D,KAEb5D,SAAU,KACRkkB,GAAe,EACfE,IACAH,EAAkBO,EAAYH,EAAOP,GACrCS,GAAKvkB,eAGTyJ,OAAKxF,IAAQM,UAAUsD,KArDpBhC,CAuDJme,IAIP,WACEK,EACAnG,KACGvX,GAEH,OAAW,IAAPuX,GACFmG,IAEO,OAGE,IAAPnG,EACK,KAGFA,KAAMvX,GACVG,MAAK4H,OAAK,IACVnK,UAAU,IAAM8f,+DChIf,WACJI,EACAjT,EACAlR,WAEA,IAAIoK,EACAyR,GAAW,EACf,OAAIsI,GAAoD,iBAAvBA,GAC/B/Z,EAA0C,QAA7B+B,IAAmB/B,kBAAUtH,QAAIhC,IAC9CoQ,EAA0C,QAA7BkT,IAAmBlT,kBAAUzN,QAAI3C,IAC9C+a,IAAasI,EAAmBtI,SAChC7b,EAAYmkB,EAAmBnkB,WAE/BoK,EAA+B,MAAlB+Z,IAAsBrjB,OAE9BujB,KAAS,CACdhd,UAAW,IAAM,IAAIiK,IAAclH,EAAY8G,EAAYlR,GAC3DujB,cAAc,EACdC,iBAAiB,EACjBC,oBAAqB5H,mDC1GnB,WAAkBjS,GACtB,OAAOF,OAAO,CAACjH,EAAGrB,IAAUwI,GAASxI,6DCcjC,WAAuBqI,GAC3B,OAAOlE,OAAQ,CAAC5B,EAAQvF,KACtB,IAAIwV,GAAS,EACTxS,EAAQ,EACZuC,EAAOM,UACL,IAAI8B,IAAmB3H,EAAauB,IAAWiU,IAAWA,GAAUnK,EAAU9J,EAAOyB,QAAchD,EAAWO,KAAKgB,0ECKnH,cAA6B4O,GACjC,MAAMvO,KAAYqN,MAAakB,GAC/B,OAAOhJ,OAAQ,CAAC5B,EAAQvF,MAIrB4B,GAAYuN,OAAOgB,EAAQ5K,EAAQ3D,IAAauN,OAAOgB,EAAQ5K,IAASM,UAAU7F,qDCFjF,WAAyB4B,EAA0BG,EAAgB,GACvE,OAAOoF,OAAQ,CAAC5B,EAAQvF,KACtBA,EAAWU,IAAIkB,EAAU/B,SAAS,IAAM0F,EAAOM,UAAU7F,GAAa+B,0ECiBpE,WACJsM,EACAtG,GAEA,OAAOZ,OAAQ,CAAC5B,EAAQvF,KACtB,IAAIkmB,EAAyD,KACzDljB,EAAQ,EAER6F,GAAa,EAIjB,MAAM4K,EAAgB,IAAM5K,IAAeqd,GAAmBlmB,EAAWsB,WAEzEiE,EAAOM,UACL,IAAI8B,IACF3H,EACCuB,IAEgB,MAAf2kB,KAAiBnjB,cACjB,IAAIojB,EAAa,EACjB,MAAMC,EAAapjB,OAEnB0E,MAAU2G,EAAQ9M,EAAO6kB,IAAavgB,UACnCqgB,EAAkB,IAAIve,IACrB3H,EAIC2V,GAAe3V,EAAWO,KAAKwH,EAAiBA,EAAexG,EAAOoU,EAAYyQ,EAAYD,KAAgBxQ,GAC/G,KAIEuQ,EAAkB,KAClBzS,QAKR,KACE5K,GAAa,EACb4K,mECnEJ,WACJ1E,EACAhH,GAEA,OAAOvD,OAAWuD,MAAkB2N,KAAU,IAAM3G,EAAiBhH,IAAkB2N,OAAU,IAAM3G,sECfnG,WAAkBvD,GACtB,OAAOA,GAAS,EAEZ,IAAMzG,KACNoC,OAAQ,CAAC5B,EAAQvF,KACf,IAAIuH,EAAO,EACXhC,EAAOM,UACL,IAAI8B,IAAmB3H,EAAauB,MAI5BgG,GAAQiE,IACZxL,EAAWO,KAAKgB,GAIZiK,GAASjE,GACXvH,EAAWsB,oFClBrB,WAAsBkK,GAC1B,OAAOA,GAAS,EACZ,IAAMzG,KACNoC,OAAQ,CAAC5B,EAAQvF,KAKf,IAAIoM,EAAc,GAClB7G,EAAOM,UACL,IAAI8B,IACF3H,EACCuB,IAEC6K,EAAOhJ,KAAK7B,GAGZiK,EAAQY,EAAOrD,QAAUqD,EAAOtJ,SAElC,KAGE,UAAWvB,KAAS6K,EAClBpM,EAAWO,KAAKgB,GAElBvB,EAAWsB,iBAGb7B,EACA,KAEE2M,EAAS,wFChCjB,WAAuBgH,GAC3B,OAAOjM,OAAQ,CAAC5B,EAAQvF,MACtB0H,QAAU0L,GAAUvN,UAAU,IAAI8B,IAAmB3H,EAAY,IAAMA,EAAWsB,WAAYsJ,OAC7F5K,EAAWS,QAAU8E,EAAOM,UAAU7F,+DCSrC,WAAuBqL,EAAiDgb,GAAY,GACxF,OAAOlf,OAAQ,CAAC5B,EAAQvF,KACtB,IAAIgD,EAAQ,EACZuC,EAAOM,UACL,IAAI8B,IAAmB3H,EAAauB,IAClC,MAAMqD,EAASyG,EAAU9J,EAAOyB,MAC/B4B,GAAUyhB,IAAcrmB,EAAWO,KAAKgB,IACxCqD,GAAU5E,EAAWsB,8FCkDxB,WACJ6W,EACA9W,EACAC,GAKA,MAAMglB,GACJ9hB,OAAW2T,IAAmB9W,GAASC,EAElC,CAAEf,KAAM4X,EAA2E9W,QAAOC,YAC3F6W,EAEN,OAAOmO,GACHnf,OAAQ,CAAC5B,EAAQvF,WACM,QAArByD,IAAYoC,iBAASnB,cAArB4hB,GACA,IAAIC,GAAU,EACdhhB,EAAOM,UACL,IAAI8B,IACF3H,EACCuB,UACiB,QAAhBsX,IAAYtY,YAAImE,cAAhB4hB,EAAmB/kB,GACnBvB,EAAWO,KAAKgB,IAElB,WACEglB,GAAU,EACU,QAApB9J,IAAYnb,gBAAQoD,cAApB4hB,GACAtmB,EAAWsB,YAEZ4D,UACCqhB,GAAU,EACO,QAAjB1N,IAAYxX,aAAKqD,cAAjB4hB,EAAoBphB,GACpBlF,EAAWqB,MAAM6D,IAEnB,aACMqhB,IACqB,QAAvB9J,IAAY1Z,mBAAW2B,cAAvB4hB,IAEkB,QAApBzN,IAAY2N,gBAAQnhB,cAApBihB,QAQRpc,gFCpJC,MAAMuc,EAAwC,CACnDC,SAAS,EACTC,UAAU,GA+CN,WACJtX,GACEqX,UAASC,YAA6BF,GAExC,OAAOtf,OAAQ,CAAC5B,EAAQvF,KACtB,IAAI4D,GAAW,EACXgjB,EAAsB,KACtBC,EAAiC,KACjChe,GAAa,EAEjB,MAAMie,EAAgB,KACX,MAATD,KAAW9jB,cACX8jB,EAAY,KACRF,IACFI,IACAle,GAAc7I,EAAWsB,aAIvB0lB,EAAoB,KACxBH,EAAY,KACZhe,GAAc7I,EAAWsB,YAGrB2lB,EAAiB1lB,GACpBslB,GAAYnf,QAAU2H,EAAiB9N,IAAQsE,UAAU,IAAI8B,IAAmB3H,EAAY8mB,EAAeE,IAExGD,EAAO,KACX,GAAInjB,EAAU,CAIZA,GAAW,EACX,MAAMrC,EAAQqlB,EACdA,EAAY,KAEZ5mB,EAAWO,KAAKgB,IACfsH,GAAcoe,EAAc1lB,KAIjCgE,EAAOM,UACL,IAAI8B,IACF3H,EAMCuB,IACCqC,GAAW,EACXgjB,EAAYrlB,IACVslB,GAAcA,EAAUpmB,UAAYimB,EAAUK,IAASE,EAAc1lB,KAEzE,KACEsH,GAAa,KACX8d,GAAY/iB,GAAYijB,IAAcA,EAAUpmB,SAAWT,EAAWsB,oFCnC5E,WACJoP,EACA9O,EAA2BoF,IAC3BxB,EAASihB,KAET,MAAMS,GAAYjT,OAAMvD,EAAU9O,GAClC,OAAOulB,OAAS,IAAMD,EAAW1hB,uECnD7B,WAA0Boc,EAA0BwF,GACxD,OAAOjgB,OAAQ,CAAC5B,EAAQvF,KACtB,IAAI4D,GAAW,EACf2B,EAAOM,UACL,IAAI8B,IACF3H,EACCuB,IACCqC,GAAW,EACX5D,EAAWO,KAAKgB,IAElB,IAAOqC,EAAW5D,EAAWsB,WAAatB,EAAWqB,MAAMugB,SAMnE,aACE,OAAO,IAAI7b,oGCEP,cAAkCshB,GACtC,MAAMhZ,KAAUO,MAAkByY,GAElC,OAAOlgB,OAAQ,CAAC5B,EAAQvF,KACtB,MAAMsnB,EAAMD,EAAOte,OACbwe,EAAc,IAAIlS,MAAMiS,GAI9B,IAAI1jB,EAAWyjB,EAAO5U,IAAI,KAAM,GAG5B+U,GAAQ,EAMZ,QAASzZ,EAAI,EAAGA,EAAIuZ,EAAKvZ,OACvBrG,MAAU2f,EAAOtZ,IAAIlI,UACnB,IAAI8B,IACF3H,EACCuB,IACCgmB,EAAYxZ,GAAKxM,GACZimB,IAAU5jB,EAASmK,KAEtBnK,EAASmK,IAAK,GAKbyZ,EAAQ5jB,EAASse,MAAMhY,QAAetG,EAAW,QAKtDgH,MAMNrF,EAAOM,UACL,IAAI8B,IAAmB3H,EAAauB,IAClC,GAAIimB,EAAO,CAET,MAAMrX,EAAS,CAAC5O,KAAUgmB,GAC1BvnB,EAAWO,KAAK8N,EAAUA,KAAW8B,GAAUA,sFC5FnD,WAA8BoO,EAAoB3c,GACtD,OAAO,IAAI7B,IAAeC,IACxB,IAAIynB,EAKJhgB,cAAgBzH,EAAY4B,EAAW,KAErC6lB,EAAYlJ,EAAcmJ,QAE1BjgB,OACEzH,EACA4B,EACA,KACE,IAAIL,EACAomB,EACJ,MAEKpmB,QAAOomB,QAASF,EAASlnB,cACrB2E,GAGP,YADAlF,EAAWqB,MAAM6D,GAIfyiB,EAKF3nB,EAAWsB,WAGXtB,EAAWO,KAAKgB,IAGpB,GACA,KAQG,OAAMiD,KAAmB,MAARijB,OAAQ,EAARlN,EAAUqN,SAAWH,EAASG,4GCrDpD,WAAmCrJ,EAAyB3c,GAChE,IAAK2c,EACH,MAAM,IAAI/L,MAAM,2BAElB,OAAO,IAAIzS,IAAeC,KACxByH,OAAgBzH,EAAY4B,EAAW,KACrC,MAAM6lB,GAAWlJ,EAAMsJ,OAAOC,kBAC9BrgB,OACEzH,EACA4B,EACA,KACE6lB,GAASlnB,OAAO+f,KAAM1b,KAChBA,GAAO+iB,KAGT3nB,EAAWsB,WAEXtB,EAAWO,KAAKqE,GAAOrD,UAI7B,GACA,+ECCF,WAAuBgd,EAA2B3c,GACtD,GAAa,MAAT2c,EAAe,CACjB,MAAIwB,KAAoBxB,GACtB,OCzBA,WAAgCA,EAA6B3c,GACjE,OAAO8F,QAAU6W,GAAOnW,QAAKE,KAAY1G,MAAY2G,KAAU3G,IDwBpDmmB,CAAmBxJ,EAAO3c,GAEnC,MAAI+d,KAAYpB,GACd,OE9BA,WAA2BA,EAAqB3c,GACpD,OAAO,IAAI7B,IAAeC,IAExB,IAAI+N,GAAI,EAER,OAAOnM,EAAU/B,SAAS,WACpBkO,KAAMwQ,EAAMxV,OAGd/I,EAAWsB,YAIXtB,EAAWO,KAAKge,EAAMxQ,OAIjB/N,EAAWS,QACdI,KAAKhB,gBFYFmoB,CAAczJ,EAAO3c,GAE9B,MAAIwe,KAAU7B,GACZ,OG/BA,WAA6BA,EAAuB3c,GACxD,OAAO8F,QAAU6W,GAAOnW,QAAKE,KAAY1G,MAAY2G,KAAU3G,IH8BpDqmB,CAAgB1J,EAAO3c,GAEhC,MAAI4e,KAAgBjC,GAClB,OAAO2J,EAAsB3J,EAAO3c,GAEtC,MAAI8e,KAAWnC,GACb,OAAOpU,OAAiBoU,EAAO3c,GAEjC,MAAIif,KAAqBtC,GACvB,OIxCA,WAAwCA,EAA8B3c,GAC1E,OAAOsmB,GAAsBnH,OAAmCxC,GAAQ3c,GJuC7DumB,CAA2B5J,EAAO3c,GAG7C,QAAMqf,KAAiC1C,mDK9BnC,gBAAyBre,KAC7BU,YAAYgB,EAAsBC,GAChCL,QAYK3B,SAASiC,EAAWC,EAAgB,GACzC,OAAOlB,MCnBJ,MAAMunB,EAAqC,CAGhDC,eAAepgB,GACb,MAAQ1I,YAAa6oB,EACrB,QAAgB,MAARra,OAAQ,EAARA,EAAUsa,cAAeA,gBAAgBpgB,IAEnDqgB,cAAcC,GACZ,MAAQhpB,YAAa6oB,EACrB,QAAgB,MAARra,OAAQ,EAARA,EAAUua,gBAAiBA,eAAeC,IAEpDhpB,cAAUE,iBClBN,gBAA8B+oB,EAOlC5nB,YAAsBgB,EAAqCC,GACzDL,MAAMI,EAAWC,GADGhB,iBAAqCA,YAFjDA,cAAmB,EAMtBhB,SAASiC,EAAWC,EAAgB,GACzC,GAAIlB,KAAKJ,OACP,OAAOI,KAITA,KAAKiB,MAAQA,EAEb,MAAMM,EAAKvB,KAAKuB,GACVR,EAAYf,KAAKe,UAuBvB,OAAU,MAANQ,IACFvB,KAAKuB,GAAKvB,KAAK0C,eAAe3B,EAAWQ,EAAIL,IAK/ClB,KAAK4nB,SAAU,EAEf5nB,KAAKkB,MAAQA,EAEblB,KAAKuB,GAAKvB,KAAKuB,IAAMvB,KAAKsB,eAAeP,EAAWf,KAAKuB,GAAIL,GAEtDlB,KAGCsB,eAAeP,EAA2B8mB,EAAW3mB,EAAgB,GAC7E,OAAOqmB,cAA6BxmB,EAAUI,MAAMqZ,KAAKzZ,EAAWf,MAAOkB,GAGnEwB,eAAeolB,EAA4BvmB,EAASL,EAAuB,GAEnF,GAAa,MAATA,GAAiBlB,KAAKkB,QAAUA,IAA0B,IAAjBlB,KAAK4nB,QAChD,OAAOrmB,EAITgmB,gBAA+BhmB,GAQ1BH,QAAQH,EAAUC,GACvB,GAAIlB,KAAKJ,OACP,OAAO,IAAI+R,MAAM,gCAGnB3R,KAAK4nB,SAAU,EACf,MAAMpnB,EAAQR,KAAKqB,SAASJ,EAAOC,GACnC,GAAIV,EACF,OAAOA,GACmB,IAAjBR,KAAK4nB,SAAgC,MAAX5nB,KAAKuB,KAcxCvB,KAAKuB,GAAKvB,KAAK0C,eAAe1C,KAAKe,UAAWf,KAAKuB,GAAI,OAIjDF,SAASJ,EAAU8mB,GAC3B,IACIC,EADAC,GAAmB,EAEvB,IACEjoB,KAAKgB,KAAKC,SACH4H,GACPof,GAAU,EAIVD,EAAanf,GAAQ,IAAI8I,MAAM,sCAEjC,GAAIsW,EACF,YAAK/lB,cACE8lB,EAIX9lB,cACE,IAAKlC,KAAKJ,OAAQ,CAChB,MAAQ2B,KAAIR,aAAcf,MAClB+B,WAAYhB,EAEpBf,KAAKgB,KAAOhB,KAAKiB,MAAQjB,KAAKe,UAAY,KAC1Cf,KAAK4nB,SAAU,GAEfpc,OAAUzJ,EAAS/B,MACT,MAANuB,IACFvB,KAAKuB,GAAKvB,KAAK0C,eAAe3B,EAAWQ,EAAI,OAG/CvB,KAAKkB,MAAQ,KACbP,MAAMuB,gEC3IN,gBAA8BgX,IAkBlCnZ,YAAYmoB,EAAgCzpB,EAAoBya,SAC9DvY,MAAMunB,EAAiBzpB,GAlBlBuB,aAAmC,GAOnCA,cAAmB,EAQnBA,qBAAkBpB,EAMlBuC,MAAMa,GACX,MAAQD,WAAY/B,KAEpB,GAAIA,KAAKmoB,QAEP,YADApmB,EAAQQ,KAAKP,GAIf,IAAIxB,EACJR,KAAKmoB,SAAU,EAEf,MACO3nB,EAAQwB,EAAOZ,QAAQY,EAAOf,MAAOe,EAAOd,OAC/C,YAEMc,EAASD,EAAQE,SAI3B,GAFAjC,KAAKmoB,SAAU,EAEX3nB,EAAO,CACT,KAAQwB,EAASD,EAAQE,SACvBD,EAAOE,cAET,MAAM1B,gFCdL,MAAM4nB,EAA0B,IChCjC,gBAAuCvnB,IACpCM,MAAMa,GACXhC,KAAKmoB,SAAU,EACfnoB,KAAKqoB,gBAAazpB,EAElB,MAAQmD,WAAY/B,KACpB,IAAIQ,EACA2B,GAAQ,EACZH,EAASA,GAAUD,EAAQE,QAC3B,MAAM0I,EAAQ5I,EAAQmG,OAEtB,MACO1H,EAAQwB,EAAOZ,QAAQY,EAAOf,MAAOe,EAAOd,OAC/C,cAEOiB,EAAQwI,IAAU3I,EAASD,EAAQE,UAI9C,GAFAjC,KAAKmoB,SAAU,EAEX3nB,EAAO,CACT,OAAS2B,EAAQwI,IAAU3I,EAASD,EAAQE,UAC1CD,EAAOE,cAET,MAAM1B,KCrBN,gBAAuCM,IAC3Cf,YAAsBgB,EAA8CC,GAClEL,MAAMI,EAAWC,GADGhB,iBAA8CA,YAI1DsB,eAAeP,EAAoCQ,EAAUL,EAAgB,GAErF,OAAc,OAAVA,GAAkBA,EAAQ,EACrBP,MAAMW,eAAeP,EAAWQ,EAAIL,IAG7CH,EAAUgB,QAAQQ,KAAKvC,MAIhBe,EAAUsnB,aAAetnB,EAAUsnB,WAAappB,0BAA6C,IAAM8B,EAAUI,WAAMvC,MAElH8D,eAAe3B,EAAoCQ,EAAUL,EAAgB,GAIrF,GAAc,MAATA,GAAiBA,EAAQ,GAAgB,MAATA,GAAiBlB,KAAKkB,MAAQ,EACjE,OAAOP,MAAM+B,eAAe3B,EAAWQ,EAAIL,GAKZ,IAA7BH,EAAUgB,QAAQmG,SACpBjJ,yBAA4CsC,GAC5CR,EAAUsnB,gBAAazpB,MFMhB0pB,EAAiBF,iDG1BvB,MAAMnpB,EAAiD,CAG5DD,SAASqkB,GACP,IAAIkF,EAAUC,sBACVC,EAAkDC,qBACtD,MAAQhqB,YAAaO,EACjBP,IACF6pB,EAAU7pB,EAAS8pB,sBACnBC,EAAS/pB,EAASgqB,sBAEpB,MAAMhB,EAASa,EAAS9oB,IAItBgpB,OAAS7pB,EACTykB,EAAS5jB,KAEX,OAAO,IAAIJ,KAAa,IAAY,MAANopB,OAAM,EAAN5d,EAAS6c,KAEzCc,yBAAyBphB,GACvB,MAAQ1I,YAAaO,EACrB,QAAgB,MAAR0iB,OAAQ,EAARA,EAAU6G,wBAAyBA,0BAA0BphB,IAEvEshB,wBAAwBthB,GACtB,MAAQ1I,YAAaO,EACrB,QAAgB,MAAR0iB,OAAQ,EAARA,EAAU+G,uBAAwBA,yBAAyBthB,IAErE1I,cAAUE,0DC1CZ,IAEI+pB,EAFAC,EAAa,EAGjB,MAAMC,EAAwC,GAO9C,WAA4BnB,GAC1B,OAAIA,KAAUmB,WACLA,EAAcnB,IACd,GAQJ,MAAMoB,EAAY,CACvBC,aAAa7Y,GACX,MAAMwX,EAASkB,IACfC,SAAcnB,IAAU,EACnBiB,IACHA,EAAW9jB,QAAQC,WAErB6jB,EAASlJ,KAAK,IAAMuJ,EAAmBtB,IAAWxX,KAC3CwX,GAGTuB,eAAevB,GACbsB,EAAmBtB,MChCfqB,eAAcE,kBAAmBH,EAgB5BI,EAAuC,CAGlDH,gBAAgB3hB,GACd,MAAQ1I,YAAawqB,EACrB,QAAgB,MAARC,OAAQ,EAARA,EAAUJ,eAAgBA,MAAiB3hB,IAErD6hB,eAAevB,GACb,MAAQhpB,YAAawqB,EACrB,QAAgB,MAARC,OAAQ,EAARA,EAAUF,iBAAkBA,GAAgBvB,IAEtDhpB,cAAUE,iBCUL,MAAMwqB,EAAgB,ICnCvB,gBAA6BvoB,IAC1BM,MAAMa,GACXhC,KAAKmoB,SAAU,EACfnoB,KAAKqoB,gBAAazpB,EAElB,MAAQmD,WAAY/B,KACpB,IAAIQ,EACA2B,GAAQ,EACZH,EAASA,GAAUD,EAAQE,QAC3B,MAAM0I,EAAQ5I,EAAQmG,OAEtB,MACO1H,EAAQwB,EAAOZ,QAAQY,EAAOf,MAAOe,EAAOd,OAC/C,cAEOiB,EAAQwI,IAAU3I,EAASD,EAAQE,UAI9C,GAFAjC,KAAKmoB,SAAU,EAEX3nB,EAAO,CACT,OAAS2B,EAAQwI,IAAU3I,EAASD,EAAQE,UAC1CD,EAAOE,cAET,MAAM1B,KCrBN,gBAA6BM,IACjCf,YAAsBgB,EAAoCC,GACxDL,MAAMI,EAAWC,GADGhB,iBAAoCA,YAIhDsB,eAAeP,EAA0BQ,EAAUL,EAAgB,GAE3E,OAAc,OAAVA,GAAkBA,EAAQ,EACrBP,MAAMW,eAAeP,EAAWQ,EAAIL,IAG7CH,EAAUgB,QAAQQ,KAAKvC,MAIhBe,EAAUsnB,aAAetnB,EAAUsnB,WAAaa,eAA+BnoB,EAAUI,MAAMqZ,KAAKzZ,OAAWnC,MAE9G8D,eAAe3B,EAA0BQ,EAAUL,EAAgB,GAI3E,GAAc,MAATA,GAAiBA,EAAQ,GAAgB,MAATA,GAAiBlB,KAAKkB,MAAQ,EACjE,OAAOP,MAAM+B,eAAe3B,EAAWQ,EAAIL,GAKZ,IAA7BH,EAAUgB,QAAQmG,SACpBghB,iBAAiC3nB,GACjCR,EAAUsnB,gBAAazpB,MFShByqB,EAAOD,yDGOb,MAAMjjB,EAAiB,YAAItF,GAAeC,KAKpCiU,EAAQ5O,mCCjDd,MAAMoP,EAA+C,CAC1D9W,SAGU8W,EAAsB7W,UAAY4qB,MAAM7qB,MAElDC,cAAUE,oCCEL,MAAMqc,EAAmC,CAG9CsO,cAAcniB,GACZ,MAAQ1I,YAAauc,EACrB,QAAgB,MAARhF,OAAQ,EAARA,EAAUsT,aAAcA,eAAeniB,IAEjDoiB,aAAa9B,GACX,MAAQhpB,YAAauc,EACrB,QAAgB,MAARhF,OAAQ,EAARA,EAAUuT,eAAgBA,cAAc9B,IAElDhpB,cAAUE,oCCjBL,MAAMgoB,EARP,aACJ,MAAsB,mBAAXI,QAA0BA,OAAOJ,SAIrCI,OAAOJ,SAHL,aAMa6C,oCCPjB,MAAMpS,EAAwD,mBAAX2P,QAAyBA,OAAO3P,YAAe,gDCuBlG,MAAMnS,GAA6BG,aAAkBC,GAAW,WACrEA,EAAOtF,MACPA,KAAKuF,KAAO,aACZvF,KAAKwF,QAAU,6DCNV,MAAM4T,GAAuD/T,aACjEC,GACC,WACEA,EAAOtF,MACPA,KAAKuF,KAAO,0BACZvF,KAAKwF,QAAU,yDCRd,MAAMgW,GAA+CnW,aACzDC,GACC,SAA4C6V,GAC1C7V,EAAOtF,MACPA,KAAKwF,QAAU2V,EACX,GAAGA,EAAOjT,kDAClBiT,EAAOvJ,IAAI,CAACvN,EAAK6I,IAAM,GAAGA,EAAI,MAAM7I,EAAIqlB,cAAcC,KAAK,UACnD,GACJ3pB,KAAKuF,KAAO,sBACZvF,KAAKmb,OAASA,+ECvBpB,WAAiB9N,GACf,OAAOA,EAAIA,EAAInF,OAAS,GAGpB,WAA4Bd,GAChC,OAAOzD,OAAWuR,EAAK9N,IAASA,EAAKwiB,WAAQhrB,EAGzC,WAAuBwI,GAC3B,OAAOD,OAAY+N,EAAK9N,IAASA,EAAKwiB,WAAQhrB,EAG1C,WAAoBwI,EAAanC,GACrC,MAA6B,iBAAfiQ,EAAK9N,GAAqBA,EAAKwiB,MAAS3kB,oCCjBxD,MAAQoW,WAAY7G,OACZqV,iBAAgBC,UAAWC,EAAahN,KAAMiN,GAAY7f,OAQ5D,WAA+D/C,GACnE,GAAoB,IAAhBA,EAAKc,OAAc,CACrB,MAAMpC,EAAQsB,EAAK,GACnB,GAAIiU,EAAQvV,GACV,MAAO,CAAEsB,KAAMtB,EAAOiX,KAAM,MAE9B,GAYJ,WAAgB9S,GACd,OAAOA,GAAsB,iBAARA,GAAoB4f,EAAe5f,KAAS8f,EAb3DE,CAAOnkB,GAAQ,CACjB,MAAMiX,EAAOiN,EAAQlkB,GACrB,MAAO,CACLsB,KAAM2V,EAAKnL,IAAK9C,GAAQhJ,EAAMgJ,IAC9BiO,SAKN,MAAO,CAAE3V,KAAMA,EAAa2V,KAAM,wCCxBpC,MAAQ1B,WAAY7G,MAMd,WAA4BpN,GAChC,OAAuB,IAAhBA,EAAKc,QAAgBmT,EAAQjU,EAAK,IAAMA,EAAK,GAAMA,mBCFtD,WAAuBiG,EAA6B6c,GACxD,GAAI7c,EAAK,CACP,MAAMlL,EAAQkL,EAAI8c,QAAQD,GAC1B,GAAK/nB,GAASkL,EAAI4L,OAAO9W,EAAO,qCCC9B,WAA8BioB,GAMlC,MAAMC,EAAWD,EALDvP,IACdlJ,MAAMpH,KAAKsQ,GACXA,EAASyP,OAAQ,IAAI3Y,OAAQ2Y,QAI/BD,SAASP,UAAY3f,OAAOmQ,OAAO3I,MAAMmY,WACzCO,EAASP,UAAU/pB,YAAcsqB,EAC1BA,mCClBH,WAAuBtN,EAAgBzN,GAC3C,OAAOyN,EAAKzP,OAAO,CAACvJ,EAAQ+K,EAAK5B,KAAQnJ,EAAO+K,GAAOQ,EAAOpC,GAAKnJ,GAAS,4ECC9E,IAAIsW,EAAuD,KASrD,WAAuBnK,GAC3B,GAAIvL,0CAA8C,CAChD,MAAM4lB,GAAUlQ,EAKhB,GAJIkQ,IACFlQ,EAAU,CAAEmQ,aAAa,EAAOhqB,MAAO,OAEzC0P,IACIqa,EAAQ,CACV,MAAQC,cAAahqB,SAAU6Z,EAE/B,GADAA,EAAU,KACNmQ,EACF,MAAMhqB,QAMV0P,IAQE,WAAuB7L,GACvBM,2CAAgD0V,IAClDA,EAAQmQ,aAAc,EACtBnQ,EAAQ7Z,MAAQ6D,oBCrBd,WACJomB,EACA1pB,EACAC,EACAE,EAAQ,EACRwpB,GAAS,GAET,MAAMC,EAAuB5pB,EAAU/B,SAAS,WAC9CgC,IACI0pB,EACFD,EAAmB5qB,IAAIG,KAAKhB,SAAS,KAAMkC,IAE3ClB,KAAKkC,eAENhB,GAIH,GAFAupB,EAAmB5qB,IAAI8qB,IAElBD,EAKH,OAAOC,mCCzCL,WAAsBxZ,GAC1B,OAAOA,oDCDF,MAAM2N,EAAmB3N,GAA8BA,GAAyB,iBAAbA,EAAEjJ,QAAoC,mBAANiJ,gDCEpG,WAA6BlH,GACjC,OAAO+c,OAAOC,kBAAiBtjB,KAAc,MAAHsG,OAAG,EAAHgM,EAAM+Q,OAAOC,iCCInD,WAAsBvmB,GAC1B,OAAOA,aAAiB4oB,OAASsB,MAAMlqB,oCCJnC,WAAqBA,GACzB,MAAwB,mBAAVA,4ECAV,WAA8Bgd,GAClC,OAAO/Z,OAAW+Z,EAAMzF,gECFpB,WAAqByF,GACzB,SAAO/Z,KAAgB,MAAL+Z,OAAK,EAALiE,EAAQkF,+DCGtB,WAAuB5c,GAG3B,QAASA,IAAQA,aAAe/K,QAAeyE,KAAWsG,EAAIkN,QAASxT,OAAWsG,EAAIjF,4DCLlF,WAAoBtE,GACxB,OAAOiD,OAAgB,MAALjD,OAAK,EAALuV,EAAOwJ,uECJrB,WAAuDQ,6CAC3D,MAAM4K,EAAS5K,EAAe6K,YAC9B,IACE,OAAa,CACX,MAAQpqB,QAAOomB,gBAASjG,MAAMgK,EAAOE,QACrC,GAAIjE,EACF,2CAEFjG,MAAMngB,YAGRmqB,EAAOG,iBAIL,WAAkC/gB,GAGtC,OAAOtG,OAAc,MAAHsG,OAAG,EAAHY,EAAKigB,2DClBnB,WAAsBpqB,GAC1B,OAAOA,IAASiD,OAAWjD,EAAM1B,kECI7B,WAAkB0F,GACtB,OAAOf,OAAiB,MAANe,OAAM,EAANid,EAAQxK,MAOtB,WACJ6J,GAEA,OAAQtc,IACN,GAAI4X,EAAQ5X,GACV,OAAOA,EAAOyS,KAAK,SAA+B8T,GAChD,IACE,OAAOjK,EAAKiK,EAAcjrB,YACnBqE,GACPrE,KAAKQ,MAAM6D,MAIjB,MAAM,IAAIF,UAAU,0FC1BxB,MAAQkX,WAAY7G,MAUd,WAAiC0W,GACnC,OAAOtZ,OAAIxK,GATf,WAA2B8jB,EAA6B9jB,GACpD,OAAOiU,EAAQjU,GAAQ8jB,KAAM9jB,GAAQ8jB,EAAG9jB,GAQrB+jB,CAAYD,EAAI9jB,qBCbjC,qFCsEA,cAAkBgkB,GACtB,OAAOjT,EAAciT,GAIjB,WAA8BA,GAClC,OAAmB,IAAfA,EAAIljB,OACCmB,IAGU,IAAf+hB,EAAIljB,OACCkjB,EAAI,GAGN,SAAe1N,GACpB,OAAO0N,EAAI9d,OAAO,CAAC0W,EAAWkH,IAA4BA,EAAGlH,GAAOtG,8DC1ElE,WAA+BrZ,GACnC4W,eAA2B,KACzB,MAAQiB,oBAAqBvX,IAC7B,IAAIuX,EAKF,MAAM7X,EAHN6X,EAAiB7X,sBCbjB,WAA2CqZ,GAE/C,OAAO,IAAIvZ,UACT,gBACY,OAAVuZ,GAAmC,iBAAVA,EAAqB,oBAAsB,IAAIA,iKCR9E;;;;;cAOuD,OAEpD;;;;;;;;AASC2N,KAAKC,aAAa,iBAAkB,SAAUC,EAAQF,EAAMG,GACxD,IAAIC,EAAiBF,EAAOE,eAC5B,GAAKA,EAGL,KAAIC,EAAuBF,EAAIG,OAAO,kBACtCH,EAAII,YAAYL,EAAQ,iBAAkB,SAAU7sB,GAAY,OAAO,SAAUmtB,EAAMzkB,GACnF,IAAIic,EAAWjc,EAAKc,OAAS,EAAId,EAAK,GAAK,KAC3C,OAAIic,IACAjc,EAAK,GAAK,SAAUgD,EAASnH,GAIzB,QAHI6oB,EAAQ9rB,KACR+rB,EAAQ,GACRC,EAAWX,EAAKpW,QACXgX,EAAK,EAAGC,EAAY9hB,EAAS6hB,EAAKC,EAAUhkB,OAAQ+jB,IAAM,CAC/D,IAAIE,EAAQD,EAAUD,GAClBG,EAAOD,EAAMpO,OAAO2N,GACnBU,IACDA,EAAOJ,GAEX,IAAIK,EAAkBN,EAAMK,EAAK7mB,MAC5B8mB,IACDN,EAAMK,EAAK7mB,MAAQ8mB,EAAkB,CAAEjiB,QAAS,GAAIgiB,KAAMA,IAE9DC,EAAgBjiB,QAAQ7H,KAAK4pB,GAEjChiB,OAAO4S,KAAKgP,GAAO5b,QAAQ,SAAUmc,GACjC,IAAID,GAAkBN,EAAMO,GACxBD,GAAgBD,OAASf,EAAKpW,QAC9BoX,GAAgBD,KAAK5sB,IAAI6jB,EAAUyI,EAAO,CAACO,GAAgBjiB,QAASnH,GAAW,kBAG/EogB,EAAS9Y,KAAKuhB,EAAOO,GAAgBjiB,QAASnH,OAKvDmE,EAAKc,OAAS,EAAI,IAAIujB,EAAerkB,EAAK,IAAM,IAAIqkB,KAE/DD,EAAII,YAAYH,EAAe3B,UAAW,UAAW,SAAUprB,GAAY,OAAO,SAAUmtB,EAAMzkB,GAC9F,IAAI2W,EAAS3W,EAAKc,OAAS,EAAId,EAAK,GAAK,KACzC,IAAK2W,EACD,OAAOrf,EAAS4I,MAAMukB,EAAMzkB,GAEhC,IAAImlB,EAAUV,EAAKH,GACnB,OAAKa,IACDA,EAAUV,EAAKH,GAAwB,IAE3Ca,EAAQhqB,KAAKwb,GACbA,EAAO2N,GAAwBL,EAAKpW,QAC7BvW,EAAS4I,MAAMukB,EAAMzkB,MAEhCokB,EAAII,YAAYH,EAAe3B,UAAW,YAAa,SAAUprB,GAAY,OAAO,SAAUmtB,EAAMzkB,GAChG,IAAI2W,EAAS3W,EAAKc,OAAS,EAAId,EAAK,GAAK,KACzC,IAAK2W,EACD,OAAOrf,EAAS4I,MAAMukB,EAAMzkB,GAEhC,IAAImlB,EAAUV,EAAKH,GACnB,GAAIa,EACA,QAASrf,EAAI,EAAGA,EAAIqf,EAAQrkB,OAAQgF,IAChC,GAAIqf,EAAQrf,KAAO6Q,EAAQ,CACvBwO,EAAQtT,OAAO/L,EAAG,GAClB,MAIZ6Q,SAAO2N,QAAwB9sB,EACxBF,EAAS4I,MAAMukB,EAAMzkB,MAEhCokB,EAAII,YAAYH,EAAe3B,UAAW,aAAc,SAAUprB,GAAY,OAAO,SAAUmtB,EAAMzkB,GACjG,IAAImlB,EAAUV,EAAKH,GACnB,OAAIa,IACAA,EAAQpc,QAAQ,SAAU4N,GACtBA,EAAO2N,QAAwB9sB,IAEnCitB,EAAKH,QAAwB9sB,GAE1BF,EAAS4I,MAAMukB,EAAMzkB,UAvFemD,8CCPvD;;;;;cAOuD,OAEpD;;;;;;;;AASC,IAAIiiB,EAA+B,WAC/B,WAAuBC,QACS,IAAxBA,IAAkCA,EAAsB,MAC5DzsB,KAAKysB,oBAAsBA,EAC3BzsB,KAAKuF,KAAO,YACZvF,KAAK0sB,cAAgB,KACrB1sB,KAAK0R,WAAa,CAAE8a,cAAiBxsB,MACrCA,KAAK2sB,aAAe,KACpB3sB,KAAK4sB,cAAgB,KACrB5sB,KAAK6sB,wBAAyB,EAC9B7sB,KAAK8sB,MAAQ,GACb9sB,KAAK+sB,YAAYN,GAErBD,SAAc/b,IAAM,WAChB,OAAO4a,KAAKpW,QAAQxE,IAAI,kBAE5B+b,EAAcQ,SAAW,WACrB,OAAOR,EAAc/b,gBAAiB+b,GAE1CA,EAAcS,cAAgB,WAC1B,IAAKT,EAAcQ,WACf,MAAM,IAAIrb,MAAM,gEAEpB,OAAO6a,EAAc/b,OAEzB+b,EAAc1C,UAAUiD,YAAc,SAAUG,GAC5C,IAAIpB,EAAQ9rB,KACRmtB,EAAgBntB,KAAK0sB,gBAAkBQ,EAC3CltB,KAAK0sB,cAAgBQ,EACrBltB,KAAK2sB,cAAgB3sB,KAAK2sB,aAAaxc,QAAQ,SAAUrB,GAAO,cAAcgd,EAAMpa,WAAW5C,KAC/F9O,KAAK2sB,aAAe,KAChBO,GAAgBA,EAAaxb,aAC7B1R,KAAK2sB,aAAexiB,OAAO4S,KAAKmQ,EAAaxb,YAC7C1R,KAAK2sB,aAAaxc,QAAQ,SAAUid,GAAK,OAAOtB,EAAMpa,WAAW0b,GAAKF,EAAaxb,WAAW0b,MAG9FD,GAAiBntB,KAAK4sB,gBACrB5sB,KAAK4sB,cAAcS,WAAartB,KAAK4sB,cAAcU,aACpDttB,KAAK6sB,wBAAyB,IAGtCL,EAAc1C,UAAUyD,YAAc,WAClC,OAAOvtB,KAAK0sB,eAEhBF,EAAc1C,UAAU0D,cAAgB,WACjBxtB,KAAKutB,cACxBvtB,KAAK+sB,YAAY/sB,KAAKysB,sBAE1BD,EAAc1C,UAAU2D,kBAAoB,SAAUC,EAAoBC,EAAaC,GAC/E5tB,KAAK6sB,wBAA0B7sB,KAAK4sB,gBAGpC5sB,KAAK6sB,wBAAyB,EAC9B7sB,KAAK6tB,UAAUH,EAAoBC,EAAaC,EAAY5tB,KAAK4sB,iBAGzEJ,EAAc1C,UAAUgE,gBAAkB,SAAUC,GAChD,GAAK/tB,KAAK8sB,MAGV,QAAS5f,EAAI,EAAGA,EAAIlN,KAAK8sB,MAAM5kB,OAAQgF,IACnC,GAAIlN,KAAK8sB,MAAM5f,KAAO6gB,EAElB,YADA/tB,KAAK8sB,MAAM7T,OAAO/L,EAAG,IAKjCsf,EAAc1C,UAAUkE,4BAA8B,WAClD,GAA0B,IAAtBhuB,KAAK8sB,MAAM5kB,OACX,MAAO,GAEX,IASI+lB,EAAmB,+BATRjuB,KAAK8sB,MAAMlb,IAAI,SAAUmc,GACpC,IAAIG,EAAWH,EAAKI,MAChBhkB,OAAO4S,KAAKgR,EAAKI,MACZvc,IAAI,SAAU9C,GACf,OAAOA,EAAM,IAAMif,EAAKI,KAAKrf,KAE5B6a,KAAK,KACd,MAAO,SAAWoE,EAAKK,KAAO,aAAeL,EAAKrpB,OAAS,YAAcwpB,EAAW,MAErB,IAEnE,YAAKpB,MAAQ,GACNmB,GAEXzB,EAAc1C,UAAUuE,OAAS,SAAUX,EAAoBC,EAAaC,EAAYU,GACpF,OAAItuB,KAAK0sB,eAAiB1sB,KAAK0sB,cAAc2B,OAClCruB,KAAK0sB,cAAc2B,OAAOX,EAAoBC,EAAaC,EAAYU,GAGvEZ,EAAmBa,KAAKX,EAAYU,IAGnD9B,EAAc1C,UAAU0E,YAAc,SAAUd,EAAoBC,EAAaC,EAAYlvB,EAAUgG,GACnG,OAAI1E,KAAK0sB,eAAiB1sB,KAAK0sB,cAAc8B,YAClCxuB,KAAK0sB,cAAc8B,YAAYd,EAAoBC,EAAaC,EAAYlvB,EAAUgG,GAGtFgpB,EAAmBe,UAAUb,EAAYlvB,EAAUgG,IAGlE8nB,EAAc1C,UAAU4E,SAAW,SAAUhB,EAAoBC,EAAaC,EAAYlvB,EAAUiwB,EAAWC,EAAWlqB,GAEtH,OADA1E,KAAKytB,kBAAkBC,EAAoBC,EAAaC,GACpD5tB,KAAK0sB,eAAiB1sB,KAAK0sB,cAAcgC,SAClC1uB,KAAK0sB,cAAcgC,SAAShB,EAAoBC,EAAaC,EAAYlvB,EAAUiwB,EAAWC,EAAWlqB,GAGzGgpB,EAAmBmB,OAAOjB,EAAYlvB,EAAUiwB,EAAWC,EAAWlqB,IAGrF8nB,EAAc1C,UAAUgF,cAAgB,SAAUpB,EAAoBC,EAAaC,EAAYptB,GAC3F,OAAIR,KAAK0sB,eAAiB1sB,KAAK0sB,cAAcoC,cAClC9uB,KAAK0sB,cAAcoC,cAAcpB,EAAoBC,EAAaC,EAAYptB,GAG9EktB,EAAmBtd,YAAYwd,EAAYptB,IAG1DgsB,EAAc1C,UAAUiF,eAAiB,SAAUrB,EAAoBC,EAAaC,EAAYG,GAI5F,MAHkB,cAAdA,EAAKK,MACLpuB,KAAK8sB,MAAMvqB,KAAKwrB,GAEhB/tB,KAAK0sB,eAAiB1sB,KAAK0sB,cAAcqC,eAClC/uB,KAAK0sB,cAAcqC,eAAerB,EAAoBC,EAAaC,EAAYG,GAG/EL,EAAmBsB,aAAapB,EAAYG,IAG3DvB,EAAc1C,UAAUmF,aAAe,SAAUvB,EAAoBC,EAAaC,EAAYG,EAAMY,EAAWC,GAK3G,MAJkB,cAAdb,EAAKK,MACLpuB,KAAK8tB,gBAAgBC,GAEzB/tB,KAAKytB,kBAAkBC,EAAoBC,EAAaC,GACpD5tB,KAAK0sB,eAAiB1sB,KAAK0sB,cAAcuC,aAClCjvB,KAAK0sB,cAAcuC,aAAavB,EAAoBC,EAAaC,EAAYG,EAAMY,EAAWC,GAG9FlB,EAAmBwB,WAAWtB,EAAYG,EAAMY,EAAWC,IAG1EpC,EAAc1C,UAAUqF,aAAe,SAAUzB,EAAoBC,EAAaC,EAAYG,GAK1F,MAJkB,cAAdA,EAAKK,MACLpuB,KAAK8tB,gBAAgBC,GAEzB/tB,KAAKytB,kBAAkBC,EAAoBC,EAAaC,GACpD5tB,KAAK0sB,eAAiB1sB,KAAK0sB,cAAcyC,aAClCnvB,KAAK0sB,cAAcyC,aAAazB,EAAoBC,EAAaC,EAAYG,GAG7EL,EAAmB0B,WAAWxB,EAAYG,IAGzDvB,EAAc1C,UAAU+D,UAAY,SAAUnvB,EAAUuW,EAAS8I,EAAQsR,GACrErvB,KAAK4sB,cAAgByC,EACrBrvB,KAAS0sB,eAAiB1sB,KAAK0sB,cAAcmB,UACzC7tB,KAAK0sB,cAAcmB,UAAUnvB,EAAUuW,EAAS8I,EAAQsR,GAGxD3wB,EAAS4wB,QAAQvR,EAAQsR,IAG1B7C,EAlKwB,GAsKnCnB,KAAKmB,cAAmBA,GAjL2BjiB,oDCG9C,IAAUglB,IAHwDC,EAAQ;;;;;;;;AAY/EnE,KAAKC,aAAa,OAAQ,SAAUC,EAAQF,EAAMG,GAC9C,IAAIG,EAASN,EAAKoE,WACd5lB,EAAa,uBACb6lB,EAAc,wBACdC,EAAiB,2BACjBC,EAAyBzlB,OAAO0lB,iBA4EpCrE,EAAII,YAAY2D,EAAKrwB,WAAW4qB,UAAW,OAAQ,SAAUprB,GAAY,OAAO,SAAUmtB,EAAMzkB,GAC5F,IAAIiQ,EAAa3Y,EAAS4I,MAAMukB,EAAMzkB,GACtC,OAAIiQ,EAAWD,WACXC,EAAWD,SAAS0Y,MAAQzE,EAAKpW,QACjCuW,EAAII,YAAYvU,EAAWD,SAAU,OAAQ,SAAU2Y,GAAoB,OAAO,SAAUC,EAAcC,GACtG,OAAID,EAAaF,OAASE,EAAaF,QAAUzE,EAAKpW,QAC3C+a,EAAaF,MAAMtwB,IAAIuwB,EAAkBC,EAAcC,GAE3DF,EAAiBzoB,MAAM0oB,EAAcC,OAG7C5Y,KAEX,IAvFQ6Y,EAEAjZ,KAFAiZ,EAAsBX,EAAKrwB,WAAW4qB,WACnB6B,EAAO,eAC2BuE,EAAoBjZ,WAC7E2Y,EAAuBL,EAAKrwB,WAAW4qB,UAAW,CAC9CgG,MAAO,CAAEpvB,MAAO,KAAMyvB,UAAU,EAAMC,cAAc,GACpDC,YAAa,CAAE3vB,MAAO,KAAMyvB,UAAU,EAAMC,cAAc,GAC1DE,eAAgB,CAAE5vB,MAAO,KAAMyvB,UAAU,EAAMC,cAAc,GAC7D1rB,OAAQ,CACJ0rB,cAAc,EACd3f,IAAK,WACD,OAAOzQ,KAAKqwB,aAEhB3f,IAAK,SAAUhM,GACX1E,KAAK8vB,MAAQzE,EAAKpW,QAClBjV,KAAKqwB,YAAc3rB,IAG3BuS,WAAY,CACRmZ,cAAc,EACd3f,IAAK,WACD,GAAIzQ,KAAKswB,eACL,OAAOtwB,KAAKswB,eAEX,GAAItwB,KAAKD,cAAgBwvB,EAAKrwB,WAC/B,OAAO+X,EAEX,IAAIsZ,EAAQpmB,OAAO0f,eAAe7pB,MAClC,OAAOuwB,GAASA,EAAMtZ,YAE1BvG,IAAK,SAAU1L,GACXhF,KAAK8vB,MAAQzE,EAAKpW,QAKdjV,KAAKswB,eAJJtrB,EAIqB,WAClB,GAAIhF,KAAK8vB,OAAS9vB,KAAK8vB,QAAUzE,EAAKpW,QAAS,CAC3C,IAAIub,EAAaxwB,KAAK8vB,MAAMtwB,IAAIwF,EAAWhF,KAAMoJ,WACjD,GAA0B,mBAAfonB,EAA2B,CAClC,IAAIC,EAASzwB,KAAK8vB,MAClB,OAAO,WACH,OAAIW,IAAWpF,EAAKpW,QACTwb,EAAOjxB,IAAIgxB,EAAYxwB,KAAMoJ,WAEjConB,EAAWlpB,MAAMtH,KAAMoJ,YAIlC,OAAOonB,EAIX,OAAOxrB,EAAUsC,MAAMtH,KAAMoJ,YApBfpE,IA0BlCqX,eAAgB,CACZ5L,IAAK,WACD,OAAOzQ,KAAK0wB,qBAEhBhgB,IAAK,SAAUigB,GACX,IAAIvE,EAAOpsB,KAAK8vB,MAChB9vB,KAAK0wB,oBAAsB,WACvB,OAAItE,GAAQA,IAASf,EAAKpW,QACfmX,EAAK5sB,IAAImxB,EAAS3wB,KAAMoJ,WAE5BunB,EAAQrpB,MAAMtH,KAAMoJ,gBAoB3CwmB,EAAuBL,EAAKlwB,aAAayqB,UAAW,CAChDgG,MAAO,CAAEpvB,MAAO,KAAMyvB,UAAU,EAAMC,cAAc,GACpDQ,iBAAkB,CAAElwB,MAAO,KAAMyvB,UAAU,EAAMC,cAAc,GAC/DS,aAAc,CACVpgB,IAAK,WACD,GAAIzQ,KAAK4wB,kBAAoB5wB,KAAK8wB,wBAC9B,OAAO9wB,KAAK4wB,iBAEhB,IAAIL,EAAQpmB,OAAO0f,eAAe7pB,MAClC,OAAOuwB,GAASA,EAAMM,cAE1BngB,IAAK,SAAUxO,GACXlC,KAAK8vB,MAAQzE,EAAKpW,QAClBoD,GASIrY,KAAK8wB,yBAA0B,EAC/B9wB,KAAK4wB,iBAAmB,WACpB,OAAI5wB,KAAK8vB,OAAS9vB,KAAK8vB,QAAUzE,EAAKpW,QAC3BjV,KAAK8vB,MAAMtwB,IAAI0C,EAAalC,KAAMoJ,WAGlClH,EAAYoF,MAAMtH,KAAMoJ,cAdvCpJ,KAAK4wB,iBAAmB1uB,EAKxBlC,KAAK8wB,yBAA0B,OAiB7B,WAClB,IAAIpxB,EAAO6vB,EAAKhY,WAAWuS,UAAUpqB,KACjCc,EAAQ+uB,EAAKhY,WAAWuS,UAAUtpB,MAClCC,EAAW8uB,EAAKhY,WAAWuS,UAAUrpB,SACzC0J,OAAO4mB,eAAexB,EAAKhY,WAAWuS,UAAW,cAAe,CAC5DsG,cAAc,EACd3f,IAAK,WACD,OAAOzQ,KAAKgxB,kBAEhBtgB,IAAK,SAAU+I,GACXzZ,KAAK8vB,MAAQzE,EAAKpW,QAClBjV,KAAKgxB,iBAAmBvX,KAKhC8V,EAAKhY,WAAWuS,UAAUpqB,KAAO,WAC7B,IACIuxB,EAAmBjxB,KAAK8vB,MAG5B,OAAImB,GAAoBA,IAJN5F,EAAKpW,QAKZgc,EAAiBzxB,IAAIE,EAAMM,KAAMoJ,UAAWS,GAG5CnK,EAAK4H,MAAMtH,KAAMoJ,YAGhCmmB,EAAKhY,WAAWuS,UAAUtpB,MAAQ,WAC9B,IACIywB,EAAmBjxB,KAAK8vB,MAG5B,OAAImB,GAAoBA,IAJN5F,EAAKpW,QAKZgc,EAAiBzxB,IAAIgB,EAAOR,KAAMoJ,UAAWsmB,GAG7ClvB,EAAM8G,MAAMtH,KAAMoJ,YAGjCmmB,EAAKhY,WAAWuS,UAAUrpB,SAAW,WACjC,IACIwwB,EAAmBjxB,KAAK8vB,MAG5B,OAAImB,GAAoBA,IAJN5F,EAAKpW,QAKZgc,EAAiBzxB,IAAIiB,EAAUT,KAAMoJ,UAAWumB,GAGhDlvB,EAAS8J,KAAKvK,OAMjCkxB,iBChMQ,SAAU3F,GACtB,MAAM5sB,EAAc4sB,EAAO5sB,YAC3B,WAAc4G,IACV5G,GAAeA,EAAYwyB,MAAWxyB,EAAYwyB,KAAQ5rB,IAE9D,WAA4BA,GAAM6rB,IAC9BzyB,GAAeA,EAAY0yB,SAAc1yB,EAAY0yB,QAAW9rB,GAAM6rB,IAE1ED,EAAK,QAIL,MAAMG,EAAe/F,EAAOgG,sBAA2B,kBACvD,WAAoBhsB,IAChB,OAAO+rB,EAAe/rB,GAE1B,MAAMisB,GAAmE,IAAlDjG,EAAOkE,EAAW,4BACzC,GAAIlE,EAAOF,KAAS,CAUhB,GAAImG,GAAuD,mBAA9BjG,EAAOF,KAAQoE,WACxC,MAAM,IAAI9d,MAAM,wBAGhB,OAAO4Z,EAAOF,KA/BQ,IAkCxBA,GAlCwB,MAkC9B,SACItrB,YAAYub,EAAQgT,GAChBtuB,KAAKyxB,QAAUnW,EACftb,KAAK0xB,MAAQpD,EAAWA,EAAS/oB,MAAQ,UAAY,SACrDvF,KAAK2xB,YAAcrD,GAAYA,EAAS5c,YAAc,GACtD1R,KAAK4xB,cACD,IAAIC,GAAa7xB,KAAMA,KAAKyxB,SAAWzxB,KAAKyxB,QAAQG,cAAetD,8BAGvE,GAAI/C,EAAO1mB,UAAeitB,GAAQC,iBAC9B,MAAM,IAAIpgB,MAAM,iSAObqgB,kBACP,IAAI5F,EAAOf,GAAKpW,QAChB,KAAOmX,EAAK9Q,QACR8Q,EAAOA,EAAK9Q,OAEhB,OAAO8Q,EAEAnX,qBACP,OAAOgd,GAAkB7F,KAElB8F,yBACP,OAAOC,uBAGS5sB,EAAM2lB,EAAIkH,IAAkB,GAC5C,GAAIN,GAAQO,eAAe9sB,IAIvB,IAAK6sB,IAAmBZ,EACpB,MAAM7f,MAAM,yBAA2BpM,YAGrCgmB,EAAO,kBAAoBhmB,GAAO,CACxC,MAAM+sB,GAAW,QAAU/sB,EAC3B4rB,EAAKmB,IACLR,GAAQvsB,GAAQ2lB,EAAGK,EAAQF,GAAMkH,IACjCC,EAAmBF,GAAUA,KAGjChX,aACA,OAAOtb,KAAKyxB,QAEZlsB,WACA,OAAOvF,KAAK0xB,MAEhBjhB,IAAI3B,GACA,MAAMsd,EAAOpsB,KAAKyyB,YAAY3jB,GAC9B,GAAIsd,EACA,OAAOA,EAAKuF,YAAY7iB,GAEhC2jB,YAAY3jB,GACR,IAAImG,EAAUjV,KACd,KAAOiV,GAAS,CACZ,GAAIA,EAAQ0c,YAAYU,eAAevjB,GACnC,OAAOmG,EAEXA,EAAUA,EAAQwc,QAEtB,OAAO,KAEXlD,KAAKD,GACD,IAAKA,EACD,MAAM,IAAI3c,MAAM,sBACpB,OAAO3R,KAAK4xB,cAAcrD,KAAKvuB,KAAMsuB,GAEzCoE,KAAKrP,EAAU3e,GACX,GAAwB,mBAAb2e,EACP,MAAM,IAAI1R,MAAM,2BAA6B0R,GAEjD,MAAMsP,GAAY3yB,KAAK4xB,cAAcnD,UAAUzuB,KAAMqjB,EAAU3e,GACzD0nB,GAAOpsB,KACb,OAAO,WACH,OAAOosB,GAAKwG,WAAWD,GAAW3yB,KAAMoJ,UAAW1E,IAG3DlF,IAAI6jB,EAAUsL,EAAWC,GAAWlqB,IAChCutB,GAAoB,CAAE3W,OAAQ2W,GAAmB7F,KAAMpsB,MACvD,IACI,OAAOA,KAAK4xB,cAAc/C,OAAO7uB,KAAMqjB,EAAUsL,EAAWC,GAAWlqB,YAGvEutB,GAAoBA,GAAkB3W,QAG9CsX,WAAWvP,EAAUsL,EAAY,KAAMC,GAAWlqB,IAC9CutB,GAAoB,CAAE3W,OAAQ2W,GAAmB7F,KAAMpsB,MACvD,IACI,IACI,OAAOA,KAAK4xB,cAAc/C,OAAO7uB,KAAMqjB,EAAUsL,EAAWC,GAAWlqB,UAEpElE,IACH,GAAIR,KAAK4xB,cAAcxhB,YAAYpQ,KAAMQ,IACrC,MAAMA,YAKdyxB,GAAoBA,GAAkB3W,QAG9CuX,QAAQ9E,EAAMY,EAAWC,IACrB,GAAIb,EAAK3B,MAAQpsB,KACb,MAAM,IAAI2R,MAAM,+DACXoc,EAAK3B,MAAQ0G,IAASvtB,KAAO,gBAAkBvF,KAAKuF,KAAO,KAKpE,GAAIwoB,EAAK9sB,QAAU8xB,KAAiBhF,EAAKK,OAAS4E,IAAajF,EAAKK,OAASf,IACzE,OAEJ,MAAM4F,GAAelF,EAAK9sB,OAASiyB,GACnCD,IAAgBlF,EAAKoF,cAAcD,GAASvV,IAC5CoQ,EAAKqF,WACL,MAAMC,GAAelB,GACrBA,GAAepE,EACfkE,GAAoB,CAAE3W,OAAQ2W,GAAmB7F,KAAMpsB,MACvD,IACQ+tB,EAAKK,MAAQf,IAAaU,EAAKI,OAASJ,EAAKI,KAAKmF,aAClDvF,EAAKwF,cAAW30B,GAEpB,IACI,OAAOoB,KAAK4xB,cAAc1C,WAAWlvB,KAAM+tB,EAAMY,EAAWC,UAEzDpuB,GACH,GAAIR,KAAK4xB,cAAcxhB,YAAYpQ,KAAMQ,GACrC,MAAMA,WAOVutB,EAAK9sB,QAAU8xB,IAAgBhF,EAAK9sB,QAAUuyB,KAC1CzF,EAAKK,MAAQ4E,IAAcjF,EAAKI,MAAQJ,EAAKI,KAAKmF,WAClDL,IAAgBlF,EAAKoF,cAAcxV,GAAWuV,KAG9CnF,EAAKqF,SAAW,EAChBpzB,KAAKyzB,iBAAiB1F,GAAM,GAC5BkF,IACIlF,EAAKoF,cAAcJ,GAAcG,GAASH,MAGtDd,GAAoBA,GAAkB3W,OACtC6W,GAAekB,IAGvBrE,aAAajB,GACT,GAAIA,EAAK3B,MAAQ2B,EAAK3B,OAASpsB,KAAM,CAGjC,IAAI0zB,GAAU1zB,KACd,KAAO0zB,IAAS,CACZ,GAAIA,KAAY3F,EAAK3B,KACjB,MAAMza,MAAO,8BAA6B3R,KAAKuF,kDAAkDwoB,EAAK3B,KAAK7mB,QAE/GmuB,GAAUA,GAAQpY,QAG1ByS,EAAKoF,cAAcQ,GAAYZ,IAC/B,MAAMa,EAAgB,GACtB7F,EAAK8F,eAAiBD,EACtB7F,EAAK+B,MAAQ9vB,KACb,IACI+tB,EAAO/tB,KAAK4xB,cAAc5C,aAAahvB,KAAM+tB,SAE1C1pB,IAGH0pB,QAAKoF,cAAcK,GAASG,GAAYZ,IAExC/yB,KAAK4xB,cAAcxhB,YAAYpQ,KAAMqE,IAC/BA,GAEV,OAAI0pB,EAAK8F,iBAAmBD,GAExB5zB,KAAKyzB,iBAAiB1F,EAAM,GAE5BA,EAAK9sB,OAAS0yB,IACd5F,EAAKoF,cAAcxV,GAAWgW,IAE3B5F,EAEX+F,kBAAkBpvB,EAAQ2e,EAAU8K,GAAM4F,IACtC,OAAO/zB,KAAKgvB,aAAa,IAAIgF,GAAS1G,GAAW5oB,EAAQ2e,EAAU8K,GAAM4F,QAAgBn1B,IAE7Fq1B,kBAAkBvvB,EAAQ2e,EAAU8K,GAAM4F,GAAgBG,IACtD,OAAOl0B,KAAKgvB,aAAa,IAAIgF,GAAS3G,GAAW3oB,EAAQ2e,EAAU8K,GAAM4F,GAAgBG,KAE7FC,kBAAkBzvB,EAAQ2e,EAAU8K,GAAM4F,GAAgBG,IACtD,OAAOl0B,KAAKgvB,aAAa,IAAIgF,GAAShB,GAAWtuB,EAAQ2e,EAAU8K,GAAM4F,GAAgBG,KAE7F9E,WAAWrB,GACP,GAAIA,EAAK3B,MAAQpsB,KACb,MAAM,IAAI2R,MAAM,qEACXoc,EAAK3B,MAAQ0G,IAASvtB,KAAO,gBAAkBvF,KAAKuF,KAAO,KACpEwoB,EAAKoF,cAAciB,GAAWzW,GAAWuV,IACzC,IACIlzB,KAAK4xB,cAAcxC,WAAWpvB,KAAM+tB,SAEjC1pB,GAEH0pB,QAAKoF,cAAcK,GAASY,IAC5Bp0B,KAAK4xB,cAAcxhB,YAAYpQ,KAAMqE,GAC/BA,EAEV,YAAKovB,iBAAiB1F,GAAM,GAC5BA,EAAKoF,cAAcJ,GAAcqB,IACjCrG,EAAKqF,SAAW,EACTrF,EAEX0F,iBAAiB1F,EAAMpjB,GACnB,MAAMipB,GAAgB7F,EAAK8F,gBACd,GAATlpB,IACAojB,EAAK8F,eAAiB,MAE1B,QAAS3mB,GAAI,EAAGA,GAAI0mB,GAAc1rB,OAAQgF,KACtC0mB,GAAc1mB,IAAGumB,iBAAiB1F,EAAKK,KAAMzjB,IAKzD0gB,UAAKoE,WAAaA,EAvOZpE,IAlCwB,GA0Q9B,MAAMgJ,GAAc,CAChB9uB,KAAM,GACNsoB,UAAW,CAACnvB,GAAU8E,GAAGua,EAAQsR,IAAiB3wB,GAAS4wB,QAAQvR,EAAQsR,GAC3EN,eAAgB,CAACrwB,GAAU8E,GAAGua,EAAQgQ,IAASrvB,GAASswB,aAAajR,EAAQgQ,GAC7EkB,aAAc,CAACvwB,GAAU8E,GAAGua,EAAQgQ,EAAMY,GAAWC,KAAclwB,GAASwwB,WAAWnR,EAAQgQ,EAAMY,GAAWC,IAChHO,aAAc,CAACzwB,GAAU8E,GAAGua,EAAQgQ,IAASrvB,GAAS0wB,WAAWrR,EAAQgQ,IAE7E,SACIhuB,YAAYqsB,GAAMkI,EAAgBhG,GAC9BtuB,KAAKu0B,YAAc,CAAEjH,UAAa,EAAGD,UAAa,EAAG2F,UAAa,GAClEhzB,KAAKosB,KAAOA,GACZpsB,KAAKw0B,gBAAkBF,EACvBt0B,KAAKy0B,QAAUnG,IAAaA,GAAYA,EAASD,OAASC,EAAWgG,EAAeG,SACpFz0B,KAAK00B,UAAYpG,IAAaA,EAASD,OAASiG,EAAiBA,EAAeI,WAChF10B,KAAK20B,cACDrG,IAAaA,EAASD,OAASruB,KAAKosB,KAAOkI,EAAeK,eAC9D30B,KAAK40B,aACDtG,IAAaA,EAASE,YAAcF,EAAWgG,EAAeM,cAClE50B,KAAK60B,eACDvG,IAAaA,EAASE,YAAc8F,EAAiBA,EAAeO,gBACxE70B,KAAK80B,mBACDxG,IAAaA,EAASE,YAAcxuB,KAAKosB,KAAOkI,EAAeQ,oBACnE90B,KAAK+0B,UAAYzG,IAAaA,EAASI,SAAWJ,EAAWgG,EAAeS,WAC5E/0B,KAAKg1B,YACD1G,IAAaA,EAASI,SAAW4F,EAAiBA,EAAeU,aACrEh1B,KAAKi1B,gBACD3G,IAAaA,EAASI,SAAW1uB,KAAKosB,KAAOkI,EAAeW,iBAChEj1B,KAAKk1B,eACD5G,IAAaA,EAASQ,cAAgBR,EAAWgG,EAAeY,gBACpEl1B,KAAKm1B,iBACD7G,IAAaA,EAASQ,cAAgBwF,EAAiBA,EAAea,kBAC1En1B,KAAKo1B,qBACD9G,IAAaA,EAASQ,cAAgB9uB,KAAKosB,KAAOkI,EAAec,sBACrEp1B,KAAKq1B,gBACD/G,IAAaA,EAASS,eAAiBT,EAAWgG,EAAee,iBACrEr1B,KAAKs1B,kBAAoBhH,IACpBA,EAASS,eAAiBuF,EAAiBA,EAAegB,mBAC/Dt1B,KAAKu1B,sBACDjH,IAAaA,EAASS,eAAiB/uB,KAAKosB,KAAOkI,EAAeiB,uBACtEv1B,KAAKw1B,cACDlH,IAAaA,EAASW,aAAeX,EAAWgG,EAAekB,eACnEx1B,KAAKy1B,gBACDnH,IAAaA,EAASW,aAAeqF,EAAiBA,EAAemB,iBACzEz1B,KAAK01B,oBACDpH,IAAaA,EAASW,aAAejvB,KAAKosB,KAAOkI,EAAeoB,qBACpE11B,KAAK21B,cACDrH,IAAaA,EAASa,aAAeb,EAAWgG,EAAeqB,eACnE31B,KAAK41B,gBACDtH,IAAaA,EAASa,aAAemF,EAAiBA,EAAesB,iBACzE51B,KAAK61B,oBACDvH,IAAaA,EAASa,aAAenvB,KAAKosB,KAAOkI,EAAeuB,qBACpE71B,KAAK81B,WAAa,KAClB91B,KAAK+1B,aAAe,KACpB/1B,KAAKg2B,kBAAoB,KACzBh2B,KAAKi2B,iBAAmB,KACxB,MAAMC,GAAkB5H,GAAYA,EAAST,WAEzCqI,IADkB5B,GAAkBA,EAAewB,cAInD91B,KAAK81B,WAAaI,GAAkB5H,EAAW+F,GAC/Cr0B,KAAK+1B,aAAezB,EACpBt0B,KAAKg2B,kBAAoBh2B,KACzBA,KAAKi2B,iBAAmB7J,GACnBkC,EAASS,iBACV/uB,KAAKq1B,gBAAkBhB,GACvBr0B,KAAKs1B,kBAAoBhB,EACzBt0B,KAAKu1B,sBAAwBv1B,KAAKosB,MAEjCkC,EAASW,eACVjvB,KAAKw1B,cAAgBnB,GACrBr0B,KAAKy1B,gBAAkBnB,EACvBt0B,KAAK01B,oBAAsB11B,KAAKosB,MAE/BkC,EAASa,eACVnvB,KAAK21B,cAAgBtB,GACrBr0B,KAAK41B,gBAAkBtB,EACvBt0B,KAAK61B,oBAAsB71B,KAAKosB,OAI5CmC,KAAKX,GAAYU,GACb,OAAOtuB,KAAKy0B,QAAUz0B,KAAKy0B,QAAQpG,OAAOruB,KAAK00B,UAAW10B,KAAKosB,KAAMwB,GAAYU,GAC7E,IAAIjD,GAAKuC,GAAYU,GAE7BG,UAAUb,GAAYvK,EAAU3e,GAC5B,OAAO1E,KAAK40B,aACR50B,KAAK40B,aAAapG,YAAYxuB,KAAK60B,eAAgB70B,KAAK80B,mBAAoBlH,GAAYvK,EAAU3e,GAClG2e,EAERwL,OAAOjB,GAAYvK,EAAUsL,EAAWC,GAAWlqB,IAC/C,OAAO1E,KAAK+0B,UAAY/0B,KAAK+0B,UAAUrG,SAAS1uB,KAAKg1B,YAAah1B,KAAKi1B,gBAAiBrH,GAAYvK,EAAUsL,EAAWC,GAAWlqB,IAChI2e,EAAS/b,MAAMqnB,EAAWC,IAElCxe,YAAYwd,GAAYptB,GACpB,OAAOR,KAAKk1B,gBACRl1B,KAAKk1B,eAAepG,cAAc9uB,KAAKm1B,iBAAkBn1B,KAAKo1B,qBAAsBxH,GAAYptB,GAGxGwuB,aAAapB,GAAYG,GACrB,IAAIoI,EAAapI,EACjB,GAAI/tB,KAAKq1B,gBACDr1B,KAAK81B,YACLK,EAAWtC,eAAetxB,KAAKvC,KAAKg2B,mBAGxCG,EAAan2B,KAAKq1B,gBAAgBtG,eAAe/uB,KAAKs1B,kBAAmBt1B,KAAKu1B,sBAAuB3H,GAAYG,GAE5GoI,IACDA,EAAapI,WAGbA,EAAKqI,WACLrI,EAAKqI,WAAWrI,WAEXA,EAAKK,MAAQd,GAIlB,MAAM,IAAI3b,MAAM,+BAHhBmiB,EAAkB/F,GAM1B,OAAOoI,EAEXjH,WAAWtB,GAAYG,EAAMY,EAAWC,IACpC,OAAO5uB,KAAKw1B,cAAgBx1B,KAAKw1B,cAAcvG,aAAajvB,KAAKy1B,gBAAiBz1B,KAAK01B,oBAAqB9H,GAAYG,EAAMY,EAAWC,IACrIb,EAAK1K,SAAS/b,MAAMqnB,EAAWC,IAEvCQ,WAAWxB,GAAYG,GACnB,IAAIrtB,EACJ,GAAIV,KAAK21B,cACLj1B,EAAQV,KAAK21B,cAAcxG,aAAanvB,KAAK41B,gBAAiB51B,KAAK61B,oBAAqBjI,GAAYG,OAEnG,CACD,IAAKA,EAAKwF,SACN,MAAM5hB,MAAM,0BAEhBjR,EAAQqtB,EAAKwF,SAASxF,GAE1B,OAAOrtB,EAEX4uB,QAAQ1B,GAAYyI,GAGhB,IACIr2B,KAAK81B,YACD91B,KAAK81B,WAAWjI,UAAU7tB,KAAK+1B,aAAc/1B,KAAKi2B,iBAAkBrI,GAAYyI,SAEjFhyB,GACHrE,KAAKoQ,YAAYwd,GAAYvpB,IAIrCovB,iBAAiBrF,GAAMzjB,GACnB,MAAM2rB,EAASt2B,KAAKu0B,YACdvQ,GAAOsS,EAAOlI,IACd1uB,GAAO42B,EAAOlI,IAAQpK,GAAOrZ,EACnC,GAAIjL,GAAO,EACP,MAAM,IAAIiS,MAAM,4CAER,GAARqS,IAAqB,GAARtkB,IAObM,KAAKsvB,QAAQtvB,KAAKosB,KANF,CACZkB,UAAWgJ,EAAOhJ,UAAe,EACjCD,UAAWiJ,EAAOjJ,UAAe,EACjC2F,UAAWsD,EAAOtD,UAAe,EACjCuD,OAAQnI,MAMxB,SACIruB,YAAYquB,GAAM1pB,EAAQ2e,EAAUpF,GAASmY,GAAY7C,IAarD,GAXAvzB,KAAK8vB,MAAQ,KACb9vB,KAAKozB,SAAW,EAEhBpzB,KAAK6zB,eAAiB,KAEtB7zB,KAAKw2B,OAAS,eACdx2B,KAAKouB,KAAOA,GACZpuB,KAAK0E,OAASA,EACd1E,KAAKmuB,KAAOlQ,GACZje,KAAKo2B,WAAaA,GAClBp2B,KAAKuzB,SAAWA,IACXlQ,EACD,MAAM,IAAI1R,MAAM,2BAEpB3R,KAAKqjB,SAAWA,EAChB,MAAMwI,EAAO7rB,KAGTA,KAAK6uB,OADLT,KAAS4E,IAAa/U,IAAWA,GAAQwY,KAC3BzC,GAAS9E,WAGT,WACV,OAAO8E,GAAS9E,WAAW3kB,KAAKghB,EAAQM,EAAM7rB,KAAMoJ,8BAI9C2kB,GAAMhQ,EAAQ3W,GACvB2mB,KACDA,GAAO/tB,MAEX02B,KACA,IACI3I,UAAKqF,WACErF,GAAK3B,KAAKyG,QAAQ9E,GAAMhQ,EAAQ3W,WAGN,GAA7BsvB,IACAC,KAEJD,MAGJtK,WACA,OAAOpsB,KAAK8vB,MAEZ7uB,YACA,OAAOjB,KAAKw2B,OAEhBI,wBACI52B,KAAKmzB,cAAcJ,GAAcY,IAGrCR,cAAc0D,GAASC,EAAYC,GAC/B,GAAI/2B,KAAKw2B,SAAWM,GAAc92B,KAAKw2B,SAAWO,EAO9C,MAAM,IAAIplB,MAAO,GAAE3R,KAAKouB,SAASpuB,KAAK0E,mCAAmCmyB,yBAA8BC,KAAcC,EAAa,QAAWA,EAAa,IAAO,YAAY/2B,KAAKw2B,YANlLx2B,KAAKw2B,OAASK,GACVA,IAAW9D,KACX/yB,KAAK6zB,eAAiB,MAOlCnK,WACI,OAAI1pB,KAAKmuB,WAAsC,IAAvBnuB,KAAKmuB,KAAK6I,SACvBh3B,KAAKmuB,KAAK6I,SAAStN,WAGnBvf,OAAO2f,UAAUJ,SAASnf,KAAKvK,MAK9Ci3B,SACI,MAAO,CACH7I,KAAMpuB,KAAKouB,KACXntB,MAAOjB,KAAKiB,MACZyD,OAAQ1E,KAAK0E,OACb0nB,KAAMpsB,KAAKosB,KAAK7mB,KAChB6tB,SAAUpzB,KAAKozB,WAS3B,MAAM8D,GAAmBzH,EAAW,cAC9B0H,GAAgB1H,EAAW,WAC3B2H,GAAa3H,EAAW,QAC9B,IAEI4H,GAFAC,GAAkB,GAClBC,IAA4B,EAEhC,WAA2BxJ,IAGvB,GAAkC,IAA9B2I,IAA8D,IAA3BY,GAAgBpvB,OAOnD,GALKmvB,IACG9L,EAAO4L,MACPE,GAA8B9L,EAAO4L,IAAeryB,QAAQ,IAGhEuyB,GAA6B,CAC7B,IAAIG,GAAaH,GAA4BD,IACxCI,KAGDA,GAAaH,GAA4B5X,MAE7C+X,GAAWjtB,KAAK8sB,GAA6BV,SAG7CpL,EAAO2L,IAAkBP,GAAqB,GAGtD5I,IAAQuJ,GAAgB/0B,KAAKwrB,IAEjC,cACI,IAAKwJ,GAA2B,CAE5B,IADAA,IAA4B,EACrBD,GAAgBpvB,QAAQ,CAC3B,MAAM1G,GAAQ81B,GACdA,GAAkB,GAClB,QAASpqB,GAAI,EAAGA,GAAI1L,GAAM0G,OAAQgF,KAAK,CACnC,MAAM6gB,EAAOvsB,GAAM0L,IACnB,IACI6gB,EAAK3B,KAAKyG,QAAQ9E,EAAM,KAAM,YAE3BvtB,GACH+xB,GAAKrW,iBAAiB1b,KAIlC+xB,GAAKkF,qBACLF,IAA4B,GAQpC,MAAMzE,GAAU,CAAEvtB,KAAM,WAClBwtB,GAAe,eAAgBY,GAAa,aAAchW,GAAY,YAAauV,GAAU,UAAWkB,GAAY,YAAaZ,GAAU,UAC3IlG,GAAY,YAAaD,GAAY,YAAa2F,GAAY,YAC9DlB,GAAU,GACVS,GAAO,CACT5G,OAAQ8D,EACRiI,iBAAkB,IAAMzF,GACxB/V,iBAAkBnS,GAClB0tB,mBAAoB1tB,GACpB+pB,kBAAmBA,EACnB6D,kBAAmB,KAAOtM,GAAKoE,EAAW,oCAC1CmI,iBAAkB,IAAM,GACxBC,kBAAmB9tB,GACnB6hB,YAAa,IAAM7hB,GACnB+tB,cAAe,IAAM,GACrBC,UAAW,IAAMhuB,GACjBiuB,eAAgB,IAAMjuB,GACtBkuB,oBAAqB,IAAMluB,GAC3BmuB,WAAY,KAAM,EAClBC,iBAAkB,OAClBC,qBAAsB,IAAMruB,GAC5BsuB,+BAAgC,OAChCC,aAAc,OACdC,WAAY,IAAM,GAClBC,WAAY,IAAMzuB,GAClB0uB,oBAAqB,IAAM1uB,GAC3B2uB,iBAAkB,IAAM,GACxBC,sBAAuB,IAAM5uB,GAC7B6uB,kBAAmB,IAAM7uB,GACzB8uB,eAAgB,IAAM9uB,IAE1B,IAAIkoB,GAAoB,CAAE3W,OAAQ,KAAM8Q,KAAM,IAAIf,GAAK,KAAM,OACzD8G,GAAe,KACfuE,GAA4B,EAChC,eACAlE,EAAmB,OAAQ,QACpBjH,EAAOF,KAAUA,GA5mBZ,CA6mBK,oBAAXrV,QAA0BA,QAA0B,oBAAT6V,MAAwBA,MAAQN;;;;;;;;;;;;;AA7mBrF,MA8nBM8M,EAAiCluB,OAAO2uB,yBAExCV,EAAuBjuB,OAAO4mB,eAE9BgI,EAAuB5uB,OAAO0f,eAE9ByO,EAAenuB,OAAOmQ,OAEtBie,EAAa/jB,MAAMsV,UAAU1d,MAE7B4sB,EAAyB,mBAEzBC,EAA4B,sBAE5BC,EAAiC7N,KAAKoE,WAAWuJ,GAEjDG,EAAoC9N,KAAKoE,WAAWwJ,GAEpDG,EAAW,OAEXC,EAAY,QAEZC,EAAqBjO,KAAKoE,WAAW;;;;;;;SAC3C,WAA6BpM,EAAU3e,GACnC,OAAO2mB,KAAKpW,QAAQyd,KAAKrP,EAAU3e,GAEvC,WAA0CA,EAAQ2e,EAAU8K,EAAM4F,EAAgBG,GAC9E,OAAO7I,KAAKpW,QAAQgf,kBAAkBvvB,EAAQ2e,EAAU8K,EAAM4F,EAAgBG,GAElF,MAAMqF,EAAalO,KAAKoE,WAClB+J,EAAmC,oBAAXxjB,OACxByjB,EAAiBD,EAAiBxjB,YAASpX,EAC3C86B,EAAUF,GAAkBC,GAAkC,iBAAT5N,MAAqBA,MAAQN,OAElFoO,EAAqB,CAAC,MAC5B,WAAuBvyB,EAAM1C,GACzB,QAASwI,EAAI9F,EAAKc,OAAS,EAAGgF,GAAK,EAAGA,IACX,mBAAZ9F,EAAK8F,KACZ9F,EAAK8F,GAAKurB,EAAoBrxB,EAAK8F,GAAIxI,EAAS,IAAMwI,IAG9D,OAAO9F,EAsBX,WAA4BwyB,GACxB,OAAKA,IAGyB,IAA1BA,EAAazJ,YAGoB,mBAArByJ,EAAanpB,UAAkD,IAArBmpB,EAAalpB,KAE3E,MAAMmpB,EAA4C,oBAAtBC,mBAAqCjO,gBAAgBiO,kBAG3EC,KAAY,OAAQL,SAAuC,IAApBA,EAAQjZ,SACX,qBAAtC,GAAGiJ,SAASnf,KAAKmvB,EAAQjZ,SACvBuZ,IAAaD,KAAWF,MAAkBL,IAAkBC,EAAeQ,aAI3EC,QAAmC,IAApBR,EAAQjZ,SACa,qBAAtC,GAAGiJ,SAASnf,KAAKmvB,EAAQjZ,WAAoCoZ,MAC1DL,IAAkBC,EAAeQ,aAClCE,GAAuB,GACvBC,EAAS,SAAUC,GAIrB,KADAA,EAAQA,GAASX,EAAQW,OAErB,OAEJ,IAAIC,EAAkBH,GAAqBE,EAAMjM,MAC5CkM,IACDA,EAAkBH,GAAqBE,EAAMjM,MAAQmL,EAAW,cAAgBc,EAAMjM,OAE1F,MAAMrQ,EAAS/d,MAAQq6B,EAAMtc,QAAU2b,EACjCa,EAAWxc,EAAOuc,GACxB,IAAIv2B,EACJ,GAAIi2B,IAAajc,IAAW0b,GAAiC,UAAfY,EAAMjM,KAAkB,CAIlE,MAAMoM,EAAaH,EACnBt2B,EAASw2B,GACLA,EAAShwB,KAAKvK,KAAMw6B,EAAWh1B,QAASg1B,EAAWC,SAAUD,EAAWE,OAAQF,EAAWG,MAAOH,EAAWh6B,QAClG,IAAXuD,GACAs2B,EAAMO,sBAIV72B,EAASw2B,GAAYA,EAASjzB,MAAMtH,KAAMoJ,WAC5BxK,MAAVmF,IAAwBA,GACxBs2B,EAAMO,iBAGd,OAAO72B,GAEX,WAAuBkG,EAAK4wB,EAAM/Q,GAC9B,IAAIgR,EAAOzC,EAA+BpuB,EAAK4wB,GAU/C,IATKC,GAAQhR,GAEauO,EAA+BvO,EAAW+Q,KAE5DC,EAAO,CAAEC,YAAY,EAAM3K,cAAc,KAK5C0K,IAASA,EAAK1K,aACf,OAEJ,MAAM4K,EAAsBzB,EAAW,KAAOsB,EAAO,WACrD,GAAI5wB,EAAIooB,eAAe2I,IAAwB/wB,EAAI+wB,GAC/C,cAOGF,EAAK3K,gBACL2K,EAAKp6B,MACZ,MAAMu6B,EAAkBH,EAAKrqB,IACvByqB,EAAkBJ,EAAKpqB,IAEvBsN,GAAY6c,EAAKM,OAAO,GAC9B,IAAIb,GAAkBH,GAAqBnc,IACtCsc,KACDA,GAAkBH,GAAqBnc,IAAaub,EAAW,cAAgBvb,KAEnF8c,EAAKpqB,IAAM,SAAU0qB,IAGjB,IAAIrd,GAAS/d,MACR+d,IAAU9T,IAAQyvB,IACnB3b,GAAS2b,GAER3b,KAGeA,GAAOuc,KAEvBvc,GAAOK,oBAAoBJ,GAAWoc,GAItCc,GACAA,EAAgB5zB,MAAMyW,GAAQ4b,GAEV,mBAAbyB,IACPrd,GAAOuc,IAAmBc,GAC1Brd,GAAOI,iBAAiBH,GAAWoc,GAAQ,IAG3Crc,GAAOuc,IAAmB,OAKlCQ,EAAKrqB,IAAM,WAGP,IAAIsN,GAAS/d,KAIb,IAHK+d,IAAU9T,IAAQyvB,IACnB3b,GAAS2b,IAER3b,GACD,OAAO,KAEX,MAAMwc,GAAWxc,GAAOuc,IACxB,GAAIC,GACA,OAAOA,GAEN,GAAIU,EAAiB,CAOtB,IAAIv6B,GAAQu6B,GAAmBA,EAAgB1wB,KAAKvK,MACpD,GAAIU,GACAo6B,SAAKpqB,IAAInG,KAAKvK,KAAMU,IACoB,mBAA7Bqd,GAAOsd,iBACdtd,GAAOud,gBAAgBT,GAEpBn6B,GAGf,OAAO,MAEX03B,EAAqBnuB,EAAK4wB,EAAMC,GAChC7wB,EAAI+wB,IAAuB,EAE/B,WAA2B/wB,EAAKyH,EAAYoY,GACxC,GAAIpY,EACA,QAASxE,EAAI,EAAGA,EAAIwE,EAAWxJ,OAAQgF,IACnCquB,EAActxB,EAAK,KAAOyH,EAAWxE,GAAI4c,OAG5C,CACD,MAAM0R,EAAe,GACrB,UAAWX,KAAQ5wB,EACU,MAArB4wB,EAAKM,OAAO,EAAG,IACfK,EAAaj5B,KAAKs4B,GAG1B,QAASY,EAAI,EAAGA,EAAID,EAAatzB,OAAQuzB,IACrCF,EAActxB,EAAKuxB,EAAaC,GAAI3R,IAIhD,MAAM4R,EAAsBnC,EAAW,oBAEvC,WAAoBoC,GAChB,MAAMC,EAAgBlC,EAAQiC,GAC9B,IAAKC,EACD,OAEJlC,EAAQH,EAAWoC,IAAcC,EACjClC,EAAQiC,GAAa,WACjB,MAAMh5B,EAAIm1B,EAAc1uB,UAAWuyB,GACnC,OAAQh5B,EAAEuF,aACD,EACDlI,KAAK07B,GAAuB,IAAIE,EAChC,WACC,EACD57B,KAAK07B,GAAuB,IAAIE,EAAcj5B,EAAE,IAChD,WACC,EACD3C,KAAK07B,GAAuB,IAAIE,EAAcj5B,EAAE,GAAIA,EAAE,IACtD,WACC,EACD3C,KAAK07B,GAAuB,IAAIE,EAAcj5B,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAC5D,WACC,EACD3C,KAAK07B,GAAuB,IAAIE,EAAcj5B,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAClE,cAEA,MAAM,IAAIgP,MAAM,wBAI5BgnB,GAAsBe,EAAQiC,GAAYC,GAC1C,MAAM/gB,EAAW,IAAI+gB,EAAc,cACnC,IAAIf,EACJ,IAAKA,KAAQhgB,EAES,mBAAd8gB,GAA2C,iBAATd,GAErC,SAAUA,GACuB,mBAAnBhgB,EAASggB,GAChBnB,EAAQiC,GAAW7R,UAAU+Q,GAAQ,WACjC,OAAO76B,KAAK07B,GAAqBb,GAAMvzB,MAAMtH,KAAK07B,GAAsBtyB,YAI5EgvB,EAAqBsB,EAAQiC,GAAW7R,UAAW+Q,EAAM,CACrDnqB,IAAK,SAAUwa,GACO,mBAAPA,GACPlrB,KAAK07B,GAAqBb,GAAQpC,EAAoBvN,EAAIyQ,EAAY,IAAMd,GAI5ElC,GAAsB34B,KAAK07B,GAAqBb,GAAO3P,IAGvDlrB,KAAK07B,GAAqBb,GAAQ3P,GAG1Cza,IAAK,WACD,OAAOzQ,KAAK07B,GAAqBb,MArBhD,CAyBCA,GAEN,IAAKA,KAAQe,EACI,cAATf,GAAwBe,EAAcvJ,eAAewI,KACrDnB,EAAQiC,GAAWd,GAAQe,EAAcf,IAIrD,WAAqB9c,EAAQxY,EAAMs2B,GAC/B,IAAItL,EAAQxS,EACZ,KAAOwS,IAAUA,EAAM8B,eAAe9sB,IAClCgrB,EAAQwI,EAAqBxI,IAE5BA,GAASxS,EAAOxY,KAEjBgrB,EAAQxS,GAEZ,MAAM+d,EAAevC,EAAWh0B,GAChC,IAAI7G,EAAW,KACf,GAAI6xB,MAAY7xB,EAAW6xB,EAAMuL,MAAmBvL,EAAM8B,eAAeyJ,MACrEp9B,EAAW6xB,EAAMuL,GAAgBvL,EAAMhrB,GAInCw2B,EADSxL,GAAS8H,EAA+B9H,EAAOhrB,KAC9B,CAC1B,MAAMy2B,GAAgBH,EAAQn9B,EAAUo9B,EAAcv2B,GACtDgrB,EAAMhrB,GAAQ,WACV,OAAOy2B,GAAch8B,KAAMoJ,YAE/BuvB,GAAsBpI,EAAMhrB,GAAO7G,GAG3C,OAAOA,EAGX,YAAwBuL,EAAKgyB,EAAUC,GACnC,IAAIC,EAAY,KAChB,WAAsBpO,GAClB,MAAMI,EAAOJ,EAAKI,KAClBA,SAAK/mB,KAAK+mB,EAAKiO,OAAS,WACpBrO,EAAKc,OAAOvnB,MAAMtH,KAAMoJ,YAE5B+yB,EAAU70B,MAAM6mB,EAAKpQ,OAAQoQ,EAAK/mB,MAC3B2mB,EAEXoO,EAAYvQ,EAAY3hB,EAAKgyB,EAAWv9B,GAAa,SAAUmtB,EAAMzkB,IACjE,MAAMhB,GAAO81B,EAAYrQ,EAAMzkB,IAC/B,OAAIhB,GAAKg2B,OAAS,GAAiC,mBAArBh1B,GAAKhB,GAAKg2B,OAC7BC,EAAiCj2B,GAAKb,KAAM6B,GAAKhB,GAAKg2B,OAAQh2B,GAAM4oB,GAIpEtwB,EAAS4I,MAAMukB,EAAMzkB,MAIxC,YAA+Bk1B,EAASC,GACpCD,EAAQ/C,EAAW,qBAAuBgD,EAE9C,IAAIC,IAAqB,EACrBC,IAAW,EAYf,cACI,GAAID,GACA,OAAOC,GAEXD,IAAqB,EACrB,IACI,MAAME,EAAKjD,EAAekD,UAAUC,YACR,IAAxBF,EAAGvS,QAAQ,WAA8C,IAA3BuS,EAAGvS,QAAQ,cAA8C,IAAxBuS,EAAGvS,QAAQ,YAC1EsS,IAAW,SAGZj8B,IAEP,OAAOi8B;;;;;;;SAUXpR,KAAKC,aAAa,mBAAoB,CAACC,EAAQF,EAAMG,KACjD,MAAM6M,EAAiCluB,OAAO2uB,yBACxCV,EAAuBjuB,OAAO4mB,eAQ9BtB,EAAajE,EAAIG,OACjBkR,GAAyB,GACzBC,IAAkH,IAAtEvR,EAAOkE,EAAW,gDAC9D0H,GAAgB1H,EAAW,WAC3B2H,GAAa3H,EAAW,QAE9BjE,EAAItP,iBAAoBrT,IACpB,GAAI2iB,EAAImM,oBAAqB,CACzB,MAAMoF,EAAYl0B,GAAKA,EAAEk0B,UACrBA,EACAC,QAAQx8B,MAAM,+BAAgCu8B,aAAqBprB,MAAQorB,EAAUv3B,QAAUu3B,EAAW,UAAWl0B,EAAEujB,KAAK7mB,KAAM,UAAWsD,EAAEklB,MAAQllB,EAAEklB,KAAKrpB,OAAQ,WAAYq4B,EAAWA,aAAqBprB,MAAQorB,EAAUzS,WAAQ1rB,GAG5Oo+B,QAAQx8B,MAAMqI,KAI1B2iB,EAAIiM,mBAAqB,KACrB,KAAOoF,GAAuB30B,QAAQ,CAClC,MAAM+0B,EAAuBJ,GAAuB56B,QACpD,IACIg7B,EAAqB7Q,KAAKwG,WAAW,KACjC,MAAIqK,EAAqBC,cACfD,EAAqBF,UAEzBE,UAGPz8B,GACH28B,GAAyB38B,MAIrC,MAAM48B,GAA6C3N,EAAW,oCAC9D,YAAkC5mB,GAC9B2iB,EAAItP,iBAAiBrT,GACrB,IACI,MAAMD,EAAUyiB,EAAK+R,IACE,mBAAZx0B,GACPA,EAAQ2B,KAAKvK,KAAM6I,SAGpBxE,KAGX,YAAoB3D,GAChB,OAAOA,GAASA,EAAM+e,KAE1B,YAA2B/e,GACvB,OAAOA,EAEX,YAA0Bq8B,GACtB,OAAOhL,EAAiBhtB,OAAOg4B,GAEnC,MAAMM,EAAc5N,EAAW,SACzB6N,GAAc7N,EAAW,SACzB8N,GAAgB9N,EAAW,WAC3B+N,GAA2B/N,EAAW,sBACtCgO,GAA2BhO,EAAW,sBAEtCiO,GAAa,KAEbC,IAAW,EAEjB,YAAsBne,EAASve,GAC3B,OAAQiO,IACJ,IACI0uB,GAAepe,EAASve,EAAOiO,SAE5B7K,GACHu5B,GAAepe,GAAS,EAAOnb,KAK3C,MAaMw5B,GAA4BpO,EAAW,oBAE7C,YAAwBjQ,EAASve,EAAOP,GACpC,MAAMo9B,EAhBG,WACT,IAAIC,GAAY,EAChB,OAAO,SAAiBC,GACpB,OAAO,WACCD,IAGJA,GAAY,EACZC,EAAgB12B,MAAM,KAAM8B,cAQhB60B,GACpB,GAAIze,IAAY9e,EACZ,MAAM,IAAIyD,UANC,gCAQf,GAAIqb,EAAQ6d,KAAiBK,GAAY,CAErC,IAAIje,GAAO,KACX,KACyB,iBAAV/e,GAAuC,mBAAVA,KACpC+e,GAAO/e,GAASA,EAAM+e,YAGvBpb,IACHy5B,SAAY,KACRF,GAAepe,GAAS,EAAOnb,KADnCy5B,GAGOte,EAGX,GAAIve,IAAU08B,IAAYj9B,aAAiBqxB,GACvCrxB,EAAM2xB,eAAegL,IAAgB38B,EAAM2xB,eAAeiL,KAC1D58B,EAAM28B,KAAiBK,GACvBQ,GAAqBx9B,GACrBk9B,GAAepe,EAAS9e,EAAM28B,GAAc38B,EAAM48B,aAE7Cr8B,IAAU08B,IAA4B,mBAATle,GAClC,IACIA,GAAKlV,KAAK7J,EAAOo9B,EAAYK,GAAa3e,EAASve,IAAS68B,EAAYK,GAAa3e,GAAS,WAE3Fnb,IACHy5B,EAAY,KACRF,GAAepe,GAAS,EAAOnb,KADnCy5B,OAKH,CACDte,EAAQ6d,GAAep8B,EACvB,MAAMO,GAAQge,EAAQ8d,IAatB,GAZA9d,EAAQ8d,IAAe58B,EACnB8e,EAAQ+d,MAAmBA,KArE1B,IAuEGt8B,IAGAue,EAAQ6d,GAAe7d,EAAQie,IAC/Bje,EAAQ8d,IAAe9d,EAAQge,KAKnCv8B,IAAU08B,IAAYj9B,aAAiBiR,MAAO,CAE9C,MAAMysB,GAAQ/S,EAAK6G,aAAe7G,EAAK6G,YAAY/D,MAC/C9C,EAAK6G,YAAY/D,KAAKkQ,kBACtBD,IAEAhG,EAAqB13B,EAAOm9B,GAA2B,CAAEzN,cAAc,EAAM2K,YAAY,EAAO5K,UAAU,EAAMzvB,MAAO09B,KAG/H,QAASlxB,GAAI,EAAGA,GAAI1L,GAAM0G,QACtBo2B,GAAwB9e,EAAShe,GAAM0L,MAAM1L,GAAM0L,MAAM1L,GAAM0L,MAAM1L,GAAM0L,OAE/E,GAAoB,GAAhB1L,GAAM0G,QAAejH,GAAS08B,GAAU,CACxCne,EAAQ6d,GA3FE,EA4FV,IAAIJ,GAAuBv8B,EAC3B,IAII,MAAM,IAAIiR,MAAM,0BAvKpC,WAAgC1H,GAC5B,OAAIA,GAAOA,EAAIyf,WAAavf,OAAO2f,UAAUJ,UACvBzf,EAAIlK,aAAekK,EAAIlK,YAAYwF,MACrB,IAAM,KAAOg5B,KAAKC,UAAUv0B,GAEzDA,EAAMA,EAAIyf,WAAavf,OAAO2f,UAAUJ,SAASnf,KAAKN,GAkKDw0B,CAAuB/9B,IAC9DA,GAASA,EAAM4pB,MAAQ,KAAO5pB,EAAM4pB,MAAQ,WAE9CjmB,IACH44B,GAAuB54B,GAEvBy4B,KAGAG,GAAqBC,eAAgB,GAEzCD,GAAqBF,UAAYr8B,EACjCu8B,GAAqBzd,QAAUA,EAC/Byd,GAAqB7Q,KAAOf,EAAKpW,QACjCgoB,GAAqBlP,KAAO1C,EAAK6G,YACjC2K,GAAuBt6B,KAAK06B,IAC5BzR,EAAIsI,sBAKhB,OAAOtU,EAEX,MAAMkf,GAA4BjP,EAAW,2BAC7C,YAA8BjQ,GAC1B,GA1HsB,IA0HlBA,EAAQ6d,GAAoC,CAM5C,IACI,MAAMz0B,EAAUyiB,EAAKqT,IACjB91B,GAA8B,mBAAZA,GAClBA,EAAQ2B,KAAKvK,KAAM,CAAE+8B,UAAWvd,EAAQ8d,IAAc9d,QAASA,UAGhEnb,IAEPmb,EAAQ6d,GAAeM,GACvB,QAASzwB,EAAI,EAAGA,EAAI2vB,GAAuB30B,OAAQgF,IAC3CsS,IAAYqd,GAAuB3vB,GAAGsS,SACtCqd,GAAuB5jB,OAAO/L,EAAG,IAKjD,YAAiCsS,EAAS4M,EAAMuS,EAAcC,EAAaC,IACvEX,GAAqB1e,GACrB,MAAMsf,GAAetf,EAAQ6d,GACvB3+B,GAAWogC,GACW,mBAAhBF,EAA8BA,EAAcG,GAC7B,mBAAfF,GAA6BA,GAAaG,GACtD5S,EAAK0H,kBA1JM,eA0JoB,KAC3B,IACI,MAAMmL,GAAqBzf,EAAQ8d,IAC7B4B,KAAqBP,GAAgBpB,KAAkBoB,EAAapB,IACtE2B,KAEAP,EAAanB,IAA4ByB,GACzCN,EAAalB,IAA4BqB,IAG7C,MAAMp+B,GAAQ0rB,EAAK5sB,IAAId,QAAUE,EAAWsgC,IAAoBxgC,KAAasgC,IAAoBtgC,KAAaqgC,GAC1G,GACA,CAACE,KACLrB,GAAee,GAAc,EAAMj+B,UAEhCF,IAEHo9B,GAAee,GAAc,EAAOn+B,MAEzCm+B,GAEP,MACM50B,GAAO,aACb,QAAuBo1B,kBAEf,MAJ6B,gDAItBC,eAEI1+B,GACX,OAAOk9B,GAAe,IAAI59B,KAAK,OApLtB,EAoLuCU,iBAEtCF,GACV,OAAOo9B,GAAe,IAAI59B,KAAK,MAAO29B,GAAUn9B,eAExC8O,GACR,IAAIxK,EACAC,EACAya,GAAU,IAAIxf,KAAK,CAACq/B,GAAKC,MACzBx6B,EAAUu6B,GACVt6B,EAASu6B,KAEb,YAAmB5+B,IACfoE,EAAQpE,IAEZ,YAAkBF,IACduE,EAAOvE,IAEX,QAASE,MAAS4O,EACTiwB,GAAW7+B,MACZA,GAAQV,KAAK8E,QAAQpE,KAEzBA,GAAM+e,KAAK+f,GAAWC,IAE1B,OAAOjgB,cAEAlQ,GACP,OAAOyiB,EAAiB2N,gBAAgBpwB,qBAE1BA,GAEd,OADUtP,MAAQA,KAAK8pB,qBAAqBiI,EAAmB/xB,KAAO+xB,GAC7D2N,gBAAgBpwB,EAAQ,CAC7BqwB,aAAej/B,IAAW,CAAEk/B,OAAQ,YAAal/B,UACjDm/B,cAAgBx7B,IAAS,CAAEu7B,OAAQ,WAAYE,OAAQz7B,6BAGxCiL,EAAQ+T,GAC3B,IAAIve,EACAC,GACAya,GAAU,IAAIxf,KAAK,CAACq/B,GAAKC,MACzBx6B,EAAUu6B,GACVt6B,GAASu6B,KAGTS,GAAkB,EAClBtrB,GAAa,EACjB,MAAMurB,GAAiB,GACvB,QAASt/B,MAAS4O,EAAQ,CACjBiwB,GAAW7+B,MACZA,GAAQV,KAAK8E,QAAQpE,KAEzB,MAAMu/B,GAAgBxrB,GACtB,IACI/T,GAAM+e,KAAM/e,KACRs/B,GAAeC,IAAiB5c,EAAWA,EAASsc,aAAaj/B,IAASA,GAC1Eq/B,KACwB,IAApBA,IACAj7B,EAAQk7B,KAEZ37B,KACKgf,GAID2c,GAAeC,IAAiB5c,EAASwc,cAAcx7B,IACvD07B,KACwB,IAApBA,IACAj7B,EAAQk7B,KANZj7B,GAAOV,YAWZ67B,IACHn7B,GAAOm7B,IAEXH,KACAtrB,KAGJsrB,WAAmB,EACK,IAApBA,IACAj7B,EAAQk7B,IAELxgB,GAEXzf,YAAYogC,GACR,MAAM3gB,EAAUxf,KAChB,KAAMwf,aAAmBuS,GACrB,MAAM,IAAIpgB,MAAM,kCAEpB6N,EAAQ6d,GAAeK,GACvBle,EAAQ8d,IAAe,GACvB,IACI6C,GAAYA,EAAShC,GAAa3e,GAjR7B,GAiRiD2e,GAAa3e,EAASme,WAEzEn9B,GACHo9B,GAAepe,GAAS,EAAOhf,IAG3B4/B,IAAPpZ,OAAOoZ,eACR,MAAO,UAECC,IAAPrZ,OAAOqZ,WACR,OAAOtO,EAEXtS,KAAKmf,EAAaC,GACd,IAAIyB,EAAItgC,KAAKD,YAAYinB,OAAOqZ,WAC3BC,GAAkB,mBAANA,KACbA,EAAItgC,KAAKD,aAAegyB,GAE5B,MAAM4M,GAAe,IAAI2B,EAAEv2B,IACrBqiB,GAAOf,EAAKpW,QAClB,OAAIjV,KAAKq9B,IAAgBK,GACrB19B,KAAKs9B,IAAa/6B,KAAK6pB,GAAMuS,GAAcC,EAAaC,GAGxDP,GAAwBt+B,KAAMosB,GAAMuS,GAAcC,EAAaC,GAE5DF,GAEXje,MAAMme,GACF,OAAO7+B,KAAKyf,KAAK,KAAMof,GAE3B0B,QAAQC,GACJ,IAAIF,EAAItgC,KAAKD,YAAYinB,OAAOqZ,WAC3BC,GAAkB,mBAANA,KACbA,EAAIvO,GAER,MAAM4M,EAAe,IAAI2B,EAAEv2B,IAC3B40B,EAAapB,IAAiBA,GAC9B,MAAMnR,GAAOf,EAAKpW,QAClB,OAAIjV,KAAKq9B,IAAgBK,GACrB19B,KAAKs9B,IAAa/6B,KAAK6pB,GAAMuS,EAAc6B,EAAWA,GAGtDlC,GAAwBt+B,KAAMosB,GAAMuS,EAAc6B,EAAWA,GAE1D7B,GAKf5M,EAAiBjtB,QAAaitB,EAAiBjtB,QAC/CitB,EAAiBhtB,OAAYgtB,EAAiBhtB,OAC9CgtB,EAAiB0O,KAAU1O,EAAiB0O,KAC5C1O,EAAiB2O,IAAS3O,EAAiB2O,IAC3C,MAAMC,EAAgBpV,EAAO4L,IAAiB5L,EAAO1mB,QACrD0mB,EAAO1mB,QAAaktB,EACpB,MAAM6O,GAAoBnR,EAAW,eACrC,YAAmBoR,GACf,MAAMtQ,EAAQsQ,EAAK/W,UACb+Q,EAAOxC,EAA+B9H,EAAO,QACnD,GAAIsK,KAA2B,IAAlBA,EAAK1K,WAAuB0K,EAAKzK,cAG1C,OAEJ,MAAM0Q,EAAevQ,EAAM9Q,KAE3B8Q,EAAM6G,IAAc0J,EACpBD,EAAK/W,UAAUrK,KAAO,SAAU+f,GAAWC,IAIvC,OAAOsB,IAHahP,EAAiB,CAACjtB,GAASC,MAC3C+7B,EAAav2B,KAAKvK,KAAM8E,GAASC,MAEtB0a,KAAK+f,GAAWC,KAEnCoB,EAAKD,KAAqB,EAgB9B,OAdApV,EAAIuM,UAAYA,GAcZ4I,IACA5I,GAAU4I,GACV/U,EAAYL,EAAQ,QAAS7sB,GAfjC,YAAiBwsB,GACb,OAAO,SAAUW,EAAMzkB,GACnB,IAAI45B,EAAgB9V,EAAG5jB,MAAMukB,EAAMzkB,GACnC,GAAI45B,aAAyBjP,EACzB,OAAOiP,EAEX,IAAIC,GAAOD,EAAcjhC,YACzB,OAAKkhC,GAAKL,KACN7I,GAAUkJ,IAEPD,GAK8BE,CAAQxiC,KAGrDmG,QAAQwmB,EAAKoE,WAAW,0BAA4BoN,GAC7C9K;;;;;;;;AAYX1G,KAAKC,aAAa,WAAaC,IAE3B,MAAM4V,EAA2BC,SAAStX,UAAUJ,SAC9C2X,EAA2B9H,EAAW,oBACtC+H,EAAiB/H,EAAW,WAC5BgI,EAAehI,EAAW,SAC1BiI,EAAsB,WACxB,GAAoB,mBAATxhC,KAAqB,CAC5B,MAAMyhC,GAAmBzhC,KAAKqhC,GAC9B,GAAII,GACA,MAAgC,mBAArBA,GACAN,EAAyB52B,KAAKk3B,IAG9Bt3B,OAAO2f,UAAUJ,SAASnf,KAAKk3B,IAG9C,GAAIzhC,OAAS6E,QAAS,CAClB,MAAM68B,GAAgBnW,EAAO+V,GAC7B,GAAII,GACA,OAAOP,EAAyB52B,KAAKm3B,IAG7C,GAAI1hC,OAAS2R,MAAO,CAChB,MAAMgwB,GAAcpW,EAAOgW,GAC3B,GAAII,GACA,OAAOR,EAAyB52B,KAAKo3B,KAIjD,OAAOR,EAAyB52B,KAAKvK,OAEzCwhC,EAAoBH,GAA4BF,EAChDC,SAAStX,UAAUJ,SAAW8X,EAE9B,MAAMI,EAAyBz3B,OAAO2f,UAAUJ,SAEhDvf,OAAO2f,UAAUJ,SAAW,WACxB,MAAuB,mBAAZ7kB,SAA0B7E,gBAAgB6E,QAFxB,mBAKtB+8B,EAAuBr3B,KAAKvK;;;;;;;;AAW3C,IAAI6hC,IAAmB,EACvB,GAAsB,oBAAX7rB,OACP,IACI,MAAMiI,EAAU9T,OAAO4mB,eAAe,GAAI,UAAW,CACjDtgB,IAAK,WACDoxB,IAAmB,KAG3B7rB,OAAOmI,iBAAiB,OAAQF,EAASA,GACzCjI,OAAOoI,oBAAoB,OAAQH,EAASA,SAEzC5Z,GACHw9B,IAAmB,EAI3B,MAAMC,GAAiC,CACnCrL,MAAM,GAEJsL,GAAyB,GACzBC,GAAgB,GAChBC,GAAyB,IAAIC,OAAO,IAAM5I,EAAqB,uBAC/D6I,GAA+B5I,EAAW,sBAChD,YAA2Bvb,EAAWokB,GAClC,MAAMC,GAAkBD,EAAoBA,EAAkBpkB,GAAaA,GAAaqb,EAClFiJ,GAAiBF,EAAoBA,EAAkBpkB,GAAaA,GAAaob,EACjFzN,EAAS2N,EAAqB+I,EAC9BE,EAAgBjJ,EAAqBgJ,EAC3CP,GAAuB/jB,GAAa,GACpC+jB,GAAuB/jB,GAAWqb,GAAa1N,EAC/CoW,GAAuB/jB,GAAWob,GAAYmJ,EAElD,YAA0B7I,EAAS8I,EAAMC,GACrC,MAAMC,EAAsBD,GAAgBA,EAAa5iC,KAAQm5B,EAC3D2J,EAAyBF,GAAgBA,EAAaG,IAAO3J,EAC7D4J,EAA4BJ,GAAgBA,EAAaK,WAAc,iBACvEC,EAAuCN,GAAgBA,EAAaO,OAAU,qBAC9EC,GAA6B1J,EAAWmJ,GACxCQ,GAA4B,IAAMR,EAAqB,IAGvDxT,GAAa,SAAUnB,GAAMhQ,EAAQsc,IAGvC,GAAItM,GAAKoV,UACL,OAEJ,MAAMzkC,GAAWqvB,GAAK1K,SACE,iBAAb3kB,IAAyBA,GAAS0kC,cAEzCrV,GAAK1K,SAAYgX,IAAU37B,GAAS0kC,YAAY/I,IAChDtM,GAAK0T,iBAAmB/iC,IAG5BqvB,GAAKc,OAAOd,GAAMhQ,EAAQ,CAACsc,KAC3B,MAAMpc,GAAU8P,GAAK9P,QACjBA,IAA8B,iBAAZA,IAAwBA,GAAQggB,MAKlDlgB,EAAO4kB,GAAuBp4B,KAAKwT,EAAQsc,GAAMjM,KADhCL,GAAK0T,iBAAmB1T,GAAK0T,iBAAmB1T,GAAK1K,SACLpF,KAInEolB,GAA0B,SAAUhJ,IAItC,KADAA,GAAQA,IAASX,EAAQW,OAErB,OAIJ,MAAMtc,EAAS/d,MAAQq6B,GAAMtc,QAAU2b,EACjC5M,GAAQ/O,EAAOgkB,GAAuB1H,GAAMjM,MAAMiL,IACxD,GAAIvM,GAGA,GAAqB,IAAjBA,GAAM5kB,OACNgnB,GAAWpC,GAAM,GAAI/O,EAAQsc,QAE5B,CAID,MAAMiJ,GAAYxW,GAAM1gB,QACxB,QAASc,GAAI,EAAGA,GAAIo2B,GAAUp7B,UACtBmyB,KAAiD,IAAxCA,GAAM8H,KADej1B,KAIlCgiB,GAAWoU,GAAUp2B,IAAI6Q,EAAQsc,MAM3CkJ,GAAiC,SAAUlJ,IAI7C,KADAA,GAAQA,IAASX,EAAQW,OAErB,OAIJ,MAAMtc,EAAS/d,MAAQq6B,GAAMtc,QAAU2b,EACjC5M,GAAQ/O,EAAOgkB,GAAuB1H,GAAMjM,MAAMgL,IACxD,GAAItM,GAGA,GAAqB,IAAjBA,GAAM5kB,OACNgnB,GAAWpC,GAAM,GAAI/O,EAAQsc,QAE5B,CAID,MAAMiJ,GAAYxW,GAAM1gB,QACxB,QAASc,GAAI,EAAGA,GAAIo2B,GAAUp7B,UACtBmyB,KAAiD,IAAxCA,GAAM8H,KADej1B,KAIlCgiB,GAAWoU,GAAUp2B,IAAI6Q,EAAQsc,MAKjD,YAAiCpwB,GAAKw4B,GAClC,IAAKx4B,GACD,OAAO,EAEX,IAAIu5B,IAAoB,EACpBf,QAAsC7jC,IAAtB6jC,EAAahM,OAC7B+M,GAAoBf,EAAahM,MAErC,MAAMgN,GAAkBhB,GAAgBA,EAAaiB,GACrD,IAAIlS,IAAiB,EACjBiR,QAAwC7jC,IAAxB6jC,EAAakB,SAC7BnS,GAAiBiR,EAAakB,QAElC,IAAIC,IAAe,EACfnB,QAAoC7jC,IAApB6jC,EAAaoB,KAC7BD,GAAenB,EAAaoB,IAEhC,IAAItT,GAAQtmB,GACZ,KAAOsmB,KAAUA,GAAM8B,eAAeqQ,IAClCnS,GAAQwI,EAAqBxI,IASjC,IAPKA,IAAStmB,GAAIy4B,KAEdnS,GAAQtmB,KAEPsmB,IAGDA,GAAM0S,IACN,OAAO,EAEX,MAAMb,GAAoBK,GAAgBA,EAAaL,kBAGjD0B,GAAW,GACXC,GAAyBxT,GAAM0S,IAA8B1S,GAAMmS,GACnEsB,GAA4BzT,GAAMgJ,EAAWoJ,IAC/CpS,GAAMoS,GACJsB,GAAkB1T,GAAMgJ,EAAWsJ,IACrCtS,GAAMsS,GACJqB,GAA2B3T,GAAMgJ,EAAWwJ,IAC9CxS,GAAMwS,GACV,IAAIoB,GASJ,YAAmClmB,EAASmmB,GACxC,OAAKvC,IAAuC,iBAAZ5jB,GAAwBA,IAI3CA,EAAQomB,QAEhBxC,IAAqBuC,EAGH,kBAAZnmB,EACA,CAAEomB,QAASpmB,EAASmmB,SAAS,GAEnCnmB,EAGkB,iBAAZA,IAA4C,IAApBA,EAAQmmB,QAChCj6B,OAAOm6B,OAAOn6B,OAAOm6B,OAAO,GAAIrmB,GAAU,CAAEmmB,SAAS,IAEzDnmB,EALI,CAAEmmB,SAAS,GANXnmB,EAhBXwkB,GAAgBA,EAAa8B,UAC7BJ,GAA6B5T,GAAMgJ,EAAWkJ,EAAa8B,UACvDhU,GAAMkS,EAAa8B,UA2B3B,MAsDMxQ,GAAiByP,GAtDM,SAAUzV,GAGnC,IAAI+V,GAASU,WAGb,OAAOT,GAAuBx5B,KAAKu5B,GAAS/lB,OAAQ+lB,GAAS9lB,UAAW8lB,GAASO,QAAUd,GAAiCF,GAAyBS,GAAS7lB,UAuClI,SAAU8P,GACtC,OAAOgW,GAAuBx5B,KAAKu5B,GAAS/lB,OAAQ+lB,GAAS9lB,UAAW+P,EAAKc,OAAQiV,GAAS7lB,UAS5FiW,EAAesP,GA/CM,SAAUzV,GAIjC,IAAKA,EAAKoV,UAAW,CACjB,MAAMsB,EAAmB1C,GAAuBhU,EAAK/P,WACrD,IAAI0mB,EACAD,IACAC,EAAkBD,EAAiB1W,EAAKsW,QAAUjL,EAAWC,IAEjE,MAAMsL,GAAgBD,GAAmB3W,EAAKhQ,OAAO2mB,GACrD,GAAIC,GACA,QAASz3B,GAAI,EAAGA,GAAIy3B,GAAcz8B,OAAQgF,KAEtC,GADqBy3B,GAAcz3B,MACd6gB,EAAM,CACvB4W,GAAc1rB,OAAO/L,GAAG,GAExB6gB,EAAKoV,WAAY,EACY,IAAzBwB,GAAcz8B,SAGd6lB,EAAK6W,YAAa,EAClB7W,EAAKhQ,OAAO2mB,GAAmB,MAEnC,OAQhB,GAAK3W,EAAK6W,WAGV,OAAOZ,GAA0Bz5B,KAAKwjB,EAAKhQ,OAAQgQ,EAAK/P,UAAW+P,EAAKsW,QAAUd,GAAiCF,GAAyBtV,EAAK9P,UAQvH,SAAU8P,GACpC,OAAOiW,GAA0Bz5B,KAAKwjB,EAAKhQ,OAAQgQ,EAAK/P,UAAW+P,EAAKc,OAAQd,EAAK9P,UASnF8E,GAAW0f,GAAgBA,EAAaoC,KAAQpC,EAAaoC,KAL7B,SAAU9W,EAAMrvB,GAClD,MAAMomC,SAAwBpmC,EAC9B,MAA2B,aAAnBomC,GAAiC/W,EAAK1K,WAAa3kB,GACnC,WAAnBomC,GAA+B/W,EAAK0T,mBAAqB/iC,GAG5DqmC,GAAkB1Z,KAAKkO,EAAW,qBAClCyL,GAAgBtL,EAAQH,EAAW,mBACnC0L,EAAkB,SAAUC,EAAgBC,EAAWC,EAAkBC,GAAgBzB,IAAe,EAAOW,IAAU,GAC3H,OAAO,WACH,MAAMxmB,GAAS/d,MAAQ05B,EACvB,IAAI1b,GAAY5U,UAAU,GACtBq5B,GAAgBA,EAAa6C,oBAC7BtnB,GAAYykB,EAAa6C,kBAAkBtnB,KAE/C,IAAItf,GAAW0K,UAAU,GACzB,IAAK1K,GACD,OAAOwmC,EAAe59B,MAAMtH,KAAMoJ,WAEtC,GAAI2wB,IAAwB,sBAAd/b,GAEV,OAAOknB,EAAe59B,MAAMtH,KAAMoJ,WAKtC,IAAIm8B,IAAgB,EACpB,GAAwB,mBAAb7mC,GAAyB,CAChC,IAAKA,GAAS0kC,YACV,OAAO8B,EAAe59B,MAAMtH,KAAMoJ,WAEtCm8B,IAAgB,EAEpB,GAAI9B,KAAoBA,GAAgByB,EAAgBxmC,GAAUqf,GAAQ3U,WACtE,OAEJ,MAAMg7B,GAAUvC,MAAsBmD,KAAsD,IAArCA,GAAc7a,QAAQnM,IACvEC,GAAUunB,GAA0Bp8B,UAAU,GAAIg7B,IACxD,GAAIW,GAEA,QAAS73B,GAAI,EAAGA,GAAI63B,GAAgB78B,OAAQgF,KACxC,GAAI8Q,KAAc+mB,GAAgB73B,IAC9B,OAAIk3B,GACOc,EAAe36B,KAAKwT,GAAQC,GAAWtf,GAAUuf,IAGjDinB,EAAe59B,MAAMtH,KAAMoJ,WAKlD,MAAMi7B,KAAUoB,KAAsC,kBAAZxnB,IAA+BA,GAAQomB,SAC3EpG,MAAOhgB,IAA8B,iBAAZA,KAAuBA,GAAQggB,KACxD7R,GAAOf,KAAKpW,QAClB,IAAIwvB,GAAmB1C,GAAuB/jB,IACzCymB,KACDiB,GAAkB1nB,GAAWokB,IAC7BqC,GAAmB1C,GAAuB/jB,KAE9C,MAAM0mB,GAAkBD,GAAiBJ,GAAUjL,EAAWC,GAC9D,IAiBI30B,GAjBAigC,GAAgB5mB,GAAO2mB,IACvBF,IAAa,EACjB,GAAIG,IAGA,GADAH,IAAa,EACThT,GACA,QAAStkB,GAAI,EAAGA,GAAIy3B,GAAcz8B,OAAQgF,KACtC,GAAI6V,GAAQ4hB,GAAcz3B,IAAIxO,IAE1B,YAMZimC,GAAgB5mB,GAAO2mB,IAAmB,GAG9C,MAAMiB,GAAkB5nB,GAAOhe,YAAYwF,KACrCqgC,GAAe5D,GAAc2D,IAC/BC,KACAlhC,GAASkhC,GAAa5nB,KAErBtZ,KACDA,GAASihC,GAAkBR,GACtB/C,GAAoBA,GAAkBpkB,IAAaA,KAI5D8lB,GAAS7lB,QAAUA,GACfggB,KAIA6F,GAAS7lB,QAAQggB,MAAO,GAE5B6F,GAAS/lB,OAASA,GAClB+lB,GAASO,QAAUA,GACnBP,GAAS9lB,UAAYA,GACrB8lB,GAASU,WAAaA,GACtB,MAAMrW,GAAOqV,GAAoB1B,QAAiCljC,EAE9DuvB,KACAA,GAAK2V,SAAWA,IAEpB,MAAM/V,GAAO3B,GAAK+H,kBAAkBzvB,GAAQhG,GAAUyvB,GAAMiX,EAAkBC,IA+B9E,OA5BAvB,GAAS/lB,OAAS,KAEdoQ,KACAA,GAAK2V,SAAW,MAIhB7F,KACAhgB,GAAQggB,MAAO,IAEZ4D,IAA4C,kBAAjB9T,GAAK9P,UAGnC8P,GAAK9P,QAAUA,IAEnB8P,GAAKhQ,OAASA,GACdgQ,GAAKsW,QAAUA,GACftW,GAAK/P,UAAYA,GACbunB,KAEAxX,GAAK0T,iBAAmB/iC,IAE5BmnC,GAIIlB,GAAcmB,QAAQ/X,IAHtB4W,GAAcpiC,KAAKwrB,IAKnB6V,GACO7lB,QADX,IAKRwS,UAAMmS,GAAsBuC,EAAgBlB,GAAwBb,GAA2BnP,GAAgBG,EAAc0P,IACzHO,KACA5T,GAAMwV,gBAA0Bd,EAAgBd,GAvWlB,oBAgNJ,SAAUpW,GACpC,OAAOoW,GAA2B55B,KAAKu5B,GAAS/lB,OAAQ+lB,GAAS9lB,UAAW+P,EAAKc,OAAQiV,GAAS7lB,UAsJgCiW,EAAc0P,IAAc,IAElKrT,GAAMoS,GAAyB,WAC3B,MAAM5kB,EAAS/d,MAAQ05B,EACvB,IAAI1b,EAAY5U,UAAU,GACtBq5B,GAAgBA,EAAa6C,oBAC7BtnB,EAAYykB,EAAa6C,kBAAkBtnB,IAE/C,MAAMC,EAAU7U,UAAU,GACpBi7B,KAAWpmB,IAAqC,kBAAZA,GAA+BA,EAAQomB,SAC3E3lC,GAAW0K,UAAU,GAC3B,IAAK1K,GACD,OAAOslC,GAA0B18B,MAAMtH,KAAMoJ,WAEjD,GAAIq6B,KACCA,GAAgBO,GAA2BtlC,GAAUqf,EAAQ3U,WAC9D,OAEJ,MAAMq7B,GAAmB1C,GAAuB/jB,GAChD,IAAI0mB,GACAD,KACAC,GAAkBD,GAAiBJ,GAAUjL,EAAWC,IAE5D,MAAMsL,GAAgBD,IAAmB3mB,EAAO2mB,IAChD,GAAIC,GACA,QAASz3B,GAAI,EAAGA,GAAIy3B,GAAcz8B,OAAQgF,KAAK,CAC3C,MAAM84B,GAAerB,GAAcz3B,IACnC,GAAI6V,GAAQijB,GAActnC,IAkBtB,OAjBAimC,GAAc1rB,OAAO/L,GAAG,GAExB84B,GAAa7C,WAAY,EACI,IAAzBwB,GAAcz8B,SAGd89B,GAAapB,YAAa,EAC1B7mB,EAAO2mB,IAAmB,KAID,iBAAd1mB,KAEPD,EADyBub,EAAqB,cAAgBtb,GACnC,MAGnCgoB,GAAa5Z,KAAKgD,WAAW4W,IACzBpC,GACO7lB,OAEX,EAQZ,OAAOimB,GAA0B18B,MAAMtH,KAAMoJ,YAEjDmnB,GAAMsS,GAA4B,WAC9B,MAAM9kB,EAAS/d,MAAQ05B,EACvB,IAAI1b,EAAY5U,UAAU,GACtBq5B,GAAgBA,EAAa6C,oBAC7BtnB,EAAYykB,EAAa6C,kBAAkBtnB,IAE/C,MAAM8kB,EAAY,GACZhW,GAAQmZ,GAAeloB,EAAQqkB,GAAoBA,GAAkBpkB,GAAaA,GACxF,QAAS9Q,GAAI,EAAGA,GAAI4f,GAAM5kB,OAAQgF,KAAK,CACnC,MAAM6gB,GAAOjB,GAAM5f,IAEnB41B,EAAUvgC,KADKwrB,GAAK0T,iBAAmB1T,GAAK0T,iBAAmB1T,GAAK1K,UAGxE,OAAOyf,GAEXvS,GAAMwS,GAAuC,WACzC,MAAMhlB,EAAS/d,MAAQ05B,EACvB,IAAI1b,EAAY5U,UAAU,GAC1B,GAAK4U,EAiBA,CACGykB,GAAgBA,EAAa6C,oBAC7BtnB,EAAYykB,EAAa6C,kBAAkBtnB,IAE/C,MAAMymB,EAAmB1C,GAAuB/jB,GAChD,GAAIymB,EAAkB,CAClB,MAEM3X,GAAQ/O,EAFU0mB,EAAiBpL,IAGnC6M,GAAenoB,EAFU0mB,EAAiBrL,IAGhD,GAAItM,GAAO,CACP,MAAMqZ,GAAcrZ,GAAM1gB,QAC1B,QAASc,GAAI,EAAGA,GAAIi5B,GAAYj+B,OAAQgF,KAAK,CACzC,MAAM6gB,GAAOoY,GAAYj5B,IAEzBlN,KAAK2iC,GAAuBp4B,KAAKvK,KAAMge,EADxB+P,GAAK0T,iBAAmB1T,GAAK0T,iBAAmB1T,GAAK1K,SACR0K,GAAK9P,UAGzE,GAAIioB,GAAc,CACd,MAAMC,GAAcD,GAAa95B,QACjC,QAASc,GAAI,EAAGA,GAAIi5B,GAAYj+B,OAAQgF,KAAK,CACzC,MAAM6gB,GAAOoY,GAAYj5B,IAEzBlN,KAAK2iC,GAAuBp4B,KAAKvK,KAAMge,EADxB+P,GAAK0T,iBAAmB1T,GAAK0T,iBAAmB1T,GAAK1K,SACR0K,GAAK9P,gBAxCjE,CACZ,MAAMlB,EAAO5S,OAAO4S,KAAKgB,GACzB,QAAS7Q,GAAI,EAAGA,GAAI6P,EAAK7U,OAAQgF,KAAK,CAClC,MACMk5B,GAAQnE,GAAuBoE,KADxBtpB,EAAK7P,KAElB,IAAIo5B,GAAUF,IAASA,GAAM,GAKzBE,IAAuB,mBAAZA,IACXtmC,KAAK+iC,GAAqCx4B,KAAKvK,KAAMsmC,IAI7DtmC,KAAK+iC,GAAqCx4B,KAAKvK,KAAM,kBA8BzD,GAAI4jC,GACA,OAAO5jC,MAIf24B,GAAsBpI,GAAMmS,GAAqBqB,IACjDpL,GAAsBpI,GAAMoS,GAAwBqB,IAChDE,IACAvL,GAAsBpI,GAAMwS,GAAsCmB,IAElED,IACAtL,GAAsBpI,GAAMsS,GAA2BoB,KAEpD,EAEX,IAAIh8B,GAAU,GACd,QAASiF,GAAI,EAAGA,GAAIs1B,EAAKt6B,OAAQgF,KAC7BjF,GAAQiF,IAAKq5B,GAAwB/D,EAAKt1B,IAAIu1B,GAElD,OAAOx6B,GAEX,YAAwB8V,EAAQC,GAC5B,IAAKA,EAAW,CACZ,MAAMwoB,EAAa,GACnB,QAAS3L,KAAQ9c,EAAQ,CACrB,MAAMqoB,GAAQnE,GAAuBoE,KAAKxL,GAC1C,IAAIyL,GAAUF,IAASA,GAAM,GAC7B,GAAIE,MAAatoB,GAAasoB,KAAYtoB,GAAY,CAClD,MAAM8O,GAAQ/O,EAAO8c,GACrB,GAAI/N,GACA,QAAS5f,GAAI,EAAGA,GAAI4f,GAAM5kB,OAAQgF,KAC9Bs5B,EAAWjkC,KAAKuqB,GAAM5f,MAKtC,OAAOs5B,EAEX,IAAI9B,EAAkB3C,GAAuB/jB,GACxC0mB,IACDgB,GAAkB1nB,GAClB0mB,EAAkB3C,GAAuB/jB,IAE7C,MAAMyoB,EAAoB1oB,EAAO2mB,EAAgBrL,IAC3CqN,EAAmB3oB,EAAO2mB,EAAgBtL,IAChD,OAAKqN,EAIMC,EAAmBD,EAAkBn4B,OAAOo4B,GAC/CD,EAAkBr6B,QAJfs6B,EAAmBA,EAAiBt6B,QAAU,GAO7D,YAA6Bmf,EAAQC,GACjC,MAAMmb,EAAQpb,EAAOob,MACjBA,GAASA,EAAM7c,WACf0B,EAAII,YAAY+a,EAAM7c,UAAW,2BAA6BprB,GAAa,SAAUmtB,EAAMzkB,GACvFykB,EAAKsW,KAAgC,EAIrCzjC,GAAYA,EAAS4I,MAAMukB,EAAMzkB;;;;;;;SAY7C,YAAwBokB,EAAKzN,EAAQ6oB,EAAYC,EAAQC,GACrD,MAAMnb,EAASN,KAAKoE,WAAWoX,GAC/B,GAAI9oB,EAAO4N,GACP,OAEJ,MAAMob,EAAiBhpB,EAAO4N,GAAU5N,EAAO8oB,GAC/C9oB,EAAO8oB,GAAU,SAAUthC,GAAMyhC,GAAM/oB,IACnC,OAAI+oB,IAAQA,GAAKld,WACbgd,EAAU32B,QAAQ,SAAUkT,IACxB,MAAM3e,GAAU,GAAEkiC,KAAcC,MAAaxjB,GACvCyG,GAAYkd,GAAKld,UACvB,GAAIA,GAAUuI,eAAehP,IAAW,CACpC,MAAM4jB,GAAazb,EAAI6M,+BAA+BvO,GAAWzG,IAC7D4jB,IAAcA,GAAWvmC,OACzBumC,GAAWvmC,MAAQ8qB,EAAIiN,oBAAoBwO,GAAWvmC,MAAOgE,IAC7D8mB,EAAIoN,kBAAkBoO,GAAKld,UAAWzG,GAAU4jB,KAE3Cnd,GAAUzG,MACfyG,GAAUzG,IAAYmI,EAAIiN,oBAAoB3O,GAAUzG,IAAW3e,UAGlEolB,GAAUzG,MACfyG,GAAUzG,IAAYmI,EAAIiN,oBAAoB3O,GAAUzG,IAAW3e,OAIxEqiC,EAAex8B,KAAKwT,EAAQxY,GAAMyhC,GAAM/oB,KAEnDuN,EAAImN,sBAAsB5a,EAAO8oB,GAASE;;;;;;;SAU9C,MAwGMG,GAAmB,CACrB,4BACA,aACA,aACA,eACA,sBACA,cACA,eACA,cACA,eACA,oBACA,4BACA,kBACA,aACA,iBACA,UACA,iBACA,UACA,SACA,QACA,WACA,WACA,WACA,mBACA,UACA,qBACA,SACA,gBACA,qBACA,wBACA,0BAOEC,GAAyB,CAAC,YAAa,gBAAiB,YAAa,oBAAqB,mBA6D1FC,GAAkB,CAAC,QACnBC,GAAqB,CAAC,OAAQ,QAAS,QAAS,OAAQ,SAAU,SAAU,gBAC5EC,GAAoB,CAAC,SAAU,SAAU,SACzCC,GAA2B,CAC7B,YAAa,WAAY,QAAS,QAAS,OAAQ,WAAY,UAAW,UAC1E,oBAEEC,GAAqB,CAAC,gBAAiB,WAAY,QAAS,UAAW,QAAS,UAAW,gBAAiB,SAC5GC,GAAsB,CAAC,QAAS,QAAS,OAAQ,WACjDC,GAAmB,CAAC,QAAS,WAC7BC,GApNgC,CAClC,QACA,kBACA,eACA,qBACA,WACA,cACA,OACA,SACA,UACA,iBACA,SACA,mBACA,oBACA,iBACA,YACA,QACA,QACA,cACA,aACA,WACA,OACA,UACA,YACA,WACA,YACA,WACA,OACA,iBACA,UACA,QACA,QACA,QACA,UACA,WACA,oBACA,QACA,UACA,UACA,WACA,QACA,OACA,YACA,aACA,iBACA,qBACA,YACA,aACA,aACA,YACA,WACA,YACA,UACA,aACA,oBACA,QACA,OACA,UACA,gBACA,cACA,eACA,eACA,oBACA,uBACA,4BACA,mBACA,sBACA,yBACA,cACA,WACA,cACA,YACA,WACA,aACA,QACA,SACA,SACA,SACA,UACA,SACA,kBACA,cACA,OACA,OACA,UACA,SACA,UACA,aACA,eACA,cACA,YACA,aACA,WACA,mBACA,gBACA,UACA,SAoH6Cr5B,OAbzB,CAAC,uBAAwB,mBAAoB,6BAC9C,CAAC,eAAgB,qBACf,CAAC,UAvGC,CACvB,qBAAsB,sBAAuB,mBAAoB,SAAU,mBAC3E,sBAAuB,yBAA0B,qBAAsB,kBACvE,qBAAsB,wBAAyB,oBAAqB,mBACpE,mBAAoB,UA8GuG44B,GA5EjG,CAC1B,aAAc,YAAa,cAAe,OAAQ,MAAO,QAAS,YAAa,UAC/E,iBAAkB,SAAU,gBAAiB,kBAAmB,qBAChE,2BAA4B,uBAAwB,uBAG5B,CACxB,WACA,cACA,cACA,iBACA,mBACA,kBACA,eACA,aACA,gBACA,gBACA,iBACA,kBACA,cACA,eACA,iBACA,cACA,OACA,UACA,YACA,iBACA,YACA,cACA,WACA,UACA,aACA,eACA,UACA,0BACA,aACA,OACA,gBACA,6BACA,kBACA,qBACA,eACA,gBACA,iBACA,eACA,sBACA,iBACA,uBACA,kBACA,gBACA,iBACA,iBACA,iBACA,gBACA,eACA,gBACA,cACA,aACA,gCACA,mBACA,OACA,kBAgBJ,YAA0BnpB,EAAQyd,EAAcoM,GAC5C,IAAKA,GAAgD,IAA5BA,EAAiB1/B,OACtC,OAAOszB,EAEX,MAAMqM,EAAMD,EAAiBn9B,OAAOq9B,GA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","names":["performanceTimestampProvider","now","delegate","performance","undefined","timestampProvider","animationFramesFactory","DEFAULT_ANIMATION_FRAMES","schedule","animationFrameProvider","Observable","subscriber","subscription","Subscription","provider","start","run","timestamp","next","elapsed","closed","add","Subject","constructor","this","_checkFinalizedStatuses","hasError","_hasValue","_value","thrownError","isStopped","_isComplete","error","complete","value","super","queueScheduler","AsyncScheduler","AsyncAction","scheduler","work","state","delay","flush","execute","_execute","requestAsyncId","id","queue","VirtualTimeScheduler","schedulerActionCtor","VirtualAction","maxFrames","Infinity","frame","actions","action","shift","unsubscribe","index","Number","isFinite","active","push","sort","sortActions","recycleAsyncId","a","b","NotificationKind","kind","hasValue","observe","observer","observeNotification","do","nextHandler","errorHandler","completeHandler","d","_","accept","nextOrObserver","isFunction","p","_a","toObservable","result","of","throwError","EMPTY","TypeError","Notification","err","completeNotification","notification","_b","_c","source","config","hasConfig","Promise","resolve","reject","subscribe","defaultValue","EmptyError","SafeSubscriber","ArgumentOutOfRangeError","createErrorClass","_super","name","message","NotFoundError","SequenceError","TimeoutError","info","schedulerArg","first","each","with","_with","timeoutErrorFactory","asyncScheduler","meta","isValidDate","operate","originalSourceSubscription","timerSubscription","lastValue","seen","startTimer","executeSchedule","innerFrom","OperatorSubscriber","de","isNodeStyle","callbackFunc","resultSelector","isScheduler","args","bindCallbackInternals","apply","pipe","mapOneOrManyArgs","subscribeOn","observeOn","subject","AsyncSubject","uninitialized","subs","isAsync","isComplete","results","length","DEFAULT_CONFIG","connector","resetOnDisconnect","connection","connect","defer","addHandler","removeHandler","fromEventPattern","handler","e","retValue","initialStateOrOptions","condition","iterate","resultSelectorOrScheduler","initialState","arguments","identity","scheduleIterable","gen","sources","nextSources","argsOrArgArray","remaining","subscribeNext","nextSource","innerSub","noop","onErrorResumeNextWith","obj","from","Object","entries","pred","thisArg","call","predicate","filter","not","count","end","n","resourceFactory","observableFactory","resource","closingNotifier","currentBuffer","bufferSize","startBufferEvery","buffers","toEmit","buffer","arrRemove","bufferTimeSpan","otherArgs","bufferCreationInterval","maxBufferSize","bufferRecords","restartOnEmit","emit","record","startBuffer","bufferTimeSubscriber","recordsCopy","slice","Pe","openings","closingSelector","openValue","closingSubscription","closingSubscriber","openBuffer","accumulator","seed","hasSeed","emitOnNext","emitBeforeComplete","hasState","i","scanInternals","arrReducer","arr","reduce","joinFn","project","toArray","mergeMap","joinAllInternals","combineLatest","combineAll","combineLatestAll","popResultSelector","combineLatestInit","otherSources","innerObservable","concatMap","popScheduler","concatAll","concat","total","durationSelector","durationSubscriber","keySelector","flushes","distinctKeys","Set","key","has","clear","hasDefaultValue","v","take","defaultIfEmpty","throwIfEmpty","values","inner","exhaust","exhaustAll","createFind","findIndex","elementOrOptions","duration","element","groups","Map","notify","cb","forEach","handleError","consumer","groupBySourceSubscriber","GroupBySubscriber","group","get","set","grouped","groupSubject","groupSubscriber","activeGroups","teardownAttempted","createGroupedObservable","delete","comparer","x","y","flatMap","concurrent","popNumber","mergeAll","merge","properties","Error","map","currentProp","initialValue","BehaviorSubject","ConnectableObservable","windowTime","selectorOrScheduler","selector","multicast","ReplaySubject","raceInit","notifier","completions$","syncResub","isNotifierComplete","isMainComplete","checkComplete","subscribeForRepeatWhen","configOrCount","resetOnSuccess","soFar","subscribeForRetry","syncUnsub","resub","timer","notifierSubscriber","errors$","subscribeForRetryWhen","period","sample","interval","compareTo","comparator","aState","bState","isEqual","createSubscriber","selfState","otherState","sequenceEqualSubscriber","singleValue","seenValue","skipCount","ring","Array","valueIndex","oldValue","taking","skipSubscriber","switchMap","innerValue","async","scan","current","last","TimeInterval","due","withObservable","timeout","dateTimestampProvider","windowBoundaries","windowSubject","asObservable","windowSize","startWindowEvery","startEvery","windows","starts","window","c","windowTimeSpan","windowCreationInterval","maxWindowSize","windowRecords","restartOnClose","closeWindow","startWindow","loop","terminate","windowsCopy","openWindow","zip","otherInputs","zipStatic","getValue","_subscribe","_throwIfClosed","lift","operator","observable","observerOrNext","Subscriber","isObserver","isSubscription","isSubscriber","errorContext","_trySubscribe","sink","promiseCtor","getPromiseCtor","S","Symbol_observable","operations","pipeFromArray","toPromise","P","_bufferSize","_windowTime","_timestampProvider","_infiniteTimeWindow","Math","max","_buffer","_trimBuffer","_innerSubscribe","copy","adjustedBufferSize","splice","Scheduler","AnonymousSubject","ObjectUnsubscribedError","observers","observed","u","EMPTY_SUBSCRIPTION","destination","r","COMPLETE_NOTIFICATION","createNotification","z","EMPTY_OBSERVER","handleStoppedNotification","nextNotification","_next","errorNotification","_error","_complete","context","create","J","bind","H","N","wrapForErrorHandling","defaultErrorHandler","instance","captureError","reportUnhandledError","onStoppedNotification","timeoutProvider","initialTeardown","errors","_parentage","isArray","parent","remove","UnsubscriptionError","_teardowns","teardown","execTeardown","A","_hasParent","_addParent","includes","_removeParent","empty","onUnhandledError","useDeprecatedSynchronousErrorHandling","useDeprecatedNextContext","subjectFactory","hasLift","getSubject","_subject","_teardown","_refCount","_connection","refCount","higherOrderRefCount","observables","keys","argsArgArrayOrObject","createObject","valueTransform","maybeSchedule","remainingFirstValues","hasFirstValue","emptyScheduled","remainingCompletions","remainingEmissions","sourceIndex","input","scheduled","nodeEventEmitterMethods","eventTargetMethods","jqueryMethods","target","eventName","options","fromEvent","addEventListener","removeEventListener","isEventTarget","methodName","addListener","removeListener","isNodeStyleEventEmitter","toCommonHandlerRegistry","on","off","isJQueryStyleEventEmitter","isArrayLike","subTarget","trueResult","falseResult","isInteropObservable","obs","fromInteropObservable","array","fromArrayLike","isPromise","promise","then","fromPromise","isAsyncIterable","fromAsyncIterable","isIterable","iterable","fromIterable","isReadableStreamLike","readableStream","readableStreamLikeToAsyncGenerator","fromReadableStreamLike","createInvalidObservableTypeError","asyncIterable","asyncIterable_1","asyncIterable_1_1","Ge","process","catch","NEVER","subscriptions","s","errorOrErrorFactory","errorFactory","init","dueTime","intervalOrScheduler","intervalDuration","completed","every","some","onNext","onComplete","onError","onFinalize","t","endDuration","cleanupDuration","audit","handledResult","catchError","subscribable","fromSubscribable","activeTask","lastTime","targetTime","emitWhenIdle","delayWhen","delayDurationSelector","subscriptionDelay","ignoreElements","mapTo","defaultCompare","previousKey","currentKey","compare","distinctUntilChanged","exhaustMap","ii","outerValue","mergeInternals","callback","takeLast","onBeforeNext","expand","innerSubScheduler","additionalTeardown","outerNext","doInnerSub","innerComplete","bufferedValue","subjectOrSubjectFactory","prev","hasPrev","refCounter","sharedConnection","conn","subscribeForRepeat","resetOnError","resetOnComplete","resetOnRefCountZero","wrapperSource","resetConnection","hasCompleted","hasErrored","cancelReset","reset","resetAndUnsubscribe","dest","handleReset","configOrBufferSize","o","share","innerSubscriber","innerIndex","outerIndex","inclusive","tapObserver","isUnsub","finalize","defaultThrottleConfig","leading","trailing","sendValue","throttled","endThrottling","send","cleanupThrottling","startThrottle","duration$","throttle","defaultErrorFactory","inputs","len","otherValues","ready","iterator","Symbol_iterator","done","return","Symbol","asyncIterator","scheduleObservable","scheduleArray","schedulePromise","scheduleAsyncIterable","scheduleReadableStreamLike","intervalProvider","setInterval","clearInterval","handle","Action","pending","_id","_scheduler","_delay","errorValue","errored","SchedulerAction","_active","animationFrameScheduler","_scheduled","animationFrame","request","requestAnimationFrame","cancel","cancelAnimationFrame","resolved","nextHandle","activeHandles","Immediate","setImmediate","findAndClearHandle","clearImmediate","immediateProvider","I","asapScheduler","asap","Date","setTimeout","clearTimeout","getSymbolIterator","toString","join","pop","getPrototypeOf","prototype","objectProto","getKeys","isPOJO","item","indexOf","createImpl","ctorFunc","stack","isRoot","errorThrown","parentSubscription","repeat","scheduleSubscription","isNaN","reader","getReader","read","releaseLock","liftedSource","fn","callOrApply","fns","Zone","__load_patch","global","api","ResizeObserver","resizeObserverSymbol","symbol","patchMethod","self","_this","zones","currZone","_i","entries_1","entry","zone","zoneEntriesInfo","zoneName","targets","ProxyZoneSpec","defaultSpecDelegate","_delegateSpec","propertyKeys","lastTaskState","isNeedToTriggerHasTask","tasks","setDelegate","isLoaded","assertPresent","delegateSpec","isNewDelegate","k","macroTask","microTask","getDelegate","resetDelegate","tryTriggerHasTask","parentZoneDelegate","currentZone","targetZone","onHasTask","removeFromTasks","task","getAndClearPendingTasksInfo","pendingTasksInfo","dataInfo","data","type","onFork","zoneSpec","fork","onIntercept","intercept","onInvoke","applyThis","applyArgs","invoke","onHandleError","onScheduleTask","scheduleTask","onInvokeTask","invokeTask","onCancelTask","cancelTask","hasTaskState","hasTask","rxjs","require","__symbol__","errorSource","completeSource","ObjectDefineProperties","defineProperties","_zone","operatorDelegate","operatorSelf","operatorArgs","ObservablePrototype","writable","configurable","_zoneSource","_zoneSubscribe","proto","tearDown_1","zone_1","_zoneSubjectFactory","factory","_zoneUnsubscribe","_unsubscribe","_zoneUnsubscribeCleared","defineProperty","_zoneDestination","subscriptionZone","patchSubscriber","mark","label","measure","symbolPrefix","__Zone_symbol_prefix","checkDuplicate","_parent","_name","_properties","_zoneDelegate","ZoneDelegate","patches","ZoneAwarePromise","root","_currentZoneFrame","currentTask","_currentTask","ignoreDuplicate","hasOwnProperty","perfName","_api","performanceMeasure","getZoneWith","wrap","_callback","runGuarded","runTask","NO_ZONE","notScheduled","eventTask","reEntryGuard","running","_transitionTo","runCount","previousTask","isPeriodic","cancelFn","unknown","_updateTaskCount","newZone","scheduling","zoneDelegates","_zoneDelegates","scheduleMicroTask","customSchedule","ZoneTask","scheduleMacroTask","customCancel","scheduleEventTask","canceling","DELEGATE_ZS","parentDelegate","_taskCounts","_parentDelegate","_forkZS","_forkDlgt","_forkCurrZone","_interceptZS","_interceptDlgt","_interceptCurrZone","_invokeZS","_invokeDlgt","_invokeCurrZone","_handleErrorZS","_handleErrorDlgt","_handleErrorCurrZone","_scheduleTaskZS","_scheduleTaskDlgt","_scheduleTaskCurrZone","_invokeTaskZS","_invokeTaskDlgt","_invokeTaskCurrZone","_cancelTaskZS","_cancelTaskDlgt","_cancelTaskCurrZone","_hasTaskZS","_hasTaskDlgt","_hasTaskDlgtOwner","_hasTaskCurrZone","zoneSpecHasTask","returnTask","scheduleFn","isEmpty","counts","change","_state","useG","_numberOfNestedTaskFrames","drainMicroTaskQueue","cancelScheduleRequest","toState","fromState1","fromState2","handleId","toJSON","symbolSetTimeout","symbolPromise","symbolThen","nativeMicroTaskQueuePromise","_microTaskQueue","_isDrainingMicrotaskQueue","nativeThen","microtaskDrainDone","currentZoneFrame","showUncaughtError","patchEventTarget","patchOnProperties","bindArguments","patchThen","patchMacroTask","patchEventPrototype","isIEOrEdge","getGlobalObjects","ObjectDefineProperty","ObjectGetOwnPropertyDescriptor","ObjectCreate","ArraySlice","patchClass","wrapWithCurrentZone","filterProperties","attachOriginToPatched","_redefineProperty","patchCallbacks","getOwnPropertyDescriptor","ObjectGetPrototypeOf","ADD_EVENT_LISTENER_STR","REMOVE_EVENT_LISTENER_STR","ZONE_SYMBOL_ADD_EVENT_LISTENER","ZONE_SYMBOL_REMOVE_EVENT_LISTENER","TRUE_STR","FALSE_STR","ZONE_SYMBOL_PREFIX","zoneSymbol","isWindowExists","internalWindow","_global","NULL_ON_PROP_VALUE","propertyDesc","isWebWorker","WorkerGlobalScope","isNode","isBrowser","HTMLElement","isMix","zoneSymbolEventNames","wrapFn","event","eventNameSymbol","listener","errorEvent","filename","lineno","colno","preventDefault","prop","desc","enumerable","onPropPatchedSymbol","originalDescGet","originalDescSet","substr","newValue","REMOVE_ATTRIBUTE","removeAttribute","patchProperty","onProperties","j","originalInstanceKey","className","OriginalClass","patchFn","delegateName","isPropertyWritable","patchDelegate","funcName","metaCreator","setNative","cbIdx","scheduleMacroTaskWithCurrentZone","patched","original","isDetectedIEOrEdge","ieOrEdge","ua","navigator","userAgent","_uncaughtPromiseErrors","isDisableWrappingUncaughtPromiseRejection","rejection","console","uncaughtPromiseError","throwOriginal","handleUnhandledRejection","UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL","symbolState","symbolValue","symbolFinally","symbolParentPromiseValue","symbolParentPromiseState","UNRESOLVED","REJECTED","resolvePromise","CURRENT_TASK_TRACE_SYMBOL","onceWrapper","wasCalled","wrappedFunction","once","clearRejectedNoCatch","makeResolver","trace","creationTrace","scheduleResolveOrReject","JSON","stringify","readableObjectToString","REJECTION_HANDLED_HANDLER","chainPromise","onFulfilled","onRejected","promiseState","forwardResolution","forwardRejection","parentPromiseValue","isFinallyPromise","static","ZONE_AWARE_PROMISE_TO_STRING","res","rej","isThenable","onResolve","onReject","allWithCallback","thenCallback","status","errorCallback","reason","unresolvedCount","resolvedValues","curValueIndex","thenErr","executor","toStringTag","species","C","finally","onFinally","race","all","NativePromise","symbolThenPatched","Ctor","originalThen","wrapped","resultPromise","ctor","zoneify","originalFunctionToString","Function","ORIGINAL_DELEGATE_SYMBOL","PROMISE_SYMBOL","ERROR_SYMBOL","newFunctionToString","originalDelegate","nativePromise","nativeError","originalObjectToString","passiveSupported","OPTIMIZED_ZONE_EVENT_TASK_DATA","zoneSymbolEventNames$1","globalSources","EVENT_NAME_SYMBOL_REGX","RegExp","IMMEDIATE_PROPAGATION_SYMBOL","eventNameToString","falseEventName","trueEventName","symbolCapture","apis","patchOptions","ADD_EVENT_LISTENER","REMOVE_EVENT_LISTENER","rm","LISTENERS_EVENT_LISTENER","listeners","REMOVE_ALL_LISTENERS_EVENT_LISTENER","rmAll","zoneSymbolAddEventListener","ADD_EVENT_LISTENER_SOURCE","isRemoved","handleEvent","globalZoneAwareCallback","copyTasks","globalZoneAwareCaptureCallback","useGlobalCallback","validateHandler","vh","chkDup","returnTarget","rt","taskData","nativeAddEventListener","nativeRemoveEventListener","nativeListeners","nativeRemoveAllListeners","nativePrependEventListener","passive","capture","assign","prepend","isExisting","symbolEventNames","symbolEventName","existingTasks","allRemoved","diff","typeOfDelegate","unpatchedEvents","passiveEvents","makeAddListener","nativeListener","addSource","customScheduleFn","customCancelFn","transferEventName","isHandleEvent","buildEventListenerOptions","ct","prepareEventNames","constructorName","targetSource","fe","unshift","PREPEND_EVENT_LISTENER","existingTask","findEventTasks","captureTasks","removeTasks","match","exec","evtName","patchEventTargetMethods","foundTasks","captureFalseTasks","captureTrueTasks","Event","targetName","method","callbacks","nativeDelegate","opts","descriptor","windowEventNames","mediaElementEventNames","frameEventNames","frameSetEventNames","marqueeEventNames","XMLHttpRequestEventNames","IDBIndexEventNames","websocketEventNames","workerEventNames","eventNames","ignoreProperties","tip","ip","targetIgnoreProperties","op","SYMBOL_BLACK_LISTED_EVENTS","SYMBOL_UNPATCHED_EVENTS","taskSymbol","setName","cancelName","nameSuffix","clearNative","tasksByHandleId","clearTask","ref","unref","Me","legacyPatch","patchTimer","blockingMethods","patchEvent","EVENT_TARGET","EventTarget","eventTargetPatch","XMLHttpRequestEventTarget","supportsWebSocket","WebSocket","__Zone_ignore_on_properties","ignoreErrorProperties","isIE","patchFilteredProperties","Document","SVGElement","Element","HTMLMediaElement","HTMLFrameSetElement","HTMLBodyElement","HTMLFrameElement","HTMLIFrameElement","HTMLMarqueeElement","Worker","XMLHttpRequest","IDBIndex","IDBRequest","IDBOpenDBRequest","IDBDatabase","IDBTransaction","IDBCursor","propertyDescriptorPatch","customElements","patchCustomElements","XMLHttpRequestPrototype","oriAddListener","oriRemoveListener","XMLHttpRequestEventTargetPrototype","READY_STATE_CHANGE","SCHEDULED","XHR_SCHEDULED","XHR_ERROR_BEFORE_SCHEDULED","XHR_LISTENER","newListener","readyState","DONE","aborted","loadTasks","oriInvoke","storedTask","XHR_TASK","sendNative","abortNative","openNative","XHR_SYNC","XHR_URL","fetchTaskAborting","fetchTaskScheduling","url","placeholderCallback","findPendingTask","patchXHR","geolocation","fnNames","patchPrototype","PromiseRejectionEvent","evt","findPromiseRejectionHandler","__proto__","U","G","B","Ce","ae","lt","ye","K","He","je","Ye"],"sources":["./node_modules/rxjs/src/internal/scheduler/performanceTimestampProvider.ts","./node_modules/rxjs/src/internal/observable/dom/animationFrames.ts","./node_modules/rxjs/src/internal/AsyncSubject.ts","./node_modules/rxjs/src/internal/scheduler/queue.ts","./node_modules/rxjs/src/internal/scheduler/QueueScheduler.ts","./node_modules/rxjs/src/internal/scheduler/QueueAction.ts","./node_modules/rxjs/src/internal/scheduler/VirtualTimeScheduler.ts","./node_modules/rxjs/src/internal/Notification.ts","./node_modules/rxjs/src/internal/lastValueFrom.ts","./node_modules/rxjs/src/internal/firstValueFrom.ts","./node_modules/rxjs/src/internal/util/ArgumentOutOfRangeError.ts","./node_modules/rxjs/src/internal/util/NotFoundError.ts","./node_modules/rxjs/src/internal/util/SequenceError.ts","./node_modules/rxjs/src/internal/operators/timeout.ts","./node_modules/rxjs/src/internal/observable/bindCallbackInternals.ts","./node_modules/rxjs/src/internal/observable/bindCallback.ts","./node_modules/rxjs/src/internal/observable/bindNodeCallback.ts","./node_modules/rxjs/src/internal/observable/connectable.ts","./node_modules/rxjs/src/internal/observable/fromEventPattern.ts","./node_modules/rxjs/src/internal/observable/generate.ts","./node_modules/rxjs/src/internal/observable/onErrorResumeNext.ts","./node_modules/rxjs/src/internal/operators/onErrorResumeNext.ts","./node_modules/rxjs/src/internal/observable/pairs.ts","./node_modules/rxjs/src/internal/util/not.ts","./node_modules/rxjs/src/internal/observable/partition.ts","./node_modules/rxjs/src/internal/observable/range.ts","./node_modules/rxjs/src/internal/observable/using.ts","./node_modules/rxjs/src/internal/operators/buffer.ts","./node_modules/rxjs/src/internal/operators/bufferCount.ts","./node_modules/rxjs/src/internal/operators/bufferTime.ts","./node_modules/rxjs/src/internal/operators/bufferToggle.ts","./node_modules/rxjs/src/internal/operators/bufferWhen.ts","./node_modules/rxjs/src/internal/operators/scanInternals.ts","./node_modules/rxjs/src/internal/operators/reduce.ts","./node_modules/rxjs/src/internal/operators/toArray.ts","./node_modules/rxjs/src/internal/operators/joinAllInternals.ts","./node_modules/rxjs/src/internal/operators/combineLatestAll.ts","./node_modules/rxjs/src/internal/operators/combineAll.ts","./node_modules/rxjs/src/internal/operators/combineLatest.ts","./node_modules/rxjs/src/internal/operators/combineLatestWith.ts","./node_modules/rxjs/src/internal/operators/concatMapTo.ts","./node_modules/rxjs/src/internal/operators/concatWith.ts","./node_modules/rxjs/src/internal/operators/concat.ts","./node_modules/rxjs/src/internal/operators/count.ts","./node_modules/rxjs/src/internal/operators/debounce.ts","./node_modules/rxjs/src/internal/operators/dematerialize.ts","./node_modules/rxjs/src/internal/operators/distinct.ts","./node_modules/rxjs/src/internal/operators/elementAt.ts","./node_modules/rxjs/src/internal/operators/endWith.ts","./node_modules/rxjs/src/internal/operators/every.ts","./node_modules/rxjs/src/internal/operators/exhaustAll.ts","./node_modules/rxjs/src/internal/operators/exhaust.ts","./node_modules/rxjs/src/internal/operators/find.ts","./node_modules/rxjs/src/internal/operators/findIndex.ts","./node_modules/rxjs/src/internal/operators/groupBy.ts","./node_modules/rxjs/src/internal/operators/isEmpty.ts","./node_modules/rxjs/src/internal/operators/materialize.ts","./node_modules/rxjs/src/internal/operators/max.ts","./node_modules/rxjs/src/internal/operators/flatMap.ts","./node_modules/rxjs/src/internal/operators/mergeMapTo.ts","./node_modules/rxjs/src/internal/operators/mergeWith.ts","./node_modules/rxjs/src/internal/operators/merge.ts","./node_modules/rxjs/src/internal/operators/min.ts","./node_modules/rxjs/src/internal/operators/pluck.ts","./node_modules/rxjs/src/internal/operators/publishBehavior.ts","./node_modules/rxjs/src/internal/operators/publishLast.ts","./node_modules/rxjs/src/internal/operators/publishReplay.ts","./node_modules/rxjs/src/internal/operators/raceWith.ts","./node_modules/rxjs/src/internal/operators/repeatWhen.ts","./node_modules/rxjs/src/internal/operators/retry.ts","./node_modules/rxjs/src/internal/operators/retryWhen.ts","./node_modules/rxjs/src/internal/operators/sample.ts","./node_modules/rxjs/src/internal/operators/sampleTime.ts","./node_modules/rxjs/src/internal/operators/scan.ts","./node_modules/rxjs/src/internal/operators/sequenceEqual.ts","./node_modules/rxjs/src/internal/operators/single.ts","./node_modules/rxjs/src/internal/operators/skipLast.ts","./node_modules/rxjs/src/internal/operators/skipUntil.ts","./node_modules/rxjs/src/internal/operators/switchAll.ts","./node_modules/rxjs/src/internal/operators/switchScan.ts","./node_modules/rxjs/src/internal/operators/timeInterval.ts","./node_modules/rxjs/src/internal/operators/timeoutWith.ts","./node_modules/rxjs/src/internal/operators/timestamp.ts","./node_modules/rxjs/src/internal/operators/window.ts","./node_modules/rxjs/src/internal/operators/windowCount.ts","./node_modules/rxjs/src/internal/operators/windowTime.ts","./node_modules/rxjs/src/internal/operators/windowToggle.ts","./node_modules/rxjs/src/internal/operators/windowWhen.ts","./node_modules/rxjs/src/internal/operators/zipAll.ts","./node_modules/rxjs/src/internal/operators/zipWith.ts","./node_modules/rxjs/src/internal/operators/zip.ts","./node_modules/rxjs/src/internal/BehaviorSubject.ts","./node_modules/rxjs/src/internal/Observable.ts","./node_modules/rxjs/src/internal/ReplaySubject.ts","./node_modules/rxjs/src/internal/Scheduler.ts","./node_modules/rxjs/src/internal/Subject.ts","./node_modules/rxjs/src/internal/NotificationFactories.ts","./node_modules/rxjs/src/internal/Subscriber.ts","./node_modules/rxjs/src/internal/Subscription.ts","./node_modules/rxjs/src/internal/config.ts","./node_modules/rxjs/src/internal/observable/ConnectableObservable.ts","./node_modules/rxjs/src/internal/observable/combineLatest.ts","./node_modules/rxjs/src/internal/observable/concat.ts","./node_modules/rxjs/src/internal/observable/defer.ts","./node_modules/rxjs/src/internal/observable/empty.ts","./node_modules/rxjs/src/internal/observable/forkJoin.ts","./node_modules/rxjs/src/internal/observable/from.ts","./node_modules/rxjs/src/internal/observable/fromEvent.ts","./node_modules/rxjs/src/internal/observable/iif.ts","./node_modules/rxjs/src/internal/observable/innerFrom.ts","./node_modules/rxjs/src/internal/observable/interval.ts","./node_modules/rxjs/src/internal/observable/merge.ts","./node_modules/rxjs/src/internal/observable/never.ts","./node_modules/rxjs/src/internal/observable/of.ts","./node_modules/rxjs/src/internal/observable/race.ts","./node_modules/rxjs/src/internal/observable/throwError.ts","./node_modules/rxjs/src/internal/observable/timer.ts","./node_modules/rxjs/src/internal/observable/zip.ts","./node_modules/rxjs/src/internal/operators/OperatorSubscriber.ts","./node_modules/rxjs/src/internal/operators/audit.ts","./node_modules/rxjs/src/internal/operators/auditTime.ts","./node_modules/rxjs/src/internal/operators/catchError.ts","./node_modules/rxjs/src/internal/operators/concatAll.ts","./node_modules/rxjs/src/internal/operators/concatMap.ts","./node_modules/rxjs/src/internal/operators/connect.ts","./node_modules/rxjs/src/internal/observable/fromSubscribable.ts","./node_modules/rxjs/src/internal/operators/debounceTime.ts","./node_modules/rxjs/src/internal/operators/defaultIfEmpty.ts","./node_modules/rxjs/src/internal/operators/delay.ts","./node_modules/rxjs/src/internal/operators/delayWhen.ts","./node_modules/rxjs/src/internal/operators/distinctUntilChanged.ts","./node_modules/rxjs/src/internal/operators/distinctUntilKeyChanged.ts","./node_modules/rxjs/src/internal/operators/exhaustMap.ts","./node_modules/rxjs/src/internal/operators/expand.ts","./node_modules/rxjs/src/internal/operators/filter.ts","./node_modules/rxjs/src/internal/operators/finalize.ts","./node_modules/rxjs/src/internal/operators/first.ts","./node_modules/rxjs/src/internal/operators/ignoreElements.ts","./node_modules/rxjs/src/internal/operators/last.ts","./node_modules/rxjs/src/internal/operators/map.ts","./node_modules/rxjs/src/internal/operators/mapTo.ts","./node_modules/rxjs/src/internal/operators/mergeAll.ts","./node_modules/rxjs/src/internal/operators/mergeInternals.ts","./node_modules/rxjs/src/internal/operators/mergeMap.ts","./node_modules/rxjs/src/internal/operators/mergeScan.ts","./node_modules/rxjs/src/internal/operators/multicast.ts","./node_modules/rxjs/src/internal/operators/observeOn.ts","./node_modules/rxjs/src/internal/operators/pairwise.ts","./node_modules/rxjs/src/internal/operators/publish.ts","./node_modules/rxjs/src/internal/operators/refCount.ts","./node_modules/rxjs/src/internal/operators/repeat.ts","./node_modules/rxjs/src/internal/operators/share.ts","./node_modules/rxjs/src/internal/operators/shareReplay.ts","./node_modules/rxjs/src/internal/operators/skip.ts","./node_modules/rxjs/src/internal/operators/skipWhile.ts","./node_modules/rxjs/src/internal/operators/startWith.ts","./node_modules/rxjs/src/internal/operators/subscribeOn.ts","./node_modules/rxjs/src/internal/operators/switchMap.ts","./node_modules/rxjs/src/internal/operators/switchMapTo.ts","./node_modules/rxjs/src/internal/operators/take.ts","./node_modules/rxjs/src/internal/operators/takeLast.ts","./node_modules/rxjs/src/internal/operators/takeUntil.ts","./node_modules/rxjs/src/internal/operators/takeWhile.ts","./node_modules/rxjs/src/internal/operators/tap.ts","./node_modules/rxjs/src/internal/operators/throttle.ts","./node_modules/rxjs/src/internal/operators/throttleTime.ts","./node_modules/rxjs/src/internal/operators/throwIfEmpty.ts","./node_modules/rxjs/src/internal/operators/withLatestFrom.ts","./node_modules/rxjs/src/internal/scheduled/scheduleIterable.ts","./node_modules/rxjs/src/internal/scheduled/scheduleAsyncIterable.ts","./node_modules/rxjs/src/internal/scheduled/scheduled.ts","./node_modules/rxjs/src/internal/scheduled/scheduleObservable.ts","./node_modules/rxjs/src/internal/scheduled/scheduleArray.ts","./node_modules/rxjs/src/internal/scheduled/schedulePromise.ts","./node_modules/rxjs/src/internal/scheduled/scheduleReadableStreamLike.ts","./node_modules/rxjs/src/internal/scheduler/Action.ts","./node_modules/rxjs/src/internal/scheduler/intervalProvider.ts","./node_modules/rxjs/src/internal/scheduler/AsyncAction.ts","./node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts","./node_modules/rxjs/src/internal/scheduler/animationFrame.ts","./node_modules/rxjs/src/internal/scheduler/AnimationFrameScheduler.ts","./node_modules/rxjs/src/internal/scheduler/AnimationFrameAction.ts","./node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts","./node_modules/rxjs/src/internal/util/Immediate.ts","./node_modules/rxjs/src/internal/scheduler/immediateProvider.ts","./node_modules/rxjs/src/internal/scheduler/asap.ts","./node_modules/rxjs/src/internal/scheduler/AsapScheduler.ts","./node_modules/rxjs/src/internal/scheduler/AsapAction.ts","./node_modules/rxjs/src/internal/scheduler/async.ts","./node_modules/rxjs/src/internal/scheduler/dateTimestampProvider.ts","./node_modules/rxjs/src/internal/scheduler/timeoutProvider.ts","./node_modules/rxjs/src/internal/symbol/iterator.ts","./node_modules/rxjs/src/internal/symbol/observable.ts","./node_modules/rxjs/src/internal/util/EmptyError.ts","./node_modules/rxjs/src/internal/util/ObjectUnsubscribedError.ts","./node_modules/rxjs/src/internal/util/UnsubscriptionError.ts","./node_modules/rxjs/src/internal/util/args.ts","./node_modules/rxjs/src/internal/util/argsArgArrayOrObject.ts","./node_modules/rxjs/src/internal/util/argsOrArgArray.ts","./node_modules/rxjs/src/internal/util/arrRemove.ts","./node_modules/rxjs/src/internal/util/createErrorClass.ts","./node_modules/rxjs/src/internal/util/createObject.ts","./node_modules/rxjs/src/internal/util/errorContext.ts","./node_modules/rxjs/src/internal/util/executeSchedule.ts","./node_modules/rxjs/src/internal/util/identity.ts","./node_modules/rxjs/src/internal/util/isArrayLike.ts","./node_modules/rxjs/src/internal/util/isAsyncIterable.ts","./node_modules/rxjs/src/internal/util/isDate.ts","./node_modules/rxjs/src/internal/util/isFunction.ts","./node_modules/rxjs/src/internal/util/isInteropObservable.ts","./node_modules/rxjs/src/internal/util/isIterable.ts","./node_modules/rxjs/src/internal/util/isObservable.ts","./node_modules/rxjs/src/internal/util/isPromise.ts","./node_modules/rxjs/src/internal/util/isReadableStreamLike.ts","./node_modules/rxjs/src/internal/util/isScheduler.ts","./node_modules/rxjs/src/internal/util/lift.ts","./node_modules/rxjs/src/internal/util/mapOneOrManyArgs.ts","./node_modules/rxjs/src/internal/util/noop.ts","./node_modules/rxjs/src/internal/util/pipe.ts","./node_modules/rxjs/src/internal/util/reportUnhandledError.ts","./node_modules/rxjs/src/internal/util/throwUnobservableError.ts","./node_modules/zone.js/dist/zone-patch-resize-observer.js","./node_modules/zone.js/dist/zone-patch-rxjs-fake-async.js","./node_modules/zone.js/dist/zone-patch-rxjs.js","./node_modules/zone.js/fesm2015/zone.js","./node_modules/source-map-loader/dist/cjs.js"],"sourcesContent":["import { TimestampProvider } from '../types';\n\ninterface PerformanceTimestampProvider extends TimestampProvider {\n delegate: TimestampProvider | undefined;\n}\n\nexport const performanceTimestampProvider: PerformanceTimestampProvider = {\n now() {\n // Use the variable rather than `this` so that the function can be called\n // without being bound to the provider.\n return (performanceTimestampProvider.delegate || performance).now();\n },\n delegate: undefined,\n};\n","import { Observable } from '../../Observable';\nimport { Subscription } from '../../Subscription';\nimport { TimestampProvider } from \"../../types\";\nimport { performanceTimestampProvider } from '../../scheduler/performanceTimestampProvider';\nimport { animationFrameProvider } from '../../scheduler/animationFrameProvider';\n\n/**\n * An observable of animation frames\n *\n * Emits the the amount of time elapsed since subscription and the timestamp on each animation frame.\n * Defaults to milliseconds provided to the requestAnimationFrame's callback. Does not end on its own.\n *\n * Every subscription will start a separate animation loop. Since animation frames are always scheduled\n * by the browser to occur directly before a repaint, scheduling more than one animation frame synchronously\n * should not be much different or have more overhead than looping over an array of events during\n * a single animation frame. However, if for some reason the developer would like to ensure the\n * execution of animation-related handlers are all executed during the same task by the engine,\n * the `share` operator can be used.\n *\n * This is useful for setting up animations with RxJS.\n *\n * ### Example\n *\n * Tweening a div to move it on the screen\n *\n * ```ts\n * import { animationFrames } from 'rxjs';\n * import { map, takeWhile, endWith } from 'rxjs/operators';\n *\n * function tween(start: number, end: number, duration: number) {\n * const diff = end - start;\n * return animationFrames().pipe(\n * // Figure out what percentage of time has passed\n * map(({elapsed}) => elapsed / duration),\n * // Take the vector while less than 100%\n * takeWhile(v => v < 1),\n * // Finish with 100%\n * endWith(1),\n * // Calculate the distance traveled between start and end\n * map(v => v * diff + start)\n * );\n * }\n *\n * // Setup a div for us to move around\n * const div = document.createElement('div');\n * document.body.appendChild(div);\n * div.style.position = 'absolute';\n * div.style.width = '40px';\n * div.style.height = '40px';\n * div.style.backgroundColor = 'lime';\n * div.style.transform = 'translate3d(10px, 0, 0)';\n *\n * tween(10, 200, 4000).subscribe(x => {\n * div.style.transform = `translate3d(${x}px, 0, 0)`;\n * });\n * ```\n *\n * ### Example\n *\n * Providing a custom timestamp provider\n *\n * ```ts\n * import { animationFrames, TimestampProvider } from 'rxjs';\n *\n * // A custom timestamp provider\n * let now = 0;\n * const customTSProvider: TimestampProvider = {\n * now() { return now++; }\n * };\n *\n * const source$ = animationFrames(customTSProvider);\n *\n * // Log increasing numbers 0...1...2... on every animation frame.\n * source$.subscribe(({ elapsed }) => console.log(elapsed));\n * ```\n *\n * @param timestampProvider An object with a `now` method that provides a numeric timestamp\n */\nexport function animationFrames(timestampProvider?: TimestampProvider) {\n return timestampProvider ? animationFramesFactory(timestampProvider) : DEFAULT_ANIMATION_FRAMES;\n}\n\n/**\n * Does the work of creating the observable for `animationFrames`.\n * @param timestampProvider The timestamp provider to use to create the observable\n */\nfunction animationFramesFactory(timestampProvider?: TimestampProvider) {\n const { schedule } = animationFrameProvider;\n return new Observable<{ timestamp: number, elapsed: number }>(subscriber => {\n const subscription = new Subscription();\n // If no timestamp provider is specified, use performance.now() - as it\n // will return timestamps 'compatible' with those passed to the run\n // callback and won't be affected by NTP adjustments, etc.\n const provider = timestampProvider || performanceTimestampProvider;\n // Capture the start time upon subscription, as the run callback can remain\n // queued for a considerable period of time and the elapsed time should\n // represent the time elapsed since subscription - not the time since the\n // first rendered animation frame.\n const start = provider.now();\n const run = (timestamp: DOMHighResTimeStamp | number) => {\n // Use the provider's timestamp to calculate the elapsed time. Note that\n // this means - if the caller hasn't passed a provider - that\n // performance.now() will be used instead of the timestamp that was\n // passed to the run callback. The reason for this is that the timestamp\n // passed to the callback can be earlier than the start time, as it\n // represents the time at which the browser decided it would render any\n // queued frames - and that time can be earlier the captured start time.\n const now = provider.now();\n subscriber.next({\n timestamp: timestampProvider ? now : timestamp,\n elapsed: now - start\n });\n if (!subscriber.closed) {\n subscription.add(schedule(run));\n }\n };\n subscription.add(schedule(run));\n return subscription;\n });\n}\n\n/**\n * In the common case, where the timestamp provided by the rAF API is used,\n * we use this shared observable to reduce overhead.\n */\nconst DEFAULT_ANIMATION_FRAMES = animationFramesFactory();\n","import { Subject } from './Subject';\nimport { Subscriber } from './Subscriber';\n\n/**\n * A variant of Subject that only emits a value when it completes. It will emit\n * its latest value to all its observers on completion.\n *\n * @class AsyncSubject\n */\nexport class AsyncSubject extends Subject {\n private _value: T | null = null;\n private _hasValue = false;\n private _isComplete = false;\n\n /** @internal */\n protected _checkFinalizedStatuses(subscriber: Subscriber) {\n const { hasError, _hasValue, _value, thrownError, isStopped, _isComplete } = this;\n if (hasError) {\n subscriber.error(thrownError);\n } else if (isStopped || _isComplete) {\n _hasValue && subscriber.next(_value!);\n subscriber.complete();\n }\n }\n\n next(value: T): void {\n if (!this.isStopped) {\n this._value = value;\n this._hasValue = true;\n }\n }\n\n complete(): void {\n const { _hasValue, _value, _isComplete } = this;\n if (!_isComplete) {\n this._isComplete = true;\n _hasValue && super.next(_value!);\n super.complete();\n }\n }\n}\n","import { QueueAction } from './QueueAction';\nimport { QueueScheduler } from './QueueScheduler';\n\n/**\n *\n * Queue Scheduler\n *\n * Put every next task on a queue, instead of executing it immediately\n *\n * `queue` scheduler, when used with delay, behaves the same as {@link asyncScheduler} scheduler.\n *\n * When used without delay, it schedules given task synchronously - executes it right when\n * it is scheduled. However when called recursively, that is when inside the scheduled task,\n * another task is scheduled with queue scheduler, instead of executing immediately as well,\n * that task will be put on a queue and wait for current one to finish.\n *\n * This means that when you execute task with `queue` scheduler, you are sure it will end\n * before any other task scheduled with that scheduler will start.\n *\n * ## Examples\n * Schedule recursively first, then do something\n * ```ts\n * import { queueScheduler } from 'rxjs';\n *\n * queueScheduler.schedule(() => {\n * queueScheduler.schedule(() => console.log('second')); // will not happen now, but will be put on a queue\n *\n * console.log('first');\n * });\n *\n * // Logs:\n * // \"first\"\n * // \"second\"\n * ```\n *\n * Reschedule itself recursively\n * ```ts\n * import { queueScheduler } from 'rxjs';\n *\n * queueScheduler.schedule(function(state) {\n * if (state !== 0) {\n * console.log('before', state);\n * this.schedule(state - 1); // `this` references currently executing Action,\n * // which we reschedule with new state\n * console.log('after', state);\n * }\n * }, 0, 3);\n *\n * // In scheduler that runs recursively, you would expect:\n * // \"before\", 3\n * // \"before\", 2\n * // \"before\", 1\n * // \"after\", 1\n * // \"after\", 2\n * // \"after\", 3\n *\n * // But with queue it logs:\n * // \"before\", 3\n * // \"after\", 3\n * // \"before\", 2\n * // \"after\", 2\n * // \"before\", 1\n * // \"after\", 1\n * ```\n */\n\nexport const queueScheduler = new QueueScheduler(QueueAction);\n\n/**\n * @deprecated Renamed to {@link queueScheduler}. Will be removed in v8.\n */\nexport const queue = queueScheduler;\n","import { AsyncScheduler } from './AsyncScheduler';\n\nexport class QueueScheduler extends AsyncScheduler {\n}\n","import { AsyncAction } from './AsyncAction';\nimport { Subscription } from '../Subscription';\nimport { QueueScheduler } from './QueueScheduler';\nimport { SchedulerAction } from '../types';\n\nexport class QueueAction extends AsyncAction {\n\n constructor(protected scheduler: QueueScheduler,\n protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n public schedule(state?: T, delay: number = 0): Subscription {\n if (delay > 0) {\n return super.schedule(state, delay);\n }\n this.delay = delay;\n this.state = state;\n this.scheduler.flush(this);\n return this;\n }\n\n public execute(state: T, delay: number): any {\n return (delay > 0 || this.closed) ?\n super.execute(state, delay) :\n this._execute(state, delay) ;\n }\n\n protected requestAsyncId(scheduler: QueueScheduler, id?: any, delay: number = 0): any {\n // If delay exists and is greater than 0, or if the delay is null (the\n // action wasn't rescheduled) but was originally scheduled as an async\n // action, then recycle as an async action.\n\n if ((delay != null && delay > 0) || (delay == null && this.delay > 0)) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n // Otherwise flush the scheduler starting with this action.\n return scheduler.flush(this);\n }\n}\n","import { AsyncAction } from './AsyncAction';\nimport { Subscription } from '../Subscription';\nimport { AsyncScheduler } from './AsyncScheduler';\nimport { SchedulerAction } from '../types';\n\nexport class VirtualTimeScheduler extends AsyncScheduler {\n /** @deprecated Not used in VirtualTimeScheduler directly. Will be removed in v8. */\n static frameTimeFactor = 10;\n\n /**\n * The current frame for the state of the virtual scheduler instance. The the difference\n * between two \"frames\" is synonymous with the passage of \"virtual time units\". So if\n * you record `scheduler.frame` to be `1`, then later, observe `scheduler.frame` to be at `11`,\n * that means `10` virtual time units have passed.\n */\n public frame: number = 0;\n\n /**\n * Used internally to examine the current virtual action index being processed.\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n public index: number = -1;\n\n /**\n * This creates an instance of a `VirtualTimeScheduler`. Experts only. The signature of\n * this constructor is likely to change in the long run.\n *\n * @param schedulerActionCtor The type of Action to initialize when initializing actions during scheduling.\n * @param maxFrames The maximum number of frames to process before stopping. Used to prevent endless flush cycles.\n */\n constructor(schedulerActionCtor: typeof AsyncAction = VirtualAction as any, public maxFrames: number = Infinity) {\n super(schedulerActionCtor, () => this.frame);\n }\n\n /**\n * Prompt the Scheduler to execute all of its queued actions, therefore\n * clearing its queue.\n * @return {void}\n */\n public flush(): void {\n const { actions, maxFrames } = this;\n let error: any;\n let action: AsyncAction | undefined;\n\n while ((action = actions[0]) && action.delay <= maxFrames) {\n actions.shift();\n this.frame = action.delay;\n\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n }\n\n if (error) {\n while ((action = actions.shift())) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n\nexport class VirtualAction extends AsyncAction {\n protected active: boolean = true;\n\n constructor(\n protected scheduler: VirtualTimeScheduler,\n protected work: (this: SchedulerAction, state?: T) => void,\n protected index: number = (scheduler.index += 1)\n ) {\n super(scheduler, work);\n this.index = scheduler.index = index;\n }\n\n public schedule(state?: T, delay: number = 0): Subscription {\n if (Number.isFinite(delay)) {\n if (!this.id) {\n return super.schedule(state, delay);\n }\n this.active = false;\n // If an action is rescheduled, we save allocations by mutating its state,\n // pushing it to the end of the scheduler queue, and recycling the action.\n // But since the VirtualTimeScheduler is used for testing, VirtualActions\n // must be immutable so they can be inspected later.\n const action = new VirtualAction(this.scheduler, this.work);\n this.add(action);\n return action.schedule(state, delay);\n } else {\n // If someone schedules something with Infinity, it'll never happen. So we\n // don't even schedule it.\n return Subscription.EMPTY;\n }\n }\n\n protected requestAsyncId(scheduler: VirtualTimeScheduler, id?: any, delay: number = 0): any {\n this.delay = scheduler.frame + delay;\n const { actions } = scheduler;\n actions.push(this);\n (actions as Array>).sort(VirtualAction.sortActions);\n return true;\n }\n\n protected recycleAsyncId(scheduler: VirtualTimeScheduler, id?: any, delay: number = 0): any {\n return undefined;\n }\n\n protected _execute(state: T, delay: number): any {\n if (this.active === true) {\n return super._execute(state, delay);\n }\n }\n\n private static sortActions(a: VirtualAction, b: VirtualAction) {\n if (a.delay === b.delay) {\n if (a.index === b.index) {\n return 0;\n } else if (a.index > b.index) {\n return 1;\n } else {\n return -1;\n }\n } else if (a.delay > b.delay) {\n return 1;\n } else {\n return -1;\n }\n }\n}\n","import { PartialObserver, ObservableNotification, CompleteNotification, NextNotification, ErrorNotification } from './types';\nimport { Observable } from './Observable';\nimport { EMPTY } from './observable/empty';\nimport { of } from './observable/of';\nimport { throwError } from './observable/throwError';\nimport { isFunction } from './util/isFunction';\n\n// TODO: When this enum is removed, replace it with a type alias. See #4556.\n/**\n * @deprecated Use a string literal instead. `NotificationKind` will be replaced with a type alias in v8.\n * It will not be replaced with a const enum as those are not compatible with isolated modules.\n */\nexport enum NotificationKind {\n NEXT = 'N',\n ERROR = 'E',\n COMPLETE = 'C',\n}\n\n/**\n * Represents a push-based event or value that an {@link Observable} can emit.\n * This class is particularly useful for operators that manage notifications,\n * like {@link materialize}, {@link dematerialize}, {@link observeOn}, and\n * others. Besides wrapping the actual delivered value, it also annotates it\n * with metadata of, for instance, what type of push message it is (`next`,\n * `error`, or `complete`).\n *\n * @see {@link materialize}\n * @see {@link dematerialize}\n * @see {@link observeOn}\n * @deprecated It is NOT recommended to create instances of `Notification` directly.\n * Rather, try to create POJOs matching the signature outlined in {@link ObservableNotification}.\n * For example: `{ kind: 'N', value: 1 }`, `{ kind: 'E', error: new Error('bad') }`, or `{ kind: 'C' }`.\n * Will be removed in v8.\n */\nexport class Notification {\n /**\n * A value signifying that the notification will \"next\" if observed. In truth,\n * This is really synonymous with just checking `kind === \"N\"`.\n * @deprecated Will be removed in v8. Instead, just check to see if the value of `kind` is `\"N\"`.\n */\n readonly hasValue: boolean;\n\n /**\n * Creates a \"Next\" notification object.\n * @param kind Always `'N'`\n * @param value The value to notify with if observed.\n * @deprecated Internal implementation detail. Use {@link Notification#createNext createNext} instead.\n */\n constructor(kind: 'N', value?: T);\n /**\n * Creates an \"Error\" notification object.\n * @param kind Always `'E'`\n * @param value Always `undefined`\n * @param error The error to notify with if observed.\n * @deprecated Internal implementation detail. Use {@link Notification#createError createError} instead.\n */\n constructor(kind: 'E', value: undefined, error: any);\n /**\n * Creates a \"completion\" notification object.\n * @param kind Always `'C'`\n * @deprecated Internal implementation detail. Use {@link Notification#createComplete createComplete} instead.\n */\n constructor(kind: 'C');\n constructor(public readonly kind: 'N' | 'E' | 'C', public readonly value?: T, public readonly error?: any) {\n this.hasValue = kind === 'N';\n }\n\n /**\n * Executes the appropriate handler on a passed `observer` given the `kind` of notification.\n * If the handler is missing it will do nothing. Even if the notification is an error, if\n * there is no error handler on the observer, an error will not be thrown, it will noop.\n * @param observer The observer to notify.\n */\n observe(observer: PartialObserver): void {\n return observeNotification(this as ObservableNotification, observer);\n }\n\n /**\n * Executes a notification on the appropriate handler from a list provided.\n * If a handler is missing for the kind of notification, nothing is called\n * and no error is thrown, it will be a noop.\n * @param next A next handler\n * @param error An error handler\n * @param complete A complete handler\n * @deprecated Replaced with {@link Notification#observe observe}. Will be removed in v8.\n */\n do(next: (value: T) => void, error: (err: any) => void, complete: () => void): void;\n /**\n * Executes a notification on the appropriate handler from a list provided.\n * If a handler is missing for the kind of notification, nothing is called\n * and no error is thrown, it will be a noop.\n * @param next A next handler\n * @param error An error handler\n * @deprecated Replaced with {@link Notification#observe observe}. Will be removed in v8.\n */\n do(next: (value: T) => void, error: (err: any) => void): void;\n /**\n * Executes the next handler if the Notification is of `kind` `\"N\"`. Otherwise\n * this will not error, and it will be a noop.\n * @param next The next handler\n * @deprecated Replaced with {@link Notification#observe observe}. Will be removed in v8.\n */\n do(next: (value: T) => void): void;\n do(nextHandler: (value: T) => void, errorHandler?: (err: any) => void, completeHandler?: () => void): void {\n const { kind, value, error } = this;\n return kind === 'N' ? nextHandler?.(value!) : kind === 'E' ? errorHandler?.(error) : completeHandler?.();\n }\n\n /**\n * Executes a notification on the appropriate handler from a list provided.\n * If a handler is missing for the kind of notification, nothing is called\n * and no error is thrown, it will be a noop.\n * @param next A next handler\n * @param error An error handler\n * @param complete A complete handler\n * @deprecated Replaced with {@link Notification#observe observe}. Will be removed in v8.\n */\n accept(next: (value: T) => void, error: (err: any) => void, complete: () => void): void;\n /**\n * Executes a notification on the appropriate handler from a list provided.\n * If a handler is missing for the kind of notification, nothing is called\n * and no error is thrown, it will be a noop.\n * @param next A next handler\n * @param error An error handler\n * @deprecated Replaced with {@link Notification#observe observe}. Will be removed in v8.\n */\n accept(next: (value: T) => void, error: (err: any) => void): void;\n /**\n * Executes the next handler if the Notification is of `kind` `\"N\"`. Otherwise\n * this will not error, and it will be a noop.\n * @param next The next handler\n * @deprecated Replaced with {@link Notification#observe observe}. Will be removed in v8.\n */\n accept(next: (value: T) => void): void;\n\n /**\n * Executes the appropriate handler on a passed `observer` given the `kind` of notification.\n * If the handler is missing it will do nothing. Even if the notification is an error, if\n * there is no error handler on the observer, an error will not be thrown, it will noop.\n * @param observer The observer to notify.\n * @deprecated Replaced with {@link Notification#observe observe}. Will be removed in v8.\n */\n accept(observer: PartialObserver): void;\n accept(nextOrObserver: PartialObserver | ((value: T) => void), error?: (err: any) => void, complete?: () => void) {\n return isFunction((nextOrObserver as any)?.next)\n ? this.observe(nextOrObserver as PartialObserver)\n : this.do(nextOrObserver as (value: T) => void, error as any, complete as any);\n }\n\n /**\n * Returns a simple Observable that just delivers the notification represented\n * by this Notification instance.\n *\n * @deprecated Will be removed in v8. To convert a `Notification` to an {@link Observable},\n * use {@link of} and {@link dematerialize}: `of(notification).pipe(dematerialize())`.\n */\n toObservable(): Observable {\n const { kind, value, error } = this;\n // Select the observable to return by `kind`\n const result =\n kind === 'N'\n ? // Next kind. Return an observable of that value.\n of(value!)\n : //\n kind === 'E'\n ? // Error kind. Return an observable that emits the error.\n throwError(() => error)\n : //\n kind === 'C'\n ? // Completion kind. Kind is \"C\", return an observable that just completes.\n EMPTY\n : // Unknown kind, return falsy, so we error below.\n 0;\n if (!result) {\n // TODO: consider removing this check. The only way to cause this would be to\n // use the Notification constructor directly in a way that is not type-safe.\n // and direct use of the Notification constructor is deprecated.\n throw new TypeError(`Unexpected notification kind ${kind}`);\n }\n return result;\n }\n\n private static completeNotification = new Notification('C') as Notification & CompleteNotification;\n /**\n * A shortcut to create a Notification instance of the type `next` from a\n * given value.\n * @param {T} value The `next` value.\n * @return {Notification} The \"next\" Notification representing the\n * argument.\n * @nocollapse\n * @deprecated It is NOT recommended to create instances of `Notification` directly.\n * Rather, try to create POJOs matching the signature outlined in {@link ObservableNotification}.\n * For example: `{ kind: 'N', value: 1 }`, `{ kind: 'E', error: new Error('bad') }`, or `{ kind: 'C' }`.\n * Will be removed in v8.\n */\n static createNext(value: T) {\n return new Notification('N', value) as Notification & NextNotification;\n }\n\n /**\n * A shortcut to create a Notification instance of the type `error` from a\n * given error.\n * @param {any} [err] The `error` error.\n * @return {Notification} The \"error\" Notification representing the\n * argument.\n * @nocollapse\n * @deprecated It is NOT recommended to create instances of `Notification` directly.\n * Rather, try to create POJOs matching the signature outlined in {@link ObservableNotification}.\n * For example: `{ kind: 'N', value: 1 }`, `{ kind: 'E', error: new Error('bad') }`, or `{ kind: 'C' }`.\n * Will be removed in v8.\n */\n static createError(err?: any) {\n return new Notification('E', undefined, err) as Notification & ErrorNotification;\n }\n\n /**\n * A shortcut to create a Notification instance of the type `complete`.\n * @return {Notification} The valueless \"complete\" Notification.\n * @nocollapse\n * @deprecated It is NOT recommended to create instances of `Notification` directly.\n * Rather, try to create POJOs matching the signature outlined in {@link ObservableNotification}.\n * For example: `{ kind: 'N', value: 1 }`, `{ kind: 'E', error: new Error('bad') }`, or `{ kind: 'C' }`.\n * Will be removed in v8.\n */\n static createComplete(): Notification & CompleteNotification {\n return Notification.completeNotification;\n }\n}\n\n/**\n * Executes the appropriate handler on a passed `observer` given the `kind` of notification.\n * If the handler is missing it will do nothing. Even if the notification is an error, if\n * there is no error handler on the observer, an error will not be thrown, it will noop.\n * @param notification The notification object to observe.\n * @param observer The observer to notify.\n */\nexport function observeNotification(notification: ObservableNotification, observer: PartialObserver) {\n const { kind, value, error } = notification as any;\n if (typeof kind !== 'string') {\n throw new TypeError('Invalid notification, missing \"kind\"');\n }\n kind === 'N' ? observer.next?.(value!) : kind === 'E' ? observer.error?.(error) : observer.complete?.();\n}\n","import { Observable } from './Observable';\nimport { EmptyError } from './util/EmptyError';\n\nexport interface LastValueFromConfig {\n defaultValue: T;\n}\n\nexport function lastValueFrom(source: Observable, config: LastValueFromConfig): Promise;\nexport function lastValueFrom(source: Observable): Promise;\n\n/**\n * Converts an observable to a promise by subscribing to the observable,\n * waiting for it to complete, and resolving the returned promise with the\n * last value from the observed stream.\n *\n * If the observable stream completes before any values were emitted, the\n * returned promise will reject with {@link EmptyError} or will resolve\n * with the default value if a default was specified.\n *\n * If the observable stream emits an error, the returned promise will reject\n * with that error.\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * ### Example\n *\n * Wait for the last value from a stream and emit it from a promise in\n * an async function.\n *\n * ```ts\n * import { interval, lastValueFrom } from 'rxjs';\n * import { take } from 'rxjs/operators';\n *\n * async function execute() {\n * const source$ = interval(2000).pipe(take(10));\n * const finalNumber = await lastValueFrom(source$);\n * console.log(`The final number is ${finalNumber}`);\n * }\n *\n * execute();\n *\n * // Expected output:\n * // \"The final number is 9\"\n * ```\n *\n * @see {@link firstValueFrom}\n *\n * @param source the observable to convert to a promise\n * @param config a configuration object to define the `defaultValue` to use if the source completes without emitting a value\n */\nexport function lastValueFrom(source: Observable, config?: LastValueFromConfig): Promise {\n const hasConfig = typeof config === 'object';\n return new Promise((resolve, reject) => {\n let _hasValue = false;\n let _value: T;\n source.subscribe({\n next: (value) => {\n _value = value;\n _hasValue = true;\n },\n error: reject,\n complete: () => {\n if (_hasValue) {\n resolve(_value);\n } else if (hasConfig) {\n resolve(config!.defaultValue);\n } else {\n reject(new EmptyError());\n }\n },\n });\n });\n}\n","import { Observable } from './Observable';\nimport { EmptyError } from './util/EmptyError';\nimport { SafeSubscriber } from './Subscriber';\n\nexport interface FirstValueFromConfig {\n defaultValue: T;\n}\n\nexport function firstValueFrom(source: Observable, config: FirstValueFromConfig): Promise;\nexport function firstValueFrom(source: Observable): Promise;\n\n/**\n * Converts an observable to a promise by subscribing to the observable,\n * and returning a promise that will resolve as soon as the first value\n * arrives from the observable. The subscription will then be closed.\n *\n * If the observable stream completes before any values were emitted, the\n * returned promise will reject with {@link EmptyError} or will resolve\n * with the default value if a default was specified.\n *\n * If the observable stream emits an error, the returned promise will reject\n * with that error.\n *\n * **WARNING**: Only use this with observables you *know* will emit at least one value,\n * *OR* complete. If the source observable does not emit one value or complete, you will\n * end up with a promise that is hung up, and potentially all of the state of an\n * async function hanging out in memory. To avoid this situation, look into adding\n * something like {@link timeout}, {@link take}, {@link takeWhile}, or {@link takeUntil}\n * amongst others.\n *\n * ### Example\n *\n * Wait for the first value from a stream and emit it from a promise in\n * an async function.\n *\n * ```ts\n * import { interval, firstValueFrom } from 'rxjs';\n *\n * async function execute() {\n * const source$ = interval(2000);\n * const firstNumber = await firstValueFrom(source$);\n * console.log(`The first number is ${firstNumber}`);\n * }\n *\n * execute();\n *\n * // Expected output:\n * // \"The first number is 0\"\n * ```\n *\n * @see {@link lastValueFrom}\n *\n * @param source the observable to convert to a promise\n * @param config a configuration object to define the `defaultValue` to use if the source completes without emitting a value\n */\nexport function firstValueFrom(source: Observable, config?: FirstValueFromConfig): Promise {\n const hasConfig = typeof config === 'object';\n return new Promise((resolve, reject) => {\n const subscriber = new SafeSubscriber({\n next: (value) => {\n resolve(value);\n subscriber.unsubscribe();\n },\n error: reject,\n complete: () => {\n if (hasConfig) {\n resolve(config!.defaultValue);\n } else {\n reject(new EmptyError());\n }\n },\n });\n source.subscribe(subscriber);\n });\n}\n","import { createErrorClass } from './createErrorClass';\n\nexport interface ArgumentOutOfRangeError extends Error {}\n\nexport interface ArgumentOutOfRangeErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (): ArgumentOutOfRangeError;\n}\n\n/**\n * An error thrown when an element was queried at a certain index of an\n * Observable, but no such index or position exists in that sequence.\n *\n * @see {@link elementAt}\n * @see {@link take}\n * @see {@link takeLast}\n *\n * @class ArgumentOutOfRangeError\n */\nexport const ArgumentOutOfRangeError: ArgumentOutOfRangeErrorCtor = createErrorClass(\n (_super) =>\n function ArgumentOutOfRangeErrorImpl(this: any) {\n _super(this);\n this.name = 'ArgumentOutOfRangeError';\n this.message = 'argument out of range';\n }\n);\n","import { createErrorClass } from './createErrorClass';\n\nexport interface NotFoundError extends Error {}\n\nexport interface NotFoundErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (message: string): NotFoundError;\n}\n\n/**\n * An error thrown when a value or values are missing from an\n * observable sequence.\n *\n * @see {@link operators/single}\n *\n * @class NotFoundError\n */\nexport const NotFoundError: NotFoundErrorCtor = createErrorClass(\n (_super) =>\n function NotFoundErrorImpl(this: any, message: string) {\n _super(this);\n this.name = 'NotFoundError';\n this.message = message;\n }\n);\n","import { createErrorClass } from './createErrorClass';\n\nexport interface SequenceError extends Error {}\n\nexport interface SequenceErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (message: string): SequenceError;\n}\n\n/**\n * An error thrown when something is wrong with the sequence of\n * values arriving on the observable.\n *\n * @see {@link operators/single}\n *\n * @class SequenceError\n */\nexport const SequenceError: SequenceErrorCtor = createErrorClass(\n (_super) =>\n function SequenceErrorImpl(this: any, message: string) {\n _super(this);\n this.name = 'SequenceError';\n this.message = message;\n }\n);\n","import { asyncScheduler } from '../scheduler/async';\nimport { MonoTypeOperatorFunction, SchedulerLike, OperatorFunction, ObservableInput, ObservedValueOf } from '../types';\nimport { isValidDate } from '../util/isDate';\nimport { Subscription } from '../Subscription';\nimport { operate } from '../util/lift';\nimport { Observable } from '../Observable';\nimport { innerFrom } from '../observable/innerFrom';\nimport { createErrorClass } from '../util/createErrorClass';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { executeSchedule } from '../util/executeSchedule';\n\nexport interface TimeoutConfig = ObservableInput, M = unknown> {\n /**\n * The time allowed between values from the source before timeout is triggered.\n */\n each?: number;\n\n /**\n * The relative time as a `number` in milliseconds, or a specific time as a `Date` object,\n * by which the first value must arrive from the source before timeout is triggered.\n */\n first?: number | Date;\n\n /**\n * The scheduler to use with time-related operations within this operator. Defaults to {@link asyncScheduler}\n */\n scheduler?: SchedulerLike;\n\n /**\n * A factory used to create observable to switch to when timeout occurs. Provides\n * some information about the source observable's emissions and what delay or\n * exact time triggered the timeout.\n */\n with?: (info: TimeoutInfo) => O;\n\n /**\n * Optional additional metadata you can provide to code that handles\n * the timeout, will be provided through the {@link TimeoutError}.\n * This can be used to help identify the source of a timeout or pass along\n * other information related to the timeout.\n */\n meta?: M;\n}\n\nexport interface TimeoutInfo {\n /** Optional metadata that was provided to the timeout configuration. */\n readonly meta: M;\n /** The number of messages seen before the timeout */\n readonly seen: number;\n /** The last message seen */\n readonly lastValue: T | null;\n}\n\n/**\n * An error emitted when a timeout occurs.\n */\nexport interface TimeoutError extends Error {\n /**\n * The information provided to the error by the timeout\n * operation that created the error. Will be `null` if\n * used directly in non-RxJS code with an empty constructor.\n * (Note that using this constructor directly is not recommended,\n * you should create your own errors)\n */\n info: TimeoutInfo | null;\n}\n\nexport interface TimeoutErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (info?: TimeoutInfo): TimeoutError;\n}\n\n/**\n * An error thrown by the {@link operators/timeout} operator.\n *\n * Provided so users can use as a type and do quality comparisons.\n * We recommend you do not subclass this or create instances of this class directly.\n * If you have need of a error representing a timeout, you should\n * create your own error class and use that.\n *\n * @see {@link operators/timeout}\n *\n * @class TimeoutError\n */\nexport const TimeoutError: TimeoutErrorCtor = createErrorClass(\n (_super) =>\n function TimeoutErrorImpl(this: any, info: TimeoutInfo | null = null) {\n _super(this);\n this.message = 'Timeout has occurred';\n this.name = 'TimeoutError';\n this.info = info;\n }\n);\n\n/**\n * If `with` is provided, this will return an observable that will switch to a different observable if the source\n * does not push values within the specified time parameters.\n *\n * The most flexible option for creating a timeout behavior.\n *\n * The first thing to know about the configuration is if you do not provide a `with` property to the configuration,\n * when timeout conditions are met, this operator will emit a {@link TimeoutError}. Otherwise, it will use the factory\n * function provided by `with`, and switch your subscription to the result of that. Timeout conditions are provided by\n * the settings in `first` and `each`.\n *\n * The `first` property can be either a `Date` for a specific time, a `number` for a time period relative to the\n * point of subscription, or it can be skipped. This property is to check timeout conditions for the arrival of\n * the first value from the source _only_. The timings of all subsequent values from the source will be checked\n * against the time period provided by `each`, if it was provided.\n *\n * The `each` property can be either a `number` or skipped. If a value for `each` is provided, it represents the amount of\n * time the resulting observable will wait between the arrival of values from the source before timing out. Note that if\n * `first` is _not_ provided, the value from `each` will be used to check timeout conditions for the arrival of the first\n * value and all subsequent values. If `first` _is_ provided, `each` will only be use to check all values after the first.\n *\n * ### Example\n *\n * Emit a custom error if there is too much time between values\n *\n * ```ts\n * import { interval, throwError } from 'rxjs';\n * import { timeout } from 'rxjs/operators';\n *\n * class CustomTimeoutError extends Error {\n * constructor() {\n * super('It was too slow');\n * this.name = 'CustomTimeoutError';\n * }\n * }\n *\n * const slow$ = interval(900);\n *\n * slow$.pipe(\n * timeout({\n * each: 1000,\n * with: () => throwError(new CustomTimeoutError())\n * })\n * )\n * .subscribe({\n * error: console.error\n * })\n * ```\n *\n * ### Example\n *\n * Switch to a faster observable if your source is slow.\n *\n * ```ts\n * import { interval, throwError } from 'rxjs';\n * import { timeout } from 'rxjs/operators';\n *\n * const slow$ = interval(900);\n * const fast$ = interval(500);\n *\n * slow$.pipe(\n * timeout({\n * each: 1000,\n * with: () => fast$,\n * })\n * )\n * .subscribe(console.log)\n * ```\n * @param config The configuration for the timeout.\n */\nexport function timeout, M = unknown>(\n config: TimeoutConfig & { with: (info: TimeoutInfo) => O }\n): OperatorFunction>;\n\n/**\n * Returns an observable that will error or switch to a different observable if the source does not push values\n * within the specified time parameters.\n *\n * The most flexible option for creating a timeout behavior.\n *\n * The first thing to know about the configuration is if you do not provide a `with` property to the configuration,\n * when timeout conditions are met, this operator will emit a {@link TimeoutError}. Otherwise, it will use the factory\n * function provided by `with`, and switch your subscription to the result of that. Timeout conditions are provided by\n * the settings in `first` and `each`.\n *\n * The `first` property can be either a `Date` for a specific time, a `number` for a time period relative to the\n * point of subscription, or it can be skipped. This property is to check timeout conditions for the arrival of\n * the first value from the source _only_. The timings of all subsequent values from the source will be checked\n * against the time period provided by `each`, if it was provided.\n *\n * The `each` property can be either a `number` or skipped. If a value for `each` is provided, it represents the amount of\n * time the resulting observable will wait between the arrival of values from the source before timing out. Note that if\n * `first` is _not_ provided, the value from `each` will be used to check timeout conditions for the arrival of the first\n * value and all subsequent values. If `first` _is_ provided, `each` will only be use to check all values after the first.\n *\n * ### Handling TimeoutErrors\n *\n * If no `with` property was provided, subscriptions to the resulting observable may emit an error of {@link TimeoutError}.\n * The timeout error provides useful information you can examine when you're handling the error. The most common way to handle\n * the error would be with {@link catchError}, although you could use {@link tap} or just the error handler in your `subscribe` call\n * directly, if your error handling is only a side effect (such as notifying the user, or logging).\n *\n * In this case, you would check the error for `instanceof TimeoutError` to validate that the error was indeed from `timeout`, and\n * not from some other source. If it's not from `timeout`, you should probably rethrow it if you're in a `catchError`.\n *\n *\n * ### Example\n *\n * Emit a {@link TimeoutError} if the first value, and _only_ the first value, does not arrive within 5 seconds\n *\n * ```ts\n * import { interval } from 'rxjs';\n * import { timeout } from 'rxjs/operators';\n *\n * // A random interval that lasts between 0 and 10 seconds per tick\n * const source$ = interval(Math.round(Math.random() * 10000));\n *\n * source$.pipe(\n * timeout({ first: 5000 })\n * )\n * .subscribe(console.log);\n * ```\n *\n * ### Example\n *\n * Emit a {@link TimeoutError} if the source waits longer than 5 seconds between any two values or the first value\n * and subscription.\n *\n * ```ts\n * import { timer } from 'rxjs';\n * import { timeout, expand } from 'rxjs/operators';\n *\n * const getRandomTime = () => Math.round(Math.random() * 10000);\n *\n * // An observable that waits a random amount of time between each delivered value\n * const source$ = timer(getRandomTime()).pipe(\n * expand(() => timer(getRandomTime()))\n * )\n *\n * source$.pipe(\n * timeout({ each: 5000 })\n * )\n * .subscribe(console.log);\n * ```\n *\n * ### Example\n *\n * Emit a {@link TimeoutError} if the the source does not emit before 7 seconds, _or_ if the source waits longer than\n * 5 seconds between any two values after the first.\n *\n * ```ts\n * import { timer } from 'rxjs';\n * import { timeout, expand } from 'rxjs/operators';\n *\n * const getRandomTime = () => Math.round(Math.random() * 10000);\n *\n * // An observable that waits a random amount of time between each delivered value\n * const source$ = timer(getRandomTime()).pipe(\n * expand(() => timer(getRandomTime()))\n * )\n *\n * source$.pipe(\n * timeout({ first: 7000, each: 5000 })\n * )\n * .subscribe(console.log);\n * ```\n */\nexport function timeout(config: Omit, 'with'>): OperatorFunction;\n\n/**\n * Returns an observable that will error if the source does not push its first value before the specified time passed as a `Date`.\n * This is functionally the same as `timeout({ first: someDate })`.\n *\n * Errors if the first value doesn't show up before the given date and time\n *\n * ![](timeout.png)\n *\n * @param first The date to at which the resulting observable will timeout if the source observable\n * does not emit at least one value.\n * @param scheduler The scheduler to use. Defaults to {@link asyncScheduler}.\n */\nexport function timeout(first: Date, scheduler?: SchedulerLike): MonoTypeOperatorFunction;\n\n/**\n * Returns an observable that will error if the source does not push a value within the specified time in milliseconds.\n * This is functionally the same as `timeout({ each: milliseconds })`.\n *\n * Errors if it waits too long between any value\n *\n * ![](timeout.png)\n *\n * @param each The time allowed between each pushed value from the source before the resulting observable\n * will timeout.\n * @param scheduler The scheduler to use. Defaults to {@link asyncScheduler}.\n */\nexport function timeout(each: number, scheduler?: SchedulerLike): MonoTypeOperatorFunction;\n\n/**\n *\n * Errors if Observable does not emit a value in given time span.\n *\n * Timeouts on Observable that doesn't emit values fast enough.\n *\n * ![](timeout.png)\n *\n * @return A function that returns an Observable that mirrors behaviour of the\n * source Observable, unless timeout happens when it throws an error.\n */\nexport function timeout, M>(\n config: number | Date | TimeoutConfig,\n schedulerArg?: SchedulerLike\n): OperatorFunction> {\n // Intentionally terse code.\n // If the first argument is a valid `Date`, then we use it as the `first` config.\n // Otherwise, if the first argument is a `number`, then we use it as the `each` config.\n // Otherwise, it can be assumed the first argument is the configuration object itself, and\n // we destructure that into what we're going to use, setting important defaults as we do.\n // NOTE: The default for `scheduler` will be the `scheduler` argument if it exists, or\n // it will default to the `asyncScheduler`.\n const { first, each, with: _with = timeoutErrorFactory, scheduler = schedulerArg ?? asyncScheduler, meta = null! } = (isValidDate(config)\n ? { first: config }\n : typeof config === 'number'\n ? { each: config }\n : config) as TimeoutConfig;\n\n if (first == null && each == null) {\n // Ensure timeout was provided at runtime.\n throw new TypeError('No timeout provided.');\n }\n\n return operate((source, subscriber) => {\n // This subscription encapsulates our subscription to the\n // source for this operator. We're capturing it separately,\n // because if there is a `with` observable to fail over to,\n // we want to unsubscribe from our original subscription, and\n // hand of the subscription to that one.\n let originalSourceSubscription: Subscription;\n // The subscription for our timeout timer. This changes\n // every time get get a new value.\n let timerSubscription: Subscription;\n // A bit of state we pass to our with and error factories to\n // tell what the last value we saw was.\n let lastValue: T | null = null;\n // A bit of state we pass to the with and error factories to\n // tell how many values we have seen so far.\n let seen = 0;\n const startTimer = (delay: number) => {\n timerSubscription = executeSchedule(\n subscriber,\n scheduler,\n () => {\n try {\n originalSourceSubscription.unsubscribe();\n innerFrom(\n _with!({\n meta,\n lastValue,\n seen,\n })\n ).subscribe(subscriber);\n } catch (err) {\n subscriber.error(err);\n }\n },\n delay\n );\n };\n\n originalSourceSubscription = source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value: T) => {\n // clear the timer so we can emit and start another one.\n timerSubscription?.unsubscribe();\n seen++;\n // Emit\n subscriber.next((lastValue = value));\n // null | undefined are both < 0. Thanks, JavaScript.\n each! > 0 && startTimer(each!);\n },\n undefined,\n undefined,\n () => {\n if (!timerSubscription?.closed) {\n timerSubscription?.unsubscribe();\n }\n // Be sure not to hold the last value in memory after unsubscription\n // it could be quite large.\n lastValue = null;\n }\n )\n );\n\n // Intentionally terse code.\n // If `first` was provided, and it's a number, then use it.\n // If `first` was provided and it's not a number, it's a Date, and we get the difference between it and \"now\".\n // If `first` was not provided at all, then our first timer will be the value from `each`.\n startTimer(first != null ? (typeof first === 'number' ? first : +first - scheduler!.now()) : each!);\n });\n}\n\n/**\n * The default function to use to emit an error when timeout occurs and a `with` function\n * is not specified.\n * @param info The information about the timeout to pass along to the error\n */\nfunction timeoutErrorFactory(info: TimeoutInfo): Observable {\n throw new TimeoutError(info);\n}\n","import { SchedulerLike } from '../types';\nimport { isScheduler } from '../util/isScheduler';\nimport { Observable } from '../Observable';\nimport { subscribeOn } from '../operators/subscribeOn';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { observeOn } from '../operators/observeOn';\nimport { AsyncSubject } from '../AsyncSubject';\n\nexport function bindCallbackInternals(\n isNodeStyle: boolean,\n callbackFunc: any,\n resultSelector?: any,\n scheduler?: SchedulerLike\n): (...args: any[]) => Observable {\n if (resultSelector) {\n if (isScheduler(resultSelector)) {\n scheduler = resultSelector;\n } else {\n // The user provided a result selector.\n return function (this: any, ...args: any[]) {\n return (bindCallbackInternals(isNodeStyle, callbackFunc, scheduler) as any)\n .apply(this, args)\n .pipe(mapOneOrManyArgs(resultSelector as any));\n };\n }\n }\n\n // If a scheduler was passed, use our `subscribeOn` and `observeOn` operators\n // to compose that behavior for the user.\n if (scheduler) {\n return function (this: any, ...args: any[]) {\n return (bindCallbackInternals(isNodeStyle, callbackFunc) as any)\n .apply(this, args)\n .pipe(subscribeOn(scheduler!), observeOn(scheduler!));\n };\n }\n\n return function (this: any, ...args: any[]): Observable {\n // We're using AsyncSubject, because it emits when it completes,\n // and it will play the value to all late-arriving subscribers.\n const subject = new AsyncSubject();\n\n // If this is true, then we haven't called our function yet.\n let uninitialized = true;\n return new Observable((subscriber) => {\n // Add our subscriber to the subject.\n const subs = subject.subscribe(subscriber);\n\n if (uninitialized) {\n uninitialized = false;\n // We're going to execute the bound function\n // This bit is to signal that we are hitting the callback asychronously.\n // Because we don't have any anti-\"Zalgo\" gaurantees with whatever\n // function we are handed, we use this bit to figure out whether or not\n // we are getting hit in a callback synchronously during our call.\n let isAsync = false;\n\n // This is used to signal that the callback completed synchronously.\n let isComplete = false;\n\n // Call our function that has a callback. If at any time during this\n // call, an error is thrown, it will be caught by the Observable\n // subscription process and sent to the consumer.\n callbackFunc.apply(\n // Pass the appropriate `this` context.\n this,\n [\n // Pass the arguments.\n ...args,\n // And our callback handler.\n (...results: any[]) => {\n if (isNodeStyle) {\n // If this is a node callback, shift the first value off of the\n // results and check it, as it is the error argument. By shifting,\n // we leave only the argument(s) we want to pass to the consumer.\n const err = results.shift();\n if (err != null) {\n subject.error(err);\n // If we've errored, we can stop processing this function\n // as there's nothing else to do. Just return to escape.\n return;\n }\n }\n // If we have one argument, notify the consumer\n // of it as a single value, otherwise, if there's more than one, pass\n // them as an array. Note that if there are no arguments, `undefined`\n // will be emitted.\n subject.next(1 < results.length ? results : results[0]);\n // Flip this flag, so we know we can complete it in the synchronous\n // case below.\n isComplete = true;\n // If we're not asynchronous, we need to defer the `complete` call\n // until after the call to the function is over. This is because an\n // error could be thrown in the function after it calls our callback,\n // and if that is the case, if we complete here, we are unable to notify\n // the consumer than an error occured.\n if (isAsync) {\n subject.complete();\n }\n },\n ]\n );\n // If we flipped `isComplete` during the call, we resolved synchronously,\n // notify complete, because we skipped it in the callback to wait\n // to make sure there were no errors during the call.\n if (isComplete) {\n subject.complete();\n }\n\n // We're no longer synchronous. If the callback is called at this point\n // we can notify complete on the spot.\n isAsync = true;\n }\n\n // Return the subscription fron adding our subscriber to the subject.\n return subs;\n });\n };\n}\n","/* @prettier */\nimport { SchedulerLike } from '../types';\nimport { Observable } from '../Observable';\nimport { bindCallbackInternals } from './bindCallbackInternals';\n\nexport function bindCallback(\n callbackFunc: (...args: any[]) => void,\n resultSelector: (...args: any[]) => any,\n scheduler?: SchedulerLike\n): (...args: any[]) => Observable;\n\n// args is the arguments array and we push the callback on the rest tuple since the rest parameter must be last (only item) in a parameter list\nexport function bindCallback(\n callbackFunc: (...args: [...A, (...res: R) => void]) => void,\n schedulerLike?: SchedulerLike\n): (...arg: A) => Observable;\n\n/**\n * Converts a callback API to a function that returns an Observable.\n *\n * Give it a function `f` of type `f(x, callback)` and\n * it will return a function `g` that when called as `g(x)` will output an\n * Observable.\n *\n * `bindCallback` is not an operator because its input and output are not\n * Observables. The input is a function `func` with some parameters. The\n * last parameter must be a callback function that `func` calls when it is\n * done.\n *\n * The output of `bindCallback` is a function that takes the same parameters\n * as `func`, except the last one (the callback). When the output function\n * is called with arguments it will return an Observable. If function `func`\n * calls its callback with one argument, the Observable will emit that value.\n * If on the other hand the callback is called with multiple values the resulting\n * Observable will emit an array with said values as arguments.\n *\n * It is **very important** to remember that input function `func` is not called\n * when the output function is, but rather when the Observable returned by the output\n * function is subscribed. This means if `func` makes an AJAX request, that request\n * will be made every time someone subscribes to the resulting Observable, but not before.\n *\n * The last optional parameter - `scheduler` - can be used to control when the call\n * to `func` happens after someone subscribes to Observable, as well as when results\n * passed to callback will be emitted. By default, the subscription to an Observable calls `func`\n * synchronously, but using {@link asyncScheduler} as the last parameter will defer the call to `func`,\n * just like wrapping the call in `setTimeout` with a timeout of `0` would. If you were to use the async Scheduler\n * and call `subscribe` on the output Observable, all function calls that are currently executing\n * will end before `func` is invoked.\n *\n * By default, results passed to the callback are emitted immediately after `func` invokes the callback.\n * In particular, if the callback is called synchronously, then the subscription of the resulting Observable\n * will call the `next` function synchronously as well. If you want to defer that call,\n * you may use {@link asyncScheduler} just as before. This means that by using `Scheduler.async` you can\n * ensure that `func` always calls its callback asynchronously, thus avoiding terrifying Zalgo.\n *\n * Note that the Observable created by the output function will always emit a single value\n * and then complete immediately. If `func` calls the callback multiple times, values from subsequent\n * calls will not appear in the stream. If you need to listen for multiple calls,\n * you probably want to use {@link fromEvent} or {@link fromEventPattern} instead.\n *\n * If `func` depends on some context (`this` property) and is not already bound, the context of `func`\n * will be the context that the output function has at call time. In particular, if `func`\n * is called as a method of some objec and if `func` is not already bound, in order to preserve the context\n * it is recommended that the context of the output function is set to that object as well.\n *\n * If the input function calls its callback in the \"node style\" (i.e. first argument to callback is\n * optional error parameter signaling whether the call failed or not), {@link bindNodeCallback}\n * provides convenient error handling and probably is a better choice.\n * `bindCallback` will treat such functions the same as any other and error parameters\n * (whether passed or not) will always be interpreted as regular callback argument.\n *\n * ## Examples\n *\n * ### Convert jQuery's getJSON to an Observable API\n * ```ts\n * import { bindCallback } from 'rxjs';\n * import * as jQuery from 'jquery';\n *\n * // Suppose we have jQuery.getJSON('/my/url', callback)\n * const getJSONAsObservable = bindCallback(jQuery.getJSON);\n * const result = getJSONAsObservable('/my/url');\n * result.subscribe(x => console.log(x), e => console.error(e));\n * ```\n *\n * ### Receive an array of arguments passed to a callback\n * ```ts\n * import { bindCallback } from 'rxjs';\n *\n * const someFunction = (cb) => {\n * cb(5, 'some string', {someProperty: 'someValue'})\n * };\n *\n * const boundSomeFunction = bindCallback(someFunction);\n * boundSomeFunction(12, 10).subscribe(values => {\n * console.log(values); // [22, 2]\n * });\n * ```\n *\n * ### Compare behaviour with and without async Scheduler\n * ```ts\n * import { bindCallback, asyncScheduler } from 'rxjs';\n *\n * function iCallMyCallbackSynchronously(cb) {\n * cb();\n * }\n *\n * const boundSyncFn = bindCallback(iCallMyCallbackSynchronously);\n * const boundAsyncFn = bindCallback(iCallMyCallbackSynchronously, null, asyncScheduler);\n *\n * boundSyncFn().subscribe(() => console.log('I was sync!'));\n * boundAsyncFn().subscribe(() => console.log('I was async!'));\n * console.log('This happened...');\n *\n * // Logs:\n * // I was sync!\n * // This happened...\n * // I was async!\n * ```\n *\n * ### Use bindCallback on an object method\n * ```ts\n * import { bindCallback } from 'rxjs';\n *\n * const boundMethod = bindCallback(someObject.methodWithCallback);\n * boundMethod\n * .call(someObject) // make sure methodWithCallback has access to someObject\n * .subscribe(subscriber);\n * ```\n *\n * @see {@link bindNodeCallback}\n * @see {@link from}\n *\n * @param {function} func A function with a callback as the last parameter.\n * @param {SchedulerLike} [scheduler] The scheduler on which to schedule the\n * callbacks.\n * @return {function(...params: *): Observable} A function which returns the\n * Observable that delivers the same values the callback would deliver.\n */\nexport function bindCallback(\n callbackFunc: (...args: [...any[], (...res: any) => void]) => void,\n resultSelector?: ((...args: any[]) => any) | SchedulerLike,\n scheduler?: SchedulerLike\n): (...args: any[]) => Observable {\n return bindCallbackInternals(false, callbackFunc, resultSelector, scheduler);\n}\n","/* @prettier */\nimport { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\nimport { bindCallbackInternals } from './bindCallbackInternals';\n\nexport function bindNodeCallback(\n callbackFunc: (...args: any[]) => void,\n resultSelector: (...args: any[]) => any,\n scheduler?: SchedulerLike\n): (...args: any[]) => Observable;\n\n// args is the arguments array and we push the callback on the rest tuple since the rest parameter must be last (only item) in a parameter list\nexport function bindNodeCallback(\n callbackFunc: (...args: [...A, (err: any, ...res: R) => void]) => void,\n schedulerLike?: SchedulerLike\n): (...arg: A) => Observable;\n\n/**\n * Converts a Node.js-style callback API to a function that returns an\n * Observable.\n *\n * It's just like {@link bindCallback}, but the\n * callback is expected to be of type `callback(error, result)`.\n *\n * `bindNodeCallback` is not an operator because its input and output are not\n * Observables. The input is a function `func` with some parameters, but the\n * last parameter must be a callback function that `func` calls when it is\n * done. The callback function is expected to follow Node.js conventions,\n * where the first argument to the callback is an error object, signaling\n * whether call was successful. If that object is passed to callback, it means\n * something went wrong.\n *\n * The output of `bindNodeCallback` is a function that takes the same\n * parameters as `func`, except the last one (the callback). When the output\n * function is called with arguments, it will return an Observable.\n * If `func` calls its callback with error parameter present, Observable will\n * error with that value as well. If error parameter is not passed, Observable will emit\n * second parameter. If there are more parameters (third and so on),\n * Observable will emit an array with all arguments, except first error argument.\n *\n * Note that `func` will not be called at the same time output function is,\n * but rather whenever resulting Observable is subscribed. By default call to\n * `func` will happen synchronously after subscription, but that can be changed\n * with proper `scheduler` provided as optional third parameter. {@link SchedulerLike}\n * can also control when values from callback will be emitted by Observable.\n * To find out more, check out documentation for {@link bindCallback}, where\n * {@link SchedulerLike} works exactly the same.\n *\n * As in {@link bindCallback}, context (`this` property) of input function will be set to context\n * of returned function, when it is called.\n *\n * After Observable emits value, it will complete immediately. This means\n * even if `func` calls callback again, values from second and consecutive\n * calls will never appear on the stream. If you need to handle functions\n * that call callbacks multiple times, check out {@link fromEvent} or\n * {@link fromEventPattern} instead.\n *\n * Note that `bindNodeCallback` can be used in non-Node.js environments as well.\n * \"Node.js-style\" callbacks are just a convention, so if you write for\n * browsers or any other environment and API you use implements that callback style,\n * `bindNodeCallback` can be safely used on that API functions as well.\n *\n * Remember that Error object passed to callback does not have to be an instance\n * of JavaScript built-in `Error` object. In fact, it does not even have to an object.\n * Error parameter of callback function is interpreted as \"present\", when value\n * of that parameter is truthy. It could be, for example, non-zero number, non-empty\n * string or boolean `true`. In all of these cases resulting Observable would error\n * with that value. This means usually regular style callbacks will fail very often when\n * `bindNodeCallback` is used. If your Observable errors much more often then you\n * would expect, check if callback really is called in Node.js-style and, if not,\n * switch to {@link bindCallback} instead.\n *\n * Note that even if error parameter is technically present in callback, but its value\n * is falsy, it still won't appear in array emitted by Observable.\n *\n * ## Examples\n * ### Read a file from the filesystem and get the data as an Observable\n * ```ts\n * import * as fs from 'fs';\n * const readFileAsObservable = bindNodeCallback(fs.readFile);\n * const result = readFileAsObservable('./roadNames.txt', 'utf8');\n * result.subscribe(x => console.log(x), e => console.error(e));\n * ```\n *\n * ### Use on function calling callback with multiple arguments\n * ```ts\n * someFunction((err, a, b) => {\n * console.log(err); // null\n * console.log(a); // 5\n * console.log(b); // \"some string\"\n * });\n * const boundSomeFunction = bindNodeCallback(someFunction);\n * boundSomeFunction()\n * .subscribe(value => {\n * console.log(value); // [5, \"some string\"]\n * });\n * ```\n *\n * ### Use on function calling callback in regular style\n * ```ts\n * someFunction(a => {\n * console.log(a); // 5\n * });\n * const boundSomeFunction = bindNodeCallback(someFunction);\n * boundSomeFunction()\n * .subscribe(\n * value => {} // never gets called\n * err => console.log(err) // 5\n * );\n * ```\n *\n * @see {@link bindCallback}\n * @see {@link from}\n *\n * @param {function} func Function with a Node.js-style callback as the last parameter.\n * @param {SchedulerLike} [scheduler] The scheduler on which to schedule the\n * callbacks.\n * @return {function(...params: *): Observable} A function which returns the\n * Observable that delivers the same values the Node.js callback would\n * deliver.\n */\nexport function bindNodeCallback(\n callbackFunc: (...args: [...any[], (err: any, ...res: any) => void]) => void,\n resultSelector?: ((...args: any[]) => any) | SchedulerLike,\n scheduler?: SchedulerLike\n): (...args: any[]) => Observable {\n return bindCallbackInternals(true, callbackFunc, resultSelector, scheduler);\n}\n","import { Connectable, ObservableInput, SubjectLike } from '../types';\nimport { Subject } from '../Subject';\nimport { Subscription } from '../Subscription';\nimport { Observable } from '../Observable';\nimport { defer } from './defer';\n\nexport interface ConnectableConfig {\n /**\n * A factory function used to create the Subject through which the source\n * is multicast. By default this creates a {@link Subject}.\n */\n connector: () => SubjectLike;\n /**\n * If true, the resulting observable will reset internal state upon disconnetion\n * and return to a \"cold\" state. This allows the resulting observable to be\n * reconnected.\n * If false, upon disconnection, the connecting subject will remain the\n * connecting subject, meaning the resulting observable will not go \"cold\" again,\n * and subsequent repeats or resubscriptions will resubscribe to that same subject.\n */\n resetOnDisconnect?: boolean;\n}\n\n/**\n * The default configuration for `connectable`.\n */\nconst DEFAULT_CONFIG: ConnectableConfig = {\n connector: () => new Subject(),\n resetOnDisconnect: true,\n};\n\n/**\n * Creates an observable that multicasts once `connect()` is called on it.\n *\n * @param source The observable source to make connectable.\n * @param config The configuration object for `connectable`.\n * @returns A \"connectable\" observable, that has a `connect()` method, that you must call to\n * connect the source to all consumers through the subject provided as the connector.\n */\nexport function connectable(source: ObservableInput, config: ConnectableConfig = DEFAULT_CONFIG): Connectable {\n // The subscription representing the connection.\n let connection: Subscription | null = null;\n const { connector, resetOnDisconnect = true } = config;\n let subject = connector();\n\n const result: any = new Observable((subscriber) => {\n return subject.subscribe(subscriber);\n });\n\n // Define the `connect` function. This is what users must call\n // in order to \"connect\" the source to the subject that is\n // multicasting it.\n result.connect = () => {\n if (!connection || connection.closed) {\n connection = defer(() => source).subscribe(subject);\n if (resetOnDisconnect) {\n connection.add(() => (subject = connector()));\n }\n }\n return connection;\n };\n\n return result;\n}\n","import { Observable } from '../Observable';\nimport { isFunction } from '../util/isFunction';\nimport { NodeEventHandler } from './fromEvent';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\n\n/* tslint:disable:max-line-length */\nexport function fromEventPattern(\n addHandler: (handler: NodeEventHandler) => any,\n removeHandler?: (handler: NodeEventHandler, signal?: any) => void\n): Observable;\nexport function fromEventPattern(\n addHandler: (handler: NodeEventHandler) => any,\n removeHandler?: (handler: NodeEventHandler, signal?: any) => void,\n resultSelector?: (...args: any[]) => T\n): Observable;\n/* tslint:enable:max-line-length */\n\n/**\n * Creates an Observable from an arbitrary API for registering event handlers.\n *\n * When that method for adding event handler was something {@link fromEvent}\n * was not prepared for.\n *\n * ![](fromEventPattern.png)\n *\n * `fromEventPattern` allows you to convert into an Observable any API that supports registering handler functions\n * for events. It is similar to {@link fromEvent}, but far\n * more flexible. In fact, all use cases of {@link fromEvent} could be easily handled by\n * `fromEventPattern` (although in slightly more verbose way).\n *\n * This operator accepts as a first argument an `addHandler` function, which will be injected with\n * handler parameter. That handler is actually an event handler function that you now can pass\n * to API expecting it. `addHandler` will be called whenever Observable\n * returned by the operator is subscribed, so registering handler in API will not\n * necessarily happen when `fromEventPattern` is called.\n *\n * After registration, every time an event that we listen to happens,\n * Observable returned by `fromEventPattern` will emit value that event handler\n * function was called with. Note that if event handler was called with more\n * than one argument, second and following arguments will not appear in the Observable.\n *\n * If API you are using allows to unregister event handlers as well, you can pass to `fromEventPattern`\n * another function - `removeHandler` - as a second parameter. It will be injected\n * with the same handler function as before, which now you can use to unregister\n * it from the API. `removeHandler` will be called when consumer of resulting Observable\n * unsubscribes from it.\n *\n * In some APIs unregistering is actually handled differently. Method registering an event handler\n * returns some kind of token, which is later used to identify which function should\n * be unregistered or it itself has method that unregisters event handler.\n * If that is the case with your API, make sure token returned\n * by registering method is returned by `addHandler`. Then it will be passed\n * as a second argument to `removeHandler`, where you will be able to use it.\n *\n * If you need access to all event handler parameters (not only the first one),\n * or you need to transform them in any way, you can call `fromEventPattern` with optional\n * third parameter - project function which will accept all arguments passed to\n * event handler when it is called. Whatever is returned from project function will appear on\n * resulting stream instead of usual event handlers first argument. This means\n * that default project can be thought of as function that takes its first parameter\n * and ignores the rest.\n *\n * ## Example\n * ### Emits clicks happening on the DOM document\n *\n * ```ts\n * import { fromEventPattern } from 'rxjs';\n *\n * function addClickHandler(handler) {\n * document.addEventListener('click', handler);\n * }\n *\n * function removeClickHandler(handler) {\n * document.removeEventListener('click', handler);\n * }\n *\n * const clicks = fromEventPattern(\n * addClickHandler,\n * removeClickHandler\n * );\n * clicks.subscribe(x => console.log(x));\n *\n * // Whenever you click anywhere in the browser, DOM MouseEvent\n * // object will be logged.\n * ```\n *\n * ## Example\n * ### Use with API that returns cancellation token\n *\n * ```ts\n * import { fromEventPattern } from 'rxjs';\n *\n * const token = someAPI.registerEventHandler(function() {});\n * someAPI.unregisterEventHandler(token); // this APIs cancellation method accepts\n * // not handler itself, but special token.\n *\n * const someAPIObservable = fromEventPattern(\n * function(handler) { return someAPI.registerEventHandler(handler); }, // Note that we return the token here...\n * function(handler, token) { someAPI.unregisterEventHandler(token); } // ...to then use it here.\n * );\n * ```\n *\n * ## Example\n * ### Use with project function\n *\n * ```ts\n * import { fromEventPattern } from 'rxjs';\n *\n * someAPI.registerEventHandler((eventType, eventMessage) => {\n * console.log(eventType, eventMessage); // Logs \"EVENT_TYPE\" \"EVENT_MESSAGE\" to console.\n * });\n *\n * const someAPIObservable = fromEventPattern(\n * handler => someAPI.registerEventHandler(handler),\n * handler => someAPI.unregisterEventHandler(handler)\n * (eventType, eventMessage) => eventType + \" --- \" + eventMessage // without that function only \"EVENT_TYPE\"\n * ); // would be emitted by the Observable\n *\n * someAPIObservable.subscribe(value => console.log(value));\n *\n * // Logs:\n * // \"EVENT_TYPE --- EVENT_MESSAGE\"\n * ```\n *\n * @see {@link fromEvent}\n * @see {@link bindCallback}\n * @see {@link bindNodeCallback}\n *\n * @param {function(handler: Function): any} addHandler A function that takes\n * a `handler` function as argument and attaches it somehow to the actual\n * source of events.\n * @param {function(handler: Function, token?: any): void} [removeHandler] A function that\n * takes a `handler` function as an argument and removes it from the event source. If `addHandler`\n * returns some kind of token, `removeHandler` function will have it as a second parameter.\n * @param {function(...args: any): T} [project] A function to\n * transform results. It takes the arguments from the event handler and\n * should return a single value.\n * @return {Observable} Observable which, when an event happens, emits first parameter\n * passed to registered event handler. Alternatively it emits whatever project function returns\n * at that moment.\n */\nexport function fromEventPattern(\n addHandler: (handler: NodeEventHandler) => any,\n removeHandler?: (handler: NodeEventHandler, signal?: any) => void,\n resultSelector?: (...args: any[]) => T\n): Observable {\n if (resultSelector) {\n return fromEventPattern(addHandler, removeHandler).pipe(mapOneOrManyArgs(resultSelector));\n }\n\n return new Observable((subscriber) => {\n const handler = (...e: T[]) => subscriber.next(e.length === 1 ? e[0] : e);\n const retValue = addHandler(handler);\n return isFunction(removeHandler) ? () => removeHandler(handler, retValue) : undefined;\n });\n}\n","import { Observable } from '../Observable';\nimport { identity } from '../util/identity';\nimport { ObservableInput, SchedulerLike } from '../types';\nimport { isScheduler } from '../util/isScheduler';\nimport { defer } from './defer';\nimport { scheduleIterable } from '../scheduled/scheduleIterable';\n\ntype ConditionFunc = (state: S) => boolean;\ntype IterateFunc = (state: S) => S;\ntype ResultFunc = (state: S) => T;\n\nexport interface GenerateBaseOptions {\n /**\n * Initial state.\n */\n initialState: S;\n /**\n * Condition function that accepts state and returns boolean.\n * When it returns false, the generator stops.\n * If not specified, a generator never stops.\n */\n condition?: ConditionFunc;\n /**\n * Iterate function that accepts state and returns new state.\n */\n iterate: IterateFunc;\n /**\n * SchedulerLike to use for generation process.\n * By default, a generator starts immediately.\n */\n scheduler?: SchedulerLike;\n}\n\nexport interface GenerateOptions extends GenerateBaseOptions {\n /**\n * Result selection function that accepts state and returns a value to emit.\n */\n resultSelector: ResultFunc;\n}\n\n/**\n * Generates an observable sequence by running a state-driven loop\n * producing the sequence's elements, using the specified scheduler\n * to send out observer messages.\n *\n * ![](generate.png)\n *\n * ## Examples\n *\n * ### Produces sequences of number\n *\n * ```ts\n * import { generate } from 'rxjs';\n *\n * const result = generate(0, x => x < 3, x => x + 1, x => x);\n *\n * result.subscribe(x => console.log(x));\n *\n * // Logs:\n * // 0\n * // 1\n * // 2\n * ```\n *\n * ### Use asap scheduler\n *\n * ```ts\n * import { generate } from 'rxjs';\n *\n * const result = generate(1, x => x < 5, x => x * 2, x => x + 1, asap);\n *\n * result.subscribe(x => console.log(x));\n *\n * // Logs:\n * // 2\n * // 3\n * // 5\n * ```\n *\n * @see {@link from}\n * @see {@link Observable}\n *\n * @param {S} initialState Initial state.\n * @param {function (state: S): boolean} condition Condition to terminate generation (upon returning false).\n * @param {function (state: S): S} iterate Iteration step function.\n * @param {function (state: S): T} resultSelector Selector function for results produced in the sequence. (deprecated)\n * @param {SchedulerLike} [scheduler] A {@link SchedulerLike} on which to run the generator loop. If not provided, defaults to emit immediately.\n * @returns {Observable} The generated sequence.\n * @deprecated Instead of passing separate arguments, use the options argument. Signatures taking separate arguments will be removed in v8.\n */\nexport function generate(\n initialState: S,\n condition: ConditionFunc,\n iterate: IterateFunc,\n resultSelector: ResultFunc,\n scheduler?: SchedulerLike\n): Observable;\n\n/**\n * Generates an Observable by running a state-driven loop\n * that emits an element on each iteration.\n *\n * Use it instead of nexting values in a for loop.\n *\n * ![](generate.png)\n *\n * `generate` allows you to create a stream of values generated with a loop very similar to\n * a traditional for loop. The first argument of `generate` is a beginning value. The second argument\n * is a function that accepts this value and tests if some condition still holds. If it does,\n * then the loop continues, if not, it stops. The third value is a function which takes the\n * previously defined value and modifies it in some way on each iteration. Note how these three parameters\n * are direct equivalents of three expressions in a traditional for loop: the first expression\n * initializes some state (for example, a numeric index), the second tests if the loop can perform the next\n * iteration (for example, if the index is lower than 10) and the third states how the defined value\n * will be modified on every step (for example, the index will be incremented by one).\n *\n * Return value of a `generate` operator is an Observable that on each loop iteration\n * emits a value. First of all, the condition function is ran. If it returns true, then the Observable\n * emits the currently stored value (initial value at the first iteration) and finally updates\n * that value with iterate function. If at some point the condition returns false, then the Observable\n * completes at that moment.\n *\n * Optionally you can pass a fourth parameter to `generate` - a result selector function which allows you\n * to immediately map the value that would normally be emitted by an Observable.\n *\n * If you find three anonymous functions in `generate` call hard to read, you can provide\n * a single object to the operator instead where the object has the properties: `initialState`,\n * `condition`, `iterate` and `resultSelector`, which should have respective values that you\n * would normally pass to `generate`. `resultSelector` is still optional, but that form\n * of calling `generate` allows you to omit `condition` as well. If you omit it, that means\n * condition always holds, or in other words the resulting Observable will never complete.\n *\n * Both forms of `generate` can optionally accept a scheduler. In case of a multi-parameter call,\n * scheduler simply comes as a last argument (no matter if there is a `resultSelector`\n * function or not). In case of a single-parameter call, you can provide it as a\n * `scheduler` property on the object passed to the operator. In both cases, a scheduler decides when\n * the next iteration of the loop will happen and therefore when the next value will be emitted\n * by the Observable. For example, to ensure that each value is pushed to the Observer\n * on a separate task in the event loop, you could use the `async` scheduler. Note that\n * by default (when no scheduler is passed) values are simply emitted synchronously.\n *\n *\n * ## Examples\n *\n * ### Use with condition and iterate functions\n *\n * ```ts\n * import { generate } from 'rxjs';\n *\n * const result = generate(0, x => x < 3, x => x + 1);\n *\n * result.subscribe({\n * next: value => console.log(value),\n * complete: () => console.log('Complete!')\n * });\n *\n * // Logs:\n * // 0\n * // 1\n * // 2\n * // \"Complete!\"\n * ```\n *\n * ### Use with condition, iterate and resultSelector functions\n *\n * ```ts\n * import { generate } from 'rxjs';\n *\n * const result = generate(0, x => x < 3, x => x + 1, x => x * 1000);\n *\n * result.subscribe({\n * next: value => console.log(value),\n * complete: () => console.log('complete!')\n * });\n *\n * // Logs:\n * // 0\n * // 1000\n * // 2000\n * // \"complete!\"\n * ```\n *\n * ### Use with options object\n *\n * ```ts\n * import { generate } from 'rxjs';\n *\n * const result = generate({\n * initialState: 0,\n * condition(value) { return value < 3; },\n * iterate(value) { return value + 1; },\n * resultSelector(value) { return value * 1000; }\n * });\n *\n * result.subscribe({\n * next: value => console.log(value),\n * complete: () => console.log('complete!')\n * });\n *\n * // Logs:\n * // 0\n * // 1000\n * // 2000\n * // \"Complete!\"\n * ```\n *\n * ### Use options object without condition function\n *\n * ```ts\n * import { generate } from 'rxjs';\n *\n * const result = generate({\n * initialState: 0,\n * iterate(value) { return value + 1; },\n * resultSelector(value) { return value * 1000; }\n * });\n *\n * result.subscribe({\n * next: value => console.log(value),\n * complete: () => console.log('complete!') // This will never run\n * });\n *\n * // Logs:\n * // 0\n * // 1000\n * // 2000\n * // 3000\n * // ...and never stops.\n * ```\n *\n * @see {@link from}\n * @see {@link index/Observable.create}\n *\n * @param {S} initialState Initial state.\n * @param {function (state: S): boolean} condition Condition to terminate generation (upon returning false).\n * @param {function (state: S): S} iterate Iteration step function.\n * @param {function (state: S): T} [resultSelector] Selector function for results produced in the sequence.\n * @param {Scheduler} [scheduler] A {@link Scheduler} on which to run the generator loop. If not provided, defaults to emitting immediately.\n * @return {Observable} The generated sequence.\n * @deprecated Instead of passing separate arguments, use the options argument. Signatures taking separate arguments will be removed in v8.\n */\nexport function generate(\n initialState: S,\n condition: ConditionFunc,\n iterate: IterateFunc,\n scheduler?: SchedulerLike\n): Observable;\n\n/**\n * Generates an observable sequence by running a state-driven loop\n * producing the sequence's elements, using the specified scheduler\n * to send out observer messages.\n * The overload accepts options object that might contain initial state, iterate,\n * condition and scheduler.\n *\n * ![](generate.png)\n *\n * ## Examples\n *\n * ### Use options object with condition function\n *\n * ```ts\n * import { generate } from 'rxjs';\n *\n * const result = generate({\n * initialState: 0,\n * condition: x => x < 3,\n * iterate: x => x + 1,\n * });\n *\n * result.subscribe({\n * next: value => console.log(value),\n * complete: () => console.log('complete!')\n * });\n *\n * // Logs:\n * // 0\n * // 1\n * // 2\n * // \"Complete!\".\n * ```\n *\n * @see {@link from}\n * @see {@link Observable}\n *\n * @param {GenerateBaseOptions} options Object that must contain initialState, iterate and might contain condition and scheduler.\n * @returns {Observable} The generated sequence.\n */\nexport function generate(options: GenerateBaseOptions): Observable;\n\n/**\n * Generates an observable sequence by running a state-driven loop\n * producing the sequence's elements, using the specified scheduler\n * to send out observer messages.\n * The overload accepts options object that might contain initial state, iterate,\n * condition, result selector and scheduler.\n *\n * ![](generate.png)\n *\n * ## Examples\n *\n * ### Use options object with condition and iterate function\n *\n * ```ts\n * import { generate } from 'rxjs';\n *\n * const result = generate({\n * initialState: 0,\n * condition: x => x < 3,\n * iterate: x => x + 1,\n * resultSelector: x => x,\n * });\n *\n * result.subscribe({\n * next: value => console.log(value),\n * complete: () => console.log('complete!')\n * });\n *\n * // Logs:\n * // 0\n * // 1\n * // 2\n * // \"Complete!\".\n * ```\n *\n * @see {@link from}\n * @see {@link Observable}\n *\n * @param {GenerateOptions} options Object that must contain initialState, iterate, resultSelector and might contain condition and scheduler.\n * @returns {Observable} The generated sequence.\n */\nexport function generate(options: GenerateOptions): Observable;\n\nexport function generate(\n initialStateOrOptions: S | GenerateOptions,\n condition?: ConditionFunc,\n iterate?: IterateFunc,\n resultSelectorOrScheduler?: ResultFunc | SchedulerLike,\n scheduler?: SchedulerLike\n): Observable {\n let resultSelector: ResultFunc;\n let initialState: S;\n\n // TODO: Remove this as we move away from deprecated signatures\n // and move towards a configuration object argument.\n if (arguments.length === 1) {\n // If we only have one argument, we can assume it is a configuration object.\n // Note that folks not using TypeScript may trip over this.\n ({\n initialState,\n condition,\n iterate,\n resultSelector = identity as ResultFunc,\n scheduler,\n } = initialStateOrOptions as GenerateOptions);\n } else {\n // Deprecated arguments path. Figure out what the user\n // passed and set it here.\n initialState = initialStateOrOptions as S;\n if (!resultSelectorOrScheduler || isScheduler(resultSelectorOrScheduler)) {\n resultSelector = identity as ResultFunc;\n scheduler = resultSelectorOrScheduler as SchedulerLike;\n } else {\n resultSelector = resultSelectorOrScheduler as ResultFunc;\n }\n }\n\n // The actual generator used to \"generate\" values.\n function* gen() {\n for (let state = initialState; !condition || condition(state); state = iterate!(state)) {\n yield resultSelector(state);\n }\n }\n\n // We use `defer` because we want to defer the creation of the iterator from the iterable.\n return defer(\n (scheduler\n ? // If a scheduler was provided, use `scheduleIterable` to ensure that iteration/generation\n // happens on the scheduler.\n () => scheduleIterable(gen(), scheduler!)\n : // Otherwise, if there's no scheduler, we can just use the generator function directly in\n // `defer` and executing it will return the generator (which is iterable).\n gen) as () => ObservableInput\n );\n}\n","import { Observable } from '../Observable';\nimport { ObservableInputTuple } from '../types';\nimport { EMPTY } from './empty';\nimport { onErrorResumeNext as onErrorResumeNextWith } from '../operators/onErrorResumeNext';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\n\n/* tslint:disable:max-line-length */\nexport function onErrorResumeNext(sources: [...ObservableInputTuple]): Observable;\nexport function onErrorResumeNext(...sources: [...ObservableInputTuple]): Observable;\n\n/* tslint:enable:max-line-length */\n\n/**\n * When any of the provided Observable emits an complete or error notification, it immediately subscribes to the next one\n * that was passed.\n *\n * Execute series of Observables no matter what, even if it means swallowing errors.\n *\n * ![](onErrorResumeNext.png)\n *\n * `onErrorResumeNext` Will subscribe to each observable source it is provided, in order.\n * If the source it's subscribed to emits an error or completes, it will move to the next source\n * without error.\n *\n * If `onErrorResumeNext` is provided no arguments, or a single, empty array, it will return {@link index/EMPTY}.\n *\n * `onErrorResumeNext` is basically {@link concat}, only it will continue, even if one of its\n * sources emits an error.\n *\n * Note that there is no way to handle any errors thrown by sources via the result of\n * `onErrorResumeNext`. If you want to handle errors thrown in any given source, you can\n * always use the {@link catchError} operator on them before passing them into `onErrorResumeNext`.\n *\n * ## Example\n * Subscribe to the next Observable after map fails\n * ```ts\n * import { onErrorResumeNext, of } from 'rxjs';\n * import { map } from 'rxjs/operators';\n *\n * onErrorResumeNext(\n * of(1, 2, 3, 0).pipe(\n * map(x => {\n * if (x === 0) throw Error();\n * return 10 / x;\n * })\n * ),\n * of(1, 2, 3),\n * )\n * .subscribe(\n * val => console.log(val),\n * err => console.log(err), // Will never be called.\n * () => console.log('done'),\n * );\n *\n * // Logs:\n * // 10\n * // 5\n * // 3.3333333333333335\n * // 1\n * // 2\n * // 3\n * // \"done\"\n * ```\n *\n * @see {@link concat}\n * @see {@link catchError}\n *\n * @param {...ObservableInput} sources Observables (or anything that *is* observable) passed either directly or as an array.\n * @return {Observable} An Observable that concatenates all sources, one after the other,\n * ignoring all errors, such that any error causes it to move on to the next source.\n */\nexport function onErrorResumeNext(\n ...sources: [[...ObservableInputTuple]] | [...ObservableInputTuple]\n): Observable {\n return onErrorResumeNextWith(argsOrArgArray(sources))(EMPTY);\n}\n","import { Observable } from '../Observable';\nimport { ObservableInputTuple, OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { noop } from '../util/noop';\n\nexport function onErrorResumeNext(\n sources: [...ObservableInputTuple]\n): OperatorFunction;\nexport function onErrorResumeNext(\n ...sources: [...ObservableInputTuple]\n): OperatorFunction;\n\n/**\n * When any of the provided Observable emits an complete or error notification, it immediately subscribes to the next one\n * that was passed.\n *\n * Execute series of Observables, subscribes to next one on error or complete.\n *\n * ![](onErrorResumeNext.png)\n *\n * `onErrorResumeNext` is an operator that accepts a series of Observables, provided either directly as\n * arguments or as an array. If no single Observable is provided, returned Observable will simply behave the same\n * as the source.\n *\n * `onErrorResumeNext` returns an Observable that starts by subscribing and re-emitting values from the source Observable.\n * When its stream of values ends - no matter if Observable completed or emitted an error - `onErrorResumeNext`\n * will subscribe to the first Observable that was passed as an argument to the method. It will start re-emitting\n * its values as well and - again - when that stream ends, `onErrorResumeNext` will proceed to subscribing yet another\n * Observable in provided series, no matter if previous Observable completed or ended with an error. This will\n * be happening until there is no more Observables left in the series, at which point returned Observable will\n * complete - even if the last subscribed stream ended with an error.\n *\n * `onErrorResumeNext` can be therefore thought of as version of {@link concat} operator, which is more permissive\n * when it comes to the errors emitted by its input Observables. While `concat` subscribes to the next Observable\n * in series only if previous one successfully completed, `onErrorResumeNext` subscribes even if it ended with\n * an error.\n *\n * Note that you do not get any access to errors emitted by the Observables. In particular do not\n * expect these errors to appear in error callback passed to {@link Observable#subscribe}. If you want to take\n * specific actions based on what error was emitted by an Observable, you should try out {@link catchError} instead.\n *\n *\n * ## Example\n * Subscribe to the next Observable after map fails\n * ```ts\n * import { of } from 'rxjs';\n * import { onErrorResumeNext, map } from 'rxjs/operators';\n *\n * of(1, 2, 3, 0).pipe(\n * map(x => {\n * if (x === 0) { throw Error(); }\n * return 10 / x;\n * }),\n * onErrorResumeNext(of(1, 2, 3)),\n * )\n * .subscribe(\n * val => console.log(val),\n * err => console.log(err), // Will never be called.\n * () => console.log('that\\'s it!')\n * );\n *\n * // Logs:\n * // 10\n * // 5\n * // 3.3333333333333335\n * // 1\n * // 2\n * // 3\n * // \"that's it!\"\n * ```\n *\n * @see {@link concat}\n * @see {@link catchError}\n *\n * @param {...ObservableInput} nextSources Observables passed either directly or as an array.\n * @return A function that returns an Observable that emits values from source\n * Observable, but - if it errors - subscribes to the next passed Observable\n * and so on, until it completes or runs out of Observables.\n */\nexport function onErrorResumeNext(\n ...sources: [[...ObservableInputTuple]] | [...ObservableInputTuple]\n): OperatorFunction {\n // For some reason, TS 4.1 RC gets the inference wrong here and infers the\n // result to be `A[number][]` - completely dropping the ObservableInput part\n // of the type. This makes no sense whatsoever. As a workaround, the type is\n // asserted explicitly.\n const nextSources = (argsOrArgArray(sources) as unknown) as ObservableInputTuple;\n\n return operate((source, subscriber) => {\n const remaining = [source, ...nextSources];\n const subscribeNext = () => {\n if (!subscriber.closed) {\n if (remaining.length > 0) {\n let nextSource: Observable;\n try {\n nextSource = innerFrom(remaining.shift()!);\n } catch (err) {\n subscribeNext();\n return;\n }\n\n // Here we have to use one of our Subscribers, or it does not wire up\n // The `closed` property of upstream Subscribers synchronously, that\n // would result in situation were we could not stop a synchronous firehose\n // with something like `take(3)`.\n const innerSub = new OperatorSubscriber(subscriber, undefined, noop, noop);\n subscriber.add(nextSource.subscribe(innerSub));\n innerSub.add(subscribeNext);\n } else {\n subscriber.complete();\n }\n }\n };\n\n subscribeNext();\n });\n}\n","import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\nimport { from } from './from';\n\n/**\n * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8.\n */\nexport function pairs(arr: readonly T[], scheduler?: SchedulerLike): Observable<[string, T]>;\n/**\n * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8.\n */\nexport function pairs>(obj: O, scheduler?: SchedulerLike): Observable<[keyof O, O[keyof O]]>;\n/**\n * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8.\n */\nexport function pairs(iterable: Iterable, scheduler?: SchedulerLike): Observable<[string, T]>;\n/**\n * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8.\n */\nexport function pairs(\n n: number | bigint | boolean | ((...args: any[]) => any) | symbol,\n scheduler?: SchedulerLike\n): Observable<[never, never]>;\n\n/**\n * Convert an object into an Observable of `[key, value]` pairs.\n *\n * Turn entries of an object into a stream.\n *\n * ![](pairs.png)\n *\n * `pairs` takes an arbitrary object and returns an Observable that emits arrays. Each\n * emitted array has exactly two elements - the first is a key from the object\n * and the second is a value corresponding to that key. Keys are extracted from\n * an object via `Object.keys` function, which means that they will be only\n * enumerable keys that are present on an object directly - not ones inherited\n * via prototype chain.\n *\n * By default these arrays are emitted synchronously. To change that you can\n * pass a {@link SchedulerLike} as a second argument to `pairs`.\n *\n * ## Example\n * ### Converts an object to an Observable\n * ```ts\n * import { pairs } from 'rxjs';\n *\n * const obj = {\n * foo: 42,\n * bar: 56,\n * baz: 78\n * };\n *\n * pairs(obj).subscribe({\n * next: value => console.log(value),\n * complete: () => console.log('Complete!')\n * });\n *\n * // Logs:\n * // [\"foo\", 42],\n * // [\"bar\", 56],\n * // [\"baz\", 78],\n * // \"Complete!\"\n * ```\n *\n * ### Object.entries required\n *\n * In IE, you will need to polyfill `Object.entries` in order to use this.\n * [MDN has a polyfill here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries)\n *\n * @param {Object} obj The object to inspect and turn into an\n * Observable sequence.\n * @param {Scheduler} [scheduler] An optional IScheduler to schedule\n * when resulting Observable will emit values.\n * @returns {(Observable>)} An observable sequence of\n * [key, value] pairs from the object.\n * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8.\n */\nexport function pairs(obj: any, scheduler?: SchedulerLike) {\n return from(Object.entries(obj), scheduler as any);\n}\n","export function not(pred: (value: T, index: number) => boolean, thisArg: any): (value: T, index: number) => boolean {\n return (value: T, index: number) => !pred.call(thisArg, value, index); \n}","import { not } from '../util/not';\nimport { filter } from '../operators/filter';\nimport { ObservableInput } from '../types';\nimport { Observable } from '../Observable';\nimport { innerFrom } from './innerFrom';\n\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function partition(\n source: ObservableInput,\n predicate: (this: A, value: T, index: number) => value is U,\n thisArg: A\n): [Observable, Observable>];\nexport function partition(\n source: ObservableInput,\n predicate: (value: T, index: number) => value is U\n): [Observable, Observable>];\n\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function partition(\n source: ObservableInput,\n predicate: (this: A, value: T, index: number) => boolean,\n thisArg: A\n): [Observable, Observable];\nexport function partition(source: ObservableInput, predicate: (value: T, index: number) => boolean): [Observable, Observable];\n\n/**\n * Splits the source Observable into two, one with values that satisfy a\n * predicate, and another with values that don't satisfy the predicate.\n *\n * It's like {@link filter}, but returns two Observables:\n * one like the output of {@link filter}, and the other with values that did not\n * pass the condition.\n *\n * ![](partition.png)\n *\n * `partition` outputs an array with two Observables that partition the values\n * from the source Observable through the given `predicate` function. The first\n * Observable in that array emits source values for which the predicate argument\n * returns true. The second Observable emits source values for which the\n * predicate returns false. The first behaves like {@link filter} and the second\n * behaves like {@link filter} with the predicate negated.\n *\n * ## Example\n * Partition a set of numbers into odds and evens observables\n * ```ts\n * import { of, partition } from 'rxjs';\n *\n * const observableValues = of(1, 2, 3, 4, 5, 6);\n * const [evens$, odds$] = partition(observableValues, (value, index) => value % 2 === 0);\n *\n * odds$.subscribe(x => console.log('odds', x));\n * evens$.subscribe(x => console.log('evens', x));\n *\n * // Logs:\n * // odds 1\n * // odds 3\n * // odds 5\n * // evens 2\n * // evens 4\n * // evens 6\n * ```\n *\n * @see {@link filter}\n *\n * @param {function(value: T, index: number): boolean} predicate A function that\n * evaluates each value emitted by the source Observable. If it returns `true`,\n * the value is emitted on the first Observable in the returned array, if\n * `false` the value is emitted on the second Observable in the array. The\n * `index` parameter is the number `i` for the i-th source emission that has\n * happened since the subscription, starting from the number `0`.\n * @param {any} [thisArg] An optional argument to determine the value of `this`\n * in the `predicate` function.\n * @return {[Observable, Observable]} An array with two Observables: one\n * with values that passed the predicate, and another with values that did not\n * pass the predicate.\n */\nexport function partition(\n source: ObservableInput,\n predicate: (this: any, value: T, index: number) => boolean,\n thisArg?: any\n): [Observable, Observable] {\n return [filter(predicate, thisArg)(innerFrom(source)), filter(not(predicate, thisArg))(innerFrom(source))] as [\n Observable,\n Observable\n ];\n}\n","import { SchedulerLike } from '../types';\nimport { Observable } from '../Observable';\nimport { EMPTY } from './empty';\n\nexport function range(start: number, count?: number): Observable;\n\n/**\n * @deprecated The `scheduler` parameter will be removed in v8. Use `range(start, count).pipe(observeOn(scheduler))` instead. Details: Details: https://rxjs.dev/deprecations/scheduler-argument\n */\nexport function range(start: number, count: number | undefined, scheduler: SchedulerLike): Observable;\n\n/**\n * Creates an Observable that emits a sequence of numbers within a specified\n * range.\n *\n * Emits a sequence of numbers in a range.\n *\n * ![](range.png)\n *\n * `range` operator emits a range of sequential integers, in order, where you\n * select the `start` of the range and its `length`. By default, uses no\n * {@link SchedulerLike} and just delivers the notifications synchronously, but may use\n * an optional {@link SchedulerLike} to regulate those deliveries.\n *\n * ## Example\n *\n * ### Produce a range of numbers\n *\n * ```ts\n * import { range } from 'rxjs';\n *\n * const numbers = range(1, 3);\n *\n * numbers.subscribe({\n * next: value => { console.log(value) },\n * complete: () => { console.log('Complete!') }\n * });\n *\n * // Logs:\n * // 1\n * // 2\n * // 3\n * // \"Complete!\"\n * ```\n *\n * @see {@link timer}\n * @see {@link index/interval}\n *\n * @param {number} [start=0] The value of the first integer in the sequence.\n * @param {number} count The number of sequential integers to generate.\n * @param {SchedulerLike} [scheduler] A {@link SchedulerLike} to use for scheduling\n * the emissions of the notifications.\n * @return {Observable} An Observable of numbers that emits a finite range of\n * sequential integers.\n */\nexport function range(start: number, count?: number, scheduler?: SchedulerLike): Observable {\n if (count == null) {\n // If one argument was passed, it's the count, not the start.\n count = start;\n start = 0;\n }\n\n if (count <= 0) {\n // No count? We're going nowhere. Return EMPTY.\n return EMPTY;\n }\n\n // Where the range should stop.\n const end = count + start;\n\n return new Observable(\n scheduler\n ? // The deprecated scheduled path.\n (subscriber) => {\n let n = start;\n return scheduler.schedule(function () {\n if (n < end) {\n subscriber.next(n++);\n this.schedule();\n } else {\n subscriber.complete();\n }\n });\n }\n : // Standard synchronous range.\n (subscriber) => {\n let n = start;\n while (n < end && !subscriber.closed) {\n subscriber.next(n++);\n }\n subscriber.complete();\n }\n );\n}\n","import { Observable } from '../Observable';\nimport { Unsubscribable, ObservableInput, ObservedValueOf } from '../types';\nimport { innerFrom } from './innerFrom';\nimport { EMPTY } from './empty';\n\n/**\n * Creates an Observable that uses a resource which will be disposed at the same time as the Observable.\n *\n * Use it when you catch yourself cleaning up after an Observable.\n *\n * `using` is a factory operator, which accepts two functions. First function returns a disposable resource.\n * It can be an arbitrary object that implements `unsubscribe` method. Second function will be injected with\n * that object and should return an Observable. That Observable can use resource object during its execution.\n * Both functions passed to `using` will be called every time someone subscribes - neither an Observable nor\n * resource object will be shared in any way between subscriptions.\n *\n * When Observable returned by `using` is subscribed, Observable returned from the second function will be subscribed\n * as well. All its notifications (nexted values, completion and error events) will be emitted unchanged by the output\n * Observable. If however someone unsubscribes from the Observable or source Observable completes or errors by itself,\n * the `unsubscribe` method on resource object will be called. This can be used to do any necessary clean up, which\n * otherwise would have to be handled by hand. Note that complete or error notifications are not emitted when someone\n * cancels subscription to an Observable via `unsubscribe`, so `using` can be used as a hook, allowing you to make\n * sure that all resources which need to exist during an Observable execution will be disposed at appropriate time.\n *\n * @see {@link defer}\n *\n * @param {function(): ISubscription} resourceFactory A function which creates any resource object\n * that implements `unsubscribe` method.\n * @param {function(resource: ISubscription): Observable} observableFactory A function which\n * creates an Observable, that can use injected resource object.\n * @return {Observable} An Observable that behaves the same as Observable returned by `observableFactory`, but\n * which - when completed, errored or unsubscribed - will also call `unsubscribe` on created resource object.\n */\nexport function using>(\n resourceFactory: () => Unsubscribable | void,\n observableFactory: (resource: Unsubscribable | void) => T | void\n): Observable> {\n return new Observable>((subscriber) => {\n const resource = resourceFactory();\n const result = observableFactory(resource);\n const source = result ? innerFrom(result) : EMPTY;\n source.subscribe(subscriber);\n return () => {\n // NOTE: Optional chaining did not work here.\n // Related TS Issue: https://github.com/microsoft/TypeScript/issues/40818\n if (resource) {\n resource.unsubscribe();\n }\n };\n });\n}\n","import { Observable } from '../Observable';\nimport { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { noop } from '../util/noop';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Buffers the source Observable values until `closingNotifier` emits.\n *\n * Collects values from the past as an array, and emits\n * that array only when another Observable emits.\n *\n * ![](buffer.png)\n *\n * Buffers the incoming Observable values until the given `closingNotifier`\n * Observable emits a value, at which point it emits the buffer on the output\n * Observable and starts a new buffer internally, awaiting the next time\n * `closingNotifier` emits.\n *\n * ## Example\n *\n * On every click, emit array of most recent interval events\n *\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { buffer } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const intervalEvents = interval(1000);\n * const buffered = intervalEvents.pipe(buffer(clicks));\n * buffered.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link bufferCount}\n * @see {@link bufferTime}\n * @see {@link bufferToggle}\n * @see {@link bufferWhen}\n * @see {@link window}\n *\n * @param {Observable} closingNotifier An Observable that signals the\n * buffer to be emitted on the output Observable.\n * @return A function that returns an Observable of buffers, which are arrays\n * of values.\n */\nexport function buffer(closingNotifier: Observable): OperatorFunction {\n return operate((source, subscriber) => {\n // The current buffered values.\n let currentBuffer: T[] = [];\n\n // Subscribe to our source.\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => currentBuffer.push(value),\n () => {\n subscriber.next(currentBuffer);\n subscriber.complete();\n }\n )\n );\n\n // Subscribe to the closing notifier.\n closingNotifier.subscribe(\n new OperatorSubscriber(\n subscriber,\n () => {\n // Start a new buffer and emit the previous one.\n const b = currentBuffer;\n currentBuffer = [];\n subscriber.next(b);\n },\n noop\n )\n );\n\n return () => {\n // Ensure buffered values are released on teardown.\n currentBuffer = null!;\n };\n });\n}\n","import { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { arrRemove } from '../util/arrRemove';\n\n/**\n * Buffers the source Observable values until the size hits the maximum\n * `bufferSize` given.\n *\n * Collects values from the past as an array, and emits\n * that array only when its size reaches `bufferSize`.\n *\n * ![](bufferCount.png)\n *\n * Buffers a number of values from the source Observable by `bufferSize` then\n * emits the buffer and clears it, and starts a new buffer each\n * `startBufferEvery` values. If `startBufferEvery` is not provided or is\n * `null`, then new buffers are started immediately at the start of the source\n * and when each buffer closes and is emitted.\n *\n * ## Examples\n *\n * Emit the last two click events as an array\n *\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { bufferCount } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const buffered = clicks.pipe(bufferCount(2));\n * buffered.subscribe(x => console.log(x));\n * ```\n *\n * On every click, emit the last two click events as an array\n *\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { bufferCount } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const buffered = clicks.pipe(bufferCount(2, 1));\n * buffered.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link buffer}\n * @see {@link bufferTime}\n * @see {@link bufferToggle}\n * @see {@link bufferWhen}\n * @see {@link pairwise}\n * @see {@link windowCount}\n *\n * @param {number} bufferSize The maximum size of the buffer emitted.\n * @param {number} [startBufferEvery] Interval at which to start a new buffer.\n * For example if `startBufferEvery` is `2`, then a new buffer will be started\n * on every other value from the source. A new buffer is started at the\n * beginning of the source by default.\n * @return A function that returns an Observable of arrays of buffered values.\n */\nexport function bufferCount(bufferSize: number, startBufferEvery: number | null = null): OperatorFunction {\n // If no `startBufferEvery` value was supplied, then we're\n // opening and closing on the bufferSize itself.\n startBufferEvery = startBufferEvery ?? bufferSize;\n\n return operate((source, subscriber) => {\n let buffers: T[][] = [];\n let count = 0;\n\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n let toEmit: T[][] | null = null;\n\n // Check to see if we need to start a buffer.\n // This will start one at the first value, and then\n // a new one every N after that.\n if (count++ % startBufferEvery! === 0) {\n buffers.push([]);\n }\n\n // Push our value into our active buffers.\n for (const buffer of buffers) {\n buffer.push(value);\n // Check to see if we're over the bufferSize\n // if we are, record it so we can emit it later.\n // If we emitted it now and removed it, it would\n // mutate the `buffers` array while we're looping\n // over it.\n if (bufferSize <= buffer.length) {\n toEmit = toEmit ?? [];\n toEmit.push(buffer);\n }\n }\n\n if (toEmit) {\n // We have found some buffers that are over the\n // `bufferSize`. Emit them, and remove them from our\n // buffers list.\n for (const buffer of toEmit) {\n arrRemove(buffers, buffer);\n subscriber.next(buffer);\n }\n }\n },\n () => {\n // When the source completes, emit all of our\n // active buffers.\n for (const buffer of buffers) {\n subscriber.next(buffer);\n }\n subscriber.complete();\n },\n // Pass all errors through to consumer.\n undefined,\n () => {\n // Clean up our memory when we teardown\n buffers = null!;\n }\n )\n );\n });\n}\n","import { Subscription } from '../Subscription';\nimport { OperatorFunction, SchedulerLike } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { arrRemove } from '../util/arrRemove';\nimport { asyncScheduler } from '../scheduler/async';\nimport { popScheduler } from '../util/args';\nimport { executeSchedule } from '../util/executeSchedule';\n\n/* tslint:disable:max-line-length */\nexport function bufferTime(bufferTimeSpan: number, scheduler?: SchedulerLike): OperatorFunction;\nexport function bufferTime(\n bufferTimeSpan: number,\n bufferCreationInterval: number | null | undefined,\n scheduler?: SchedulerLike\n): OperatorFunction;\nexport function bufferTime(\n bufferTimeSpan: number,\n bufferCreationInterval: number | null | undefined,\n maxBufferSize: number,\n scheduler?: SchedulerLike\n): OperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Buffers the source Observable values for a specific time period.\n *\n * Collects values from the past as an array, and emits\n * those arrays periodically in time.\n *\n * ![](bufferTime.png)\n *\n * Buffers values from the source for a specific time duration `bufferTimeSpan`.\n * Unless the optional argument `bufferCreationInterval` is given, it emits and\n * resets the buffer every `bufferTimeSpan` milliseconds. If\n * `bufferCreationInterval` is given, this operator opens the buffer every\n * `bufferCreationInterval` milliseconds and closes (emits and resets) the\n * buffer every `bufferTimeSpan` milliseconds. When the optional argument\n * `maxBufferSize` is specified, the buffer will be closed either after\n * `bufferTimeSpan` milliseconds or when it contains `maxBufferSize` elements.\n *\n * ## Examples\n *\n * Every second, emit an array of the recent click events\n *\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { bufferTime } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const buffered = clicks.pipe(bufferTime(1000));\n * buffered.subscribe(x => console.log(x));\n * ```\n *\n * Every 5 seconds, emit the click events from the next 2 seconds\n *\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { bufferTime } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const buffered = clicks.pipe(bufferTime(2000, 5000));\n * buffered.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link buffer}\n * @see {@link bufferCount}\n * @see {@link bufferToggle}\n * @see {@link bufferWhen}\n * @see {@link windowTime}\n *\n * @param {number} bufferTimeSpan The amount of time to fill each buffer array.\n * @param {number} [bufferCreationInterval] The interval at which to start new\n * buffers.\n * @param {number} [maxBufferSize] The maximum buffer size.\n * @param {SchedulerLike} [scheduler=async] The scheduler on which to schedule the\n * intervals that determine buffer boundaries.\n * @return A function that returns an Observable of arrays of buffered values.\n */\nexport function bufferTime(bufferTimeSpan: number, ...otherArgs: any[]): OperatorFunction {\n const scheduler = popScheduler(otherArgs) ?? asyncScheduler;\n const bufferCreationInterval = (otherArgs[0] as number) ?? null;\n const maxBufferSize = (otherArgs[1] as number) || Infinity;\n\n return operate((source, subscriber) => {\n // The active buffers, their related subscriptions, and removal functions.\n let bufferRecords: { buffer: T[]; subs: Subscription }[] | null = [];\n // If true, it means that every time we emit a buffer, we want to start a new buffer\n // this is only really used for when *just* the buffer time span is passed.\n let restartOnEmit = false;\n\n /**\n * Does the work of emitting the buffer from the record, ensuring that the\n * record is removed before the emission so reentrant code (from some custom scheduling, perhaps)\n * does not alter the buffer. Also checks to see if a new buffer needs to be started\n * after the emit.\n */\n const emit = (record: { buffer: T[]; subs: Subscription }) => {\n const { buffer, subs } = record;\n subs.unsubscribe();\n arrRemove(bufferRecords, record);\n subscriber.next(buffer);\n restartOnEmit && startBuffer();\n };\n\n /**\n * Called every time we start a new buffer. This does\n * the work of scheduling a job at the requested bufferTimeSpan\n * that will emit the buffer (if it's not unsubscribed before then).\n */\n const startBuffer = () => {\n if (bufferRecords) {\n const subs = new Subscription();\n subscriber.add(subs);\n const buffer: T[] = [];\n const record = {\n buffer,\n subs,\n };\n bufferRecords.push(record);\n executeSchedule(subs, scheduler, () => emit(record), bufferTimeSpan);\n }\n };\n\n if (bufferCreationInterval !== null && bufferCreationInterval >= 0) {\n // The user passed both a bufferTimeSpan (required), and a creation interval\n // That means we need to start new buffers on the interval, and those buffers need\n // to wait the required time span before emitting.\n executeSchedule(subscriber, scheduler, startBuffer, bufferCreationInterval, true);\n } else {\n restartOnEmit = true;\n }\n\n startBuffer();\n\n const bufferTimeSubscriber = new OperatorSubscriber(\n subscriber,\n (value: T) => {\n // Copy the records, so if we need to remove one we\n // don't mutate the array. It's hard, but not impossible to\n // set up a buffer time that could mutate the array and\n // cause issues here.\n const recordsCopy = bufferRecords!.slice();\n for (const record of recordsCopy) {\n // Loop over all buffers and\n const { buffer } = record;\n buffer.push(value);\n // If the buffer is over the max size, we need to emit it.\n maxBufferSize <= buffer.length && emit(record);\n }\n },\n () => {\n // The source completed, emit all of the active\n // buffers we have before we complete.\n while (bufferRecords?.length) {\n subscriber.next(bufferRecords.shift()!.buffer);\n }\n bufferTimeSubscriber?.unsubscribe();\n subscriber.complete();\n subscriber.unsubscribe();\n },\n // Pass all errors through to consumer.\n undefined,\n // Clean up\n () => (bufferRecords = null)\n );\n\n source.subscribe(bufferTimeSubscriber);\n });\n}\n","import { Subscription } from '../Subscription';\nimport { OperatorFunction, ObservableInput } from '../types';\nimport { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { noop } from '../util/noop';\nimport { arrRemove } from '../util/arrRemove';\n\n/**\n * Buffers the source Observable values starting from an emission from\n * `openings` and ending when the output of `closingSelector` emits.\n *\n * Collects values from the past as an array. Starts\n * collecting only when `opening` emits, and calls the `closingSelector`\n * function to get an Observable that tells when to close the buffer.\n *\n * ![](bufferToggle.png)\n *\n * Buffers values from the source by opening the buffer via signals from an\n * Observable provided to `openings`, and closing and sending the buffers when\n * a Subscribable or Promise returned by the `closingSelector` function emits.\n *\n *\n * ## Example\n *\n * Every other second, emit the click events from the next 500ms\n *\n * ```ts\n * import { fromEvent, interval, EMPTY } from 'rxjs';\n * import { bufferToggle } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const openings = interval(1000);\n * const buffered = clicks.pipe(bufferToggle(openings, i =>\n * i % 2 ? interval(500) : EMPTY\n * ));\n * buffered.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link buffer}\n * @see {@link bufferCount}\n * @see {@link bufferTime}\n * @see {@link bufferWhen}\n * @see {@link windowToggle}\n *\n * @param openings A Subscribable or Promise of notifications to start new\n * buffers.\n * @param closingSelector A function that takes\n * the value emitted by the `openings` observable and returns a Subscribable or Promise,\n * which, when it emits, signals that the associated buffer should be emitted\n * and cleared.\n * @return A function that returns an Observable of arrays of buffered values.\n */\nexport function bufferToggle(\n openings: ObservableInput,\n closingSelector: (value: O) => ObservableInput\n): OperatorFunction {\n return operate((source, subscriber) => {\n const buffers: T[][] = [];\n\n // Subscribe to the openings notifier first\n innerFrom(openings).subscribe(\n new OperatorSubscriber(\n subscriber,\n (openValue) => {\n const buffer: T[] = [];\n buffers.push(buffer);\n // We use this composite subscription, so that\n // when the closing notifier emits, we can tear it down.\n const closingSubscription = new Subscription();\n\n const emitBuffer = () => {\n arrRemove(buffers, buffer);\n subscriber.next(buffer);\n closingSubscription.unsubscribe();\n };\n\n // The line below will add the subscription to the parent subscriber *and* the closing subscription.\n closingSubscription.add(innerFrom(closingSelector(openValue)).subscribe(new OperatorSubscriber(subscriber, emitBuffer, noop)));\n },\n noop\n )\n );\n\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n // Value from our source. Add it to all pending buffers.\n for (const buffer of buffers) {\n buffer.push(value);\n }\n },\n () => {\n // Source complete. Emit all pending buffers.\n while (buffers.length > 0) {\n subscriber.next(buffers.shift()!);\n }\n subscriber.complete();\n }\n )\n );\n });\n}\n","import { Subscriber } from '../Subscriber';\nimport { ObservableInput, OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { noop } from '../util/noop';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\n\n/**\n * Buffers the source Observable values, using a factory function of closing\n * Observables to determine when to close, emit, and reset the buffer.\n *\n * Collects values from the past as an array. When it\n * starts collecting values, it calls a function that returns an Observable that\n * tells when to close the buffer and restart collecting.\n *\n * ![](bufferWhen.png)\n *\n * Opens a buffer immediately, then closes the buffer when the observable\n * returned by calling `closingSelector` function emits a value. When it closes\n * the buffer, it immediately opens a new buffer and repeats the process.\n *\n * ## Example\n *\n * Emit an array of the last clicks every [1-5] random seconds\n *\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { bufferWhen } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const buffered = clicks.pipe(bufferWhen(() =>\n * interval(1000 + Math.random() * 4000)\n * ));\n * buffered.subscribe(x => console.log(x));\n * ```\n *\n *\n * @see {@link buffer}\n * @see {@link bufferCount}\n * @see {@link bufferTime}\n * @see {@link bufferToggle}\n * @see {@link windowWhen}\n *\n * @param {function(): Observable} closingSelector A function that takes no\n * arguments and returns an Observable that signals buffer closure.\n * @return A function that returns an Observable of arrays of buffered values.\n */\nexport function bufferWhen(closingSelector: () => ObservableInput): OperatorFunction {\n return operate((source, subscriber) => {\n // The buffer we keep and emit.\n let buffer: T[] | null = null;\n // A reference to the subscriber used to subscribe to\n // the closing notifier. We need to hold this so we can\n // end the subscription after the first notification.\n let closingSubscriber: Subscriber | null = null;\n\n // Ends the previous closing notifier subscription, so it\n // terminates after the first emission, then emits\n // the current buffer if there is one, starts a new buffer, and starts a\n // new closing notifier.\n const openBuffer = () => {\n // Make sure to teardown the closing subscription, we only cared\n // about one notification.\n closingSubscriber?.unsubscribe();\n // emit the buffer if we have one, and start a new buffer.\n const b = buffer;\n buffer = [];\n b && subscriber.next(b);\n\n // Get a new closing notifier and subscribe to it.\n innerFrom(closingSelector()).subscribe((closingSubscriber = new OperatorSubscriber(subscriber, openBuffer, noop)));\n };\n\n // Start the first buffer.\n openBuffer();\n\n // Subscribe to our source.\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n // Add every new value to the current buffer.\n (value) => buffer?.push(value),\n // When we complete, emit the buffer if we have one,\n // then complete the result.\n () => {\n buffer && subscriber.next(buffer);\n subscriber.complete();\n },\n // Pass all errors through to consumer.\n undefined,\n // Release memory on teardown\n () => (buffer = closingSubscriber = null!)\n )\n );\n });\n}\n","import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * A basic scan operation. This is used for `scan` and `reduce`.\n * @param accumulator The accumulator to use\n * @param seed The seed value for the state to accumulate\n * @param hasSeed Whether or not a seed was provided\n * @param emitOnNext Whether or not to emit the state on next\n * @param emitBeforeComplete Whether or not to emit the before completion\n */\n\nexport function scanInternals(\n accumulator: (acc: V | A | S, value: V, index: number) => A,\n seed: S,\n hasSeed: boolean,\n emitOnNext: boolean,\n emitBeforeComplete?: undefined | true\n) {\n return (source: Observable, subscriber: Subscriber) => {\n // Whether or not we have state yet. This will only be\n // false before the first value arrives if we didn't get\n // a seed value.\n let hasState = hasSeed;\n // The state that we're tracking, starting with the seed,\n // if there is one, and then updated by the return value\n // from the accumulator on each emission.\n let state: any = seed;\n // An index to pass to the accumulator function.\n let index = 0;\n\n // Subscribe to our source. All errors and completions are passed through.\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n // Always increment the index.\n const i = index++;\n // Set the state\n state = hasState\n ? // We already have state, so we can get the new state from the accumulator\n accumulator(state, value, i)\n : // We didn't have state yet, a seed value was not provided, so\n\n // we set the state to the first value, and mark that we have state now\n ((hasState = true), value);\n\n // Maybe send it to the consumer.\n emitOnNext && subscriber.next(state);\n },\n // If an onComplete was given, call it, otherwise\n // just pass through the complete notification to the consumer.\n emitBeforeComplete &&\n (() => {\n hasState && subscriber.next(state);\n subscriber.complete();\n })\n )\n );\n };\n}\n","import { scanInternals } from './scanInternals';\nimport { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\n\nexport function reduce(accumulator: (acc: A | V, value: V, index: number) => A): OperatorFunction;\nexport function reduce(accumulator: (acc: A, value: V, index: number) => A, seed: A): OperatorFunction;\nexport function reduce(accumulator: (acc: A | S, value: V, index: number) => A, seed: S): OperatorFunction;\n\n/**\n * Applies an accumulator function over the source Observable, and returns the\n * accumulated result when the source completes, given an optional seed value.\n *\n * Combines together all values emitted on the source,\n * using an accumulator function that knows how to join a new source value into\n * the accumulation from the past.\n *\n * ![](reduce.png)\n *\n * Like\n * [Array.prototype.reduce()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce),\n * `reduce` applies an `accumulator` function against an accumulation and each\n * value of the source Observable (from the past) to reduce it to a single\n * value, emitted on the output Observable. Note that `reduce` will only emit\n * one value, only when the source Observable completes. It is equivalent to\n * applying operator {@link scan} followed by operator {@link last}.\n *\n * Returns an Observable that applies a specified `accumulator` function to each\n * item emitted by the source Observable. If a `seed` value is specified, then\n * that value will be used as the initial value for the accumulator. If no seed\n * value is specified, the first item of the source is used as the seed.\n *\n * ## Example\n * Count the number of click events that happened in 5 seconds\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { reduce, takeUntil, mapTo } from 'rxjs/operators';\n *\n * const clicksInFiveSeconds = fromEvent(document, 'click').pipe(\n * takeUntil(interval(5000)),\n * );\n * const ones = clicksInFiveSeconds.pipe(mapTo(1));\n * const seed = 0;\n * const count = ones.pipe(reduce((acc, one) => acc + one, seed));\n * count.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link count}\n * @see {@link expand}\n * @see {@link mergeScan}\n * @see {@link scan}\n *\n * @param {function(acc: A, value: V, index: number): A} accumulator The accumulator function\n * called on each source value.\n * @param {A} [seed] The initial accumulation value.\n * @return A function that returns an Observable that emits a single value that\n * is the result of accumulating the values emitted by the source Observable.\n */\nexport function reduce(accumulator: (acc: V | A, value: V, index: number) => A, seed?: any): OperatorFunction {\n return operate(scanInternals(accumulator, seed, arguments.length >= 2, false, true));\n}\n","import { reduce } from './reduce';\nimport { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\n\nconst arrReducer = (arr: any[], value: any) => (arr.push(value), arr);\n\n/**\n * Collects all source emissions and emits them as an array when the source completes.\n *\n * Get all values inside an array when the source completes\n *\n * ![](toArray.png)\n *\n * `toArray` will wait until the source Observable completes before emitting\n * the array containing all emissions. When the source Observable errors no\n * array will be emitted.\n *\n * ## Example\n * ```ts\n * import { interval } from 'rxjs';\n * import { toArray, take } from 'rxjs/operators';\n *\n * const source = interval(1000);\n * const example = source.pipe(\n * take(10),\n * toArray()\n * );\n *\n * const subscribe = example.subscribe(val => console.log(val));\n *\n * // output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n * ```\n *\n * @return A function that returns an Observable that emits an array of items\n * emitted by the source Observable when source completes.\n */\nexport function toArray(): OperatorFunction {\n // Because arrays are mutable, and we're mutating the array in this\n // reducer process, we have to escapulate the creation of the initial\n // array within this `operate` function.\n return operate((source, subscriber) => {\n reduce(arrReducer, [] as T[])(source).subscribe(subscriber)\n });\n}\n","import { Observable } from '../Observable';\nimport { ObservableInput, OperatorFunction } from '../types';\nimport { identity } from '../util/identity';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { pipe } from '../util/pipe';\nimport { mergeMap } from './mergeMap';\nimport { toArray } from './toArray';\n\n/**\n * Collects all of the inner sources from source observable. Then, once the\n * source completes, joins the values using the given static.\n *\n * This is used for {@link combineLatestAll} and {@link zipAll} which both have the\n * same behavior of collecting all inner observables, then operating on them.\n *\n * @param joinFn The type of static join to apply to the sources collected\n * @param project The projection function to apply to the values, if any\n */\nexport function joinAllInternals(joinFn: (sources: ObservableInput[]) => Observable, project?: (...args: any[]) => R) {\n return pipe(\n // Collect all inner sources into an array, and emit them when the\n // source completes.\n toArray() as OperatorFunction, ObservableInput[]>,\n // Run the join function on the collected array of inner sources.\n mergeMap((sources) => joinFn(sources)),\n // If a projection function was supplied, apply it to each result.\n project ? mapOneOrManyArgs(project) : (identity as any)\n );\n}\n","import { combineLatest } from '../observable/combineLatest';\nimport { OperatorFunction, ObservableInput } from '../types';\nimport { joinAllInternals } from './joinAllInternals';\n\nexport function combineLatestAll(): OperatorFunction, T[]>;\nexport function combineLatestAll(): OperatorFunction;\nexport function combineLatestAll(project: (...values: T[]) => R): OperatorFunction, R>;\nexport function combineLatestAll(project: (...values: Array) => R): OperatorFunction;\n\n/**\n * Flattens an Observable-of-Observables by applying {@link combineLatest} when the Observable-of-Observables completes.\n *\n * ![](combineLatestAll.png)\n *\n * `combineLatestAll` takes an Observable of Observables, and collects all Observables from it. Once the outer Observable completes,\n * it subscribes to all collected Observables and combines their values using the {@link combineLatest} strategy, such that:\n *\n * * Every time an inner Observable emits, the output Observable emits\n * * When the returned observable emits, it emits all of the latest values by:\n * * If a `project` function is provided, it is called with each recent value from each inner Observable in whatever order they\n * arrived, and the result of the `project` function is what is emitted by the output Observable.\n * * If there is no `project` function, an array of all the most recent values is emitted by the output Observable.\n *\n * ---\n *\n * ## Examples\n *\n * ### Map two click events to a finite interval Observable, then apply `combineLatestAll`\n *\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { map, combineLatestAll, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const higherOrder = clicks.pipe(\n * map(ev =>\n * interval(Math.random() * 2000).pipe(take(3))\n * ),\n * take(2)\n * );\n * const result = higherOrder.pipe(\n * combineLatestAll()\n * );\n *\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link combineLatest}\n * @see {@link combineLatestWith}\n * @see {@link mergeAll}\n *\n * @param project optional function to map the most recent values from each inner Observable into a new result.\n * Takes each of the most recent values from each collected inner Observable as arguments, in order.\n * @return A function that returns an Observable that flattens Observables\n * emitted by the source Observable.\n */\nexport function combineLatestAll(project?: (...values: Array) => R) {\n return joinAllInternals(combineLatest, project);\n}\n","import { combineLatestAll } from './combineLatestAll';\n\n/**\n * @deprecated Renamed to {@link combineLatestAll}. Will be removed in v8.\n */\nexport const combineAll = combineLatestAll;\n","import { combineLatestInit } from '../observable/combineLatest';\nimport { ObservableInput, ObservableInputTuple, OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { pipe } from '../util/pipe';\nimport { popResultSelector } from '../util/args';\n\n/** @deprecated Replaced with {@link combineLatestWith}. Will be removed in v8. */\nexport function combineLatest(\n sources: [...ObservableInputTuple],\n project: (...values: [T, ...A]) => R\n): OperatorFunction;\n/** @deprecated Replaced with {@link combineLatestWith}. Will be removed in v8. */\nexport function combineLatest(sources: [...ObservableInputTuple]): OperatorFunction;\n\n/** @deprecated Replaced with {@link combineLatestWith}. Will be removed in v8. */\nexport function combineLatest(\n ...sourcesAndProject: [...ObservableInputTuple, (...values: [T, ...A]) => R]\n): OperatorFunction;\n/** @deprecated Replaced with {@link combineLatestWith}. Will be removed in v8. */\nexport function combineLatest(...sources: [...ObservableInputTuple]): OperatorFunction;\n\n/**\n * @deprecated Replaced with {@link combineLatestWith}. Will be removed in v8.\n */\nexport function combineLatest(...args: (ObservableInput | ((...values: any[]) => R))[]): OperatorFunction {\n const resultSelector = popResultSelector(args);\n return resultSelector\n ? pipe(combineLatest(...(args as Array>)), mapOneOrManyArgs(resultSelector))\n : operate((source, subscriber) => {\n combineLatestInit([source, ...argsOrArgArray(args)])(subscriber);\n });\n}\n","import { ObservableInputTuple, OperatorFunction, Cons } from '../types';\nimport { combineLatest } from './combineLatest';\n\n/**\n * Create an observable that combines the latest values from all passed observables and the source\n * into arrays and emits them.\n *\n * Returns an observable, that when subscribed to, will subscribe to the source observable and all\n * sources provided as arguments. Once all sources emit at least one value, all of the latest values\n * will be emitted as an array. After that, every time any source emits a value, all of the latest values\n * will be emitted as an array.\n *\n * This is a useful operator for eagerly calculating values based off of changed inputs.\n *\n * ### Example\n *\n * Simple calculation from two inputs.\n *\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { map, combineLatestWith } from 'rxjs/operators';\n *\n * // Setup: Add two inputs to the page\n * const input1 = document.createElement('input');\n * document.body.appendChild(input1);\n * const input2 = document.createElement('input');\n * document.body.appendChild(input2);\n *\n * // Get streams of changes\n * const input1Changes$ = fromEvent(input1, 'change');\n * const input2Changes$ = fromEvent(input2, 'change');\n *\n * // Combine the changes by adding them together\n * input1Changes$.pipe(\n * combineLatestWith(input2Changes$),\n * map(([e1, e2]) => Number(e1.target.value) + Number(e2.target.value)),\n * )\n * .subscribe(x => console.log(x));\n *\n * ```\n * @param otherSources the other sources to subscribe to.\n * @return A function that returns an Observable that emits the latest\n * emissions from both source and provided Observables.\n */\nexport function combineLatestWith(\n ...otherSources: [...ObservableInputTuple]\n): OperatorFunction> {\n return combineLatest(...otherSources);\n}\n","import { concatMap } from './concatMap';\nimport { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { isFunction } from '../util/isFunction';\n\n/* tslint:disable:max-line-length */\nexport function concatMapTo>(observable: O): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function concatMapTo>(\n observable: O,\n resultSelector: undefined\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function concatMapTo>(\n observable: O,\n resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R\n): OperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to the same Observable which is merged multiple\n * times in a serialized fashion on the output Observable.\n *\n * It's like {@link concatMap}, but maps each value\n * always to the same inner Observable.\n *\n * ![](concatMapTo.png)\n *\n * Maps each source value to the given Observable `innerObservable` regardless\n * of the source value, and then flattens those resulting Observables into one\n * single Observable, which is the output Observable. Each new `innerObservable`\n * instance emitted on the output Observable is concatenated with the previous\n * `innerObservable` instance.\n *\n * __Warning:__ if source values arrive endlessly and faster than their\n * corresponding inner Observables can complete, it will result in memory issues\n * as inner Observables amass in an unbounded buffer waiting for their turn to\n * be subscribed to.\n *\n * Note: `concatMapTo` is equivalent to `mergeMapTo` with concurrency parameter\n * set to `1`.\n *\n * ## Example\n * For each click event, tick every second from 0 to 3, with no concurrency\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { concatMapTo, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * concatMapTo(interval(1000).pipe(take(4))),\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // (results are not concurrent)\n * // For every click on the \"document\" it will emit values 0 to 3 spaced\n * // on a 1000ms interval\n * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3\n * ```\n *\n * @see {@link concat}\n * @see {@link concatAll}\n * @see {@link concatMap}\n * @see {@link mergeMapTo}\n * @see {@link switchMapTo}\n *\n * @param {ObservableInput} innerObservable An Observable to replace each value from\n * the source Observable.\n * @return A function that returns an Observable of values merged together by\n * joining the passed Observable with itself, one after the other, for each\n * value emitted from the source.\n */\nexport function concatMapTo>(\n innerObservable: O,\n resultSelector?: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R\n): OperatorFunction | R> {\n return isFunction(resultSelector) ? concatMap(() => innerObservable, resultSelector) : concatMap(() => innerObservable);\n}\n","import { ObservableInputTuple, OperatorFunction } from '../types';\nimport { concat } from './concat';\n\n/**\n * Emits all of the values from the source observable, then, once it completes, subscribes\n * to each observable source provided, one at a time, emitting all of their values, and not subscribing\n * to the next one until it completes.\n *\n * `concat(a$, b$, c$)` is the same as `a$.pipe(concatWith(b$, c$))`.\n *\n * ## Example\n *\n * Listen for one mouse click, then listen for all mouse moves.\n *\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { concatWith, map, take } from 'rxjs/operators';\n *\n * const clicks$ = fromEvent(document, 'click');\n * const moves$ = fromEvent(document, 'mousemove');\n *\n * clicks$.pipe(\n * map(() => 'click'),\n * take(1),\n * concatWith(\n * moves$.pipe(\n * map(() => 'move')\n * )\n * )\n * )\n * .subscribe(x => console.log(x));\n *\n * // 'click'\n * // 'move'\n * // 'move'\n * // 'move'\n * // ...\n * ```\n *\n * @param otherSources Other observable sources to subscribe to, in sequence, after the original source is complete.\n * @return A function that returns an Observable that concatenates\n * subscriptions to the source and provided Observables subscribing to the next\n * only once the current subscription completes.\n */\nexport function concatWith(\n ...otherSources: [...ObservableInputTuple]\n): OperatorFunction {\n return concat(...otherSources);\n}\n","import { ObservableInputTuple, OperatorFunction, SchedulerLike } from '../types';\nimport { operate } from '../util/lift';\nimport { concatAll } from './concatAll';\nimport { popScheduler } from '../util/args';\nimport { from } from '../observable/from';\n\n/** @deprecated Replaced with {@link concatWith}. Will be removed in v8. */\nexport function concat(...sources: [...ObservableInputTuple]): OperatorFunction;\n/** @deprecated Replaced with {@link concatWith}. Will be removed in v8. */\nexport function concat(\n ...sourcesAndScheduler: [...ObservableInputTuple, SchedulerLike]\n): OperatorFunction;\n\n/**\n * @deprecated Replaced with {@link concatWith}. Will be removed in v8.\n */\nexport function concat(...args: any[]): OperatorFunction {\n const scheduler = popScheduler(args);\n return operate((source, subscriber) => {\n concatAll()(from([source, ...args], scheduler)).subscribe(subscriber);\n });\n}\n","import { OperatorFunction } from '../types';\nimport { reduce } from './reduce';\n/**\n * Counts the number of emissions on the source and emits that number when the\n * source completes.\n *\n * Tells how many values were emitted, when the source\n * completes.\n *\n * ![](count.png)\n *\n * `count` transforms an Observable that emits values into an Observable that\n * emits a single value that represents the number of values emitted by the\n * source Observable. If the source Observable terminates with an error, `count`\n * will pass this error notification along without emitting a value first. If\n * the source Observable does not terminate at all, `count` will neither emit\n * a value nor terminate. This operator takes an optional `predicate` function\n * as argument, in which case the output emission will represent the number of\n * source values that matched `true` with the `predicate`.\n *\n * ## Examples\n *\n * Counts how many seconds have passed before the first click happened\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { count, takeUntil } from 'rxjs/operators';\n *\n * const seconds = interval(1000);\n * const clicks = fromEvent(document, 'click');\n * const secondsBeforeClick = seconds.pipe(takeUntil(clicks));\n * const result = secondsBeforeClick.pipe(count());\n * result.subscribe(x => console.log(x));\n * ```\n *\n * Counts how many odd numbers are there between 1 and 7\n * ```ts\n * import { range } from 'rxjs';\n * import { count } from 'rxjs/operators';\n *\n * const numbers = range(1, 7);\n * const result = numbers.pipe(count(i => i % 2 === 1));\n * result.subscribe(x => console.log(x));\n * // Results in:\n * // 4\n * ```\n *\n * @see {@link max}\n * @see {@link min}\n * @see {@link reduce}\n *\n * @param predicate A function that is used to analyze the value and the index and\n * determine whether or not to increment the count. Return `true` to increment the count,\n * and return `false` to keep the count the same.\n * If the predicate is not provided, every value will be counted.\n * @return A function that returns an Observable that emits one number that\n * represents the count of emissions.\n */\n\nexport function count(predicate?: (value: T, index: number) => boolean): OperatorFunction {\n return reduce((total, value, i) => (!predicate || predicate(value, i) ? total + 1 : total), 0);\n}\n","import { Subscriber } from '../Subscriber';\nimport { MonoTypeOperatorFunction, ObservableInput } from '../types';\nimport { operate } from '../util/lift';\nimport { noop } from '../util/noop';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\n\n/**\n * Emits a notification from the source Observable only after a particular time span\n * determined by another Observable has passed without another source emission.\n *\n * It's like {@link debounceTime}, but the time span of\n * emission silence is determined by a second Observable.\n *\n * ![](debounce.png)\n *\n * `debounce` delays notifications emitted by the source Observable, but drops previous\n * pending delayed emissions if a new notification arrives on the source Observable.\n * This operator keeps track of the most recent notification from the source\n * Observable, and spawns a duration Observable by calling the\n * `durationSelector` function. The notification is emitted only when the duration\n * Observable emits a next notification, and if no other notification was emitted on\n * the source Observable since the duration Observable was spawned. If a new\n * notification appears before the duration Observable emits, the previous notification will\n * not be emitted and a new duration is scheduled from `durationSelector` is scheduled.\n * If the completing event happens during the scheduled duration the last cached notification\n * is emitted before the completion event is forwarded to the output observable.\n * If the error event happens during the scheduled duration or after it only the error event is\n * forwarded to the output observable. The cache notification is not emitted in this case.\n *\n * Like {@link debounceTime}, this is a rate-limiting operator, and also a\n * delay-like operator since output emissions do not necessarily occur at the\n * same time as they did on the source Observable.\n *\n * ## Example\n * Emit the most recent click after a burst of clicks\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { scan, debounce } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * scan((i) => ++i, 1),\n * debounce((i) => interval(200 * i))\n * );\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link audit}\n * @see {@link auditTime}\n * @see {@link debounce}\n * @see {@link delay}\n * @see {@link sample}\n * @see {@link sampleTime}\n * @see {@link throttle}\n * @see {@link throttleTime}\n *\n * @param durationSelector A function\n * that receives a value from the source Observable, for computing the timeout\n * duration for each source value, returned as an Observable or a Promise.\n * @return A function that returns an Observable that delays the emissions of\n * the source Observable by the specified duration Observable returned by\n * `durationSelector`, and may drop some values if they occur too frequently.\n */\nexport function debounce(durationSelector: (value: T) => ObservableInput): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let hasValue = false;\n let lastValue: T | null = null;\n // The subscriber/subscription for the current debounce, if there is one.\n let durationSubscriber: Subscriber | null = null;\n\n const emit = () => {\n // Unsubscribe any current debounce subscription we have,\n // we only cared about the first notification from it, and we\n // want to clean that subscription up as soon as possible.\n durationSubscriber?.unsubscribe();\n durationSubscriber = null;\n if (hasValue) {\n // We have a value! Free up memory first, then emit the value.\n hasValue = false;\n const value = lastValue!;\n lastValue = null;\n subscriber.next(value);\n }\n };\n\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value: T) => {\n // Cancel any pending debounce duration. We don't\n // need to null it out here yet tho, because we're just going\n // to create another one in a few lines.\n durationSubscriber?.unsubscribe();\n hasValue = true;\n lastValue = value;\n // Capture our duration subscriber, so we can unsubscribe it when we're notified\n // and we're going to emit the value.\n durationSubscriber = new OperatorSubscriber(subscriber, emit, noop);\n // Subscribe to the duration.\n innerFrom(durationSelector(value)).subscribe(durationSubscriber);\n },\n () => {\n // Source completed.\n // Emit any pending debounced values then complete\n emit();\n subscriber.complete();\n },\n // Pass all errors through to consumer\n undefined,\n () => {\n // Teardown.\n lastValue = durationSubscriber = null;\n }\n )\n );\n });\n}\n","import { observeNotification } from '../Notification';\nimport { OperatorFunction, ObservableNotification, ValueFromNotification } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Converts an Observable of {@link ObservableNotification} objects into the emissions\n * that they represent.\n *\n * Unwraps {@link ObservableNotification} objects as actual `next`,\n * `error` and `complete` emissions. The opposite of {@link materialize}.\n *\n * ![](dematerialize.png)\n *\n * `dematerialize` is assumed to operate an Observable that only emits\n * {@link ObservableNotification} objects as `next` emissions, and does not emit any\n * `error`. Such Observable is the output of a `materialize` operation. Those\n * notifications are then unwrapped using the metadata they contain, and emitted\n * as `next`, `error`, and `complete` on the output Observable.\n *\n * Use this operator in conjunction with {@link materialize}.\n *\n * ## Example\n *\n * Convert an Observable of Notifications to an actual Observable\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { dematerialize } from 'rxjs/operators';\n *\n * const notifA = { kind: 'N', value: 'A' };\n * const notifB = { kind: 'N', value: 'B' };\n * const notifE = { kind: 'E', error: new TypeError('x.toUpperCase is not a function') }\n *\n * const materialized = of(notifA, notifB, notifE);\n *\n * const upperCase = materialized.pipe(dematerialize());\n * upperCase.subscribe({\n * next: x => console.log(x),\n * error: e => console.error(e)\n * });\n *\n * // Results in:\n * // A\n * // B\n * // TypeError: x.toUpperCase is not a function\n * ```\n * @see {@link materialize}\n *\n * @return A function that returns an Observable that emits items and\n * notifications embedded in Notification objects emitted by the source\n * Observable.\n */\nexport function dematerialize>(): OperatorFunction> {\n return operate((source, subscriber) => {\n source.subscribe(new OperatorSubscriber(subscriber, (notification) => observeNotification(notification, subscriber)));\n });\n}\n","import { Observable } from '../Observable';\nimport { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { noop } from '../util/noop';\n\n/**\n * Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from previous items.\n *\n * If a keySelector function is provided, then it will project each value from the source observable into a new value that it will\n * check for equality with previously projected values. If a keySelector function is not provided, it will use each value from the\n * source observable directly with an equality check against previous values.\n *\n * In JavaScript runtimes that support `Set`, this operator will use a `Set` to improve performance of the distinct value checking.\n *\n * In other runtimes, this operator will use a minimal implementation of `Set` that relies on an `Array` and `indexOf` under the\n * hood, so performance will degrade as more values are checked for distinction. Even in newer browsers, a long-running `distinct`\n * use might result in memory leaks. To help alleviate this in some scenarios, an optional `flushes` parameter is also provided so\n * that the internal `Set` can be \"flushed\", basically clearing it of values.\n *\n * ## Examples\n *\n * A simple example with numbers\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { distinct } from 'rxjs/operators';\n *\n * of(1, 1, 2, 2, 2, 1, 2, 3, 4, 3, 2, 1)\n * .pipe(\n * distinct()\n * )\n * .subscribe(x => console.log(x));\n *\n * // Outputs\n * // 1\n * // 2\n * // 3\n * // 4\n * ```\n *\n * An example using a keySelector function\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { distinct } from 'rxjs/operators';\n *\n * interface Person {\n * age: number,\n * name: string\n * }\n *\n * of(\n * { age: 4, name: 'Foo'},\n * { age: 7, name: 'Bar'},\n * { age: 5, name: 'Foo'}\n * ).pipe(\n * distinct((p: Person) => p.name)\n * )\n * .subscribe(x => console.log(x));\n *\n * // Outputs\n * // { age: 4, name: 'Foo' }\n * // { age: 7, name: 'Bar' }\n * ```\n * @see {@link distinctUntilChanged}\n * @see {@link distinctUntilKeyChanged}\n *\n * @param {function} [keySelector] Optional function to select which value you want to check as distinct.\n * @param {Observable} [flushes] Optional Observable for flushing the internal HashSet of the operator.\n * @return A function that returns an Observable that emits items from the\n * source Observable with distinct values.\n */\nexport function distinct(keySelector?: (value: T) => K, flushes?: Observable): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n const distinctKeys = new Set();\n source.subscribe(\n new OperatorSubscriber(subscriber, (value) => {\n const key = keySelector ? keySelector(value) : value;\n if (!distinctKeys.has(key)) {\n distinctKeys.add(key);\n subscriber.next(value);\n }\n })\n );\n\n flushes?.subscribe(new OperatorSubscriber(subscriber, () => distinctKeys.clear(), noop));\n });\n}\n","import { ArgumentOutOfRangeError } from '../util/ArgumentOutOfRangeError';\nimport { Observable } from '../Observable';\nimport { OperatorFunction } from '../types';\nimport { filter } from './filter';\nimport { throwIfEmpty } from './throwIfEmpty';\nimport { defaultIfEmpty } from './defaultIfEmpty';\nimport { take } from './take';\n\n/**\n * Emits the single value at the specified `index` in a sequence of emissions\n * from the source Observable.\n *\n * Emits only the i-th value, then completes.\n *\n * ![](elementAt.png)\n *\n * `elementAt` returns an Observable that emits the item at the specified\n * `index` in the source Observable, or a default value if that `index` is out\n * of range and the `default` argument is provided. If the `default` argument is\n * not given and the `index` is out of range, the output Observable will emit an\n * `ArgumentOutOfRangeError` error.\n *\n * ## Example\n * Emit only the third click event\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { elementAt } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(elementAt(2));\n * result.subscribe(x => console.log(x));\n *\n * // Results in:\n * // click 1 = nothing\n * // click 2 = nothing\n * // click 3 = MouseEvent object logged to console\n * ```\n *\n * @see {@link first}\n * @see {@link last}\n * @see {@link skip}\n * @see {@link single}\n * @see {@link take}\n *\n * @throws {ArgumentOutOfRangeError} When using `elementAt(i)`, it delivers an\n * ArgumentOutOfRangeError to the Observer's `error` callback if `i < 0` or the\n * Observable has completed before emitting the i-th `next` notification.\n *\n * @param {number} index Is the number `i` for the i-th source emission that has\n * happened since the subscription, starting from the number `0`.\n * @param {T} [defaultValue] The default value returned for missing indices.\n * @return A function that returns an Observable that emits a single item, if\n * it is found. Otherwise, it will emit the default value if given. If not, it\n * emits an error.\n */\nexport function elementAt(index: number, defaultValue?: D): OperatorFunction {\n if (index < 0) {\n throw new ArgumentOutOfRangeError();\n }\n const hasDefaultValue = arguments.length >= 2;\n return (source: Observable) =>\n source.pipe(\n filter((v, i) => i === index),\n take(1),\n hasDefaultValue ? defaultIfEmpty(defaultValue!) : throwIfEmpty(() => new ArgumentOutOfRangeError())\n );\n}\n","/** prettier */\nimport { Observable } from '../Observable';\nimport { concat } from '../observable/concat';\nimport { of } from '../observable/of';\nimport { MonoTypeOperatorFunction, SchedulerLike, OperatorFunction, ValueFromArray } from '../types';\n\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `concatAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function endWith(scheduler: SchedulerLike): MonoTypeOperatorFunction;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `concatAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function endWith(\n ...valuesAndScheduler: [...A, SchedulerLike]\n): OperatorFunction>;\n\nexport function endWith(...values: A): OperatorFunction>;\n\n/**\n * Returns an observable that will emit all values from the source, then synchronously emit\n * the provided value(s) immediately after the source completes.\n *\n * NOTE: Passing a last argument of a Scheduler is _deprecated_, and may result in incorrect\n * types in TypeScript.\n *\n * This is useful for knowing when an observable ends. Particularly when paired with an\n * operator like {@link takeUntil}\n *\n * ![](endWith.png)\n *\n * ## Example\n *\n * Emit values to know when an interval starts and stops. The interval will\n * stop when a user clicks anywhere on the document.\n *\n * ```ts\n * import { interval, fromEvent } from 'rxjs';\n * import { map, startWith, takeUntil, endWith } from 'rxjs/operators';\n *\n * const ticker$ = interval(5000).pipe(\n * map(() => 'tick'),\n * );\n *\n * const documentClicks$ = fromEvent(document, 'click');\n *\n * ticker$.pipe(\n * startWith('interval started'),\n * takeUntil(documentClicks$),\n * endWith('interval ended by click'),\n * )\n * .subscribe(x => console.log(x));\n *\n * // Result (assuming a user clicks after 15 seconds)\n * // \"interval started\"\n * // \"tick\"\n * // \"tick\"\n * // \"tick\"\n * // \"interval ended by click\"\n * ```\n *\n * @param values Items you want the modified Observable to emit last.\n * @return A function that returns an Observable that emits all values from the\n * source, then synchronously emits the provided value(s) immediately after the\n * source completes.\n *\n * @see {@link startWith}\n * @see {@link concat}\n * @see {@link takeUntil}\n */\nexport function endWith(...values: Array): MonoTypeOperatorFunction {\n return (source: Observable) => concat(source, of(...values)) as Observable;\n}\n","import { Observable } from '../Observable';\nimport { Falsy, OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\nexport function every(predicate: BooleanConstructor): OperatorFunction extends never ? false : boolean>;\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function every(\n predicate: BooleanConstructor,\n thisArg: any\n): OperatorFunction extends never ? false : boolean>;\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function every(\n predicate: (this: A, value: T, index: number, source: Observable) => boolean,\n thisArg: A\n): OperatorFunction;\nexport function every(predicate: (value: T, index: number, source: Observable) => boolean): OperatorFunction;\n\n/**\n * Returns an Observable that emits whether or not every item of the source satisfies the condition specified.\n *\n * If all values pass predicate before the source completes, emits true before completion,\n * otherwise emit false, then complete.\n *\n * ![](every.png)\n *\n * ## Example\n * A simple example emitting true if all elements are less than 5, false otherwise\n * ```ts\n * import { of } from 'rxjs';\n * import { every } from 'rxjs/operators';\n *\n * of(1, 2, 3, 4, 5, 6).pipe(\n * every(x => x < 5),\n * )\n * .subscribe(x => console.log(x)); // -> false\n * ```\n *\n * @param {function} predicate A function for determining if an item meets a specified condition.\n * @param {any} [thisArg] Optional object to use for `this` in the callback.\n * @return A function that returns an Observable of booleans that determines if\n * all items of the source Observable meet the condition specified.\n */\nexport function every(\n predicate: (value: T, index: number, source: Observable) => boolean,\n thisArg?: any\n): OperatorFunction {\n return operate((source, subscriber) => {\n let index = 0;\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n if (!predicate.call(thisArg, value, index++, source)) {\n subscriber.next(false);\n subscriber.complete();\n }\n },\n () => {\n subscriber.next(true);\n subscriber.complete();\n }\n )\n );\n });\n}\n","import { Subscription } from '../Subscription';\nimport { OperatorFunction, ObservableInput, ObservedValueOf } from '../types';\nimport { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Converts a higher-order Observable into a first-order Observable by dropping\n * inner Observables while the previous inner Observable has not yet completed.\n *\n * Flattens an Observable-of-Observables by dropping the\n * next inner Observables while the current inner is still executing.\n *\n * ![](exhaust.png)\n *\n * `exhaust` subscribes to an Observable that emits Observables, also known as a\n * higher-order Observable. Each time it observes one of these emitted inner\n * Observables, the output Observable begins emitting the items emitted by that\n * inner Observable. So far, it behaves like {@link mergeAll}. However,\n * `exhaust` ignores every new inner Observable if the previous Observable has\n * not yet completed. Once that one completes, it will accept and flatten the\n * next inner Observable and repeat this process.\n *\n * ## Example\n * Run a finite timer for each click, only if there is no currently active timer\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { exhaustAll, map, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const higherOrder = clicks.pipe(\n * map((ev) => interval(1000).pipe(take(5))),\n * );\n * const result = higherOrder.pipe(exhaustAll());\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link combineLatestAll}\n * @see {@link concatAll}\n * @see {@link switchAll}\n * @see {@link switchMap}\n * @see {@link mergeAll}\n * @see {@link exhaustMap}\n * @see {@link zipAll}\n *\n * @return A function that returns an Observable that takes a source of\n * Observables and propagates the first Observable exclusively until it\n * completes before subscribing to the next.\n */\nexport function exhaustAll>(): OperatorFunction> {\n return operate((source, subscriber) => {\n let isComplete = false;\n let innerSub: Subscription | null = null;\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (inner) => {\n if (!innerSub) {\n innerSub = innerFrom(inner).subscribe(\n new OperatorSubscriber(subscriber, undefined, () => {\n innerSub = null;\n isComplete && subscriber.complete();\n })\n );\n }\n },\n () => {\n isComplete = true;\n !innerSub && subscriber.complete();\n }\n )\n );\n });\n}\n","import { exhaustAll } from './exhaustAll';\n\n/**\n * @deprecated Renamed to {@link exhaustAll}. Will be removed in v8.\n */\nexport const exhaust = exhaustAll;\n","import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { OperatorFunction, TruthyTypesOf } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\nexport function find(predicate: BooleanConstructor): OperatorFunction>;\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function find(\n predicate: (this: A, value: T, index: number, source: Observable) => value is S,\n thisArg: A\n): OperatorFunction;\nexport function find(\n predicate: (value: T, index: number, source: Observable) => value is S\n): OperatorFunction;\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function find(\n predicate: (this: A, value: T, index: number, source: Observable) => boolean,\n thisArg: A\n): OperatorFunction;\nexport function find(predicate: (value: T, index: number, source: Observable) => boolean): OperatorFunction;\n/**\n * Emits only the first value emitted by the source Observable that meets some\n * condition.\n *\n * Finds the first value that passes some test and emits\n * that.\n *\n * ![](find.png)\n *\n * `find` searches for the first item in the source Observable that matches the\n * specified condition embodied by the `predicate`, and returns the first\n * occurrence in the source. Unlike {@link first}, the `predicate` is required\n * in `find`, and does not emit an error if a valid value is not found\n * (emits `undefined` instead).\n *\n * ## Example\n * Find and emit the first click that happens on a DIV element\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { find } from 'rxjs/operators';\n *\n * const div = document.createElement('div');\n * div.style.cssText = 'width: 200px; height: 200px; background: #09c;';\n * document.body.appendChild(div);\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(find(ev => ev.target.tagName === 'DIV'));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link filter}\n * @see {@link first}\n * @see {@link findIndex}\n * @see {@link take}\n *\n * @param {function(value: T, index: number, source: Observable): boolean} predicate\n * A function called with each item to test for condition matching.\n * @param {any} [thisArg] An optional argument to determine the value of `this`\n * in the `predicate` function.\n * @return A function that returns an Observable that emits the first item that\n * matches the condition.\n */\nexport function find(\n predicate: (value: T, index: number, source: Observable) => boolean,\n thisArg?: any\n): OperatorFunction {\n return operate(createFind(predicate, thisArg, 'value'));\n}\n\nexport function createFind(\n predicate: (value: T, index: number, source: Observable) => boolean,\n thisArg: any,\n emit: 'value' | 'index'\n) {\n const findIndex = emit === 'index';\n return (source: Observable, subscriber: Subscriber) => {\n let index = 0;\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n const i = index++;\n if (predicate.call(thisArg, value, i, source)) {\n subscriber.next(findIndex ? i : value);\n subscriber.complete();\n }\n },\n () => {\n subscriber.next(findIndex ? -1 : undefined);\n subscriber.complete();\n }\n )\n );\n };\n}\n","import { Observable } from '../Observable';\nimport { Falsy, OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { createFind } from './find';\n\nexport function findIndex(predicate: BooleanConstructor): OperatorFunction;\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function findIndex(predicate: BooleanConstructor, thisArg: any): OperatorFunction;\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function findIndex(\n predicate: (this: A, value: T, index: number, source: Observable) => boolean,\n thisArg: A\n): OperatorFunction;\nexport function findIndex(predicate: (value: T, index: number, source: Observable) => boolean): OperatorFunction;\n\n/**\n * Emits only the index of the first value emitted by the source Observable that\n * meets some condition.\n *\n * It's like {@link find}, but emits the index of the\n * found value, not the value itself.\n *\n * ![](findIndex.png)\n *\n * `findIndex` searches for the first item in the source Observable that matches\n * the specified condition embodied by the `predicate`, and returns the\n * (zero-based) index of the first occurrence in the source. Unlike\n * {@link first}, the `predicate` is required in `findIndex`, and does not emit\n * an error if a valid value is not found.\n *\n * ## Example\n * Emit the index of first click that happens on a DIV element\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { findIndex } from 'rxjs/operators';\n *\n * const div = document.createElement('div');\n * div.style.cssText = 'width: 200px; height: 200px; background: #09c;';\n * document.body.appendChild(div);\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(findIndex(ev => ev.target.tagName === 'DIV'));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link filter}\n * @see {@link find}\n * @see {@link first}\n * @see {@link take}\n *\n * @param {function(value: T, index: number, source: Observable): boolean} predicate\n * A function called with each item to test for condition matching.\n * @param {any} [thisArg] An optional argument to determine the value of `this`\n * in the `predicate` function.\n * @return A function that returns an Observable that emits the index of the\n * first item that matches the condition.\n */\nexport function findIndex(\n predicate: (value: T, index: number, source: Observable) => boolean,\n thisArg?: any\n): OperatorFunction {\n return operate(createFind(predicate, thisArg, 'index'));\n}\n","import { Observable } from '../Observable';\nimport { innerFrom } from '../observable/innerFrom';\nimport { Subject } from '../Subject';\nimport { ObservableInput, Observer, OperatorFunction, SubjectLike } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\ninterface BasicGroupByOptions {\n element?: undefined;\n duration?: (grouped: GroupedObservable) => ObservableInput;\n connector?: () => SubjectLike;\n}\n\ninterface GroupByOptionsWithElement {\n element: (value: T) => E;\n duration?: (grouped: GroupedObservable) => ObservableInput;\n connector?: () => SubjectLike;\n}\n\nexport function groupBy(key: (value: T) => K, options: BasicGroupByOptions): OperatorFunction>;\n\nexport function groupBy(\n key: (value: T) => K,\n options: GroupByOptionsWithElement\n): OperatorFunction>;\n\nexport function groupBy(\n key: (value: T) => value is K\n): OperatorFunction | GroupedObservable>>;\n\nexport function groupBy(key: (value: T) => K): OperatorFunction>;\n\n/**\n * @deprecated use the options parameter instead.\n */\nexport function groupBy(\n key: (value: T) => K,\n element: void,\n duration: (grouped: GroupedObservable) => Observable\n): OperatorFunction>;\n\n/**\n * @deprecated use the options parameter instead.\n */\nexport function groupBy(\n key: (value: T) => K,\n element?: (value: T) => R,\n duration?: (grouped: GroupedObservable) => Observable\n): OperatorFunction>;\n\n/**\n * Groups the items emitted by an Observable according to a specified criterion,\n * and emits these grouped items as `GroupedObservables`, one\n * {@link GroupedObservable} per group.\n *\n * ![](groupBy.png)\n *\n * When the Observable emits an item, a key is computed for this item with the key function.\n *\n * If a {@link GroupedObservable} for this key exists, this {@link GroupedObservable} emits. Otherwise, a new\n * {@link GroupedObservable} for this key is created and emits.\n *\n * A {@link GroupedObservable} represents values belonging to the same group represented by a common key. The common\n * key is available as the `key` field of a {@link GroupedObservable} instance.\n *\n * The elements emitted by {@link GroupedObservable}s are by default the items emitted by the Observable, or elements\n * returned by the element function.\n *\n * ## Examples\n *\n * ### Group objects by id and return as array\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { mergeMap, groupBy, reduce } from 'rxjs/operators';\n *\n * of(\n * {id: 1, name: 'JavaScript'},\n * {id: 2, name: 'Parcel'},\n * {id: 2, name: 'webpack'},\n * {id: 1, name: 'TypeScript'},\n * {id: 3, name: 'TSLint'}\n * ).pipe(\n * groupBy(p => p.id),\n * mergeMap((group$) => group$.pipe(reduce((acc, cur) => [...acc, cur], [])))\n * )\n * .subscribe(p => console.log(p));\n *\n * // displays:\n * // [ { id: 1, name: 'JavaScript'},\n * // { id: 1, name: 'TypeScript'} ]\n * //\n * // [ { id: 2, name: 'Parcel'},\n * // { id: 2, name: 'webpack'} ]\n * //\n * // [ { id: 3, name: 'TSLint'} ]\n * ```\n *\n * ### Pivot data on the id field\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { groupBy, map, mergeMap, reduce } from 'rxjs/operators';\n *\n * of(\n * { id: 1, name: 'JavaScript' },\n * { id: 2, name: 'Parcel' },\n * { id: 2, name: 'webpack' },\n * { id: 1, name: 'TypeScript' },\n * { id: 3, name: 'TSLint' }\n * )\n * .pipe(\n * groupBy(p => p.id, { element: p => p.name }),\n * mergeMap(group$ =>\n * group$.pipe(reduce((acc, cur) => [...acc, cur], [`${group$.key}`]))\n * ),\n * map(arr => ({ id: parseInt(arr[0], 10), values: arr.slice(1) }))\n * )\n * .subscribe(p => console.log(p));\n *\n * // displays:\n * // { id: 1, values: [ 'JavaScript', 'TypeScript' ] }\n * // { id: 2, values: [ 'Parcel', 'webpack' ] }\n * // { id: 3, values: [ 'TSLint' ] }\n * ```\n *\n * @param key A function that extracts the key\n * for each item.\n * @param element A function that extracts the\n * return element for each item.\n * @param duration\n * A function that returns an Observable to determine how long each group should\n * exist.\n * @param connector Factory function to create an\n * intermediate Subject through which grouped elements are emitted.\n * @return A function that returns an Observable that emits GroupedObservables,\n * each of which corresponds to a unique key value and each of which emits\n * those items from the source Observable that share that key value.\n *\n * @deprecated Use the options parameter instead.\n */\nexport function groupBy(\n key: (value: T) => K,\n element?: (value: T) => R,\n duration?: (grouped: GroupedObservable) => Observable,\n connector?: () => Subject\n): OperatorFunction>;\n\n// Impl\nexport function groupBy(\n keySelector: (value: T) => K,\n elementOrOptions?: ((value: any) => any) | void | BasicGroupByOptions | GroupByOptionsWithElement,\n duration?: (grouped: GroupedObservable) => ObservableInput,\n connector?: () => SubjectLike\n): OperatorFunction> {\n return operate((source, subscriber) => {\n let element: ((value: any) => any) | void;\n if (!elementOrOptions || typeof elementOrOptions === 'function') {\n element = elementOrOptions;\n } else {\n ({ duration, element, connector } = elementOrOptions);\n }\n\n // A lookup for the groups that we have so far.\n const groups = new Map>();\n\n // Used for notifying all groups and the subscriber in the same way.\n const notify = (cb: (group: Observer) => void) => {\n groups.forEach(cb);\n cb(subscriber);\n };\n\n // Used to handle errors from the source, AND errors that occur during the\n // next call from the source.\n const handleError = (err: any) => notify((consumer) => consumer.error(err));\n\n // Capturing a reference to this, because we need a handle to it\n // in `createGroupedObservable` below. This is what we use to\n // subscribe to our source observable. This sometimes needs to be unsubscribed\n // out-of-band with our `subscriber` which is the downstream subscriber, or destination,\n // in cases where a user unsubscribes from the main resulting subscription, but\n // still has groups from this subscription subscribed and would expect values from it\n // Consider: `source.pipe(groupBy(fn), take(2))`.\n const groupBySourceSubscriber = new GroupBySubscriber(\n subscriber,\n (value: T) => {\n // Because we have to notify all groups of any errors that occur in here,\n // we have to add our own try/catch to ensure that those errors are propagated.\n // OperatorSubscriber will only send the error to the main subscriber.\n try {\n const key = keySelector(value);\n\n let group = groups.get(key);\n if (!group) {\n // Create our group subject\n groups.set(key, (group = connector ? connector() : new Subject()));\n\n // Emit the grouped observable. Note that we can't do a simple `asObservable()` here,\n // because the grouped observable has special semantics around reference counting\n // to ensure we don't sever our connection to the source prematurely.\n const grouped = createGroupedObservable(key, group);\n subscriber.next(grouped);\n\n if (duration) {\n const durationSubscriber = new OperatorSubscriber(\n // Providing the group here ensures that it is disposed of -- via `unsubscribe` --\n // wnen the duration subscription is torn down. That is important, because then\n // if someone holds a handle to the grouped observable and tries to subscribe to it\n // after the connection to the source has been severed, they will get an\n // `ObjectUnsubscribedError` and know they can't possibly get any notifications.\n group as any,\n () => {\n // Our duration notified! We can complete the group.\n // The group will be removed from the map in the teardown phase.\n group!.complete();\n durationSubscriber?.unsubscribe();\n },\n // Completions are also sent to the group, but just the group.\n undefined,\n // Errors on the duration subscriber are sent to the group\n // but only the group. They are not sent to the main subscription.\n undefined,\n // Teardown: Remove this group from our map.\n () => groups.delete(key)\n );\n\n // Start our duration notifier.\n groupBySourceSubscriber.add(innerFrom(duration(grouped)).subscribe(durationSubscriber));\n }\n }\n\n // Send the value to our group.\n group.next(element ? element(value) : value);\n } catch (err) {\n handleError(err);\n }\n },\n // Source completes.\n () => notify((consumer) => consumer.complete()),\n // Error from the source.\n handleError,\n // Free up memory.\n // When the source subscription is _finally_ torn down, release the subjects and keys\n // in our groups Map, they may be quite large and we don't want to keep them around if we\n // don't have to.\n () => groups.clear()\n );\n\n // Subscribe to the source\n source.subscribe(groupBySourceSubscriber);\n\n /**\n * Creates the actual grouped observable returned.\n * @param key The key of the group\n * @param groupSubject The subject that fuels the group\n */\n function createGroupedObservable(key: K, groupSubject: SubjectLike) {\n const result: any = new Observable((groupSubscriber) => {\n groupBySourceSubscriber.activeGroups++;\n const innerSub = groupSubject.subscribe(groupSubscriber);\n return () => {\n innerSub.unsubscribe();\n // We can kill the subscription to our source if we now have no more\n // active groups subscribed, and a teardown was already attempted on\n // the source.\n --groupBySourceSubscriber.activeGroups === 0 &&\n groupBySourceSubscriber.teardownAttempted &&\n groupBySourceSubscriber.unsubscribe();\n };\n });\n result.key = key;\n return result;\n }\n });\n}\n\n/**\n * This was created because groupBy is a bit unique, in that emitted groups that have\n * subscriptions have to keep the subscription to the source alive until they\n * are torn down.\n */\nclass GroupBySubscriber extends OperatorSubscriber {\n /**\n * The number of actively subscribed groups\n */\n activeGroups = 0;\n /**\n * Whether or not teardown was attempted on this subscription.\n */\n teardownAttempted = false;\n\n unsubscribe() {\n this.teardownAttempted = true;\n // We only kill our subscription to the source if we have\n // no active groups. As stated above, consider this scenario:\n // source$.pipe(groupBy(fn), take(2)).\n this.activeGroups === 0 && super.unsubscribe();\n }\n}\n\n/**\n * An observable of values that is the emitted by the result of a {@link groupBy} operator,\n * contains a `key` property for the grouping.\n */\nexport interface GroupedObservable extends Observable {\n /**\n * The key value for the grouped notifications.\n */\n readonly key: K;\n}\n","import { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Emits `false` if the input Observable emits any values, or emits `true` if the\n * input Observable completes without emitting any values.\n *\n * Tells whether any values are emitted by an Observable.\n *\n * ![](isEmpty.png)\n *\n * `isEmpty` transforms an Observable that emits values into an Observable that\n * emits a single boolean value representing whether or not any values were\n * emitted by the source Observable. As soon as the source Observable emits a\n * value, `isEmpty` will emit a `false` and complete. If the source Observable\n * completes having not emitted anything, `isEmpty` will emit a `true` and\n * complete.\n *\n * A similar effect could be achieved with {@link count}, but `isEmpty` can emit\n * a `false` value sooner.\n *\n * ## Examples\n *\n * Emit `false` for a non-empty Observable.\n *\n * ```ts\n * import { Subject } from 'rxjs';\n * import { isEmpty } from 'rxjs/operators';\n *\n * const source = new Subject();\n * const result = source.pipe(isEmpty());\n *\n * source.subscribe(x => console.log(x));\n * result.subscribe(x => console.log(x));\n *\n * source.next('a');\n * source.next('b');\n * source.next('c');\n * source.complete();\n *\n * // Outputs\n * // a\n * // false\n * // b\n * // c\n * ```\n *\n * Emit `true` for an empty Observable.\n *\n * ```ts\n * import { EMPTY } from 'rxjs';\n * import { isEmpty } from 'rxjs/operators';\n *\n * const result = EMPTY.pipe(isEmpty());\n * result.subscribe(x => console.log(x));\n *\n * // Outputs\n * // true\n * ```\n *\n * @see {@link count}\n * @see {@link index/EMPTY}\n *\n * @return A function that returns an Observable that emits boolean value\n * indicating whether the source Observable was empty or not.\n */\nexport function isEmpty(): OperatorFunction {\n return operate((source, subscriber) => {\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n () => {\n subscriber.next(false);\n subscriber.complete();\n },\n () => {\n subscriber.next(true);\n subscriber.complete();\n }\n )\n );\n });\n}\n","import { Notification } from '../Notification';\nimport { OperatorFunction, ObservableNotification } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Represents all of the notifications from the source Observable as `next`\n * emissions marked with their original types within {@link Notification}\n * objects.\n *\n * Wraps `next`, `error` and `complete` emissions in\n * {@link Notification} objects, emitted as `next` on the output Observable.\n * \n *\n * ![](materialize.png)\n *\n * `materialize` returns an Observable that emits a `next` notification for each\n * `next`, `error`, or `complete` emission of the source Observable. When the\n * source Observable emits `complete`, the output Observable will emit `next` as\n * a Notification of type \"complete\", and then it will emit `complete` as well.\n * When the source Observable emits `error`, the output will emit `next` as a\n * Notification of type \"error\", and then `complete`.\n *\n * This operator is useful for producing metadata of the source Observable, to\n * be consumed as `next` emissions. Use it in conjunction with\n * {@link dematerialize}.\n *\n * ## Example\n *\n * Convert a faulty Observable to an Observable of Notifications\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { materialize, map } from 'rxjs/operators';\n *\n * const letters = of('a', 'b', 13, 'd');\n * const upperCase = letters.pipe(map(x => x.toUpperCase()));\n * const materialized = upperCase.pipe(materialize());\n * materialized.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // - Notification {kind: \"N\", value: \"A\", error: undefined, hasValue: true}\n * // - Notification {kind: \"N\", value: \"B\", error: undefined, hasValue: true}\n * // - Notification {kind: \"E\", value: undefined, error: TypeError:\n * // x.toUpperCase is not a function at MapSubscriber.letters.map.x\n * // [as project] (http://1…, hasValue: false}\n * ```\n *\n * @see {@link Notification}\n * @see {@link dematerialize}\n *\n * @return A function that returns an Observable that emits\n * {@link Notification} objects that wrap the original emissions from the\n * source Observable with metadata.\n */\nexport function materialize(): OperatorFunction & ObservableNotification> {\n return operate((source, subscriber) => {\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n subscriber.next(Notification.createNext(value));\n },\n () => {\n subscriber.next(Notification.createComplete());\n subscriber.complete();\n },\n (err) => {\n subscriber.next(Notification.createError(err));\n subscriber.complete();\n }\n )\n );\n });\n}\n","import { reduce } from './reduce';\nimport { MonoTypeOperatorFunction } from '../types';\nimport { isFunction } from '../util/isFunction';\n\n/**\n * The Max operator operates on an Observable that emits numbers (or items that can be compared with a provided function),\n * and when source Observable completes it emits a single item: the item with the largest value.\n *\n * ![](max.png)\n *\n * ## Examples\n * Get the maximal value of a series of numbers\n * ```ts\n * import { of } from 'rxjs';\n * import { max } from 'rxjs/operators';\n *\n * of(5, 4, 7, 2, 8).pipe(\n * max(),\n * )\n * .subscribe(x => console.log(x)); // -> 8\n * ```\n *\n * Use a comparer function to get the maximal item\n * ```typescript\n * import { of } from 'rxjs';\n * import { max } from 'rxjs/operators';\n *\n * interface Person {\n * age: number,\n * name: string\n * }\n *of(\n * {age: 7, name: 'Foo'},\n * {age: 5, name: 'Bar'},\n * {age: 9, name: 'Beer'},\n * ).pipe(\n * max((a: Person, b: Person) => a.age < b.age ? -1 : 1),\n * )\n * .subscribe((x: Person) => console.log(x.name)); // -> 'Beer'\n * ```\n *\n * @see {@link min}\n *\n * @param {Function} [comparer] - Optional comparer function that it will use instead of its default to compare the\n * value of two items.\n * @return A function that returns an Observable that emits item with the\n * largest value.\n */\nexport function max(comparer?: (x: T, y: T) => number): MonoTypeOperatorFunction {\n return reduce(isFunction(comparer) ? (x, y) => (comparer(x, y) > 0 ? x : y) : (x, y) => (x > y ? x : y));\n}\n","import { mergeMap } from './mergeMap';\n\n/**\n * @deprecated Renamed to {@link mergeMap}. Will be removed in v8.\n */\nexport const flatMap = mergeMap;\n","import { OperatorFunction, ObservedValueOf, ObservableInput } from '../types';\nimport { mergeMap } from './mergeMap';\nimport { isFunction } from '../util/isFunction';\n\n/* tslint:disable:max-line-length */\nexport function mergeMapTo>(\n innerObservable: O,\n concurrent?: number\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function mergeMapTo>(\n innerObservable: O,\n resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R,\n concurrent?: number\n): OperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to the same Observable which is merged multiple\n * times in the output Observable.\n *\n * It's like {@link mergeMap}, but maps each value always\n * to the same inner Observable.\n *\n * ![](mergeMapTo.png)\n *\n * Maps each source value to the given Observable `innerObservable` regardless\n * of the source value, and then merges those resulting Observables into one\n * single Observable, which is the output Observable.\n *\n * ## Example\n * For each click event, start an interval Observable ticking every 1 second\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { mergeMapTo } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(mergeMapTo(interval(1000)));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link concatMapTo}\n * @see {@link merge}\n * @see {@link mergeAll}\n * @see {@link mergeMap}\n * @see {@link mergeScan}\n * @see {@link switchMapTo}\n *\n * @param {ObservableInput} innerObservable An Observable to replace each value from\n * the source Observable.\n * @param {number} [concurrent=Infinity] Maximum number of input\n * Observables being subscribed to concurrently.\n * @return A function that returns an Observable that emits items from the\n * given `innerObservable`.\n */\nexport function mergeMapTo>(\n innerObservable: O,\n resultSelector?: ((outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R) | number,\n concurrent: number = Infinity\n): OperatorFunction | R> {\n if (isFunction(resultSelector)) {\n return mergeMap(() => innerObservable, resultSelector, concurrent);\n }\n if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n return mergeMap(() => innerObservable, concurrent);\n}\n","import { ObservableInputTuple, OperatorFunction } from '../types';\nimport { merge } from './merge';\n\n/**\n * Merge the values from all observables to an single observable result.\n *\n * Creates an observable, that when subscribed to, subscribes to the source\n * observable, and all other sources provided as arguments. All values from\n * every source are emitted from the resulting subscription.\n *\n * When all sources complete, the resulting observable will complete.\n *\n * When any one source errors, the resulting observable will error.\n *\n *\n * ### Example\n *\n * Joining all outputs from multiple user input event streams:\n *\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { map, mergeWith } from 'rxjs/operators';\n *\n * const clicks$ = fromEvent(document, 'click').pipe(map(() => 'click'));\n * const mousemoves$ = fromEvent(document, 'mousemove').pipe(map(() => 'mousemove'));\n * const dblclicks$ = fromEvent(document, 'dblclick').pipe(map(() => 'dblclick'));\n *\n * mousemoves$.pipe(\n * mergeWith(clicks$, dblclicks$),\n * )\n * .subscribe(x => console.log(x));\n *\n * // result (assuming user interactions)\n * // \"mousemove\"\n * // \"mousemove\"\n * // \"mousemove\"\n * // \"click\"\n * // \"click\"\n * // \"dblclick\"\n * ```\n * @param otherSources the sources to combine the current source with.\n * @return A function that returns an Observable that merges the values from\n * all given Observables.\n */\nexport function mergeWith(\n ...otherSources: [...ObservableInputTuple]\n): OperatorFunction {\n return merge(...otherSources);\n}\n","import { ObservableInput, ObservableInputTuple, OperatorFunction, SchedulerLike } from '../types';\nimport { operate } from '../util/lift';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { mergeAll } from './mergeAll';\nimport { popNumber, popScheduler } from '../util/args';\nimport { from } from '../observable/from';\n\n/** @deprecated Replaced with {@link mergeWith}. Will be removed in v8. */\nexport function merge(...sources: [...ObservableInputTuple]): OperatorFunction;\n/** @deprecated Replaced with {@link mergeWith}. Will be removed in v8. */\nexport function merge(\n ...sourcesAndConcurrency: [...ObservableInputTuple, number]\n): OperatorFunction;\n/** @deprecated Replaced with {@link mergeWith}. Will be removed in v8. */\nexport function merge(\n ...sourcesAndScheduler: [...ObservableInputTuple, SchedulerLike]\n): OperatorFunction;\n/** @deprecated Replaced with {@link mergeWith}. Will be removed in v8. */\nexport function merge(\n ...sourcesAndConcurrencyAndScheduler: [...ObservableInputTuple, number, SchedulerLike]\n): OperatorFunction;\n\nexport function merge(...args: unknown[]): OperatorFunction {\n const scheduler = popScheduler(args);\n const concurrent = popNumber(args, Infinity);\n args = argsOrArgArray(args);\n\n return operate((source, subscriber) => {\n mergeAll(concurrent)(from([source, ...(args as ObservableInput[])], scheduler)).subscribe(subscriber);\n });\n}\n","import { reduce } from './reduce';\nimport { MonoTypeOperatorFunction } from '../types';\nimport { isFunction } from '../util/isFunction';\n\n/**\n * The Min operator operates on an Observable that emits numbers (or items that can be compared with a provided function),\n * and when source Observable completes it emits a single item: the item with the smallest value.\n *\n * ![](min.png)\n *\n * ## Examples\n * Get the minimal value of a series of numbers\n * ```ts\n * import { of } from 'rxjs';\n * import { min } from 'rxjs/operators';\n *\n * of(5, 4, 7, 2, 8).pipe(\n * min(),\n * )\n * .subscribe(x => console.log(x)); // -> 2\n * ```\n *\n * Use a comparer function to get the minimal item\n * ```typescript\n * import { of } from 'rxjs';\n * import { min } from 'rxjs/operators';\n *\n * interface Person {\n * age: number,\n * name: string\n * }\n *of(\n * {age: 7, name: 'Foo'},\n * {age: 5, name: 'Bar'},\n * {age: 9, name: 'Beer'},\n * ).pipe(\n * min( (a: Person, b: Person) => a.age < b.age ? -1 : 1),\n * )\n * .subscribe((x: Person) => console.log(x.name)); // -> 'Bar'\n * ```\n * @see {@link max}\n *\n * @param {Function} [comparer] - Optional comparer function that it will use instead of its default to compare the\n * value of two items.\n * @return A function that returns an Observable that emits item with the\n * smallest value.\n */\nexport function min(comparer?: (x: T, y: T) => number): MonoTypeOperatorFunction {\n return reduce(isFunction(comparer) ? (x, y) => (comparer(x, y) < 0 ? x : y) : (x, y) => (x < y ? x : y));\n}\n","import { map } from './map';\nimport { OperatorFunction } from '../types';\n\n/* tslint:disable:max-line-length */\nexport function pluck(k1: K1): OperatorFunction;\nexport function pluck(k1: K1, k2: K2): OperatorFunction;\nexport function pluck(\n k1: K1,\n k2: K2,\n k3: K3\n): OperatorFunction;\nexport function pluck(\n k1: K1,\n k2: K2,\n k3: K3,\n k4: K4\n): OperatorFunction;\nexport function pluck<\n T,\n K1 extends keyof T,\n K2 extends keyof T[K1],\n K3 extends keyof T[K1][K2],\n K4 extends keyof T[K1][K2][K3],\n K5 extends keyof T[K1][K2][K3][K4]\n>(k1: K1, k2: K2, k3: K3, k4: K4, k5: K5): OperatorFunction;\nexport function pluck<\n T,\n K1 extends keyof T,\n K2 extends keyof T[K1],\n K3 extends keyof T[K1][K2],\n K4 extends keyof T[K1][K2][K3],\n K5 extends keyof T[K1][K2][K3][K4],\n K6 extends keyof T[K1][K2][K3][K4][K5]\n>(k1: K1, k2: K2, k3: K3, k4: K4, k5: K5, k6: K6): OperatorFunction;\nexport function pluck<\n T,\n K1 extends keyof T,\n K2 extends keyof T[K1],\n K3 extends keyof T[K1][K2],\n K4 extends keyof T[K1][K2][K3],\n K5 extends keyof T[K1][K2][K3][K4],\n K6 extends keyof T[K1][K2][K3][K4][K5]\n>(k1: K1, k2: K2, k3: K3, k4: K4, k5: K5, k6: K6, ...rest: string[]): OperatorFunction;\nexport function pluck(...properties: string[]): OperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Maps each source value to its specified nested property.\n *\n * Like {@link map}, but meant only for picking one of\n * the nested properties of every emitted value.\n *\n * ![](pluck.png)\n *\n * Given a list of strings or numbers describing a path to a property, retrieves\n * the value of a specified nested property from all values in the source\n * Observable. If a property can't be resolved, it will return `undefined` for\n * that value.\n *\n * ## Example\n * Map every click to the tagName of the clicked target element\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { pluck } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const tagNames = clicks.pipe(pluck('target', 'tagName'));\n * tagNames.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link map}\n *\n * @param properties The nested properties to pluck from each source\n * value.\n * @return A function that returns an Observable of property values from the\n * source values.\n * @deprecated Use {@link map} and optional chaining: `pluck('foo', 'bar')` is `map(x => x?.foo?.bar)`. Will be removed in v8.\n */\nexport function pluck(...properties: Array): OperatorFunction {\n const length = properties.length;\n if (length === 0) {\n throw new Error('list of properties cannot be empty.');\n }\n return map((x) => {\n let currentProp: any = x;\n for (let i = 0; i < length; i++) {\n const p = currentProp?.[properties[i]];\n if (typeof p !== 'undefined') {\n currentProp = p;\n } else {\n return undefined;\n }\n }\n return currentProp;\n });\n}\n","import { Observable } from '../Observable';\nimport { BehaviorSubject } from '../BehaviorSubject';\nimport { ConnectableObservable } from '../observable/ConnectableObservable';\nimport { UnaryFunction } from '../types';\n\n/**\n * Creates a {@link ConnectableObservable} that utilizes a {@link BehaviorSubject}.\n *\n * @param initialValue The initial value passed to the {@link BehaviorSubject}.\n * @return A function that returns a {@link ConnectableObservable}\n * @deprecated Will be removed in v8. To create a connectable observable that uses a\n * {@link BehaviorSubject} under the hood, use {@link connectable}.\n * `source.pipe(publishBehavior(initValue))` is equivalent to\n * `connectable(source, { connector: () => new BehaviorSubject(initValue), resetOnDisconnect: false })`.\n * If you're using {@link refCount} after `publishBehavior`, use the {@link share} operator instead.\n * `source.pipe(publishBehavior(initValue), refCount())` is equivalent to\n * `source.pipe(share({ connector: () => new BehaviorSubject(initValue), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false }))`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function publishBehavior(initialValue: T): UnaryFunction, ConnectableObservable> {\n // Note that this has *never* supported the selector function.\n return (source) => {\n const subject = new BehaviorSubject(initialValue);\n return new ConnectableObservable(source, () => subject);\n };\n}\n","import { Observable } from '../Observable';\nimport { AsyncSubject } from '../AsyncSubject';\nimport { ConnectableObservable } from '../observable/ConnectableObservable';\nimport { UnaryFunction } from '../types';\n\n/**\n * Returns a connectable observable sequence that shares a single subscription to the\n * underlying sequence containing only the last notification.\n *\n * ![](publishLast.png)\n *\n * Similar to {@link publish}, but it waits until the source observable completes and stores\n * the last emitted value.\n * Similarly to {@link publishReplay} and {@link publishBehavior}, this keeps storing the last\n * value even if it has no more subscribers. If subsequent subscriptions happen, they will\n * immediately get that last stored value and complete.\n *\n * ## Example\n *\n * ```ts\n * import { interval } from 'rxjs';\n * import { publishLast, tap, take } from 'rxjs/operators';\n *\n * const connectable =\n * interval(1000)\n * .pipe(\n * tap(x => console.log(\"side effect\", x)),\n * take(3),\n * publishLast());\n *\n * connectable.subscribe(\n * x => console.log( \"Sub. A\", x),\n * err => console.log(\"Sub. A Error\", err),\n * () => console.log( \"Sub. A Complete\"));\n *\n * connectable.subscribe(\n * x => console.log( \"Sub. B\", x),\n * err => console.log(\"Sub. B Error\", err),\n * () => console.log( \"Sub. B Complete\"));\n *\n * connectable.connect();\n *\n * // Results:\n * // \"side effect 0\"\n * // \"side effect 1\"\n * // \"side effect 2\"\n * // \"Sub. A 2\"\n * // \"Sub. B 2\"\n * // \"Sub. A Complete\"\n * // \"Sub. B Complete\"\n * ```\n *\n * @see {@link ConnectableObservable}\n * @see {@link publish}\n * @see {@link publishReplay}\n * @see {@link publishBehavior}\n *\n * @return A function that returns an Observable that emits elements of a\n * sequence produced by multicasting the source sequence.\n * @deprecated Will be removed in v8. To create a connectable observable with an\n * {@link AsyncSubject} under the hood, use {@link connectable}.\n * `source.pipe(publishLast())` is equivalent to\n * `connectable(source, { connector: () => new AsyncSubject(), resetOnDisconnect: false })`.\n * If you're using {@link refCount} after `publishLast`, use the {@link share} operator instead.\n * `source.pipe(publishLast(), refCount())` is equivalent to\n * `source.pipe(share({ connector: () => new AsyncSubject(), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false }))`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function publishLast(): UnaryFunction, ConnectableObservable> {\n // Note that this has *never* supported a selector function like `publish` and `publishReplay`.\n return (source) => {\n const subject = new AsyncSubject();\n return new ConnectableObservable(source, () => subject);\n };\n}\n","import { Observable } from '../Observable';\nimport { ReplaySubject } from '../ReplaySubject';\nimport { multicast } from './multicast';\nimport { MonoTypeOperatorFunction, OperatorFunction, TimestampProvider, ObservableInput, ObservedValueOf } from '../types';\nimport { isFunction } from '../util/isFunction';\n\n/**\n * Creates a {@link ConnectableObservable} that uses a {@link ReplaySubject}\n * internally.\n *\n * @param bufferSize The buffer size for the underlying {@link ReplaySubject}.\n * @param windowTime The window time for the underlying {@link ReplaySubject}.\n * @param timestampProvider The timestamp provider for the underlying {@link ReplaySubject}.\n * @deprecated Will be removed in v8. To create a connectable observable that uses a\n * {@link ReplaySubject} under the hood, use {@link connectable}.\n * `source.pipe(publishReplay(size, time, scheduler))` is equivalent to\n * `connectable(source, { connector: () => new ReplaySubject(size, time, scheduler), resetOnDisconnect: false })`.\n * If you're using {@link refCount} after `publishReplay`, use the {@link share} operator instead.\n * `publishReplay(size, time, scheduler), refCount()` is equivalent to\n * `share({ connector: () => new ReplaySubject(size, time, scheduler), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false })`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function publishReplay(\n bufferSize?: number,\n windowTime?: number,\n timestampProvider?: TimestampProvider\n): MonoTypeOperatorFunction;\n\n/**\n * Creates an observable, that when subscribed to, will create a {@link ReplaySubject},\n * and pass an observable from it (using [asObservable](api/index/class/Subject#asObservable)) to\n * the `selector` function, which then returns an observable that is subscribed to before\n * \"connecting\" the source to the internal `ReplaySubject`.\n *\n * Since this is deprecated, for additional details see the documentation for {@link connect}.\n *\n * @param bufferSize The buffer size for the underlying {@link ReplaySubject}.\n * @param windowTime The window time for the underlying {@link ReplaySubject}.\n * @param selector A function used to setup the multicast.\n * @param timestampProvider The timestamp provider for the underlying {@link ReplaySubject}.\n * @deprecated Will be removed in v8. Use the {@link connect} operator instead.\n * `source.pipe(publishReplay(size, window, selector, scheduler))` is equivalent to\n * `source.pipe(connect(selector, { connector: () => new ReplaySubject(size, window, scheduler) }))`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function publishReplay>(\n bufferSize: number | undefined,\n windowTime: number | undefined,\n selector: (shared: Observable) => O,\n timestampProvider?: TimestampProvider\n): OperatorFunction>;\n\n/**\n * Creates a {@link ConnectableObservable} that uses a {@link ReplaySubject}\n * internally.\n *\n * @param bufferSize The buffer size for the underlying {@link ReplaySubject}.\n * @param windowTime The window time for the underlying {@link ReplaySubject}.\n * @param selector Passing `undefined` here determines that this operator will return a {@link ConnectableObservable}.\n * @param timestampProvider The timestamp provider for the underlying {@link ReplaySubject}.\n * @deprecated Will be removed in v8. To create a connectable observable that uses a\n * {@link ReplaySubject} under the hood, use {@link connectable}.\n * `source.pipe(publishReplay(size, time, scheduler))` is equivalent to\n * `connectable(source, { connector: () => new ReplaySubject(size, time, scheduler), resetOnDisconnect: false })`.\n * If you're using {@link refCount} after `publishReplay`, use the {@link share} operator instead.\n * `publishReplay(size, time, scheduler), refCount()` is equivalent to\n * `share({ connector: () => new ReplaySubject(size, time, scheduler), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false })`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function publishReplay>(\n bufferSize: number | undefined,\n windowTime: number | undefined,\n selector: undefined,\n timestampProvider: TimestampProvider\n): OperatorFunction>;\n\n/**\n * @deprecated Will be removed in v8. Use the {@link connectable} observable, the {@link connect} operator or the\n * {@link share} operator instead. See the overloads below for equivalent replacement examples of this operator's\n * behaviors.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function publishReplay(\n bufferSize?: number,\n windowTime?: number,\n selectorOrScheduler?: TimestampProvider | OperatorFunction,\n timestampProvider?: TimestampProvider\n) {\n if (selectorOrScheduler && !isFunction(selectorOrScheduler)) {\n timestampProvider = selectorOrScheduler;\n }\n const selector = isFunction(selectorOrScheduler) ? selectorOrScheduler : undefined;\n // Note, we're passing `selector!` here, because at runtime, `undefined` is an acceptable argument\n // but it makes our TypeScript signature for `multicast` unhappy (as it should, because it's gross).\n return (source: Observable) => multicast(new ReplaySubject(bufferSize, windowTime, timestampProvider), selector!)(source);\n}\n","import { OperatorFunction, ObservableInputTuple } from '../types';\nimport { raceInit } from '../observable/race';\nimport { operate } from '../util/lift';\nimport { identity } from '../util/identity';\n\n/**\n * Creates an Observable that mirrors the first source Observable to emit a next,\n * error or complete notification from the combination of the Observable to which\n * the operator is applied and supplied Observables.\n *\n * ## Example\n *\n * ```ts\n * import { interval } from 'rxjs';\n * import { mapTo, raceWith } from 'rxjs/operators';\n *\n * const obs1 = interval(1000).pipe(mapTo('fast one'));\n * const obs2 = interval(3000).pipe(mapTo('medium one'));\n * const obs3 = interval(5000).pipe(mapTo('slow one'));\n *\n * obs2.pipe(\n * raceWith(obs3, obs1)\n * ).subscribe(\n * winner => console.log(winner)\n * );\n *\n * // Outputs\n * // a series of 'fast one'\n * ```\n *\n * @param otherSources Sources used to race for which Observable emits first.\n * @return A function that returns an Observable that mirrors the output of the\n * first Observable to emit an item.\n */\n\nexport function raceWith(\n ...otherSources: [...ObservableInputTuple]\n): OperatorFunction {\n return !otherSources.length\n ? identity\n : operate((source, subscriber) => {\n raceInit([source, ...otherSources])(subscriber);\n });\n}\n","import { Observable } from '../Observable';\nimport { Subject } from '../Subject';\nimport { Subscription } from '../Subscription';\n\nimport { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Returns an Observable that mirrors the source Observable with the exception of a `complete`. If the source\n * Observable calls `complete`, this method will emit to the Observable returned from `notifier`. If that Observable\n * calls `complete` or `error`, then this method will call `complete` or `error` on the child subscription. Otherwise\n * this method will resubscribe to the source Observable.\n *\n * ![](repeatWhen.png)\n *\n * ## Example\n * Repeat a message stream on click\n * ```ts\n * import { of, fromEvent } from 'rxjs';\n * import { repeatWhen } from 'rxjs/operators';\n *\n * const source = of('Repeat message');\n * const documentClick$ = fromEvent(document, 'click');\n *\n * source.pipe(repeatWhen(() => documentClick$)\n * ).subscribe(data => console.log(data))\n * ```\n * @see {@link repeat}\n * @see {@link retry}\n * @see {@link retryWhen}\n *\n * @param {function(notifications: Observable): Observable} notifier - Receives an Observable of notifications with\n * which a user can `complete` or `error`, aborting the repetition.\n * @return A function that returns an Observable that that mirrors the source\n * Observable with the exception of a `complete`.\n */\nexport function repeatWhen(notifier: (notifications: Observable) => Observable): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let innerSub: Subscription | null;\n let syncResub = false;\n let completions$: Subject;\n let isNotifierComplete = false;\n let isMainComplete = false;\n\n /**\n * Checks to see if we can complete the result, completes it, and returns `true` if it was completed.\n */\n const checkComplete = () => isMainComplete && isNotifierComplete && (subscriber.complete(), true);\n /**\n * Gets the subject to send errors through. If it doesn't exist,\n * we know we need to setup the notifier.\n */\n const getCompletionSubject = () => {\n if (!completions$) {\n completions$ = new Subject();\n\n // If the call to `notifier` throws, it will be caught by the OperatorSubscriber\n // In the main subscription -- in `subscribeForRepeatWhen`.\n notifier(completions$).subscribe(\n new OperatorSubscriber(\n subscriber,\n () => {\n if (innerSub) {\n subscribeForRepeatWhen();\n } else {\n // If we don't have an innerSub yet, that's because the inner subscription\n // call hasn't even returned yet. We've arrived here synchronously.\n // So we flag that we want to resub, such that we can ensure teardown\n // happens before we resubscribe.\n syncResub = true;\n }\n },\n () => {\n isNotifierComplete = true;\n checkComplete();\n }\n )\n );\n }\n return completions$;\n };\n\n const subscribeForRepeatWhen = () => {\n isMainComplete = false;\n\n innerSub = source.subscribe(\n new OperatorSubscriber(subscriber, undefined, () => {\n isMainComplete = true;\n // Check to see if we are complete, and complete if so.\n // If we are not complete. Get the subject. This calls the `notifier` function.\n // If that function fails, it will throw and `.next()` will not be reached on this\n // line. The thrown error is caught by the _complete handler in this\n // `OperatorSubscriber` and handled appropriately.\n !checkComplete() && getCompletionSubject().next();\n })\n );\n\n if (syncResub) {\n // Ensure that the inner subscription is torn down before\n // moving on to the next subscription in the synchronous case.\n // If we don't do this here, all inner subscriptions will not be\n // torn down until the entire observable is done.\n innerSub.unsubscribe();\n // It is important to null this out. Not only to free up memory, but\n // to make sure code above knows we are in a subscribing state to\n // handle synchronous resubscription.\n innerSub = null;\n // We may need to do this multiple times, so reset the flags.\n syncResub = false;\n // Resubscribe\n subscribeForRepeatWhen();\n }\n };\n\n // Start the subscription\n subscribeForRepeatWhen();\n });\n}\n","import { MonoTypeOperatorFunction, ObservableInput } from '../types';\nimport { operate } from '../util/lift';\nimport { Subscription } from '../Subscription';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { identity } from '../util/identity';\nimport { timer } from '../observable/timer';\nimport { innerFrom } from '../observable/innerFrom';\n\nexport interface RetryConfig {\n /**\n * The maximum number of times to retry.\n */\n count?: number;\n /**\n * The number of milliseconds to delay before retrying, OR a function to\n * return a notifier for delaying. If a function is given, that function should\n * return a notifier that, when it emits will retry the source. If the notifier\n * completes _without_ emitting, the resulting observable will complete without error,\n * if the notifier errors, the error will be pushed to the result.\n */\n delay?: number | ((error: any, retryCount: number) => ObservableInput);\n /**\n * Whether or not to reset the retry counter when the retried subscription\n * emits its first value.\n */\n resetOnSuccess?: boolean;\n}\n\n/**\n * Returns an Observable that mirrors the source Observable with the exception of an `error`. If the source Observable\n * calls `error`, this method will resubscribe to the source Observable for a maximum of `count` resubscriptions (given\n * as a number parameter) rather than propagating the `error` call.\n *\n * ![](retry.png)\n *\n * Any and all items emitted by the source Observable will be emitted by the resulting Observable, even those emitted\n * during failed subscriptions. For example, if an Observable fails at first but emits [1, 2] then succeeds the second\n * time and emits: [1, 2, 3, 4, 5] then the complete stream of emissions and notifications\n * would be: [1, 2, 1, 2, 3, 4, 5, `complete`].\n *\n * ## Example\n * ```ts\n * import { interval, of, throwError } from 'rxjs';\n * import { mergeMap, retry } from 'rxjs/operators';\n *\n * const source = interval(1000);\n * const example = source.pipe(\n * mergeMap(val => {\n * if(val > 5){\n * return throwError('Error!');\n * }\n * return of(val);\n * }),\n * //retry 2 times on error\n * retry(2)\n * );\n *\n * const subscribe = example.subscribe({\n * next: val => console.log(val),\n * error: val => console.log(`${val}: Retried 2 times then quit!`)\n * });\n *\n * // Output:\n * // 0..1..2..3..4..5..\n * // 0..1..2..3..4..5..\n * // 0..1..2..3..4..5..\n * // \"Error!: Retried 2 times then quit!\"\n * ```\n *\n * @param count - Number of retry attempts before failing.\n * @param resetOnSuccess - When set to `true` every successful emission will reset the error count\n * @return A function that returns an Observable that will resubscribe to the\n * source stream when the source stream errors, at most `count` times.\n */\nexport function retry(count?: number): MonoTypeOperatorFunction;\n\n/**\n * Returns an observable that mirrors the source observable unless it errors. If it errors, the source observable\n * will be resubscribed to (or \"retried\") based on the configuration passed here. See documentation\n * for {@link RetryConfig} for more details.\n *\n * @param config - The retry configuration\n */\nexport function retry(config: RetryConfig): MonoTypeOperatorFunction;\n\nexport function retry(configOrCount: number | RetryConfig = Infinity): MonoTypeOperatorFunction {\n let config: RetryConfig;\n if (configOrCount && typeof configOrCount === 'object') {\n config = configOrCount;\n } else {\n config = {\n count: configOrCount,\n };\n }\n const { count = Infinity, delay, resetOnSuccess: resetOnSuccess = false } = config;\n\n return count <= 0\n ? identity\n : operate((source, subscriber) => {\n let soFar = 0;\n let innerSub: Subscription | null;\n const subscribeForRetry = () => {\n let syncUnsub = false;\n innerSub = source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n // If we're resetting on success\n if (resetOnSuccess) {\n soFar = 0;\n }\n subscriber.next(value);\n },\n // Completions are passed through to consumer.\n undefined,\n (err) => {\n if (soFar++ < count) {\n // We are still under our retry count\n const resub = () => {\n if (innerSub) {\n innerSub.unsubscribe();\n innerSub = null;\n subscribeForRetry();\n } else {\n syncUnsub = true;\n }\n };\n\n if (delay != null) {\n // The user specified a retry delay.\n // They gave us a number, use a timer, otherwise, it's a function,\n // and we're going to call it to get a notifier.\n const notifier = typeof delay === 'number' ? timer(delay) : innerFrom(delay(err, soFar));\n const notifierSubscriber = new OperatorSubscriber(\n subscriber,\n () => {\n // After we get the first notification, we\n // unsubscribe from the notifer, because we don't want anymore\n // and we resubscribe to the source.\n notifierSubscriber.unsubscribe();\n resub();\n },\n () => {\n // The notifier completed without emitting.\n // The author is telling us they want to complete.\n subscriber.complete();\n }\n );\n notifier.subscribe(notifierSubscriber);\n } else {\n // There was no notifier given. Just resub immediately.\n resub();\n }\n } else {\n // We're past our maximum number of retries.\n // Just send along the error.\n subscriber.error(err);\n }\n }\n )\n );\n if (syncUnsub) {\n innerSub.unsubscribe();\n innerSub = null;\n subscribeForRetry();\n }\n };\n subscribeForRetry();\n });\n}\n","import { Observable } from '../Observable';\nimport { Subject } from '../Subject';\nimport { Subscription } from '../Subscription';\n\nimport { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Returns an Observable that mirrors the source Observable with the exception of an `error`. If the source Observable\n * calls `error`, this method will emit the Throwable that caused the error to the Observable returned from `notifier`.\n * If that Observable calls `complete` or `error` then this method will call `complete` or `error` on the child\n * subscription. Otherwise this method will resubscribe to the source Observable.\n *\n * ![](retryWhen.png)\n *\n * Retry an observable sequence on error based on custom criteria.\n *\n * ## Example\n * ```ts\n * import { timer, interval } from 'rxjs';\n * import { map, tap, retryWhen, delayWhen } from 'rxjs/operators';\n *\n * const source = interval(1000);\n * const example = source.pipe(\n * map(val => {\n * if (val > 5) {\n * // error will be picked up by retryWhen\n * throw val;\n * }\n * return val;\n * }),\n * retryWhen(errors =>\n * errors.pipe(\n * // log error message\n * tap(val => console.log(`Value ${val} was too high!`)),\n * // restart in 5 seconds\n * delayWhen(val => timer(val * 1000))\n * )\n * )\n * );\n *\n * const subscribe = example.subscribe(val => console.log(val));\n *\n * // results:\n * // 0\n * // 1\n * // 2\n * // 3\n * // 4\n * // 5\n * // \"Value 6 was too high!\"\n * // --Wait 5 seconds then repeat\n * ```\n *\n * @param {function(errors: Observable): Observable} notifier - Receives an Observable of notifications with which a\n * user can `complete` or `error`, aborting the retry.\n * @return A function that returns an Observable that mirrors the source\n * Observable with the exception of an `error`.\n */\nexport function retryWhen(notifier: (errors: Observable) => Observable): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let innerSub: Subscription | null;\n let syncResub = false;\n let errors$: Subject;\n\n const subscribeForRetryWhen = () => {\n innerSub = source.subscribe(\n new OperatorSubscriber(subscriber, undefined, undefined, (err) => {\n if (!errors$) {\n errors$ = new Subject();\n notifier(errors$).subscribe(\n new OperatorSubscriber(subscriber, () =>\n // If we have an innerSub, this was an asynchronous call, kick off the retry.\n // Otherwise, if we don't have an innerSub yet, that's because the inner subscription\n // call hasn't even returned yet. We've arrived here synchronously.\n // So we flag that we want to resub, such that we can ensure teardown\n // happens before we resubscribe.\n innerSub ? subscribeForRetryWhen() : (syncResub = true)\n )\n );\n }\n if (errors$) {\n // We have set up the notifier without error.\n errors$.next(err);\n }\n })\n );\n\n if (syncResub) {\n // Ensure that the inner subscription is torn down before\n // moving on to the next subscription in the synchronous case.\n // If we don't do this here, all inner subscriptions will not be\n // torn down until the entire observable is done.\n innerSub.unsubscribe();\n innerSub = null;\n // We may need to do this multiple times, so reset the flag.\n syncResub = false;\n // Resubscribe\n subscribeForRetryWhen();\n }\n };\n\n // Start the subscription\n subscribeForRetryWhen();\n });\n}\n","import { Observable } from '../Observable';\nimport { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { noop } from '../util/noop';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Emits the most recently emitted value from the source Observable whenever\n * another Observable, the `notifier`, emits.\n *\n * It's like {@link sampleTime}, but samples whenever\n * the `notifier` Observable emits something.\n *\n * ![](sample.png)\n *\n * Whenever the `notifier` Observable emits a value, `sample`\n * looks at the source Observable and emits whichever value it has most recently\n * emitted since the previous sampling, unless the source has not emitted\n * anything since the previous sampling. The `notifier` is subscribed to as soon\n * as the output Observable is subscribed.\n *\n * ## Example\n * On every click, sample the most recent \"seconds\" timer\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { sample } from 'rxjs/operators';\n *\n * const seconds = interval(1000);\n * const clicks = fromEvent(document, 'click');\n * const result = seconds.pipe(sample(clicks));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link audit}\n * @see {@link debounce}\n * @see {@link sampleTime}\n * @see {@link throttle}\n *\n * @param notifier The Observable to use for sampling the\n * source Observable.\n * @return A function that returns an Observable that emits the results of\n * sampling the values emitted by the source Observable whenever the notifier\n * Observable emits value or completes.\n */\nexport function sample(notifier: Observable): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let hasValue = false;\n let lastValue: T | null = null;\n source.subscribe(\n new OperatorSubscriber(subscriber, (value) => {\n hasValue = true;\n lastValue = value;\n })\n );\n const emit = () => {\n if (hasValue) {\n hasValue = false;\n const value = lastValue!;\n lastValue = null;\n subscriber.next(value);\n }\n };\n notifier.subscribe(new OperatorSubscriber(subscriber, emit, noop));\n });\n}\n","import { asyncScheduler } from '../scheduler/async';\nimport { MonoTypeOperatorFunction, SchedulerLike } from '../types';\nimport { sample } from './sample';\nimport { interval } from '../observable/interval';\n\n/**\n * Emits the most recently emitted value from the source Observable within\n * periodic time intervals.\n *\n * Samples the source Observable at periodic time\n * intervals, emitting what it samples.\n *\n * ![](sampleTime.png)\n *\n * `sampleTime` periodically looks at the source Observable and emits whichever\n * value it has most recently emitted since the previous sampling, unless the\n * source has not emitted anything since the previous sampling. The sampling\n * happens periodically in time every `period` milliseconds (or the time unit\n * defined by the optional `scheduler` argument). The sampling starts as soon as\n * the output Observable is subscribed.\n *\n * ## Example\n * Every second, emit the most recent click at most once\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { sampleTime } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(sampleTime(1000));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link auditTime}\n * @see {@link debounceTime}\n * @see {@link delay}\n * @see {@link sample}\n * @see {@link throttleTime}\n *\n * @param {number} period The sampling period expressed in milliseconds or the\n * time unit determined internally by the optional `scheduler`.\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for\n * managing the timers that handle the sampling.\n * @return A function that returns an Observable that emits the results of\n * sampling the values emitted by the source Observable at the specified time\n * interval.\n */\nexport function sampleTime(period: number, scheduler: SchedulerLike = asyncScheduler): MonoTypeOperatorFunction {\n return sample(interval(period, scheduler));\n}\n","import { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { scanInternals } from './scanInternals';\n\nexport function scan(accumulator: (acc: A | V, value: V, index: number) => A): OperatorFunction;\nexport function scan(accumulator: (acc: A, value: V, index: number) => A, seed: A): OperatorFunction;\nexport function scan(accumulator: (acc: A | S, value: V, index: number) => A, seed: S): OperatorFunction;\n\n// TODO: link to a \"redux pattern\" section in the guide (location TBD)\n\n/**\n * Useful for encapsulating and managing state. Applies an accumulator (or \"reducer function\")\n * to each value from the source after an initial state is established -- either via\n * a `seed` value (second argument), or from the first value from the source.\n *\n * It's like {@link reduce}, but emits the current\n * accumulation state after each update\n *\n * ![](scan.png)\n *\n * This operator maintains an internal state and emits it after processing each value as follows:\n *\n * 1. First value arrives\n * - If a `seed` value was supplied (as the second argument to `scan`), let `state = seed` and `value = firstValue`.\n * - If NO `seed` value was supplied (no second argument), let `state = firstValue` and go to 3.\n * 2. Let `state = accumulator(state, value)`.\n * - If an error is thrown by `accumulator`, notify the consumer of an error. The process ends.\n * 3. Emit `state`.\n * 4. Next value arrives, let `value = nextValue`, go to 2.\n *\n * ## Example\n *\n * An average of previous numbers. This example shows how\n * not providing a `seed` can prime the stream with the\n * first value from the source.\n *\n * ```ts\n * import { interval, of } from 'rxjs';\n * import { scan, map } from 'rxjs/operators';\n *\n * const numbers$ = of(1, 2, 3);\n *\n * numbers$\n * .pipe(\n * // Get the sum of the numbers coming in.\n * scan((total, n) => total + n),\n * // Get the average by dividing the sum by the total number\n * // received so var (which is 1 more than the zero-based index).\n * map((sum, index) => sum / (index + 1))\n * )\n * .subscribe(console.log);\n * ```\n *\n * ## Example\n *\n * The Fibonacci sequence. This example shows how you can use\n * a seed to prime accumulation process. Also... you know... Fibinacci.\n * So important to like, computers and stuff that its whiteboarded\n * in job interviews. Now you can show them the Rx version! (Please don't, haha)\n *\n * ```ts\n * import { interval } from 'rxjs';\n * import { scan, map, startWith } from 'rxjs/operators';\n *\n * const firstTwoFibs = [0, 1];\n * // An endless stream of Fibonnaci numbers.\n * const fibonnaci$ = interval(1000).pipe(\n * // Scan to get the fibonnaci numbers (after 0, 1)\n * scan(([a, b]) => [b, a + b], firstTwoFibs),\n * // Get the second number in the tuple, it's the one you calculated\n * map(([, n]) => n),\n * // Start with our first two digits :)\n * startWith(...firstTwoFibs)\n * );\n *\n * fibonnaci$.subscribe(console.log);\n * ```\n *\n *\n * @see {@link expand}\n * @see {@link mergeScan}\n * @see {@link reduce}\n * @see {@link switchScan}\n *\n * @param accumulator A \"reducer function\". This will be called for each value after an initial state is\n * acquired.\n * @param seed The initial state. If this is not provided, the first value from the source will\n * be used as the initial state, and emitted without going through the accumulator. All subsequent values\n * will be processed by the accumulator function. If this is provided, all values will go through\n * the accumulator function.\n * @return A function that returns an Observable of the accumulated values.\n */\nexport function scan(accumulator: (acc: V | A | S, value: V, index: number) => A, seed?: S): OperatorFunction {\n // providing a seed of `undefined` *should* be valid and trigger\n // hasSeed! so don't use `seed !== undefined` checks!\n // For this reason, we have to check it here at the original call site\n // otherwise inside Operator/Subscriber we won't know if `undefined`\n // means they didn't provide anything or if they literally provided `undefined`\n return operate(scanInternals(accumulator, seed as S, arguments.length >= 2, true));\n}\n","import { Observable } from '../Observable';\n\nimport { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Compares all values of two observables in sequence using an optional comparator function\n * and returns an observable of a single boolean value representing whether or not the two sequences\n * are equal.\n *\n * Checks to see of all values emitted by both observables are equal, in order.\n *\n * ![](sequenceEqual.png)\n *\n * `sequenceEqual` subscribes to two observables and buffers incoming values from each observable. Whenever either\n * observable emits a value, the value is buffered and the buffers are shifted and compared from the bottom\n * up; If any value pair doesn't match, the returned observable will emit `false` and complete. If one of the\n * observables completes, the operator will wait for the other observable to complete; If the other\n * observable emits before completing, the returned observable will emit `false` and complete. If one observable never\n * completes or emits after the other completes, the returned observable will never complete.\n *\n * ## Example\n * figure out if the Konami code matches\n * ```ts\n * import { from, fromEvent } from 'rxjs';\n * import { sequenceEqual, bufferCount, mergeMap, map } from 'rxjs/operators';\n *\n * const codes = from([\n * 'ArrowUp',\n * 'ArrowUp',\n * 'ArrowDown',\n * 'ArrowDown',\n * 'ArrowLeft',\n * 'ArrowRight',\n * 'ArrowLeft',\n * 'ArrowRight',\n * 'KeyB',\n * 'KeyA',\n * 'Enter', // no start key, clearly.\n * ]);\n *\n * const keys = fromEvent(document, 'keyup').pipe(map(e => e.code));\n * const matches = keys.pipe(\n * bufferCount(11, 1),\n * mergeMap(\n * last11 => from(last11).pipe(sequenceEqual(codes)),\n * ),\n * );\n * matches.subscribe(matched => console.log('Successful cheat at Contra? ', matched));\n * ```\n *\n * @see {@link combineLatest}\n * @see {@link zip}\n * @see {@link withLatestFrom}\n *\n * @param {Observable} compareTo The observable sequence to compare the source sequence to.\n * @param {function} [comparator] An optional function to compare each value pair\n * @return A function that returns an Observable that emits a single boolean\n * value representing whether or not the values emitted by the source\n * Observable and provided Observable were equal in sequence.\n */\nexport function sequenceEqual(\n compareTo: Observable,\n comparator: (a: T, b: T) => boolean = (a, b) => a === b\n): OperatorFunction {\n return operate((source, subscriber) => {\n // The state for the source observable\n const aState = createState();\n // The state for the compareTo observable;\n const bState = createState();\n\n /** A utility to emit and complete */\n const emit = (isEqual: boolean) => {\n subscriber.next(isEqual);\n subscriber.complete();\n };\n\n /**\n * Creates a subscriber that subscribes to one of the sources, and compares its collected\n * state -- `selfState` -- to the other source's collected state -- `otherState`. This\n * is used for both streams.\n */\n const createSubscriber = (selfState: SequenceState, otherState: SequenceState) => {\n const sequenceEqualSubscriber = new OperatorSubscriber(\n subscriber,\n (a: T) => {\n const { buffer, complete } = otherState;\n if (buffer.length === 0) {\n // If there's no values in the other buffer\n // and the other stream is complete, we know\n // this isn't a match, because we got one more value.\n // Otherwise, we push onto our buffer, so when the other\n // stream emits, it can pull this value off our buffer and check it\n // at the appropriate time.\n complete ? emit(false) : selfState.buffer.push(a);\n } else {\n // If the other stream *does* have values in it's buffer,\n // pull the oldest one off so we can compare it to what we\n // just got. If it wasn't a match, emit `false` and complete.\n !comparator(a, buffer.shift()!) && emit(false);\n }\n },\n () => {\n // Or observable completed\n selfState.complete = true;\n const { complete, buffer } = otherState;\n // If the other observable is also complete, and there's\n // still stuff left in their buffer, it doesn't match, if their\n // buffer is empty, then it does match. This is because we can't\n // possibly get more values here anymore.\n complete && emit(buffer.length === 0);\n // Be sure to clean up our stream as soon as possible if we can.\n sequenceEqualSubscriber?.unsubscribe();\n }\n );\n\n return sequenceEqualSubscriber;\n };\n\n // Subscribe to each source.\n source.subscribe(createSubscriber(aState, bState));\n compareTo.subscribe(createSubscriber(bState, aState));\n });\n}\n\n/**\n * A simple structure for the data used to test each sequence\n */\ninterface SequenceState {\n /** A temporary store for arrived values before they are checked */\n buffer: T[];\n /** Whether or not the sequence source has completed. */\n complete: boolean;\n}\n\n/**\n * Creates a simple structure that is used to represent\n * data used to test each sequence.\n */\nfunction createState(): SequenceState {\n return {\n buffer: [],\n complete: false,\n };\n}\n","import { Observable } from '../Observable';\nimport { EmptyError } from '../util/EmptyError';\n\nimport { MonoTypeOperatorFunction, OperatorFunction, TruthyTypesOf } from '../types';\nimport { SequenceError } from '../util/SequenceError';\nimport { NotFoundError } from '../util/NotFoundError';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\nexport function single(predicate: BooleanConstructor): OperatorFunction>;\nexport function single(predicate?: (value: T, index: number, source: Observable) => boolean): MonoTypeOperatorFunction;\n\n/**\n * Returns an observable that asserts that only one value is\n * emitted from the observable that matches the predicate. If no\n * predicate is provided, then it will assert that the observable\n * only emits one value.\n *\n * In the event that the observable is empty, it will throw an\n * {@link EmptyError}.\n *\n * In the event that two values are found that match the predicate,\n * or when there are two values emitted and no predicate, it will\n * throw a {@link SequenceError}\n *\n * In the event that no values match the predicate, if one is provided,\n * it will throw a {@link NotFoundError}\n *\n * ## Example\n *\n * Expect only name beginning with 'B':\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { single } from 'rxjs/operators';\n *\n * const source1 = of(\n * { name: 'Ben' },\n * { name: 'Tracy' },\n * { name: 'Laney' },\n * { name: 'Lily' }\n * );\n *\n * source1.pipe(\n * single(x => x.name.startsWith('B'))\n * )\n * .subscribe(x => console.log(x));\n * // Emits \"Ben\"\n *\n *\n * const source2 = of(\n * { name: 'Ben' },\n * { name: 'Tracy' },\n * { name: 'Bradley' },\n * { name: 'Lincoln' }\n * );\n *\n * source2.pipe(\n * single(x => x.name.startsWith('B'))\n * )\n * .subscribe(x => console.log(x));\n * // Error emitted: SequenceError('Too many values match')\n *\n *\n * const source3 = of(\n * { name: 'Laney' },\n * { name: 'Tracy' },\n * { name: 'Lily' },\n * { name: 'Lincoln' }\n * );\n *\n * source3.pipe(\n * single(x => x.name.startsWith('B'))\n * )\n * .subscribe(x => console.log(x));\n * // Error emitted: NotFoundError('No values match')\n * ```\n *\n * @see {@link first}\n * @see {@link find}\n * @see {@link findIndex}\n * @see {@link elementAt}\n *\n * @throws {NotFoundError} Delivers an NotFoundError to the Observer's `error`\n * callback if the Observable completes before any `next` notification was sent.\n * @throws {SequenceError} Delivers a SequenceError if more than one value is emitted that matches the\n * provided predicate. If no predicate is provided, will deliver a SequenceError if more\n * that one value comes from the source\n * @param {Function} predicate - A predicate function to evaluate items emitted by the source Observable.\n * @return A function that returns an Observable that emits the single item\n * emitted by the source Observable that matches the predicate.\n */\nexport function single(predicate?: (value: T, index: number, source: Observable) => boolean): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let hasValue = false;\n let singleValue: T;\n let seenValue = false;\n let index = 0;\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n seenValue = true;\n if (!predicate || predicate(value, index++, source)) {\n hasValue && subscriber.error(new SequenceError('Too many matching values'));\n hasValue = true;\n singleValue = value;\n }\n },\n () => {\n if (hasValue) {\n subscriber.next(singleValue);\n subscriber.complete();\n } else {\n subscriber.error(seenValue ? new NotFoundError('No matching values') : new EmptyError());\n }\n }\n )\n );\n });\n}\n","import { MonoTypeOperatorFunction } from '../types';\nimport { identity } from '../util/identity';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Skip a specified number of values before the completion of an observable.\n *\n * ![](skipLast.png)\n *\n * Returns an observable that will emit values as soon as it can, given a number of\n * skipped values. For example, if you `skipLast(3)` on a source, when the source\n * emits its fourth value, the first value the source emitted will finally be emitted\n * from the returned observable, as it is no longer part of what needs to be skipped.\n *\n * All values emitted by the result of `skipLast(N)` will be delayed by `N` emissions,\n * as each value is held in a buffer until enough values have been emitted that that\n * the buffered value may finally be sent to the consumer.\n *\n * After subscribing, unsubscribing will not result in the emission of the buffered\n * skipped values.\n *\n * ## Example\n *\n * Skip the last 2 values of an observable with many values\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { skipLast } from 'rxjs/operators';\n *\n * const numbers = of(1, 2, 3, 4, 5);\n * const skipLastTwo = numbers.pipe(skipLast(2));\n * skipLastTwo.subscribe(x => console.log(x));\n *\n * // Results in:\n * // 1 2 3\n * // (4 and 5 are skipped)\n * ```\n *\n * @see {@link skip}\n * @see {@link skipUntil}\n * @see {@link skipWhile}\n * @see {@link take}\n *\n * @param skipCount Number of elements to skip from the end of the source Observable.\n * @return A function that returns an Observable that skips the last `count`\n * values emitted by the source Observable.\n */\nexport function skipLast(skipCount: number): MonoTypeOperatorFunction {\n return skipCount <= 0\n ? // For skipCounts less than or equal to zero, we are just mirroring the source.\n identity\n : operate((source, subscriber) => {\n // A ring buffer to hold the values while we wait to see\n // if we can emit it or it's part of the \"skipped\" last values.\n // Note that it is the _same size_ as the skip count.\n let ring: T[] = new Array(skipCount);\n // The number of values seen so far. This is used to get\n // the index of the current value when it arrives.\n let seen = 0;\n source.subscribe(\n new OperatorSubscriber(subscriber, (value) => {\n // Get the index of the value we have right now\n // relative to all other values we've seen, then\n // increment `seen`. This ensures we've moved to\n // the next slot in our ring buffer.\n const valueIndex = seen++;\n if (valueIndex < skipCount) {\n // If we haven't seen enough values to fill our buffer yet,\n // Then we aren't to a number of seen values where we can\n // emit anything, so let's just start by filling the ring buffer.\n ring[valueIndex] = value;\n } else {\n // We are traversing over the ring array in such\n // a way that when we get to the end, we loop back\n // and go to the start.\n const index = valueIndex % skipCount;\n // Pull the oldest value out so we can emit it,\n // and stuff the new value in it's place.\n const oldValue = ring[index];\n ring[index] = value;\n // Emit the old value. It is important that this happens\n // after we swap the value in the buffer, if it happens\n // before we swap the value in the buffer, then a synchronous\n // source can get the buffer out of whack.\n subscriber.next(oldValue);\n }\n })\n );\n\n return () => {\n // Release our values in memory\n ring = null!;\n };\n });\n}\n","import { Observable } from '../Observable';\nimport { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { noop } from '../util/noop';\n\n/**\n * Returns an Observable that skips items emitted by the source Observable until a second Observable emits an item.\n *\n * The `skipUntil` operator causes the observable stream to skip the emission of values ​​until the passed in observable emits the first value.\n * This can be particularly useful in combination with user interactions, responses of http requests or waiting for specific times to pass by.\n *\n * ![](skipUntil.png)\n *\n * Internally the `skipUntil` operator subscribes to the passed in observable (in the following called *notifier*) in order to recognize the emission\n * of its first value. When this happens, the operator unsubscribes from the *notifier* and starts emitting the values of the *source*\n * observable. It will never let the *source* observable emit any values if the *notifier* completes or throws an error without emitting\n * a value before.\n *\n * ## Example\n *\n * In the following example, all emitted values ​​of the interval observable are skipped until the user clicks anywhere within the page.\n *\n * ```ts\n * import { interval, fromEvent } from 'rxjs';\n * import { skipUntil } from 'rxjs/operators';\n *\n * const intervalObservable = interval(1000);\n * const click = fromEvent(document, 'click');\n *\n * const emitAfterClick = intervalObservable.pipe(\n * skipUntil(click)\n * );\n * // clicked at 4.6s. output: 5...6...7...8........ or\n * // clicked at 7.3s. output: 8...9...10..11.......\n * const subscribe = emitAfterClick.subscribe(value => console.log(value));\n * ```\n *\n * @param {Observable} notifier - The second Observable that has to emit an item before the source Observable's elements begin to\n * be mirrored by the resulting Observable.\n * @return A function that returns an Observable that skips items from the\n * source Observable until the second Observable emits an item, then emits the\n * remaining items.\n */\nexport function skipUntil(notifier: Observable): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let taking = false;\n\n const skipSubscriber = new OperatorSubscriber(\n subscriber,\n () => {\n skipSubscriber?.unsubscribe();\n taking = true;\n },\n noop\n );\n\n innerFrom(notifier).subscribe(skipSubscriber);\n\n source.subscribe(new OperatorSubscriber(subscriber, (value) => taking && subscriber.next(value)));\n });\n}\n","import { OperatorFunction, ObservableInput, ObservedValueOf } from '../types';\nimport { switchMap } from './switchMap';\nimport { identity } from '../util/identity';\n\n/**\n * Converts a higher-order Observable into a first-order Observable\n * producing values only from the most recent observable sequence\n *\n * Flattens an Observable-of-Observables.\n *\n * ![](switchAll.png)\n *\n * `switchAll` subscribes to a source that is an observable of observables, also known as a\n * \"higher-order observable\" (or `Observable>`). It subscribes to the most recently\n * provided \"inner observable\" emitted by the source, unsubscribing from any previously subscribed\n * to inner observable, such that only the most recent inner observable may be subscribed to at\n * any point in time. The resulting observable returned by `switchAll` will only complete if the\n * source observable completes, *and* any currently subscribed to inner observable also has completed,\n * if there are any.\n *\n * ## Examples\n * Spawn a new interval observable for each click event, but for every new\n * click, cancel the previous interval and subscribe to the new one.\n *\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { switchAll, map, tap } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click').pipe(tap(() => console.log('click')));\n * const source = clicks.pipe(map((ev) => interval(1000)));\n *\n * source.pipe(\n * switchAll()\n * ).subscribe(x => console.log(x));\n *\n * // Output\n * // click\n * // 0\n * // 1\n * // 2\n * // 3\n * // ...\n * // click\n * // 0\n * // 1\n * // 2\n * // ...\n * // click\n * // ...\n * ```\n *\n * @see {@link combineLatestAll}\n * @see {@link concatAll}\n * @see {@link exhaustAll}\n * @see {@link switchMap}\n * @see {@link switchMapTo}\n * @see {@link mergeAll}\n *\n * @return A function that returns an Observable that converts a higher-order\n * Observable into a first-order Observable producing values only from the most\n * recent Observable sequence.\n */\n\nexport function switchAll>(): OperatorFunction> {\n return switchMap(identity);\n}\n","import { ObservableInput, ObservedValueOf, OperatorFunction } from '../types';\nimport { switchMap } from './switchMap';\nimport { operate } from '../util/lift';\n\n// TODO: Generate a marble diagram for these docs.\n\n/**\n * Applies an accumulator function over the source Observable where the\n * accumulator function itself returns an Observable, emitting values\n * only from the most recently returned Observable.\n *\n * It's like {@link mergeScan}, but only the most recent\n * Observable returned by the accumulator is merged into the outer Observable.\n *\n * @see {@link scan}\n * @see {@link mergeScan}\n * @see {@link switchMap}\n *\n * @param accumulator\n * The accumulator function called on each source value.\n * @param seed The initial accumulation value.\n * @return A function that returns an observable of the accumulated values.\n */\nexport function switchScan>(\n accumulator: (acc: R, value: T, index: number) => O,\n seed: R\n): OperatorFunction> {\n return operate((source, subscriber) => {\n // The state we will keep up to date to pass into our\n // accumulator function at each new value from the source.\n let state = seed;\n\n // Use `switchMap` on our `source` to do the work of creating\n // this operator. Note the backwards order here of `switchMap()(source)`\n // to avoid needing to use `pipe` unnecessarily\n switchMap(\n // On each value from the source, call the accumulator with\n // our previous state, the value and the index.\n (value: T, index) => accumulator(state, value, index),\n // Using the deprecated result selector here as a dirty trick\n // to update our state with the flattened value.\n (_, innerValue) => ((state = innerValue), innerValue)\n )(source).subscribe(subscriber);\n\n return () => {\n // Release state on teardown\n state = null!;\n };\n });\n}\n","import { Observable } from '../Observable';\nimport { async } from '../scheduler/async';\nimport { SchedulerLike, OperatorFunction } from '../types';\nimport { scan } from './scan';\nimport { defer } from '../observable/defer';\nimport { map } from './map';\n\n/**\n *\n * Emits an object containing the current value, and the time that has\n * passed between emitting the current value and the previous value, which is\n * calculated by using the provided `scheduler`'s `now()` method to retrieve\n * the current time at each emission, then calculating the difference. The `scheduler`\n * defaults to {@link asyncScheduler}, so by default, the `interval` will be in\n * milliseconds.\n *\n * Convert an Observable that emits items into one that\n * emits indications of the amount of time elapsed between those emissions.\n *\n * ![](timeInterval.png)\n *\n * ## Examples\n * Emit interval between current value with the last value\n *\n * ```ts\n * import { interval } from \"rxjs\";\n * import { timeInterval, timeout } from \"rxjs/operators\";\n *\n * const seconds = interval(1000);\n *\n * seconds.pipe(timeInterval())\n * .subscribe({\n * next: value => console.log(value),\n * error: err => console.log(err),\n * });\n *\n * seconds.pipe(timeout(900))\n * .subscribe({\n * next: value => console.log(value),\n * error: err => console.log(err),\n * });\n *\n * // NOTE: The values will never be this precise,\n * // intervals created with `interval` or `setInterval`\n * // are non-deterministic.\n *\n * // {value: 0, interval: 1000}\n * // {value: 1, interval: 1000}\n * // {value: 2, interval: 1000}\n * ```\n *\n * @param {SchedulerLike} [scheduler] Scheduler used to get the current time.\n * @return A function that returns an Observable that emits information about\n * value and interval.\n */\nexport function timeInterval(scheduler: SchedulerLike = async): OperatorFunction> {\n return (source: Observable) =>\n defer(() => {\n return source.pipe(\n // TODO(benlesh): correct these typings.\n scan(({ current }, value) => ({ value, current: scheduler.now(), last: current }), {\n current: scheduler.now(),\n value: undefined,\n last: undefined,\n } as any) as OperatorFunction,\n map>(({ current, last, value }) => new TimeInterval(value, current - last))\n );\n });\n}\n\n// TODO(benlesh): make this an interface, export the interface, but not the implemented class,\n// there's no reason users should be manually creating this type.\n\nexport class TimeInterval {\n /**\n * @deprecated Internal implementation detail, do not construct directly. Will be made an interface in v8.\n */\n constructor(public value: T, public interval: number) {}\n}\n","import { async } from '../scheduler/async';\nimport { isValidDate } from '../util/isDate';\nimport { ObservableInput, OperatorFunction, SchedulerLike } from '../types';\nimport { timeout } from './timeout';\n\n/**\n * If the time of the Date object passed arrives before the first value arrives from the source, it will unsubscribe\n * from the source and switch the subscription to another observable.\n *\n * Use to switch to a different observable if the first value doesn't arrive by a specific time\n *\n * Can be used to set a timeout only for the first value, however it's recommended to use the {@link timeout} operator with\n * the `first` configuration to get that effect.\n *\n * @param dueBy The exact time, as a `Date`, at which the timeout will be triggered if the first value does not arrive.\n * @param switchTo The observable to switch to when timeout occurs.\n * @param scheduler The scheduler to use with time-related operations within this operator. Defaults to {@link asyncScheduler}\n * @deprecated Replaced with {@link timeout}. Instead of `timeoutWith(someDate, a$, scheduler)`, use the configuration object `timeout({ first: someDate, with: () => a$, scheduler })`. Will be removed in v8.\n */\nexport function timeoutWith(dueBy: Date, switchTo: ObservableInput, scheduler?: SchedulerLike): OperatorFunction;\n\n/**\n * When the passed timespan ellapses before the source emits any given value, it will unsubscribe from the source,\n * and switch the subscription to another observable.\n *\n * Used to switch to a different observable if your source is being slow\n *\n * Useful in cases where:\n *\n * - You want to switch to a different source that may be faster\n * - You want to notify a user that the data stream is slow\n * - You want to emit a custom error rather than the {@link TimeoutError} emitted\n * by the default usage of {@link timeout}.\n *\n * ## Example\n *\n * Fallback to a faster observable\n *\n * ```ts\n * import { interval } from 'rxjs';\n * import { timeoutWith } from 'rxjs/operators';\n *\n * const slow$ = interval(1000);\n * const faster$ = interval(500);\n *\n * slow$.pipe(\n * timeoutWith(900, faster$)\n * )\n * .subscribe(console.log)\n * ```\n *\n * ### Example\n *\n * Emit your own custom timeout error\n *\n * ```ts\n * import { interval, throwError } from 'rxjs';\n * import { timeoutWith } from 'rxjs/operators';\n *\n * class CustomTimeoutError extends Error {\n * constructor() {\n * super('It was too slow');\n * this.name = 'CustomTimeoutError';\n * }\n * }\n *\n * const slow = interval(1000);\n *\n * slow$.pipe(\n * timeoutWith(900, throwError(new CustomTimeoutError()))\n * )\n * .subscribe({\n * error: console.error\n * })\n * ```\n * @param waitFor The time allowed between values from the source before timeout is triggered.\n * @param switchTo The observable to switch to when timeout occurs.\n * @param scheduler The scheduler to use with time-related operations within this operator. Defaults to {@link asyncScheduler}\n * @return A function that returns an Observable that mirrors behaviour of the\n * source Observable, unless timeout happens when it starts emitting values\n * from the Observable passed as a second parameter.\n * @deprecated Replaced with {@link timeout}. Instead of `timeoutWith(100, a$, scheduler)`, use the configuration object `timeout({ each: 100, with: () => a$, scheduler })`. Will be removed in v8.\n */\nexport function timeoutWith(waitFor: number, switchTo: ObservableInput, scheduler?: SchedulerLike): OperatorFunction;\n\nexport function timeoutWith(\n due: number | Date,\n withObservable: ObservableInput,\n scheduler?: SchedulerLike\n): OperatorFunction {\n let first: number | Date | undefined;\n let each: number | undefined;\n let _with: () => ObservableInput;\n scheduler = scheduler ?? async;\n\n if (isValidDate(due)) {\n first = due;\n } else if (typeof due === 'number') {\n each = due;\n }\n\n if (withObservable) {\n _with = () => withObservable;\n } else {\n throw new TypeError('No observable provided to switch to');\n }\n\n if (first == null && each == null) {\n // Ensure timeout was provided at runtime.\n throw new TypeError('No timeout provided.');\n }\n\n return timeout>({\n first,\n each,\n scheduler,\n with: _with,\n });\n}\n","import { OperatorFunction, TimestampProvider, Timestamp } from '../types';\nimport { dateTimestampProvider } from '../scheduler/dateTimestampProvider';\nimport { map } from './map';\n\n/**\n * Attaches a timestamp to each item emitted by an observable indicating when it was emitted\n *\n * The `timestamp` operator maps the *source* observable stream to an object of type\n * `{value: T, timestamp: R}`. The properties are generically typed. The `value` property contains the value\n * and type of the *source* observable. The `timestamp` is generated by the schedulers `now` function. By\n * default it uses the *async* scheduler which simply returns `Date.now()` (milliseconds since 1970/01/01\n * 00:00:00:000) and therefore is of type `number`.\n *\n * ![](timestamp.png)\n *\n * ## Example\n *\n * In this example there is a timestamp attached to the documents click event.\n *\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { timestamp } from 'rxjs/operators';\n *\n * const clickWithTimestamp = fromEvent(document, 'click').pipe(\n * timestamp()\n * );\n *\n * // Emits data of type {value: MouseEvent, timestamp: number}\n * clickWithTimestamp.subscribe(data => {\n * console.log(data);\n * });\n * ```\n *\n * @param timestampProvider An object with a `now()` method used to get the current timestamp.\n * @return A function that returns an Observable that attaches a timestamp to\n * each item emitted by the source Observable indicating when it was emitted.\n */\nexport function timestamp(timestampProvider: TimestampProvider = dateTimestampProvider): OperatorFunction> {\n return map((value: T) => ({ value, timestamp: timestampProvider.now()}));\n}\n","import { Observable } from '../Observable';\nimport { OperatorFunction } from '../types';\nimport { Subject } from '../Subject';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { noop } from '../util/noop';\n\n/**\n * Branch out the source Observable values as a nested Observable whenever\n * `windowBoundaries` emits.\n *\n * It's like {@link buffer}, but emits a nested Observable\n * instead of an array.\n *\n * ![](window.png)\n *\n * Returns an Observable that emits windows of items it collects from the source\n * Observable. The output Observable emits connected, non-overlapping\n * windows. It emits the current window and opens a new one whenever the\n * Observable `windowBoundaries` emits an item. Because each window is an\n * Observable, the output is a higher-order Observable.\n *\n * ## Example\n * In every window of 1 second each, emit at most 2 click events\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { window, mergeAll, map, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const sec = interval(1000);\n * const result = clicks.pipe(\n * window(sec),\n * map(win => win.pipe(take(2))), // each window has at most 2 emissions\n * mergeAll(), // flatten the Observable-of-Observables\n * );\n * result.subscribe(x => console.log(x));\n * ```\n * @see {@link windowCount}\n * @see {@link windowTime}\n * @see {@link windowToggle}\n * @see {@link windowWhen}\n * @see {@link buffer}\n *\n * @param {Observable} windowBoundaries An Observable that completes the\n * previous window and starts a new window.\n * @return A function that returns an Observable of windows, which are\n * Observables emitting values of the source Observable.\n */\nexport function window(windowBoundaries: Observable): OperatorFunction> {\n return operate((source, subscriber) => {\n let windowSubject: Subject = new Subject();\n\n subscriber.next(windowSubject.asObservable());\n\n const errorHandler = (err: any) => {\n windowSubject.error(err);\n subscriber.error(err);\n };\n\n // Subscribe to our source\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => windowSubject?.next(value),\n () => {\n windowSubject.complete();\n subscriber.complete();\n },\n errorHandler\n )\n );\n\n // Subscribe to the window boundaries.\n windowBoundaries.subscribe(\n new OperatorSubscriber(\n subscriber,\n () => {\n windowSubject.complete();\n subscriber.next((windowSubject = new Subject()));\n },\n noop,\n errorHandler\n )\n );\n\n return () => {\n // Unsubscribing the subject ensures that anyone who has captured\n // a reference to this window that tries to use it after it can\n // no longer get values from the source will get an ObjectUnsubscribedError.\n windowSubject?.unsubscribe();\n windowSubject = null!;\n };\n });\n}\n","import { Observable } from '../Observable';\nimport { Subject } from '../Subject';\nimport { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Branch out the source Observable values as a nested Observable with each\n * nested Observable emitting at most `windowSize` values.\n *\n * It's like {@link bufferCount}, but emits a nested\n * Observable instead of an array.\n *\n * ![](windowCount.png)\n *\n * Returns an Observable that emits windows of items it collects from the source\n * Observable. The output Observable emits windows every `startWindowEvery`\n * items, each containing no more than `windowSize` items. When the source\n * Observable completes or encounters an error, the output Observable emits\n * the current window and propagates the notification from the source\n * Observable. If `startWindowEvery` is not provided, then new windows are\n * started immediately at the start of the source and when each window completes\n * with size `windowSize`.\n *\n * ## Examples\n * Ignore every 3rd click event, starting from the first one\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { windowCount, map, mergeAll, skip } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * windowCount(3),\n * map(win => win.pipe(skip(1))), // skip first of every 3 clicks\n * mergeAll() // flatten the Observable-of-Observables\n * );\n * result.subscribe(x => console.log(x));\n * ```\n *\n * Ignore every 3rd click event, starting from the third one\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { windowCount, mergeAll } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * windowCount(2, 3),\n * mergeAll(), // flatten the Observable-of-Observables\n * );\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link window}\n * @see {@link windowTime}\n * @see {@link windowToggle}\n * @see {@link windowWhen}\n * @see {@link bufferCount}\n *\n * @param {number} windowSize The maximum number of values emitted by each\n * window.\n * @param {number} [startWindowEvery] Interval at which to start a new window.\n * For example if `startWindowEvery` is `2`, then a new window will be started\n * on every other value from the source. A new window is started at the\n * beginning of the source by default.\n * @return A function that returns an Observable of windows, which in turn are\n * Observable of values.\n */\nexport function windowCount(windowSize: number, startWindowEvery: number = 0): OperatorFunction> {\n const startEvery = startWindowEvery > 0 ? startWindowEvery : windowSize;\n\n return operate((source, subscriber) => {\n let windows = [new Subject()];\n let starts: number[] = [];\n let count = 0;\n\n // Open the first window.\n subscriber.next(windows[0].asObservable());\n\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value: T) => {\n // Emit the value through all current windows.\n // We don't need to create a new window yet, we\n // do that as soon as we close one.\n for (const window of windows) {\n window.next(value);\n }\n // Here we're using the size of the window array to figure\n // out if the oldest window has emitted enough values. We can do this\n // because the size of the window array is a function of the values\n // seen by the subscription. If it's time to close it, we complete\n // it and remove it.\n const c = count - windowSize + 1;\n if (c >= 0 && c % startEvery === 0) {\n windows.shift()!.complete();\n }\n\n // Look to see if the next count tells us it's time to open a new window.\n // TODO: We need to figure out if this really makes sense. We're technically\n // emitting windows *before* we have a value to emit them for. It's probably\n // more expected that we should be emitting the window when the start\n // count is reached -- not before.\n if (++count % startEvery === 0) {\n const window = new Subject();\n windows.push(window);\n subscriber.next(window.asObservable());\n }\n },\n () => {\n while (windows.length > 0) {\n windows.shift()!.complete();\n }\n subscriber.complete();\n },\n (err) => {\n while (windows.length > 0) {\n windows.shift()!.error(err);\n }\n subscriber.error(err);\n },\n () => {\n starts = null!;\n windows = null!;\n }\n )\n );\n });\n}\n","import { Subject } from '../Subject';\nimport { asyncScheduler } from '../scheduler/async';\nimport { Observable } from '../Observable';\nimport { Subscription } from '../Subscription';\nimport { Observer, OperatorFunction, SchedulerLike } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { arrRemove } from '../util/arrRemove';\nimport { popScheduler } from '../util/args';\nimport { executeSchedule } from '../util/executeSchedule';\n\nexport function windowTime(windowTimeSpan: number, scheduler?: SchedulerLike): OperatorFunction>;\nexport function windowTime(\n windowTimeSpan: number,\n windowCreationInterval: number,\n scheduler?: SchedulerLike\n): OperatorFunction>;\nexport function windowTime(\n windowTimeSpan: number,\n windowCreationInterval: number | null | void,\n maxWindowSize: number,\n scheduler?: SchedulerLike\n): OperatorFunction>;\n/**\n * Branch out the source Observable values as a nested Observable periodically\n * in time.\n *\n * It's like {@link bufferTime}, but emits a nested\n * Observable instead of an array.\n *\n * ![](windowTime.png)\n *\n * Returns an Observable that emits windows of items it collects from the source\n * Observable. The output Observable starts a new window periodically, as\n * determined by the `windowCreationInterval` argument. It emits each window\n * after a fixed timespan, specified by the `windowTimeSpan` argument. When the\n * source Observable completes or encounters an error, the output Observable\n * emits the current window and propagates the notification from the source\n * Observable. If `windowCreationInterval` is not provided, the output\n * Observable starts a new window when the previous window of duration\n * `windowTimeSpan` completes. If `maxWindowCount` is provided, each window\n * will emit at most fixed number of values. Window will complete immediately\n * after emitting last value and next one still will open as specified by\n * `windowTimeSpan` and `windowCreationInterval` arguments.\n *\n * ## Examples\n * In every window of 1 second each, emit at most 2 click events\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { windowTime, map, mergeAll, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * windowTime(1000),\n * map(win => win.pipe(take(2))), // each window has at most 2 emissions\n * mergeAll(), // flatten the Observable-of-Observables\n * );\n * result.subscribe(x => console.log(x));\n * ```\n *\n * Every 5 seconds start a window 1 second long, and emit at most 2 click events per window\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { windowTime, map, mergeAll, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * windowTime(1000, 5000),\n * map(win => win.pipe(take(2))), // each window has at most 2 emissions\n * mergeAll(), // flatten the Observable-of-Observables\n * );\n * result.subscribe(x => console.log(x));\n * ```\n *\n * Same as example above but with maxWindowCount instead of take\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { windowTime, mergeAll } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * windowTime(1000, 5000, 2), // each window has still at most 2 emissions\n * mergeAll(), // flatten the Observable-of-Observables\n * );\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link window}\n * @see {@link windowCount}\n * @see {@link windowToggle}\n * @see {@link windowWhen}\n * @see {@link bufferTime}\n *\n * @param windowTimeSpan The amount of time, in milliseconds, to fill each window.\n * @param windowCreationInterval The interval at which to start new\n * windows.\n * @param maxWindowSize Max number of\n * values each window can emit before completion.\n * @param scheduler The scheduler on which to schedule the\n * intervals that determine window boundaries.\n * @return A function that returns an Observable of windows, which in turn are\n * Observables.\n */\nexport function windowTime(windowTimeSpan: number, ...otherArgs: any[]): OperatorFunction> {\n const scheduler = popScheduler(otherArgs) ?? asyncScheduler;\n const windowCreationInterval = (otherArgs[0] as number) ?? null;\n const maxWindowSize = (otherArgs[1] as number) || Infinity;\n\n return operate((source, subscriber) => {\n // The active windows, their related subscriptions, and removal functions.\n let windowRecords: WindowRecord[] | null = [];\n // If true, it means that every time we close a window, we want to start a new window.\n // This is only really used for when *just* the time span is passed.\n let restartOnClose = false;\n\n const closeWindow = (record: { window: Subject; subs: Subscription }) => {\n const { window, subs } = record;\n window.complete();\n subs.unsubscribe();\n arrRemove(windowRecords, record);\n restartOnClose && startWindow();\n };\n\n /**\n * Called every time we start a new window. This also does\n * the work of scheduling the job to close the window.\n */\n const startWindow = () => {\n if (windowRecords) {\n const subs = new Subscription();\n subscriber.add(subs);\n const window = new Subject();\n const record = {\n window,\n subs,\n seen: 0,\n };\n windowRecords.push(record);\n subscriber.next(window.asObservable());\n executeSchedule(subs, scheduler, () => closeWindow(record), windowTimeSpan);\n }\n };\n\n if (windowCreationInterval !== null && windowCreationInterval >= 0) {\n // The user passed both a windowTimeSpan (required), and a creation interval\n // That means we need to start new window on the interval, and those windows need\n // to wait the required time span before completing.\n executeSchedule(subscriber, scheduler, startWindow, windowCreationInterval, true);\n } else {\n restartOnClose = true;\n }\n\n startWindow();\n\n /**\n * We need to loop over a copy of the window records several times in this operator.\n * This is to save bytes over the wire more than anything.\n * The reason we copy the array is that reentrant code could mutate the array while\n * we are iterating over it.\n */\n const loop = (cb: (record: WindowRecord) => void) => windowRecords!.slice().forEach(cb);\n\n /**\n * Used to notify all of the windows and the subscriber in the same way\n * in the error and complete handlers.\n */\n const terminate = (cb: (consumer: Observer) => void) => {\n loop(({ window }) => cb(window));\n cb(subscriber);\n subscriber.unsubscribe();\n };\n\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value: T) => {\n // Notify all windows of the value.\n loop((record) => {\n record.window.next(value);\n // If the window is over the max size, we need to close it.\n maxWindowSize <= ++record.seen && closeWindow(record);\n });\n },\n // Complete the windows and the downstream subscriber and clean up.\n () => terminate((consumer) => consumer.complete()),\n // Notify the windows and the downstream subscriber of the error and clean up.\n (err) => terminate((consumer) => consumer.error(err))\n )\n );\n\n // Additional teardown. This will be called when the\n // destination tears down. Other teardowns are registered implicitly\n // above via subscription.\n return () => {\n // Ensure that the buffer is released.\n windowRecords = null!;\n };\n });\n}\n\ninterface WindowRecord {\n seen: number;\n window: Subject;\n subs: Subscription;\n}\n","import { Observable } from '../Observable';\nimport { Subject } from '../Subject';\nimport { Subscription } from '../Subscription';\nimport { ObservableInput, OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { noop } from '../util/noop';\nimport { arrRemove } from '../util/arrRemove';\n\n/**\n * Branch out the source Observable values as a nested Observable starting from\n * an emission from `openings` and ending when the output of `closingSelector`\n * emits.\n *\n * It's like {@link bufferToggle}, but emits a nested\n * Observable instead of an array.\n *\n * ![](windowToggle.png)\n *\n * Returns an Observable that emits windows of items it collects from the source\n * Observable. The output Observable emits windows that contain those items\n * emitted by the source Observable between the time when the `openings`\n * Observable emits an item and when the Observable returned by\n * `closingSelector` emits an item.\n *\n * ## Example\n * Every other second, emit the click events from the next 500ms\n * ```ts\n * import { fromEvent, interval, EMPTY } from 'rxjs';\n * import { windowToggle, mergeAll } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const openings = interval(1000);\n * const result = clicks.pipe(\n * windowToggle(openings, i => i % 2 ? interval(500) : EMPTY),\n * mergeAll()\n * );\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link window}\n * @see {@link windowCount}\n * @see {@link windowTime}\n * @see {@link windowWhen}\n * @see {@link bufferToggle}\n *\n * @param {Observable} openings An observable of notifications to start new\n * windows.\n * @param {function(value: O): Observable} closingSelector A function that takes\n * the value emitted by the `openings` observable and returns an Observable,\n * which, when it emits a next notification, signals that the\n * associated window should complete.\n * @return A function that returns an Observable of windows, which in turn are\n * Observables.\n */\nexport function windowToggle(\n openings: ObservableInput,\n closingSelector: (openValue: O) => ObservableInput\n): OperatorFunction> {\n return operate((source, subscriber) => {\n const windows: Subject[] = [];\n\n const handleError = (err: any) => {\n while (0 < windows.length) {\n windows.shift()!.error(err);\n }\n subscriber.error(err);\n };\n\n innerFrom(openings).subscribe(\n new OperatorSubscriber(\n subscriber,\n (openValue) => {\n const window = new Subject();\n windows.push(window);\n const closingSubscription = new Subscription();\n const closeWindow = () => {\n arrRemove(windows, window);\n window.complete();\n closingSubscription.unsubscribe();\n };\n\n let closingNotifier: Observable;\n try {\n closingNotifier = innerFrom(closingSelector(openValue));\n } catch (err) {\n handleError(err);\n return;\n }\n\n subscriber.next(window.asObservable());\n\n closingSubscription.add(closingNotifier.subscribe(new OperatorSubscriber(subscriber, closeWindow, noop, handleError)));\n },\n noop\n )\n );\n\n // Subcribe to the source to get things started.\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value: T) => {\n // Copy the windows array before we emit to\n // make sure we don't have issues with reentrant code.\n const windowsCopy = windows.slice();\n for (const window of windowsCopy) {\n window.next(value);\n }\n },\n () => {\n // Complete all of our windows before we complete.\n while (0 < windows.length) {\n windows.shift()!.complete();\n }\n subscriber.complete();\n },\n handleError,\n () => {\n // Add this teardown so that all window subjects are\n // disposed of. This way, if a user tries to subscribe\n // to a window *after* the outer subscription has been unsubscribed,\n // they will get an error, instead of waiting forever to\n // see if a value arrives.\n while (0 < windows.length) {\n windows.shift()!.unsubscribe();\n }\n }\n )\n );\n });\n}\n","import { Subscriber } from '../Subscriber';\nimport { Observable } from '../Observable';\nimport { Subject } from '../Subject';\nimport { ObservableInput, OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\n\n/**\n * Branch out the source Observable values as a nested Observable using a\n * factory function of closing Observables to determine when to start a new\n * window.\n *\n * It's like {@link bufferWhen}, but emits a nested\n * Observable instead of an array.\n *\n * ![](windowWhen.png)\n *\n * Returns an Observable that emits windows of items it collects from the source\n * Observable. The output Observable emits connected, non-overlapping windows.\n * It emits the current window and opens a new one whenever the Observable\n * produced by the specified `closingSelector` function emits an item. The first\n * window is opened immediately when subscribing to the output Observable.\n *\n * ## Example\n * Emit only the first two clicks events in every window of [1-5] random seconds\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { windowWhen, map, mergeAll, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * windowWhen(() => interval(1000 + Math.random() * 4000)),\n * map(win => win.pipe(take(2))), // each window has at most 2 emissions\n * mergeAll() // flatten the Observable-of-Observables\n * );\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link window}\n * @see {@link windowCount}\n * @see {@link windowTime}\n * @see {@link windowToggle}\n * @see {@link bufferWhen}\n *\n * @param {function(): Observable} closingSelector A function that takes no\n * arguments and returns an Observable that signals (on either `next` or\n * `complete`) when to close the previous window and start a new one.\n * @return A function that returns an Observable of windows, which in turn are\n * Observables.\n */\nexport function windowWhen(closingSelector: () => ObservableInput): OperatorFunction> {\n return operate((source, subscriber) => {\n let window: Subject | null;\n let closingSubscriber: Subscriber | undefined;\n\n /**\n * When we get an error, we have to notify both the\n * destiation subscriber and the window.\n */\n const handleError = (err: any) => {\n window!.error(err);\n subscriber.error(err);\n };\n\n /**\n * Called every time we need to open a window.\n * Recursive, as it will start the closing notifier, which\n * inevitably *should* call openWindow -- but may not if\n * it is a \"never\" observable.\n */\n const openWindow = () => {\n // We need to clean up our closing subscription,\n // we only cared about the first next or complete notification.\n closingSubscriber?.unsubscribe();\n\n // Close our window before starting a new one.\n window?.complete();\n\n // Start the new window.\n window = new Subject();\n subscriber.next(window.asObservable());\n\n // Get our closing notifier.\n let closingNotifier: Observable;\n try {\n closingNotifier = innerFrom(closingSelector());\n } catch (err) {\n handleError(err);\n return;\n }\n\n // Subscribe to the closing notifier, be sure\n // to capture the subscriber (aka Subscription)\n // so we can clean it up when we close the window\n // and open a new one.\n closingNotifier.subscribe((closingSubscriber = new OperatorSubscriber(subscriber, openWindow, openWindow, handleError)));\n };\n\n // Start the first window.\n openWindow();\n\n // Subscribe to the source\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => window!.next(value),\n () => {\n // The source completed, close the window and complete.\n window!.complete();\n subscriber.complete();\n },\n handleError,\n () => {\n // Be sure to clean up our closing subscription\n // when this tears down.\n closingSubscriber?.unsubscribe();\n window = null!;\n }\n )\n );\n });\n}\n","import { OperatorFunction, ObservableInput } from '../types';\nimport { zip } from '../observable/zip';\nimport { joinAllInternals } from './joinAllInternals';\n\n/**\n * Collects all observable inner sources from the source, once the source completes,\n * it will subscribe to all inner sources, combining their values by index and emitting\n * them.\n *\n * @see {@link zipWith}\n * @see {@link zip}\n */\nexport function zipAll(): OperatorFunction, T[]>;\nexport function zipAll(): OperatorFunction;\nexport function zipAll(project: (...values: T[]) => R): OperatorFunction, R>;\nexport function zipAll(project: (...values: Array) => R): OperatorFunction;\n\nexport function zipAll(project?: (...values: T[]) => R) {\n return joinAllInternals(zip, project);\n}\n","import { ObservableInputTuple, OperatorFunction, Cons } from '../types';\nimport { zip } from './zip';\n\n/**\n * Subscribes to the source, and the observable inputs provided as arguments, and combines their values, by index, into arrays.\n *\n * What is meant by \"combine by index\": The first value from each will be made into a single array, then emitted,\n * then the second value from each will be combined into a single array and emitted, then the third value\n * from each will be combined into a single array and emitted, and so on.\n *\n * This will continue until it is no longer able to combine values of the same index into an array.\n *\n * After the last value from any one completed source is emitted in an array, the resulting observable will complete,\n * as there is no way to continue \"zipping\" values together by index.\n *\n * Use-cases for this operator are limited. There are memory concerns if one of the streams is emitting\n * values at a much faster rate than the others. Usage should likely be limited to streams that emit\n * at a similar pace, or finite streams of known length.\n *\n * In many cases, authors want `combineLatestWith` and not `zipWith`.\n *\n * @param otherInputs other observable inputs to collate values from.\n * @return A function that returns an Observable that emits items by index\n * combined from the source Observable and provided Observables, in form of an\n * array.\n */\nexport function zipWith(...otherInputs: [...ObservableInputTuple]): OperatorFunction> {\n return zip(...otherInputs);\n}\n","import { zip as zipStatic } from '../observable/zip';\nimport { ObservableInput, ObservableInputTuple, OperatorFunction, Cons } from '../types';\nimport { operate } from '../util/lift';\n\n/** @deprecated Replaced with {@link zipWith}. Will be removed in v8. */\nexport function zip(otherInputs: [...ObservableInputTuple]): OperatorFunction>;\n/** @deprecated Replaced with {@link zipWith}. Will be removed in v8. */\nexport function zip(\n otherInputsAndProject: [...ObservableInputTuple],\n project: (...values: Cons) => R\n): OperatorFunction;\n/** @deprecated Replaced with {@link zipWith}. Will be removed in v8. */\nexport function zip(...otherInputs: [...ObservableInputTuple]): OperatorFunction>;\n/** @deprecated Replaced with {@link zipWith}. Will be removed in v8. */\nexport function zip(\n ...otherInputsAndProject: [...ObservableInputTuple, (...values: Cons) => R]\n): OperatorFunction;\n\n/**\n * @deprecated Replaced with {@link zipWith}. Will be removed in v8.\n */\nexport function zip(...sources: Array | ((...values: Array) => R)>): OperatorFunction {\n return operate((source, subscriber) => {\n // Casting here as zipStatic accepts the result selector as well.\n zipStatic(source, ...(sources as any[])).subscribe(subscriber);\n });\n}\n","import { Subject } from './Subject';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\n\n/**\n * A variant of Subject that requires an initial value and emits its current\n * value whenever it is subscribed to.\n *\n * @class BehaviorSubject\n */\nexport class BehaviorSubject extends Subject {\n constructor(private _value: T) {\n super();\n }\n\n get value(): T {\n return this.getValue();\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n const subscription = super._subscribe(subscriber);\n !subscription.closed && subscriber.next(this._value);\n return subscription;\n }\n\n getValue(): T {\n const { hasError, thrownError, _value } = this;\n if (hasError) {\n throw thrownError;\n }\n this._throwIfClosed();\n return _value;\n }\n\n next(value: T): void {\n super.next((this._value = value));\n }\n}\n","/**\n * @prettier\n */\nimport { Operator } from './Operator';\nimport { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription, Subscription } from './Subscription';\nimport { TeardownLogic, OperatorFunction, Subscribable, Observer } from './types';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A representation of any set of values over any amount of time. This is the most basic building block\n * of RxJS.\n *\n * @class Observable\n */\nexport class Observable implements Subscribable {\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n source: Observable | undefined;\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n operator: Operator | undefined;\n\n /**\n * @constructor\n * @param {Function} subscribe the function that is called when the Observable is\n * initially subscribed to. This function is given a Subscriber, to which new values\n * can be `next`ed, or an `error` method can be called to raise an error, or\n * `complete` can be called to notify of a successful completion.\n */\n constructor(subscribe?: (this: Observable, subscriber: Subscriber) => TeardownLogic) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n\n // HACK: Since TypeScript inherits static properties too, we have to\n // fight against TypeScript here so Subject can have a different static create signature\n /**\n * Creates a new Observable by calling the Observable constructor\n * @owner Observable\n * @method create\n * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor\n * @return {Observable} a new observable\n * @nocollapse\n * @deprecated Use `new Observable()` instead. Will be removed in v8.\n */\n static create: (...args: any[]) => any = (subscribe?: (subscriber: Subscriber) => TeardownLogic) => {\n return new Observable(subscribe);\n };\n\n /**\n * Creates a new Observable, with this Observable instance as the source, and the passed\n * operator defined as the new observable's operator.\n * @method lift\n * @param operator the operator defining the operation to take on the observable\n * @return a new observable with the Operator applied\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * If you have implemented an operator using `lift`, it is recommended that you create an\n * operator by simply returning `new Observable()` directly. See \"Creating new operators from\n * scratch\" section here: https://rxjs.dev/guide/operators\n */\n lift(operator?: Operator): Observable {\n const observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n }\n\n subscribe(observer?: Partial>): Subscription;\n subscribe(next: (value: T) => void): Subscription;\n /** @deprecated Instead of passing separate callback arguments, use an observer argument. Signatures taking separate callback arguments will be removed in v8. Details: https://rxjs.dev/deprecations/subscribe-arguments */\n subscribe(next?: ((value: T) => void) | null, error?: ((error: any) => void) | null, complete?: (() => void) | null): Subscription;\n /**\n * Invokes an execution of an Observable and registers Observer handlers for notifications it will emit.\n *\n * Use it when you have all these Observables, but still nothing is happening.\n *\n * `subscribe` is not a regular operator, but a method that calls Observable's internal `subscribe` function. It\n * might be for example a function that you passed to Observable's constructor, but most of the time it is\n * a library implementation, which defines what will be emitted by an Observable, and when it be will emitted. This means\n * that calling `subscribe` is actually the moment when Observable starts its work, not when it is created, as it is often\n * the thought.\n *\n * Apart from starting the execution of an Observable, this method allows you to listen for values\n * that an Observable emits, as well as for when it completes or errors. You can achieve this in two\n * of the following ways.\n *\n * The first way is creating an object that implements {@link Observer} interface. It should have methods\n * defined by that interface, but note that it should be just a regular JavaScript object, which you can create\n * yourself in any way you want (ES6 class, classic function constructor, object literal etc.). In particular, do\n * not attempt to use any RxJS implementation details to create Observers - you don't need them. Remember also\n * that your object does not have to implement all methods. If you find yourself creating a method that doesn't\n * do anything, you can simply omit it. Note however, if the `error` method is not provided and an error happens,\n * it will be thrown asynchronously. Errors thrown asynchronously cannot be caught using `try`/`catch`. Instead,\n * use the {@link onUnhandledError} configuration option or use a runtime handler (like `window.onerror` or\n * `process.on('error)`) to be notified of unhandled errors. Because of this, it's recommended that you provide\n * an `error` method to avoid missing thrown errors.\n *\n * The second way is to give up on Observer object altogether and simply provide callback functions in place of its methods.\n * This means you can provide three functions as arguments to `subscribe`, where the first function is equivalent\n * of a `next` method, the second of an `error` method and the third of a `complete` method. Just as in case of an Observer,\n * if you do not need to listen for something, you can omit a function by passing `undefined` or `null`,\n * since `subscribe` recognizes these functions by where they were placed in function call. When it comes\n * to the `error` function, as with an Observer, if not provided, errors emitted by an Observable will be thrown asynchronously.\n *\n * You can, however, subscribe with no parameters at all. This may be the case where you're not interested in terminal events\n * and you also handled emissions internally by using operators (e.g. using `tap`).\n *\n * Whichever style of calling `subscribe` you use, in both cases it returns a Subscription object.\n * This object allows you to call `unsubscribe` on it, which in turn will stop the work that an Observable does and will clean\n * up all resources that an Observable used. Note that cancelling a subscription will not call `complete` callback\n * provided to `subscribe` function, which is reserved for a regular completion signal that comes from an Observable.\n *\n * Remember that callbacks provided to `subscribe` are not guaranteed to be called asynchronously.\n * It is an Observable itself that decides when these functions will be called. For example {@link of}\n * by default emits all its values synchronously. Always check documentation for how given Observable\n * will behave when subscribed and if its default behavior can be modified with a `scheduler`.\n *\n * ## Example\n * ### Subscribe with an Observer\n * ```ts\n * import { of } from 'rxjs';\n *\n * const sumObserver = {\n * sum: 0,\n * next(value) {\n * console.log('Adding: ' + value);\n * this.sum = this.sum + value;\n * },\n * error() {\n * // We actually could just remove this method,\n * // since we do not really care about errors right now.\n * },\n * complete() {\n * console.log('Sum equals: ' + this.sum);\n * }\n * };\n *\n * of(1, 2, 3) // Synchronously emits 1, 2, 3 and then completes.\n * .subscribe(sumObserver);\n *\n * // Logs:\n * // \"Adding: 1\"\n * // \"Adding: 2\"\n * // \"Adding: 3\"\n * // \"Sum equals: 6\"\n * ```\n *\n * ### Subscribe with functions\n * ```ts\n * import { of } from 'rxjs'\n *\n * let sum = 0;\n *\n * of(1, 2, 3).subscribe(\n * value => {\n * console.log('Adding: ' + value);\n * sum = sum + value;\n * },\n * undefined,\n * () => console.log('Sum equals: ' + sum)\n * );\n *\n * // Logs:\n * // \"Adding: 1\"\n * // \"Adding: 2\"\n * // \"Adding: 3\"\n * // \"Sum equals: 6\"\n * ```\n *\n * ### Cancel a subscription\n * ```ts\n * import { interval } from 'rxjs';\n *\n * const subscription = interval(1000).subscribe({\n * next(num) {\n * console.log(num)\n * },\n * complete() {\n * // Will not be called, even when cancelling subscription.\n * console.log('completed!');\n * }\n * });\n *\n * setTimeout(() => {\n * subscription.unsubscribe();\n * console.log('unsubscribed!');\n * }, 2500);\n *\n * // Logs:\n * // 0 after 1s\n * // 1 after 2s\n * // \"unsubscribed!\" after 2.5s\n * ```\n *\n * @param {Observer|Function} observerOrNext (optional) Either an observer with methods to be called,\n * or the first of three possible handlers, which is the handler for each value emitted from the subscribed\n * Observable.\n * @param {Function} error (optional) A handler for a terminal event resulting from an error. If no error handler is provided,\n * the error will be thrown asynchronously as unhandled.\n * @param {Function} complete (optional) A handler for a terminal event resulting from successful completion.\n * @return {Subscription} a subscription reference to the registered handlers\n * @method subscribe\n */\n subscribe(\n observerOrNext?: Partial> | ((value: T) => void) | null,\n error?: ((error: any) => void) | null,\n complete?: (() => void) | null\n ): Subscription {\n const subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n\n errorContext(() => {\n const { operator, source } = this;\n subscriber.add(\n operator\n ? // We're dealing with a subscription in the\n // operator chain to one of our lifted operators.\n operator.call(subscriber, source)\n : source\n ? // If `source` has a value, but `operator` does not, something that\n // had intimate knowledge of our API, like our `Subject`, must have\n // set it. We're going to just call `_subscribe` directly.\n this._subscribe(subscriber)\n : // In all other cases, we're likely wrapping a user-provided initializer\n // function, so we need to catch errors and handle them appropriately.\n this._trySubscribe(subscriber)\n );\n });\n\n return subscriber;\n }\n\n /** @internal */\n protected _trySubscribe(sink: Subscriber): TeardownLogic {\n try {\n return this._subscribe(sink);\n } catch (err) {\n // We don't need to return anything in this case,\n // because it's just going to try to `add()` to a subscription\n // above.\n sink.error(err);\n }\n }\n\n /**\n * Used as a NON-CANCELLABLE means of subscribing to an observable, for use with\n * APIs that expect promises, like `async/await`. You cannot unsubscribe from this.\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * ### Example:\n *\n * ```ts\n * import { interval } from 'rxjs';\n * import { take } from 'rxjs/operators';\n *\n * const source$ = interval(1000).pipe(take(4));\n *\n * async function getTotal() {\n * let total = 0;\n *\n * await source$.forEach(value => {\n * total += value;\n * console.log('observable -> ', value);\n * });\n *\n * return total;\n * }\n *\n * getTotal().then(\n * total => console.log('Total:', total)\n * )\n *\n * // Expected:\n * // \"observable -> 0\"\n * // \"observable -> 1\"\n * // \"observable -> 2\"\n * // \"observable -> 3\"\n * // \"Total: 6\"\n * ```\n * @param next a handler for each value emitted by the observable\n * @return a promise that either resolves on observable completion or\n * rejects with the handled error\n */\n forEach(next: (value: T) => void): Promise;\n\n /**\n * @param next a handler for each value emitted by the observable\n * @param promiseCtor a constructor function used to instantiate the Promise\n * @return a promise that either resolves on observable completion or\n * rejects with the handled error\n * @deprecated Passing a Promise constructor will no longer be available\n * in upcoming versions of RxJS. This is because it adds weight to the library, for very\n * little benefit. If you need this functionality, it is recommended that you either\n * polyfill Promise, or you create an adapter to convert the returned native promise\n * to whatever promise implementation you wanted. Will be removed in v8.\n */\n forEach(next: (value: T) => void, promiseCtor: PromiseConstructorLike): Promise;\n\n forEach(next: (value: T) => void, promiseCtor?: PromiseConstructorLike): Promise {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor((resolve, reject) => {\n // Must be declared in a separate statement to avoid a ReferenceError when\n // accessing subscription below in the closure due to Temporal Dead Zone.\n let subscription: Subscription;\n subscription = this.subscribe(\n (value) => {\n try {\n next(value);\n } catch (err) {\n reject(err);\n subscription?.unsubscribe();\n }\n },\n reject,\n resolve\n );\n }) as Promise;\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): TeardownLogic {\n return this.source?.subscribe(subscriber);\n }\n\n /**\n * An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable\n * @method Symbol.observable\n * @return {Observable} this instance of the observable\n */\n [Symbol_observable]() {\n return this;\n }\n\n /* tslint:disable:max-line-length */\n pipe(): Observable;\n pipe(op1: OperatorFunction): Observable;\n pipe(op1: OperatorFunction, op2: OperatorFunction): Observable;\n pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction,\n op9: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction,\n op9: OperatorFunction,\n ...operations: OperatorFunction[]\n ): Observable;\n /* tslint:enable:max-line-length */\n\n /**\n * Used to stitch together functional operators into a chain.\n * @method pipe\n * @return {Observable} the Observable result of all of the operators having\n * been called in the order they were passed in.\n *\n * ### Example\n * ```ts\n * import { interval } from 'rxjs';\n * import { map, filter, scan } from 'rxjs/operators';\n *\n * interval(1000)\n * .pipe(\n * filter(x => x % 2 === 0),\n * map(x => x + x),\n * scan((acc, x) => acc + x)\n * )\n * .subscribe(x => console.log(x))\n * ```\n */\n pipe(...operations: OperatorFunction[]): Observable {\n return pipeFromArray(operations)(this);\n }\n\n /* tslint:disable:max-line-length */\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(): Promise;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: typeof Promise): Promise;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: PromiseConstructorLike): Promise;\n /* tslint:enable:max-line-length */\n\n /**\n * Subscribe to this Observable and get a Promise resolving on\n * `complete` with the last emission (if any).\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * @method toPromise\n * @param [promiseCtor] a constructor function used to instantiate\n * the Promise\n * @return A Promise that resolves with the last value emit, or\n * rejects on an error. If there were no emissions, Promise\n * resolves with undefined.\n * @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise\n */\n toPromise(promiseCtor?: PromiseConstructorLike): Promise {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor((resolve, reject) => {\n let value: T | undefined;\n this.subscribe(\n (x: T) => (value = x),\n (err: any) => reject(err),\n () => resolve(value)\n );\n }) as Promise;\n }\n}\n\n/**\n * Decides between a passed promise constructor from consuming code,\n * A default configured promise constructor, and the native promise\n * constructor and returns it. If nothing can be found, it will throw\n * an error.\n * @param promiseCtor The optional promise constructor to passed by consuming code\n */\nfunction getPromiseCtor(promiseCtor: PromiseConstructorLike | undefined) {\n return promiseCtor ?? config.Promise ?? Promise;\n}\n\nfunction isObserver(value: any): value is Observer {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\n\nfunction isSubscriber(value: any): value is Subscriber {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n","import { Subject } from './Subject';\nimport { TimestampProvider } from './types';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\n\n/**\n * A variant of {@link Subject} that \"replays\" old values to new subscribers by emitting them when they first subscribe.\n *\n * `ReplaySubject` has an internal buffer that will store a specified number of values that it has observed. Like `Subject`,\n * `ReplaySubject` \"observes\" values by having them passed to its `next` method. When it observes a value, it will store that\n * value for a time determined by the configuration of the `ReplaySubject`, as passed to its constructor.\n *\n * When a new subscriber subscribes to the `ReplaySubject` instance, it will synchronously emit all values in its buffer in\n * a First-In-First-Out (FIFO) manner. The `ReplaySubject` will also complete, if it has observed completion; and it will\n * error if it has observed an error.\n *\n * There are two main configuration items to be concerned with:\n *\n * 1. `bufferSize` - This will determine how many items are stored in the buffer, defaults to infinite.\n * 2. `windowTime` - The amount of time to hold a value in the buffer before removing it from the buffer.\n *\n * Both configurations may exist simultaneously. So if you would like to buffer a maximum of 3 values, as long as the values\n * are less than 2 seconds old, you could do so with a `new ReplaySubject(3, 2000)`.\n *\n * ### Differences with BehaviorSubject\n *\n * `BehaviorSubject` is similar to `new ReplaySubject(1)`, with a couple fo exceptions:\n *\n * 1. `BehaviorSubject` comes \"primed\" with a single value upon construction.\n * 2. `ReplaySubject` will replay values, even after observing an error, where `BehaviorSubject` will not.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n * @see {@link shareReplay}\n */\nexport class ReplaySubject extends Subject {\n private _buffer: (T | number)[] = [];\n private _infiniteTimeWindow = true;\n\n /**\n * @param bufferSize The size of the buffer to replay on subscription\n * @param windowTime The amount of time the buffered items will say buffered\n * @param timestampProvider An object with a `now()` method that provides the current timestamp. This is used to\n * calculate the amount of time something has been buffered.\n */\n constructor(\n private _bufferSize = Infinity,\n private _windowTime = Infinity,\n private _timestampProvider: TimestampProvider = dateTimestampProvider\n ) {\n super();\n this._infiniteTimeWindow = _windowTime === Infinity;\n this._bufferSize = Math.max(1, _bufferSize);\n this._windowTime = Math.max(1, _windowTime);\n }\n\n next(value: T): void {\n const { isStopped, _buffer, _infiniteTimeWindow, _timestampProvider, _windowTime } = this;\n if (!isStopped) {\n _buffer.push(value);\n !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);\n }\n this._trimBuffer();\n super.next(value);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n this._throwIfClosed();\n this._trimBuffer();\n\n const subscription = this._innerSubscribe(subscriber);\n\n const { _infiniteTimeWindow, _buffer } = this;\n // We use a copy here, so reentrant code does not mutate our array while we're\n // emitting it to a new subscriber.\n const copy = _buffer.slice();\n for (let i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {\n subscriber.next(copy[i] as T);\n }\n\n this._checkFinalizedStatuses(subscriber);\n\n return subscription;\n }\n\n private _trimBuffer() {\n const { _bufferSize, _timestampProvider, _buffer, _infiniteTimeWindow } = this;\n // If we don't have an infinite buffer size, and we're over the length,\n // use splice to truncate the old buffer values off. Note that we have to\n // double the size for instances where we're not using an infinite time window\n // because we're storing the values and the timestamps in the same array.\n const adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;\n _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);\n\n // Now, if we're not in an infinite time window, remove all values where the time is\n // older than what is allowed.\n if (!_infiniteTimeWindow) {\n const now = _timestampProvider.now();\n let last = 0;\n // Search the array for the first timestamp that isn't expired and\n // truncate the buffer up to that point.\n for (let i = 1; i < _buffer.length && (_buffer[i] as number) <= now; i += 2) {\n last = i;\n }\n last && _buffer.splice(0, last + 1);\n }\n }\n}\n","import { Action } from './scheduler/Action';\nimport { Subscription } from './Subscription';\nimport { SchedulerLike, SchedulerAction } from './types';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\n\n/**\n * An execution context and a data structure to order tasks and schedule their\n * execution. Provides a notion of (potentially virtual) time, through the\n * `now()` getter method.\n *\n * Each unit of work in a Scheduler is called an `Action`.\n *\n * ```ts\n * class Scheduler {\n * now(): number;\n * schedule(work, delay?, state?): Subscription;\n * }\n * ```\n *\n * @class Scheduler\n * @deprecated Scheduler is an internal implementation detail of RxJS, and\n * should not be used directly. Rather, create your own class and implement\n * {@link SchedulerLike}. Will be made internal in v8.\n */\nexport class Scheduler implements SchedulerLike {\n public static now: () => number = dateTimestampProvider.now;\n\n constructor(private schedulerActionCtor: typeof Action, now: () => number = Scheduler.now) {\n this.now = now;\n }\n\n /**\n * A getter method that returns a number representing the current time\n * (at the time this function was called) according to the scheduler's own\n * internal clock.\n * @return {number} A number that represents the current time. May or may not\n * have a relation to wall-clock time. May or may not refer to a time unit\n * (e.g. milliseconds).\n */\n public now: () => number;\n\n /**\n * Schedules a function, `work`, for execution. May happen at some point in\n * the future, according to the `delay` parameter, if specified. May be passed\n * some context object, `state`, which will be passed to the `work` function.\n *\n * The given arguments will be processed an stored as an Action object in a\n * queue of actions.\n *\n * @param {function(state: ?T): ?Subscription} work A function representing a\n * task, or some unit of work to be executed by the Scheduler.\n * @param {number} [delay] Time to wait before executing the work, where the\n * time unit is implicit and defined by the Scheduler itself.\n * @param {T} [state] Some contextual data that the `work` function uses when\n * called by the Scheduler.\n * @return {Subscription} A subscription in order to be able to unsubscribe\n * the scheduled work.\n */\n public schedule(work: (this: SchedulerAction, state?: T) => void, delay: number = 0, state?: T): Subscription {\n return new this.schedulerActionCtor(this, work).schedule(state, delay);\n }\n}\n","import { Operator } from './Operator';\nimport { Observable } from './Observable';\nimport { Subscriber } from './Subscriber';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { Observer, SubscriptionLike, TeardownLogic } from './types';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A Subject is a special type of Observable that allows values to be\n * multicasted to many Observers. Subjects are like EventEmitters.\n *\n * Every Subject is an Observable and an Observer. You can subscribe to a\n * Subject, and you can call next to feed values as well as error and complete.\n */\nexport class Subject extends Observable implements SubscriptionLike {\n closed = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n observers: Observer[] = [];\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n isStopped = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n hasError = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n thrownError: any = null;\n\n /**\n * Creates a \"subject\" by basically gluing an observer to an observable.\n *\n * @nocollapse\n * @deprecated Recommended you do not use. Will be removed at some point in the future. Plans for replacement still under discussion.\n */\n static create: (...args: any[]) => any = (destination: Observer, source: Observable): AnonymousSubject => {\n return new AnonymousSubject(destination, source);\n };\n\n constructor() {\n // NOTE: This must be here to obscure Observable's constructor.\n super();\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n lift(operator: Operator): Observable {\n const subject = new AnonymousSubject(this, this);\n subject.operator = operator as any;\n return subject as any;\n }\n\n /** @internal */\n protected _throwIfClosed() {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n }\n\n next(value: T) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n const copy = this.observers.slice();\n for (const observer of copy) {\n observer.next(value);\n }\n }\n });\n }\n\n error(err: any) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.hasError = this.isStopped = true;\n this.thrownError = err;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.error(err);\n }\n }\n });\n }\n\n complete() {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.isStopped = true;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.complete();\n }\n }\n });\n }\n\n unsubscribe() {\n this.isStopped = this.closed = true;\n this.observers = null!;\n }\n\n get observed() {\n return this.observers?.length > 0;\n }\n\n /** @internal */\n protected _trySubscribe(subscriber: Subscriber): TeardownLogic {\n this._throwIfClosed();\n return super._trySubscribe(subscriber);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n }\n\n /** @internal */\n protected _innerSubscribe(subscriber: Subscriber) {\n const { hasError, isStopped, observers } = this;\n return hasError || isStopped\n ? EMPTY_SUBSCRIPTION\n : (observers.push(subscriber), new Subscription(() => arrRemove(observers, subscriber)));\n }\n\n /** @internal */\n protected _checkFinalizedStatuses(subscriber: Subscriber) {\n const { hasError, thrownError, isStopped } = this;\n if (hasError) {\n subscriber.error(thrownError);\n } else if (isStopped) {\n subscriber.complete();\n }\n }\n\n /**\n * Creates a new Observable with this Subject as the source. You can do this\n * to create customize Observer-side logic of the Subject and conceal it from\n * code that uses the Observable.\n * @return {Observable} Observable that the Subject casts to\n */\n asObservable(): Observable {\n const observable: any = new Observable();\n observable.source = this;\n return observable;\n }\n}\n\n/**\n * @class AnonymousSubject\n */\nexport class AnonymousSubject extends Subject {\n constructor(\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n public destination?: Observer,\n source?: Observable\n ) {\n super();\n this.source = source;\n }\n\n next(value: T) {\n this.destination?.next?.(value);\n }\n\n error(err: any) {\n this.destination?.error?.(err);\n }\n\n complete() {\n this.destination?.complete?.();\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n return this.source?.subscribe(subscriber) ?? EMPTY_SUBSCRIPTION;\n }\n}\n","import { CompleteNotification, NextNotification, ErrorNotification } from './types';\n\n/**\n * A completion object optimized for memory use and created to be the\n * same \"shape\" as other notifications in v8.\n * @internal\n */\nexport const COMPLETE_NOTIFICATION = (() => createNotification('C', undefined, undefined) as CompleteNotification)();\n\n/**\n * Internal use only. Creates an optimized error notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function errorNotification(error: any): ErrorNotification {\n return createNotification('E', undefined, error) as any;\n}\n\n/**\n * Internal use only. Creates an optimized next notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function nextNotification(value: T) {\n return createNotification('N', value, undefined) as NextNotification;\n}\n\n/**\n * Ensures that all notifications created internally have the same \"shape\" in v8.\n *\n * TODO: This is only exported to support a crazy legacy test in `groupBy`.\n * @internal\n */\nexport function createNotification(kind: 'N' | 'E' | 'C', value: any, error: any) {\n return {\n kind,\n value,\n error,\n };\n}\n","import { isFunction } from './util/isFunction';\nimport { Observer, ObservableNotification } from './types';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\n\n/**\n * Implements the {@link Observer} interface and extends the\n * {@link Subscription} class. While the {@link Observer} is the public API for\n * consuming the values of an {@link Observable}, all Observers get converted to\n * a Subscriber, in order to provide Subscription-like capabilities such as\n * `unsubscribe`. Subscriber is a common type in RxJS, and crucial for\n * implementing operators, but it is rarely used as a public API.\n *\n * @class Subscriber\n */\nexport class Subscriber extends Subscription implements Observer {\n /**\n * A static factory for a Subscriber, given a (potentially partial) definition\n * of an Observer.\n * @param next The `next` callback of an Observer.\n * @param error The `error` callback of an\n * Observer.\n * @param complete The `complete` callback of an\n * Observer.\n * @return A Subscriber wrapping the (partially defined)\n * Observer represented by the given arguments.\n * @nocollapse\n * @deprecated Do not use. Will be removed in v8. There is no replacement for this\n * method, and there is no reason to be creating instances of `Subscriber` directly.\n * If you have a specific use case, please file an issue.\n */\n static create(next?: (x?: T) => void, error?: (e?: any) => void, complete?: () => void): Subscriber {\n return new SafeSubscriber(next, error, complete);\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected isStopped: boolean = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected destination: Subscriber | Observer; // this `any` is the escape hatch to erase extra type param (e.g. R)\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * There is no reason to directly create an instance of Subscriber. This type is exported for typings reasons.\n */\n constructor(destination?: Subscriber | Observer) {\n super();\n if (destination) {\n this.destination = destination;\n // Automatically chain subscriptions together here.\n // if destination is a Subscription, then it is a Subscriber.\n if (isSubscription(destination)) {\n destination.add(this);\n }\n } else {\n this.destination = EMPTY_OBSERVER;\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `next` from\n * the Observable, with a value. The Observable may call this method 0 or more\n * times.\n * @param {T} [value] The `next` value.\n * @return {void}\n */\n next(value?: T): void {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n } else {\n this._next(value!);\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `error` from\n * the Observable, with an attached `Error`. Notifies the Observer that\n * the Observable has experienced an error condition.\n * @param {any} [err] The `error` exception.\n * @return {void}\n */\n error(err?: any): void {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n } else {\n this.isStopped = true;\n this._error(err);\n }\n }\n\n /**\n * The {@link Observer} callback to receive a valueless notification of type\n * `complete` from the Observable. Notifies the Observer that the Observable\n * has finished sending push-based notifications.\n * @return {void}\n */\n complete(): void {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n } else {\n this.isStopped = true;\n this._complete();\n }\n }\n\n unsubscribe(): void {\n if (!this.closed) {\n this.isStopped = true;\n super.unsubscribe();\n this.destination = null!;\n }\n }\n\n protected _next(value: T): void {\n this.destination.next(value);\n }\n\n protected _error(err: any): void {\n try {\n this.destination.error(err);\n } finally {\n this.unsubscribe();\n }\n }\n\n protected _complete(): void {\n try {\n this.destination.complete();\n } finally {\n this.unsubscribe();\n }\n }\n}\n\nexport class SafeSubscriber extends Subscriber {\n constructor(\n observerOrNext?: Partial> | ((value: T) => void) | null,\n error?: ((e?: any) => void) | null,\n complete?: (() => void) | null\n ) {\n super();\n\n let next: ((value: T) => void) | undefined;\n if (isFunction(observerOrNext)) {\n // The first argument is a function, not an observer. The next\n // two arguments *could* be observers, or they could be empty.\n next = observerOrNext;\n } else if (observerOrNext) {\n // The first argument is an observer object, we have to pull the handlers\n // off and capture the owner object as the context. That is because we're\n // going to put them all in a new destination with ensured methods\n // for `next`, `error`, and `complete`. That's part of what makes this\n // the \"Safe\" Subscriber.\n ({ next, error, complete } = observerOrNext);\n let context: any;\n if (this && config.useDeprecatedNextContext) {\n // This is a deprecated path that made `this.unsubscribe()` available in\n // next handler functions passed to subscribe. This only exists behind a flag\n // now, as it is *very* slow.\n context = Object.create(observerOrNext);\n context.unsubscribe = () => this.unsubscribe();\n } else {\n context = observerOrNext;\n }\n next = next?.bind(context);\n error = error?.bind(context);\n complete = complete?.bind(context);\n }\n\n // Once we set the destination, the superclass `Subscriber` will\n // do it's magic in the `_next`, `_error`, and `_complete` methods.\n this.destination = {\n next: next ? wrapForErrorHandling(next, this) : noop,\n error: wrapForErrorHandling(error ?? defaultErrorHandler, this),\n complete: complete ? wrapForErrorHandling(complete, this) : noop,\n };\n }\n}\n\n/**\n * Wraps a user-provided handler (or our {@link defaultErrorHandler} in one case) to\n * ensure that any thrown errors are caught and handled appropriately.\n *\n * @param handler The handler to wrap\n * @param instance The SafeSubscriber instance we're going to mark if there's an error.\n */\nfunction wrapForErrorHandling(handler: (arg?: any) => void, instance: SafeSubscriber) {\n return (...args: any[]) => {\n try {\n handler(...args);\n } catch (err) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(err);\n } else {\n // Ideal path, we report this as an unhandled error,\n // which is thrown on a new call stack.\n reportUnhandledError(err);\n }\n }\n };\n}\n/**\n * An error handler used when no error handler was supplied\n * to the SafeSubscriber -- meaning no error handler was supplied\n * do the `subscribe` call on our observable.\n * @param err The error to handle\n */\nfunction defaultErrorHandler(err: any) {\n throw err;\n}\n\n/**\n * A handler for notifications that cannot be sent to a stopped subscriber.\n * @param notification The notification being sent\n * @param subscriber The stopped subscriber\n */\nfunction handleStoppedNotification(notification: ObservableNotification, subscriber: Subscriber) {\n const { onStoppedNotification } = config;\n onStoppedNotification && timeoutProvider.setTimeout(() => onStoppedNotification(notification, subscriber));\n}\n\n/**\n * The observer used as a stub for subscriptions where the user did not\n * pass any arguments to `subscribe`. Comes with the default error handling\n * behavior.\n */\nexport const EMPTY_OBSERVER: Readonly> & { closed: true } = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n","import { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { SubscriptionLike, TeardownLogic, Unsubscribable } from './types';\nimport { arrRemove } from './util/arrRemove';\n\n/**\n * Represents a disposable resource, such as the execution of an Observable. A\n * Subscription has one important method, `unsubscribe`, that takes no argument\n * and just disposes the resource held by the subscription.\n *\n * Additionally, subscriptions may be grouped together through the `add()`\n * method, which will attach a child Subscription to the current Subscription.\n * When a Subscription is unsubscribed, all its children (and its grandchildren)\n * will be unsubscribed as well.\n *\n * @class Subscription\n */\nexport class Subscription implements SubscriptionLike {\n /** @nocollapse */\n public static EMPTY = (() => {\n const empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n\n /**\n * A flag to indicate whether this Subscription has already been unsubscribed.\n */\n public closed = false;\n\n private _parentage: Subscription[] | Subscription | null = null;\n\n /**\n * The list of registered teardowns to execute upon unsubscription. Adding and removing from this\n * list occurs in the {@link #add} and {@link #remove} methods.\n */\n private _teardowns: Exclude[] | null = null;\n\n /**\n * @param initialTeardown A function executed first as part of the teardown\n * process that is kicked off when {@link #unsubscribe} is called.\n */\n constructor(private initialTeardown?: () => void) {}\n\n /**\n * Disposes the resources held by the subscription. May, for instance, cancel\n * an ongoing Observable execution or cancel any other type of work that\n * started when the Subscription was created.\n * @return {void}\n */\n unsubscribe(): void {\n let errors: any[] | undefined;\n\n if (!this.closed) {\n this.closed = true;\n\n // Remove this from it's parents.\n const { _parentage } = this;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n for (const parent of _parentage) {\n parent.remove(this);\n }\n } else {\n _parentage.remove(this);\n }\n }\n\n const { initialTeardown } = this;\n if (isFunction(initialTeardown)) {\n try {\n initialTeardown();\n } catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n\n const { _teardowns } = this;\n if (_teardowns) {\n this._teardowns = null;\n for (const teardown of _teardowns) {\n try {\n execTeardown(teardown);\n } catch (err) {\n errors = errors ?? [];\n if (err instanceof UnsubscriptionError) {\n errors = [...errors, ...err.errors];\n } else {\n errors.push(err);\n }\n }\n }\n }\n\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n }\n\n /**\n * Adds a teardown to this subscription, so that teardown will be unsubscribed/called\n * when this subscription is unsubscribed. If this subscription is already {@link #closed},\n * because it has already been unsubscribed, then whatever teardown is passed to it\n * will automatically be executed (unless the teardown itself is also a closed subscription).\n *\n * Closed Subscriptions cannot be added as teardowns to any subscription. Adding a closed\n * subscription to a any subscription will result in no operation. (A noop).\n *\n * Adding a subscription to itself, or adding `null` or `undefined` will not perform any\n * operation at all. (A noop).\n *\n * `Subscription` instances that are added to this instance will automatically remove themselves\n * if they are unsubscribed. Functions and {@link Unsubscribable} objects that you wish to remove\n * will need to be removed manually with {@link #remove}\n *\n * @param teardown The teardown logic to add to this subscription.\n */\n add(teardown: TeardownLogic): void {\n // Only add the teardown if it's not undefined\n // and don't add a subscription to itself.\n if (teardown && teardown !== this) {\n if (this.closed) {\n // If this subscription is already closed,\n // execute whatever teardown is handed to it automatically.\n execTeardown(teardown);\n } else {\n if (teardown instanceof Subscription) {\n // We don't add closed subscriptions, and we don't add the same subscription\n // twice. Subscription unsubscribe is idempotent.\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._teardowns = this._teardowns ?? []).push(teardown);\n }\n }\n }\n\n /**\n * Checks to see if a this subscription already has a particular parent.\n * This will signal that this subscription has already been added to the parent in question.\n * @param parent the parent to check for\n */\n private _hasParent(parent: Subscription) {\n const { _parentage } = this;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n }\n\n /**\n * Adds a parent to this subscription so it can be removed from the parent if it\n * unsubscribes on it's own.\n *\n * NOTE: THIS ASSUMES THAT {@link _hasParent} HAS ALREADY BEEN CHECKED.\n * @param parent The parent subscription to add\n */\n private _addParent(parent: Subscription) {\n const { _parentage } = this;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n }\n\n /**\n * Called on a child when it is removed via {@link #remove}.\n * @param parent The parent to remove\n */\n private _removeParent(parent: Subscription) {\n const { _parentage } = this;\n if (_parentage === parent) {\n this._parentage = null;\n } else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n }\n\n /**\n * Removes a teardown from this subscription that was previously added with the {@link #add} method.\n *\n * Note that `Subscription` instances, when unsubscribed, will automatically remove themselves\n * from every other `Subscription` they have been added to. This means that using the `remove` method\n * is not a common thing and should be used thoughtfully.\n *\n * If you add the same teardown instance of a function or an unsubscribable object to a `Subcription` instance\n * more than once, you will need to call `remove` the same number of times to remove all instances.\n *\n * All teardown instances are removed to free up memory upon unsubscription.\n *\n * @param teardown The teardown to remove from this subscription\n */\n remove(teardown: Exclude): void {\n const { _teardowns } = this;\n _teardowns && arrRemove(_teardowns, teardown);\n\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n }\n}\n\nexport const EMPTY_SUBSCRIPTION = Subscription.EMPTY;\n\nexport function isSubscription(value: any): value is Subscription {\n return (\n value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe))\n );\n}\n\nfunction execTeardown(teardown: Unsubscribable | (() => void)) {\n if (isFunction(teardown)) {\n teardown();\n } else {\n teardown.unsubscribe();\n }\n}\n","import { Subscriber } from './Subscriber';\nimport { ObservableNotification } from './types';\n\n/**\n * The {@link GlobalConfig} object for RxJS. It is used to configure things\n * like how to react on unhandled errors.\n */\nexport const config: GlobalConfig = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n\n/**\n * The global configuration object for RxJS, used to configure things\n * like how to react on unhandled errors. Accessible via {@link config}\n * object.\n */\nexport interface GlobalConfig {\n /**\n * A registration point for unhandled errors from RxJS. These are errors that\n * cannot were not handled by consuming code in the usual subscription path. For\n * example, if you have this configured, and you subscribe to an observable without\n * providing an error handler, errors from that subscription will end up here. This\n * will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onUnhandledError: ((err: any) => void) | null;\n\n /**\n * A registration point for notifications that cannot be sent to subscribers because they\n * have completed, errored or have been explicitly unsubscribed. By default, next, complete\n * and error notifications sent to stopped subscribers are noops. However, sometimes callers\n * might want a different behavior. For example, with sources that attempt to report errors\n * to stopped subscribers, a caller can configure RxJS to throw an unhandled error instead.\n * This will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onStoppedNotification: ((notification: ObservableNotification, subscriber: Subscriber) => void) | null;\n\n /**\n * The promise constructor used by default for {@link Observable#toPromise toPromise} and {@link Observable#forEach forEach}\n * methods.\n *\n * @deprecated As of version 8, RxJS will no longer support this sort of injection of a\n * Promise constructor. If you need a Promise implementation other than native promises,\n * please polyfill/patch Promise as you see appropriate. Will be removed in v8.\n */\n Promise?: PromiseConstructorLike;\n\n /**\n * If true, turns on synchronous error rethrowing, which is a deprecated behavior\n * in v6 and higher. This behavior enables bad patterns like wrapping a subscribe\n * call in a try/catch block. It also enables producer interference, a nasty bug\n * where a multicast can be broken for all observers by a downstream consumer with\n * an unhandled error. DO NOT USE THIS FLAG UNLESS IT'S NEEDED TO BUY TIME\n * FOR MIGRATION REASONS.\n *\n * @deprecated As of version 8, RxJS will no longer support synchronous throwing\n * of unhandled errors. All errors will be thrown on a separate call stack to prevent bad\n * behaviors described above. Will be removed in v8.\n */\n useDeprecatedSynchronousErrorHandling: boolean;\n\n /**\n * If true, enables an as-of-yet undocumented feature from v5: The ability to access\n * `unsubscribe()` via `this` context in `next` functions created in observers passed\n * to `subscribe`.\n *\n * This is being removed because the performance was severely problematic, and it could also cause\n * issues when types other than POJOs are passed to subscribe as subscribers, as they will likely have\n * their `this` context overwritten.\n *\n * @deprecated As of version 8, RxJS will no longer support altering the\n * context of next functions provided as part of an observer to Subscribe. Instead,\n * you will have access to a subscription or a signal or token that will allow you to do things like\n * unsubscribe and test closed status. Will be removed in v8.\n */\n useDeprecatedNextContext: boolean;\n}\n","import { Subject } from '../Subject';\nimport { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { Subscription } from '../Subscription';\nimport { refCount as higherOrderRefCount } from '../operators/refCount';\nimport { OperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { hasLift } from '../util/lift';\n\n/**\n * @class ConnectableObservable\n * @deprecated Will be removed in v8. Use {@link connectable} to create a connectable observable.\n * If you are using the `refCount` method of `ConnectableObservable`, use the {@link share} operator\n * instead.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport class ConnectableObservable extends Observable {\n protected _subject: Subject | null = null;\n protected _refCount: number = 0;\n protected _connection: Subscription | null = null;\n\n /**\n * @param source The source observable\n * @param subjectFactory The factory that creates the subject used internally.\n * @deprecated Will be removed in v8. Use {@link connectable} to create a connectable observable.\n * `new ConnectableObservable(source, factory)` is equivalent to\n * `connectable(source, { connector: factory })`.\n * When the `refCount()` method is needed, the {@link share} operator should be used instead:\n * `new ConnectableObservable(source, factory).refCount()` is equivalent to\n * `source.pipe(share({ connector: factory }))`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\n constructor(public source: Observable, protected subjectFactory: () => Subject) {\n super();\n // If we have lift, monkey patch that here. This is done so custom observable\n // types will compose through multicast. Otherwise the resulting observable would\n // simply be an instance of `ConnectableObservable`.\n if (hasLift(source)) {\n this.lift = source.lift;\n }\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber) {\n return this.getSubject().subscribe(subscriber);\n }\n\n protected getSubject(): Subject {\n const subject = this._subject;\n if (!subject || subject.isStopped) {\n this._subject = this.subjectFactory();\n }\n return this._subject!;\n }\n\n protected _teardown() {\n this._refCount = 0;\n const { _connection } = this;\n this._subject = this._connection = null;\n _connection?.unsubscribe();\n }\n\n /**\n * @deprecated {@link ConnectableObservable} will be removed in v8. Use {@link connectable} instead.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\n connect(): Subscription {\n let connection = this._connection;\n if (!connection) {\n connection = this._connection = new Subscription();\n const subject = this.getSubject();\n connection.add(\n this.source.subscribe(\n new OperatorSubscriber(\n subject as any,\n undefined,\n () => {\n this._teardown();\n subject.complete();\n },\n (err) => {\n this._teardown();\n subject.error(err);\n },\n () => this._teardown()\n )\n )\n );\n\n if (connection.closed) {\n this._connection = null;\n connection = Subscription.EMPTY;\n }\n }\n return connection;\n }\n\n /**\n * @deprecated {@link ConnectableObservable} will be removed in v8. Use the {@link share} operator instead.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\n refCount(): Observable {\n return higherOrderRefCount()(this) as Observable;\n }\n}\n","import { Observable } from '../Observable';\nimport { ObservableInput, SchedulerLike, ObservedValueOf, ObservableInputTuple } from '../types';\nimport { argsArgArrayOrObject } from '../util/argsArgArrayOrObject';\nimport { Subscriber } from '../Subscriber';\nimport { from } from './from';\nimport { identity } from '../util/identity';\nimport { Subscription } from '../Subscription';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { popResultSelector, popScheduler } from '../util/args';\nimport { createObject } from '../util/createObject';\nimport { OperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { AnyCatcher } from '../AnyCatcher';\nimport { executeSchedule } from '../util/executeSchedule';\n\n// combineLatest(any)\n// We put this first because we need to catch cases where the user has supplied\n// _exactly `any`_ as the argument. Since `any` literally matches _anything_,\n// we don't want it to randomly hit one of the other type signatures below,\n// as we have no idea at build-time what type we should be returning when given an any.\n\n/**\n * You have passed `any` here, we can't figure out if it is\n * an array or an object, so you're getting `unknown`. Use better types.\n * @param arg Something typed as `any`\n */\nexport function combineLatest(arg: T): Observable;\n\n// combineLatest([a, b, c])\nexport function combineLatest(sources: []): Observable;\nexport function combineLatest(sources: readonly [...ObservableInputTuple]): Observable;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `combineLatestAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function combineLatest(\n sources: readonly [...ObservableInputTuple],\n resultSelector: (...values: A) => R,\n scheduler: SchedulerLike\n): Observable;\nexport function combineLatest(\n sources: readonly [...ObservableInputTuple],\n resultSelector: (...values: A) => R\n): Observable;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `combineLatestAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function combineLatest(\n sources: readonly [...ObservableInputTuple],\n scheduler: SchedulerLike\n): Observable;\n\n// combineLatest(a, b, c)\n/** @deprecated Pass an array of sources instead. The rest-parameters signature will be removed in v8. Details: https://rxjs.dev/deprecations/array-argument */\nexport function combineLatest(...sources: [...ObservableInputTuple]): Observable;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `combineLatestAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function combineLatest(\n ...sourcesAndResultSelectorAndScheduler: [...ObservableInputTuple, (...values: A) => R, SchedulerLike]\n): Observable;\n/** @deprecated Pass an array of sources instead. The rest-parameters signature will be removed in v8. Details: https://rxjs.dev/deprecations/array-argument */\nexport function combineLatest(\n ...sourcesAndResultSelector: [...ObservableInputTuple, (...values: A) => R]\n): Observable;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `combineLatestAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function combineLatest(\n ...sourcesAndScheduler: [...ObservableInputTuple, SchedulerLike]\n): Observable;\n\n// combineLatest({a, b, c})\nexport function combineLatest(sourcesObject: { [K in any]: never }): Observable;\nexport function combineLatest>>(\n sourcesObject: T\n): Observable<{ [K in keyof T]: ObservedValueOf }>;\n\n/**\n * Combines multiple Observables to create an Observable whose values are\n * calculated from the latest values of each of its input Observables.\n *\n * Whenever any input Observable emits a value, it\n * computes a formula using the latest values from all the inputs, then emits\n * the output of that formula.\n *\n * ![](combineLatest.png)\n *\n * `combineLatest` combines the values from all the Observables passed in the\n * observables array. This is done by subscribing to each Observable in order and,\n * whenever any Observable emits, collecting an array of the most recent\n * values from each Observable. So if you pass `n` Observables to this operator,\n * the returned Observable will always emit an array of `n` values, in an order\n * corresponding to the order of the passed Observables (the value from the first Observable\n * will be at index 0 of the array and so on).\n *\n * Static version of `combineLatest` accepts an array of Observables. Note that an array of\n * Observables is a good choice, if you don't know beforehand how many Observables\n * you will combine. Passing an empty array will result in an Observable that\n * completes immediately.\n *\n * To ensure the output array always has the same length, `combineLatest` will\n * actually wait for all input Observables to emit at least once,\n * before it starts emitting results. This means if some Observable emits\n * values before other Observables started emitting, all these values but the last\n * will be lost. On the other hand, if some Observable does not emit a value but\n * completes, resulting Observable will complete at the same moment without\n * emitting anything, since it will now be impossible to include a value from the\n * completed Observable in the resulting array. Also, if some input Observable does\n * not emit any value and never completes, `combineLatest` will also never emit\n * and never complete, since, again, it will wait for all streams to emit some\n * value.\n *\n * If at least one Observable was passed to `combineLatest` and all passed Observables\n * emitted something, the resulting Observable will complete when all combined\n * streams complete. So even if some Observable completes, the result of\n * `combineLatest` will still emit values when other Observables do. In case\n * of a completed Observable, its value from now on will always be the last\n * emitted value. On the other hand, if any Observable errors, `combineLatest`\n * will error immediately as well, and all other Observables will be unsubscribed.\n *\n * ## Examples\n * ### Combine two timer Observables\n * ```ts\n * import { combineLatest, timer } from 'rxjs';\n *\n * const firstTimer = timer(0, 1000); // emit 0, 1, 2... after every second, starting from now\n * const secondTimer = timer(500, 1000); // emit 0, 1, 2... after every second, starting 0,5s from now\n * const combinedTimers = combineLatest([firstTimer, secondTimer]);\n * combinedTimers.subscribe(value => console.log(value));\n * // Logs\n * // [0, 0] after 0.5s\n * // [1, 0] after 1s\n * // [1, 1] after 1.5s\n * // [2, 1] after 2s\n * ```\n * ### Combine a dictionary of Observables\n * ```ts\n * import { combineLatest, of } from 'rxjs';\n * import { delay, startWith } from 'rxjs/operators';\n *\n * const observables = {\n * a: of(1).pipe(delay(1000), startWith(0)),\n * b: of(5).pipe(delay(5000), startWith(0)),\n * c: of(10).pipe(delay(10000), startWith(0))\n * };\n * const combined = combineLatest(observables);\n * combined.subscribe(value => console.log(value));\n * // Logs\n * // {a: 0, b: 0, c: 0} immediately\n * // {a: 1, b: 0, c: 0} after 1s\n * // {a: 1, b: 5, c: 0} after 5s\n * // {a: 1, b: 5, c: 10} after 10s\n * ```\n * ### Combine an array of Observables\n * ```ts\n * import { combineLatest, of } from 'rxjs';\n * import { delay, startWith } from 'rxjs/operators';\n *\n * const observables = [1, 5, 10].map(\n * n => of(n).pipe(\n * delay(n * 1000), // emit 0 and then emit n after n seconds\n * startWith(0),\n * )\n * );\n * const combined = combineLatest(observables);\n * combined.subscribe(value => console.log(value));\n * // Logs\n * // [0, 0, 0] immediately\n * // [1, 0, 0] after 1s\n * // [1, 5, 0] after 5s\n * // [1, 5, 10] after 10s\n * ```\n *\n *\n * ### Use map operator to dynamically calculate the Body-Mass Index\n * ```ts\n * import { combineLatest, of } from 'rxjs';\n * import { map } from 'rxjs/operators';\n *\n * const weight = of(70, 72, 76, 79, 75);\n * const height = of(1.76, 1.77, 1.78);\n * const bmi = combineLatest([weight, height]).pipe(\n * map(([w, h]) => w / (h * h)),\n * );\n * bmi.subscribe(x => console.log('BMI is ' + x));\n *\n * // With output to console:\n * // BMI is 24.212293388429753\n * // BMI is 23.93948099205209\n * // BMI is 23.671253629592222\n * ```\n *\n * @see {@link combineLatestAll}\n * @see {@link merge}\n * @see {@link withLatestFrom}\n *\n * @param {ObservableInput} [observables] An array of input Observables to combine with each other.\n * An array of Observables must be given as the first argument.\n * @param {function} [project] An optional function to project the values from\n * the combined latest values into a new value on the output Observable.\n * @param {SchedulerLike} [scheduler=null] The {@link SchedulerLike} to use for subscribing to\n * each input Observable.\n * @return {Observable} An Observable of projected values from the most recent\n * values from each input Observable, or an array of the most recent values from\n * each input Observable.\n */\nexport function combineLatest, R>(...args: any[]): Observable | Observable[]> {\n const scheduler = popScheduler(args);\n const resultSelector = popResultSelector(args);\n\n const { args: observables, keys } = argsArgArrayOrObject(args);\n\n if (observables.length === 0) {\n // If no observables are passed, or someone has passed an ampty array\n // of observables, or even an empty object POJO, we need to just\n // complete (EMPTY), but we have to honor the scheduler provided if any.\n return from([], scheduler as any);\n }\n\n const result = new Observable[]>(\n combineLatestInit(\n observables as ObservableInput>[],\n scheduler,\n keys\n ? // A handler for scrubbing the array of args into a dictionary.\n (values) => createObject(keys, values)\n : // A passthrough to just return the array\n identity\n )\n );\n\n return resultSelector ? (result.pipe(mapOneOrManyArgs(resultSelector)) as Observable) : result;\n}\n\nexport function combineLatestInit(\n observables: ObservableInput[],\n scheduler?: SchedulerLike,\n valueTransform: (values: any[]) => any = identity\n) {\n return (subscriber: Subscriber) => {\n // The outer subscription. We're capturing this in a function\n // because we may have to schedule it.\n maybeSchedule(\n scheduler,\n () => {\n const { length } = observables;\n // A store for the values each observable has emitted so far. We match observable to value on index.\n const values = new Array(length);\n // The number of currently active subscriptions, as they complete, we decrement this number to see if\n // we are all done combining values, so we can complete the result.\n let active = length;\n // The number of inner sources that still haven't emitted the first value\n // We need to track this because all sources need to emit one value in order\n // to start emitting values.\n let remainingFirstValues = length;\n // The loop to kick off subscription. We're keying everything on index `i` to relate the observables passed\n // in to the slot in the output array or the key in the array of keys in the output dictionary.\n for (let i = 0; i < length; i++) {\n maybeSchedule(\n scheduler,\n () => {\n const source = from(observables[i], scheduler as any);\n let hasFirstValue = false;\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n // When we get a value, record it in our set of values.\n values[i] = value;\n if (!hasFirstValue) {\n // If this is our first value, record that.\n hasFirstValue = true;\n remainingFirstValues--;\n }\n if (!remainingFirstValues) {\n // We're not waiting for any more\n // first values, so we can emit!\n subscriber.next(valueTransform(values.slice()));\n }\n },\n () => {\n if (!--active) {\n // We only complete the result if we have no more active\n // inner observables.\n subscriber.complete();\n }\n }\n )\n );\n },\n subscriber\n );\n }\n },\n subscriber\n );\n };\n}\n\n/**\n * A small utility to handle the couple of locations where we want to schedule if a scheduler was provided,\n * but we don't if there was no scheduler.\n */\nfunction maybeSchedule(scheduler: SchedulerLike | undefined, execute: () => void, subscription: Subscription) {\n if (scheduler) {\n executeSchedule(subscription, scheduler, execute);\n } else {\n execute();\n }\n}\n","import { Observable } from '../Observable';\nimport { ObservableInputTuple, SchedulerLike } from '../types';\nimport { concatAll } from '../operators/concatAll';\nimport { popScheduler } from '../util/args';\nimport { from } from './from';\n\nexport function concat(...inputs: [...ObservableInputTuple]): Observable;\nexport function concat(\n ...inputsAndScheduler: [...ObservableInputTuple, SchedulerLike]\n): Observable;\n\n/**\n * Creates an output Observable which sequentially emits all values from the first given\n * Observable and then moves on to the next.\n *\n * Concatenates multiple Observables together by\n * sequentially emitting their values, one Observable after the other.\n *\n * ![](concat.png)\n *\n * `concat` joins multiple Observables together, by subscribing to them one at a time and\n * merging their results into the output Observable. You can pass either an array of\n * Observables, or put them directly as arguments. Passing an empty array will result\n * in Observable that completes immediately.\n *\n * `concat` will subscribe to first input Observable and emit all its values, without\n * changing or affecting them in any way. When that Observable completes, it will\n * subscribe to then next Observable passed and, again, emit its values. This will be\n * repeated, until the operator runs out of Observables. When last input Observable completes,\n * `concat` will complete as well. At any given moment only one Observable passed to operator\n * emits values. If you would like to emit values from passed Observables concurrently, check out\n * {@link merge} instead, especially with optional `concurrent` parameter. As a matter of fact,\n * `concat` is an equivalent of `merge` operator with `concurrent` parameter set to `1`.\n *\n * Note that if some input Observable never completes, `concat` will also never complete\n * and Observables following the one that did not complete will never be subscribed. On the other\n * hand, if some Observable simply completes immediately after it is subscribed, it will be\n * invisible for `concat`, which will just move on to the next Observable.\n *\n * If any Observable in chain errors, instead of passing control to the next Observable,\n * `concat` will error immediately as well. Observables that would be subscribed after\n * the one that emitted error, never will.\n *\n * If you pass to `concat` the same Observable many times, its stream of values\n * will be \"replayed\" on every subscription, which means you can repeat given Observable\n * as many times as you like. If passing the same Observable to `concat` 1000 times becomes tedious,\n * you can always use {@link repeat}.\n *\n * ## Examples\n * ### Concatenate a timer counting from 0 to 3 with a synchronous sequence from 1 to 10\n * ```ts\n * import { concat, interval, range } from 'rxjs';\n * import { take } from 'rxjs/operators';\n *\n * const timer = interval(1000).pipe(take(4));\n * const sequence = range(1, 10);\n * const result = concat(timer, sequence);\n * result.subscribe(x => console.log(x));\n *\n * // results in:\n * // 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3 -immediate-> 1 ... 10\n * ```\n *\n * ### Concatenate 3 Observables\n * ```ts\n * import { concat, interval } from 'rxjs';\n * import { take } from 'rxjs/operators';\n *\n * const timer1 = interval(1000).pipe(take(10));\n * const timer2 = interval(2000).pipe(take(6));\n * const timer3 = interval(500).pipe(take(10));\n *\n * const result = concat(timer1, timer2, timer3);\n * result.subscribe(x => console.log(x));\n *\n * // results in the following:\n * // (Prints to console sequentially)\n * // -1000ms-> 0 -1000ms-> 1 -1000ms-> ... 9\n * // -2000ms-> 0 -2000ms-> 1 -2000ms-> ... 5\n * // -500ms-> 0 -500ms-> 1 -500ms-> ... 9\n * ```\n *\n * ### Concatenate the same Observable to repeat it\n * ```ts\n * import { concat, interval } from 'rxjs';\n * import { take } from 'rxjs/operators';\n *\n * const timer = interval(1000).pipe(take(2));\n *\n * concat(timer, timer) // concatenating the same Observable!\n * .subscribe(\n * value => console.log(value),\n * err => {},\n * () => console.log('...and it is done!')\n * );\n *\n * // Logs:\n * // 0 after 1s\n * // 1 after 2s\n * // 0 after 3s\n * // 1 after 4s\n * // \"...and it is done!\" also after 4s\n * ```\n *\n * @see {@link concatAll}\n * @see {@link concatMap}\n * @see {@link concatMapTo}\n * @see {@link startWith}\n * @see {@link endWith}\n *\n * @param input1 An input Observable to concatenate with others.\n * @param input2 An input Observable to concatenate with others.\n * More than one input Observables may be given as argument.\n * @param scheduler An optional {@link SchedulerLike} to schedule each\n * Observable subscription on.\n */\nexport function concat(...args: any[]): Observable {\n return concatAll()(from(args, popScheduler(args)));\n}\n","import { Observable } from '../Observable';\nimport { ObservedValueOf, ObservableInput } from '../types';\nimport { innerFrom } from './innerFrom';\n\n/**\n * Creates an Observable that, on subscribe, calls an Observable factory to\n * make an Observable for each new Observer.\n *\n * Creates the Observable lazily, that is, only when it\n * is subscribed.\n * \n *\n * ![](defer.png)\n *\n * `defer` allows you to create an Observable only when the Observer\n * subscribes. It waits until an Observer subscribes to it, calls the given\n * factory function to get an Observable -- where a factory function typically\n * generates a new Observable -- and subscribes the Observer to this Observable.\n * In case the factory function returns a falsy value, then EMPTY is used as\n * Observable instead. Last but not least, an exception during the factory\n * function call is transferred to the Observer by calling `error`.\n *\n * ## Example\n * ### Subscribe to either an Observable of clicks or an Observable of interval, at random\n * ```ts\n * import { defer, fromEvent, interval } from 'rxjs';\n *\n * const clicksOrInterval = defer(function () {\n * return Math.random() > 0.5\n * ? fromEvent(document, 'click')\n * : interval(1000);\n * });\n * clicksOrInterval.subscribe(x => console.log(x));\n *\n * // Results in the following behavior:\n * // If the result of Math.random() is greater than 0.5 it will listen\n * // for clicks anywhere on the \"document\"; when document is clicked it\n * // will log a MouseEvent object to the console. If the result is less\n * // than 0.5 it will emit ascending numbers, one every second(1000ms).\n * ```\n *\n * @see {@link Observable}\n *\n * @param {function(): ObservableInput} observableFactory The Observable\n * factory function to invoke for each Observer that subscribes to the output\n * Observable. May also return a Promise, which will be converted on the fly\n * to an Observable.\n * @return {Observable} An Observable whose Observers' subscriptions trigger\n * an invocation of the given Observable factory function.\n */\nexport function defer>(observableFactory: () => R): Observable> {\n return new Observable>((subscriber) => {\n innerFrom(observableFactory()).subscribe(subscriber);\n });\n}\n","import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\n\n/**\n * The same Observable instance returned by any call to {@link empty} without a\n * `scheduler`. It is preferable to use this over `empty()`.\n *\n * Just emits 'complete', and nothing else.\n *\n * ![](empty.png)\n *\n * ## Examples\n *\n * ### Log complete notification\n *\n * ```ts\n * import { EMPTY } from 'rxjs';\n *\n * EMPTY.subscribe({\n * next: () => console.log('Next'),\n * complete: () => console.log('Complete!')\n * });\n *\n * // Outputs\n * // Complete!\n * ```\n */\nexport const EMPTY = new Observable((subscriber) => subscriber.complete());\n\n/**\n * Creates an Observable that emits no items to the Observer and immediately\n * emits a complete notification.\n *\n * Just emits 'complete', and nothing else.\n *\n * ![](empty.png)\n *\n * This static operator is useful for creating a simple Observable that only\n * emits the complete notification. It can be used for composing with other\n * Observables, such as in a {@link mergeMap}.\n *\n * ## Examples\n *\n * ### Emit the number 7, then complete\n *\n * ```ts\n * import { empty } from 'rxjs';\n * import { startWith } from 'rxjs/operators';\n *\n * const result = empty().pipe(startWith(7));\n * result.subscribe(x => console.log(x));\n *\n * // Outputs\n * // 7\n * ```\n *\n * ### Map and flatten only odd numbers to the sequence 'a', 'b', 'c'\n *\n * ```ts\n * import { empty, interval, of } from 'rxjs';\n * import { mergeMap } from 'rxjs/operators';\n *\n * const interval$ = interval(1000);\n * const result = interval$.pipe(\n * mergeMap(x => x % 2 === 1 ? of('a', 'b', 'c') : empty()),\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following to the console:\n * // x is equal to the count on the interval, e.g. (0, 1, 2, 3, ...)\n * // x will occur every 1000ms\n * // if x % 2 is equal to 1, print a, b, c (each on its own)\n * // if x % 2 is not equal to 1, nothing will be output\n * ```\n *\n * @see {@link Observable}\n * @see {@link never}\n * @see {@link of}\n * @see {@link throwError}\n *\n * @param scheduler A {@link SchedulerLike} to use for scheduling\n * the emission of the complete notification.\n * @return An \"empty\" Observable: emits only the complete\n * notification.\n * @deprecated Replaced with the {@link EMPTY} constant or {@link scheduled} (e.g. `scheduled([], scheduler)`). Will be removed in v8.\n */\nexport function empty(scheduler?: SchedulerLike) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\n\nfunction emptyScheduled(scheduler: SchedulerLike) {\n return new Observable((subscriber) => scheduler.schedule(() => subscriber.complete()));\n}\n","import { Observable } from '../Observable';\nimport { ObservedValueOf, ObservableInputTuple, ObservableInput } from '../types';\nimport { argsArgArrayOrObject } from '../util/argsArgArrayOrObject';\nimport { innerFrom } from './innerFrom';\nimport { popResultSelector } from '../util/args';\nimport { OperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { createObject } from '../util/createObject';\nimport { AnyCatcher } from '../AnyCatcher';\n\n// forkJoin(any)\n// We put this first because we need to catch cases where the user has supplied\n// _exactly `any`_ as the argument. Since `any` literally matches _anything_,\n// we don't want it to randomly hit one of the other type signatures below,\n// as we have no idea at build-time what type we should be returning when given an any.\n\n/**\n * You have passed `any` here, we can't figure out if it is\n * an array or an object, so you're getting `unknown`. Use better types.\n * @param arg Something typed as `any`\n */\nexport function forkJoin(arg: T): Observable;\n\n// forkJoin(null | undefined)\nexport function forkJoin(scheduler: null | undefined): Observable;\n\n// forkJoin([a, b, c])\nexport function forkJoin(sources: readonly []): Observable;\nexport function forkJoin(sources: readonly [...ObservableInputTuple]): Observable;\nexport function forkJoin(\n sources: readonly [...ObservableInputTuple],\n resultSelector: (...values: A) => R\n): Observable;\n\n// forkJoin(a, b, c)\n/** @deprecated Pass an array of sources instead. The rest-parameters signature will be removed in v8. Details: https://rxjs.dev/deprecations/array-argument */\nexport function forkJoin(...sources: [...ObservableInputTuple]): Observable;\n/** @deprecated Pass an array of sources instead. The rest-parameters signature will be removed in v8. Details: https://rxjs.dev/deprecations/array-argument */\nexport function forkJoin(\n ...sourcesAndResultSelector: [...ObservableInputTuple, (...values: A) => R]\n): Observable;\n\n// forkJoin({a, b, c})\nexport function forkJoin(sourcesObject: { [K in any]: never }): Observable;\nexport function forkJoin>>(\n sourcesObject: T\n): Observable<{ [K in keyof T]: ObservedValueOf }>;\n\n/**\n * Accepts an `Array` of {@link ObservableInput} or a dictionary `Object` of {@link ObservableInput} and returns\n * an {@link Observable} that emits either an array of values in the exact same order as the passed array,\n * or a dictionary of values in the same shape as the passed dictionary.\n *\n * Wait for Observables to complete and then combine last values they emitted;\n * complete immediately if an empty array is passed.\n *\n * ![](forkJoin.png)\n *\n * `forkJoin` is an operator that takes any number of input observables which can be passed either as an array\n * or a dictionary of input observables. If no input observables are provided (e.g. an empty array is passed),\n * then the resulting stream will complete immediately.\n *\n * `forkJoin` will wait for all passed observables to emit and complete and then it will emit an array or an object with last\n * values from corresponding observables.\n *\n * If you pass an array of `n` observables to the operator, then the resulting\n * array will have `n` values, where the first value is the last one emitted by the first observable,\n * second value is the last one emitted by the second observable and so on.\n *\n * If you pass a dictionary of observables to the operator, then the resulting\n * objects will have the same keys as the dictionary passed, with their last values they have emitted\n * located at the corresponding key.\n *\n * That means `forkJoin` will not emit more than once and it will complete after that. If you need to emit combined\n * values not only at the end of the lifecycle of passed observables, but also throughout it, try out {@link combineLatest}\n * or {@link zip} instead.\n *\n * In order for the resulting array to have the same length as the number of input observables, whenever any of\n * the given observables completes without emitting any value, `forkJoin` will complete at that moment as well\n * and it will not emit anything either, even if it already has some last values from other observables.\n * Conversely, if there is an observable that never completes, `forkJoin` will never complete either,\n * unless at any point some other observable completes without emitting a value, which brings us back to\n * the previous case. Overall, in order for `forkJoin` to emit a value, all given observables\n * have to emit something at least once and complete.\n *\n * If any given observable errors at some point, `forkJoin` will error as well and immediately unsubscribe\n * from the other observables.\n *\n * Optionally `forkJoin` accepts a `resultSelector` function, that will be called with values which normally\n * would land in the emitted array. Whatever is returned by the `resultSelector`, will appear in the output\n * observable instead. This means that the default `resultSelector` can be thought of as a function that takes\n * all its arguments and puts them into an array. Note that the `resultSelector` will be called only\n * when `forkJoin` is supposed to emit a result.\n *\n * ## Examples\n *\n * ### Use forkJoin with a dictionary of observable inputs\n * ```ts\n * import { forkJoin, of, timer } from 'rxjs';\n *\n * const observable = forkJoin({\n * foo: of(1, 2, 3, 4),\n * bar: Promise.resolve(8),\n * baz: timer(4000),\n * });\n * observable.subscribe({\n * next: value => console.log(value),\n * complete: () => console.log('This is how it ends!'),\n * });\n *\n * // Logs:\n * // { foo: 4, bar: 8, baz: 0 } after 4 seconds\n * // \"This is how it ends!\" immediately after\n * ```\n *\n * ### Use forkJoin with an array of observable inputs\n * ```ts\n * import { forkJoin, of, timer } from 'rxjs';\n *\n * const observable = forkJoin([\n * of(1, 2, 3, 4),\n * Promise.resolve(8),\n * timer(4000),\n * ]);\n * observable.subscribe({\n * next: value => console.log(value),\n * complete: () => console.log('This is how it ends!'),\n * });\n *\n * // Logs:\n * // [4, 8, 0] after 4 seconds\n * // \"This is how it ends!\" immediately after\n * ```\n *\n * @see {@link combineLatest}\n * @see {@link zip}\n *\n * @param {...ObservableInput} args Any number of Observables provided either as an array or as an arguments\n * passed directly to the operator.\n * @param {function} [project] Function that takes values emitted by input Observables and returns value\n * that will appear in resulting Observable instead of default array.\n * @return {Observable} Observable emitting either an array of last values emitted by passed Observables\n * or value from project function.\n */\nexport function forkJoin(...args: any[]): Observable {\n const resultSelector = popResultSelector(args);\n const { args: sources, keys } = argsArgArrayOrObject(args);\n const result = new Observable((subscriber) => {\n const { length } = sources;\n if (!length) {\n subscriber.complete();\n return;\n }\n const values = new Array(length);\n let remainingCompletions = length;\n let remainingEmissions = length;\n for (let sourceIndex = 0; sourceIndex < length; sourceIndex++) {\n let hasValue = false;\n innerFrom(sources[sourceIndex]).subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n if (!hasValue) {\n hasValue = true;\n remainingEmissions--;\n }\n values[sourceIndex] = value;\n },\n () => remainingCompletions--,\n undefined,\n () => {\n if (!remainingCompletions || !hasValue) {\n if (!remainingEmissions) {\n subscriber.next(keys ? createObject(keys, values) : values);\n }\n subscriber.complete();\n }\n }\n )\n );\n }\n });\n return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result;\n}\n","import { Observable } from '../Observable';\nimport { ObservableInput, SchedulerLike, ObservedValueOf } from '../types';\nimport { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\n\nexport function from>(input: O): Observable>;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function from>(input: O, scheduler: SchedulerLike | undefined): Observable>;\n\n/**\n * Creates an Observable from an Array, an array-like object, a Promise, an iterable object, or an Observable-like object.\n *\n * Converts almost anything to an Observable.\n *\n * ![](from.png)\n *\n * `from` converts various other objects and data types into Observables. It also converts a Promise, an array-like, or an\n * iterable\n * object into an Observable that emits the items in that promise, array, or iterable. A String, in this context, is treated\n * as an array of characters. Observable-like objects (contains a function named with the ES2015 Symbol for Observable) can also be\n * converted through this operator.\n *\n * ## Examples\n *\n * ### Converts an array to an Observable\n *\n * ```ts\n * import { from } from 'rxjs';\n *\n * const array = [10, 20, 30];\n * const result = from(array);\n *\n * result.subscribe(x => console.log(x));\n *\n * // Logs:\n * // 10\n * // 20\n * // 30\n * ```\n *\n * ---\n *\n * ### Convert an infinite iterable (from a generator) to an Observable\n *\n * ```ts\n * import { from } from 'rxjs';\n * import { take } from 'rxjs/operators';\n *\n * function* generateDoubles(seed) {\n * let i = seed;\n * while (true) {\n * yield i;\n * i = 2 * i; // double it\n * }\n * }\n *\n * const iterator = generateDoubles(3);\n * const result = from(iterator).pipe(take(10));\n *\n * result.subscribe(x => console.log(x));\n *\n * // Logs:\n * // 3\n * // 6\n * // 12\n * // 24\n * // 48\n * // 96\n * // 192\n * // 384\n * // 768\n * // 1536\n * ```\n *\n * ---\n *\n * ### With async scheduler\n *\n * ```ts\n * import { from, asyncScheduler } from 'rxjs';\n *\n * console.log('start');\n *\n * const array = [10, 20, 30];\n * const result = from(array, asyncScheduler);\n *\n * result.subscribe(x => console.log(x));\n *\n * console.log('end');\n *\n * // Logs:\n * // start\n * // end\n * // 10\n * // 20\n * // 30\n * ```\n *\n * @see {@link fromEvent}\n * @see {@link fromEventPattern}\n *\n * @param {ObservableInput} A subscription object, a Promise, an Observable-like,\n * an Array, an iterable, or an array-like object to be converted.\n * @param {SchedulerLike} An optional {@link SchedulerLike} on which to schedule the emission of values.\n * @return {Observable}\n */\nexport function from(input: ObservableInput, scheduler?: SchedulerLike): Observable {\n return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { Observable } from '../Observable';\nimport { mergeMap } from '../operators/mergeMap';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isFunction } from '../util/isFunction';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\n\n// These constants are used to create handler registry functions using array mapping below.\nconst nodeEventEmitterMethods = ['addListener', 'removeListener'] as const;\nconst eventTargetMethods = ['addEventListener', 'removeEventListener'] as const;\nconst jqueryMethods = ['on', 'off'] as const;\n\nexport interface NodeStyleEventEmitter {\n addListener(eventName: string | symbol, handler: NodeEventHandler): this;\n removeListener(eventName: string | symbol, handler: NodeEventHandler): this;\n}\n\nexport type NodeEventHandler = (...args: any[]) => void;\n\n// For APIs that implement `addListener` and `removeListener` methods that may\n// not use the same arguments or return EventEmitter values\n// such as React Native\nexport interface NodeCompatibleEventEmitter {\n addListener(eventName: string, handler: NodeEventHandler): void | {};\n removeListener(eventName: string, handler: NodeEventHandler): void | {};\n}\n\n// Use handler types like those in @types/jquery. See:\n// https://github.com/DefinitelyTyped/DefinitelyTyped/blob/847731ba1d7fa6db6b911c0e43aa0afe596e7723/types/jquery/misc.d.ts#L6395\nexport interface JQueryStyleEventEmitter {\n on(eventName: string, handler: (this: TContext, t: T, ...args: any[]) => any): void;\n off(eventName: string, handler: (this: TContext, t: T, ...args: any[]) => any): void;\n}\n\nexport interface EventListenerObject {\n handleEvent(evt: E): void;\n}\n\nexport interface HasEventTargetAddRemove {\n addEventListener(\n type: string,\n listener: ((evt: E) => void) | EventListenerObject | null,\n options?: boolean | AddEventListenerOptions\n ): void;\n removeEventListener(\n type: string,\n listener: ((evt: E) => void) | EventListenerObject | null,\n options?: EventListenerOptions | boolean\n ): void;\n}\n\nexport interface EventListenerOptions {\n capture?: boolean;\n passive?: boolean;\n once?: boolean;\n}\n\nexport interface AddEventListenerOptions extends EventListenerOptions {\n once?: boolean;\n passive?: boolean;\n}\n\nexport function fromEvent(target: HasEventTargetAddRemove | ArrayLike>, eventName: string): Observable;\nexport function fromEvent(\n target: HasEventTargetAddRemove | ArrayLike>,\n eventName: string,\n resultSelector: (event: T) => R\n): Observable;\nexport function fromEvent(\n target: HasEventTargetAddRemove | ArrayLike>,\n eventName: string,\n options: EventListenerOptions\n): Observable;\nexport function fromEvent(\n target: HasEventTargetAddRemove | ArrayLike>,\n eventName: string,\n options: EventListenerOptions,\n resultSelector: (event: T) => R\n): Observable;\n\nexport function fromEvent(target: NodeStyleEventEmitter | ArrayLike, eventName: string): Observable;\n/** @deprecated Do not specify explicit type parameters. Signatures with type parameters that cannot be inferred will be removed in v8. */\nexport function fromEvent(target: NodeStyleEventEmitter | ArrayLike, eventName: string): Observable;\nexport function fromEvent(\n target: NodeStyleEventEmitter | ArrayLike,\n eventName: string,\n resultSelector: (...args: any[]) => R\n): Observable;\n\nexport function fromEvent(\n target: NodeCompatibleEventEmitter | ArrayLike,\n eventName: string\n): Observable;\n/** @deprecated Do not specify explicit type parameters. Signatures with type parameters that cannot be inferred will be removed in v8. */\nexport function fromEvent(target: NodeCompatibleEventEmitter | ArrayLike, eventName: string): Observable;\nexport function fromEvent(\n target: NodeCompatibleEventEmitter | ArrayLike,\n eventName: string,\n resultSelector: (...args: any[]) => R\n): Observable;\n\nexport function fromEvent(\n target: JQueryStyleEventEmitter | ArrayLike>,\n eventName: string\n): Observable;\nexport function fromEvent(\n target: JQueryStyleEventEmitter | ArrayLike>,\n eventName: string,\n resultSelector: (value: T, ...args: any[]) => R\n): Observable;\n\n/**\n * Creates an Observable that emits events of a specific type coming from the\n * given event target.\n *\n * Creates an Observable from DOM events, or Node.js\n * EventEmitter events or others.\n *\n * ![](fromEvent.png)\n *\n * `fromEvent` accepts as a first argument event target, which is an object with methods\n * for registering event handler functions. As a second argument it takes string that indicates\n * type of event we want to listen for. `fromEvent` supports selected types of event targets,\n * which are described in detail below. If your event target does not match any of the ones listed,\n * you should use {@link fromEventPattern}, which can be used on arbitrary APIs.\n * When it comes to APIs supported by `fromEvent`, their methods for adding and removing event\n * handler functions have different names, but they all accept a string describing event type\n * and function itself, which will be called whenever said event happens.\n *\n * Every time resulting Observable is subscribed, event handler function will be registered\n * to event target on given event type. When that event fires, value\n * passed as a first argument to registered function will be emitted by output Observable.\n * When Observable is unsubscribed, function will be unregistered from event target.\n *\n * Note that if event target calls registered function with more than one argument, second\n * and following arguments will not appear in resulting stream. In order to get access to them,\n * you can pass to `fromEvent` optional project function, which will be called with all arguments\n * passed to event handler. Output Observable will then emit value returned by project function,\n * instead of the usual value.\n *\n * Remember that event targets listed below are checked via duck typing. It means that\n * no matter what kind of object you have and no matter what environment you work in,\n * you can safely use `fromEvent` on that object if it exposes described methods (provided\n * of course they behave as was described above). So for example if Node.js library exposes\n * event target which has the same method names as DOM EventTarget, `fromEvent` is still\n * a good choice.\n *\n * If the API you use is more callback then event handler oriented (subscribed\n * callback function fires only once and thus there is no need to manually\n * unregister it), you should use {@link bindCallback} or {@link bindNodeCallback}\n * instead.\n *\n * `fromEvent` supports following types of event targets:\n *\n * **DOM EventTarget**\n *\n * This is an object with `addEventListener` and `removeEventListener` methods.\n *\n * In the browser, `addEventListener` accepts - apart from event type string and event\n * handler function arguments - optional third parameter, which is either an object or boolean,\n * both used for additional configuration how and when passed function will be called. When\n * `fromEvent` is used with event target of that type, you can provide this values\n * as third parameter as well.\n *\n * **Node.js EventEmitter**\n *\n * An object with `addListener` and `removeListener` methods.\n *\n * **JQuery-style event target**\n *\n * An object with `on` and `off` methods\n *\n * **DOM NodeList**\n *\n * List of DOM Nodes, returned for example by `document.querySelectorAll` or `Node.childNodes`.\n *\n * Although this collection is not event target in itself, `fromEvent` will iterate over all Nodes\n * it contains and install event handler function in every of them. When returned Observable\n * is unsubscribed, function will be removed from all Nodes.\n *\n * **DOM HtmlCollection**\n *\n * Just as in case of NodeList it is a collection of DOM nodes. Here as well event handler function is\n * installed and removed in each of elements.\n *\n *\n * ## Examples\n * ### Emits clicks happening on the DOM document\n * ```ts\n * import { fromEvent } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * clicks.subscribe(x => console.log(x));\n *\n * // Results in:\n * // MouseEvent object logged to console every time a click\n * // occurs on the document.\n * ```\n *\n * ### Use addEventListener with capture option\n * ```ts\n * import { fromEvent } from 'rxjs';\n *\n * const clicksInDocument = fromEvent(document, 'click', true); // note optional configuration parameter\n * // which will be passed to addEventListener\n * const clicksInDiv = fromEvent(someDivInDocument, 'click');\n *\n * clicksInDocument.subscribe(() => console.log('document'));\n * clicksInDiv.subscribe(() => console.log('div'));\n *\n * // By default events bubble UP in DOM tree, so normally\n * // when we would click on div in document\n * // \"div\" would be logged first and then \"document\".\n * // Since we specified optional `capture` option, document\n * // will catch event when it goes DOWN DOM tree, so console\n * // will log \"document\" and then \"div\".\n * ```\n *\n * @see {@link bindCallback}\n * @see {@link bindNodeCallback}\n * @see {@link fromEventPattern}\n *\n * @param {FromEventTarget} target The DOM EventTarget, Node.js\n * EventEmitter, JQuery-like event target, NodeList or HTMLCollection to attach the event handler to.\n * @param {string} eventName The event name of interest, being emitted by the\n * `target`.\n * @param {EventListenerOptions} [options] Options to pass through to addEventListener\n * @return {Observable}\n */\nexport function fromEvent(\n target: any,\n eventName: string,\n options?: EventListenerOptions | ((...args: any[]) => T),\n resultSelector?: (...args: any[]) => T\n): Observable {\n if (isFunction(options)) {\n resultSelector = options;\n options = undefined;\n }\n if (resultSelector) {\n return fromEvent(target, eventName, options as EventListenerOptions).pipe(mapOneOrManyArgs(resultSelector));\n }\n\n // Figure out our add and remove methods. In order to do this,\n // we are going to analyze the target in a preferred order, if\n // the target matches a given signature, we take the two \"add\" and \"remove\"\n // method names and apply them to a map to create opposite versions of the\n // same function. This is because they all operate in duplicate pairs,\n // `addListener(name, handler)`, `removeListener(name, handler)`, for example.\n // The call only differs by method name, as to whether or not you're adding or removing.\n const [add, remove] =\n // If it is an EventTarget, we need to use a slightly different method than the other two patterns.\n isEventTarget(target)\n ? eventTargetMethods.map((methodName) => (handler: any) => target[methodName](eventName, handler, options as EventListenerOptions))\n : // In all other cases, the call pattern is identical with the exception of the method names.\n isNodeStyleEventEmitter(target)\n ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName))\n : isJQueryStyleEventEmitter(target)\n ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName))\n : [];\n\n // If add is falsy, it's because we didn't match a pattern above.\n // Check to see if it is an ArrayLike, because if it is, we want to\n // try to apply fromEvent to all of it's items. We do this check last,\n // because there are may be some types that are both ArrayLike *and* implement\n // event registry points, and we'd rather delegate to that when possible.\n if (!add) {\n if (isArrayLike(target)) {\n return mergeMap((subTarget: any) => fromEvent(subTarget, eventName, options as EventListenerOptions))(\n innerFrom(target)\n ) as Observable;\n }\n }\n\n // If add is falsy and we made it here, it's because we didn't\n // match any valid target objects above.\n if (!add) {\n throw new TypeError('Invalid event target');\n }\n\n return new Observable((subscriber) => {\n // The handler we are going to register. Forwards the event object, by itself, or\n // an array of arguments to the event handler, if there is more than one argument,\n // to the consumer.\n const handler = (...args: any[]) => subscriber.next(1 < args.length ? args : args[0]);\n // Do the work of adding the handler to the target.\n add(handler);\n // When we teardown, we want to remove the handler and free up memory.\n return () => remove!(handler);\n });\n}\n\n/**\n * Used to create `add` and `remove` functions to register and unregister event handlers\n * from a target in the most common handler pattern, where there are only two arguments.\n * (e.g. `on(name, fn)`, `off(name, fn)`, `addListener(name, fn)`, or `removeListener(name, fn)`)\n * @param target The target we're calling methods on\n * @param eventName The event name for the event we're creating register or unregister functions for\n */\nfunction toCommonHandlerRegistry(target: any, eventName: string) {\n return (methodName: string) => (handler: any) => target[methodName](eventName, handler);\n}\n\n/**\n * Checks to see if the target implements the required node-style EventEmitter methods\n * for adding and removing event handlers.\n * @param target the object to check\n */\nfunction isNodeStyleEventEmitter(target: any): target is NodeStyleEventEmitter {\n return isFunction(target.addListener) && isFunction(target.removeListener);\n}\n\n/**\n * Checks to see if the target implements the required jQuery-style EventEmitter methods\n * for adding and removing event handlers.\n * @param target the object to check\n */\nfunction isJQueryStyleEventEmitter(target: any): target is JQueryStyleEventEmitter {\n return isFunction(target.on) && isFunction(target.off);\n}\n\n/**\n * Checks to see if the target implements the required EventTarget methods\n * for adding and removing event handlers.\n * @param target the object to check\n */\nfunction isEventTarget(target: any): target is HasEventTargetAddRemove {\n return isFunction(target.addEventListener) && isFunction(target.removeEventListener);\n}\n","import { Observable } from '../Observable';\nimport { defer } from './defer';\nimport { ObservableInput } from '../types';\n\n/**\n * Checks a boolean at subscription time, and chooses between one of two observable sources\n *\n * `iif` excepts a function that returns a boolean (the `condition` function), and two sources,\n * the `trueResult` and the `falseResult`, and returns an Observable.\n *\n * At the moment of subscription, the `condition` function is called. If the result is `true`, the\n * subscription will be to the source passed as the `trueResult`, otherwise, the subscription will be\n * to the source passed as the `falseResult`.\n *\n * If you need to check more than two options to choose between more than one observable, have a look at the {@link defer} creation method.\n *\n * ## Examples\n *\n * ### Change at runtime which Observable will be subscribed\n *\n * ```ts\n * import { iif, of } from 'rxjs';\n *\n * let subscribeToFirst;\n * const firstOrSecond = iif(\n * () => subscribeToFirst,\n * of('first'),\n * of('second'),\n * );\n *\n * subscribeToFirst = true;\n * firstOrSecond.subscribe(value => console.log(value));\n *\n * // Logs:\n * // \"first\"\n *\n * subscribeToFirst = false;\n * firstOrSecond.subscribe(value => console.log(value));\n *\n * // Logs:\n * // \"second\"\n *\n * ```\n *\n * ### Control an access to an Observable\n *\n * ```ts\n * let accessGranted;\n * const observableIfYouHaveAccess = iif(\n * () => accessGranted,\n * of('It seems you have an access...'), // Note that only one Observable is passed to the operator.\n * );\n *\n * accessGranted = true;\n * observableIfYouHaveAccess.subscribe(\n * value => console.log(value),\n * err => {},\n * () => console.log('The end'),\n * );\n *\n * // Logs:\n * // \"It seems you have an access...\"\n * // \"The end\"\n *\n * accessGranted = false;\n * observableIfYouHaveAccess.subscribe(\n * value => console.log(value),\n * err => {},\n * () => console.log('The end'),\n * );\n *\n * // Logs:\n * // \"The end\"\n * ```\n *\n * @see {@link defer}\n *\n * @param condition Condition which Observable should be chosen.\n * @param trueResult An Observable that will be subscribed if condition is true.\n * @param falseResult An Observable that will be subscribed if condition is false.\n * @return An observable that proxies to `trueResult` or `falseResult`, depending on the result of the `condition` function.\n */\nexport function iif(condition: () => boolean, trueResult: ObservableInput, falseResult: ObservableInput): Observable {\n return defer(() => (condition() ? trueResult : falseResult));\n}\n","import { isArrayLike } from '../util/isArrayLike';\nimport { isPromise } from '../util/isPromise';\nimport { Observable } from '../Observable';\nimport { ObservableInput, ReadableStreamLike } from '../types';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isIterable } from '../util/isIterable';\nimport { isReadableStreamLike, readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nimport { Subscriber } from '../Subscriber';\nimport { isFunction } from '../util/isFunction';\nimport { reportUnhandledError } from '../util/reportUnhandledError';\nimport { observable as Symbol_observable } from '../symbol/observable';\n\nexport function innerFrom(input: ObservableInput): Observable {\n if (input instanceof Observable) {\n return input;\n }\n if (input != null) {\n if (isInteropObservable(input)) {\n return fromInteropObservable(input);\n }\n if (isArrayLike(input)) {\n return fromArrayLike(input);\n }\n if (isPromise(input)) {\n return fromPromise(input);\n }\n if (isAsyncIterable(input)) {\n return fromAsyncIterable(input);\n }\n if (isIterable(input)) {\n return fromIterable(input);\n }\n if (isReadableStreamLike(input)) {\n return fromReadableStreamLike(input);\n }\n }\n\n throw createInvalidObservableTypeError(input);\n}\n\n/**\n * Creates an RxJS Observable from an object that implements `Symbol.observable`.\n * @param obj An object that properly implements `Symbol.observable`.\n */\nexport function fromInteropObservable(obj: any) {\n return new Observable((subscriber: Subscriber) => {\n const obs = obj[Symbol_observable]();\n if (isFunction(obs.subscribe)) {\n return obs.subscribe(subscriber);\n }\n // Should be caught by observable subscribe function error handling.\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n });\n}\n\n/**\n * Synchronously emits the values of an array like and completes.\n * This is exported because there are creation functions and operators that need to\n * make direct use of the same logic, and there's no reason to make them run through\n * `from` conditionals because we *know* they're dealing with an array.\n * @param array The array to emit values from\n */\nexport function fromArrayLike(array: ArrayLike) {\n return new Observable((subscriber: Subscriber) => {\n // Loop over the array and emit each value. Note two things here:\n // 1. We're making sure that the subscriber is not closed on each loop.\n // This is so we don't continue looping over a very large array after\n // something like a `take`, `takeWhile`, or other synchronous unsubscription\n // has already unsubscribed.\n // 2. In this form, reentrant code can alter that array we're looping over.\n // This is a known issue, but considered an edge case. The alternative would\n // be to copy the array before executing the loop, but this has\n // performance implications.\n for (let i = 0; i < array.length && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n });\n}\n\nexport function fromPromise(promise: PromiseLike) {\n return new Observable((subscriber: Subscriber) => {\n promise\n .then(\n (value) => {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n },\n (err: any) => subscriber.error(err)\n )\n .then(null, reportUnhandledError);\n });\n}\n\nexport function fromIterable(iterable: Iterable) {\n return new Observable((subscriber: Subscriber) => {\n for (const value of iterable) {\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n subscriber.complete();\n });\n}\n\nexport function fromAsyncIterable(asyncIterable: AsyncIterable) {\n return new Observable((subscriber: Subscriber) => {\n process(asyncIterable, subscriber).catch((err) => subscriber.error(err));\n });\n}\n\nexport function fromReadableStreamLike(readableStream: ReadableStreamLike) {\n return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));\n}\n\nasync function process(asyncIterable: AsyncIterable, subscriber: Subscriber) {\n for await (const value of asyncIterable) {\n subscriber.next(value);\n // A side-effect may have closed our subscriber,\n // check before the next iteration.\n if (subscriber.closed) {\n return;\n }\n }\n subscriber.complete();\n}\n","import { Observable } from '../Observable';\nimport { asyncScheduler } from '../scheduler/async';\nimport { SchedulerLike } from '../types';\nimport { timer } from './timer';\n\n/**\n * Creates an Observable that emits sequential numbers every specified\n * interval of time, on a specified {@link SchedulerLike}.\n *\n * Emits incremental numbers periodically in time.\n * \n *\n * ![](interval.png)\n *\n * `interval` returns an Observable that emits an infinite sequence of\n * ascending integers, with a constant interval of time of your choosing\n * between those emissions. The first emission is not sent immediately, but\n * only after the first period has passed. By default, this operator uses the\n * `async` {@link SchedulerLike} to provide a notion of time, but you may pass any\n * {@link SchedulerLike} to it.\n *\n * ## Example\n * Emits ascending numbers, one every second (1000ms) up to the number 3\n * ```ts\n * import { interval } from 'rxjs';\n * import { take } from 'rxjs/operators';\n *\n * const numbers = interval(1000);\n *\n * const takeFourNumbers = numbers.pipe(take(4));\n *\n * takeFourNumbers.subscribe(x => console.log('Next: ', x));\n *\n * // Logs:\n * // Next: 0\n * // Next: 1\n * // Next: 2\n * // Next: 3\n * ```\n *\n * @see {@link timer}\n * @see {@link delay}\n *\n * @param {number} [period=0] The interval size in milliseconds (by default)\n * or the time unit determined by the scheduler's clock.\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for scheduling\n * the emission of values, and providing a notion of \"time\".\n * @return {Observable} An Observable that emits a sequential number each time\n * interval.\n */\nexport function interval(period = 0, scheduler: SchedulerLike = asyncScheduler): Observable {\n if (period < 0) {\n // We cannot schedule an interval in the past.\n period = 0;\n }\n\n return timer(period, period, scheduler);\n}\n","import { Observable } from '../Observable';\nimport { ObservableInput, ObservableInputTuple, SchedulerLike } from '../types';\nimport { mergeAll } from '../operators/mergeAll';\nimport { innerFrom } from './innerFrom';\nimport { EMPTY } from './empty';\nimport { popNumber, popScheduler } from '../util/args';\nimport { from } from './from';\n\nexport function merge(...sources: [...ObservableInputTuple]): Observable;\nexport function merge(...sourcesAndConcurrency: [...ObservableInputTuple, number?]): Observable;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `mergeAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function merge(\n ...sourcesAndScheduler: [...ObservableInputTuple, SchedulerLike?]\n): Observable;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `mergeAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function merge(\n ...sourcesAndConcurrencyAndScheduler: [...ObservableInputTuple, number?, SchedulerLike?]\n): Observable;\n\n/**\n * Creates an output Observable which concurrently emits all values from every\n * given input Observable.\n *\n * Flattens multiple Observables together by blending\n * their values into one Observable.\n *\n * ![](merge.png)\n *\n * `merge` subscribes to each given input Observable (as arguments), and simply\n * forwards (without doing any transformation) all the values from all the input\n * Observables to the output Observable. The output Observable only completes\n * once all input Observables have completed. Any error delivered by an input\n * Observable will be immediately emitted on the output Observable.\n *\n * ## Examples\n * ### Merge together two Observables: 1s interval and clicks\n * ```ts\n * import { merge, fromEvent, interval } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const timer = interval(1000);\n * const clicksOrTimer = merge(clicks, timer);\n * clicksOrTimer.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // timer will emit ascending values, one every second(1000ms) to console\n * // clicks logs MouseEvents to console everytime the \"document\" is clicked\n * // Since the two streams are merged you see these happening\n * // as they occur.\n * ```\n *\n * ### Merge together 3 Observables, but only 2 run concurrently\n * ```ts\n * import { merge, interval } from 'rxjs';\n * import { take } from 'rxjs/operators';\n *\n * const timer1 = interval(1000).pipe(take(10));\n * const timer2 = interval(2000).pipe(take(6));\n * const timer3 = interval(500).pipe(take(10));\n * const concurrent = 2; // the argument\n * const merged = merge(timer1, timer2, timer3, concurrent);\n * merged.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // - First timer1 and timer2 will run concurrently\n * // - timer1 will emit a value every 1000ms for 10 iterations\n * // - timer2 will emit a value every 2000ms for 6 iterations\n * // - after timer1 hits its max iteration, timer2 will\n * // continue, and timer3 will start to run concurrently with timer2\n * // - when timer2 hits its max iteration it terminates, and\n * // timer3 will continue to emit a value every 500ms until it is complete\n * ```\n *\n * @see {@link mergeAll}\n * @see {@link mergeMap}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n *\n * @param {...ObservableInput} observables Input Observables to merge together.\n * @param {number} [concurrent=Infinity] Maximum number of input\n * Observables being subscribed to concurrently.\n * @param {SchedulerLike} [scheduler=null] The {@link SchedulerLike} to use for managing\n * concurrency of input Observables.\n * @return {Observable} an Observable that emits items that are the result of\n * every input Observable.\n */\nexport function merge(...args: (ObservableInput | number | SchedulerLike)[]): Observable {\n const scheduler = popScheduler(args);\n const concurrent = popNumber(args, Infinity);\n const sources = args as ObservableInput[];\n return !sources.length\n ? // No source provided\n EMPTY\n : sources.length === 1\n ? // One source? Just return it.\n innerFrom(sources[0])\n : // Merge all sources\n mergeAll(concurrent)(from(sources, scheduler));\n}\n","import { Observable } from '../Observable';\nimport { noop } from '../util/noop';\n\n/**\n * An Observable that emits no items to the Observer and never completes.\n *\n * ![](never.png)\n *\n * A simple Observable that emits neither values nor errors nor the completion\n * notification. It can be used for testing purposes or for composing with other\n * Observables. Please note that by never emitting a complete notification, this\n * Observable keeps the subscription from being disposed automatically.\n * Subscriptions need to be manually disposed.\n *\n * ## Example\n * ### Emit the number 7, then never emit anything else (not even complete)\n * ```ts\n * import { NEVER } from 'rxjs';\n * import { startWith } from 'rxjs/operators';\n *\n * function info() {\n * console.log('Will not be called');\n * }\n * const result = NEVER.pipe(startWith(7));\n * result.subscribe(x => console.log(x), info, info);\n *\n * ```\n *\n * @see {@link Observable}\n * @see {@link index/EMPTY}\n * @see {@link of}\n * @see {@link throwError}\n */\nexport const NEVER = new Observable(noop);\n\n/**\n * @deprecated Replaced with the {@link NEVER} constant. Will be removed in v8.\n */\nexport function never() {\n return NEVER;\n}\n","import { SchedulerLike, ValueFromArray } from '../types';\nimport { Observable } from '../Observable';\nimport { popScheduler } from '../util/args';\nimport { from } from './from';\n\n// Devs are more likely to pass null or undefined than they are a scheduler\n// without accompanying values. To make things easier for (naughty) devs who\n// use the `strictNullChecks: false` TypeScript compiler option, these\n// overloads with explicit null and undefined values are included.\n\nexport function of(value: null): Observable;\nexport function of(value: undefined): Observable;\n\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function of(scheduler: SchedulerLike): Observable;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function of(...valuesAndScheduler: [...A, SchedulerLike]): Observable>;\n\nexport function of(): Observable;\n/** @deprecated Do not specify explicit type parameters. Signatures with type parameters that cannot be inferred will be removed in v8. */\nexport function of(): Observable;\nexport function of(value: T): Observable;\nexport function of(...values: A): Observable>;\n\n/**\n * Converts the arguments to an observable sequence.\n *\n * Each argument becomes a `next` notification.\n *\n * ![](of.png)\n *\n * Unlike {@link from}, it does not do any flattening and emits each argument in whole\n * as a separate `next` notification.\n *\n * ## Examples\n *\n * Emit the values `10, 20, 30`\n *\n * ```ts\n * import { of } from 'rxjs';\n *\n * of(10, 20, 30)\n * .subscribe(\n * next => console.log('next:', next),\n * err => console.log('error:', err),\n * () => console.log('the end'),\n * );\n *\n * // Outputs\n * // next: 10\n * // next: 20\n * // next: 30\n * // the end\n * ```\n *\n * Emit the array `[1, 2, 3]`\n *\n * ```ts\n * import { of } from 'rxjs';\n *\n * of([1, 2, 3])\n * .subscribe(\n * next => console.log('next:', next),\n * err => console.log('error:', err),\n * () => console.log('the end'),\n * );\n *\n * // Outputs\n * // next: [1, 2, 3]\n * // the end\n * ```\n *\n * @see {@link from}\n * @see {@link range}\n *\n * @param {...T} values A comma separated list of arguments you want to be emitted\n * @return {Observable} An Observable that emits the arguments\n * described above and then completes.\n */\nexport function of(...args: Array): Observable {\n const scheduler = popScheduler(args);\n return from(args as T[], scheduler);\n}\n","import { Observable } from '../Observable';\nimport { innerFrom } from './innerFrom';\nimport { Subscription } from '../Subscription';\nimport { ObservableInput, ObservableInputTuple } from '../types';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { OperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { Subscriber } from '../Subscriber';\n\nexport function race(inputs: [...ObservableInputTuple]): Observable;\nexport function race(...inputs: [...ObservableInputTuple]): Observable;\n\n/**\n * Returns an observable that mirrors the first source observable to emit an item.\n *\n * ![](race.png)\n *\n * `race` returns an observable, that when subscribed to, subscribes to all source observables immediately.\n * As soon as one of the source observables emits a value, the result unsubscribes from the other sources.\n * The resulting observable will forward all notifications, including error and completion, from the \"winning\"\n * source observable.\n *\n * If one of the used source observable throws an errors before a first notification\n * the race operator will also throw an error, no matter if another source observable\n * could potentially win the race.\n *\n * `race` can be useful for selecting the response from the fastest network connection for\n * HTTP or WebSockets. `race` can also be useful for switching observable context based on user\n * input.\n *\n * ## Example\n * ### Subscribes to the observable that was the first to start emitting.\n *\n * ```ts\n * import { race, interval } from 'rxjs';\n * import { mapTo } from 'rxjs/operators';\n *\n * const obs1 = interval(1000).pipe(mapTo('fast one'));\n * const obs2 = interval(3000).pipe(mapTo('medium one'));\n * const obs3 = interval(5000).pipe(mapTo('slow one'));\n *\n * race(obs3, obs1, obs2)\n * .subscribe(\n * winner => console.log(winner)\n * );\n *\n * // Outputs\n * // a series of 'fast one'\n * ```\n *\n * @param {...Observables} ...observables sources used to race for which Observable emits first.\n * @return {Observable} an Observable that mirrors the output of the first Observable to emit an item.\n */\nexport function race(...sources: (ObservableInput | ObservableInput[])[]): Observable {\n sources = argsOrArgArray(sources);\n // If only one source was passed, just return it. Otherwise return the race.\n return sources.length === 1 ? innerFrom(sources[0] as ObservableInput) : new Observable(raceInit(sources as ObservableInput[]));\n}\n\n/**\n * An observable initializer function for both the static version and the\n * operator version of race.\n * @param sources The sources to race\n */\nexport function raceInit(sources: ObservableInput[]) {\n return (subscriber: Subscriber) => {\n let subscriptions: Subscription[] = [];\n\n // Subscribe to all of the sources. Note that we are checking `subscriptions` here\n // Is is an array of all actively \"racing\" subscriptions, and it is `null` after the\n // race has been won. So, if we have racer that synchronously \"wins\", this loop will\n // stop before it subscribes to any more.\n for (let i = 0; subscriptions && !subscriber.closed && i < sources.length; i++) {\n subscriptions.push(\n innerFrom(sources[i] as ObservableInput).subscribe(\n new OperatorSubscriber(subscriber, (value) => {\n if (subscriptions) {\n // We're still racing, but we won! So unsubscribe\n // all other subscriptions that we have, except this one.\n for (let s = 0; s < subscriptions.length; s++) {\n s !== i && subscriptions[s].unsubscribe();\n }\n subscriptions = null!;\n }\n subscriber.next(value);\n })\n )\n );\n }\n };\n}\n","import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { SchedulerLike } from '../types';\nimport { isFunction } from '../util/isFunction';\n\n/**\n * Creates an observable that will create an error instance and push it to the consumer as an error\n * immediately upon subscription.\n *\n * Just errors and does nothing else\n *\n * ![](throw.png)\n *\n * This creation function is useful for creating an observable that will create an error and error every\n * time it is subscribed to. Generally, inside of most operators when you might want to return an errored\n * observable, this is unnecessary. In most cases, such as in the inner return of {@link concatMap},\n * {@link mergeMap}, {@link defer}, and many others, you can simply throw the error, and RxJS will pick\n * that up and notify the consumer of the error.\n *\n * ## Example\n *\n * Create a simple observable that will create a new error with a timestamp and log it\n * and the message every time you subscribe to it.\n *\n * ```ts\n * import { throwError } from 'rxjs';\n *\n * let errorCount = 0;\n *\n * const errorWithTimestamp$ = throwError(() => {\n * const error: any = new Error(`This is error number ${++errorCount}`);\n * error.timestamp = Date.now();\n * return error;\n * });\n *\n * errorWithTimestamp$.subscribe({\n * error: err => console.log(err.timestamp, err.message)\n * });\n *\n * errorWithTimestamp$.subscribe({\n * error: err => console.log(err.timestamp, err.message)\n * });\n *\n * // Logs the timestamp and a new error message each subscription;\n * ```\n *\n * ## Unnecessary usage\n *\n * Using `throwError` inside of an operator or creation function\n * with a callback, is usually not necessary:\n *\n * ```ts\n * import { throwError, timer, of } from 'rxjs';\n * import { concatMap } from 'rxjs/operators';\n *\n * const delays$ = of(1000, 2000, Infinity, 3000);\n *\n * delays$.pipe(\n * concatMap(ms => {\n * if (ms < 10000) {\n * return timer(ms);\n * } else {\n * // This is probably overkill.\n * return throwError(() => new Error(`Invalid time ${ms}`));\n * }\n * })\n * )\n * .subscribe({\n * next: console.log,\n * error: console.error\n * });\n * ```\n *\n * You can just throw the error instead:\n *\n * ```ts\n * import { throwError, timer, of } from 'rxjs';\n * import { concatMap } from 'rxjs/operators';\n *\n * const delays$ = of(1000, 2000, Infinity, 3000);\n *\n * delays$.pipe(\n * concatMap(ms => {\n * if (ms < 10000) {\n * return timer(ms);\n * } else {\n * // Cleaner and easier to read for most folks.\n * throw new Error(`Invalid time ${ms}`);\n * }\n * })\n * )\n * .subscribe({\n * next: console.log,\n * error: console.error\n * });\n * ```\n *\n * @param errorFactory A factory function that will create the error instance that is pushed.\n */\nexport function throwError(errorFactory: () => any): Observable;\n\n/**\n * Returns an observable that will error with the specified error immediately upon subscription.\n *\n * @param error The error instance to emit\n * @deprecated Support for passing an error value will be removed in v8. Instead, pass a factory function to `throwError(() => new Error('test'))`. This is\n * because it will create the error at the moment it should be created and capture a more appropriate stack trace. If\n * for some reason you need to create the error ahead of time, you can still do that: `const err = new Error('test'); throwError(() => err);`.\n */\nexport function throwError(error: any): Observable;\n\n/**\n * Notifies the consumer of an error using a given scheduler by scheduling it at delay `0` upon subscription.\n *\n * @param errorOrErrorFactory An error instance or error factory\n * @param scheduler A scheduler to use to schedule the error notification\n * @deprecated The `scheduler` parameter will be removed in v8.\n * Use `throwError` in combination with {@link observeOn}: `throwError(() => new Error('test')).pipe(observeOn(scheduler));`.\n * Details: https://rxjs.dev/deprecations/scheduler-argument\n */\nexport function throwError(errorOrErrorFactory: any, scheduler: SchedulerLike): Observable;\n\nexport function throwError(errorOrErrorFactory: any, scheduler?: SchedulerLike): Observable {\n const errorFactory = isFunction(errorOrErrorFactory) ? errorOrErrorFactory : () => errorOrErrorFactory;\n const init = (subscriber: Subscriber) => subscriber.error(errorFactory());\n return new Observable(scheduler ? (subscriber) => scheduler.schedule(init as any, 0, subscriber) : init);\n}\n","import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\nimport { async as asyncScheduler } from '../scheduler/async';\nimport { isScheduler } from '../util/isScheduler';\nimport { isValidDate } from '../util/isDate';\n\n/**\n * Creates an observable that will wait for a specified time period, or exact date, before\n * emitting the number 0.\n *\n * Used to emit a notification after a delay.\n *\n * This observable is useful for creating delays in code, or racing against other values\n * for ad-hoc timeouts.\n *\n * The `delay` is specified by default in milliseconds, however providing a custom scheduler could\n * create a different behavior.\n *\n * ## Examples\n *\n * ### Wait 3 seconds and start another observable\n *\n * You might want to use `timer` to delay subscription to an\n * observable by a set amount of time. Here we use a timer with\n * {@link concatMapTo} or {@link concatMap} in order to wait\n * a few seconds and start a subscription to a source.\n *\n * ```ts\n * import { timer, of } from 'rxjs';\n * import { concatMapTo } from 'rxjs/operators';\n *\n * // This could be any observable\n * const source = of(1, 2, 3);\n *\n * const result = timer(3000).pipe(\n * concatMapTo(source)\n * )\n * .subscribe(console.log);\n * ```\n *\n * ### Take all of the values until the start of the next minute\n *\n * Using a `Date` as the trigger for the first emission, you can\n * do things like wait until midnight to fire an event, or in this case,\n * wait until a new minute starts (chosen so the example wouldn't take\n * too long to run) in order to stop watching a stream. Leveraging\n * {@link takeUntil}.\n *\n * ```ts\n * import { interval, timer } from 'rxjs';\n * import { takeUntil } from 'rxjs/operators';\n *\n * // Build a Date object that marks the\n * // next minute.\n * const currentDate = new Date();\n * const startOfNextMinute = new Date(\n * currentDate.getFullYear(),\n * currentDate.getMonth(),\n * currentDate.getDate(),\n * currentDate.getHours(),\n * currentDate.getMinutes() + 1,\n * )\n *\n * // This could be any observable stream\n * const source = interval(1000);\n *\n * const result = source.pipe(\n * takeUntil(timer(startOfNextMinute))\n * );\n *\n * result.subscribe(console.log);\n * ```\n *\n * ### Known Limitations\n *\n * - The {@link asyncScheduler} uses `setTimeout` which has limitations for how far in the future it can be scheduled.\n *\n * - If a `scheduler` is provided that returns a timestamp other than an epoch from `now()`, and\n * a `Date` object is passed to the `dueTime` argument, the calculation for when the first emission\n * should occur will be incorrect. In this case, it would be best to do your own calculations\n * ahead of time, and pass a `number` in as the `dueTime`.\n *\n * @param due If a `number`, the amount of time in milliseconds to wait before emitting.\n * If a `Date`, the exact time at which to emit.\n * @param scheduler The scheduler to use to schedule the delay. Defaults to {@link asyncScheduler}.\n */\nexport function timer(due: number | Date, scheduler?: SchedulerLike): Observable<0>;\n\n/**\n * Creates an observable that starts an interval after a specified delay, emitting incrementing numbers -- starting at `0` --\n * on each interval after words.\n *\n * The `delay` and `intervalDuration` are specified by default in milliseconds, however providing a custom scheduler could\n * create a different behavior.\n *\n * ## Example\n *\n * ### Start an interval that starts right away\n *\n * Since {@link index/interval} waits for the passed delay before starting,\n * sometimes that's not ideal. You may want to start an interval immediately.\n * `timer` works well for this. Here we have both side-by-side so you can\n * see them in comparison.\n *\n * Note that this observable will never complete.\n *\n * ```ts\n * import { timer, interval } from 'rxjs';\n *\n * timer(0, 1000).subscribe(n => console.log('timer', n));\n * interval(1000).subscribe(n => console.log('interval', n));\n * ```\n *\n * ### Known Limitations\n *\n * - The {@link asyncScheduler} uses `setTimeout` which has limitations for how far in the future it can be scheduled.\n *\n * - If a `scheduler` is provided that returns a timestamp other than an epoch from `now()`, and\n * a `Date` object is passed to the `dueTime` argument, the calculation for when the first emission\n * should occur will be incorrect. In this case, it would be best to do your own calculations\n * ahead of time, and pass a `number` in as the `startDue`.\n * @param startDue If a `number`, is the time to wait before starting the interval.\n * If a `Date`, is the exact time at which to start the interval.\n * @param intervalDuration The delay between each value emitted in the interval. Passing a\n * negative number here will result in immediate completion after the first value is emitted, as though\n * no `intervalDuration` was passed at all.\n * @param scheduler The scheduler to use to schedule the delay. Defaults to {@link asyncScheduler}.\n */\nexport function timer(startDue: number | Date, intervalDuration: number, scheduler?: SchedulerLike): Observable;\n\n/**\n * @deprecated The signature allowing `undefined` to be passed for `intervalDuration` will be removed in v8. Use the `timer(dueTime, scheduler?)` signature instead.\n */\nexport function timer(dueTime: number | Date, unused: undefined, scheduler?: SchedulerLike): Observable<0>;\n\nexport function timer(\n dueTime: number | Date = 0,\n intervalOrScheduler?: number | SchedulerLike,\n scheduler: SchedulerLike = asyncScheduler\n): Observable {\n // Since negative intervalDuration is treated as though no\n // interval was specified at all, we start with a negative number.\n let intervalDuration = -1;\n\n if (intervalOrScheduler != null) {\n // If we have a second argument, and it's a scheduler,\n // override the scheduler we had defaulted. Otherwise,\n // it must be an interval.\n if (isScheduler(intervalOrScheduler)) {\n scheduler = intervalOrScheduler;\n } else {\n // Note that this *could* be negative, in which case\n // it's like not passing an intervalDuration at all.\n intervalDuration = intervalOrScheduler;\n }\n }\n\n return new Observable((subscriber) => {\n // If a valid date is passed, calculate how long to wait before\n // executing the first value... otherwise, if it's a number just schedule\n // that many milliseconds (or scheduler-specified unit size) in the future.\n let due = isValidDate(dueTime) ? +dueTime - scheduler!.now() : dueTime;\n\n if (due < 0) {\n // Ensure we don't schedule in the future.\n due = 0;\n }\n\n // The incrementing value we emit.\n let n = 0;\n\n // Start the timer.\n return scheduler.schedule(function () {\n if (!subscriber.closed) {\n // Emit the next value and increment.\n subscriber.next(n++);\n\n if (0 <= intervalDuration) {\n // If we have a interval after the initial timer,\n // reschedule with the period.\n this.schedule(undefined, intervalDuration);\n } else {\n // We didn't have an interval. So just complete.\n subscriber.complete();\n }\n }\n }, due);\n });\n}\n","import { Observable } from '../Observable';\nimport { ObservableInputTuple } from '../types';\nimport { innerFrom } from './innerFrom';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { EMPTY } from './empty';\nimport { OperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { popResultSelector } from '../util/args';\n\nexport function zip(sources: [...ObservableInputTuple]): Observable;\nexport function zip(\n sources: [...ObservableInputTuple],\n resultSelector: (...values: A) => R\n): Observable;\nexport function zip(...sources: [...ObservableInputTuple]): Observable;\nexport function zip(\n ...sourcesAndResultSelector: [...ObservableInputTuple, (...values: A) => R]\n): Observable;\n\n/**\n * Combines multiple Observables to create an Observable whose values are calculated from the values, in order, of each\n * of its input Observables.\n *\n * If the last parameter is a function, this function is used to compute the created value from the input values.\n * Otherwise, an array of the input values is returned.\n *\n * ## Example\n *\n * Combine age and name from different sources\n *\n * ```ts\n * import { zip, of } from 'rxjs';\n * import { map } from 'rxjs/operators';\n *\n * let age$ = of(27, 25, 29);\n * let name$ = of('Foo', 'Bar', 'Beer');\n * let isDev$ = of(true, true, false);\n *\n * zip(age$, name$, isDev$).pipe(\n * map(([age, name, isDev]) => ({ age, name, isDev }))\n * )\n * .subscribe(x => console.log(x));\n *\n * // Outputs\n * // { age: 27, name: 'Foo', isDev: true }\n * // { age: 25, name: 'Bar', isDev: true }\n * // { age: 29, name: 'Beer', isDev: false }\n * ```\n * @param sources\n * @return {Observable}\n */\nexport function zip(...args: unknown[]): Observable {\n const resultSelector = popResultSelector(args);\n\n const sources = argsOrArgArray(args) as Observable[];\n\n return sources.length\n ? new Observable((subscriber) => {\n // A collection of buffers of values from each source.\n // Keyed by the same index with which the sources were passed in.\n let buffers: unknown[][] = sources.map(() => []);\n\n // An array of flags of whether or not the sources have completed.\n // This is used to check to see if we should complete the result.\n // Keyed by the same index with which the sources were passed in.\n let completed = sources.map(() => false);\n\n // When everything is done, release the arrays above.\n subscriber.add(() => {\n buffers = completed = null!;\n });\n\n // Loop over our sources and subscribe to each one. The index `i` is\n // especially important here, because we use it in closures below to\n // access the related buffers and completion properties\n for (let sourceIndex = 0; !subscriber.closed && sourceIndex < sources.length; sourceIndex++) {\n innerFrom(sources[sourceIndex]).subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n buffers[sourceIndex].push(value);\n // if every buffer has at least one value in it, then we\n // can shift out the oldest value from each buffer and emit\n // them as an array.\n if (buffers.every((buffer) => buffer.length)) {\n const result: any = buffers.map((buffer) => buffer.shift()!);\n // Emit the array. If theres' a result selector, use that.\n subscriber.next(resultSelector ? resultSelector(...result) : result);\n // If any one of the sources is both complete and has an empty buffer\n // then we complete the result. This is because we cannot possibly have\n // any more values to zip together.\n if (buffers.some((buffer, i) => !buffer.length && completed[i])) {\n subscriber.complete();\n }\n }\n },\n () => {\n // This source completed. Mark it as complete so we can check it later\n // if we have to.\n completed[sourceIndex] = true;\n // But, if this complete source has nothing in its buffer, then we\n // can complete the result, because we can't possibly have any more\n // values from this to zip together with the other values.\n !buffers[sourceIndex].length && subscriber.complete();\n }\n )\n );\n }\n\n // When everything is done, release the arrays above.\n return () => {\n buffers = completed = null!;\n };\n })\n : EMPTY;\n}\n","import { Subscriber } from '../Subscriber';\n\n/**\n * A generic helper for allowing operators to be created with a Subscriber and\n * use closures to capture necessary state from the operator function itself.\n */\nexport class OperatorSubscriber extends Subscriber {\n /**\n * Creates an instance of an `OperatorSubscriber`.\n * @param destination The downstream subscriber.\n * @param onNext Handles next values, only called if this subscriber is not stopped or closed. Any\n * error that occurs in this function is caught and sent to the `error` method of this subscriber.\n * @param onError Handles errors from the subscription, any errors that occur in this handler are caught\n * and send to the `destination` error handler.\n * @param onComplete Handles completion notification from the subscription. Any errors that occur in\n * this handler are sent to the `destination` error handler.\n * @param onFinalize Additional teardown logic here. This will only be called on teardown if the\n * subscriber itself is not already closed. This is called after all other teardown logic is executed.\n */\n constructor(\n destination: Subscriber,\n onNext?: (value: T) => void,\n onComplete?: () => void,\n onError?: (err: any) => void,\n private onFinalize?: () => void\n ) {\n // It's important - for performance reasons - that all of this class's\n // members are initialized and that they are always initialized in the same\n // order. This will ensure that all OperatorSubscriber instances have the\n // same hidden class in V8. This, in turn, will help keep the number of\n // hidden classes involved in property accesses within the base class as\n // low as possible. If the number of hidden classes involved exceeds four,\n // the property accesses will become megamorphic and performance penalties\n // will be incurred - i.e. inline caches won't be used.\n //\n // The reasons for ensuring all instances have the same hidden class are\n // further discussed in this blog post from Benedikt Meurer:\n // https://benediktmeurer.de/2018/03/23/impact-of-polymorphism-on-component-based-frameworks-like-react/\n super(destination);\n this._next = onNext\n ? function (this: OperatorSubscriber, value: T) {\n try {\n onNext(value);\n } catch (err) {\n destination.error(err);\n }\n }\n : super._next;\n this._error = onError\n ? function (this: OperatorSubscriber, err: any) {\n try {\n onError(err);\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure teardown.\n this.unsubscribe();\n }\n }\n : super._error;\n this._complete = onComplete\n ? function (this: OperatorSubscriber) {\n try {\n onComplete();\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure teardown.\n this.unsubscribe();\n }\n }\n : super._complete;\n }\n\n unsubscribe() {\n const { closed } = this;\n super.unsubscribe();\n // Execute additional teardown if we have any and we didn't already do so.\n !closed && this.onFinalize?.();\n }\n}\n","import { Subscriber } from '../Subscriber';\nimport { MonoTypeOperatorFunction, ObservableInput } from '../types';\n\nimport { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Ignores source values for a duration determined by another Observable, then\n * emits the most recent value from the source Observable, then repeats this\n * process.\n *\n * It's like {@link auditTime}, but the silencing\n * duration is determined by a second Observable.\n *\n * ![](audit.png)\n *\n * `audit` is similar to `throttle`, but emits the last value from the silenced\n * time window, instead of the first value. `audit` emits the most recent value\n * from the source Observable on the output Observable as soon as its internal\n * timer becomes disabled, and ignores source values while the timer is enabled.\n * Initially, the timer is disabled. As soon as the first source value arrives,\n * the timer is enabled by calling the `durationSelector` function with the\n * source value, which returns the \"duration\" Observable. When the duration\n * Observable emits a value, the timer is disabled, then the most\n * recent source value is emitted on the output Observable, and this process\n * repeats for the next source value.\n *\n * ## Example\n *\n * Emit clicks at a rate of at most one click per second\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { audit } from 'rxjs/operators'\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(audit(ev => interval(1000)));\n * result.subscribe(x => console.log(x));\n * ```\n * @see {@link auditTime}\n * @see {@link debounce}\n * @see {@link delayWhen}\n * @see {@link sample}\n * @see {@link throttle}\n *\n * @param durationSelector A function\n * that receives a value from the source Observable, for computing the silencing\n * duration, returned as an Observable or a Promise.\n * @return A function that returns an Observable that performs rate-limiting of\n * emissions from the source Observable.\n */\nexport function audit(durationSelector: (value: T) => ObservableInput): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let hasValue = false;\n let lastValue: T | null = null;\n let durationSubscriber: Subscriber | null = null;\n let isComplete = false;\n\n const endDuration = () => {\n durationSubscriber?.unsubscribe();\n durationSubscriber = null;\n if (hasValue) {\n hasValue = false;\n const value = lastValue!;\n lastValue = null;\n subscriber.next(value);\n }\n isComplete && subscriber.complete();\n };\n\n const cleanupDuration = () => {\n durationSubscriber = null;\n isComplete && subscriber.complete();\n };\n\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n hasValue = true;\n lastValue = value;\n if (!durationSubscriber) {\n innerFrom(durationSelector(value)).subscribe(\n (durationSubscriber = new OperatorSubscriber(subscriber, endDuration, cleanupDuration))\n );\n }\n },\n () => {\n isComplete = true;\n (!hasValue || !durationSubscriber || durationSubscriber.closed) && subscriber.complete();\n }\n )\n );\n });\n}\n","import { async } from '../scheduler/async';\nimport { audit } from './audit';\nimport { timer } from '../observable/timer';\nimport { MonoTypeOperatorFunction, SchedulerLike } from '../types';\n\n/**\n * Ignores source values for `duration` milliseconds, then emits the most recent\n * value from the source Observable, then repeats this process.\n *\n * When it sees a source value, it ignores that plus\n * the next ones for `duration` milliseconds, and then it emits the most recent\n * value from the source.\n *\n * ![](auditTime.png)\n *\n * `auditTime` is similar to `throttleTime`, but emits the last value from the\n * silenced time window, instead of the first value. `auditTime` emits the most\n * recent value from the source Observable on the output Observable as soon as\n * its internal timer becomes disabled, and ignores source values while the\n * timer is enabled. Initially, the timer is disabled. As soon as the first\n * source value arrives, the timer is enabled. After `duration` milliseconds (or\n * the time unit determined internally by the optional `scheduler`) has passed,\n * the timer is disabled, then the most recent source value is emitted on the\n * output Observable, and this process repeats for the next source value.\n * Optionally takes a {@link SchedulerLike} for managing timers.\n *\n * ## Example\n *\n * Emit clicks at a rate of at most one click per second\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { auditTime } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(auditTime(1000));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link audit}\n * @see {@link debounceTime}\n * @see {@link delay}\n * @see {@link sampleTime}\n * @see {@link throttleTime}\n *\n * @param {number} duration Time to wait before emitting the most recent source\n * value, measured in milliseconds or the time unit determined internally\n * by the optional `scheduler`.\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for\n * managing the timers that handle the rate-limiting behavior.\n * @return A function that returns an Observable that performs rate-limiting of\n * emissions from the source Observable.\n */\nexport function auditTime(duration: number, scheduler: SchedulerLike = async): MonoTypeOperatorFunction {\n return audit(() => timer(duration, scheduler));\n}\n","import { Observable } from '../Observable';\n\nimport { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { Subscription } from '../Subscription';\nimport { innerFrom } from '../observable/innerFrom';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { operate } from '../util/lift';\n\n/* tslint:disable:max-line-length */\nexport function catchError>(\n selector: (err: any, caught: Observable) => O\n): OperatorFunction>;\n/* tslint:enable:max-line-length */\n\n/**\n * Catches errors on the observable to be handled by returning a new observable or throwing an error.\n *\n * \n * It only listens to the error channel and ignores notifications.\n * Handles errors from the source observable, and maps them to a new observable.\n * The error may also be rethrown, or a new error can be thrown to emit an error from the result.\n * \n *\n * ![](catch.png)\n *\n * This operator handles errors, but forwards along all other events to the resulting observable.\n * If the source observable terminates with an error, it will map that error to a new observable,\n * subscribe to it, and forward all of its events to the resulting observable.\n *\n * ## Examples\n * Continues with a different Observable when there's an error\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { map, catchError } from 'rxjs/operators';\n *\n * of(1, 2, 3, 4, 5).pipe(\n * map(n => {\n * \t if (n === 4) {\n * \t throw 'four!';\n * }\n *\t return n;\n * }),\n * catchError(err => of('I', 'II', 'III', 'IV', 'V')),\n * )\n * .subscribe(x => console.log(x));\n * // 1, 2, 3, I, II, III, IV, V\n * ```\n *\n * Retries the caught source Observable again in case of error, similar to retry() operator\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { map, catchError, take } from 'rxjs/operators';\n *\n * of(1, 2, 3, 4, 5).pipe(\n * map(n => {\n * \t if (n === 4) {\n * \t throw 'four!';\n * }\n * \t return n;\n * }),\n * catchError((err, caught) => caught),\n * take(30),\n * )\n * .subscribe(x => console.log(x));\n * // 1, 2, 3, 1, 2, 3, ...\n * ```\n *\n * Throws a new error when the source Observable throws an error\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { map, catchError } from 'rxjs/operators';\n *\n * of(1, 2, 3, 4, 5).pipe(\n * map(n => {\n * if (n === 4) {\n * throw 'four!';\n * }\n * return n;\n * }),\n * catchError(err => {\n * throw 'error in source. Details: ' + err;\n * }),\n * )\n * .subscribe(\n * x => console.log(x),\n * err => console.log(err)\n * );\n * // 1, 2, 3, error in source. Details: four!\n * ```\n *\n * @see {@link onErrorResumeNext}\n * @see {@link repeat}\n * @see {@link repeatWhen}\n * @see {@link retry }\n * @see {@link retryWhen}\n *\n * @param {function} selector a function that takes as arguments `err`, which is the error, and `caught`, which\n * is the source observable, in case you'd like to \"retry\" that observable by returning it again. Whatever observable\n * is returned by the `selector` will be used to continue the observable chain.\n * @return A function that returns an Observable that originates from either\n * the source or the Observable returned by the `selector` function.\n */\nexport function catchError>(\n selector: (err: any, caught: Observable) => O\n): OperatorFunction> {\n return operate((source, subscriber) => {\n let innerSub: Subscription | null = null;\n let syncUnsub = false;\n let handledResult: Observable>;\n\n innerSub = source.subscribe(\n new OperatorSubscriber(subscriber, undefined, undefined, (err) => {\n handledResult = innerFrom(selector(err, catchError(selector)(source)));\n if (innerSub) {\n innerSub.unsubscribe();\n innerSub = null;\n handledResult.subscribe(subscriber);\n } else {\n // We don't have an innerSub yet, that means the error was synchronous\n // because the subscribe call hasn't returned yet.\n syncUnsub = true;\n }\n })\n );\n\n if (syncUnsub) {\n // We have a synchronous error, we need to make sure to\n // teardown right away. This ensures that `finalize` is called\n // at the right time, and that teardown occurs at the expected\n // time between the source error and the subscription to the\n // next observable.\n innerSub.unsubscribe();\n innerSub = null;\n handledResult!.subscribe(subscriber);\n }\n });\n}\n","import { mergeAll } from './mergeAll';\nimport { OperatorFunction, ObservableInput, ObservedValueOf } from '../types';\n\n/**\n * Converts a higher-order Observable into a first-order Observable by\n * concatenating the inner Observables in order.\n *\n * Flattens an Observable-of-Observables by putting one\n * inner Observable after the other.\n *\n * ![](concatAll.svg)\n *\n * Joins every Observable emitted by the source (a higher-order Observable), in\n * a serial fashion. It subscribes to each inner Observable only after the\n * previous inner Observable has completed, and merges all of their values into\n * the returned observable.\n *\n * __Warning:__ If the source Observable emits Observables quickly and\n * endlessly, and the inner Observables it emits generally complete slower than\n * the source emits, you can run into memory issues as the incoming Observables\n * collect in an unbounded buffer.\n *\n * Note: `concatAll` is equivalent to `mergeAll` with concurrency parameter set\n * to `1`.\n *\n * ## Example\n *\n * For each click event, tick every second from 0 to 3, with no concurrency\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { map, take, concatAll } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const higherOrder = clicks.pipe(\n * map(ev => interval(1000).pipe(take(4))),\n * );\n * const firstOrder = higherOrder.pipe(concatAll());\n * firstOrder.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // (results are not concurrent)\n * // For every click on the \"document\" it will emit values 0 to 3 spaced\n * // on a 1000ms interval\n * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3\n * ```\n *\n * @see {@link combineLatestAll}\n * @see {@link concat}\n * @see {@link concatMap}\n * @see {@link concatMapTo}\n * @see {@link exhaustAll}\n * @see {@link mergeAll}\n * @see {@link switchAll}\n * @see {@link switchMap}\n * @see {@link zipAll}\n *\n * @return A function that returns an Observable emitting values from all the\n * inner Observables concatenated.\n */\nexport function concatAll>(): OperatorFunction> {\n return mergeAll(1);\n}\n","import { mergeMap } from './mergeMap';\nimport { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { isFunction } from '../util/isFunction';\n\n/* tslint:disable:max-line-length */\nexport function concatMap>(\n project: (value: T, index: number) => O\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function concatMap>(\n project: (value: T, index: number) => O,\n resultSelector: undefined\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function concatMap>(\n project: (value: T, index: number) => O,\n resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R\n): OperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable, in a serialized fashion waiting for each one to complete before\n * merging the next.\n *\n * Maps each value to an Observable, then flattens all of\n * these inner Observables using {@link concatAll}.\n *\n * ![](concatMap.png)\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an (so-called \"inner\") Observable. Each new inner Observable is\n * concatenated with the previous inner Observable.\n *\n * __Warning:__ if source values arrive endlessly and faster than their\n * corresponding inner Observables can complete, it will result in memory issues\n * as inner Observables amass in an unbounded buffer waiting for their turn to\n * be subscribed to.\n *\n * Note: `concatMap` is equivalent to `mergeMap` with concurrency parameter set\n * to `1`.\n *\n * ## Example\n * For each click event, tick every second from 0 to 3, with no concurrency\n *\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { concatMap, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * concatMap(ev => interval(1000).pipe(take(4)))\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // (results are not concurrent)\n * // For every click on the \"document\" it will emit values 0 to 3 spaced\n * // on a 1000ms interval\n * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3\n * ```\n *\n * @see {@link concat}\n * @see {@link concatAll}\n * @see {@link concatMapTo}\n * @see {@link exhaustMap}\n * @see {@link mergeMap}\n * @see {@link switchMap}\n *\n * @param {function(value: T, ?index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @return A function that returns an Observable that emits the result of\n * applying the projection function (and the optional deprecated\n * `resultSelector`) to each item emitted by the source Observable and taking\n * values from each projected inner Observable sequentially.\n */\nexport function concatMap>(\n project: (value: T, index: number) => O,\n resultSelector?: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R\n): OperatorFunction | R> {\n return isFunction(resultSelector) ? mergeMap(project, resultSelector, 1) : mergeMap(project, 1);\n}\n","import { OperatorFunction, ObservableInput, ObservedValueOf, SubjectLike } from '../types';\nimport { Observable } from '../Observable';\nimport { Subject } from '../Subject';\nimport { from } from '../observable/from';\nimport { operate } from '../util/lift';\nimport { fromSubscribable } from '../observable/fromSubscribable';\n\nexport interface ConnectConfig {\n /**\n * A factory function used to create the Subject through which the source\n * is multicast. By default this creates a {@link Subject}.\n */\n connector: () => SubjectLike;\n}\n\n/**\n * The default configuration for `connect`.\n */\nconst DEFAULT_CONFIG: ConnectConfig = {\n connector: () => new Subject(),\n};\n\n/**\n * Creates an observable by multicasting the source within a function that\n * allows the developer to define the usage of the multicast prior to connection.\n *\n * This is particularly useful if the observable source you wish to multicast could\n * be synchronous or asynchronous. This sets it apart from {@link share}, which, in the\n * case of totally synchronous sources will fail to share a single subscription with\n * multiple consumers, as by the time the subscription to the result of {@link share}\n * has returned, if the source is synchronous its internal reference count will jump from\n * 0 to 1 back to 0 and reset.\n *\n * To use `connect`, you provide a `selector` function that will give you\n * a multicast observable that is not yet connected. You then use that multicast observable\n * to create a resulting observable that, when subscribed, will set up your multicast. This is\n * generally, but not always, accomplished with {@link merge}.\n *\n * Note that using a {@link takeUntil} inside of `connect`'s `selector` _might_ mean you were looking\n * to use the {@link takeWhile} operator instead.\n *\n * When you subscribe to the result of `connect`, the `selector` function will be called. After\n * the `selector` function returns, the observable it returns will be subscribed to, _then_ the\n * multicast will be connected to the source.\n *\n * ### Example\n *\n * Sharing a totally synchronous observable\n *\n * ```ts\n * import { defer, merge, of } from 'rxjs';\n * import { tap, connect, filter, map } from 'rxjs/operators';\n *\n * const source$ = defer(() => {\n * console.log('subscription started');\n * return of(1, 2, 3, 4, 5).pipe(\n * tap(n => console.log(`source emitted ${n}`))\n * );\n * });\n *\n * source$.pipe(\n * // Notice in here we're merging 3 subscriptions to `shared$`.\n * connect((shared$) => merge(\n * shared$.pipe(map(n => `all ${n}`)),\n * shared$.pipe(filter(n => n % 2 === 0), map(n => `even ${n}`)),\n * shared$.pipe(filter(n => n % 2 === 1), map(n => `odd ${n}`)),\n * ))\n * )\n * .subscribe(console.log);\n *\n * // Expected output: (notice only one subscription)\n * \"subscription started\"\n * \"source emitted 1\"\n * \"all 1\"\n * \"odd 1\"\n * \"source emitted 2\"\n * \"all 2\"\n * \"even 2\"\n * \"source emitted 3\"\n * \"all 3\"\n * \"odd 3\"\n * \"source emitted 4\"\n * \"all 4\"\n * \"even 4\"\n * \"source emitted 5\"\n * \"all 5\"\n * \"odd 5\"\n * ```\n *\n * @param selector A function used to set up the multicast. Gives you a multicast observable\n * that is not yet connected. With that, you're expected to create and return\n * and Observable, that when subscribed to, will utilize the multicast observable.\n * After this function is executed -- and its return value subscribed to -- the\n * the operator will subscribe to the source, and the connection will be made.\n * @param config The configuration object for `connect`.\n */\nexport function connect>(\n selector: (shared: Observable) => O,\n config: ConnectConfig = DEFAULT_CONFIG\n): OperatorFunction> {\n const { connector } = config;\n return operate((source, subscriber) => {\n const subject = connector();\n from(selector(fromSubscribable(subject))).subscribe(subscriber);\n subscriber.add(source.subscribe(subject));\n });\n}\n","import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { Subscribable } from '../types';\n\n/**\n * Used to convert a subscribable to an observable.\n *\n * Currently, this is only used within internals.\n *\n * TODO: Discuss ObservableInput supporting \"Subscribable\".\n * https://github.com/ReactiveX/rxjs/issues/5909\n *\n * @param subscribable A subscribable\n */\nexport function fromSubscribable(subscribable: Subscribable) {\n return new Observable((subscriber: Subscriber) => subscribable.subscribe(subscriber));\n}\n","import { asyncScheduler } from '../scheduler/async';\nimport { Subscription } from '../Subscription';\nimport { MonoTypeOperatorFunction, SchedulerAction, SchedulerLike } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Emits a notification from the source Observable only after a particular time span\n * has passed without another source emission.\n *\n * It's like {@link delay}, but passes only the most\n * recent notification from each burst of emissions.\n *\n * ![](debounceTime.png)\n *\n * `debounceTime` delays notifications emitted by the source Observable, but drops\n * previous pending delayed emissions if a new notification arrives on the source\n * Observable. This operator keeps track of the most recent notification from the\n * source Observable, and emits that only when `dueTime` has passed\n * without any other notification appearing on the source Observable. If a new value\n * appears before `dueTime` silence occurs, the previous notification will be dropped\n * and will not be emitted and a new `dueTime` is scheduled.\n * If the completing event happens during `dueTime` the last cached notification\n * is emitted before the completion event is forwarded to the output observable.\n * If the error event happens during `dueTime` or after it only the error event is\n * forwarded to the output observable. The cache notification is not emitted in this case.\n *\n * This is a rate-limiting operator, because it is impossible for more than one\n * notification to be emitted in any time window of duration `dueTime`, but it is also\n * a delay-like operator since output emissions do not occur at the same time as\n * they did on the source Observable. Optionally takes a {@link SchedulerLike} for\n * managing timers.\n *\n * ## Example\n * Emit the most recent click after a burst of clicks\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { debounceTime } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(debounceTime(1000));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link audit}\n * @see {@link auditTime}\n * @see {@link debounce}\n * @see {@link debounceTime}\n * @see {@link sample}\n * @see {@link sampleTime}\n * @see {@link throttle}\n * @see {@link throttleTime}\n *\n * @param {number} dueTime The timeout duration in milliseconds (or the time\n * unit determined internally by the optional `scheduler`) for the window of\n * time required to wait for emission silence before emitting the most recent\n * source value.\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for\n * managing the timers that handle the timeout for each value.\n * @return A function that returns an Observable that delays the emissions of\n * the source Observable by the specified `dueTime`, and may drop some values\n * if they occur too frequently.\n */\nexport function debounceTime(dueTime: number, scheduler: SchedulerLike = asyncScheduler): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let activeTask: Subscription | null = null;\n let lastValue: T | null = null;\n let lastTime: number | null = null;\n\n const emit = () => {\n if (activeTask) {\n // We have a value! Free up memory first, then emit the value.\n activeTask.unsubscribe();\n activeTask = null;\n const value = lastValue!;\n lastValue = null;\n subscriber.next(value);\n }\n };\n function emitWhenIdle(this: SchedulerAction) {\n // This is called `dueTime` after the first value\n // but we might have received new values during this window!\n\n const targetTime = lastTime! + dueTime;\n const now = scheduler.now();\n if (now < targetTime) {\n // On that case, re-schedule to the new target\n activeTask = this.schedule(undefined, targetTime - now);\n subscriber.add(activeTask);\n return;\n }\n\n emit();\n }\n\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value: T) => {\n lastValue = value;\n lastTime = scheduler.now();\n\n // Only set up a task if it's not already up\n if (!activeTask) {\n activeTask = scheduler.schedule(emitWhenIdle, dueTime);\n subscriber.add(activeTask);\n }\n },\n () => {\n // Source completed.\n // Emit any pending debounced values then complete\n emit();\n subscriber.complete();\n },\n // Pass all errors through to consumer.\n undefined,\n () => {\n // Teardown.\n lastValue = activeTask = null;\n }\n )\n );\n });\n}\n","import { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Emits a given value if the source Observable completes without emitting any\n * `next` value, otherwise mirrors the source Observable.\n *\n * If the source Observable turns out to be empty, then\n * this operator will emit a default value.\n *\n * ![](defaultIfEmpty.png)\n *\n * `defaultIfEmpty` emits the values emitted by the source Observable or a\n * specified default value if the source Observable is empty (completes without\n * having emitted any `next` value).\n *\n * ## Example\n * If no clicks happen in 5 seconds, then emit \"no clicks\"\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { defaultIfEmpty, takeUntil } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const clicksBeforeFive = clicks.pipe(takeUntil(interval(5000)));\n * const result = clicksBeforeFive.pipe(defaultIfEmpty('no clicks'));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link empty}\n * @see {@link last}\n *\n * @param defaultValue The default value used if the source\n * Observable is empty.\n * @return A function that returns an Observable that emits either the\n * specified `defaultValue` if the source Observable emits no items, or the\n * values emitted by the source Observable.\n */\nexport function defaultIfEmpty(defaultValue: R): OperatorFunction {\n return operate((source, subscriber) => {\n let hasValue = false;\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n hasValue = true;\n subscriber.next(value);\n },\n () => {\n if (!hasValue) {\n subscriber.next(defaultValue!);\n }\n subscriber.complete();\n }\n )\n );\n });\n}\n","import { asyncScheduler } from '../scheduler/async';\nimport { MonoTypeOperatorFunction, SchedulerLike } from '../types';\nimport { delayWhen } from './delayWhen';\nimport { timer } from '../observable/timer';\n\n/**\n * Delays the emission of items from the source Observable by a given timeout or\n * until a given Date.\n *\n * Time shifts each item by some specified amount of\n * milliseconds.\n *\n * ![](delay.png)\n *\n * If the delay argument is a Number, this operator time shifts the source\n * Observable by that amount of time expressed in milliseconds. The relative\n * time intervals between the values are preserved.\n *\n * If the delay argument is a Date, this operator time shifts the start of the\n * Observable execution until the given date occurs.\n *\n * ## Examples\n * Delay each click by one second\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { delay } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const delayedClicks = clicks.pipe(delay(1000)); // each click emitted after 1 second\n * delayedClicks.subscribe(x => console.log(x));\n * ```\n *\n * Delay all clicks until a future date happens\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { delay } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const date = new Date('March 15, 2050 12:00:00'); // in the future\n * const delayedClicks = clicks.pipe(delay(date)); // click emitted only after that date\n * delayedClicks.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link delayWhen}\n * @see {@link throttle}\n * @see {@link throttleTime}\n * @see {@link debounce}\n * @see {@link debounceTime}\n * @see {@link sample}\n * @see {@link sampleTime}\n * @see {@link audit}\n * @see {@link auditTime}\n *\n * @param {number|Date} due The delay duration in milliseconds (a `number`) or\n * a `Date` until which the emission of the source items is delayed.\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for\n * managing the timers that handle the time-shift for each item.\n * @return A function that returns an Observable that delays the emissions of\n * the source Observable by the specified timeout or Date.\n */\nexport function delay(due: number | Date, scheduler: SchedulerLike = asyncScheduler): MonoTypeOperatorFunction {\n const duration = timer(due, scheduler);\n return delayWhen(() => duration);\n}\n","import { Observable } from '../Observable';\nimport { MonoTypeOperatorFunction } from '../types';\nimport { concat } from '../observable/concat';\nimport { take } from './take';\nimport { ignoreElements } from './ignoreElements';\nimport { mapTo } from './mapTo';\nimport { mergeMap } from './mergeMap';\n\n/** @deprecated The `subscriptionDelay` parameter will be removed in v8. */\nexport function delayWhen(\n delayDurationSelector: (value: T, index: number) => Observable,\n subscriptionDelay: Observable\n): MonoTypeOperatorFunction;\nexport function delayWhen(delayDurationSelector: (value: T, index: number) => Observable): MonoTypeOperatorFunction;\n\n/**\n * Delays the emission of items from the source Observable by a given time span\n * determined by the emissions of another Observable.\n *\n * It's like {@link delay}, but the time span of the\n * delay duration is determined by a second Observable.\n *\n * ![](delayWhen.png)\n *\n * `delayWhen` time shifts each emitted value from the source Observable by a\n * time span determined by another Observable. When the source emits a value,\n * the `delayDurationSelector` function is called with the source value as\n * argument, and should return an Observable, called the \"duration\" Observable.\n * The source value is emitted on the output Observable only when the duration\n * Observable emits a value or completes.\n * The completion of the notifier triggering the emission of the source value\n * is deprecated behavior and will be removed in future versions.\n *\n * Optionally, `delayWhen` takes a second argument, `subscriptionDelay`, which\n * is an Observable. When `subscriptionDelay` emits its first value or\n * completes, the source Observable is subscribed to and starts behaving like\n * described in the previous paragraph. If `subscriptionDelay` is not provided,\n * `delayWhen` will subscribe to the source Observable as soon as the output\n * Observable is subscribed.\n *\n * ## Example\n * Delay each click by a random amount of time, between 0 and 5 seconds\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { delayWhen } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const delayedClicks = clicks.pipe(\n * delayWhen(event => interval(Math.random() * 5000)),\n * );\n * delayedClicks.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link delay}\n * @see {@link throttle}\n * @see {@link throttleTime}\n * @see {@link debounce}\n * @see {@link debounceTime}\n * @see {@link sample}\n * @see {@link sampleTime}\n * @see {@link audit}\n * @see {@link auditTime}\n *\n * @param {function(value: T, index: number): Observable} delayDurationSelector A function that\n * returns an Observable for each value emitted by the source Observable, which\n * is then used to delay the emission of that item on the output Observable\n * until the Observable returned from this function emits a value.\n * @param {Observable} subscriptionDelay An Observable that triggers the\n * subscription to the source Observable once it emits any value.\n * @return A function that returns an Observable that delays the emissions of\n * the source Observable by an amount of time specified by the Observable\n * returned by `delayDurationSelector`.\n */\nexport function delayWhen(\n delayDurationSelector: (value: T, index: number) => Observable,\n subscriptionDelay?: Observable\n): MonoTypeOperatorFunction {\n if (subscriptionDelay) {\n // DEPRECATED PATH\n return (source: Observable) =>\n concat(subscriptionDelay.pipe(take(1), ignoreElements()), source.pipe(delayWhen(delayDurationSelector)));\n }\n\n return mergeMap((value, index) => delayDurationSelector(value, index).pipe(take(1), mapTo(value)));\n}\n","import { MonoTypeOperatorFunction } from '../types';\nimport { identity } from '../util/identity';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Returns a result {@link Observable} that emits all values pushed by the source observable if they\n * are distinct in comparison to the last value the result observable emitted.\n *\n * 1. It will always emit the first value from the source.\n * 2. For all subsequent values pushed by the source, they will be compared to the previously emitted values\n * using the provided `comparator` or an `===` equality check.\n * 3. If the value pushed by the source is determined to be unequal by this check, that value is emitted and\n * becomes the new \"previously emitted value\" internally.\n *\n * ## Example\n *\n * A very basic example with no `comparator`. Note that `1` is emitted more than once,\n * because it's distinct in comparison to the _previously emitted_ value,\n * not in comparison to _all other emitted values_.\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { distinctUntilChanged } from 'rxjs/operators';\n *\n * of(1, 1, 1, 2, 2, 2, 1, 1, 3, 3).pipe(\n * distinctUntilChanged()\n * )\n * .subscribe(console.log);\n * // Logs: 1, 2, 1, 3\n * ```\n *\n * ## Example\n *\n * With a `comparator`, you can do custom comparisons. Let's say\n * you only want to emit a value when all of its components have\n * changed:\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { distinctUntilChanged } from 'rxjs/operators';\n *\n * const totallyDifferentBuilds$ = of(\n * { engineVersion: '1.1.0', transmissionVersion: '1.2.0' },\n * { engineVersion: '1.1.0', transmissionVersion: '1.4.0' },\n * { engineVersion: '1.3.0', transmissionVersion: '1.4.0' },\n * { engineVersion: '1.3.0', transmissionVersion: '1.5.0' },\n * { engineVersion: '2.0.0', transmissionVersion: '1.5.0' }\n * ).pipe(\n * distinctUntilChanged((prev, curr) => {\n * return (\n * prev.engineVersion === curr.engineVersion ||\n * prev.transmissionVersion === curr.transmissionVersion\n * );\n * })\n * );\n *\n * totallyDifferentBuilds$.subscribe(console.log);\n *\n * // Logs:\n * // {engineVersion: \"1.1.0\", transmissionVersion: \"1.2.0\"}\n * // {engineVersion: \"1.3.0\", transmissionVersion: \"1.4.0\"}\n * // {engineVersion: \"2.0.0\", transmissionVersion: \"1.5.0\"}\n * ```\n *\n * ## Example\n *\n * You can also provide a custom `comparator` to check that emitted\n * changes are only in one direction. Let's say you only want to get\n * the next record temperature:\n *\n * ```ts\n * import { of } from \"rxjs\";\n * import { distinctUntilChanged } from \"rxjs/operators\";\n *\n * const temps$ = of(30, 31, 20, 34, 33, 29, 35, 20);\n *\n * const recordHighs$ = temps$.pipe(\n * distinctUntilChanged((prevHigh, temp) => {\n * // If the current temp is less than\n * // or the same as the previous record,\n * // the record hasn't changed.\n * return temp <= prevHigh;\n * })\n * );\n *\n * recordHighs$.subscribe(console.log);\n * // Logs: 30, 31, 34, 35\n * ```\n *\n * @param comparator A function used to compare the previous and current values for\n * equality. Defaults to a `===` check.\n * @return A function that returns an Observable that emits items from the\n * source Observable with distinct values.\n */\nexport function distinctUntilChanged(comparator?: (previous: T, current: T) => boolean): MonoTypeOperatorFunction;\n\n/**\n * Returns a result {@link Observable} that emits all values pushed by the source observable if they\n * are distinct in comparison to the last value the result observable emitted.\n *\n * 1. It will always emit the first value from the source.\n * 2. The `keySelector` will be run against all values, including the first value.\n * 3. For all values after the first, the selected key will be compared against the key selected from\n * the previously emitted value using the `comparator`.\n * 4. If the keys are determined to be unequal by this check, the value (not the key), is emitted\n * and the selected key from that value is saved for future comparisons against other keys.\n *\n * ## Example\n *\n * Selecting update events only when the `updatedBy` field shows\n * the account changed hands...\n *\n * ```ts\n * // A stream of updates to a given account\n * const accountUpdates$ = of(\n * { updatedBy: \"blesh\", data: [] },\n * { updatedBy: \"blesh\", data: [] },\n * { updatedBy: \"ncjamieson\", data: [] },\n * { updatedBy: \"ncjamieson\", data: [] },\n * { updatedBy: \"blesh\", data: [] }\n * );\n *\n * // We only want the events where it changed hands\n * const changedHands$ = accountUpdates$.pipe(\n * distinctUntilChanged(undefined, update => update.updatedBy)\n * );\n *\n * changedHands$.subscribe(console.log);\n * // Logs:\n * // {updatedBy: \"blesh\", data: Array[0]}\n * // {updatedBy: \"ncjamieson\", data: Array[0]}\n * // {updatedBy: \"blesh\", data: Array[0]}\n * ```\n *\n * @param comparator A function used to compare the previous and current keys for\n * equality. Defaults to a `===` check.\n * @param keySelector Used to select a key value to be passed to the `comparator`.\n * @return A function that returns an Observable that emits items from the\n * source Observable with distinct values.\n */\nexport function distinctUntilChanged(\n comparator: (previous: K, current: K) => boolean,\n keySelector: (value: T) => K\n): MonoTypeOperatorFunction;\n\nexport function distinctUntilChanged(\n comparator?: (previous: K, current: K) => boolean,\n keySelector: (value: T) => K = identity as (value: T) => K\n): MonoTypeOperatorFunction {\n // We've been allowing `null` do be passed as the `compare`, so we can't do\n // a default value for the parameter, because that will only work\n // for `undefined`.\n comparator = comparator ?? defaultCompare;\n\n return operate((source, subscriber) => {\n // The previous key, used to compare against keys selected\n // from new arrivals to determine \"distinctiveness\".\n let previousKey: K;\n // Whether or not this is the first value we've gotten.\n let first = true;\n\n source.subscribe(\n new OperatorSubscriber(subscriber, (value) => {\n // We always call the key selector.\n const currentKey = keySelector(value);\n\n // If it's the first value, we always emit it.\n // Otherwise, we compare this key to the previous key, and\n // if the comparer returns false, we emit.\n if (first || !comparator!(previousKey, currentKey)) {\n // Update our state *before* we emit the value\n // as emission can be the source of re-entrant code\n // in functional libraries like this. We only really\n // need to do this if it's the first value, or if the\n // key we're tracking in previous needs to change.\n first = false;\n previousKey = currentKey;\n\n // Emit the value!\n subscriber.next(value);\n }\n })\n );\n });\n}\n\nfunction defaultCompare(a: any, b: any) {\n return a === b;\n}\n","import { distinctUntilChanged } from './distinctUntilChanged';\nimport { MonoTypeOperatorFunction } from '../types';\n\n/* tslint:disable:max-line-length */\nexport function distinctUntilKeyChanged(key: keyof T): MonoTypeOperatorFunction;\nexport function distinctUntilKeyChanged(key: K, compare: (x: T[K], y: T[K]) => boolean): MonoTypeOperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from the previous item,\n * using a property accessed by using the key provided to check if the two items are distinct.\n *\n * If a comparator function is provided, then it will be called for each item to test for whether or not that value should be emitted.\n *\n * If a comparator function is not provided, an equality check is used by default.\n *\n * ## Examples\n * An example comparing the name of persons\n * ```typescript\n * import { of } from 'rxjs';\n * import { distinctUntilKeyChanged } from 'rxjs/operators';\n *\n * interface Person {\n * age: number,\n * name: string\n * }\n *\n *of(\n * { age: 4, name: 'Foo'},\n * { age: 7, name: 'Bar'},\n * { age: 5, name: 'Foo'},\n * { age: 6, name: 'Foo'},\n * ).pipe(\n * distinctUntilKeyChanged('name'),\n * )\n * .subscribe(x => console.log(x));\n *\n * // displays:\n * // { age: 4, name: 'Foo' }\n * // { age: 7, name: 'Bar' }\n * // { age: 5, name: 'Foo' }\n * ```\n *\n * An example comparing the first letters of the name\n * ```typescript\n * import { of } from 'rxjs';\n * import { distinctUntilKeyChanged } from 'rxjs/operators';\n *\n * interface Person {\n * age: number,\n * name: string\n * }\n *\n *of(\n * { age: 4, name: 'Foo1'},\n * { age: 7, name: 'Bar'},\n * { age: 5, name: 'Foo2'},\n * { age: 6, name: 'Foo3'},\n * ).pipe(\n * distinctUntilKeyChanged('name', (x: string, y: string) => x.substring(0, 3) === y.substring(0, 3)),\n * )\n * .subscribe(x => console.log(x));\n *\n * // displays:\n * // { age: 4, name: 'Foo1' }\n * // { age: 7, name: 'Bar' }\n * // { age: 5, name: 'Foo2' }\n * ```\n *\n * @see {@link distinct}\n * @see {@link distinctUntilChanged}\n *\n * @param {string} key String key for object property lookup on each item.\n * @param {function} [compare] Optional comparison function called to test if an item is distinct from the previous item in the source.\n * @return A function that returns an Observable that emits items from the\n * source Observable with distinct values based on the key specified.\n */\nexport function distinctUntilKeyChanged(key: K, compare?: (x: T[K], y: T[K]) => boolean): MonoTypeOperatorFunction {\n return distinctUntilChanged((x: T, y: T) => compare ? compare(x[key], y[key]) : x[key] === y[key]);\n}\n","import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/* tslint:disable:max-line-length */\nexport function exhaustMap>(\n project: (value: T, index: number) => O\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function exhaustMap>(\n project: (value: T, index: number) => O,\n resultSelector: undefined\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function exhaustMap(\n project: (value: T, index: number) => ObservableInput,\n resultSelector: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R\n): OperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable only if the previous projected Observable has completed.\n *\n * Maps each value to an Observable, then flattens all of\n * these inner Observables using {@link exhaust}.\n *\n * ![](exhaustMap.png)\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an (so-called \"inner\") Observable. When it projects a source value to\n * an Observable, the output Observable begins emitting the items emitted by\n * that projected Observable. However, `exhaustMap` ignores every new projected\n * Observable if the previous projected Observable has not yet completed. Once\n * that one completes, it will accept and flatten the next projected Observable\n * and repeat this process.\n *\n * ## Example\n * Run a finite timer for each click, only if there is no currently active timer\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { exhaustMap, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * exhaustMap(ev => interval(1000).pipe(take(5)))\n * );\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link concatMap}\n * @see {@link exhaust}\n * @see {@link mergeMap}\n * @see {@link switchMap}\n *\n * @param {function(value: T, ?index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @return A function that returns an Observable containing projected\n * Observables of each item of the source, ignoring projected Observables that\n * start before their preceding Observable has completed.\n */\nexport function exhaustMap>(\n project: (value: T, index: number) => O,\n resultSelector?: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R\n): OperatorFunction | R> {\n if (resultSelector) {\n // DEPRECATED PATH\n return (source: Observable) =>\n source.pipe(exhaustMap((a, i) => innerFrom(project(a, i)).pipe(map((b: any, ii: any) => resultSelector(a, b, i, ii)))));\n }\n return operate((source, subscriber) => {\n let index = 0;\n let innerSub: Subscriber | null = null;\n let isComplete = false;\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (outerValue) => {\n if (!innerSub) {\n innerSub = new OperatorSubscriber(subscriber, undefined, () => {\n innerSub = null;\n isComplete && subscriber.complete();\n });\n innerFrom(project(outerValue, index++)).subscribe(innerSub);\n }\n },\n () => {\n isComplete = true;\n !innerSub && subscriber.complete();\n }\n )\n );\n });\n}\n","import { OperatorFunction, ObservableInput, ObservedValueOf, SchedulerLike } from '../types';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\n\n/* tslint:disable:max-line-length */\nexport function expand>(\n project: (value: T, index: number) => O,\n concurrent?: number,\n scheduler?: SchedulerLike\n): OperatorFunction>;\n/**\n * @deprecated The `scheduler` parameter will be removed in v8. If you need to schedule the inner subscription,\n * use `subscribeOn` within the projection function: `expand((value) => fn(value).pipe(subscribeOn(scheduler)))`.\n * Details: Details: https://rxjs.dev/deprecations/scheduler-argument\n */\nexport function expand>(\n project: (value: T, index: number) => O,\n concurrent: number | undefined,\n scheduler: SchedulerLike\n): OperatorFunction>;\n/* tslint:enable:max-line-length */\n\n/**\n * Recursively projects each source value to an Observable which is merged in\n * the output Observable.\n *\n * It's similar to {@link mergeMap}, but applies the\n * projection function to every source value as well as every output value.\n * It's recursive.\n *\n * ![](expand.png)\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an Observable, and then merging those resulting Observables and\n * emitting the results of this merger. *Expand* will re-emit on the output\n * Observable every source value. Then, each output value is given to the\n * `project` function which returns an inner Observable to be merged on the\n * output Observable. Those output values resulting from the projection are also\n * given to the `project` function to produce new output values. This is how\n * *expand* behaves recursively.\n *\n * ## Example\n * Start emitting the powers of two on every click, at most 10 of them\n * ```ts\n * import { fromEvent, of } from 'rxjs';\n * import { expand, mapTo, delay, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const powersOfTwo = clicks.pipe(\n * mapTo(1),\n * expand(x => of(2 * x).pipe(delay(1000))),\n * take(10),\n * );\n * powersOfTwo.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link mergeMap}\n * @see {@link mergeScan}\n *\n * @param {function(value: T, index: number) => Observable} project A function\n * that, when applied to an item emitted by the source or the output Observable,\n * returns an Observable.\n * @param {number} [concurrent=Infinity] Maximum number of input\n * Observables being subscribed to concurrently.\n * @param {SchedulerLike} [scheduler=null] The {@link SchedulerLike} to use for subscribing to\n * each projected inner Observable.\n * @return A function that returns an Observable that emits the source values\n * and also result of applying the projection function to each value emitted on\n * the output Observable and merging the results of the Observables obtained\n * from this transformation.\n */\nexport function expand>(\n project: (value: T, index: number) => O,\n concurrent = Infinity,\n scheduler?: SchedulerLike\n): OperatorFunction> {\n concurrent = (concurrent || 0) < 1 ? Infinity : concurrent;\n return operate((source, subscriber) =>\n mergeInternals(\n // General merge params\n source,\n subscriber,\n project,\n concurrent,\n\n // onBeforeNext\n undefined,\n\n // Expand-specific\n true, // Use expand path\n scheduler // Inner subscription scheduler\n )\n );\n}\n","import { OperatorFunction, MonoTypeOperatorFunction, TruthyTypesOf } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function filter(predicate: (this: A, value: T, index: number) => value is S, thisArg: A): OperatorFunction;\nexport function filter(predicate: (value: T, index: number) => value is S): OperatorFunction;\nexport function filter(predicate: BooleanConstructor): OperatorFunction>;\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function filter(predicate: (this: A, value: T, index: number) => boolean, thisArg: A): MonoTypeOperatorFunction;\nexport function filter(predicate: (value: T, index: number) => boolean): MonoTypeOperatorFunction;\n\n/**\n * Filter items emitted by the source Observable by only emitting those that\n * satisfy a specified predicate.\n *\n * Like\n * [Array.prototype.filter()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter),\n * it only emits a value from the source if it passes a criterion function.\n *\n * ![](filter.png)\n *\n * Similar to the well-known `Array.prototype.filter` method, this operator\n * takes values from the source Observable, passes them through a `predicate`\n * function and only emits those values that yielded `true`.\n *\n * ## Example\n * Emit only click events whose target was a DIV element\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { filter } from 'rxjs/operators';\n *\n * const div = document.createElement('div');\n * div.style.cssText = `width: 200px;height: 200px;background: #09c;`;\n * document.body.appendChild(div);\n *\n * const clicks = fromEvent(document, 'click');\n * const clicksOnDivs = clicks.pipe(filter(ev => ev.target.tagName === 'DIV'));\n * clicksOnDivs.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link distinct}\n * @see {@link distinctUntilChanged}\n * @see {@link distinctUntilKeyChanged}\n * @see {@link ignoreElements}\n * @see {@link partition}\n * @see {@link skip}\n *\n * @param predicate A function that\n * evaluates each value emitted by the source Observable. If it returns `true`,\n * the value is emitted, if `false` the value is not passed to the output\n * Observable. The `index` parameter is the number `i` for the i-th source\n * emission that has happened since the subscription, starting from the number\n * `0`.\n * @param thisArg An optional argument to determine the value of `this`\n * in the `predicate` function.\n * @return A function that returns an Observable that emits items from the\n * source Observable that satisfy the specified `predicate`.\n */\nexport function filter(predicate: (value: T, index: number) => boolean, thisArg?: any): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n // An index passed to our predicate function on each call.\n let index = 0;\n\n // Subscribe to the source, all errors and completions are\n // forwarded to the consumer.\n source.subscribe(\n // Call the predicate with the appropriate `this` context,\n // if the predicate returns `true`, then send the value\n // to the consumer.\n new OperatorSubscriber(subscriber, (value) => predicate.call(thisArg, value, index++) && subscriber.next(value))\n );\n });\n}\n","import { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\n\n/**\n * Returns an Observable that mirrors the source Observable, but will call a specified function when\n * the source terminates on complete or error.\n * The specified function will also be called when the subscriber explicitly unsubscribes.\n *\n * ## Examples\n * Execute callback function when the observable completes\n *\n * ```ts\n * import { interval } from 'rxjs';\n * import { take, finalize } from 'rxjs/operators';\n *\n * // emit value in sequence every 1 second\n * const source = interval(1000);\n * const example = source.pipe(\n * take(5), //take only the first 5 values\n * finalize(() => console.log('Sequence complete')) // Execute when the observable completes\n * )\n * const subscribe = example.subscribe(val => console.log(val));\n *\n * // results:\n * // 0\n * // 1\n * // 2\n * // 3\n * // 4\n * // 'Sequence complete'\n * ```\n *\n * Execute callback function when the subscriber explicitly unsubscribes\n *\n * ```ts\n * import { interval, timer, noop } from 'rxjs';\n * import { finalize, tap } from 'rxjs/operators';\n *\n * const source = interval(100).pipe(\n * finalize(() => console.log('[finalize] Called')),\n * tap({\n * next: () => console.log('[next] Called'),\n * error: () => console.log('[error] Not called'),\n * complete: () => console.log('[tap complete] Not called')\n * })\n * );\n *\n * const sub = source.subscribe({\n * next: x => console.log(x),\n * error: noop,\n * complete: () => console.log('[complete] Not called')\n * });\n *\n * timer(150).subscribe(() => sub.unsubscribe());\n *\n * // results:\n * // '[next] Called'\n * // 0\n * // '[finalize] Called'\n * ```\n *\n * @param {function} callback Function to be called when source terminates.\n * @return A function that returns an Observable that mirrors the source, but\n * will call the specified function on termination.\n */\nexport function finalize(callback: () => void): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n // TODO: This try/finally was only added for `useDeprecatedSynchronousErrorHandling`.\n // REMOVE THIS WHEN THAT HOT GARBAGE IS REMOVED IN V8.\n try {\n source.subscribe(subscriber);\n } finally {\n subscriber.add(callback);\n }\n });\n}\n","import { Observable } from '../Observable';\nimport { EmptyError } from '../util/EmptyError';\nimport { OperatorFunction, TruthyTypesOf } from '../types';\nimport { filter } from './filter';\nimport { take } from './take';\nimport { defaultIfEmpty } from './defaultIfEmpty';\nimport { throwIfEmpty } from './throwIfEmpty';\nimport { identity } from '../util/identity';\n\nexport function first(predicate?: null, defaultValue?: D): OperatorFunction;\nexport function first(predicate: BooleanConstructor): OperatorFunction>;\nexport function first(predicate: BooleanConstructor, defaultValue: D): OperatorFunction | D>;\nexport function first(\n predicate: (value: T, index: number, source: Observable) => value is S,\n defaultValue?: S\n): OperatorFunction;\nexport function first(\n predicate: (value: T, index: number, source: Observable) => value is S,\n defaultValue: D\n): OperatorFunction;\nexport function first(\n predicate: (value: T, index: number, source: Observable) => boolean,\n defaultValue?: D\n): OperatorFunction;\n\n/**\n * Emits only the first value (or the first value that meets some condition)\n * emitted by the source Observable.\n *\n * Emits only the first value. Or emits only the first\n * value that passes some test.\n *\n * ![](first.png)\n *\n * If called with no arguments, `first` emits the first value of the source\n * Observable, then completes. If called with a `predicate` function, `first`\n * emits the first value of the source that matches the specified condition. Throws an error if\n * `defaultValue` was not provided and a matching element is not found.\n *\n * ## Examples\n * Emit only the first click that happens on the DOM\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { first } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(first());\n * result.subscribe(x => console.log(x));\n * ```\n *\n * Emits the first click that happens on a DIV\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { first } from 'rxjs/operators';\n *\n * const div = document.createElement('div');\n * div.style.cssText = 'width: 200px; height: 200px; background: #09c;';\n * document.body.appendChild(div);\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(first(ev => ev.target.tagName === 'DIV'));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link filter}\n * @see {@link find}\n * @see {@link take}\n *\n * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`\n * callback if the Observable completes before any `next` notification was sent.\n * This is how `first()` is different from {@link take}(1) which completes instead.\n *\n * @param {function(value: T, index: number, source: Observable): boolean} [predicate]\n * An optional function called with each item to test for condition matching.\n * @param {R} [defaultValue] The default value emitted in case no valid value\n * was found on the source.\n * @return A function that returns an Observable that emits the first item that\n * matches the condition.\n */\nexport function first(\n predicate?: ((value: T, index: number, source: Observable) => boolean) | null,\n defaultValue?: D\n): OperatorFunction {\n const hasDefaultValue = arguments.length >= 2;\n return (source: Observable) =>\n source.pipe(\n predicate ? filter((v, i) => predicate(v, i, source)) : identity,\n take(1),\n hasDefaultValue ? defaultIfEmpty(defaultValue!) : throwIfEmpty(() => new EmptyError())\n );\n}\n","import { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { noop } from '../util/noop';\n\n/**\n * Ignores all items emitted by the source Observable and only passes calls of `complete` or `error`.\n *\n * ![](ignoreElements.png)\n *\n * The _IgnoreElements_ operator suppresses all of the items emitted by the source Observable,\n * but allows its termination notification (either `error` or `complete`) to pass through unchanged.\n *\n * If you do not care about the items being emitted by an Observable, but you do want to be notified\n * when it completes or when it terminates with an error, you can apply the `ignoreElements` operator\n * to the Observable, which will ensure that it will never call its observers’ `next` handlers.\n *\n * ## Examples\n * ```ts\n * import { of } from 'rxjs';\n * import { ignoreElements } from 'rxjs/operators';\n *\n * of('you', 'talking', 'to', 'me').pipe(\n * ignoreElements(),\n * )\n * .subscribe({\n * next: word => console.log(word),\n * error: err => console.log('error:', err),\n * complete: () => console.log('the end'),\n * });\n * // result:\n * // 'the end'\n * ```\n * @return A function that returns an empty Observable that only calls\n * `complete` or `error`, based on which one is called by the source\n * Observable.\n */\nexport function ignoreElements(): OperatorFunction {\n return operate((source, subscriber) => {\n source.subscribe(new OperatorSubscriber(subscriber, noop));\n });\n}\n","import { Observable } from '../Observable';\nimport { EmptyError } from '../util/EmptyError';\nimport { OperatorFunction, TruthyTypesOf } from '../types';\nimport { filter } from './filter';\nimport { takeLast } from './takeLast';\nimport { throwIfEmpty } from './throwIfEmpty';\nimport { defaultIfEmpty } from './defaultIfEmpty';\nimport { identity } from '../util/identity';\n\nexport function last(predicate: BooleanConstructor): OperatorFunction>;\nexport function last(predicate: BooleanConstructor, defaultValue: D): OperatorFunction | D>;\nexport function last(predicate?: null, defaultValue?: D): OperatorFunction;\nexport function last(\n predicate: (value: T, index: number, source: Observable) => value is S,\n defaultValue?: S\n): OperatorFunction;\nexport function last(\n predicate: (value: T, index: number, source: Observable) => boolean,\n defaultValue?: D\n): OperatorFunction;\n\n/**\n * Returns an Observable that emits only the last item emitted by the source Observable.\n * It optionally takes a predicate function as a parameter, in which case, rather than emitting\n * the last item from the source Observable, the resulting Observable will emit the last item\n * from the source Observable that satisfies the predicate.\n *\n * ![](last.png)\n *\n * It will throw an error if the source completes without notification or one that matches the predicate. It\n * returns the last value or if a predicate is provided last value that matches the predicate. It returns the\n * given default value if no notification is emitted or matches the predicate.\n *\n * ## Example\n * Last alphabet from the sequence.\n * ```ts\n * import { from } from 'rxjs';\n * import { last } from 'rxjs/operators';\n *\n * const source = from(['x', 'y', 'z']);\n * const example = source.pipe(last());\n * //output: \"Last alphabet: z\"\n * example.subscribe(val => console.log(`Last alphabet: ${val}`));\n * ```\n *\n * Default value when the value in the predicate is not matched.\n * ```ts\n * import { from } from 'rxjs';\n * import { last } from 'rxjs/operators';\n *\n * const source = from(['x', 'y', 'z']);\n * const example = source.pipe(last(char => char === 'a','not exist'));\n * //output: \"'a' is not exist.\"\n * example.subscribe(val => console.log(`'a' is ${val}.`));\n * ```\n *\n * @see {@link skip}\n * @see {@link skipUntil}\n * @see {@link skipLast}\n * @see {@link skipWhile}\n *\n * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`\n * callback if the Observable completes before any `next` notification was sent.\n * @param {function} [predicate] - The condition any source emitted item has to satisfy.\n * @param {any} [defaultValue] - An optional default value to provide if last\n * predicate isn't met or no values were emitted.\n * @return A function that returns an Observable that emits only the last item\n * satisfying the given condition from the source, or a NoSuchElementException\n * if no such items are emitted.\n * @throws - Throws if no items that match the predicate are emitted by the source Observable.\n */\nexport function last(\n predicate?: ((value: T, index: number, source: Observable) => boolean) | null,\n defaultValue?: D\n): OperatorFunction {\n const hasDefaultValue = arguments.length >= 2;\n return (source: Observable) =>\n source.pipe(\n predicate ? filter((v, i) => predicate(v, i, source)) : identity,\n takeLast(1),\n hasDefaultValue ? defaultIfEmpty(defaultValue!) : throwIfEmpty(() => new EmptyError())\n );\n}\n","import { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\nexport function map(project: (value: T, index: number) => R): OperatorFunction;\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function map(project: (this: A, value: T, index: number) => R, thisArg: A): OperatorFunction;\n\n/**\n * Applies a given `project` function to each value emitted by the source\n * Observable, and emits the resulting values as an Observable.\n *\n * Like [Array.prototype.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map),\n * it passes each source value through a transformation function to get\n * corresponding output values.\n *\n * ![](map.png)\n *\n * Similar to the well known `Array.prototype.map` function, this operator\n * applies a projection to each value and emits that projection in the output\n * Observable.\n *\n * ## Example\n * Map every click to the clientX position of that click\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { map } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const positions = clicks.pipe(map(ev => ev.clientX));\n * positions.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link mapTo}\n * @see {@link pluck}\n *\n * @param {function(value: T, index: number): R} project The function to apply\n * to each `value` emitted by the source Observable. The `index` parameter is\n * the number `i` for the i-th emission that has happened since the\n * subscription, starting from the number `0`.\n * @param {any} [thisArg] An optional argument to define what `this` is in the\n * `project` function.\n * @return A function that returns an Observable that emits the values from the\n * source Observable transformed by the given `project` function.\n */\nexport function map(project: (value: T, index: number) => R, thisArg?: any): OperatorFunction {\n return operate((source, subscriber) => {\n // The index of the value from the source. Used with projection.\n let index = 0;\n // Subscribe to the source, all errors and completions are sent along\n // to the consumer.\n source.subscribe(\n new OperatorSubscriber(subscriber, (value: T) => {\n // Call the projection function with the appropriate this context,\n // and send the resulting value to the consumer.\n subscriber.next(project.call(thisArg, value, index++));\n })\n );\n });\n}\n","import { OperatorFunction } from '../types';\nimport { map } from './map';\n\nexport function mapTo(value: R): OperatorFunction;\n/** @deprecated Do not specify explicit type parameters. Signatures with type parameters that cannot be inferred will be removed in v8. */\nexport function mapTo(value: R): OperatorFunction;\n\n/**\n * Emits the given constant value on the output Observable every time the source\n * Observable emits a value.\n *\n * Like {@link map}, but it maps every source value to\n * the same output value every time.\n *\n * ![](mapTo.png)\n *\n * Takes a constant `value` as argument, and emits that whenever the source\n * Observable emits a value. In other words, ignores the actual source value,\n * and simply uses the emission moment to know when to emit the given `value`.\n *\n * ## Example\n * Map every click to the string 'Hi'\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { mapTo } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const greetings = clicks.pipe(mapTo('Hi'));\n * greetings.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link map}\n *\n * @param value The value to map each source value to.\n * @return A function that returns an Observable that emits the given `value`\n * every time the source Observable emits.\n */\nexport function mapTo(value: R): OperatorFunction {\n return map(() => value);\n}\n","import { mergeMap } from './mergeMap';\nimport { identity } from '../util/identity';\nimport { OperatorFunction, ObservableInput, ObservedValueOf } from '../types';\n\n/**\n * Converts a higher-order Observable into a first-order Observable which\n * concurrently delivers all values that are emitted on the inner Observables.\n *\n * Flattens an Observable-of-Observables.\n *\n * ![](mergeAll.png)\n *\n * `mergeAll` subscribes to an Observable that emits Observables, also known as\n * a higher-order Observable. Each time it observes one of these emitted inner\n * Observables, it subscribes to that and delivers all the values from the\n * inner Observable on the output Observable. The output Observable only\n * completes once all inner Observables have completed. Any error delivered by\n * a inner Observable will be immediately emitted on the output Observable.\n *\n * ## Examples\n * Spawn a new interval Observable for each click event, and blend their outputs as one Observable\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { map, mergeAll } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const higherOrder = clicks.pipe(map((ev) => interval(1000)));\n * const firstOrder = higherOrder.pipe(mergeAll());\n * firstOrder.subscribe(x => console.log(x));\n * ```\n *\n * Count from 0 to 9 every second for each click, but only allow 2 concurrent timers\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { take, map, mergeAll } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const higherOrder = clicks.pipe(\n * map((ev) => interval(1000).pipe(take(10))),\n * );\n * const firstOrder = higherOrder.pipe(mergeAll(2));\n * firstOrder.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link combineLatestAll}\n * @see {@link concatAll}\n * @see {@link exhaustAll}\n * @see {@link merge}\n * @see {@link mergeMap}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n * @see {@link switchAll}\n * @see {@link switchMap}\n * @see {@link zipAll}\n *\n * @param {number} [concurrent=Infinity] Maximum number of inner\n * Observables being subscribed to concurrently.\n * @return A function that returns an Observable that emits values coming from\n * all the inner Observables emitted by the source Observable.\n */\nexport function mergeAll>(concurrent: number = Infinity): OperatorFunction> {\n return mergeMap(identity, concurrent);\n}\n","import { Observable } from '../Observable';\nimport { innerFrom } from '../observable/innerFrom';\nimport { Subscriber } from '../Subscriber';\nimport { ObservableInput, SchedulerLike } from '../types';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * A process embodying the general \"merge\" strategy. This is used in\n * `mergeMap` and `mergeScan` because the logic is otherwise nearly identical.\n * @param source The original source observable\n * @param subscriber The consumer subscriber\n * @param project The projection function to get our inner sources\n * @param concurrent The number of concurrent inner subscriptions\n * @param onBeforeNext Additional logic to apply before nexting to our consumer\n * @param expand If `true` this will perform an \"expand\" strategy, which differs only\n * in that it recurses, and the inner subscription must be schedule-able.\n * @param innerSubScheduler A scheduler to use to schedule inner subscriptions,\n * this is to support the expand strategy, mostly, and should be deprecated\n */\nexport function mergeInternals(\n source: Observable,\n subscriber: Subscriber,\n project: (value: T, index: number) => ObservableInput,\n concurrent: number,\n onBeforeNext?: (innerValue: R) => void,\n expand?: boolean,\n innerSubScheduler?: SchedulerLike,\n additionalTeardown?: () => void\n) {\n // Buffered values, in the event of going over our concurrency limit\n const buffer: T[] = [];\n // The number of active inner subscriptions.\n let active = 0;\n // An index to pass to our accumulator function\n let index = 0;\n // Whether or not the outer source has completed.\n let isComplete = false;\n\n /**\n * Checks to see if we can complete our result or not.\n */\n const checkComplete = () => {\n // If the outer has completed, and nothing is left in the buffer,\n // and we don't have any active inner subscriptions, then we can\n // Emit the state and complete.\n if (isComplete && !buffer.length && !active) {\n subscriber.complete();\n }\n };\n\n // If we're under our concurrency limit, just start the inner subscription, otherwise buffer and wait.\n const outerNext = (value: T) => (active < concurrent ? doInnerSub(value) : buffer.push(value));\n\n const doInnerSub = (value: T) => {\n // If we're expanding, we need to emit the outer values and the inner values\n // as the inners will \"become outers\" in a way as they are recursively fed\n // back to the projection mechanism.\n expand && subscriber.next(value as any);\n\n // Increment the number of active subscriptions so we can track it\n // against our concurrency limit later.\n active++;\n\n // A flag used to show that the inner observable completed.\n // This is checked during finalization to see if we should\n // move to the next item in the buffer, if there is on.\n let innerComplete = false;\n\n // Start our inner subscription.\n innerFrom(project(value, index++)).subscribe(\n new OperatorSubscriber(\n subscriber,\n (innerValue) => {\n // `mergeScan` has additional handling here. For example\n // taking the inner value and updating state.\n onBeforeNext?.(innerValue);\n\n if (expand) {\n // If we're expanding, then just recurse back to our outer\n // handler. It will emit the value first thing.\n outerNext(innerValue as any);\n } else {\n // Otherwise, emit the inner value.\n subscriber.next(innerValue);\n }\n },\n () => {\n // Flag that we have completed, so we know to check the buffer\n // during finalization.\n innerComplete = true;\n },\n // Errors are passed to the destination.\n undefined,\n () => {\n // During finalization, if the inner completed (it wasn't errored or\n // cancelled), then we want to try the next item in the buffer if\n // there is one.\n if (innerComplete) {\n // We have to wrap this in a try/catch because it happens during\n // finalization, possibly asynchronously, and we want to pass\n // any errors that happen (like in a projection function) to\n // the outer Subscriber.\n try {\n // INNER SOURCE COMPLETE\n // Decrement the active count to ensure that the next time\n // we try to call `doInnerSub`, the number is accurate.\n active--;\n // If we have more values in the buffer, try to process those\n // Note that this call will increment `active` ahead of the\n // next conditional, if there were any more inner subscriptions\n // to start.\n while (buffer.length && active < concurrent) {\n const bufferedValue = buffer.shift()!;\n // Particularly for `expand`, we need to check to see if a scheduler was provided\n // for when we want to start our inner subscription. Otherwise, we just start\n // are next inner subscription.\n if (innerSubScheduler) {\n executeSchedule(subscriber, innerSubScheduler, () => doInnerSub(bufferedValue));\n } else {\n doInnerSub(bufferedValue);\n }\n }\n // Check to see if we can complete, and complete if so.\n checkComplete();\n } catch (err) {\n subscriber.error(err);\n }\n }\n }\n )\n );\n };\n\n // Subscribe to our source observable.\n source.subscribe(\n new OperatorSubscriber(subscriber, outerNext, () => {\n // Outer completed, make a note of it, and check to see if we can complete everything.\n isComplete = true;\n checkComplete();\n })\n );\n\n // Additional teardown (for when the destination is torn down).\n // Other teardown is added implicitly via subscription above.\n return () => {\n additionalTeardown?.();\n };\n}\n","import { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nimport { isFunction } from '../util/isFunction';\n\n/* tslint:disable:max-line-length */\nexport function mergeMap>(\n project: (value: T, index: number) => O,\n concurrent?: number\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function mergeMap>(\n project: (value: T, index: number) => O,\n resultSelector: undefined,\n concurrent?: number\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function mergeMap>(\n project: (value: T, index: number) => O,\n resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R,\n concurrent?: number\n): OperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable.\n *\n * Maps each value to an Observable, then flattens all of\n * these inner Observables using {@link mergeAll}.\n *\n * ![](mergeMap.png)\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an Observable, and then merging those resulting Observables and\n * emitting the results of this merger.\n *\n * ## Example\n * Map and flatten each letter to an Observable ticking every 1 second\n * ```ts\n * import { of, interval } from 'rxjs';\n * import { mergeMap, map } from 'rxjs/operators';\n *\n * const letters = of('a', 'b', 'c');\n * const result = letters.pipe(\n * mergeMap(x => interval(1000).pipe(map(i => x+i))),\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // a0\n * // b0\n * // c0\n * // a1\n * // b1\n * // c1\n * // continues to list a,b,c with respective ascending integers\n * ```\n *\n * @see {@link concatMap}\n * @see {@link exhaustMap}\n * @see {@link merge}\n * @see {@link mergeAll}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n * @see {@link switchMap}\n *\n * @param {function(value: T, ?index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @param {number} [concurrent=Infinity] Maximum number of input\n * Observables being subscribed to concurrently.\n * @return A function that returns an Observable that emits the result of\n * applying the projection function (and the optional deprecated\n * `resultSelector`) to each item emitted by the source Observable and merging\n * the results of the Observables obtained from this transformation.\n */\nexport function mergeMap>(\n project: (value: T, index: number) => O,\n resultSelector?: ((outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R) | number,\n concurrent: number = Infinity\n): OperatorFunction | R> {\n if (isFunction(resultSelector)) {\n // DEPRECATED PATH\n return mergeMap((a, i) => map((b: any, ii: number) => resultSelector(a, b, i, ii))(innerFrom(project(a, i))), concurrent);\n } else if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n\n return operate((source, subscriber) => mergeInternals(source, subscriber, project, concurrent));\n}\n","import { ObservableInput, OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\n\n/**\n * Applies an accumulator function over the source Observable where the\n * accumulator function itself returns an Observable, then each intermediate\n * Observable returned is merged into the output Observable.\n *\n * It's like {@link scan}, but the Observables returned\n * by the accumulator are merged into the outer Observable.\n *\n * The first parameter of the `mergeScan` is an `accumulator` function which is\n * being called every time the source Observable emits a value. `mergeScan` will\n * subscribe to the value returned by the `accumulator` function and will emit\n * values to the subscriber emitted by inner Observable.\n *\n * The `accumulator` function is being called with three parameters passed to it:\n * `acc`, `value` and `index`. The `acc` parameter is used as the state parameter\n * whose value is initially set to the `seed` parameter (the second parameter\n * passed to the `mergeScan` operator).\n *\n * `mergeScan` internally keeps the value of the `acc` parameter: as long as the\n * source Observable emits without inner Observable emitting, the `acc` will be\n * set to `seed`. The next time the inner Observable emits a value, `mergeScan`\n * will internally remember it and it will be passed to the `accumulator`\n * function as `acc` parameter the next time source emits.\n *\n * The `value` parameter of the `accumulator` function is the value emitted by the\n * source Observable, while the `index` is a number which represent the order of the\n * current emission by the source Observable. It starts with 0.\n *\n * The last parameter to the `mergeScan` is the `concurrent` value which defaults\n * to Infinity. It represent the maximum number of inner Observable subscriptions\n * at a time.\n *\n * ## Example\n * Count the number of click events\n * ```ts\n * import { fromEvent, of } from 'rxjs';\n * import { mapTo, mergeScan } from 'rxjs/operators';\n *\n * const click$ = fromEvent(document, 'click');\n * const one$ = click$.pipe(mapTo(1));\n * const seed = 0;\n * const count$ = one$.pipe(\n * mergeScan((acc, one) => of(acc + one), seed),\n * );\n * count$.subscribe(x => console.log(x));\n *\n * // Results:\n * // 1\n * // 2\n * // 3\n * // 4\n * // ...and so on for each click\n * ```\n *\n * @see {@link scan}\n * @see {@link switchScan}\n *\n * @param {function(acc: R, value: T): Observable} accumulator\n * The accumulator function called on each source value.\n * @param seed The initial accumulation value.\n * @param {number} [concurrent=Infinity] Maximum number of\n * input Observables being subscribed to concurrently.\n * @return A function that returns an Observable of the accumulated values.\n */\nexport function mergeScan(\n accumulator: (acc: R, value: T, index: number) => ObservableInput,\n seed: R,\n concurrent = Infinity\n): OperatorFunction {\n return operate((source, subscriber) => {\n // The accumulated state.\n let state = seed;\n\n return mergeInternals(\n source,\n subscriber,\n (value, index) => accumulator(state, value, index),\n concurrent,\n (value) => {\n state = value;\n },\n false,\n undefined,\n () => (state = null!)\n );\n });\n}\n","import { Subject } from '../Subject';\nimport { Observable } from '../Observable';\nimport { ConnectableObservable } from '../observable/ConnectableObservable';\nimport { OperatorFunction, UnaryFunction, ObservedValueOf, ObservableInput } from '../types';\nimport { isFunction } from '../util/isFunction';\nimport { connect } from './connect';\n\n/**\n * An operator that creates a {@link ConnectableObservable}, that when connected,\n * with the `connect` method, will use the provided subject to multicast the values\n * from the source to all consumers.\n *\n * @param subject The subject to multicast through.\n * @return A function that returns a {@link ConnectableObservable}\n * @deprecated Will be removed in v8. To create a connectable observable, use {@link connectable}.\n * If you're using {@link refCount} after `multicast`, use the {@link share} operator instead.\n * `multicast(subject), refCount()` is equivalent to\n * `share({ connector: () => subject, resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false })`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function multicast(subject: Subject): UnaryFunction, ConnectableObservable>;\n\n/**\n * Because this is deprecated in favor of the {@link connect} operator, and was otherwise poorly documented,\n * rather than duplicate the effort of documenting the same behavior, please see documentation for the\n * {@link connect} operator.\n *\n * @param subject The subject used to multicast.\n * @param selector A setup function to setup the multicast\n * @return A function that returns an observable that mirrors the observable returned by the selector.\n * @deprecated Will be removed in v8. Use the {@link connect} operator instead.\n * `multicast(subject, selector)` is equivalent to\n * `connect(selector, { connector: () => subject })`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function multicast>(\n subject: Subject,\n selector: (shared: Observable) => O\n): OperatorFunction>;\n\n/**\n * An operator that creates a {@link ConnectableObservable}, that when connected,\n * with the `connect` method, will use the provided subject to multicast the values\n * from the source to all consumers.\n *\n * @param subjectFactory A factory that will be called to create the subject. Passing a function here\n * will cause the underlying subject to be \"reset\" on error, completion, or refCounted unsubscription of\n * the source.\n * @return A function that returns a {@link ConnectableObservable}\n * @deprecated Will be removed in v8. To create a connectable observable, use {@link connectable}.\n * If you're using {@link refCount} after `multicast`, use the {@link share} operator instead.\n * `multicast(() => new BehaviorSubject('test')), refCount()` is equivalent to\n * `share({ connector: () => new BehaviorSubject('test') })`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function multicast(subjectFactory: () => Subject): UnaryFunction, ConnectableObservable>;\n\n/**\n * Because this is deprecated in favor of the {@link connect} operator, and was otherwise poorly documented,\n * rather than duplicate the effort of documenting the same behavior, please see documentation for the\n * {@link connect} operator.\n *\n * @param subjectFactory A factory that creates the subject used to multicast.\n * @param selector A function to setup the multicast and select the output.\n * @return A function that returns an observable that mirrors the observable returned by the selector.\n * @deprecated Will be removed in v8. Use the {@link connect} operator instead.\n * `multicast(subjectFactory, selector)` is equivalent to\n * `connect(selector, { connector: subjectFactory })`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function multicast>(\n subjectFactory: () => Subject,\n selector: (shared: Observable) => O\n): OperatorFunction>;\n\n/**\n * @deprecated Will be removed in v8. Use the {@link connectable} observable, the {@link connect} operator or the\n * {@link share} operator instead. See the overloads below for equivalent replacement examples of this operator's\n * behaviors.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function multicast(\n subjectOrSubjectFactory: Subject | (() => Subject),\n selector?: (source: Observable) => Observable\n): OperatorFunction {\n const subjectFactory = isFunction(subjectOrSubjectFactory) ? subjectOrSubjectFactory : () => subjectOrSubjectFactory;\n\n if (isFunction(selector)) {\n // If a selector function is provided, then we're a \"normal\" operator that isn't\n // going to return a ConnectableObservable. We can use `connect` to do what we\n // need to do.\n return connect(selector, {\n connector: subjectFactory,\n });\n }\n\n return (source: Observable) => new ConnectableObservable(source, subjectFactory);\n}\n","/** @prettier */\nimport { MonoTypeOperatorFunction, SchedulerLike } from '../types';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n *\n * Re-emits all notifications from source Observable with specified scheduler.\n *\n * Ensure a specific scheduler is used, from outside of an Observable.\n *\n * `observeOn` is an operator that accepts a scheduler as a first parameter, which will be used to reschedule\n * notifications emitted by the source Observable. It might be useful, if you do not have control over\n * internal scheduler of a given Observable, but want to control when its values are emitted nevertheless.\n *\n * Returned Observable emits the same notifications (nexted values, complete and error events) as the source Observable,\n * but rescheduled with provided scheduler. Note that this doesn't mean that source Observables internal\n * scheduler will be replaced in any way. Original scheduler still will be used, but when the source Observable emits\n * notification, it will be immediately scheduled again - this time with scheduler passed to `observeOn`.\n * An anti-pattern would be calling `observeOn` on Observable that emits lots of values synchronously, to split\n * that emissions into asynchronous chunks. For this to happen, scheduler would have to be passed into the source\n * Observable directly (usually into the operator that creates it). `observeOn` simply delays notifications a\n * little bit more, to ensure that they are emitted at expected moments.\n *\n * As a matter of fact, `observeOn` accepts second parameter, which specifies in milliseconds with what delay notifications\n * will be emitted. The main difference between {@link delay} operator and `observeOn` is that `observeOn`\n * will delay all notifications - including error notifications - while `delay` will pass through error\n * from source Observable immediately when it is emitted. In general it is highly recommended to use `delay` operator\n * for any kind of delaying of values in the stream, while using `observeOn` to specify which scheduler should be used\n * for notification emissions in general.\n *\n * ## Example\n *\n * Ensure values in subscribe are called just before browser repaint.\n *\n * ```ts\n * import { interval, animationFrameScheduler } from 'rxjs';\n * import { observeOn } from 'rxjs/operators';\n *\n * const someDiv = document.createElement('div');\n * someDiv.style.cssText = 'width: 200px;background: #09c';\n * document.body.appendChild(someDiv);\n * const intervals = interval(10); // Intervals are scheduled\n * // with async scheduler by default...\n * intervals.pipe(\n * observeOn(animationFrameScheduler), // ...but we will observe on animationFrame\n * ) // scheduler to ensure smooth animation.\n * .subscribe(val => {\n * someDiv.style.height = val + 'px';\n * });\n * ```\n *\n * @see {@link delay}\n *\n * @param scheduler Scheduler that will be used to reschedule notifications from source Observable.\n * @param delay Number of milliseconds that states with what delay every notification should be rescheduled.\n * @return A function that returns an Observable that emits the same\n * notifications as the source Observable, but with provided scheduler.\n */\nexport function observeOn(scheduler: SchedulerLike, delay = 0): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => executeSchedule(subscriber, scheduler, () => subscriber.next(value), delay),\n () => executeSchedule(subscriber, scheduler, () => subscriber.complete(), delay),\n (err) => executeSchedule(subscriber, scheduler, () => subscriber.error(err), delay)\n )\n );\n });\n}\n","import { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Groups pairs of consecutive emissions together and emits them as an array of\n * two values.\n *\n * Puts the current value and previous value together as\n * an array, and emits that.\n *\n * ![](pairwise.png)\n *\n * The Nth emission from the source Observable will cause the output Observable\n * to emit an array [(N-1)th, Nth] of the previous and the current value, as a\n * pair. For this reason, `pairwise` emits on the second and subsequent\n * emissions from the source Observable, but not on the first emission, because\n * there is no previous value in that case.\n *\n * ## Example\n * On every click (starting from the second), emit the relative distance to the previous click\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { pairwise, map } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const pairs = clicks.pipe(pairwise());\n * const distance = pairs.pipe(\n * map(pair => {\n * const x0 = pair[0].clientX;\n * const y0 = pair[0].clientY;\n * const x1 = pair[1].clientX;\n * const y1 = pair[1].clientY;\n * return Math.sqrt(Math.pow(x0 - x1, 2) + Math.pow(y0 - y1, 2));\n * }),\n * );\n * distance.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link buffer}\n * @see {@link bufferCount}\n *\n * @return A function that returns an Observable of pairs (as arrays) of\n * consecutive values from the source Observable.\n */\nexport function pairwise(): OperatorFunction {\n return operate((source, subscriber) => {\n let prev: T;\n let hasPrev = false;\n source.subscribe(\n new OperatorSubscriber(subscriber, (value) => {\n const p = prev;\n prev = value;\n hasPrev && subscriber.next([p, value]);\n hasPrev = true;\n })\n );\n });\n}\n","import { Observable } from '../Observable';\nimport { Subject } from '../Subject';\nimport { multicast } from './multicast';\nimport { ConnectableObservable } from '../observable/ConnectableObservable';\nimport { MonoTypeOperatorFunction, OperatorFunction, UnaryFunction, ObservableInput, ObservedValueOf } from '../types';\nimport { connect } from './connect';\n\n/**\n * Returns a connectable observable that, when connected, will multicast\n * all values through a single underlying {@link Subject} instance.\n *\n * @deprecated Will be removed in v8. To create a connectable observable, use {@link connectable}.\n * `source.pipe(publish())` is equivalent to\n * `connectable(source, { connector: () => new Subject(), resetOnDisconnect: false })`.\n * If you're using {@link refCount} after `publish`, use {@link share} operator instead.\n * `source.pipe(publish(), refCount())` is equivalent to\n * `source.pipe(share({ resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false }))`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function publish(): UnaryFunction, ConnectableObservable>;\n\n/**\n * Returns an observable, that when subscribed to, creates an underlying {@link Subject},\n * provides an observable view of it to a `selector` function, takes the observable result of\n * that selector function and subscribes to it, sending its values to the consumer, _then_ connects\n * the subject to the original source.\n *\n * @param selector A function used to setup multicasting prior to automatic connection.\n *\n * @deprecated Will be removed in v8. Use the {@link connect} operator instead.\n * `publish(selector)` is equivalent to `connect(selector)`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function publish>(selector: (shared: Observable) => O): OperatorFunction>;\n\n/**\n * Returns a ConnectableObservable, which is a variety of Observable that waits until its connect method is called\n * before it begins emitting items to those Observers that have subscribed to it.\n *\n * Makes a cold Observable hot\n *\n * ![](publish.png)\n *\n * ## Examples\n * Make source$ hot by applying publish operator, then merge each inner observable into a single one\n * and subscribe.\n * ```ts\n * import { of, zip, interval, merge } from \"rxjs\";\n * import { map, publish, tap } from \"rxjs/operators\";\n *\n * const source$ = zip(interval(2000), of(1, 2, 3, 4, 5, 6, 7, 8, 9)).pipe(\n * map(values => values[1])\n * );\n *\n * source$\n * .pipe(\n * publish(multicasted$ =>\n * merge(\n * multicasted$.pipe(tap(x => console.log('Stream 1:', x))),\n * multicasted$.pipe(tap(x => console.log('Stream 2:', x))),\n * multicasted$.pipe(tap(x => console.log('Stream 3:', x))),\n * )\n * )\n * )\n * .subscribe();\n *\n * // Results every two seconds\n * // Stream 1: 1\n * // Stream 2: 1\n * // Stream 3: 1\n * // ...\n * // Stream 1: 9\n * // Stream 2: 9\n * // Stream 3: 9\n * ```\n *\n * @param {Function} [selector] - Optional selector function which can use the multicasted source sequence as many times\n * as needed, without causing multiple subscriptions to the source sequence.\n * Subscribers to the given source will receive all notifications of the source from the time of the subscription on.\n * @return A function that returns a ConnectableObservable that upon connection\n * causes the source Observable to emit items to its Observers.\n * @deprecated Will be removed in v8. Use the {@link connectable} observable, the {@link connect} operator or the\n * {@link share} operator instead. See the overloads below for equivalent replacement examples of this operator's\n * behaviors.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function publish(selector?: OperatorFunction): MonoTypeOperatorFunction | OperatorFunction {\n return selector ? (source) => connect(selector)(source) : (source) => multicast(new Subject())(source);\n}\n","import { ConnectableObservable } from '../observable/ConnectableObservable';\nimport { Subscription } from '../Subscription';\nimport { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Make a {@link ConnectableObservable} behave like a ordinary observable and automates the way\n * you can connect to it.\n *\n * Internally it counts the subscriptions to the observable and subscribes (only once) to the source if\n * the number of subscriptions is larger than 0. If the number of subscriptions is smaller than 1, it\n * unsubscribes from the source. This way you can make sure that everything before the *published*\n * refCount has only a single subscription independently of the number of subscribers to the target\n * observable.\n *\n * Note that using the {@link share} operator is exactly the same as using the `multicast(() => new Subject())` operator\n * (making the observable hot) and the *refCount* operator in a sequence.\n *\n * ![](refCount.png)\n *\n * ## Example\n *\n * In the following example there are two intervals turned into connectable observables\n * by using the *publish* operator. The first one uses the *refCount* operator, the\n * second one does not use it. You will notice that a connectable observable does nothing\n * until you call its connect function.\n *\n * ```ts\n * import { interval } from 'rxjs';\n * import { tap, publish, refCount } from 'rxjs/operators';\n *\n * // Turn the interval observable into a ConnectableObservable (hot)\n * const refCountInterval = interval(400).pipe(\n * tap((num) => console.log(`refCount ${num}`)),\n * publish(),\n * refCount()\n * );\n *\n * const publishedInterval = interval(400).pipe(\n * tap((num) => console.log(`publish ${num}`)),\n * publish()\n * );\n *\n * refCountInterval.subscribe();\n * refCountInterval.subscribe();\n * // 'refCount 0' -----> 'refCount 1' -----> etc\n * // All subscriptions will receive the same value and the tap (and\n * // every other operator) before the publish operator will be executed\n * // only once per event independently of the number of subscriptions.\n *\n * publishedInterval.subscribe();\n * // Nothing happens until you call .connect() on the observable.\n * ```\n *\n * @return A function that returns an Observable that automates the connection\n * to ConnectableObservable.\n * @see {@link ConnectableObservable}\n * @see {@link share}\n * @see {@link publish}\n * @deprecated Replaced with the {@link share} operator. How `share` is used\n * will depend on the connectable observable you created just prior to the\n * `refCount` operator.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function refCount(): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let connection: Subscription | null = null;\n\n (source as any)._refCount++;\n\n const refCounter = new OperatorSubscriber(subscriber, undefined, undefined, undefined, () => {\n if (!source || (source as any)._refCount <= 0 || 0 < --(source as any)._refCount) {\n connection = null;\n return;\n }\n\n ///\n // Compare the local RefCountSubscriber's connection Subscription to the\n // connection Subscription on the shared ConnectableObservable. In cases\n // where the ConnectableObservable source synchronously emits values, and\n // the RefCountSubscriber's downstream Observers synchronously unsubscribe,\n // execution continues to here before the RefCountOperator has a chance to\n // supply the RefCountSubscriber with the shared connection Subscription.\n // For example:\n // ```\n // range(0, 10).pipe(\n // publish(),\n // refCount(),\n // take(5),\n // )\n // .subscribe();\n // ```\n // In order to account for this case, RefCountSubscriber should only dispose\n // the ConnectableObservable's shared connection Subscription if the\n // connection Subscription exists, *and* either:\n // a. RefCountSubscriber doesn't have a reference to the shared connection\n // Subscription yet, or,\n // b. RefCountSubscriber's connection Subscription reference is identical\n // to the shared connection Subscription\n ///\n\n const sharedConnection = (source as any)._connection;\n const conn = connection;\n connection = null;\n\n if (sharedConnection && (!conn || sharedConnection === conn)) {\n sharedConnection.unsubscribe();\n }\n\n subscriber.unsubscribe();\n });\n\n source.subscribe(refCounter);\n\n if (!refCounter.closed) {\n connection = (source as ConnectableObservable).connect();\n }\n });\n}\n","import { Subscription } from '../Subscription';\nimport { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { MonoTypeOperatorFunction } from '../types';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Returns an Observable that will resubscribe to the source stream when the source stream completes, at most count times.\n *\n * Repeats all values emitted on the source. It's like {@link retry}, but for non error cases.\n *\n * ![](repeat.png)\n *\n * Similar to {@link retry}, this operator repeats the stream of items emitted by the source for non error cases.\n * Repeat can be useful for creating observables that are meant to have some repeated pattern or rhythm.\n *\n * Note: `repeat(0)` returns an empty observable and `repeat()` will repeat forever\n *\n * ## Example\n * Repeat a message stream\n * ```ts\n * import { of } from 'rxjs';\n * import { repeat } from 'rxjs/operators';\n *\n * const source = of('Repeat message');\n * const example = source.pipe(repeat(3));\n * example.subscribe(x => console.log(x));\n *\n * // Results\n * // Repeat message\n * // Repeat message\n * // Repeat message\n * ```\n *\n * Repeat 3 values, 2 times\n * ```ts\n * import { interval } from 'rxjs';\n * import { repeat, take } from 'rxjs/operators';\n *\n * const source = interval(1000);\n * const example = source.pipe(take(3), repeat(2));\n * example.subscribe(x => console.log(x));\n *\n * // Results every second\n * // 0\n * // 1\n * // 2\n * // 0\n * // 1\n * // 2\n * ```\n *\n * @see {@link repeatWhen}\n * @see {@link retry}\n *\n * @param {number} [count] The number of times the source Observable items are repeated, a count of 0 will yield\n * an empty Observable.\n * @return A function that returns an Observable that will resubscribe to the\n * source stream when the source stream completes, at most `count` times.\n */\nexport function repeat(count = Infinity): MonoTypeOperatorFunction {\n return count <= 0\n ? () => EMPTY\n : operate((source, subscriber) => {\n let soFar = 0;\n let innerSub: Subscription | null;\n const subscribeForRepeat = () => {\n let syncUnsub = false;\n innerSub = source.subscribe(\n new OperatorSubscriber(subscriber, undefined, () => {\n if (++soFar < count) {\n if (innerSub) {\n innerSub.unsubscribe();\n innerSub = null;\n subscribeForRepeat();\n } else {\n syncUnsub = true;\n }\n } else {\n subscriber.complete();\n }\n })\n );\n\n if (syncUnsub) {\n innerSub.unsubscribe();\n innerSub = null;\n subscribeForRepeat();\n }\n };\n subscribeForRepeat();\n });\n}\n","import { Observable } from '../Observable';\nimport { from } from '../observable/from';\nimport { take } from '../operators/take';\nimport { Subject } from '../Subject';\nimport { SafeSubscriber } from '../Subscriber';\nimport { Subscription } from '../Subscription';\nimport { MonoTypeOperatorFunction, SubjectLike } from '../types';\nimport { operate } from '../util/lift';\n\nexport interface ShareConfig {\n /**\n * The factory used to create the subject that will connect the source observable to\n * multicast consumers.\n */\n connector?: () => SubjectLike;\n /**\n * If true, the resulting observable will reset internal state on error from source and return to a \"cold\" state. This\n * allows the resulting observable to be \"retried\" in the event of an error.\n * If false, when an error comes from the source it will push the error into the connecting subject, and the subject\n * will remain the connecting subject, meaning the resulting observable will not go \"cold\" again, and subsequent retries\n * or resubscriptions will resubscribe to that same subject. In all cases, RxJS subjects will emit the same error again, however\n * {@link ReplaySubject} will also push its buffered values before pushing the error.\n * It is also possible to pass a notifier factory returning an observable instead which grants more fine-grained\n * control over how and when the reset should happen. This allows behaviors like conditional or delayed resets.\n */\n resetOnError?: boolean | ((error: any) => Observable);\n /**\n * If true, the resulting observable will reset internal state on completion from source and return to a \"cold\" state. This\n * allows the resulting observable to be \"repeated\" after it is done.\n * If false, when the source completes, it will push the completion through the connecting subject, and the subject\n * will remain the connecting subject, meaning the resulting observable will not go \"cold\" again, and subsequent repeats\n * or resubscriptions will resubscribe to that same subject.\n * It is also possible to pass a notifier factory returning an observable instead which grants more fine-grained\n * control over how and when the reset should happen. This allows behaviors like conditional or delayed resets.\n */\n resetOnComplete?: boolean | (() => Observable);\n /**\n * If true, when the number of subscribers to the resulting observable reaches zero due to those subscribers unsubscribing, the\n * internal state will be reset and the resulting observable will return to a \"cold\" state. This means that the next\n * time the resulting observable is subscribed to, a new subject will be created and the source will be subscribed to\n * again.\n * If false, when the number of subscribers to the resulting observable reaches zero due to unsubscription, the subject\n * will remain connected to the source, and new subscriptions to the result will be connected through that same subject.\n * It is also possible to pass a notifier factory returning an observable instead which grants more fine-grained\n * control over how and when the reset should happen. This allows behaviors like conditional or delayed resets.\n */\n resetOnRefCountZero?: boolean | (() => Observable);\n}\n\nexport function share(): MonoTypeOperatorFunction;\n\nexport function share(options: ShareConfig): MonoTypeOperatorFunction;\n\n/**\n * Returns a new Observable that multicasts (shares) the original Observable. As long as there is at least one\n * Subscriber this Observable will be subscribed and emitting data. When all subscribers have unsubscribed it will\n * unsubscribe from the source Observable. Because the Observable is multicasting it makes the stream `hot`.\n * This is an alias for `multicast(() => new Subject()), refCount()`.\n *\n * The subscription to the underlying source Observable can be reset (unsubscribe and resubscribe for new subscribers),\n * if the subscriber count to the shared observable drops to 0, or if the source Observable errors or completes. It is\n * possible to use notifier factories for the resets to allow for behaviors like conditional or delayed resets. Please\n * note that resetting on error or complete of the source Observable does not behave like a transparent retry or restart\n * of the source because the error or complete will be forwarded to all subscribers and their subscription will be\n * closed. Only new subscribers after a reset on error or complete happened will cause a fresh subscription to the\n * source. To achieve transparent retries or restarts pipe the source through appropriate operators before sharing.\n *\n * ![](share.png)\n *\n * ## Example\n * Generate new multicast Observable from the source Observable value\n * ```ts\n * import { interval } from 'rxjs';\n * import { share, map } from 'rxjs/operators';\n *\n * const source = interval(1000)\n * .pipe(\n * map((x: number) => {\n * console.log('Processing: ', x);\n * return x*x;\n * }),\n * share()\n * );\n *\n * source.subscribe(x => console.log('subscription 1: ', x));\n * source.subscribe(x => console.log('subscription 2: ', x));\n *\n * // Logs:\n * // Processing: 0\n * // subscription 1: 0\n * // subscription 2: 0\n * // Processing: 1\n * // subscription 1: 1\n * // subscription 2: 1\n * // Processing: 2\n * // subscription 1: 4\n * // subscription 2: 4\n * // Processing: 3\n * // subscription 1: 9\n * // subscription 2: 9\n * // ... and so on\n * ```\n *\n * ## Example with notifier factory: Delayed reset\n * ```ts\n * import { interval, timer } from 'rxjs';\n * import { share, take } from 'rxjs/operators';\n *\n * const source = interval(1000).pipe(take(3), share({ resetOnRefCountZero: () => timer(1000) }));\n *\n * const subscriptionOne = source.subscribe(x => console.log('subscription 1: ', x));\n * setTimeout(() => subscriptionOne.unsubscribe(), 1300);\n *\n * setTimeout(() => source.subscribe(x => console.log('subscription 2: ', x)), 1700);\n *\n * setTimeout(() => source.subscribe(x => console.log('subscription 3: ', x)), 5000);\n *\n * // Logs:\n * // subscription 1: 0\n * // (subscription 1 unsubscribes here)\n * // (subscription 2 subscribes here ~400ms later, source was not reset)\n * // subscription 2: 1\n * // subscription 2: 2\n * // (subscription 2 unsubscribes here)\n * // (subscription 3 subscribes here ~2000ms later, source did reset before)\n * // subscription 3: 0\n * // subscription 3: 1\n * // subscription 3: 2\n * ```\n *\n * @see {@link api/index/function/interval}\n * @see {@link map}\n *\n * @return A function that returns an Observable that mirrors the source.\n */\nexport function share(options: ShareConfig = {}): MonoTypeOperatorFunction {\n const { connector = () => new Subject(), resetOnError = true, resetOnComplete = true, resetOnRefCountZero = true } = options;\n // It's necessary to use a wrapper here, as the _operator_ must be\n // referentially transparent. Otherwise, it cannot be used in calls to the\n // static `pipe` function - to create a partial pipeline.\n //\n // The _operator function_ - the function returned by the _operator_ - will\n // not be referentially transparent - as it shares its source - but the\n // _operator function_ is called when the complete pipeline is composed via a\n // call to a source observable's `pipe` method - not when the static `pipe`\n // function is called.\n return (wrapperSource) => {\n let connection: SafeSubscriber | null = null;\n let resetConnection: Subscription | null = null;\n let subject: SubjectLike | null = null;\n let refCount = 0;\n let hasCompleted = false;\n let hasErrored = false;\n\n const cancelReset = () => {\n resetConnection?.unsubscribe();\n resetConnection = null;\n };\n // Used to reset the internal state to a \"cold\"\n // state, as though it had never been subscribed to.\n const reset = () => {\n cancelReset();\n connection = subject = null;\n hasCompleted = hasErrored = false;\n };\n const resetAndUnsubscribe = () => {\n // We need to capture the connection before\n // we reset (if we need to reset).\n const conn = connection;\n reset();\n conn?.unsubscribe();\n };\n\n return operate((source, subscriber) => {\n refCount++;\n if (!hasErrored && !hasCompleted) {\n cancelReset();\n }\n\n // Create the subject if we don't have one yet. Grab a local reference to\n // it as well, which avoids non-null assertations when using it and, if we\n // connect to it now, then error/complete need a reference after it was\n // reset.\n const dest = (subject = subject ?? connector());\n\n // Add the teardown directly to the subscriber - instead of returning it -\n // so that the handling of the subscriber's unsubscription will be wired\n // up _before_ the subscription to the source occurs. This is done so that\n // the assignment to the source connection's `closed` property will be seen\n // by synchronous firehose sources.\n subscriber.add(() => {\n refCount--;\n\n // If we're resetting on refCount === 0, and it's 0, we only want to do\n // that on \"unsubscribe\", really. Resetting on error or completion is a different\n // configuration.\n if (refCount === 0 && !hasErrored && !hasCompleted) {\n resetConnection = handleReset(resetAndUnsubscribe, resetOnRefCountZero);\n }\n });\n\n // The following line adds the subscription to the subscriber passed.\n // Basically, `subscriber === dest.subscribe(subscriber)` is `true`.\n dest.subscribe(subscriber);\n\n if (!connection) {\n // We need to create a subscriber here - rather than pass an observer and\n // assign the returned subscription to connection - because it's possible\n // for reentrant subscriptions to the shared observable to occur and in\n // those situations we want connection to be already-assigned so that we\n // don't create another connection to the source.\n connection = new SafeSubscriber({\n next: (value) => dest.next(value),\n error: (err) => {\n hasErrored = true;\n cancelReset();\n resetConnection = handleReset(reset, resetOnError, err);\n dest.error(err);\n },\n complete: () => {\n hasCompleted = true;\n cancelReset();\n resetConnection = handleReset(reset, resetOnComplete);\n dest.complete();\n },\n });\n from(source).subscribe(connection);\n }\n })(wrapperSource);\n };\n}\n\nfunction handleReset(\n reset: () => void,\n on: boolean | ((...args: T) => Observable),\n ...args: T\n): Subscription | null {\n if (on === true) {\n reset();\n\n return null;\n }\n\n if (on === false) {\n return null;\n }\n\n return on(...args)\n .pipe(take(1))\n .subscribe(() => reset());\n}\n","import { ReplaySubject } from '../ReplaySubject';\nimport { MonoTypeOperatorFunction, SchedulerLike } from '../types';\nimport { share } from './share';\n\nexport interface ShareReplayConfig {\n bufferSize?: number;\n windowTime?: number;\n refCount: boolean;\n scheduler?: SchedulerLike;\n}\n\nexport function shareReplay(config: ShareReplayConfig): MonoTypeOperatorFunction;\nexport function shareReplay(bufferSize?: number, windowTime?: number, scheduler?: SchedulerLike): MonoTypeOperatorFunction;\n\n/**\n * Share source and replay specified number of emissions on subscription.\n *\n * This operator is a specialization of `replay` that connects to a source observable\n * and multicasts through a `ReplaySubject` constructed with the specified arguments.\n * A successfully completed source will stay cached in the `shareReplayed observable` forever,\n * but an errored source can be retried.\n *\n * ## Why use shareReplay?\n * You generally want to use `shareReplay` when you have side-effects or taxing computations\n * that you do not wish to be executed amongst multiple subscribers.\n * It may also be valuable in situations where you know you will have late subscribers to\n * a stream that need access to previously emitted values.\n * This ability to replay values on subscription is what differentiates {@link share} and `shareReplay`.\n *\n * ![](shareReplay.png)\n *\n * ## Reference counting\n * As of RXJS version 6.4.0 a new overload signature was added to allow for manual control over what\n * happens when the operators internal reference counter drops to zero.\n * If `refCount` is true, the source will be unsubscribed from once the reference count drops to zero, i.e.\n * the inner `ReplaySubject` will be unsubscribed. All new subscribers will receive value emissions from a\n * new `ReplaySubject` which in turn will cause a new subscription to the source observable.\n * If `refCount` is false on the other hand, the source will not be unsubscribed meaning that the inner\n * `ReplaySubject` will still be subscribed to the source (and potentially run for ever).\n *\n * ## Example\n * ```ts\n * import { interval } from 'rxjs';\n * import { shareReplay, take } from 'rxjs/operators';\n *\n * const obs$ = interval(1000);\n * const shared$ = obs$.pipe(\n * take(4),\n * shareReplay(3)\n * );\n * shared$.subscribe(x => console.log('sub A: ', x));\n * shared$.subscribe(y => console.log('sub B: ', y));\n *\n * ```\n *\n * ## Example for refCount usage\n * ```ts\n * import { interval, Observable, defer } from 'rxjs';\n * import { shareReplay, take, tap, finalize } from 'rxjs/operators';\n *\n * const log = (source: Observable, name: string) => defer(() => {\n * console.log(`${name}: subscribed`);\n * return source.pipe(\n * tap({\n * next: value => console.log(`${name}: ${value}`),\n * complete: () => console.log(`${name}: complete`)\n * }),\n * finalize(() => console.log(`${name}: unsubscribed`))\n * );\n * });\n *\n * const obs$ = log(interval(1000), 'source');\n *\n * const shared$ = log(obs$.pipe(\n * shareReplay({bufferSize: 1, refCount: true }),\n * take(2),\n * ), 'shared');\n *\n * shared$.subscribe(x => console.log('sub A: ', x));\n * shared$.subscribe(y => console.log('sub B: ', y));\n *\n * // PRINTS:\n * // shared: subscribed <-- reference count = 1\n * // source: subscribed\n * // shared: subscribed <-- reference count = 2\n * // source: 0\n * // shared: 0\n * // sub A: 0\n * // shared: 0\n * // sub B: 0\n * // source: 1\n * // shared: 1\n * // sub A: 1\n * // shared: complete <-- take(2) completes the subscription for sub A\n * // shared: unsubscribed <-- reference count = 1\n * // shared: 1\n * // sub B: 1\n * // shared: complete <-- take(2) completes the subscription for sub B\n * // shared: unsubscribed <-- reference count = 0\n * // source: unsubscribed <-- replaySubject unsubscribes from source observable because the reference count dropped to 0 and refCount is true\n *\n * // In case of refCount being false, the unsubscribe is never called on the source and the source would keep on emitting, even if no subscribers\n * // are listening.\n * // source: 2\n * // source: 3\n * // source: 4\n * // ...\n * ```\n *\n * @see {@link publish}\n * @see {@link share}\n * @see {@link publishReplay}\n *\n * @param {Number} [bufferSize=Infinity] Maximum element count of the replay buffer.\n * @param {Number} [windowTime=Infinity] Maximum time length of the replay buffer in milliseconds.\n * @param {Scheduler} [scheduler] Scheduler where connected observers within the selector function\n * will be invoked on.\n * @return A function that returns an Observable sequence that contains the\n * elements of a sequence produced by multicasting the source sequence within a\n * selector function.\n */\nexport function shareReplay(\n configOrBufferSize?: ShareReplayConfig | number,\n windowTime?: number,\n scheduler?: SchedulerLike\n): MonoTypeOperatorFunction {\n let bufferSize: number;\n let refCount = false;\n if (configOrBufferSize && typeof configOrBufferSize === 'object') {\n bufferSize = configOrBufferSize.bufferSize ?? Infinity;\n windowTime = configOrBufferSize.windowTime ?? Infinity;\n refCount = !!configOrBufferSize.refCount;\n scheduler = configOrBufferSize.scheduler;\n } else {\n bufferSize = configOrBufferSize ?? Infinity;\n }\n return share({\n connector: () => new ReplaySubject(bufferSize, windowTime, scheduler),\n resetOnError: true,\n resetOnComplete: false,\n resetOnRefCountZero: refCount\n });\n}\n","import { MonoTypeOperatorFunction } from '../types';\nimport { filter } from './filter';\n\n/**\n * Returns an Observable that skips the first `count` items emitted by the source Observable.\n *\n * ![](skip.png)\n *\n * Skips the values until the sent notifications are equal or less than provided skip count. It raises\n * an error if skip count is equal or more than the actual number of emits and source raises an error.\n *\n * ## Example\n * Skip the values before the emission\n * ```ts\n * import { interval } from 'rxjs';\n * import { skip } from 'rxjs/operators';\n *\n * //emit every half second\n * const source = interval(500);\n * //skip the first 10 emitted values\n * const example = source.pipe(skip(10));\n * //output: 10...11...12...13........\n * const subscribe = example.subscribe(val => console.log(val));\n * ```\n *\n * @see {@link last}\n * @see {@link skipWhile}\n * @see {@link skipUntil}\n * @see {@link skipLast}\n *\n * @param {Number} count - The number of times, items emitted by source Observable should be skipped.\n * @return A function that returns an Observable that skips the first `count`\n * values emitted by the source Observable.\n */\nexport function skip(count: number): MonoTypeOperatorFunction {\n return filter((_, index) => count <= index);\n}\n","import { Falsy, MonoTypeOperatorFunction, OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\nexport function skipWhile(predicate: BooleanConstructor): OperatorFunction extends never ? never : T>;\nexport function skipWhile(predicate: (value: T, index: number) => true): OperatorFunction;\nexport function skipWhile(predicate: (value: T, index: number) => boolean): MonoTypeOperatorFunction;\n\n/**\n * Returns an Observable that skips all items emitted by the source Observable as long as a specified condition holds\n * true, but emits all further source items as soon as the condition becomes false.\n *\n * ![](skipWhile.png)\n *\n * Skips all the notifications with a truthy predicate. It will not skip the notifications when the predicate is falsy.\n * It can also be skipped using index. Once the predicate is true, it will not be called again.\n *\n * ## Example\n * Using Value: Skip some super heroes\n * ```ts\n * import { from } from 'rxjs';\n * import { skipWhile } from 'rxjs/operators';\n *\n * const source = from(['Green Arrow', 'SuperMan', 'Flash', 'SuperGirl', 'Black Canary'])\n * // Skip the heroes until SuperGirl\n * const example = source.pipe(skipWhile((hero) => hero !== 'SuperGirl'));\n * // output: SuperGirl, Black Canary\n * example.subscribe((femaleHero) => console.log(femaleHero));\n * ```\n * Using Index: Skip value from the array until index 5\n * ```ts\n * import { from } from 'rxjs';\n * import { skipWhile } from 'rxjs/operators';\n *\n * const source = from([1, 2, 3, 4, 5, 6, 7, 9, 10]);\n * const example = source.pipe(skipWhile((_, i) => i !== 5));\n * // output: 6, 7, 9, 10\n * example.subscribe((val) => console.log(val));\n * ```\n *\n * @see {@link last}\n * @see {@link skip}\n * @see {@link skipUntil}\n * @see {@link skipLast}\n *\n * @param {Function} predicate - A function to test each item emitted from the source Observable.\n * @return A function that returns an Observable that begins emitting items\n * emitted by the source Observable when the specified predicate becomes false.\n */\nexport function skipWhile(predicate: (value: T, index: number) => boolean): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let taking = false;\n let index = 0;\n source.subscribe(\n new OperatorSubscriber(subscriber, (value) => (taking || (taking = !predicate(value, index++))) && subscriber.next(value))\n );\n });\n}\n","import { concat } from '../observable/concat';\nimport { OperatorFunction, SchedulerLike, ValueFromArray } from '../types';\nimport { popScheduler } from '../util/args';\nimport { operate } from '../util/lift';\n\n// Devs are more likely to pass null or undefined than they are a scheduler\n// without accompanying values. To make things easier for (naughty) devs who\n// use the `strictNullChecks: false` TypeScript compiler option, these\n// overloads with explicit null and undefined values are included.\n\nexport function startWith(value: null): OperatorFunction;\nexport function startWith(value: undefined): OperatorFunction;\n\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `concatAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function startWith(\n ...valuesAndScheduler: [...A, SchedulerLike]\n): OperatorFunction>;\nexport function startWith(...values: A): OperatorFunction>;\n\n/**\n * Returns an observable that, at the moment of subscription, will synchronously emit all\n * values provided to this operator, then subscribe to the source and mirror all of its emissions\n * to subscribers.\n *\n * This is a useful way to know when subscription has occurred on an existing observable.\n *\n * First emits its arguments in order, and then any\n * emissions from the source.\n *\n * ![](startWith.png)\n *\n * ## Examples\n *\n * Emit a value when a timer starts.\n *\n * ```ts\n * import { timer } from 'rxjs';\n * import { startWith, map } from 'rxjs/operators';\n *\n * timer(1000)\n * .pipe(\n * map(() => 'timer emit'),\n * startWith('timer start')\n * )\n * .subscribe(x => console.log(x));\n *\n * // results:\n * // \"timer start\"\n * // \"timer emit\"\n * ```\n *\n * @param values Items you want the modified Observable to emit first.\n * @return A function that returns an Observable that synchronously emits\n * provided values before subscribing to the source Observable.\n *\n * @see {@link endWith}\n * @see {@link finalize}\n * @see {@link concat}\n */\nexport function startWith(...values: D[]): OperatorFunction {\n const scheduler = popScheduler(values);\n return operate((source, subscriber) => {\n // Here we can't pass `undefined` as a scheduler, because if we did, the\n // code inside of `concat` would be confused by the `undefined`, and treat it\n // like an invalid observable. So we have to split it two different ways.\n (scheduler ? concat(values, source, scheduler) : concat(values, source)).subscribe(subscriber);\n });\n}\n","import { MonoTypeOperatorFunction, SchedulerLike } from '../types';\nimport { operate } from '../util/lift';\n\n/**\n * Asynchronously subscribes Observers to this Observable on the specified {@link SchedulerLike}.\n *\n * With `subscribeOn` you can decide what type of scheduler a specific Observable will be using when it is subscribed to.\n *\n * Schedulers control the speed and order of emissions to observers from an Observable stream.\n *\n * ![](subscribeOn.png)\n *\n * ## Example\n *\n * Given the following code:\n *\n * ```ts\n * import { of, merge } from 'rxjs';\n *\n * const a = of(1, 2, 3);\n * const b = of(4, 5, 6);\n *\n * merge(a, b).subscribe(console.log);\n *\n * // Outputs\n * // 1\n * // 2\n * // 3\n * // 4\n * // 5\n * // 6\n * ```\n *\n * Both Observable `a` and `b` will emit their values directly and synchronously once they are subscribed to.\n *\n * If we instead use the `subscribeOn` operator declaring that we want to use the {@link asyncScheduler} for values emited by Observable `a`:\n *\n * ```ts\n * import { of, merge, asyncScheduler } from 'rxjs';\n * import { subscribeOn } from 'rxjs/operators';\n *\n * const a = of(1, 2, 3).pipe(subscribeOn(asyncScheduler));\n * const b = of(4, 5, 6);\n *\n * merge(a, b).subscribe(console.log);\n *\n * // Outputs\n * // 4\n * // 5\n * // 6\n * // 1\n * // 2\n * // 3\n * ```\n *\n * The reason for this is that Observable `b` emits its values directly and synchronously like before\n * but the emissions from `a` are scheduled on the event loop because we are now using the {@link asyncScheduler} for that specific Observable.\n *\n * @param scheduler The {@link SchedulerLike} to perform subscription actions on.\n * @param delay A delay to pass to the scheduler to delay subscriptions\n * @return A function that returns an Observable modified so that its\n * subscriptions happen on the specified {@link SchedulerLike}.\n */\nexport function subscribeOn(scheduler: SchedulerLike, delay: number = 0): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n subscriber.add(scheduler.schedule(() => source.subscribe(subscriber), delay));\n });\n}\n","import { Subscriber } from '../Subscriber';\nimport { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/* tslint:disable:max-line-length */\nexport function switchMap>(\n project: (value: T, index: number) => O\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function switchMap>(\n project: (value: T, index: number) => O,\n resultSelector: undefined\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function switchMap>(\n project: (value: T, index: number) => O,\n resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R\n): OperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable, emitting values only from the most recently projected Observable.\n *\n * Maps each value to an Observable, then flattens all of\n * these inner Observables.\n *\n * ![](switchMap.png)\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an (so-called \"inner\") Observable. Each time it observes one of these\n * inner Observables, the output Observable begins emitting the items emitted by\n * that inner Observable. When a new inner Observable is emitted, `switchMap`\n * stops emitting items from the earlier-emitted inner Observable and begins\n * emitting items from the new one. It continues to behave like this for\n * subsequent inner Observables.\n *\n * ## Example\n * Generate new Observable according to source Observable values\n * ```typescript\n * import { of } from 'rxjs';\n * import { switchMap } from 'rxjs/operators';\n *\n * const switched = of(1, 2, 3).pipe(switchMap((x: number) => of(x, x ** 2, x ** 3)));\n * switched.subscribe(x => console.log(x));\n * // outputs\n * // 1\n * // 1\n * // 1\n * // 2\n * // 4\n * // 8\n * // ... and so on\n * ```\n *\n * Restart an interval Observable on every click event\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { switchMap } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(switchMap((ev) => interval(1000)));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link concatMap}\n * @see {@link exhaustMap}\n * @see {@link mergeMap}\n * @see {@link switchAll}\n * @see {@link switchMapTo}\n *\n * @param {function(value: T, ?index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @return A function that returns an Observable that emits the result of\n * applying the projection function (and the optional deprecated\n * `resultSelector`) to each item emitted by the source Observable and taking\n * only the values from the most recently projected inner Observable.\n */\nexport function switchMap>(\n project: (value: T, index: number) => O,\n resultSelector?: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R\n): OperatorFunction | R> {\n return operate((source, subscriber) => {\n let innerSubscriber: Subscriber> | null = null;\n let index = 0;\n // Whether or not the source subscription has completed\n let isComplete = false;\n\n // We only complete the result if the source is complete AND we don't have an active inner subscription.\n // This is called both when the source completes and when the inners complete.\n const checkComplete = () => isComplete && !innerSubscriber && subscriber.complete();\n\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n // Cancel the previous inner subscription if there was one\n innerSubscriber?.unsubscribe();\n let innerIndex = 0;\n const outerIndex = index++;\n // Start the next inner subscription\n innerFrom(project(value, outerIndex)).subscribe(\n (innerSubscriber = new OperatorSubscriber(\n subscriber,\n // When we get a new inner value, next it through. Note that this is\n // handling the deprecate result selector here. This is because with this architecture\n // it ends up being smaller than using the map operator.\n (innerValue) => subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue),\n () => {\n // The inner has completed. Null out the inner subcriber to\n // free up memory and to signal that we have no inner subscription\n // currently.\n innerSubscriber = null!;\n checkComplete();\n }\n ))\n );\n },\n () => {\n isComplete = true;\n checkComplete();\n }\n )\n );\n });\n}\n","import { switchMap } from './switchMap';\nimport { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { isFunction } from '../util/isFunction';\n\n/* tslint:disable:max-line-length */\nexport function switchMapTo>(observable: O): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function switchMapTo>(\n observable: O,\n resultSelector: undefined\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function switchMapTo>(\n observable: O,\n resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R\n): OperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to the same Observable which is flattened multiple\n * times with {@link switchMap} in the output Observable.\n *\n * It's like {@link switchMap}, but maps each value\n * always to the same inner Observable.\n *\n * ![](switchMapTo.png)\n *\n * Maps each source value to the given Observable `innerObservable` regardless\n * of the source value, and then flattens those resulting Observables into one\n * single Observable, which is the output Observable. The output Observables\n * emits values only from the most recently emitted instance of\n * `innerObservable`.\n *\n * ## Example\n * Rerun an interval Observable on every click event\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { switchMapTo } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(switchMapTo(interval(1000)));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link concatMapTo}\n * @see {@link switchAll}\n * @see {@link switchMap}\n * @see {@link mergeMapTo}\n *\n * @param {ObservableInput} innerObservable An Observable to replace each value from\n * the source Observable.\n * @return A function that returns an Observable that emits items from the\n * given `innerObservable` (and optionally transformed through the deprecated\n * `resultSelector`) every time a value is emitted on the source Observable,\n * and taking only the values from the most recently projected inner\n * Observable.\n */\nexport function switchMapTo>(\n innerObservable: O,\n resultSelector?: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R\n): OperatorFunction | R> {\n return isFunction(resultSelector) ? switchMap(() => innerObservable, resultSelector) : switchMap(() => innerObservable);\n}\n","import { MonoTypeOperatorFunction } from '../types';\nimport { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Emits only the first `count` values emitted by the source Observable.\n *\n * Takes the first `count` values from the source, then\n * completes.\n *\n * ![](take.png)\n *\n * `take` returns an Observable that emits only the first `count` values emitted\n * by the source Observable. If the source emits fewer than `count` values then\n * all of its values are emitted. After that, it completes, regardless if the\n * source completes.\n *\n * ## Example\n * Take the first 5 seconds of an infinite 1-second interval Observable\n * ```ts\n * import { interval } from 'rxjs';\n * import { take } from 'rxjs/operators';\n *\n * const intervalCount = interval(1000);\n * const takeFive = intervalCount.pipe(take(5));\n * takeFive.subscribe(x => console.log(x));\n *\n * // Logs:\n * // 0\n * // 1\n * // 2\n * // 3\n * // 4\n * ```\n *\n * @see {@link takeLast}\n * @see {@link takeUntil}\n * @see {@link takeWhile}\n * @see {@link skip}\n *\n * @param count The maximum number of `next` values to emit.\n * @return A function that returns an Observable that emits only the first\n * `count` values emitted by the source Observable, or all of the values from\n * the source if the source emits fewer than `count` values.\n */\nexport function take(count: number): MonoTypeOperatorFunction {\n return count <= 0\n ? // If we are taking no values, that's empty.\n () => EMPTY\n : operate((source, subscriber) => {\n let seen = 0;\n source.subscribe(\n new OperatorSubscriber(subscriber, (value) => {\n // Increment the number of values we have seen,\n // then check it against the allowed count to see\n // if we are still letting values through.\n if (++seen <= count) {\n subscriber.next(value);\n // If we have met or passed our allowed count,\n // we need to complete. We have to do <= here,\n // because re-entrant code will increment `seen` twice.\n if (count <= seen) {\n subscriber.complete();\n }\n }\n })\n );\n });\n}\n","import { EMPTY } from '../observable/empty';\nimport { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Waits for the source to complete, then emits the last N values from the source,\n * as specified by the `count` argument.\n *\n * ![](takeLast.png)\n *\n * `takeLast` results in an observable that will hold values up to `count` values in memory,\n * until the source completes. It then pushes all values in memory to the consumer, in the\n * order they were received from the source, then notifies the consumer that it is\n * complete.\n *\n * If for some reason the source completes before the `count` supplied to `takeLast` is reached,\n * all values received until that point are emitted, and then completion is notified.\n *\n * **Warning**: Using `takeLast` with an observable that never completes will result\n * in an observable that never emits a value.\n *\n * ## Example\n *\n * Take the last 3 values of an Observable with many values\n *\n * ```ts\n * import { range } from 'rxjs';\n * import { takeLast } from 'rxjs/operators';\n *\n * const many = range(1, 100);\n * const lastThree = many.pipe(takeLast(3));\n * lastThree.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link take}\n * @see {@link takeUntil}\n * @see {@link takeWhile}\n * @see {@link skip}\n *\n * @param count The maximum number of values to emit from the end of\n * the sequence of values emitted by the source Observable.\n * @return A function that returns an Observable that emits at most the last\n * `count` values emitted by the source Observable.\n */\nexport function takeLast(count: number): MonoTypeOperatorFunction {\n return count <= 0\n ? () => EMPTY\n : operate((source, subscriber) => {\n // This buffer will hold the values we are going to emit\n // when the source completes. Since we only want to take the\n // last N values, we can't emit until we're sure we're not getting\n // any more values.\n let buffer: T[] = [];\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n // Add the most recent value onto the end of our buffer.\n buffer.push(value);\n // If our buffer is now larger than the number of values we\n // want to take, we remove the oldest value from the buffer.\n count < buffer.length && buffer.shift();\n },\n () => {\n // The source completed, we now know what are last values\n // are, emit them in the order they were received.\n for (const value of buffer) {\n subscriber.next(value);\n }\n subscriber.complete();\n },\n // Errors are passed through to the consumer\n undefined,\n () => {\n // During teardown release the values in our buffer.\n buffer = null!;\n }\n )\n );\n });\n}\n","import { MonoTypeOperatorFunction, ObservableInput } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { noop } from '../util/noop';\n\n/**\n * Emits the values emitted by the source Observable until a `notifier`\n * Observable emits a value.\n *\n * Lets values pass until a second Observable,\n * `notifier`, emits a value. Then, it completes.\n *\n * ![](takeUntil.png)\n *\n * `takeUntil` subscribes and begins mirroring the source Observable. It also\n * monitors a second Observable, `notifier` that you provide. If the `notifier`\n * emits a value, the output Observable stops mirroring the source Observable\n * and completes. If the `notifier` doesn't emit any value and completes\n * then `takeUntil` will pass all values.\n *\n * ## Example\n * Tick every second until the first click happens\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { takeUntil } from 'rxjs/operators';\n *\n * const source = interval(1000);\n * const clicks = fromEvent(document, 'click');\n * const result = source.pipe(takeUntil(clicks));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link take}\n * @see {@link takeLast}\n * @see {@link takeWhile}\n * @see {@link skip}\n *\n * @param {Observable} notifier The Observable whose first emitted value will\n * cause the output Observable of `takeUntil` to stop emitting values from the\n * source Observable.\n * @return A function that returns an Observable that emits the values from the\n * source Observable until `notifier` emits its first value.\n */\nexport function takeUntil(notifier: ObservableInput): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n innerFrom(notifier).subscribe(new OperatorSubscriber(subscriber, () => subscriber.complete(), noop));\n !subscriber.closed && source.subscribe(subscriber);\n });\n}\n","import { OperatorFunction, MonoTypeOperatorFunction, Falsy } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\nexport function takeWhile(predicate: BooleanConstructor): OperatorFunction extends never ? never : T>;\nexport function takeWhile(\n predicate: BooleanConstructor,\n inclusive: false\n): OperatorFunction extends never ? never : T>;\nexport function takeWhile(predicate: BooleanConstructor, inclusive: true): MonoTypeOperatorFunction;\nexport function takeWhile(predicate: (value: T, index: number) => value is S): OperatorFunction;\nexport function takeWhile(predicate: (value: T, index: number) => value is S, inclusive: false): OperatorFunction;\nexport function takeWhile(predicate: (value: T, index: number) => boolean, inclusive?: boolean): MonoTypeOperatorFunction;\n\n/**\n * Emits values emitted by the source Observable so long as each value satisfies\n * the given `predicate`, and then completes as soon as this `predicate` is not\n * satisfied.\n *\n * Takes values from the source only while they pass the\n * condition given. When the first value does not satisfy, it completes.\n *\n * ![](takeWhile.png)\n *\n * `takeWhile` subscribes and begins mirroring the source Observable. Each value\n * emitted on the source is given to the `predicate` function which returns a\n * boolean, representing a condition to be satisfied by the source values. The\n * output Observable emits the source values until such time as the `predicate`\n * returns false, at which point `takeWhile` stops mirroring the source\n * Observable and completes the output Observable.\n *\n * ## Example\n * Emit click events only while the clientX property is greater than 200\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { takeWhile } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(takeWhile(ev => ev.clientX > 200));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link take}\n * @see {@link takeLast}\n * @see {@link takeUntil}\n * @see {@link skip}\n *\n * @param {function(value: T, index: number): boolean} predicate A function that\n * evaluates a value emitted by the source Observable and returns a boolean.\n * Also takes the (zero-based) index as the second argument.\n * @param {boolean} inclusive When set to `true` the value that caused\n * `predicate` to return `false` will also be emitted.\n * @return A function that returns an Observable that emits values from the\n * source Observable so long as each value satisfies the condition defined by\n * the `predicate`, then completes.\n */\nexport function takeWhile(predicate: (value: T, index: number) => boolean, inclusive = false): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let index = 0;\n source.subscribe(\n new OperatorSubscriber(subscriber, (value) => {\n const result = predicate(value, index++);\n (result || inclusive) && subscriber.next(value);\n !result && subscriber.complete();\n })\n );\n });\n}\n","import { MonoTypeOperatorFunction, Observer } from '../types';\nimport { isFunction } from '../util/isFunction';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { identity } from '../util/identity';\n\nexport interface TapObserver extends Observer {\n subscribe: () => void;\n unsubscribe: () => void;\n finalize: () => void;\n}\n\nexport function tap(observer?: Partial>): MonoTypeOperatorFunction;\nexport function tap(next: (value: T) => void): MonoTypeOperatorFunction;\n/** @deprecated Instead of passing separate callback arguments, use an observer argument. Signatures taking separate callback arguments will be removed in v8. Details: https://rxjs.dev/deprecations/subscribe-arguments */\nexport function tap(\n next?: ((value: T) => void) | null,\n error?: ((error: any) => void) | null,\n complete?: (() => void) | null\n): MonoTypeOperatorFunction;\n\n/**\n * Used to perform side-effects for notifications from the source observable\n *\n * Used when you want to affect outside state with a notification without altering the notification\n *\n * ![](tap.png)\n *\n * Tap is designed to allow the developer a designated place to perform side effects. While you _could_ perform side-effects\n * inside of a `map` or a `mergeMap`, that would make their mapping functions impure, which isn't always a big deal, but will\n * make it so you can't do things like memoize those functions. The `tap` operator is designed solely for such side-effects to\n * help you remove side-effects from other operations.\n *\n * For any notification, next, error, or complete, `tap` will call the appropriate callback you have provided to it, via a function\n * reference, or a partial observer, then pass that notification down the stream.\n *\n * The observable returned by `tap` is an exact mirror of the source, with one exception: Any error that occurs -- synchronously -- in a handler\n * provided to `tap` will be emitted as an error from the returned observable.\n *\n * > Be careful! You can mutate objects as they pass through the `tap` operator's handlers.\n *\n * The most common use of `tap` is actually for debugging. You can place a `tap(console.log)` anywhere\n * in your observable `pipe`, log out the notifications as they are emitted by the source returned by the previous\n * operation.\n *\n * ## Example\n * Check a random number before it is handled. Below is an observable that will use a random number between 0 and 1,\n * and emit \"big\" or \"small\" depending on the size of that number. But we wanted to log what the original number\n * was, so we have added a `tap(console.log)`.\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { tap, map } from 'rxjs/operators';\n *\n * of(Math.random()).pipe(\n * tap(console.log),\n * map(n => n > 0.5 ? 'big' : 'small')\n * ).subscribe(console.log);\n * ```\n *\n * ## Example\n * Using `tap` to analyze a value and force an error. Below is an observable where in our system we only\n * want to emit numbers 3 or less we get from another source. We can force our observable to error\n * using `tap`.\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { tap } from 'rxjs/operators';\n *\n * const source = of(1, 2, 3, 4, 5)\n *\n * source.pipe(\n * tap(n => {\n * if (n > 3) {\n * throw new TypeError(`Value ${n} is greater than 3`)\n * }\n * })\n * )\n * .subscribe(console.log);\n * ```\n *\n * ## Example\n * We want to know when an observable completes before moving on to the next observable. The system\n * below will emit a random series of `\"X\"` characters from 3 different observables in sequence. The\n * only way we know when one observable completes and moves to the next one, in this case, is because\n * we have added a `tap` with the side-effect of logging to console.\n *\n * ```ts\n * import { of, interval } from 'rxjs';\n * import { tap, map, concatMap, take } from 'rxjs/operators';\n *\n *\n * of(1, 2, 3).pipe(\n * concatMap(n => interval(1000).pipe(\n * take(Math.round(Math.random() * 10)),\n * map(() => 'X'),\n * tap({\n * complete: () => console.log(`Done with ${n}`)\n * })\n * ))\n * )\n * .subscribe(console.log);\n * ```\n *\n * @see {@link finalize}\n * @see {@link Observable#subscribe}\n *\n * @param observerOrNext A next handler or partial observer\n * @param error An error handler\n * @param complete A completion handler\n * @return A function that returns an Observable identical to the source, but\n * runs the specified Observer or callback(s) for each item.\n */\nexport function tap(\n observerOrNext?: Partial> | ((value: T) => void) | null,\n error?: ((e: any) => void) | null,\n complete?: (() => void) | null\n): MonoTypeOperatorFunction {\n // We have to check to see not only if next is a function,\n // but if error or complete were passed. This is because someone\n // could technically call tap like `tap(null, fn)` or `tap(null, null, fn)`.\n const tapObserver =\n isFunction(observerOrNext) || error || complete\n ? // tslint:disable-next-line: no-object-literal-type-assertion\n ({ next: observerOrNext as Exclude>>, error, complete } as Partial>)\n : observerOrNext;\n\n return tapObserver\n ? operate((source, subscriber) => {\n tapObserver.subscribe?.();\n let isUnsub = true;\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n tapObserver.next?.(value);\n subscriber.next(value);\n },\n () => {\n isUnsub = false;\n tapObserver.complete?.();\n subscriber.complete();\n },\n (err) => {\n isUnsub = false;\n tapObserver.error?.(err);\n subscriber.error(err);\n },\n () => {\n if (isUnsub) {\n tapObserver.unsubscribe?.();\n }\n tapObserver.finalize?.();\n }\n )\n );\n })\n : // Tap was called with no valid tap observer or handler\n // (e.g. `tap(null, null, null)` or `tap(null)` or `tap()`)\n // so we're going to just mirror the source.\n identity;\n}\n","import { Subscription } from '../Subscription';\n\nimport { MonoTypeOperatorFunction, ObservableInput } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\n\nexport interface ThrottleConfig {\n leading?: boolean;\n trailing?: boolean;\n}\n\nexport const defaultThrottleConfig: ThrottleConfig = {\n leading: true,\n trailing: false,\n};\n\n/**\n * Emits a value from the source Observable, then ignores subsequent source\n * values for a duration determined by another Observable, then repeats this\n * process.\n *\n * It's like {@link throttleTime}, but the silencing\n * duration is determined by a second Observable.\n *\n * ![](throttle.png)\n *\n * `throttle` emits the source Observable values on the output Observable\n * when its internal timer is disabled, and ignores source values when the timer\n * is enabled. Initially, the timer is disabled. As soon as the first source\n * value arrives, it is forwarded to the output Observable, and then the timer\n * is enabled by calling the `durationSelector` function with the source value,\n * which returns the \"duration\" Observable. When the duration Observable emits a\n * value, the timer is disabled, and this process repeats for the\n * next source value.\n *\n * ## Example\n * Emit clicks at a rate of at most one click per second\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { throttle } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(throttle(ev => interval(1000)));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link audit}\n * @see {@link debounce}\n * @see {@link delayWhen}\n * @see {@link sample}\n * @see {@link throttleTime}\n *\n * @param durationSelector A function\n * that receives a value from the source Observable, for computing the silencing\n * duration for each source value, returned as an Observable or a Promise.\n * @param config a configuration object to define `leading` and `trailing` behavior. Defaults\n * to `{ leading: true, trailing: false }`.\n * @return A function that returns an Observable that performs the throttle\n * operation to limit the rate of emissions from the source.\n */\nexport function throttle(\n durationSelector: (value: T) => ObservableInput,\n { leading, trailing }: ThrottleConfig = defaultThrottleConfig\n): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let hasValue = false;\n let sendValue: T | null = null;\n let throttled: Subscription | null = null;\n let isComplete = false;\n\n const endThrottling = () => {\n throttled?.unsubscribe();\n throttled = null;\n if (trailing) {\n send();\n isComplete && subscriber.complete();\n }\n };\n\n const cleanupThrottling = () => {\n throttled = null;\n isComplete && subscriber.complete();\n };\n\n const startThrottle = (value: T) =>\n (throttled = innerFrom(durationSelector(value)).subscribe(new OperatorSubscriber(subscriber, endThrottling, cleanupThrottling)));\n\n const send = () => {\n if (hasValue) {\n // Ensure we clear out our value and hasValue flag\n // before we emit, otherwise reentrant code can cause\n // issues here.\n hasValue = false;\n const value = sendValue!;\n sendValue = null;\n // Emit the value.\n subscriber.next(value);\n !isComplete && startThrottle(value);\n }\n };\n\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n // Regarding the presence of throttled.closed in the following\n // conditions, if a synchronous duration selector is specified - weird,\n // but legal - an already-closed subscription will be assigned to\n // throttled, so the subscription's closed property needs to be checked,\n // too.\n (value) => {\n hasValue = true;\n sendValue = value;\n !(throttled && !throttled.closed) && (leading ? send() : startThrottle(value));\n },\n () => {\n isComplete = true;\n !(trailing && hasValue && throttled && !throttled.closed) && subscriber.complete();\n }\n )\n );\n });\n}\n","import { asyncScheduler } from '../scheduler/async';\nimport { defaultThrottleConfig, throttle } from './throttle';\nimport { MonoTypeOperatorFunction, SchedulerLike } from '../types';\nimport { timer } from '../observable/timer';\n\n/**\n * Emits a value from the source Observable, then ignores subsequent source\n * values for `duration` milliseconds, then repeats this process.\n *\n * Lets a value pass, then ignores source values for the\n * next `duration` milliseconds.\n *\n * ![](throttleTime.png)\n *\n * `throttleTime` emits the source Observable values on the output Observable\n * when its internal timer is disabled, and ignores source values when the timer\n * is enabled. Initially, the timer is disabled. As soon as the first source\n * value arrives, it is forwarded to the output Observable, and then the timer\n * is enabled. After `duration` milliseconds (or the time unit determined\n * internally by the optional `scheduler`) has passed, the timer is disabled,\n * and this process repeats for the next source value. Optionally takes a\n * {@link SchedulerLike} for managing timers.\n *\n * ## Examples\n *\n * #### Limit click rate\n *\n * Emit clicks at a rate of at most one click per second\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { throttleTime } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(throttleTime(1000));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * #### Double Click\n *\n * The following example only emits clicks which happen within a subsequent\n * delay of 400ms of the previous click. This for example can emulate a double\n * click. It makes use of the `trailing` parameter of the throttle configuration.\n *\n * ```ts\n * import { fromEvent, asyncScheduler } from 'rxjs';\n * import { throttleTime, withLatestFrom } from 'rxjs/operators';\n *\n * // defaultThottleConfig = { leading: true, trailing: false }\n * const throttleConfig = {\n * leading: false,\n * trailing: true\n * }\n *\n * const click = fromEvent(document, 'click');\n * const doubleClick = click.pipe(\n * throttleTime(400, asyncScheduler, throttleConfig)\n * );\n *\n * doubleClick.subscribe((throttleValue: Event) => {\n * console.log(`Double-clicked! Timestamp: ${throttleValue.timeStamp}`);\n * });\n * ```\n *\n * If you enable the `leading` parameter in this example, the output would be the primary click and\n * the double click, but restricts additional clicks within 400ms.\n *\n * @see {@link auditTime}\n * @see {@link debounceTime}\n * @see {@link delay}\n * @see {@link sampleTime}\n * @see {@link throttle}\n *\n * @param duration Time to wait before emitting another value after\n * emitting the last value, measured in milliseconds or the time unit determined\n * internally by the optional `scheduler`.\n * @param scheduler The {@link SchedulerLike} to use for\n * managing the timers that handle the throttling. Defaults to {@link asyncScheduler}.\n * @param config a configuration object to define `leading` and\n * `trailing` behavior. Defaults to `{ leading: true, trailing: false }`.\n * @return A function that returns an Observable that performs the throttle\n * operation to limit the rate of emissions from the source.\n */\nexport function throttleTime(\n duration: number,\n scheduler: SchedulerLike = asyncScheduler,\n config = defaultThrottleConfig\n): MonoTypeOperatorFunction {\n const duration$ = timer(duration, scheduler);\n return throttle(() => duration$, config);\n}\n","import { EmptyError } from '../util/EmptyError';\nimport { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * If the source observable completes without emitting a value, it will emit\n * an error. The error will be created at that time by the optional\n * `errorFactory` argument, otherwise, the error will be {@link EmptyError}.\n *\n * ![](throwIfEmpty.png)\n *\n * ## Example\n * ```ts\n * import { fromEvent, timer } from 'rxjs';\n * import { throwIfEmpty, takeUntil } from 'rxjs/operators';\n *\n * const click$ = fromEvent(document, 'click');\n *\n * click$.pipe(\n * takeUntil(timer(1000)),\n * throwIfEmpty(\n * () => new Error('the document was not clicked within 1 second')\n * ),\n * )\n * .subscribe({\n * next() { console.log('The button was clicked'); },\n * error(err) { console.error(err); }\n * });\n * ```\n *\n * @param errorFactory A factory function called to produce the\n * error to be thrown when the source observable completes without emitting a\n * value.\n * @return A function that returns an Observable that throws an error if the\n * source Observable completed without emitting.\n */\nexport function throwIfEmpty(errorFactory: () => any = defaultErrorFactory): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let hasValue = false;\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n hasValue = true;\n subscriber.next(value);\n },\n () => (hasValue ? subscriber.complete() : subscriber.error(errorFactory()))\n )\n );\n });\n}\n\nfunction defaultErrorFactory() {\n return new EmptyError();\n}\n","import { OperatorFunction, ObservableInputTuple } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { identity } from '../util/identity';\nimport { noop } from '../util/noop';\nimport { popResultSelector } from '../util/args';\n\nexport function withLatestFrom(...inputs: [...ObservableInputTuple]): OperatorFunction;\n\nexport function withLatestFrom(\n ...inputs: [...ObservableInputTuple, (...value: [T, ...O]) => R]\n): OperatorFunction;\n\n/**\n * Combines the source Observable with other Observables to create an Observable\n * whose values are calculated from the latest values of each, only when the\n * source emits.\n *\n * Whenever the source Observable emits a value, it\n * computes a formula using that value plus the latest values from other input\n * Observables, then emits the output of that formula.\n *\n * ![](withLatestFrom.png)\n *\n * `withLatestFrom` combines each value from the source Observable (the\n * instance) with the latest values from the other input Observables only when\n * the source emits a value, optionally using a `project` function to determine\n * the value to be emitted on the output Observable. All input Observables must\n * emit at least one value before the output Observable will emit a value.\n *\n * ## Example\n * On every click event, emit an array with the latest timer event plus the click event\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { withLatestFrom } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const timer = interval(1000);\n * const result = clicks.pipe(withLatestFrom(timer));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link combineLatest}\n *\n * @param {ObservableInput} other An input Observable to combine with the source\n * Observable. More than one input Observables may be given as argument.\n * @param {Function} [project] Projection function for combining values\n * together. Receives all values in order of the Observables passed, where the\n * first parameter is a value from the source Observable. (e.g.\n * `a.pipe(withLatestFrom(b, c), map(([a1, b1, c1]) => a1 + b1 + c1))`). If this is not\n * passed, arrays will be emitted on the output Observable.\n * @return A function that returns an Observable of projected values from the\n * most recent values from each input Observable, or an array of the most\n * recent values from each input Observable.\n */\nexport function withLatestFrom(...inputs: any[]): OperatorFunction {\n const project = popResultSelector(inputs) as ((...args: any[]) => R) | undefined;\n\n return operate((source, subscriber) => {\n const len = inputs.length;\n const otherValues = new Array(len);\n // An array of whether or not the other sources have emitted. Matched with them by index.\n // TODO: At somepoint, we should investigate the performance implications here, and look\n // into using a `Set()` and checking the `size` to see if we're ready.\n let hasValue = inputs.map(() => false);\n // Flipped true when we have at least one value from all other sources and\n // we are ready to start emitting values.\n let ready = false;\n\n // Other sources. Note that here we are not checking `subscriber.closed`,\n // this causes all inputs to be subscribed to, even if nothing can be emitted\n // from them. This is an important distinction because subscription constitutes\n // a side-effect.\n for (let i = 0; i < len; i++) {\n innerFrom(inputs[i]).subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n otherValues[i] = value;\n if (!ready && !hasValue[i]) {\n // If we're not ready yet, flag to show this observable has emitted.\n hasValue[i] = true;\n // Intentionally terse code.\n // If all of our other observables have emitted, set `ready` to `true`,\n // so we know we can start emitting values, then clean up the `hasValue` array,\n // because we don't need it anymore.\n (ready = hasValue.every(identity)) && (hasValue = null!);\n }\n },\n // Completing one of the other sources has\n // no bearing on the completion of our result.\n noop\n )\n );\n }\n\n // Source subscription\n source.subscribe(\n new OperatorSubscriber(subscriber, (value) => {\n if (ready) {\n // We have at least one value from the other sources. Go ahead and emit.\n const values = [value, ...otherValues];\n subscriber.next(project ? project(...values) : values);\n }\n })\n );\n });\n}\n","import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from '../util/isFunction';\nimport { executeSchedule } from '../util/executeSchedule';\n\n/**\n * Used in {@link scheduled} to create an observable from an Iterable.\n * @param input The iterable to create an observable from\n * @param scheduler The scheduler to use\n */\nexport function scheduleIterable(input: Iterable, scheduler: SchedulerLike) {\n return new Observable((subscriber) => {\n let iterator: Iterator;\n\n // Schedule the initial creation of the iterator from\n // the iterable. This is so the code in the iterable is\n // not called until the scheduled job fires.\n executeSchedule(subscriber, scheduler, () => {\n // Create the iterator.\n iterator = (input as any)[Symbol_iterator]();\n\n executeSchedule(\n subscriber,\n scheduler,\n () => {\n let value: T;\n let done: boolean | undefined;\n try {\n // Pull the value out of the iterator\n ({ value, done } = iterator.next());\n } catch (err) {\n // We got an error while pulling from the iterator\n subscriber.error(err);\n return;\n }\n\n if (done) {\n // If it is \"done\" we just complete. This mimics the\n // behavior of JavaScript's `for..of` consumption of\n // iterables, which will not emit the value from an iterator\n // result of `{ done: true: value: 'here' }`.\n subscriber.complete();\n } else {\n // The iterable is not done, emit the value.\n subscriber.next(value);\n }\n },\n 0,\n true\n );\n });\n\n // During teardown, if we see this iterator has a `return` method,\n // then we know it is a Generator, and not just an Iterator. So we call\n // the `return()` function. This will ensure that any `finally { }` blocks\n // inside of the generator we can hit will be hit properly.\n return () => isFunction(iterator?.return) && iterator.return();\n });\n}\n","import { SchedulerLike } from '../types';\nimport { Observable } from '../Observable';\nimport { executeSchedule } from '../util/executeSchedule';\n\nexport function scheduleAsyncIterable(input: AsyncIterable, scheduler: SchedulerLike) {\n if (!input) {\n throw new Error('Iterable cannot be null');\n }\n return new Observable((subscriber) => {\n executeSchedule(subscriber, scheduler, () => {\n const iterator = input[Symbol.asyncIterator]();\n executeSchedule(\n subscriber,\n scheduler,\n () => {\n iterator.next().then((result) => {\n if (result.done) {\n // This will remove the subscriptions from\n // the parent subscription.\n subscriber.complete();\n } else {\n subscriber.next(result.value);\n }\n });\n },\n 0,\n true\n );\n });\n });\n}\n","import { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nimport { ObservableInput, SchedulerLike } from '../types';\nimport { Observable } from '../Observable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isReadableStreamLike } from '../util/isReadableStreamLike';\nimport { scheduleReadableStreamLike } from './scheduleReadableStreamLike';\n\n/**\n * Converts from a common {@link ObservableInput} type to an observable where subscription and emissions\n * are scheduled on the provided scheduler.\n *\n * @see {@link from}\n * @see {@link of}\n *\n * @param input The observable, array, promise, iterable, etc you would like to schedule\n * @param scheduler The scheduler to use to schedule the subscription and emissions from\n * the returned observable.\n */\nexport function scheduled(input: ObservableInput, scheduler: SchedulerLike): Observable {\n if (input != null) {\n if (isInteropObservable(input)) {\n return scheduleObservable(input, scheduler);\n }\n if (isArrayLike(input)) {\n return scheduleArray(input, scheduler);\n }\n if (isPromise(input)) {\n return schedulePromise(input, scheduler);\n }\n if (isAsyncIterable(input)) {\n return scheduleAsyncIterable(input, scheduler);\n }\n if (isIterable(input)) {\n return scheduleIterable(input, scheduler);\n }\n if (isReadableStreamLike(input)) {\n return scheduleReadableStreamLike(input, scheduler);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nimport { InteropObservable, SchedulerLike } from '../types';\n\nexport function scheduleObservable(input: InteropObservable, scheduler: SchedulerLike) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n","import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\n\nexport function scheduleArray(input: ArrayLike, scheduler: SchedulerLike) {\n return new Observable((subscriber) => {\n // The current array index.\n let i = 0;\n // Start iterating over the array like on a schedule.\n return scheduler.schedule(function () {\n if (i === input.length) {\n // If we have hit the end of the array like in the\n // previous job, we can complete.\n subscriber.complete();\n } else {\n // Otherwise let's next the value at the current index,\n // then increment our index.\n subscriber.next(input[i++]);\n // If the last emission didn't cause us to close the subscriber\n // (via take or some side effect), reschedule the job and we'll\n // make another pass.\n if (!subscriber.closed) {\n this.schedule();\n }\n }\n });\n });\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nimport { SchedulerLike } from '../types';\n\nexport function schedulePromise(input: PromiseLike, scheduler: SchedulerLike) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n","import { SchedulerLike, ReadableStreamLike } from '../types';\nimport { Observable } from '../Observable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\n\nexport function scheduleReadableStreamLike(input: ReadableStreamLike, scheduler: SchedulerLike): Observable {\n return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);\n}\n","import { Scheduler } from '../Scheduler';\nimport { Subscription } from '../Subscription';\nimport { SchedulerAction } from '../types';\n\n/**\n * A unit of work to be executed in a `scheduler`. An action is typically\n * created from within a {@link SchedulerLike} and an RxJS user does not need to concern\n * themselves about creating and manipulating an Action.\n *\n * ```ts\n * class Action extends Subscription {\n * new (scheduler: Scheduler, work: (state?: T) => void);\n * schedule(state?: T, delay: number = 0): Subscription;\n * }\n * ```\n *\n * @class Action\n */\nexport class Action extends Subscription {\n constructor(scheduler: Scheduler, work: (this: SchedulerAction, state?: T) => void) {\n super();\n }\n /**\n * Schedules this action on its parent {@link SchedulerLike} for execution. May be passed\n * some context object, `state`. May happen at some point in the future,\n * according to the `delay` parameter, if specified.\n * @param {T} [state] Some contextual data that the `work` function uses when\n * called by the Scheduler.\n * @param {number} [delay] Time to wait before executing the work, where the\n * time unit is implicit and defined by the Scheduler.\n * @return {void}\n */\n public schedule(state?: T, delay: number = 0): Subscription {\n return this;\n }\n}\n","type SetIntervalFunction = (handler: () => void, timeout?: number, ...args: any[]) => number;\ntype ClearIntervalFunction = (handle: number) => void;\n\ninterface IntervalProvider {\n setInterval: SetIntervalFunction;\n clearInterval: ClearIntervalFunction;\n delegate:\n | {\n setInterval: SetIntervalFunction;\n clearInterval: ClearIntervalFunction;\n }\n | undefined;\n}\n\nexport const intervalProvider: IntervalProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setInterval(...args) {\n const { delegate } = intervalProvider;\n return (delegate?.setInterval || setInterval)(...args);\n },\n clearInterval(handle) {\n const { delegate } = intervalProvider;\n return (delegate?.clearInterval || clearInterval)(handle);\n },\n delegate: undefined,\n};\n","import { Action } from './Action';\nimport { SchedulerAction } from '../types';\nimport { Subscription } from '../Subscription';\nimport { AsyncScheduler } from './AsyncScheduler';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\n\nexport class AsyncAction extends Action {\n public id: any;\n public state?: T;\n // @ts-ignore: Property has no initializer and is not definitely assigned\n public delay: number;\n protected pending: boolean = false;\n\n constructor(protected scheduler: AsyncScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n public schedule(state?: T, delay: number = 0): Subscription {\n if (this.closed) {\n return this;\n }\n\n // Always replace the current state with the new state.\n this.state = state;\n\n const id = this.id;\n const scheduler = this.scheduler;\n\n //\n // Important implementation note:\n //\n // Actions only execute once by default, unless rescheduled from within the\n // scheduled callback. This allows us to implement single and repeat\n // actions via the same code path, without adding API surface area, as well\n // as mimic traditional recursion but across asynchronous boundaries.\n //\n // However, JS runtimes and timers distinguish between intervals achieved by\n // serial `setTimeout` calls vs. a single `setInterval` call. An interval of\n // serial `setTimeout` calls can be individually delayed, which delays\n // scheduling the next `setTimeout`, and so on. `setInterval` attempts to\n // guarantee the interval callback will be invoked more precisely to the\n // interval period, regardless of load.\n //\n // Therefore, we use `setInterval` to schedule single and repeat actions.\n // If the action reschedules itself with the same delay, the interval is not\n // canceled. If the action doesn't reschedule, or reschedules with a\n // different delay, the interval will be canceled after scheduled callback\n // execution.\n //\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n\n // Set the pending flag indicating that this action has been scheduled, or\n // has recursively rescheduled itself.\n this.pending = true;\n\n this.delay = delay;\n // If this action has already an async Id, don't request a new one.\n this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);\n\n return this;\n }\n\n protected requestAsyncId(scheduler: AsyncScheduler, _id?: any, delay: number = 0): any {\n return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n }\n\n protected recycleAsyncId(_scheduler: AsyncScheduler, id: any, delay: number | null = 0): any {\n // If this action is rescheduled with the same delay time, don't clear the interval id.\n if (delay != null && this.delay === delay && this.pending === false) {\n return id;\n }\n // Otherwise, if the action's delay time is different from the current delay,\n // or the action has been rescheduled before it's executed, clear the interval id\n intervalProvider.clearInterval(id);\n return undefined;\n }\n\n /**\n * Immediately executes this action and the `work` it contains.\n * @return {any}\n */\n public execute(state: T, delay: number): any {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n\n this.pending = false;\n const error = this._execute(state, delay);\n if (error) {\n return error;\n } else if (this.pending === false && this.id != null) {\n // Dequeue if the action didn't reschedule itself. Don't call\n // unsubscribe(), because the action could reschedule later.\n // For example:\n // ```\n // scheduler.schedule(function doWork(counter) {\n // /* ... I'm a busy worker bee ... */\n // var originalAction = this;\n // /* wait 100ms before rescheduling the action */\n // setTimeout(function () {\n // originalAction.schedule(counter + 1);\n // }, 100);\n // }, 1000);\n // ```\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n }\n\n protected _execute(state: T, _delay: number): any {\n let errored: boolean = false;\n let errorValue: any;\n try {\n this.work(state);\n } catch (e) {\n errored = true;\n // HACK: Since code elsewhere is relying on the \"truthiness\" of the\n // return here, we can't have it return \"\" or 0 or false.\n // TODO: Clean this up when we refactor schedulers mid-version-8 or so.\n errorValue = e ? e : new Error('Scheduled action threw falsy error');\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n }\n\n unsubscribe() {\n if (!this.closed) {\n const { id, scheduler } = this;\n const { actions } = scheduler;\n\n this.work = this.state = this.scheduler = null!;\n this.pending = false;\n\n arrRemove(actions, this);\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n\n this.delay = null!;\n super.unsubscribe();\n }\n }\n}\n","import { Scheduler } from '../Scheduler';\nimport { Action } from './Action';\nimport { AsyncAction } from './AsyncAction';\n\nexport class AsyncScheduler extends Scheduler {\n public actions: Array> = [];\n /**\n * A flag to indicate whether the Scheduler is currently executing a batch of\n * queued actions.\n * @type {boolean}\n * @internal\n */\n public _active: boolean = false;\n /**\n * An internal ID used to track the latest asynchronous task such as those\n * coming from `setTimeout`, `setInterval`, `requestAnimationFrame`, and\n * others.\n * @type {any}\n * @internal\n */\n public _scheduled: any = undefined;\n\n constructor(SchedulerAction: typeof Action, now: () => number = Scheduler.now) {\n super(SchedulerAction, now);\n }\n\n public flush(action: AsyncAction): void {\n const { actions } = this;\n\n if (this._active) {\n actions.push(action);\n return;\n }\n\n let error: any;\n this._active = true;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions.shift()!)); // exhaust the scheduler queue\n\n this._active = false;\n\n if (error) {\n while ((action = actions.shift()!)) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n","import { AnimationFrameAction } from './AnimationFrameAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\n\n/**\n *\n * Animation Frame Scheduler\n *\n * Perform task when `window.requestAnimationFrame` would fire\n *\n * When `animationFrame` scheduler is used with delay, it will fall back to {@link asyncScheduler} scheduler\n * behaviour.\n *\n * Without delay, `animationFrame` scheduler can be used to create smooth browser animations.\n * It makes sure scheduled task will happen just before next browser content repaint,\n * thus performing animations as efficiently as possible.\n *\n * ## Example\n * Schedule div height animation\n * ```ts\n * // html:
\n * import { animationFrameScheduler } from 'rxjs';\n *\n * const div = document.querySelector('div');\n *\n * animationFrameScheduler.schedule(function(height) {\n * div.style.height = height + \"px\";\n *\n * this.schedule(height + 1); // `this` references currently executing Action,\n * // which we reschedule with new state\n * }, 0, 0);\n *\n * // You will see a div element growing in height\n * ```\n */\n\nexport const animationFrameScheduler = new AnimationFrameScheduler(AnimationFrameAction);\n\n/**\n * @deprecated Renamed to {@link animationFrameScheduler}. Will be removed in v8.\n */\nexport const animationFrame = animationFrameScheduler;\n","import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\nexport class AnimationFrameScheduler extends AsyncScheduler {\n public flush(action?: AsyncAction): void {\n this._active = true;\n this._scheduled = undefined;\n\n const { actions } = this;\n let error: any;\n let index = -1;\n action = action || actions.shift()!;\n const count = actions.length;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while (++index < count && (action = actions.shift()));\n\n this._active = false;\n\n if (error) {\n while (++index < count && (action = actions.shift())) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n","import { AsyncAction } from './AsyncAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\nimport { SchedulerAction } from '../types';\nimport { animationFrameProvider } from './animationFrameProvider';\n\nexport class AnimationFrameAction extends AsyncAction {\n constructor(protected scheduler: AnimationFrameScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n protected requestAsyncId(scheduler: AnimationFrameScheduler, id?: any, delay: number = 0): any {\n // If delay is greater than 0, request as an async action.\n if (delay !== null && delay > 0) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n // Push the action to the end of the scheduler queue.\n scheduler.actions.push(this);\n // If an animation frame has already been requested, don't request another\n // one. If an animation frame hasn't been requested yet, request one. Return\n // the current animation frame request id.\n return scheduler._scheduled || (scheduler._scheduled = animationFrameProvider.requestAnimationFrame(() => scheduler.flush(undefined)));\n }\n protected recycleAsyncId(scheduler: AnimationFrameScheduler, id?: any, delay: number = 0): any {\n // If delay exists and is greater than 0, or if the delay is null (the\n // action wasn't rescheduled) but was originally scheduled as an async\n // action, then recycle as an async action.\n if ((delay != null && delay > 0) || (delay == null && this.delay > 0)) {\n return super.recycleAsyncId(scheduler, id, delay);\n }\n // If the scheduler queue is empty, cancel the requested animation frame and\n // set the scheduled flag to undefined so the next AnimationFrameAction will\n // request its own.\n if (scheduler.actions.length === 0) {\n animationFrameProvider.cancelAnimationFrame(id);\n scheduler._scheduled = undefined;\n }\n // Return undefined so the action knows to request a new async id if it's rescheduled.\n return undefined;\n }\n}\n","import { Subscription } from '../Subscription';\n\ninterface AnimationFrameProvider {\n schedule(callback: FrameRequestCallback): Subscription;\n requestAnimationFrame: typeof requestAnimationFrame;\n cancelAnimationFrame: typeof cancelAnimationFrame;\n delegate:\n | {\n requestAnimationFrame: typeof requestAnimationFrame;\n cancelAnimationFrame: typeof cancelAnimationFrame;\n }\n | undefined;\n}\n\nexport const animationFrameProvider: AnimationFrameProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n schedule(callback) {\n let request = requestAnimationFrame;\n let cancel: typeof cancelAnimationFrame | undefined = cancelAnimationFrame;\n const { delegate } = animationFrameProvider;\n if (delegate) {\n request = delegate.requestAnimationFrame;\n cancel = delegate.cancelAnimationFrame;\n }\n const handle = request((timestamp) => {\n // Clear the cancel function. The request has been fulfilled, so\n // attempting to cancel the request upon unsubscription would be\n // pointless.\n cancel = undefined;\n callback(timestamp);\n });\n return new Subscription(() => cancel?.(handle));\n },\n requestAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return (delegate?.requestAnimationFrame || requestAnimationFrame)(...args);\n },\n cancelAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return (delegate?.cancelAnimationFrame || cancelAnimationFrame)(...args);\n },\n delegate: undefined,\n};\n","let nextHandle = 1;\n// The promise needs to be created lazily otherwise it won't be patched by Zones\nlet resolved: Promise;\nconst activeHandles: { [key: number]: any } = {};\n\n/**\n * Finds the handle in the list of active handles, and removes it.\n * Returns `true` if found, `false` otherwise. Used both to clear\n * Immediate scheduled tasks, and to identify if a task should be scheduled.\n */\nfunction findAndClearHandle(handle: number): boolean {\n if (handle in activeHandles) {\n delete activeHandles[handle];\n return true;\n }\n return false;\n}\n\n/**\n * Helper functions to schedule and unschedule microtasks.\n */\nexport const Immediate = {\n setImmediate(cb: () => void): number {\n const handle = nextHandle++;\n activeHandles[handle] = true;\n if (!resolved) {\n resolved = Promise.resolve();\n }\n resolved.then(() => findAndClearHandle(handle) && cb());\n return handle;\n },\n\n clearImmediate(handle: number): void {\n findAndClearHandle(handle);\n },\n};\n\n/**\n * Used for internal testing purposes only. Do not export from library.\n */\nexport const TestTools = {\n pending() {\n return Object.keys(activeHandles).length;\n }\n};\n","import { Immediate } from '../util/Immediate';\nconst { setImmediate, clearImmediate } = Immediate;\n\ntype SetImmediateFunction = (handler: () => void, ...args: any[]) => number;\ntype ClearImmediateFunction = (handle: number) => void;\n\ninterface ImmediateProvider {\n setImmediate: SetImmediateFunction;\n clearImmediate: ClearImmediateFunction;\n delegate:\n | {\n setImmediate: SetImmediateFunction;\n clearImmediate: ClearImmediateFunction;\n }\n | undefined;\n}\n\nexport const immediateProvider: ImmediateProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setImmediate(...args) {\n const { delegate } = immediateProvider;\n return (delegate?.setImmediate || setImmediate)(...args);\n },\n clearImmediate(handle) {\n const { delegate } = immediateProvider;\n return (delegate?.clearImmediate || clearImmediate)(handle);\n },\n delegate: undefined,\n};\n","import { AsapAction } from './AsapAction';\nimport { AsapScheduler } from './AsapScheduler';\n\n/**\n *\n * Asap Scheduler\n *\n * Perform task as fast as it can be performed asynchronously\n *\n * `asap` scheduler behaves the same as {@link asyncScheduler} scheduler when you use it to delay task\n * in time. If however you set delay to `0`, `asap` will wait for current synchronously executing\n * code to end and then it will try to execute given task as fast as possible.\n *\n * `asap` scheduler will do its best to minimize time between end of currently executing code\n * and start of scheduled task. This makes it best candidate for performing so called \"deferring\".\n * Traditionally this was achieved by calling `setTimeout(deferredTask, 0)`, but that technique involves\n * some (although minimal) unwanted delay.\n *\n * Note that using `asap` scheduler does not necessarily mean that your task will be first to process\n * after currently executing code. In particular, if some task was also scheduled with `asap` before,\n * that task will execute first. That being said, if you need to schedule task asynchronously, but\n * as soon as possible, `asap` scheduler is your best bet.\n *\n * ## Example\n * Compare async and asap scheduler<\n * ```ts\n * import { asapScheduler, asyncScheduler } from 'rxjs';\n *\n * asyncScheduler.schedule(() => console.log('async')); // scheduling 'async' first...\n * asapScheduler.schedule(() => console.log('asap'));\n *\n * // Logs:\n * // \"asap\"\n * // \"async\"\n * // ... but 'asap' goes first!\n * ```\n */\n\nexport const asapScheduler = new AsapScheduler(AsapAction);\n\n/**\n * @deprecated Renamed to {@link asapScheduler}. Will be removed in v8.\n */\nexport const asap = asapScheduler;\n","import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\nexport class AsapScheduler extends AsyncScheduler {\n public flush(action?: AsyncAction): void {\n this._active = true;\n this._scheduled = undefined;\n\n const { actions } = this;\n let error: any;\n let index = -1;\n action = action || actions.shift()!;\n const count = actions.length;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while (++index < count && (action = actions.shift()));\n\n this._active = false;\n\n if (error) {\n while (++index < count && (action = actions.shift())) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n","import { AsyncAction } from './AsyncAction';\nimport { AsapScheduler } from './AsapScheduler';\nimport { SchedulerAction } from '../types';\nimport { immediateProvider } from './immediateProvider';\n\nexport class AsapAction extends AsyncAction {\n constructor(protected scheduler: AsapScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n protected requestAsyncId(scheduler: AsapScheduler, id?: any, delay: number = 0): any {\n // If delay is greater than 0, request as an async action.\n if (delay !== null && delay > 0) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n // Push the action to the end of the scheduler queue.\n scheduler.actions.push(this);\n // If a microtask has already been scheduled, don't schedule another\n // one. If a microtask hasn't been scheduled yet, schedule one now. Return\n // the current scheduled microtask id.\n return scheduler._scheduled || (scheduler._scheduled = immediateProvider.setImmediate(scheduler.flush.bind(scheduler, undefined)));\n }\n protected recycleAsyncId(scheduler: AsapScheduler, id?: any, delay: number = 0): any {\n // If delay exists and is greater than 0, or if the delay is null (the\n // action wasn't rescheduled) but was originally scheduled as an async\n // action, then recycle as an async action.\n if ((delay != null && delay > 0) || (delay == null && this.delay > 0)) {\n return super.recycleAsyncId(scheduler, id, delay);\n }\n // If the scheduler queue is empty, cancel the requested microtask and\n // set the scheduled flag to undefined so the next AsapAction will schedule\n // its own.\n if (scheduler.actions.length === 0) {\n immediateProvider.clearImmediate(id);\n scheduler._scheduled = undefined;\n }\n // Return undefined so the action knows to request a new async id if it's rescheduled.\n return undefined;\n }\n}\n","import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\n/**\n *\n * Async Scheduler\n *\n * Schedule task as if you used setTimeout(task, duration)\n *\n * `async` scheduler schedules tasks asynchronously, by putting them on the JavaScript\n * event loop queue. It is best used to delay tasks in time or to schedule tasks repeating\n * in intervals.\n *\n * If you just want to \"defer\" task, that is to perform it right after currently\n * executing synchronous code ends (commonly achieved by `setTimeout(deferredTask, 0)`),\n * better choice will be the {@link asapScheduler} scheduler.\n *\n * ## Examples\n * Use async scheduler to delay task\n * ```ts\n * import { asyncScheduler } from 'rxjs';\n *\n * const task = () => console.log('it works!');\n *\n * asyncScheduler.schedule(task, 2000);\n *\n * // After 2 seconds logs:\n * // \"it works!\"\n * ```\n *\n * Use async scheduler to repeat task in intervals\n * ```ts\n * import { asyncScheduler } from 'rxjs';\n *\n * function task(state) {\n * console.log(state);\n * this.schedule(state + 1, 1000); // `this` references currently executing Action,\n * // which we reschedule with new state and delay\n * }\n *\n * asyncScheduler.schedule(task, 3000, 0);\n *\n * // Logs:\n * // 0 after 3s\n * // 1 after 4s\n * // 2 after 5s\n * // 3 after 6s\n * ```\n */\n\nexport const asyncScheduler = new AsyncScheduler(AsyncAction);\n\n/**\n * @deprecated Renamed to {@link asyncScheduler}. Will be removed in v8.\n */\nexport const async = asyncScheduler;\n","import { TimestampProvider } from '../types';\n\ninterface DateTimestampProvider extends TimestampProvider {\n delegate: TimestampProvider | undefined;\n}\n\nexport const dateTimestampProvider: DateTimestampProvider = {\n now() {\n // Use the variable rather than `this` so that the function can be called\n // without being bound to the provider.\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined,\n};\n","type SetTimeoutFunction = (handler: () => void, timeout?: number, ...args: any[]) => number;\ntype ClearTimeoutFunction = (handle: number) => void;\n\ninterface TimeoutProvider {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n delegate:\n | {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n }\n | undefined;\n}\n\nexport const timeoutProvider: TimeoutProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setTimeout(...args) {\n const { delegate } = timeoutProvider;\n return (delegate?.setTimeout || setTimeout)(...args);\n },\n clearTimeout(handle) {\n const { delegate } = timeoutProvider;\n return (delegate?.clearTimeout || clearTimeout)(handle);\n },\n delegate: undefined,\n};\n","export function getSymbolIterator(): symbol {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator' as any;\n }\n\n return Symbol.iterator;\n}\n\nexport const iterator = getSymbolIterator();\n","/** Symbol.observable or a string \"@@observable\". Used for interop */\nexport const observable: string | symbol = (() => (typeof Symbol === 'function' && Symbol.observable) || '@@observable')();\n","import { createErrorClass } from './createErrorClass';\n\nexport interface EmptyError extends Error {}\n\nexport interface EmptyErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (): EmptyError;\n}\n\n/**\n * An error thrown when an Observable or a sequence was queried but has no\n * elements.\n *\n * @see {@link first}\n * @see {@link last}\n * @see {@link single}\n * @see {@link firstValueFrom}\n * @see {@link lastValueFrom}\n *\n * @class EmptyError\n */\nexport const EmptyError: EmptyErrorCtor = createErrorClass((_super) => function EmptyErrorImpl(this: any) {\n _super(this);\n this.name = 'EmptyError';\n this.message = 'no elements in sequence';\n});\n","import { createErrorClass } from './createErrorClass';\n\nexport interface ObjectUnsubscribedError extends Error {}\n\nexport interface ObjectUnsubscribedErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (): ObjectUnsubscribedError;\n}\n\n/**\n * An error thrown when an action is invalid because the object has been\n * unsubscribed.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n *\n * @class ObjectUnsubscribedError\n */\nexport const ObjectUnsubscribedError: ObjectUnsubscribedErrorCtor = createErrorClass(\n (_super) =>\n function ObjectUnsubscribedErrorImpl(this: any) {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n }\n);\n","import { createErrorClass } from './createErrorClass';\n\nexport interface UnsubscriptionError extends Error {\n readonly errors: any[];\n}\n\nexport interface UnsubscriptionErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (errors: any[]): UnsubscriptionError;\n}\n\n/**\n * An error thrown when one or more errors have occurred during the\n * `unsubscribe` of a {@link Subscription}.\n */\nexport const UnsubscriptionError: UnsubscriptionErrorCtor = createErrorClass(\n (_super) =>\n function UnsubscriptionErrorImpl(this: any, errors: (Error | string)[]) {\n _super(this);\n this.message = errors\n ? `${errors.length} errors occurred during unsubscription:\n${errors.map((err, i) => `${i + 1}) ${err.toString()}`).join('\\n ')}`\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n }\n);\n","import { SchedulerLike } from '../types';\nimport { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\n\nfunction last(arr: T[]): T | undefined {\n return arr[arr.length - 1];\n}\n\nexport function popResultSelector(args: any[]): ((...args: unknown[]) => unknown) | undefined {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\n\nexport function popScheduler(args: any[]): SchedulerLike | undefined {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\n\nexport function popNumber(args: any[], defaultValue: number): number {\n return typeof last(args) === 'number' ? args.pop()! : defaultValue;\n}\n","const { isArray } = Array;\nconst { getPrototypeOf, prototype: objectProto, keys: getKeys } = Object;\n\n/**\n * Used in functions where either a list of arguments, a single array of arguments, or a\n * dictionary of arguments can be returned. Returns an object with an `args` property with\n * the arguments in an array, if it is a dictionary, it will also return the `keys` in another\n * property.\n */\nexport function argsArgArrayOrObject>(args: T[] | [O] | [T[]]): { args: T[]; keys: string[] | null } {\n if (args.length === 1) {\n const first = args[0];\n if (isArray(first)) {\n return { args: first, keys: null };\n }\n if (isPOJO(first)) {\n const keys = getKeys(first);\n return {\n args: keys.map((key) => first[key]),\n keys,\n };\n }\n }\n\n return { args: args as T[], keys: null };\n}\n\nfunction isPOJO(obj: any): obj is object {\n return obj && typeof obj === 'object' && getPrototypeOf(obj) === objectProto;\n}\n","const { isArray } = Array;\n\n/**\n * Used in operators and functions that accept either a list of arguments, or an array of arguments\n * as a single argument.\n */\nexport function argsOrArgArray(args: (T | T[])[]): T[] {\n return args.length === 1 && isArray(args[0]) ? args[0] : (args as T[]);\n}\n","/**\n * Removes an item from an array, mutating it.\n * @param arr The array to remove the item from\n * @param item The item to remove\n */\nexport function arrRemove(arr: T[] | undefined | null, item: T) {\n if (arr) {\n const index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n","/**\n * Used to create Error subclasses until the community moves away from ES5.\n *\n * This is because compiling from TypeScript down to ES5 has issues with subclassing Errors\n * as well as other built-in types: https://github.com/Microsoft/TypeScript/issues/12123\n *\n * @param createImpl A factory function to create the actual constructor implementation. The returned\n * function should be a named function that calls `_super` internally.\n */\nexport function createErrorClass(createImpl: (_super: any) => any): T {\n const _super = (instance: any) => {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n\n const ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n","export function createObject(keys: string[], values: any[]) {\n return keys.reduce((result, key, i) => ((result[key] = values[i]), result), {} as any);\n}\n","import { config } from '../config';\n\nlet context: { errorThrown: boolean; error: any } | null = null;\n\n/**\n * Handles dealing with errors for super-gross mode. Creates a context, in which\n * any synchronously thrown errors will be passed to {@link captureError}. Which\n * will record the error such that it will be rethrown after the call back is complete.\n * TODO: Remove in v8\n * @param cb An immediately executed function.\n */\nexport function errorContext(cb: () => void) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n const isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n const { errorThrown, error } = context!;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n } else {\n // This is the general non-deprecated path for everyone that\n // isn't crazy enough to use super-gross mode (useDeprecatedSynchronousErrorHandling)\n cb();\n }\n}\n\n/**\n * Captures errors only in super-gross mode.\n * @param err the error to capture\n */\nexport function captureError(err: any) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n","import { Subscription } from '../Subscription';\nimport { SchedulerAction, SchedulerLike } from '../types';\n\nexport function executeSchedule(\n parentSubscription: Subscription,\n scheduler: SchedulerLike,\n work: () => void,\n delay: number,\n repeat: true\n): void;\nexport function executeSchedule(\n parentSubscription: Subscription,\n scheduler: SchedulerLike,\n work: () => void,\n delay?: number,\n repeat?: false\n): Subscription;\n\nexport function executeSchedule(\n parentSubscription: Subscription,\n scheduler: SchedulerLike,\n work: () => void,\n delay = 0,\n repeat = false\n): Subscription | void {\n const scheduleSubscription = scheduler.schedule(function (this: SchedulerAction) {\n work();\n if (repeat) {\n parentSubscription.add(this.schedule(null, delay));\n } else {\n this.unsubscribe();\n }\n }, delay);\n\n parentSubscription.add(scheduleSubscription);\n\n if (!repeat) {\n // Because user-land scheduler implementations are unlikely to properly reuse\n // Actions for repeat scheduling, we can't trust that the returned subscription\n // will control repeat subscription scenarios. So we're trying to avoid using them\n // incorrectly within this library.\n return scheduleSubscription;\n }\n}\n","export function identity(x: T): T {\n return x;\n}\n","export const isArrayLike = ((x: any): x is ArrayLike => x && typeof x.length === 'number' && typeof x !== 'function');","import { isFunction } from './isFunction';\n\nexport function isAsyncIterable(obj: any): obj is AsyncIterable {\n return Symbol.asyncIterator && isFunction(obj?.[Symbol.asyncIterator]);\n}\n","/**\n * Checks to see if a value is not only a `Date` object,\n * but a *valid* `Date` object that can be converted to a\n * number. For example, `new Date('blah')` is indeed an\n * `instanceof Date`, however it cannot be converted to a\n * number.\n */\nexport function isValidDate(value: any): value is Date {\n return value instanceof Date && !isNaN(value as any);\n}\n","/**\n * Returns true if the object is a function.\n * @param value The value to check\n */\nexport function isFunction(value: any): value is (...args: any[]) => any {\n return typeof value === 'function';\n}\n","import { InteropObservable } from '../types';\nimport { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being Observable (but not necessary an Rx Observable) */\nexport function isInteropObservable(input: any): input is InteropObservable {\n return isFunction(input[Symbol_observable]);\n}\n","import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being an Iterable */\nexport function isIterable(input: any): input is Iterable {\n return isFunction(input?.[Symbol_iterator]);\n}\n","/** prettier */\nimport { Observable } from '../Observable';\nimport { isFunction } from './isFunction';\n\n/**\n * Tests to see if the object is an RxJS {@link Observable}\n * @param obj the object to test\n */\nexport function isObservable(obj: any): obj is Observable {\n // The !! is to ensure that this publicly exposed function returns\n // `false` if something like `null` or `0` is passed.\n return !!obj && (obj instanceof Observable || (isFunction(obj.lift) && isFunction(obj.subscribe)));\n}\n","import { isFunction } from \"./isFunction\";\n\n/**\n * Tests to see if the object is \"thennable\".\n * @param value the object to test\n */\nexport function isPromise(value: any): value is PromiseLike {\n return isFunction(value?.then);\n}\n","import { ReadableStreamLike } from '../types';\nimport { isFunction } from './isFunction';\n\nexport async function* readableStreamLikeToAsyncGenerator(readableStream: ReadableStreamLike): AsyncGenerator {\n const reader = readableStream.getReader();\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n return;\n }\n yield value!;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport function isReadableStreamLike(obj: any): obj is ReadableStreamLike {\n // We don't want to use instanceof checks because they would return\n // false for instances from another Realm, like an