@stableflow/bridges 3.0.0-rc-d4a7057809-20260521 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/oneclick/contract.ts","../src/oneclick/index.ts","../src/utils/layerzero.ts","../src/utils/nearintents.ts","../src/utils/address.ts","../src/utils/error.ts","../src/utils/cctp.ts","../src/utils/format-number.ts","../src/usdt0/config.ts","../src/usdt0/contract.ts","../src/usdt0/index.ts","../src/cctp/contract.ts","../src/cctp/config.ts","../src/cctp/index.ts","../src/fraxzero/config.ts","../src/fraxzero/contract.ts","../src/fraxzero/index.ts","../src/fraxzero/to-oneclick.ts","../src/fraxzero/from-oneclick.ts","../src/usdt0/to-oneclick.ts","../src/usdt0/from-oneclick.ts","../src/native/contract.ts","../src/native/index.ts","../src/service-map.ts","../src/sfa.ts","../src/usdt0/hop-composer.ts"],"names":["Service","Big","postRequest","excludeFees","ExecTime","OpenAPI","isOriginLegacy","isDestinationLegacy","isBothLegacy","isMultiHopComposer","result","Csl","numberRemoveEndZero","SendType","getRequest","PayInLzToken","getPrice","oneClickResult","evmRpcFallbackProvider","secondStepResult","firstStepResult","totalFeesUsd","fees","to_oneclick_default","from_oneclick_default","usdt0Chains"],"mappings":";;;;;;;;;;AAAO,IAAM,cAAA,GAAyC;AAAA,EACpD,CAAC,UAAU,GAAG,4CAAA;AAAA,EACd,CAAC,SAAS,GAAG,4CAAA;AAAA,EACb,CAAC,WAAW,GAAG,4CAAA;AAAA,EACf,CAAC,UAAU,GAAG,4CAAA;AAAA,EACd,CAAC,WAAW,GAAG,4CAAA;AAAA,EACf,CAAC,UAAU,GAAG,4CAAA;AAAA,EACd,CAAC,WAAW,GAAG,4CAAA;AAAA,EACf,CAAC,MAAM,GAAG,oCAAA;AAAA,EACV,CAAC,QAAQ,GAAG,6CAAA;AAAA,EACZ,CAAC,MAAM,GAAG,cAAA;AAAA,EACV,CAAC,OAAO,GAAG,oEAAA;AAAA,EACX,CAAC,MAAM,GAAG,4CAAA;AAAA,EACV,CAAC,SAAS,GAAG,4CAAA;AAAA,EACb,CAAC,QAAQ,GAAG,4CAAA;AAAA,EACZ,CAAC,KAAK,GAAG,kDAAA;AAAA,EACT,CAAC,KAAK,GAAG;AACX,CAAA;AAEO,IAAM,kBAAA,GAAqB;AAAA,EAChC;AAAA,IACE,QAAA,EAAU;AAAA,MACR;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,cAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,IACA,MAAA,EAAQ,eAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA;AAEZ,CAAA;AC/BO,IAAM,SAAA,GAAY;AAAA,EACvB;AAAA,IACE,SAAA,EAAW,aAAA;AAAA;AAAA,IAEX,GAAA,EAAK;AAAA;AAAA;AAET,CAAA;AAEO,IAAM,WAAA,GAAwB,CAAC,gBAAgB,CAAA;AAE/C,IAAM,kBAAN,MAAsB;AAAA,EAE3B,WAAA,GAAc;AADd,IAAA,IAAA,CAAQ,UAAA,GAAa,MAAO,EAAA,GAAK,EAAA;AAAA,EAEjC;AAAA,EAEA,MAAa,gBAAgB,GAAA,EAAkC;AAC7D,IAAA,MAAM,EAAE,QAAO,GAAI,GAAA;AACnB,IAAA,MAAM,EAAE,OAAA,GAAU,IAAA,EAAM,MAAA,EAAO,GAAI,MAAA;AAEnC,IAAA,MAAM,aAAA,GAAgB,OAAO,QAAA,KAAa,cAAA;AAC1C,IAAyB,QAAA,CAAS,MAAA,EAAQ,MAAA,CAAO,SAAA,CAAU,YAAY,MAAM;AAC7E,IAA4B,MAAA,CAAO,SAAA,CAAU,WAAA,CAAY;AAEzD,IAAA,MAAM,EAAA,GAAK,IAAI,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AACf,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,CAAS,EAAE,IAAA,EAAM,iCAAA,EAAmC,QAAA,EAAU,UAAA,EAAY,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAO,CAAA;AAEvH,IAAA,IAAI,IAAI,IAAA,EAAM;AAIZ,MAAA,IAAI,GAAA,CAAI,MAAM,KAAA,EAAO;AACnB,QAAA,IAAI,GAAA,CAAI,IAAI,IAAA,CAAK,KAAA,CAAM,gBAAgB,CAAC,CAAA,CAAE,EAAA,CAAG,EAAE,CAAA,EAAG;AAChD,UAAA,GAAA,CAAI,IAAA,CAAK,MAAM,YAAA,GAAe,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,EAAO,GAAI,CAAC,CAAA,GAAI,EAAA;AAAA,QAChE;AAAA,MACF;AAEA,MAAA,GAAA,CAAI,IAAA,CAAK,YAAA,GAAe,GAAA,CAAI,IAAA,EAAM,KAAA,EAAO,YAAA;AACzC,MAAA,GAAA,CAAI,IAAA,CAAK,eAAe,mBAAA,CAAoB,GAAA,CAAI,IAAI,IAAA,EAAM,KAAA,EAAO,aAAa,CAAC,CAAA,CAAE,IAAI,EAAA,IAAM,MAAA,CAAO,QAAQ,QAAQ,CAAA,CAAE,QAAQ,MAAA,CAAO,OAAA,CAAQ,QAAA,EAAU,CAAC,CAAC,CAAA;AACvJ,MAAA,IAAI,WAAA,GAAc,IAAI,CAAC,CAAA;AACvB,MAAA,IAAI,YAAA,GAAe,GAAA,CAAI,IAAA,EAAM,KAAA,EAAO,WAAA,IAAe,CAAA;AACnD,MAAA,IAAI,aAAA,GAAgB,GAAA,CAAI,IAAA,EAAM,KAAA,EAAO,YAAA,IAAgB,CAAA;AACrD,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,GAAA,CAAI,IAAA,CAAK,MAAM,iBAAA,GAAoB,mBAAA,CAAoB,IAAI,GAAA,CAAI,IAAA,EAAM,KAAA,EAAO,WAAA,IAAe,CAAC,CAAA,CAAE,IAAI,EAAA,IAAM,MAAA,CAAO,SAAA,CAAU,QAAQ,CAAA,CAAE,OAAA,CAAQ,OAAO,SAAA,CAAU,QAAA,EAAU,GAAA,CAAI,OAAO,CAAC,CAAA;AAElL,QAAA,YAAA,GAAe,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,iBAAiB,CAAA,CAAE,KAAA,CAAM,QAAA,CAAS,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,SAAA,CAAU,MAAM,CAAC,CAAA;AAC3G,QAAA,aAAA,GAAgB,GAAA,CAAI,GAAA,CAAI,IAAA,EAAM,KAAA,EAAO,sBAAsB,CAAC,CAAA,CAAE,KAAA,CAAM,QAAA,CAAS,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,MACtH;AACA,MAAA,IAAI;AACF,QAAA,WAAA,GAAc,GAAA,CAAI,GAAA,CAAI,YAAY,CAAA,CAAE,KAAA,CAAM,aAAa,CAAC,CAAA,CAAE,GAAA,CAAI,YAAA,IAAgB,CAAC,CAAA;AAC/E,QAAA,IAAI,GAAA,CAAI,WAAW,CAAA,CAAE,EAAA,CAAG,CAAC,CAAA,EAAG;AAC1B,UAAA,WAAA,GAAc,IAAI,CAAC,CAAA;AAAA,QACrB;AAAA,MACF,SAAS,KAAA,EAAO;AAAA,MAAE;AAClB,MAAA,GAAA,CAAI,IAAA,CAAK,cAAc,mBAAA,CAAoB,GAAA,CAAI,WAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA;AAEtE,MAAA,MAAM,kBAAkB,MAAA,CAAO,SAAA,CAAU,WAAW,YAAA,GAAU,MAAA,GAAS,OAAO,SAAA,CAAU,MAAA;AACxF,MAAA,MAAM,gBAAgB,MAAA,CAAO,OAAA,CAAQ,WAAW,YAAA,GAAU,MAAA,GAAS,OAAO,OAAA,CAAQ,MAAA;AAClF,MAAA,GAAA,CAAI,KAAK,YAAA,GAAe,GAAA;AACxB,MAAA,IAAI,oBAAoB,aAAA,EAAe;AACrC,QAAA,GAAA,CAAI,IAAA,CAAK,eAAe,mBAAA,CAAoB,GAAA,CAAI,IAAI,IAAA,CAAK,KAAA,EAAO,kBAAA,IAAsB,CAAC,CAAA,CAAE,GAAA,CAAI,IAAI,IAAA,CAAK,KAAA,EAAO,qBAAqB,CAAC,CAAA,CAAE,QAAQ,MAAA,CAAO,OAAA,CAAQ,QAAA,EAAU,CAAC,CAAC,CAAA;AAAA,MAC1K;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,GAAA,CAAI,YAAY,CAAA,CAAE,MAAM,aAAa,CAAA;AACpD,QAAA,IAAI,cAAA,GAAiB,IAAI,CAAC,CAAA;AAC1B,QAAA,IAAI,iBAAA,GAAoB,GAAA,CAAI,MAAM,CAAA,CAAE,MAAM,cAAc,CAAA;AACxD,QAAA,iBAAA,GAAoB,GAAA,CAAI,iBAAiB,CAAA,CAAE,EAAA,CAAG,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA,GAAI,iBAAA;AAC5D,QAAA,IAAI,oBAAoB,aAAA,EAAe;AACrC,UAAA,iBAAA,GAAoB,IAAI,CAAC,CAAA;AAAA,QAC3B;AACA,QAAA,GAAA,CAAI,KAAK,IAAA,GAAO;AAAA,UACd,cAAc,mBAAA,CAAoB,GAAA,CAAI,cAAc,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,UACjE,sBAAsB,mBAAA,CAAoB,GAAA,CAAI,iBAAiB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC;AAAA,SAC9E;AAGA,QAAA,GAAA,CAAI,KAAK,YAAA,GAAe,GAAA;AACxB,QAAA,KAAA,MAAW,MAAA,IAAU,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM;AAClC,UAAA,IAAI,WAAA,CAAY,SAAS,MAAM,CAAA,IAAK,CAAC,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACxD,YAAA;AAAA,UACF;AACA,UAAA,GAAA,CAAI,IAAA,CAAK,YAAA,GAAe,GAAA,CAAI,GAAA,CAAI,KAAK,YAAA,IAAgB,CAAC,CAAA,CAAE,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,MAAM,KAAK,CAAC,CAAA;AAAA,QACzF;AACA,QAAA,GAAA,CAAI,IAAA,CAAK,YAAA,GAAe,mBAAA,CAAoB,GAAA,CAAI,GAAA,CAAI,KAAK,YAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,MAEpF,SAAS,KAAA,EAAO;AACd,QAAA,GAAA,CAAI,iCAAA,EAAmC,SAAA,EAAW,8BAAA,EAAgC,KAAK,CAAA;AAAA,MACzF;AAEA,MAAA,MAAM,YAAA,GAAe,cAAA,CAAe,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA;AAC9D,MAAA,IAAI,cAAmB,EAAC;AACxB,MAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,QAAA,WAAA,GAAc;AAAA,UACZ,KAAK,MAAA,CAAO,GAAA;AAAA,UACZ,YAAA;AAAA,UACA,GAAA,EAAK,kBAAA;AAAA,UACL,WAAW,MAAA,CAAO,SAAA;AAAA,UAClB,UAAU,MAAA,CAAO,QAAA;AAAA,UACjB,WAAW,MAAA,CAAO,SAAA;AAAA,UAClB,WAAW,aAAA,GAAgB,GAAA,CAAI,IAAA,EAAM,KAAA,EAAO,cAAc,MAAA,CAAO,SAAA;AAAA,UACjE,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,YAAY,MAAA,CAAO,UAAA;AAAA,UACnB,cAAA,EAAgB,IAAI,IAAA,EAAM,KAAA,EAAO,kBAAkB,gBAAA,CAAiB,MAAA,CAAO,UAAU,SAAsB;AAAA,SAC7G;AACA,QAAA,IAAI;AACF,UAAA,QAAA,CAAS,UAAA,EAAW;AACpB,UAAA,MAAM,cAAc,MAAM,MAAA,CAAO,OAAO,KAAA,CAAM,OAAA,CAAQ,UAAU,WAAW,CAAA;AAC3E,UAAA,QAAA,CAAS,IAAI,2BAA2B,CAAA;AAExC,UAAA,KAAA,MAAW,YAAY,WAAA,EAAa;AAClC,YAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,cAAA,KAAA,MAAW,MAAA,IAAU,YAAY,IAAA,EAAM;AACrC,gBAAA,IAAI,WAAA,CAAY,SAAS,MAAM,CAAA,IAAK,CAAC,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACxD,kBAAA;AAAA,gBACF;AACA,gBAAA,GAAA,CAAI,KAAK,IAAA,CAAK,MAAM,CAAA,GAAI,WAAA,CAAY,KAAK,MAAM,CAAA;AAAA,cACjD;AACA,cAAA;AAAA,YACF;AACA,YAAA,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA;AAAA,UAC3C;AAEA,UAAA,GAAA,CAAI,IAAA,CAAK,uBAAuB,WAAA,CAAY,iBAAA;AAC5C,UAAA,MAAM,uBAAA,GAA0B,IAAI,WAAA,CAAY,iBAAA,IAAqB,CAAC,CAAA,CAAE,GAAA,CAAI,MAAM,MAAA,CAAO,SAAA,CAAU,YAAY,QAAQ,CAAA,CAAE,MAAM,QAAA,CAAS,MAAA,CAAO,QAAQ,MAAA,CAAO,SAAA,CAAU,WAAA,CAAY,MAAM,CAAC,CAAA;AAC3L,UAAA,GAAA,CAAI,IAAA,CAAK,0BAA0B,mBAAA,CAAoB,GAAA,CAAI,uBAAuB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,QACjG,SAAS,KAAA,EAAO;AACd,UAAA,GAAA,CAAI,iCAAA,EAAmC,SAAA,EAAW,iCAAA,EAAmC,KAAK,CAAA;AAAA,QAC5F;AAAA,MACF;AAEA,MAAA,GAAA,CAAI,KAAK,UAAA,GAAa;AAAA,QACpB,GAAG,MAAA;AAAA,QACH,GAAG;AAAA,OACL;AAAA,IACF;AAEA,IAAA,QAAA,CAAS,SAAS,iCAAiC,CAAA;AAEnD,IAAA,OAAO,GAAA,CAAI,QAAQ,EAAC;AAAA,EACtB;AAAA,EAEA,MAAa,MAAM,MAAA,EAiBhB;AACD,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAU,EAAC;AAAA,MACX,QAAA,GAAW,aAAA;AAAA,MACX,OAAA,GAAU,IAAA;AAAA,MACV,GAAG;AAAA,KACL,GAAI,MAAA;AAEJ,IAAA,MAAM,aAAa,CAAA,gBAAA,EAAmB,SAAA,EAAW,SAAS,CAAA,EAAA,EAAK,SAAS,SAAS,CAAA,CAAA;AACjF,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,CAAS,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,UAAA,EAAY,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAO,CAAA;AAEhG,IAAA,MAAM,WAAA,GAAmB;AAAA,MACvB,WAAA,EAAa,QAAA;AAAA,MACb,UAAU,QAAA,IAAY,aAAA;AAAA,MACtB,WAAA,EAAa,cAAA;AAAA,MACb,SAAA,EAAW,CAAA,QAAA,EAAW,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAC7C,SAAS,EAAE,CAAA,CACX,MAAA,CAAO,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAAA,MACf,aAAA,EAAe,mBAAA;AAAA,MACf,QAAA,EAAU,IAAI,IAAA,CAAK,IAAA,CAAK,KAAI,GAAI,IAAA,CAAK,UAAU,CAAA,CAAE,WAAA,EAAY;AAAA,MAC7D,kBAAA,EAAoB,CAAA;AAAA,MACpB,OAAA,EAAS;AAAA,QACP,GAAG,SAAA;AAAA,QACH,GAAG;AAAA,OACL;AAAA,MACA,QAAA,EAAU,YAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,IAAI,aAAa,cAAA,EAAgB;AAC/B,MAAA,WAAA,CAAY,SAAS,GAAA,CAAI,SAAA,IAAa,CAAC,CAAA,CAAE,IAAI,EAAA,IAAM,SAAA,CAAU,QAAQ,CAAA,CAAE,MAAM,EAAA,IAAM,OAAA,CAAQ,QAAQ,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,IAChH;AAEA,IAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,MAAA,IAAI,CAAC,cAAc,WAAA,EAAa,kBAAA,EAAoB,aAAa,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA,EAAG;AAC9E,QAAA;AAAA,MACF;AACA,MAAA,WAAA,CAAY,CAAC,CAAA,GAAI,UAAA,CAAW,CAA4B,CAAA;AAAA,IAC1D;AAEA,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,QAAA,GAAgB,MAAM,WAAA,CAAY,WAAA,EAAa,WAAW,CAAA;AAChE,IAAA,QAAA,CAAS,IAAI,WAAW,CAAA;AAExB,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,eAAA,CAAgB,EAAE,IAAA,EAAM,QAAA,EAAU,QAAQ,CAAA;AACpE,IAAA,QAAA,CAAS,IAAI,iBAAiB,CAAA;AAE9B,IAAA,MAAA,CAAO,iBAAA,GAAoB,MAAA;AAE3B,IAAA,QAAA,CAAS,SAAS,uBAAuB,CAAA;AAEzC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,mBAAA,CAAoB,MAAA,EAAa,SAAA,EAAgB;AAC5D,IAAA,MAAM;AAAA,MACJ,SAAA;AAAA,MACA,OAAA,GAAU,IAAA;AAAA,MACV,MAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,EAAA,GAAK,IAAI,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AAEf,IAAA,MAAM,SAAc,EAAE,IAAA,EAAM,EAAC,EAAG,GAAG,SAAA,EAAU;AAE7C,IAAA,MAAM,YAAA,GAAe,cAAA,CAAe,SAAA,CAAU,SAAS,CAAA;AACvD,IAAA,MAAM,UAAA,GAAa,UAAU,SAAA,KAAc,MAAA;AAC3C,IAAA,MAAM,mBAAmB,UAAA,IAAc,gBAAA;AACvC,IAAA,MAAM,eAAe,YAAA,IAAgB,OAAA;AACrC,IAAA,MAAM,gBAAA,GAAmB,QAAA,CAAS,MAAA,EAAQ,SAAA,CAAU,YAAY,MAAM,CAAA;AACtE,IAAA,MAAM,mBAAA,GAAsB,UAAU,WAAA,CAAY,QAAA;AAElD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,mBAAA,CAAoB;AAAA,UAC/C,SAAA;AAAA,UACA,cAAA,EAAgB,gBAAA,CAAiB,SAAA,CAAU,SAAsB,CAAA;AAAA,UACjE,MAAA,EAAQ,SAAA;AAAA,UACR,OAAA,EAAS;AAAA,SACV,CAAA;AACD,QAAA,MAAA,CAAO,uBAAuB,OAAA,CAAQ,WAAA;AACtC,QAAA,MAAM,uBAAA,GAA0B,GAAA,CAAI,MAAA,CAAO,oBAAA,IAAwB,CAAC,CAAA,CAAE,GAAA,CAAI,EAAA,IAAM,mBAAmB,CAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA;AAC3H,QAAA,MAAA,CAAO,0BAA0B,mBAAA,CAAoB,GAAA,CAAI,uBAAuB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,MAC/F,SAAS,KAAA,EAAO;AACd,QAAA,GAAA,CAAI,qCAAA,EAAuC,SAAA,EAAW,wDAAA,EAA0D,KAAK,CAAA;AAAA,MACvH;AAAA,IACF;AAEA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAM,yBAAA,GAA4B;AAAA,QAChC,GAAA,EAAK,KAAA;AAAA,QACL,GAAG,SAAA,CAAU,SAAA;AAAA,QACb,SAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,yBAAA,CAA0B,iBAAA,GAAoB,GAAA;AAC9C,QAAA,yBAAA,CAA0B,uBAAA,GAA0B,GAAA;AAAA,MACtD;AACA,MAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,mBAAA,CAAoB,yBAAyB,CAAA;AACtE,MAAA,MAAA,CAAO,IAAA,CAAK,iBAAiB,GAAA,CAAI,oBAAA;AACjC,MAAA,MAAA,CAAO,oBAAoB,GAAA,CAAI,iBAAA;AAC/B,MAAA,MAAA,CAAO,yBAAyB,GAAA,CAAI,iBAAA;AACpC,MAAA,MAAA,CAAO,uBAAuB,GAAA,CAAI,oBAAA;AAElC,MAAA,MAAA,CAAO,uBAAuB,GAAA,CAAI,iBAAA;AAClC,MAAA,MAAA,CAAO,0BAA0B,GAAA,CAAI,oBAAA;AAErC,MAAA,IAAI,SAAA,CAAU,cAAc,KAAA,EAAO;AACjC,QAAA,MAAM,UAAA,GAAa,OAAO,SAAA,EAAW,KAAA;AACrC,QAAA,IACE,UAAA,IACG,MAAM,OAAA,CAAQ,UAAU,KACxB,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,IAChC,OAAO,WAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,KAAM,QAAA,IAC7C,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,CAAA,CAAE,QAAA,KAAa,MAAA,EAClD;AACA,UAAA,GAAA,CAAI,qCAAA,EAAuC,aAAa,kBAAA,EAAoB,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,EAAE,QAAQ,CAAA;AACtH,UAAA,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,CAAE,WAAW,GAAA,CAAI,sBAAA;AACjD,UAAA,GAAA,CAAI,qCAAA,EAAuC,aAAa,sBAAA,EAAwB,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,EAAE,QAAQ,CAAA;AAAA,QAC5H;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAI,YAAA,GAAe,MAAA,CAAO,oBAAA,IAAwB,EAAC;AACnD,MAAA,IAAI,gBAAA,EAAkB;AACpB,QAAA,YAAA,GAAe,MAAA,CAAO,kBAAA;AAAA,MACxB;AACA,MAAA,MAAM,cAAA,GAAiB,GAAA,CAAI,YAAA,CAAa,WAAA,IAAe,CAAC,CAAA,CAAE,GAAA,CAAI,EAAA,IAAM,mBAAmB,CAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA;AAC/G,MAAA,MAAA,CAAO,IAAA,CAAK,iBAAiB,mBAAA,CAAoB,GAAA,CAAI,cAAc,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAChF,MAAA,MAAA,CAAO,oBAAoB,YAAA,CAAa,WAAA;AACxC,MAAA,MAAA,CAAO,yBAAyB,YAAA,CAAa,WAAA;AAC7C,MAAA,MAAA,CAAO,uBAAuB,mBAAA,CAAoB,GAAA,CAAI,cAAc,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,IACnF;AAEA,IAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,eAAA,EAAiB;AAChD,MAAA,MAAM,cAAA,GAAiB,MAAM,MAAA,CAAO,eAAA,CAAgB;AAAA,QAClD,GAAA,EAAK,KAAA;AAAA,QACL,SAAA;AAAA,QACA,SAAS,MAAA,CAAO,cAAA;AAAA,QAChB,SAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,MAAA,CAAO,qBAAqB,cAAA,CAAe,iBAAA;AAAA,IAC7C;AAEA,IAAA,MAAA,CAAO,YAAA,GAAe,GAAA;AACtB,IAAA,KAAA,MAAW,MAAA,IAAU,OAAO,IAAA,EAAM;AAChC,MAAA,IAAI,WAAA,CAAY,SAAS,MAAM,CAAA,IAAK,CAAC,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACxD,QAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,YAAA,GAAe,GAAA,CAAI,MAAA,CAAO,YAAA,IAAgB,CAAC,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,IAAK,CAAC,CAAA;AAAA,IACnF;AACA,IAAA,MAAA,CAAO,YAAA,GAAe,oBAAoB,GAAA,CAAI,MAAA,CAAO,YAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAE9E,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,KAAK,MAAA,EAAa;AAC7B,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAGJ,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,KAAK,MAAM,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,MAAM,SAAS,CAAA;AACrD,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,SAAS,QAAA,EAAU;AAAA,MAChD,aAAa,SAAA,CAAU,eAAA;AAAA,MACvB,cAAA;AAAA,MACA,MAAA,EAAQ;AAAA,KACT,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEO,WAAW,MAAA,EAAoD;AACpE,IAAA,OAAO,WAAA,CAAY,sBAAsB,MAAM,CAAA;AAAA,EACjD;AAAA,EAEO,UAAU,MAAA,EAAyB;AACxC,IAAA,OAAO,UAAA,CAAW,cAAc,MAAM,CAAA;AAAA,EACxC;AACF,CAAA;AAEA,IAAO,gBAAA,GAAQ,IAAI,eAAA,EAAgB;;;AC7W5B,IAAM,iBAAA,GAA0D;AAAA,EACrE,UAAA,EAAY;AAAA,IACV,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,UAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,UAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,SAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,UAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,WAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,QAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,QAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,QAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,QAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,SAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,KAAA,EAAO;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,KAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,QAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,KAAA,EAAO;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,KAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,OAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,WAAA,EAAa;AAAA,IACX,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,KAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EAMA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,QAAA;AAAA,IACV,SAAA,EAAW;AAAA;AAEf,CAAA;AAYO,SAAS,sBAAsB,MAAA,EAI3B;AACT,EAAA,MAAM;AAAA,IACJ,gBAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF,GAAI,MAAA;AAGJ,EAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,iBAAA,EAAmB;AACvC,IAAA,OAAO,EAAA;AAAA,EACT;AAGA,EAAA,IACE,OAAO,YAAA,CAAa,SAAA,KAAc,QAAA,IAClC,OAAO,YAAA,CAAa,aAAA,KAAkB,QAAA,IACtC,OAAO,iBAAA,CAAkB,SAAA,KAAc,QAAA,EACvC;AACA,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,MAAM,kBAAkB,YAAA,CAAa,SAAA;AACrC,EAAA,MAAM,qBAAqB,YAAA,CAAa,aAAA;AACxC,EAAA,MAAM,uBAAuB,iBAAA,CAAkB,SAAA;AAC/C,EAAA,MAAM,QAAA,GAAW,gBAAA;AAGjB,EAAA,MAAM,aAAa,eAAA,GAAkB,kBAAA;AACrC,EAAA,MAAM,eAAA,GAAkB,wBAAwB,CAAA,GAAI,QAAA,CAAA;AACpD,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,CAAK,UAAA,GAAa,eAAe,CAAA;AAExD,EAAA,OAAO,SAAA;AACT;AChKO,IAAM,aAAA,GAAgB,CAAC,MAAA,KAA8E;AAC1G,EAAA,MAAM,EAAE,SAAA,EAAW,WAAA,EAAY,GAAI,MAAA;AACnC,EAAA,MAAM,EAAE,gBAAA,EAAiB,GAAI,WAAA,IAAe,EAAC;AAE7C,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,IAAI,OAAO,qBAAqB,WAAA,EAAa;AAC3C,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAK,CAACA,OAAAA,CAAQ,aAAa,CAAA,CAAgB,QAAA,CAAS,gBAAgB,CAAA,EAAG;AACrE,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,gBAAA,KAAqBA,QAAQ,gBAAA,EAAkB;AACjD,MAAA,MAAM,kBAAA,GAAqB,WAAW,UAAA,EAAY,kBAAA;AAClD,MAA2B,WAAW,UAAA,EAAY;AAClD,MAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,uBAAuB,MAAM;AACjC,IAAA,IAAI,OAAO,qBAAqB,WAAA,EAAa;AAC3C,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAK,CAACA,QAAQ,aAAA,EAAeA,OAAAA,CAAQ,QAAQ,CAAA,CAAgB,QAAA,CAAS,gBAAgB,CAAA,EAAG;AACvF,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,gBAAA,KAAqBA,QAAQ,gBAAA,EAAkB;AACjD,MAAA,MAAM,kBAAA,GAAqB,WAAW,UAAA,EAAY,kBAAA;AAClD,MAA2B,WAAW,UAAA,EAAY;AAClD,MAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,gCAAgC,MAAM;AAC1C,IAAA,IAAI,OAAO,qBAAqB,WAAA,EAAa;AAC3C,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAK,CAACA,OAAAA,CAAQ,aAAa,CAAA,CAAgB,QAAA,CAAS,gBAAgB,CAAA,EAAG;AACrE,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,gBAAA,KAAqBA,QAAQ,gBAAA,EAAkB;AACjD,MAA6B,WAAW,UAAA,EAAY;AACpD,MAAA,MAAM,gBAAA,GAAmB,WAAW,UAAA,EAAY,gBAAA;AAChD,MAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,eAAe,gBAAA,EAAiB;AAAA,IAChC,mBAAmB,oBAAA,EAAqB;AAAA,IACxC,4BAA4B,6BAAA,EAA8B;AAAA,IAC1D,iBAAA,EAAmB,OAAO,gBAAA,KAAqB,WAAA,GAAc,QAAS,CAACA,OAAAA,CAAQ,aAAA,EAAeA,OAAAA,CAAQ,gBAAA,EAAkBA,OAAAA,CAAQ,gBAAgB,CAAA,CAAgB,SAAS,gBAAgB;AAAA,GAC3L;AACF;AC5DA,SAAS,YAAA,CAAa,KAAa,WAAA,EAA6B;AAC9D,EAAA,MAAM,UAAA,GAAa,IAAI,UAAA,CAAW,IAAI,IAAI,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,GAAI,GAAA;AACzD,EAAA,MAAM,YAAY,WAAA,GAAc,CAAA;AAChC,EAAA,IAAI,UAAA,CAAW,SAAS,SAAA,EAAW;AACjC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,WAAW,CAAA,MAAA,CAAQ,CAAA;AAAA,EAC1D;AACA,EAAA,OAAO,IAAA,GAAO,UAAA,CAAW,QAAA,CAAS,SAAA,EAAW,GAAG,CAAA;AAClD;AAgPO,SAAS,qBAAqB,WAAA,EAAqB;AACxD,EAAA,IAAI;AAEF,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA;AAIvC,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAGxC,IAAA,IAAI,YAAA,CAAa,WAAW,EAAA,EAAI;AAC9B,MAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,IAC/C;AAGA,IAAA,MAAM,WAAA,GAAc,OAAO,MAAA,CAAO;AAAA,MAChC,MAAA,CAAO,KAAA,CAAM,EAAA,EAAI,CAAC,CAAA;AAAA;AAAA,MAClB;AAAA;AAAA,KACD,CAAA;AAGD,IAAA,OAAO,IAAA,GAAO,WAAA,CAAY,QAAA,CAAS,KAAK,CAAA;AAAA,EAC1C,SAAS,KAAA,EAAY;AACnB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmC,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,EACpE;AACF;AA0DO,SAAS,uBAAuB,aAAA,EAAuB;AAE5D,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,aAAa,CAAA;AAGzC,EAAA,IAAI,OAAA,CAAQ,WAAW,EAAA,EAAI;AACzB,IAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,EACjD;AAGA,EAAA,OAAO,OAAO,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,SAAS,KAAK,CAAA;AACnD;AAwBO,SAAS,oBAAoB,UAAA,EAA4B;AAC9D,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,gBAAgB,UAAU,CAAA;AAEzC,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,MAAA,KAAW,EAAA,EAAI;AAC7B,MAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,IAAA,GAAO,UAAA,CAAW,MAAA,CAAO,IAAI,CAAA;AAAA,EACtC,SAAS,KAAA,EAAgB;AACvB,IAAA,MAAM,OAAA,GAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,eAAA;AACzD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,OAAO,CAAA,CAAE,CAAA;AAAA,EAC7D;AACF;AAEO,SAAS,gBAAA,CAAiB,WAAmB,OAAA,EAAiB;AACnE,EAAA,IAAI,cAAc,KAAA,EAAO;AACvB,IAAA,OAAO,YAAA,CAAa,SAAS,EAAE,CAAA;AAAA,EACjC;AACA,EAAA,IAAI,cAAc,KAAA,EAAO;AACvB,IAAA,OAAO,uBAAuB,OAAO,CAAA;AAAA,EACvC;AACA,EAAA,IAAI,cAAc,MAAA,EAAQ;AACxB,IAAA,OAAO,qBAAqB,OAAO,CAAA;AAAA,EACrC;AACA,EAAA,IAAI,cAAc,KAAA,EAAO;AACvB,IAAA,OAAO,oBAAoB,OAAO,CAAA;AAAA,EACpC;AACA,EAAA,OAAO,OAAA;AACT;AAsBA,SAAS,gBAAgB,OAAA,EAAmC;AAC1D,EAAA,MAAM,KAAA,GAAQ,QAAQ,IAAA,EAAK;AAE3B,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,kBAAkB,CAAA;AAAA,EACpC;AAEA,EAAA,IAAI,eAAA,CAAgB,KAAK,CAAA,EAAG;AAC1B,IAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,EACjC;AAEA,EAAA,OAAO,4BAA4B,KAAK,CAAA;AAC1C;AAMA,SAAS,WAAW,IAAA,EAA8B;AAChD,EAAA,IAAI,GAAA,GAAM,CAAA;AAEV,EAAA,KAAA,MAAW,QAAQ,IAAA,EAAM;AACvB,IAAA,GAAA,IAAO,IAAA,IAAQ,CAAA;AAEf,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,IAAA,CAAK,GAAA,GAAM,WAAY,CAAA,EAAG;AACxB,QAAA,GAAA,GAAA,CAAQ,GAAA,IAAO,IAAK,IAAA,IAAU,KAAA;AAAA,MAChC,CAAA,MAAO;AACL,QAAA,GAAA,GAAO,OAAO,CAAA,GAAK,KAAA;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAI,WAAW,CAAE,GAAA,IAAO,IAAK,GAAA,EAAM,GAAA,GAAM,GAAI,CAAC,CAAA;AACvD;AAEA,SAAS,cAAc,KAAA,EAA2B;AAEhD,EAAA,IAAI,UAAA,GAAa,MAAM,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA,CAAE,OAAA,CAAQ,MAAM,GAAG,CAAA;AAG3D,EAAA,MAAM,OAAA,GAAU,WAAW,MAAA,GAAS,CAAA;AACpC,EAAA,IAAI,YAAY,CAAA,EAAG;AACjB,IAAA,UAAA,IAAc,IAAA;AAAA,EAChB,CAAA,MAAA,IAAW,YAAY,CAAA,EAAG;AACxB,IAAA,UAAA,IAAc,GAAA;AAAA,EAChB,CAAA,MAAA,IAAW,YAAY,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,EAC9C;AAGA,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA,OAAO,IAAI,UAAA,CAAW,MAAA,CAAO,IAAA,CAAK,UAAA,EAAY,QAAQ,CAAC,CAAA;AAAA,EACzD;AAGA,EAAA,IAAI,OAAO,SAAS,WAAA,EAAa;AAC/B,IAAA,MAAM,MAAA,GAAS,KAAK,UAAU,CAAA;AAC9B,IAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA;AAE1C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,MAAA,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA;AAAA,IAChC;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAC/C;AAEA,SAAS,WAAW,GAAA,EAAyB;AAC3C,EAAA,IAAI,GAAA,CAAI,MAAA,GAAS,CAAA,KAAM,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,oBAAoB,CAAA;AAAA,EACtC;AAEA,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,GAAA,CAAI,SAAS,CAAC,CAAA;AAE3C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,EAAG,EAAE,CAAA;AAE5D,IAAA,IAAI,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG;AACtB,MAAA,MAAM,IAAI,MAAM,oBAAoB,CAAA;AAAA,IACtC;AAEA,IAAA,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA;AAAA,EACb;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,WAAW,KAAA,EAA2B;AAC7C,EAAA,OAAO,MAAM,IAAA,CAAK,KAAK,CAAA,CACpB,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,QAAA,CAAS,EAAE,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAChD,KAAK,EAAE,CAAA;AACZ;AAEA,SAAS,gBAAgB,OAAA,EAA0B;AACjD,EAAA,OAAO,yBAAA,CAA0B,KAAK,OAAO,CAAA;AAC/C;AAEA,SAAS,mBAAmB,OAAA,EAAmC;AAC7D,EAAA,MAAM,CAAC,aAAA,EAAe,QAAQ,CAAA,GAAI,OAAA,CAAQ,MAAM,GAAG,CAAA;AAEnD,EAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,QAAA,EAAU;AAC/B,IAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,EAC3C;AAEA,EAAA,MAAM,SAAA,GAAY,OAAO,aAAa,CAAA;AAEtC,EAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA,EAAG;AAChC,IAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,EACzC;AAEA,EAAA,IAAI,CAAC,mBAAA,CAAoB,IAAA,CAAK,QAAQ,CAAA,EAAG;AACvC,IAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,EAC5C;AAEA,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,IAAA,EAAM,WAAW,QAAQ,CAAA;AAAA,IACzB,cAAA,EAAgB;AAAA,GAClB;AACF;AAEA,SAAS,4BAA4B,OAAA,EAAmC;AAGtE,EAAA,IAAI,CAAC,uBAAA,CAAwB,IAAA,CAAK,OAAO,CAAA,EAAG;AAC1C,IAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,EAC5D;AAEA,EAAA,MAAM,IAAA,GAAO,cAAc,OAAO,CAAA;AAElC,EAAA,IAAI,IAAA,CAAK,WAAW,EAAA,EAAI;AACtB,IAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,EAC5D;AAEA,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAC7B,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,EAAA,EAAI,EAAE,CAAA;AAClC,EAAA,MAAM,gBAAA,GAAmB,WAAW,IAAI,CAAA;AAExC,EAAA,IAAI,QAAA,CAAS,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAC,CAAA,IAAK,QAAA,CAAS,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAC,CAAA,EAAG;AAC9E,IAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,EAChD;AAEA,EAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AAEpB,EAAA,MAAM,UAAA,GAAA,CAAc,QAAQ,GAAA,MAAU,CAAA;AACtC,EAAA,MAAM,MAAM,KAAA,GAAQ,GAAA;AAIpB,EAAA,IAAI,GAAA,KAAQ,EAAA,IAAQ,GAAA,KAAQ,EAAA,EAAM;AAChC,IAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAAA,EAC7C;AAEA,EAAA,MAAM,eAAe,GAAA,KAAQ,EAAA;AAE7B,EAAA,MAAM,aAAA,GAAgB,KAAK,CAAC,CAAA;AAC5B,EAAA,MAAM,SAAA,GAAY,aAAA,KAAkB,GAAA,GAAO,EAAA,GAAK,aAAA;AAEhD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAE7B,EAAA,IAAI,IAAA,CAAK,WAAW,EAAA,EAAI;AACtB,IAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,EACnD;AAEA,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,IAAA;AAAA,IACA,cAAA,EAAgB,IAAA;AAAA,IAChB,YAAA;AAAA,IACA;AAAA,GACF;AACF;AC/kBO,IAAM,gBAAA,GAAmB,CAAC,KAAA,EAAY,OAAA,KAA2D;AACtG,EAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAU,GAAI,OAAA;AAE/B,EAAA,MAAM,mBAAA,GAAsB,6CAAA;AAE5B,EAAA,IAAI,OAAA,KAAYA,QAAQ,QAAA,EAAU;AAChC,IAAA,MAAM,uBAAuB,MAAmD;AAC9E,MAAA,MAAM,cAAA,GAAiB;AAAA,QACrB,OAAA,EAAS,mBAAA;AAAA,QACT,aAAA,EAAe,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,OAAA,IAAW;AAAA,OACnD;AACA,MAAA,IACE,KAAA,EAAO,UAAU,IAAA,EAAM,OAAA,IACvB,OAAO,QAAA,EAAU,IAAA,EAAM,YAAY,uBAAA,EACnC;AAEA,QAAA,IAAI,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,OAAA,KAAY,qBAAA,EAAuB;AAC5D,UAAA,cAAA,CAAe,OAAA,GAAU,oBAAA;AACzB,UAAA,OAAO,cAAA;AAAA,QACT;AAEA,QAAA,IAAI,OAAO,QAAA,EAAU,IAAA,EAAM,OAAA,EAAS,QAAA,CAAS,4CAA4C,CAAA,EAAG;AAC1F,UAAA,MAAM,QAAQ,KAAA,CAAM,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,MAAM,iCAAiC,CAAA;AACjF,UAAA,IAAI,aAAA,GAAgB,KAAA,GAAQ,KAAA,CAAM,CAAC,IAAIC,GAAAA,CAAI,CAAC,CAAA,CAAE,KAAA,CAAM,EAAA,IAAM,SAAA,CAAU,QAAQ,CAAA,CAAE,QAAQ,CAAC,CAAA;AACvF,UAAA,aAAA,GAAgBA,GAAAA,CAAI,aAAa,CAAA,CAAE,GAAA,CAAI,EAAA,IAAM,UAAU,QAAQ,CAAA,CAAE,OAAA,CAAQ,SAAA,CAAU,QAAQ,CAAA;AAC3F,UAAA,cAAA,CAAe,OAAA,GAAU,+BAA+B,aAAa,CAAA,CAAA;AACrE,UAAA,OAAO,cAAA;AAAA,QACT;AACA,QAAA,OAAO,cAAA;AAAA,MACT;AAEA,MAAA,OAAO,cAAA;AAAA,IACT,CAAA;AACA,IAAA,MAAM,gBAAgB,oBAAA,EAAqB;AAC3C,IAAA,OAAO;AAAA,MACL,WAAA,EAAa,OAAA;AAAA,MACb,OAAO,aAAA,CAAc;AAAA,KACvB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,OAAA;AAAA,IACb,KAAA,EAAO,OAAO,OAAA,IAAW;AAAA,GAC3B;AACF;AC7CA,eAAsB,eAAe,MAAA,EAAa;AAChD,EAAA,MAAM,QAAA,GAAgB,MAAMC,WAAAA,CAAY,eAAA,EAAiB,MAAM,CAAA;AAC/D,EAAA,OAAO,QAAA,CAAS,QAAQ,EAAC;AAC3B;ACHO,IAAM,oBAAA,GAAuB,CAAC,YAAA,KAAyB;AAC5D,EAAA,IAAI,CAAC,cAAc,OAAO,GAAA;AAC1B,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,YAAY,CAAA,CAAE,MAAM,GAAG,CAAA;AAC5C,EAAA,MAAM,cAAc,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,yBAAyB,GAAG,CAAA;AACjE,EAAA,MAAM,WAAA,GAAc,MAAM,CAAC,CAAA,GAAI,IAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,GAAK,EAAA;AAChD,EAAA,OAAO,WAAA,GAAc,WAAA;AACvB,CAAA;AAEO,IAAM,YAAA,GAAe,CAC1B,KAAA,EACA,SAAA,EACA,UACA,OAAA,KASQ;AACR,EAAA,MAAM;AAAA,IACJ,MAAA,GAAS,EAAA;AAAA,IACT,eAAA;AAAA,IACA,eAAA;AAAA,IACA,OAAA;AAAA,IACA,gBAAA;AAAA,IACA,QAAQD,GAAAA,CAAI,WAAA;AAAA,IACZ,eAAA,GAAkB;AAAA,GACpB,GAAI,WAAW,EAAC;AAEhB,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,MAAAA,IAAI,KAAK,CAAA;AACT,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,GAAA,EAAU;AACjB,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF,CAAA;AAEA,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,OAAA,EAAQ,IAAKA,IAAI,KAAK,CAAA,CAAE,EAAA,CAAG,CAAC,CAAA,EAAG;AAC5C,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAGA,GAAAA,CAAI,CAAC,CAAA,CAAE,OAAA,CAAQ,SAAA,EAAW,KAAK,CAAC,CAAA,CAAA;AAAA,MACrD;AACA,MAAA,OAAO,GAAG,MAAM,CAAA,CAAA,CAAA;AAAA,IAClB;AACA,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,GAAG,MAAM,CAAA,CAAA,CAAA;AAAA,QAClB,OAAA,EAASA,GAAAA,CAAI,CAAC,CAAA,CAAE,OAAA,CAAQ,WAAW,KAAK,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE;AAAA,OAC7D;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,GAAG,MAAM,CAAA,CAAA,CAAA;AAAA,MAClB,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AAEA,EAAA,IAAI,eAAA,IAAmBA,GAAAA,CAAI,KAAK,CAAA,CAAE,EAAA,CAAGA,GAAAA,CAAI,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,SAAS,CAAC,CAAA,EAAG;AAC7D,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,CAAA,EAAA,EAAK,MAAM,CAAA,EAAGA,GAAAA,CAAI,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,SAAS,CAAA,CAAE,OAAA,CAAQ,SAAA,EAAW,KAAK,CAAC,CAAA,CAAA;AAAA,IACxE;AACA,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAK,MAAM,CAAA,CAAA,CAAA;AAAA,QACpB,OAAA,EAASA,GAAAA,CAAI,EAAE,CAAA,CACZ,IAAI,CAAC,SAAS,CAAA,CACd,OAAA,CAAQ,SAAA,EAAW,KAAK,CAAA,CACxB,OAAA,CAAQ,OAAO,EAAE;AAAA,OACtB;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,EAAA;AAAA,MACT,OAAA,EAAS,CAAA,EAAA,EAAK,MAAM,CAAA,EAAGA,IAAI,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,SAAS,CAAA,CAAE,OAAA,CAAQ,SAAA,EAAW,KAAK,CAAC,CAAA;AAAA,KAC1E;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,qBAAqBA,GAAAA,CAAI,KAAK,EAAE,OAAA,CAAQ,SAAA,EAAW,KAAK,CAAC,CAAA;AAC5E,EAAA,MAAM,SAAA,GAAY,UAAA,CAAW,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACzC,EAAA,IAAI,aAAa,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA;AAC7C,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,UAAA,GAAa,GAAA,GAAM,UAAA;AAAA,EACrB;AACA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,SAAA,GAAY,CAAC,KAAA,EAAe,IAAA,KAAyB;AACzD,QAAA,MAAM,IAAA,GAAOA,GAAAA,CAAI,KAAK,CAAA,CACnB,GAAA,CAAI,KAAK,CAAA,CACT,OAAA,CAAQ,SAAA,EAAW,CAAC,CAAA,CACpB,OAAA,CAAQ,wBAAwB,IAAI,CAAA;AACvC,QAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,GAAG,IAAI,CAAC,CAAA,EAAG,OAAA,CAAQ,mBAAA,EAAqB,KAAK,CAAA;AACtE,QAAA,MAAM,UAAU,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,GAAI,CAAC,CAAA,IAAK,EAAA;AACxC,QAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,KAAK,CAAA,EAAG,UAAU,GAAA,GAAM,OAAA,GAAU,EAAE,CAAA,EAAG,IAAI,CAAA,CAAA;AAAA,MAChE,CAAA;AACA,MAAA,IAAIA,GAAAA,CAAI,KAAK,CAAA,CAAE,GAAA,CAAI,IAAI,CAAA,EAAG;AACxB,QAAA,OAAO,SAAA,CAAU,IAAA,EAAM,gBAAA,GAAmB,GAAA,GAAM,GAAG,CAAA;AAAA,MACrD;AACA,MAAA,IAAIA,GAAAA,CAAI,KAAK,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,EAAG;AACvB,QAAA,OAAO,SAAA,CAAU,GAAA,EAAK,gBAAA,GAAmB,GAAA,GAAM,GAAG,CAAA;AAAA,MACpD;AACA,MAAA,IAAIA,GAAAA,CAAI,KAAK,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,EAAG;AACvB,QAAA,OAAO,SAAA,CAAU,GAAA,EAAK,gBAAA,GAAmB,GAAA,GAAM,GAAG,CAAA;AAAA,MACpD;AACA,MAAA,IAAIA,GAAAA,CAAI,KAAK,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,EAAG;AACvB,QAAA,OAAO,SAAA,CAAU,GAAA,EAAK,gBAAA,GAAmB,GAAA,GAAM,GAAG,CAAA;AAAA,MACpD;AAAA,IACF;AACA,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,SAAS,GAAG,UAAU,CAAA,CAAA;AAAA,IAC3C;AACA,IAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,SAAS,GAAG,UAAA,CAAW,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAC,CAAA,CAAA;AAAA,EAClE;AACA,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,CAAA,EAAG,MAAM,CAAA,EAAG,SAAS,CAAA,CAAA;AAAA,MAC9B,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA,EAAG,MAAM,CAAA,EAAG,SAAS,CAAA,CAAA;AAAA,IAC9B,OAAA,EAAS,UAAA,CAAW,OAAA,CAAQ,SAAA,EAAW,EAAE;AAAA,GAC3C;AACF;;;ACxGO,IAAM,YAAA,GAA4C;AAAA,EACvD,QAAA,EAAU;AAAA,IACR,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,SAAA,EAAW,4CAAA;AAAA,IACX,GAAG,kBAAkB,UAAU,CAAA;AAAA,IAC/B,aAAA,EAAe,EAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,mBAAA,EAAqB,IAAA;AAAA,IACrB,yBAAA,EAA2B;AAAA,GAC7B;AAAA,EACA,QAAA,EAAU;AAAA,IACR,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,SAAA,EAAW,4CAAA;AAAA,IACX,mBAAA,EAAqB,4CAAA;AAAA,IACrB,GAAG,kBAAkB,UAAU,CAAA;AAAA,IAC/B,aAAA,EAAe,EAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,mBAAA,EAAqB,KAAA;AAAA,IACrB,yBAAA,EAA2B;AAAA,GAC7B;AAAA,EACA,OAAA,EAAS;AAAA,IACP,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,SAAS,CAAA;AAAA,IAC9B,aAAA,EAAe,EAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,QAAA,EAAU;AAAA,IACR,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,UAAU,CAAA;AAAA,IAC/B,aAAA,EAAe,GAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,SAAA,EAAW;AAAA,IACT,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,0BAAA,EAA4B,4CAAA;AAAA,IAC5B,GAAG,kBAAkB,WAAW,CAAA;AAAA,IAChC,aAAA,EAAe,EAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,eAAA,EAAiB,8CAAA;AAAA,IACjB,SAAA,EAAW,8CAAA;AAAA,IACX,GAAG,kBAAkB,QAAQ,CAAA;AAAA,IAC7B,aAAA,EAAe,GAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,yBAAA,EAA2B;AAAA,GAC7B;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,eAAA,EAAiB,oCAAA;AAAA,IACjB,SAAA,EAAW,oCAAA;AAAA,IACX,GAAG,kBAAkB,MAAM,CAAA;AAAA,IAC3B,aAAA,EAAe,CAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,yBAAA,EAA2B;AAAA,GAC7B;AAAA,EACA,SAAA,EAAW;AAAA,IACT,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,SAAS,CAAA;AAAA,IAC9B,aAAA,EAAe,GAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,eAAA,EAAiB,kDAAA;AAAA,IACjB,SAAA,EAAW,kDAAA;AAAA,IACX,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,KAAA;AAAA,IACV,SAAA,EAAW,CAAA;AAAA,IACX,aAAA,EAAe,CAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,yBAAA,EAA2B;AAAA,GAC7B;AAAA,EACA,QAAA,EAAU;AAAA,IACR,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,QAAQ,CAAA;AAAA,IAC7B,aAAA,EAAe,IAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,QAAA,EAAU;AAAA,IACR,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,QAAQ,CAAA;AAAA,IAC7B,aAAA,EAAe,GAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,SAAA,EAAW;AAAA,IACT,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,SAAS,CAAA;AAAA,IAC9B,aAAA,EAAe,IAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,KAAK,CAAA;AAAA,IAC1B,aAAA,EAAe,GAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,QAAA,EAAU;AAAA,IACR,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,QAAQ,CAAA;AAAA,IAC7B,aAAA,EAAe,IAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,eAAA,EAAiB,4CAAA;AAAA,IACjB,SAAA,EAAW,4CAAA;AAAA,IACX,GAAG,kBAAkB,MAAM,CAAA;AAAA,IAC3B,aAAA,EAAe,EAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,yBAAA,EAA2B;AAAA,GAC7B;AAAA,EACA,KAAA,EAAO;AAAA,IACL,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,KAAK,CAAA;AAAA,IAC1B,aAAA,EAAe,GAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,OAAO,CAAA;AAAA,IAC5B,aAAA,EAAe,GAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA;AAEzB;AAEO,IAAM,gBAAA,GAAwC;AAAA,EACnD,MAAA,EAAQ;AACV;AAuDO,IAAM,eAAA,GAAkB,CAAA;AAGxB,IAAM,+BAAA,GAAkC;AACxC,IAAM,uBAAA,GAA0B;AAChC,IAAM,cAAA,GAAiB;AAEvB,IAAM,4BAAA,GAA+B,4CAAA;AACrC,IAAM,kBAAA,GAAqB,YAAY,KAAK,CAAA;AAC5C,IAAM,+BAAA,GAAkC,4CAAA;;;AC5QxC,IAAM,OAAA,GAAU;AAAA,EACrB;AAAA,IACE,QAAQ,EAAC;AAAA,IACT,IAAA,EAAM,kBAAA;AAAA,IACN,OAAA,EAAS;AAAA,MACP,EAAE,YAAA,EAAc,MAAA,EAAQ,IAAA,EAAM,EAAA,EAAI,MAAM,MAAA;AAAO,KACjD;AAAA,IACA,eAAA,EAAiB,MAAA;AAAA,IACjB,IAAA,EAAM;AAAA,GACR;AAAA,EACA;AAAA,IACE,MAAA,EAAQ;AAAA,MACN;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,MAAM,QAAA,EAAS;AAAA,UACzD,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,UACvD,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,UAAA,EAAY,MAAM,SAAA,EAAU;AAAA,UAC7D,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,aAAA,EAAe,MAAM,SAAA,EAAU;AAAA,UAChE,EAAE,YAAA,EAAc,OAAA,EAAS,IAAA,EAAM,cAAA,EAAgB,MAAM,OAAA,EAAQ;AAAA,UAC7D,EAAE,YAAA,EAAc,OAAA,EAAS,IAAA,EAAM,YAAA,EAAc,MAAM,OAAA,EAAQ;AAAA,UAC3D,EAAE,YAAA,EAAc,OAAA,EAAS,IAAA,EAAM,QAAA,EAAU,MAAM,OAAA;AAAQ,SACzD;AAAA,QACA,YAAA,EAAc,kBAAA;AAAA,QACd,IAAA,EAAM,YAAA;AAAA,QACN,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,IAAA,EAAM,UAAA;AAAA,IACN,OAAA,EAAS;AAAA,MACP;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,aAAA,EAAe,MAAM,SAAA,EAAU;AAAA,UAChE,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,aAAA,EAAe,MAAM,SAAA;AAAU,SAClE;AAAA,QACA,YAAA,EAAc,iBAAA;AAAA,QACd,IAAA,EAAM,UAAA;AAAA,QACN,IAAA,EAAM;AAAA,OACR;AAAA,MACA;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,QAAA,EAAU,IAAA,EAAM,aAAA,EAAe,MAAM,QAAA,EAAS;AAAA,UAC9D,EAAE,YAAA,EAAc,QAAA,EAAU,IAAA,EAAM,aAAA,EAAe,MAAM,QAAA;AAAS,SAChE;AAAA,QACA,YAAA,EAAc,uBAAA;AAAA,QACd,IAAA,EAAM,eAAA;AAAA,QACN,IAAA,EAAM;AAAA,OACR;AAAA,MACA;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,cAAA,EAAgB,MAAM,SAAA,EAAU;AAAA,UACjE,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,kBAAA,EAAoB,MAAM,SAAA;AAAU,SACvE;AAAA,QACA,YAAA,EAAc,mBAAA;AAAA,QACd,IAAA,EAAM,YAAA;AAAA,QACN,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB,MAAA;AAAA,IACjB,IAAA,EAAM;AAAA,GACR;AAAA,EACA;AAAA,IACE,MAAA,EAAQ;AAAA,MACN;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,MAAM,QAAA,EAAS;AAAA,UACzD,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,UACvD,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,UAAA,EAAY,MAAM,SAAA,EAAU;AAAA,UAC7D,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,aAAA,EAAe,MAAM,SAAA,EAAU;AAAA,UAChE,EAAE,YAAA,EAAc,OAAA,EAAS,IAAA,EAAM,cAAA,EAAgB,MAAM,OAAA,EAAQ;AAAA,UAC7D,EAAE,YAAA,EAAc,OAAA,EAAS,IAAA,EAAM,YAAA,EAAc,MAAM,OAAA,EAAQ;AAAA,UAC3D,EAAE,YAAA,EAAc,OAAA,EAAS,IAAA,EAAM,QAAA,EAAU,MAAM,OAAA;AAAQ,SACzD;AAAA,QACA,YAAA,EAAc,kBAAA;AAAA,QACd,IAAA,EAAM,YAAA;AAAA,QACN,IAAA,EAAM;AAAA,OACR;AAAA,MACA,EAAE,YAAA,EAAc,MAAA,EAAQ,IAAA,EAAM,eAAA,EAAiB,MAAM,MAAA;AAAO,KAC9D;AAAA,IACA,IAAA,EAAM,WAAA;AAAA,IACN,OAAA,EAAS;AAAA,MACP;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,WAAA,EAAa,MAAM,SAAA,EAAU;AAAA,UAC9D,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,YAAA,EAAc,MAAM,SAAA;AAAU,SACjE;AAAA,QACA,YAAA,EAAc,qBAAA;AAAA,QACd,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB,MAAA;AAAA,IACjB,IAAA,EAAM;AAAA,GACR;AAAA,EACA;AAAA,IACE,MAAA,EAAQ;AAAA,MACN;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,MAAM,QAAA,EAAS;AAAA,UACzD,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,UACvD,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,UAAA,EAAY,MAAM,SAAA,EAAU;AAAA,UAC7D,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,aAAA,EAAe,MAAM,SAAA,EAAU;AAAA,UAChE,EAAE,YAAA,EAAc,OAAA,EAAS,IAAA,EAAM,cAAA,EAAgB,MAAM,OAAA,EAAQ;AAAA,UAC7D,EAAE,YAAA,EAAc,OAAA,EAAS,IAAA,EAAM,YAAA,EAAc,MAAM,OAAA,EAAQ;AAAA,UAC3D,EAAE,YAAA,EAAc,OAAA,EAAS,IAAA,EAAM,QAAA,EAAU,MAAM,OAAA;AAAQ,SACzD;AAAA,QACA,YAAA,EAAc,kBAAA;AAAA,QACd,IAAA,EAAM,YAAA;AAAA,QACN,IAAA,EAAM;AAAA,OACR;AAAA,MACA;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,WAAA,EAAa,MAAM,SAAA,EAAU;AAAA,UAC9D,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,YAAA,EAAc,MAAM,SAAA;AAAU,SACjE;AAAA,QACA,YAAA,EAAc,qBAAA;AAAA,QACd,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM;AAAA,OACR;AAAA,MACA,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,gBAAA,EAAkB,MAAM,SAAA;AAAU,KACrE;AAAA,IACA,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS;AAAA,MACP;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,MAAA,EAAQ,MAAM,SAAA,EAAU;AAAA,UACzD,EAAE,YAAA,EAAc,QAAA,EAAU,IAAA,EAAM,OAAA,EAAS,MAAM,QAAA,EAAS;AAAA,UACxD;AAAA,YACE,UAAA,EAAY;AAAA,cACV,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,WAAA,EAAa,MAAM,SAAA,EAAU;AAAA,cAC9D,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,YAAA,EAAc,MAAM,SAAA;AAAU,aACjE;AAAA,YACA,YAAA,EAAc,qBAAA;AAAA,YACd,IAAA,EAAM,KAAA;AAAA,YACN,IAAA,EAAM;AAAA;AACR,SACF;AAAA,QACA,YAAA,EAAc,yBAAA;AAAA,QACd,IAAA,EAAM,YAAA;AAAA,QACN,IAAA,EAAM;AAAA,OACR;AAAA,MACA;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,cAAA,EAAgB,MAAM,SAAA,EAAU;AAAA,UACjE,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,kBAAA,EAAoB,MAAM,SAAA;AAAU,SACvE;AAAA,QACA,YAAA,EAAc,mBAAA;AAAA,QACd,IAAA,EAAM,YAAA;AAAA,QACN,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB,SAAA;AAAA,IACjB,IAAA,EAAM;AAAA;AAEV;AAEO,IAAM,UAAA,GAAa;AAAA,EACxB,UAAA,EAAY;AAAA,IACV,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW,OAAA;AAAA,IACX,MAAA,EAAQ,OAAA;AAAA,IACR,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,cAAA,EAAgB;AAAA,IACd;AAAA,MACE,MAAA,EAAQ,MAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,eAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,cAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,cAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,SAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,UAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,OAAA;AAAA,UACR,UAAA,EAAY,IAAA;AAAA,UACZ,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,WAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,SAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,cAAA;AAAA,UACR,UAAA,EAAY,IAAA;AAAA,UACZ,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,CAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,OAAA;AAAA,UACR,UAAA,EAAY,IAAA;AAAA,UACZ,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,SAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,cAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,YAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,YAAA;AAAA,UACR,UAAA,EAAY,IAAA;AAAA,UACZ,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,uBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,qBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,QAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,aAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,YAAY,EAAC;AAAA,MACb,QAAQ,EAAC;AAAA,MACT,SAAA,EAAW;AAAA,QACT,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,WAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,oBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,uBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,MAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,WAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,SAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,cAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,cAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,cAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,SAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,SAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,WAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,OAAA;AAAA,UACR,UAAA,EAAY,IAAA;AAAA,UACZ,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,MAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,eAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,WAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,cAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,YAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,SAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,cAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,YAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,SAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,GACF;AAAA,EACA,UAAA,EAAY;AAAA,IACV;AAAA,MACE,MAAA,EAAQ,SAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,kBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,UAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF;AACF,GACF;AAAA,EACA,QAAA,EAAU;AAAA,IACR;AAAA,MACE,MAAA,EAAQ,uBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,uBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,aAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,oBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,WAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,eAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,cAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,aAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,SAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,wBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,CAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,eAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF;AACF,GACF;AAAA,EACA,QAAA,EAAU;AAAA,IACR;AAAA,MACE,MAAA,EAAQ,GAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA;AACV,GACF;AAAA,EACA,OAAA,EAAS;AAAA,IACP;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,6CAAA;AAAA,QACA,0DAAA;AAAA,QACA,EAAA;AAAA,QACA,6DAAA;AAAA,QACA,gFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,QAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,MAAA,EAAQ;AAAA,cACN,SAAA,EAAW;AAAA,gBACT,MAAA,EAAQ;AAAA;AACV;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,iEAAA;AAAA,QACA,mEAAA;AAAA,QACA,EAAA;AAAA,QACA,6EAAA;AAAA,QACA,6EAAA;AAAA,QACA,wDAAA;AAAA,QACA,wEAAA;AAAA,QACA,EAAA;AAAA,QACA,4EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,MAAA;AAAA,QACR,UAAA,EAAY;AAAA,UACV;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,UAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR,IAAA;AAAA,cACA;AAAA;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,QAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,uBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,QAAA,EAAU;AAAA;AACZ;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,uBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,QAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,OAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,SAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,KAAA,EAAO;AAAA,gBACL,SAAA,EAAW;AAAA,kBACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,kBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,gBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,KAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,QAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,aAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,SAAA,EAAW;AAAA,gBACT,MAAA,EAAQ;AAAA;AACV;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,oBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,kBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,KAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,OAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,QAAA,EAAU;AAAA;AACZ;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,iBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,UAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,mBAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,oBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,iBAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,WAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,eAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,IAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,eAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,kBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,QAAA,EAAU;AAAA;AACZ,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,KAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,QAAA,EAAU;AAAA;AACZ;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,aAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,6EAAA;AAAA,QACA,EAAA;AAAA,QACA,gEAAA;AAAA,QACA,wEAAA;AAAA,QACA,uEAAA;AAAA,QACA,0DAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,MAAA;AAAA,QACR,UAAA,EAAY;AAAA,UACV;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA,gBACE,MAAA,EAAQ,UAAA;AAAA,gBACR,MAAA,EAAQ;AAAA,kBACN,6CAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBACA,MAAA,EAAQ;AAAA,kBACN,KAAA,EAAO;AAAA,oBACL,SAAA,EAAW;AAAA,sBACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,UAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA,gBACE,MAAA,EAAQ,YAAA;AAAA,gBACR,MAAA,EAAQ;AAAA,kBACN;AAAA,iBACF;AAAA,gBACA,MAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,MAAA,EAAQ,UAAA;AAAA,gBACR,MAAA,EAAQ;AAAA,kBACN,yCAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBACA,MAAA,EAAQ;AAAA,kBACN,KAAA,EAAO;AAAA,oBACL,SAAA,EAAW;AAAA,sBACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,eACF;AAAA,cACA;AAAA,gBACE,MAAA,EAAQ,MAAA;AAAA,gBACR,MAAA,EAAQ;AAAA,kBACN,0BAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBACA,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,IAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,QAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,OAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,wBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,gDAAA;AAAA,QACA,EAAA;AAAA,QACA,8EAAA;AAAA,QACA,yEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,iBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,0CAAA;AAAA,cACA,uEAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,MAAA,EAAQ;AAAA,cACN,KAAA,EAAO;AAAA;AACT,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,oEAAA;AAAA,cACA,gDAAA;AAAA,cACA,+EAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,MAAA,EAAQ;AAAA,cACN,KAAA,EAAO;AAAA,gBACL,SAAA,EAAW;AAAA,kBACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,kBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,OAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,KAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,SAAA,EAAW;AAAA,gBACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,QAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,OAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,WAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,gBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,oBAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,aAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,IAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,oBAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,SAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,gBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,oBAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,UAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,kBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,UAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,uBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,KAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,QAAA,EAAU;AAAA;AACZ;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,kBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,SAAA,EAAW;AAAA,gBACT,MAAA,EAAQ;AAAA;AACV;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,MAAA;AAAA,QACR,UAAA,EAAY;AAAA,UACV;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA,gBACE,OAAA,EAAS;AAAA,kBACP,IAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,iBAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA,gBACE,MAAA,EAAQ,MAAA;AAAA,gBACR,MAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,MAAA,EAAQ,eAAA;AAAA,gBACR,MAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,MAAA,EAAQ,cAAA;AAAA,gBACR,MAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,MAAA,EAAQ,iBAAA;AAAA,gBACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,IAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,QAAA,EAAU;AAAA;AACZ,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,iBAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,SAAA,EAAW;AAAA,gBACT,MAAA,EAAQ;AAAA;AACV;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,iBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,KAAA,EAAO;AAAA,gBACL,SAAA,EAAW;AAAA,kBACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,SAAA,EAAW;AAAA,gBACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,wBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,SAAA,EAAW;AAAA,gBACT,MAAA,EAAQ;AAAA;AACV;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,iBAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,IAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,QAAA,EAAU;AAAA;AACZ,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,iBAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,wBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,IAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,oBAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,mBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,SAAA,EAAW;AAAA,gBACT,MAAA,EAAQ;AAAA;AACV;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,IAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,QAAA,EAAU;AAAA;AACZ,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,oBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,MAAA;AAAA,QACR,UAAA,EAAY;AAAA,UACV;AAAA,YACE,MAAA,EAAQ,YAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,UAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,oBAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,QAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,oBAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA,gBACE,QAAA,EAAU;AAAA;AACZ;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,qBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,QAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,SAAA,EAAW;AAAA,gBACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,eAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,SAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,oBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,qBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AAEJ,CAAA;AChnFO,IAAM,YAAA,GAAe,KAAA;AAErB,IAAME,YAAAA,GAAwB,CAAC,gBAAgB,CAAA;AAE/C,IAAM,eAAN,MAAmB;AAAA,EACxB,MAAa,MAAM,MAAA,EAAa;AAC9B,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,iBAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,aAAa,CAAA,aAAA,EAAgB,SAAA,EAAW,SAAS,CAAA,EAAA,EAAK,SAAS,SAAS,CAAA,CAAA;AAC9E,IAAA,MAAM,QAAA,GAAW,IAAIC,QAAAA,CAAS,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,UAAA,EAAY,OAAA,EAASC,OAAAA,CAAQ,KAAA,EAAO,CAAA;AAEhG,IAAA,MAAM,eAAA,GAAkB,aAAa,WAAW,CAAA;AAChD,IAAA,MAAM,oBAAA,GAAuB,aAAa,gBAAgB,CAAA;AAE1D,IAAA,IAAI,yBAAyB,eAAA,CAAgB,GAAA;AAC7C,IAAA,IAAI,8BAA8B,oBAAA,CAAqB,GAAA;AACvD,IAAA,IAAI,SAAS,oBAAA,CAAqB,GAAA;AAGlC,IAAA,MAAM,eAAe,qBAAA,CAAsB;AAAA,MACzC,gBAAA,EAAkB,eAAA;AAAA,MAClB,YAAA,EAAc,eAAA;AAAA,MACd,iBAAA,EAAmB;AAAA,KACpB,CAAA;AAED,IAAA,IAAI,SAAA,CAAU,cAAc,KAAA,EAAO;AACjC,MAAA,2BAAA,GAA8B,oBAAA,CAAqB,OAAO,oBAAA,CAAqB,SAAA;AAC/E,MAAA,IAAIC,eAAAA,GAAiB,KAAA;AACrB,MAAA,IAAIC,oBAAAA,GAAsB,gCAAgC,oBAAA,CAAqB,SAAA;AAC/E,MAAA,IAAIA,oBAAAA,EAAqB;AACvB,QAAA,sBAAA,GAAyB,eAAA,CAAgB,aAAa,eAAA,CAAgB,GAAA;AACtE,QAAAD,eAAAA,GAAiB,2BAA2B,eAAA,CAAgB,SAAA;AAAA,MAC9D;AACA,MAAA,IAAI,CAAC,sBAAA,EAAwB;AAC3B,QAAA,sBAAA,GAAyB,eAAA,CAAgB,SAAA;AACzC,QAAAA,eAAAA,GAAiB,IAAA;AACjB,QAAA,IAAI,qBAAqB,SAAA,EAAW;AAClC,UAAA,2BAAA,GAA8B,oBAAA,CAAqB,SAAA;AACnD,UAAAC,oBAAAA,GAAsB,IAAA;AAAA,QACxB;AAAA,MACF;AACA,MAAA,MAAMC,gBAAeF,eAAAA,IAAkBC,oBAAAA;AACvC,MAAA,MAAM,kBAAA,GAAqB,CAACD,eAAAA,IAAkB,CAACC,oBAAAA;AAC/C,MAAA,MAAME,mBAAAA,GAAqB,CAACD,aAAAA,IAAgB,CAAC,kBAAA;AAE7C,MAAA,MAAME,OAAAA,GAAS,MAAM,MAAA,CAAO,KAAA,CAAMV,QAAQ,KAAA,EAAO;AAAA,QAC/C,GAAA;AAAA,QACA,GAAA,EAAK,OAAA;AAAA,QACL,MAAA;AAAA,QACA,QAAA;AAAA,QACA,SAAA;AAAA,QACA,SAAA;AAAA,QACA,iBAAA;AAAA,QACA,YAAA,EAAc,YAAA;AAAA,QACd,SAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,sBAAA;AAAA,QACA,2BAAA;AAAA,QACA,WAAA,EAAAG,YAAAA;AAAA,QACA,gBAAA,EAAkB,aAAa,UAAU,CAAA;AAAA,QACzC,kBAAA,EAAAM,mBAAAA;AAAA,QACA,cAAA,EAAAH,eAAAA;AAAA,QACA,mBAAA,EAAAC,oBAAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAAG,QAAO,YAAA,GAAe,YAAA;AACtB,MAAAA,QAAO,iBAAA,GAAoB,MAAA;AAE3B,MAAA,QAAA,CAAS,SAAS,oBAAoB,CAAA;AACtC,MAAA,OAAOA,OAAAA;AAAA,IACT;AAGA,IAAA,MAAM,cAAA,GAAiB,IAAA;AACvB,IAAA,sBAAA,GAAyB,eAAA,CAAgB,SAAA;AACzC,IAAA,2BAAA,GAA8B,oBAAA,CAAqB,aAAa,oBAAA,CAAqB,GAAA;AACrF,IAAA,MAAM,mBAAA,GAAsB,gCAAgC,oBAAA,CAAqB,SAAA;AACjF,IAAA,MAAM,eAAiC,mBAAA;AACvC,IAAA,MAAM,qBAAqB,CAAC,YAAA;AAK5B,IAAA,IAAI,kBAAA,EAAoB;AACtB,MAAA,MAAA,GAAS,YAAA,CAAa,UAAU,CAAA,CAAE,GAAA;AAClC,MAAA,2BAAA,GAA8B,YAAA,CAAa,UAAU,CAAA,CAAE,mBAAA;AAAA,IACzD;AAEA,IAAA,MAAM,SAAA,GAAiB;AAAA,MACrB,GAAA;AAAA,MACA,QAAQ,oBAAA,CAAqB,GAAA;AAAA,MAC7B,QAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,iBAAA;AAAA,MACA,YAAA,EAAc,YAAA;AAAA,MACd,SAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,sBAAA;AAAA,MACA,2BAAA;AAAA,MACA,WAAA,EAAAP,YAAAA;AAAA,MACA,gBAAA,EAAkB,aAAa,UAAU,CAAA;AAAA,MACzC,kBAAA;AAAA,MACA,cAAA;AAAA,MACA,mBAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,SAAA,CAAU,cAAc,MAAA,EAAQ;AAClC,MAAA,SAAA,CAAU,GAAA,GAAM,OAAA;AAAA,IAClB;AAEA,IAAA,IAAI,SAAA,CAAU,cAAc,KAAA,EAAO;AACjC,MAAA,SAAA,CAAU,GAAA,GAAM,UAAA;AAAA,IAClB;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,KAAA,CAAMH,QAAQ,KAAA,EAAO;AAAA,MAC/C,GAAA,EAAK,UAAA;AAAA,MACL,GAAG;AAAA,KACJ,CAAA;AAED,IAAA,MAAA,CAAO,YAAA,GAAe,YAAA;AACtB,IAAA,MAAA,CAAO,iBAAA,GAAoB,MAAA;AAE3B,IAAA,QAAA,CAAS,SAAS,oBAAoB,CAAA;AAEtC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,mBAAA,CAAoB,MAAA,EAAa,SAAA,EAAgB;AAC5D,IAAA,MAAM;AAAA,MACJ,SAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,EAAA,GAAK,IAAIW,GAAAA,CAAIN,OAAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AAEf,IAAA,MAAM,SAAc,EAAE,IAAA,EAAM,EAAC,EAAG,GAAG,SAAA,EAAU;AAE7C,IAAA,MAAM,UAAA,GAAa,UAAU,SAAA,KAAc,MAAA;AAC3C,IAAA,MAAM,mBAAA,GAAsB,UAAU,WAAA,CAAY,QAAA;AAElD,IAAA,MAAM,yBAAA,GAA4B;AAAA,MAChC,GAAA,EAAK,KAAA;AAAA,MACL,GAAG,SAAA,CAAU,SAAA;AAAA,MACb,SAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,yBAAA,CAA0B,iBAAA,GAAoB,GAAA;AAC9C,MAAA,yBAAA,CAA0B,uBAAA,GAA0B,GAAA;AAAA,IACtD;AACA,IAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,mBAAA,CAAoB,yBAAyB,CAAA;AACtE,IAAA,MAAA,CAAO,IAAA,CAAK,iBAAiB,GAAA,CAAI,oBAAA;AACjC,IAAA,MAAA,CAAO,oBAAoB,GAAA,CAAI,iBAAA;AAC/B,IAAA,MAAA,CAAO,uBAAuB,GAAA,CAAI,oBAAA;AAClC,IAAA,MAAA,CAAO,yBAAyB,MAAA,CAAOJ,GAAAA,CAAI,SAAA,CAAU,IAAA,EAAM,aAAa,CAAC,CAAA,CAAE,KAAA,CAAM,EAAA,IAAM,mBAAmB,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,IAAI,GAAA,CAAI,iBAAA;AAE9H,IAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,eAAA,EAAiB;AAChD,MAAA,MAAM,cAAA,GAAiB,MAAM,MAAA,CAAO,eAAA,CAAgB;AAAA,QAClD,GAAA,EAAK,KAAA;AAAA,QACL,SAAA;AAAA,QACA,SAAS,MAAA,CAAO,cAAA;AAAA,QAChB,SAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,MAAA,CAAO,qBAAqB,cAAA,CAAe,iBAAA;AAAA,IAC7C;AAEA,IAAA,MAAA,CAAO,YAAA,GAAe,GAAA;AACtB,IAAA,KAAA,MAAW,MAAA,IAAU,OAAO,IAAA,EAAM;AAChC,MAAA,IAAIE,YAAAA,CAAY,SAAS,MAAM,CAAA,IAAK,CAAC,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACxD,QAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,YAAA,GAAeF,GAAAA,CAAI,MAAA,CAAO,YAAA,IAAgB,CAAC,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,IAAK,CAAC,CAAA;AAAA,IACnF;AACA,IAAA,MAAA,CAAO,YAAA,GAAeW,oBAAoBX,GAAAA,CAAI,MAAA,CAAO,YAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAE9E,IAAA,IAAI,SAAA,CAAU,cAAc,KAAA,EAAO;AACjC,MAAA,MAAM,UAAA,GAAa,OAAO,SAAA,EAAW,KAAA;AACrC,MAAA,IACE,UAAA,IACG,MAAM,OAAA,CAAQ,UAAU,KACxB,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,IAChC,OAAO,WAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,KAAM,QAAA,IAC7C,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,CAAA,CAAE,QAAA,KAAa,MAAA,EAClD;AACA,QAAA,GAAA,CAAI,kCAAA,EAAoC,aAAa,kBAAA,EAAoB,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,EAAE,QAAQ,CAAA;AACnH,QAAA,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,CAAE,WAAW,GAAA,CAAI,sBAAA;AACjD,QAAA,GAAA,CAAI,kCAAA,EAAoC,aAAa,sBAAA,EAAwB,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,EAAE,QAAQ,CAAA;AAAA,MACzH;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,KAAK,MAAA,EAAa;AAC7B,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,GAAG;AAAA,KACL,GAAI,MAAA;AAEJ,IAAA,OAAO,MAAA,CAAO,IAAA,CAAKY,QAAAA,CAAS,IAAA,EAAM,IAAI,CAAA;AAAA,EACxC;AAAA,EAEO,UAAU,MAAA,EAAa;AAC5B,IAAA,OAAOC,UAAAA,CAAW,CAAA,gBAAA,EAAmB,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAAA,EACpD;AACF,CAAA;AAEA,IAAO,aAAA,GAAQ,IAAI,YAAA,EAAa;;;ACzOzB,IAAM,gBAAA,GAA2C;AAAA,EACtD,CAAC,UAAU,GAAG,4CAAA;AAAA,EACd,CAAC,UAAU,GAAG,4CAAA;AAAA,EACd,CAAC,SAAS,GAAG,4CAAA;AAAA,EACb,CAAC,UAAU,GAAG,4CAAA;AAAA,EACd,CAAC,WAAW,GAAG,4CAAA;AAAA,EACf,CAAC,QAAQ,GAAG,8CAAA;AAAA,EACZ,CAAC,MAAM,GAAG;AACZ,CAAA;AA8BO,IAAM,oBAAA,GAAuB;AAAA,EAClC;AAAA,IACE,QAAA,EAAU;AAAA,MACR;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,gBAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,eAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,QAAA;AAAA,QAChB,MAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,eAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,QAAA;AAAA,QAChB,MAAA,EAAQ,sBAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,OAAA;AAAA,QAChB,MAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,IACA,MAAA,EAAQ,gBAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,EAAA;AAAA,QACR,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,IACA,MAAA,EAAQ,YAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,EAAA;AAAA,QACR,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA;AAEZ,CAAA;;;ACxHO,IAAM,YAAA,GAAuC;AAAA,EAClD,QAAA,EAAU,CAAA;AAAA,EACV,QAAA,EAAU,CAAA;AAAA,EACV,OAAA,EAAS,CAAA;AAAA,EACT,QAAA,EAAU,CAAA;AAAA,EACV,SAAA,EAAW,CAAA;AAAA,EACX,MAAA,EAAQ,CAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;ACEA,IAAMX,YAAAA,GAAwB,CAAC,gBAAgB,CAAA;AAExC,IAAM,cAAN,MAAkB;AAAA,EACvB,WAAA,GAAc;AAAA,EACd;AAAA,EAEA,MAAa,MAAM,MAAA,EAAa;AAC9B,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,iBAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,aAAa,CAAA,YAAA,EAAe,SAAA,EAAW,SAAS,CAAA,EAAA,EAAK,SAAS,SAAS,CAAA,CAAA;AAC7E,IAAA,MAAM,QAAA,GAAW,IAAIC,QAAAA,CAAS,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,YAAA,EAAc,OAAA,EAASC,OAAAA,CAAQ,KAAA,EAAO,CAAA;AAElG,IAAA,MAAM,YAAA,GAAe,YAAA,CAAa,SAAA,CAAU,SAAS,CAAA;AACrD,IAAA,MAAM,iBAAA,GAAoB,YAAA,CAAa,OAAA,CAAQ,SAAS,CAAA;AACxD,IAAA,MAAM,YAAA,GAAe,gBAAA,CAAiB,SAAA,CAAU,SAAS,CAAA;AAEzD,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,KAAA,CAAML,QAAQ,IAAA,EAAM;AAAA,MAC9C,GAAA;AAAA,MACA,YAAA;AAAA,MACA,GAAA,EAAK,oBAAA;AAAA,MACL,SAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,iBAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA,EAAAG,YAAAA;AAAA,MACA,iBAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,QAAA,CAAS,SAAS,mBAAmB,CAAA;AACrC,IAAA,MAAA,CAAO,iBAAA,GAAoB,MAAA;AAE3B,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,mBAAA,CAAoB,MAAA,EAAa,SAAA,EAAgB;AAC5D,IAAA,MAAM;AAAA,MACJ,SAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,EAAA,GAAK,IAAIQ,GAAAA,CAAIN,OAAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AAEf,IAAA,MAAM,SAAc,EAAE,IAAA,EAAM,EAAC,EAAG,GAAG,SAAA,EAAU;AAE7C,IAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,mBAAA,CAAoB;AAAA,MAC3C,GAAA,EAAK,KAAA;AAAA,MACL,GAAG,SAAA,CAAU,SAAA;AAAA,MACb,SAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAA,CAAO,IAAA,CAAK,iBAAiB,GAAA,CAAI,oBAAA;AACjC,IAAA,MAAA,CAAO,oBAAoB,GAAA,CAAI,iBAAA;AAC/B,IAAA,MAAA,CAAO,uBAAuB,GAAA,CAAI,oBAAA;AAElC,IAAA,MAAA,CAAO,YAAA,GAAe,GAAA;AACtB,IAAA,KAAA,MAAW,MAAA,IAAU,OAAO,IAAA,EAAM;AAChC,MAAA,IAAIF,YAAAA,CAAY,SAAS,MAAM,CAAA,IAAK,CAAC,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACxD,QAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,YAAA,GAAeF,GAAAA,CAAI,MAAA,CAAO,YAAA,IAAgB,CAAC,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,IAAK,CAAC,CAAA;AAAA,IACnF;AACA,IAAA,MAAA,CAAO,YAAA,GAAeW,oBAAoBX,GAAAA,CAAI,MAAA,CAAO,YAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAE9E,IAAA,IAAI,SAAA,CAAU,cAAc,KAAA,EAAO;AACjC,MAAA,MAAM,UAAA,GAAa,OAAO,SAAA,EAAW,KAAA;AACrC,MAAA,IACE,UAAA,IACG,MAAM,OAAA,CAAQ,UAAU,KACxB,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,IAChC,OAAO,WAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,KAAM,QAAA,IAC7C,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,CAAA,CAAE,QAAA,KAAa,MAAA,EAClD;AACA,QAAA,GAAA,CAAI,iCAAA,EAAmC,aAAa,kBAAA,EAAoB,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,EAAE,QAAQ,CAAA;AAClH,QAAA,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,CAAE,WAAW,GAAA,CAAI,sBAAA;AACjD,QAAA,GAAA,CAAI,iCAAA,EAAmC,aAAa,sBAAA,EAAwB,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,EAAE,QAAQ,CAAA;AAAA,MACxH;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,KAAK,MAAA,EAAa;AAC7B,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,GAAG;AAAA,KACL,GAAI,MAAA;AAEJ,IAAA,OAAO,MAAA,CAAO,IAAA,CAAKY,QAAAA,CAAS,IAAA,EAAM,IAAI,CAAA;AAAA,EACxC;AAAA,EAEO,UAAU,MAAA,EAAyB;AACxC,IAAA,OAAOC,WAAwC,WAAA,EAAa;AAAA,MAC1D,iBAAiB,MAAA,CAAO;AAAA,KACzB,CAAA;AAAA,EACH;AACF,CAAA;AAEA,IAAO,YAAA,GAAQ,IAAI,WAAA,EAAY;AC/GxB,IAAM,2BAAA,GAA8B,CAAA;AAKpC,IAAM,eAAA,GAAkD;AAAA,EAC7D,QAAA,EAAU;AAAA,IACR,GAAG,kBAAkB,UAAU,CAAA;AAAA,IAC/B,SAAA,EAAW,4CAAA;AAAA,IACX,OAAA,EAAS,4CAAA;AAAA,IACT,aAAA,EAAe,EAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAG,kBAAkB,UAAU,CAAA;AAAA,IAC/B,SAAA,EAAW,4CAAA;AAAA,IACX,aAAA,EAAe,EAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAG,kBAAkB,WAAW,CAAA;AAAA,IAChC,SAAA,EAAW,4CAAA;AAAA,IACX,aAAA,EAAe,EAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAG,kBAAkB,WAAW,CAAA;AAAA,IAChC,SAAA,EAAW,4CAAA;AAAA,IACX,aAAA,EAAe,EAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,WAAA,EAAa;AAAA,IACX,GAAG,kBAAkB,WAAW,CAAA;AAAA,IAChC,SAAA,EAAW,4CAAA;AAAA,IACX,aAAA,EAAe,EAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAG,kBAAkB,UAAU,CAAA;AAAA,IAC/B,SAAA,EAAW,4CAAA;AAAA,IACX,aAAA,EAAe,EAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAG,kBAAkB,SAAS,CAAA;AAAA,IAC9B,SAAA,EAAW,4CAAA;AAAA,IACX,aAAA,EAAe,GAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAG,kBAAkB,SAAS,CAAA;AAAA,IAC9B,SAAA,EAAW,4CAAA;AAAA,IACX,aAAA,EAAe,KAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAG,kBAAkB,QAAQ,CAAA;AAAA,IAC7B,SAAA,EAAW,8CAAA;AAAA,IACX,MAAA,EAAQ,8CAAA;AAAA,IACR,aAAA,EAAe,EAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAG,kBAAkB,SAAS,CAAA;AAAA,IAC9B,OAAA,EAAS,4CAAA;AAAA,IACT,aAAA,EAAe,CAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAG,kBAAkB,QAAQ,CAAA;AAAA,IAC7B,SAAA,EAAW,4CAAA;AAAA,IACX,aAAA,EAAe,CAAA;AAAA,IACf,mBAAA,EAAqB;AAAA;AAEzB,CAAA;AAEO,IAAM,0BAAA,GAA6B,WAAW,KAAK;AACnD,IAAM,4BAAA,GAA+B,aAAa,KAAK;AAGvD,IAAM,6BAAA,GAAgC,4CAAA;AACtC,IAAM,4BAAA,GAA+B,4CAAA;AACrC,IAAM,4BAAA,GAA+B,4CAAA;AAErC,IAAM,iCAAA,GAAoC,4CAAA;AAG1C,IAAM,iBAAA,GAAoB;AAAA,EACvB;AAAA,EACR,IAAA,EAAM;AAAA,IACJ,MAAA,EAAQ,EAAA;AAAA;AAAA,IACR,UAAA,EAAY,EAAA;AAAA;AAAA,IACZ,WAAA,EAAa,EAAA;AAAA;AAAA,IACb,IAAA,EAAM;AAAA;AAAA;AAEV,CAAA;;;AC/GO,IAAM,YAAA,GAAe;AAAA,EAC1B;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,aAAA,EAAe,QAAQ,SAAA,EAAU;AAAA,MACtE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA,EAAU;AAAA,MACnE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA,EAAU;AAAA,MACpE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,MAAA,EAAQ,QAAQ,SAAA,EAAU;AAAA,MAC/D,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA,EAAU;AAAA,MACpE,EAAE,cAAA,EAAgB,WAAA,EAAa,MAAA,EAAQ,eAAA,EAAiB,QAAQ,WAAA;AAAY,KAC9E;AAAA,IACA,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,QAAA,EAAU,QAAQ,SAAA;AAAU,KACnE;AAAA,IACA,MAAA,EAAQ,kBAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,QAAQ,SAAA;AAAU,KACpE;AAAA,IACA,MAAA,EAAQ,4BAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,EAAE,QAAA,EAAU,IAAI,MAAA,EAAQ,iBAAA,EAAmB,QAAQ,OAAA,EAAQ;AAAA,EAC3D,EAAE,QAAA,EAAU,IAAI,MAAA,EAAQ,WAAA,EAAa,QAAQ,OAAA,EAAQ;AAAA,EACrD,EAAE,QAAA,EAAU,IAAI,MAAA,EAAQ,iBAAA,EAAmB,QAAQ,OAAA,EAAQ;AAAA,EAC3D,EAAE,QAAA,EAAU,IAAI,MAAA,EAAQ,YAAA,EAAc,QAAQ,OAAA,EAAQ;AAAA,EACtD;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,QAAA,EAAU,MAAA,EAAQ,YAAA,EAAc,QAAQ,QAAA;AAAS,KACrE;AAAA,IACA,MAAA,EAAQ,mBAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,EAAE,QAAA,EAAU,IAAI,MAAA,EAAQ,aAAA,EAAe,QAAQ,OAAA,EAAQ;AAAA,EACvD;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,OAAA,EAAS,QAAQ,SAAA;AAAU,KAClE;AAAA,IACA,MAAA,EAAQ,qBAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,QAAQ,SAAA;AAAU,KACpE;AAAA,IACA,MAAA,EAAQ,4BAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,EAAE,QAAA,EAAU,IAAI,MAAA,EAAQ,cAAA,EAAgB,QAAQ,OAAA,EAAQ;AAAA,EACxD;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQ,QAAQ,OAAA,EAAQ;AAAA,MAC3D,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,OAAA,EAAS,QAAQ,SAAA;AAAU,KAClE;AAAA,IACA,MAAA,EAAQ,gCAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,OAAA,EAAS,QAAQ,SAAA;AAAU,KAClE;AAAA,IACA,MAAA,EAAQ,0BAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,EAAE,QAAA,EAAU,IAAI,MAAA,EAAQ,gBAAA,EAAkB,QAAQ,OAAA,EAAQ;AAAA,EAC1D;AAAA,IACE,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR,EAAE,WAAW,IAAA,EAAM,cAAA,EAAgB,WAAW,MAAA,EAAQ,eAAA,EAAiB,QAAQ,SAAA,EAAU;AAAA,MACzF,EAAE,WAAW,IAAA,EAAM,cAAA,EAAgB,WAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA;AAAU,KACtF;AAAA,IACA,MAAA,EAAQ,0BAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR,EAAE,WAAW,IAAA,EAAM,cAAA,EAAgB,WAAW,MAAA,EAAQ,eAAA,EAAiB,QAAQ,SAAA,EAAU;AAAA,MACzF,EAAE,WAAW,IAAA,EAAM,cAAA,EAAgB,WAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA;AAAU,KACtF;AAAA,IACA,MAAA,EAAQ,sBAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR,EAAE,WAAW,KAAA,EAAO,cAAA,EAAgB,WAAW,MAAA,EAAQ,KAAA,EAAO,QAAQ,SAAA,EAAU;AAAA,MAChF,EAAE,WAAW,IAAA,EAAM,cAAA,EAAgB,WAAW,MAAA,EAAQ,QAAA,EAAU,QAAQ,SAAA,EAAU;AAAA,MAClF,EAAE,WAAW,IAAA,EAAM,cAAA,EAAgB,UAAU,MAAA,EAAQ,QAAA,EAAU,QAAQ,QAAA,EAAS;AAAA,MAChF,EAAE,WAAW,IAAA,EAAM,cAAA,EAAgB,WAAW,MAAA,EAAQ,IAAA,EAAM,QAAQ,SAAA,EAAU;AAAA,MAC9E,EAAE,WAAW,KAAA,EAAO,cAAA,EAAgB,WAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA;AAAU,KACvF;AAAA,IACA,MAAA,EAAQ,SAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,QAAQ,SAAA;AAAU,KAC7D;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,UAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,QAAQ,SAAA;AAAU,KAC7D;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,UAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,QAAQ,SAAA;AAAU,KAC7D;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,iBAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,QAAQ,SAAA;AAAU,KAC7D;AAAA,IACA,MAAA,EAAQ,aAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,MAAA,EAAQ,MAAA,EAAQ,EAAA,EAAI,QAAQ,MAAA;AAAO,KACvD;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,QAAA,EAAU,MAAA,EAAQ,EAAA,EAAI,QAAQ,QAAA;AAAS,KAC3D;AAAA,IACA,MAAA,EAAQ,iBAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,OAAA,EAAS,MAAA,EAAQ,EAAA,EAAI,QAAQ,OAAA;AAAQ,KACzD;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,YAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,QAAQ,SAAA;AAAU,KAC7D;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,QAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,QAAQ,SAAA;AAAU,KAC7D;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,SAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,QAAQ,SAAA;AAAU,KAC7D;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,OAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,QAAQ,SAAA;AAAU,KAC7D;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAW,QAAQ,MAAA;AAAO,KAC9D;AAAA,IACA,MAAA,EAAQ,OAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,QAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,MAAA,EAAQ,MAAA,EAAQ,EAAA,EAAI,QAAQ,MAAA;AAAO,KACvD;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,cAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,QAAQ,SAAA;AAAU,KAC7D;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,MAAA,EAAQ,QAAQ,SAAA,EAAU;AAAA,MAC/D,EAAE,cAAA,EAAgB,QAAA,EAAU,MAAA,EAAQ,SAAA,EAAW,QAAQ,QAAA,EAAS;AAAA,MAChE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,KAAA,EAAO,QAAQ,SAAA,EAAU;AAAA,MAC9D,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,MAAA,EAAQ,OAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT;AAAA,QACE,YAAA,EAAc;AAAA,UACZ,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA,EAAU;AAAA,UACpE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,YAAA,EAAc,QAAQ,SAAA;AAAU,SACvE;AAAA,QACA,cAAA,EAAgB,qBAAA;AAAA,QAChB,MAAA,EAAQ,KAAA;AAAA,QACR,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,QAAA,EAAU,MAAA,EAAQ,SAAA,EAAW,QAAQ,QAAA;AAAS,KAClE;AAAA,IACA,MAAA,EAAQ,UAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA;AAAU,KACrE;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,cAAA,EAAgB,QAAQ,SAAA,EAAU;AAAA,MACvE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA,EAAU;AAAA,MACpE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,aAAA,EAAe,QAAQ,SAAA;AAAU,KACxE;AAAA,IACA,MAAA,EAAQ,cAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA,EAAU;AAAA,MACpE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,aAAA,EAAe,QAAQ,SAAA;AAAU,KACxE;AAAA,IACA,MAAA,EAAQ,YAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,mBAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,MAAA,EAAQ,QAAQ,SAAA,EAAU;AAAA,MAC/D,EAAE,cAAA,EAAgB,QAAA,EAAU,MAAA,EAAQ,SAAA,EAAW,QAAQ,QAAA,EAAS;AAAA,MAChE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,KAAA,EAAO,QAAQ,SAAA,EAAU;AAAA,MAC9D,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,MAAA,EAAQ,SAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,SAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,QAAQ,QAAA,EAAS;AAAA,MAC5D,EAAE,cAAA,EAAgB,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAQ,OAAA;AAAQ,KACjE;AAAA,IACA,MAAA,EAAQ,oBAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,aAAA,EAAe,QAAQ,SAAA;AAAU,KACxE;AAAA,IACA,MAAA,EAAQ,eAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,aAAA,EAAe,QAAQ,SAAA;AAAU,KACxE;AAAA,IACA,MAAA,EAAQ,eAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,QAAQ,SAAA;AAAU,KACpE;AAAA,IACA,MAAA,EAAQ,WAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA;AAAU,KACrE;AAAA,IACA,MAAA,EAAQ,YAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,MAAA,EAAQ,QAAQ,SAAA,EAAU;AAAA,MAC/D,EAAE,cAAA,EAAgB,MAAA,EAAQ,MAAA,EAAQ,WAAA,EAAa,QAAQ,MAAA;AAAO,KAChE;AAAA,IACA,MAAA,EAAQ,mBAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA;AAAU,KACrE;AAAA,IACA,MAAA,EAAQ,mBAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,iBAAA,EAAmB,SAAA;AAAA,IACnB,MAAA,EAAQ;AAAA;AAEZ,CAAA;AAEO,IAAM,wBAAA,GAA2B;AAAA,EACtC;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,eAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,sBAAA,EAAwB,QAAQ,SAAA,EAAU;AAAA,MAC/E,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,mBAAA,EAAqB,QAAQ,SAAA,EAAU;AAAA,MAC5E,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,uBAAA,EAAyB,QAAQ,SAAA,EAAU;AAAA,MAChF,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,qBAAA,EAAuB,QAAQ,SAAA;AAAU,KAChF;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA,EAAU;AAAA,MACnE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA,EAAU;AAAA,MACnE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,OAAA,EAAS,QAAQ,SAAA;AAAU,KAClE;AAAA,IACA,MAAA,EAAQ,QAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA,EAAU;AAAA,MACnE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA;AAAU,KACrE;AAAA,IACA,MAAA,EAAQ,SAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,MAAA,EAAQ,gBAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,YAAA,EAAc,QAAQ,SAAA;AAAU,KACvE;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,YAAA,EAAc,QAAQ,SAAA;AAAU,KACvE;AAAA,IACA,MAAA,EAAQ,iBAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,YAAA,EAAc,QAAQ,SAAA;AAAU,KACvE;AAAA,IACA,MAAA,EAAQ,aAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,MAAA,EAAQ,eAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,YAAA,EAAc,QAAQ,SAAA;AAAU,KACvE;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA,EAAU;AAAA,MACnE,EAAE,cAAA,EAAgB,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,QAAQ,QAAA,EAAS;AAAA,MAC/D,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA;AAAU,KACrE;AAAA,IACA,MAAA,EAAQ,aAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,YAAA,EAAc,QAAQ,SAAA,EAAU;AAAA,MACrE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,iBAAA,EAAmB,SAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA,EAAU;AAAA,MACnE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA;AAAU,KACrE;AAAA,IACA,MAAA,EAAQ,yBAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,yBAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,uBAAA,EAAyB,QAAQ,SAAA,EAAU;AAAA,MAChF,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,wBAAA,EAA0B,QAAQ,SAAA;AAAU,KACnF;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,yBAAA,EAA2B,QAAQ,SAAA;AAAU,KACpF;AAAA,IACA,MAAA,EAAQ,kBAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,uBAAA,EAAyB,QAAQ,SAAA,EAAU;AAAA,MAChF,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,wBAAA,EAA0B,QAAQ,SAAA;AAAU,KACnF;AAAA,IACA,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA;AAEZ,CAAA;ACpeO,IAAMC,aAAAA,GAAe,KAAA;AAErB,IAAMZ,YAAAA,GAAwB,CAAC,gBAAgB,CAAA;AAE/C,IAAM,eAAA,GAAN,cAA8B,YAAA,CAAa;AAAA,EAChD,MAAsB,MAAM,MAAA,EAAa;AACvC,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,iBAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,aAAa,CAAA,gBAAA,EAAmB,SAAA,EAAW,SAAS,CAAA,EAAA,EAAK,SAAS,SAAS,CAAA,CAAA;AACjF,IAAA,MAAM,QAAA,GAAW,IAAIC,QAAAA,CAAS,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,aAAA,EAAe,OAAA,EAASC,OAAAA,CAAQ,KAAA,EAAO,CAAA;AAEnG,IAAA,MAAM,eAAA,GAAkB,eAAA,CAAgB,SAAA,CAAU,SAAS,CAAA;AAC3D,IAAA,MAAM,oBAAA,GAAuB,eAAA,CAAgB,OAAA,CAAQ,SAAS,CAAA;AAE9D,IAAA,MAAM,uBAAA,GAA0B,SAAA,CAAU,OAAA,KAAY,CAAA,IAAK,UAAU,OAAA,KAAY,GAAA;AACjF,IAAA,MAAM,qBAAA,GAAwB,OAAA,CAAQ,OAAA,KAAY,CAAA,IAAK,QAAQ,OAAA,KAAY,GAAA;AAC3E,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,OAAA,KAAY,GAAA,IAAO,QAAQ,OAAA,KAAY,GAAA;AACnE,IAAA,MAAM,YAAA,GAAe,UAAU,SAAA,KAAc,QAAA;AAE7C,IAAA,IAAI,YAAA,EAAc;AAEhB,MAAA,IAAI,CAAC,CAAC,CAAA,EAAG,GAAG,EAAE,QAAA,CAAS,OAAA,CAAQ,OAAO,CAAA,EAAG;AACvC,QAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAAA,MAC7C;AAAA,IACF;AAEA,IAAA,MAAM,eAAe,qBAAA,CAAsB;AAAA,MACzC,gBAAA,EAAkB,2BAAA;AAAA,MAClB,YAAA,EAAc,eAAA;AAAA,MACd,iBAAA,EAAmB;AAAA,KACpB,CAAA;AAED,IAAA,IAAI,SAAA,IAAa,CAAC,YAAA,EAAc;AAC9B,MAAA,MAAMK,OAAAA,GAAS,MAAM,MAAA,CAAO,KAAA,CAAMV,QAAQ,KAAA,EAAO;AAAA,QAC/C,GAAG,MAAA;AAAA,QACH,GAAA,EAAK,OAAA;AAAA,QACL,QAAQ,oBAAA,CAAqB,GAAA;AAAA,QAC7B,YAAA,EAAce,aAAAA;AAAA,QACd,sBAAA,EAAwB,uBAAA,GAA0B,eAAA,CAAgB,OAAA,GAAU,SAAA,CAAU,eAAA;AAAA,QACtF,2BAAA,EAA6B,qBAAA,GAAwB,oBAAA,CAAqB,OAAA,GAAU,OAAA,CAAQ,eAAA;AAAA,QAC5F,WAAA,EAAAZ,YAAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAAO,QAAO,YAAA,GAAe,YAAA;AACtB,MAAAA,QAAO,iBAAA,GAAoB,MAAA;AAE3B,MAAA,QAAA,CAAS,SAAS,iCAAiC,CAAA;AAEnD,MAAA,OAAOA,OAAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,KAAA,CAAMV,QAAQ,QAAA,EAAU;AAAA,MAClD,GAAG,MAAA;AAAA,MACH,GAAA,EAAK,YAAA;AAAA,MACL,eAAA;AAAA,MACA,oBAAA;AAAA,MACA,WAAA,EAAAG;AAAA,KACD,CAAA;AAED,IAAA,MAAA,CAAO,YAAA,GAAe,YAAA;AACtB,IAAA,MAAA,CAAO,iBAAA,GAAoB,MAAA;AAE3B,IAAA,QAAA,CAAS,SAAS,uBAAuB,CAAA;AAEzC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEO,UAAU,MAAA,EAAyB;AACxC,IAAA,OAAOW,WAAwC,WAAA,EAAa;AAAA,MAC1D,iBAAiB,MAAA,CAAO;AAAA,KACzB,CAAA;AAAA,EACH;AACF,CAAA;AAEA,IAAO,gBAAA,GAAQ,IAAI,eAAA,EAAgB;AClF5B,IAAM,wBAAA,GAAN,cAAuC,eAAA,CAAgB;AAAA,EAC5D,MAAsB,MAAM,MAAA,EAAa;AACvC,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,iBAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,EAAA,GAAK,IAAIH,GAAAA,CAAIN,OAAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AAEf,IAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,YAAA,EAAc,MAAM,CAAA;AAExE,IAAA,MAAM,aAAa,CAAA,kBAAA,EAAqB,SAAA,EAAW,SAAS,CAAA,EAAA,EAAK,SAAS,SAAS,CAAA,CAAA;AACnF,IAAA,MAAM,QAAA,GAAW,IAAID,QAAAA,CAAS,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,aAAA,EAAe,OAAA,EAASC,OAAAA,CAAQ,KAAA,EAAO,CAAA;AAEnG,IAAA,MAAM,uBAAuB,SAAA,CAAU,OAAA,KAAY,CAAA,IAAK,SAAA,CAAU,WAAW,4BAAA,CAA6B,MAAA;AAC1G,IAAA,MAAM,mBAAmB,OAAA,CAAQ,OAAA,KAAY,CAAA,IAAK,OAAA,CAAQ,WAAW,0BAAA,CAA2B,MAAA;AAEhG,IAAiB,uBAAuB,4BAA4B;AAEpE,IAAA,IAAI,iBAAA,GAAoB,SAAA;AACxB,IAAA,IAAI,2BAAA,GAA8B,UAAA;AAClC,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AACA,IAAA,IAAI,CAAC,2BAAA,EAA6B;AAChC,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AAGA,IAAA,IAAI,eAAA;AACJ,IAAA,IAAI,CAAC,oBAAA,EAAsB;AACzB,MAAA,QAAA,CAAS,UAAA,EAAW;AAEpB,MAAA,eAAA,GAAkB,MAAM,MAAM,KAAA,CAAM;AAAA,QAClC,GAAG,MAAA;AAAA,QACH,OAAA,EAAS,4BAAA;AAAA,QACT,SAAA,EAAW;AAAA,OACZ,CAAA;AACD,MAAA,QAAA,CAAS,IAAI,gBAAgB,CAAA;AAAA,IAC/B;AACA,IAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,qBAAA,EAAuB,eAAe,CAAA;AAC1F,IAAA,MAAM,0BAA0B,oBAAA,GAC5B,SAAA,GACAJ,GAAAA,CAAI,eAAA,CAAgB,gBAAgB,CAAC,CAAA,CAAE,KAAA,CAAM,EAAA,IAAM,6BAA6B,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAA,EAAGA,IAAI,SAAS,CAAA;AACtH,IAAA,MAAM,uBAAuB,oBAAA,GACzBA,GAAAA,CAAI,SAAA,IAAa,CAAC,EAAE,GAAA,CAAI,EAAA,IAAM,SAAA,CAAU,QAAQ,EAAE,OAAA,CAAQ,SAAA,CAAU,UAAUA,GAAAA,CAAI,SAAS,IAC3F,eAAA,CAAgB,YAAA;AAGpB,IAAA,IAAI,eAAA;AACJ,IAAA,IAAI,mBAAA;AACJ,IAAA,IAAI,CAAC,gBAAA,EAAkB;AAuBrB,MAAA,IAAI,qBAAA,GAAwBA,GAAAA,CAAI,oBAAA,IAAwB,CAAC,CAAA,CAAE,KAAA,CAAM,EAAA,IAAM,0BAAA,CAA2B,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAA,EAAGA,IAAI,SAAS,CAAA;AACpI,MAAA,IAAI;AACF,QAAA,QAAA,CAAS,UAAA,EAAW;AACpB,QAAA,mBAAA,GAAsB,MAAM,kBAAkB,mBAAA,CAAoB;AAAA,UAChE,GAAA;AAAA,UACA,SAAA,EAAW,uBAAA;AAAA,UACX,SAAA,EAAW,4BAAA;AAAA,UACX,GAAA,EAAK,wBAAA;AAAA,UACL,oBAAA,EAAsB,6BAAA;AAAA,UACtB,mBAAA,EAAqB,4BAAA;AAAA,UACrB,iBAAA,EAAmB;AAAA,SACpB,CAAA;AACD,QAAA,QAAA,CAAS,IAAI,uCAAuC,CAAA;AACpD,QAAA,qBAAA,GAAwB,mBAAA,CAAoB,eAAe,QAAA,EAAS;AAAA,MACtE,SAAS,KAAA,EAAO;AACd,QAAA,GAAA,CAAI,gCAAA,EAAkC,SAAA,EAAW,mCAAA,EAAqC,KAAK,CAAA;AAAA,MAC7F;AAGA,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,eAAA,GAAkB,MAAM,iBAAgB,KAAA,CAAM;AAAA,QAC5C,GAAG,MAAA;AAAA,QACH,SAAA,EAAW,qBAAA;AAAA,QACX,SAAA,EAAW,0BAAA;AAAA,QACX,aAAa,0BAAA,CAA2B,OAAA;AAAA,QACxC,QAAA,EAAU,YAAA;AAAA,QACV,OAAA,EAAS,KAAA;AAAA,QACT,QAAA,EAAU,2BAAA;AAAA,QACV,MAAA,EAAQ,iBAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP;AAAA,YACE,SAAA,EAAW,aAAA;AAAA;AAAA,YAEX,KAAK;AAAC;AAAA;AACR;AACF,OACD,CAAA;AACD,MAAA,QAAA,CAAS,IAAI,uBAAuB,CAAA;AAAA,IACtC;AACA,IAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,qBAAA,EAAuB,eAAe,CAAA;AAG1F,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,gBAAA,GAAmB,MAAM,iBAAA,CAAkB,YAAA,CAAa;AAAA,MAC5D,GAAG,MAAA;AAAA,MACH,mBAAA;AAAA,MACA,SAAA,EAAW,4BAAA;AAAA,MACX,SAAA,EAAW,uBAAA;AAAA,MACX,OAAA,EAAS,0BAAA;AAAA,MACT,QAAA,EAAU,2BAAA;AAAA,MACV,WAAW,CAAC,gBAAA,GAAoB,eAAA,EAAiB,KAAA,EAAO,kBAAkB,2BAAA,GAA+B,SAAA;AAAA,MACzG,GAAA,EAAK,wBAAA;AAAA,MACL,oBAAA,EAAsB,6BAAA;AAAA,MACtB,mBAAA,EAAqB,4BAAA;AAAA,MACrB,iBAAA,EAAmB,4BAAA;AAAA,MACnB,4BAAA,EAA8B;AAAA,KAC/B,CAAA;AACD,IAAA,QAAA,CAAS,IAAI,gCAAgC,CAAA;AAC7C,IAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,sBAAA,EAAwB,gBAAgB,CAAA;AAE5F,IAAA,MAAM,YAAA,GAAe,CAAC,OAAA,KAAiB;AACrC,MAAA,IAAI,YAAA,GAAeA,IAAI,CAAC,CAAA;AACxB,MAAA,IAAI,YAAA,GAAe,SAAS,YAAA,IAAgB,CAAA;AAC5C,MAAA,IAAI,iBAAA,GAAoB,SAAS,YAAA,IAAgB,GAAA;AACjD,MAAA,IAAI,cAAA,GAAiB,iBAAiB,KAAA,EAAO,cAAA;AAE7C,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,GAAG,OAAA,EAAS;AAAA,OACd;AACA,MAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,QAAA,KAAA,MAAW,MAAA,IAAU,iBAAiB,IAAA,EAAM;AAC1C,UAAA,IAAI,WAAA,CAAoB,QAAA,CAAS,MAAM,CAAA,EAAG;AACxC,YAAA;AAAA,UACF;AACA,UAAA,IAAA,CAAK,MAAM,CAAA,GAAI,eAAA,CAAgB,IAAA,CAAK,MAAM,CAAA;AAAA,QAC5C;AACA,QAAA,YAAA,GAAe,YAAA,IAAgB,iBAAiB,YAAA,IAAgB,CAAA,CAAA;AAChE,QAAA,iBAAA,GAAoB,iBAAiB,YAAA,IAAgB,GAAA;AAAA,MACvD;AACA,MAAA,KAAA,MAAW,UAAU,IAAA,EAAM;AACzB,QAAA,IAAIE,YAAAA,CAAgB,QAAA,CAAS,MAAM,CAAA,EAAG;AACpC,UAAA;AAAA,QACF;AACA,QAAA,YAAA,GAAeF,GAAAA,CAAI,gBAAgB,CAAC,CAAA,CAAE,KAAK,IAAA,CAAK,MAAM,KAAK,CAAC,CAAA;AAAA,MAC9D;AAEA,MAAA,MAAM,WAAA,GAAcA,GAAAA,CAAI,SAAS,CAAA,CAAE,GAAA,CAAI,EAAA,IAAM,SAAA,CAAU,QAAQ,CAAA,CAAE,OAAA,CAAQ,SAAA,CAAU,QAAA,EAAUA,IAAI,SAAS,CAAA;AAC1G,MAAA,MAAM,WAAA,GAAcA,IAAI,WAAW,CAAA,CAAE,MAAMe,QAAAA,CAAS,MAAA,EAAQ,SAAA,CAAU,MAAM,CAAC,CAAA;AAC7E,MAAA,MAAM,cAAcf,GAAAA,CAAI,WAAW,CAAA,CAAE,KAAA,CAAMA,IAAI,iBAAiB,CAAA,CAAE,KAAA,CAAMe,QAAAA,CAAS,QAAQ,OAAA,CAAQ,MAAM,CAAC,CAAC,CAAA,CAAE,IAAI,WAAW,CAAA;AAC1H,MAAA,MAAM,YAAA,GAAef,GAAAA,CAAI,iBAAiB,CAAA,CAAE,IAAI,WAAW,CAAA;AAE3D,MAAA,OAAO;AAAA,QACL,IAAA;AAAA,QACA,cAAcW,mBAAAA,CAAoBX,GAAAA,CAAI,YAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,QAC/D,YAAA;AAAA,QACA,YAAA,EAAc,iBAAA;AAAA,QACd,aAAaW,mBAAAA,CAAoBX,GAAAA,CAAI,WAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,QAC5D,YAAA,EAAcW,oBAAoBX,GAAAA,CAAI,YAAY,EAAE,OAAA,CAAQ,CAAA,EAAGA,GAAAA,CAAI,SAAS,CAAC,CAAA;AAAA,QAC7E,UAAA,EAAY;AAAA,UACV,GAAG,OAAA,EAAS,UAAA;AAAA,UACZ,SAAA;AAAA,UACA,SAAA;AAAA,UACA,OAAA;AAAA,UACA,QAAA;AAAA,UACA,SAAA;AAAA,UACA,WAAA,EAAa,0BAAA;AAAA,UACb,YAAA,EAAc,4BAAA;AAAA,UACd,oBAAA;AAAA,UACA,gBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,iBAAA,EAAmB;AAAA,OACrB;AAAA,IACF,CAAA;AAGA,IAAA,IAAI,oBAAA,EAAsB;AAExB,MAAA,MAAMgB,eAAAA,GAAiB,aAAa,gBAAgB,CAAA;AAEpD,MAAA,QAAA,CAAS,SAAS,uDAAuD,CAAA;AAEzE,MAAA,OAAO;AAAA,QACL,GAAG,gBAAA;AAAA,QACH,GAAGA,eAAAA;AAAA,QACH,iBAAA,EAAmB;AAAA,OACrB;AAAA,IACF;AAGA,IAAA,MAAM,iBAAiB,YAAA,CAAa;AAAA,MAClC,GAAG,eAAA;AAAA,MACH,cAAc,gBAAA,CAAiB;AAAA,KAChC,CAAA;AAED,IAAA,QAAA,CAAS,SAAS,2DAA2D,CAAA;AAE7E,IAAA,OAAO;AAAA,MACL,GAAG,eAAA;AAAA,MACH,GAAG,cAAA;AAAA,MACH,SAAA;AAAA,MACA,UAAA,EAAY,IAAA;AAAA,MACZ,aAAA,EAAe,iCAAA;AAAA,MACf,WAAA,EAAa,4BAAA;AAAA,MACb,eAAA,EAAiB,uBAAA;AAAA,MACjB,sBAAsB,EAAC;AAAA,MACvB,iBAAA,EAAmB;AAAA,KACrB;AAAA,EACF;AAAA,EAEO,UAAU,MAAA,EAAyB;AACxC,IAAA,OAAOH,WAAwC,WAAA,EAAa;AAAA,MAC1D,iBAAiB,MAAA,CAAO;AAAA,KACzB,CAAA;AAAA,EACH;AACF,CAAA;AAEA,IAAO,mBAAA,GAAQ,IAAI,wBAAA,EAAyB;AClPrC,IAAM,wBAAA,GAAN,cAAuC,eAAA,CAAgB;AAAA,EAC5D,MAAsB,MAAM,MAAA,EAAa;AACvC,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,iBAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,EAAA,GAAK,IAAIH,GAAAA,CAAIN,OAAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AAEf,IAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,YAAA,EAAc,MAAM,CAAA;AAExE,IAAA,MAAM,aAAa,CAAA,kBAAA,EAAqB,SAAA,EAAW,SAAS,CAAA,EAAA,EAAK,SAAS,SAAS,CAAA,CAAA;AACnF,IAAA,MAAM,QAAA,GAAW,IAAID,QAAAA,CAAS,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,aAAA,EAAe,OAAA,EAASC,OAAAA,CAAQ,KAAA,EAAO,CAAA;AAEnG,IAAA,MAAM,qBAAqB,SAAA,CAAU,OAAA,KAAY,CAAA,IAAK,SAAA,CAAU,WAAW,0BAAA,CAA2B,MAAA;AACtG,IAAA,MAAM,qBAAqB,OAAA,CAAQ,OAAA,KAAY,CAAA,IAAK,OAAA,CAAQ,WAAW,4BAAA,CAA6B,MAAA;AACpG,IAAA,MAAM,UAAA,GAAa,QAAQ,SAAA,KAAc,QAAA;AACzC,IAAA,MAAM,WAAA,GAAc,QAAQ,OAAA,KAAY,GAAA;AAGxC,IAAA,MAAM,QAAA,GAAWa,uBAAuB,0BAA0B,CAAA;AAElE,IAAA,IAAI,iBAAA,GAAoB,SAAA;AACxB,IAAA,IAAI,2BAAA,GAA8B,UAAA;AAClC,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AACA,IAAA,IAAI,CAAC,2BAAA,EAA6B;AAChC,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AAEA,IAAA,IAAI,iBAAA;AAEJ,IAAA,IAAI,CAAC,kBAAA,EAAoB;AAEvB,MAAA,IAAI,QAAA,GAAW,kBAAkB,IAAA,CAAK,IAAA;AACtC,MAAA,IAAI,kBAAA,EAAoB;AACtB,QAAA,QAAA,GAAW,kBAAkB,IAAA,CAAK,WAAA;AAAA,MACpC;AACA,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,QAAA,GAAW,kBAAkB,IAAA,CAAK,MAAA;AAAA,MACpC;AACA,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,QAAA,GAAW,kBAAkB,IAAA,CAAK,UAAA;AAAA,MACpC;AACA,MAAA,QAAA,GAAW,WAAW,IAAA,GAAO,IAAA;AAI7B,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,iBAAA,GAAoB,MAAM,kBAAkB,iBAAA,CAAkB;AAAA,QAC5D,GAAA;AAAA,QACA,WAAWjB,GAAAA,CAAI,SAAA,IAAa,CAAC,CAAA,CAAE,IAAI,EAAA,IAAM,SAAA,CAAU,QAAQ,CAAA,CAAE,MAAM,EAAA,IAAM,0BAAA,CAA2B,QAAQ,CAAA,CAAE,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,QAC1H,SAAA,EAAW,0BAAA;AAAA,QACX,GAAA,EAAK,wBAAA;AAAA,QACL,oBAAA,EAAsB;AAAA,OACvB,CAAA;AACD,MAAA,MAAM,EAAE,cAAA,EAAgB,+BAAA,EAAgC,GAAI,iBAAA;AAC5D,MAAA,QAAA,CAAS,IAAI,mBAAmB,CAAA;AAEhC,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,MAAM,EAAE,GAAA,EAAK,GAAA,EAAK,QAAO,GAAI,MAAM,kBAAkB,cAAA,CAAe;AAAA,QAClE,QAAA;AAAA,QACA,KAAA,EAAOe,QAAAA,CAAS,MAAA,EAAQ,0BAAA,CAA2B,YAAY,MAAM,CAAA;AAAA,QACrE,aAAa,0BAAA,CAA2B,WAAA;AAAA,QACxC,QAAA;AAAA,QACA,UAAU,GAAA,GAAM,UAAA,CAAW,0BAAA,CAA2B,OAAiB,EAAE,QAAA,GAAW;AAAA,OACrF,CAAA;AACD,MAAA,QAAA,CAAS,IAAI,kCAAkC,CAAA;AAC/C,MAAA,MAAM,qBAAA,GAAwBf,GAAAA,CAAI,GAAA,IAAO,CAAC,EAAE,GAAA,CAAIe,QAAAA,CAAS,MAAA,EAAQ,SAAA,CAAU,MAAM,CAAA,IAAK,CAAC,CAAA,CAAE,OAAA,CAAQ,UAAU,QAAQ,CAAA;AAEnH,MAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,+DAAA,EAAiE,GAAA,EAAK,KAAK,MAAM,CAAA;AAIrI,MAAA,IAAIG,iBAAAA;AACJ,MAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,QAAA,QAAA,CAAS,UAAA,EAAW;AACpB,QAAAA,iBAAAA,GAAmB,MAAM,KAAA,CAAM,KAAA,CAAM;AAAA,UACnC,GAAG,MAAA;AAAA,UACH,SAAA,EAAW,4BAAA;AAAA,UACX,MAAA,EAAQ,iBAAA;AAAA,UACR,SAAA,EAAW,gCAAgC,QAAA,EAAS;AAAA,UACpD,QAAA,EAAU;AAAA,SACX,CAAA;AACD,QAAA,QAAA,CAAS,IAAI,gBAAgB,CAAA;AAAA,MAC/B;AACA,MAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,2CAAA,EAA6CA,iBAAgB,CAAA;AAEjH,MAAA,IAAI,qBAAA,GAAwBA,iBAAAA,EAAkB,IAAA,EAAM,YAAA,IAAgB,GAAA;AACpE,MAAA,IAAI,kBAAA,GAAqBA,iBAAAA,EAAkB,IAAA,EAAM,SAAA,IAAa,GAAA;AAE9D,MAAA,MAAM,qBAAA,GAAwB,GAAA;AAE9B,MAAA,qBAAA,GAAwBlB,IAAI,qBAAA,IAAyB,CAAC,CAAA,CAAE,KAAA,CAAM,IAAI,qBAAqB,CAAA;AACvF,MAAA,kBAAA,GAAqBA,IAAI,kBAAA,IAAsB,CAAC,CAAA,CAAE,KAAA,CAAM,IAAI,qBAAqB,CAAA;AACjF,MAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,gDAAA,EAAkD,qBAAA,CAAsB,UAAU,CAAA;AACtI,MAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,6CAAA,EAA+C,kBAAA,CAAmB,UAAU,CAAA;AAChI,MAAA,MAAM,wBAAA,GAA2BA,GAAAA,CAAI,qBAAqB,CAAA,CAAE,IAAIe,QAAAA,CAAS,MAAA,EAAQ,SAAA,CAAU,MAAM,CAAA,IAAK,CAAC,CAAA,CAAE,OAAA,CAAQ,UAAU,QAAQ,CAAA;AAEnI,MAAA,MAAM,kBAAA,GAAqBf,GAAAA,CAAI,qBAAqB,CAAA,CAAE,KAAK,wBAAwB,CAAA;AACnF,MAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,6CAAA,EAA+C,kBAAA,CAAmB,UAAU,CAAA;AAChI,MAAA,MAAM,gBAAA,GAAmBA,GAAAA,CAAI,kBAAkB,CAAA,CAC5C,GAAA,CAAIA,GAAAA,CAAI,kBAAkB,CAAA,CAAE,IAAA,CAAKA,GAAAA,CAAI,MAAA,CAAO,SAAS,EAAE,GAAA,CAAI,EAAA,IAAM,SAAA,CAAU,QAAQ,CAAA,CAAE,OAAA,CAAQ,SAAA,CAAU,QAAQ,CAAC,CAAC,CAAA,CACjH,KAAA,CAAM,GAAK,CAAA,CACX,OAAA,CAAQ,CAAA,EAAGA,IAAI,OAAO,CAAA;AACzB,MAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,2CAAA,EAA6C,gBAAA,CAAiB,UAAU,CAAA;AAC5H,MAAA,IAAIkB,iBAAAA,EAAkB;AACpB,QAAAA,iBAAAA,CAAiB,IAAA,CAAK,SAAA,GAAY,kBAAA,CAAmB,QAAA,EAAS;AAC9D,QAAAA,iBAAAA,CAAiB,IAAA,CAAK,YAAA,GAAe,qBAAA,CAAsB,QAAA,EAAS;AAAA,MACtE;AAEA,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,MAAMC,gBAAAA,GAAkB,MAAM,gBAAA,CAAgB,KAAA,CAAM;AAAA,QAClD,GAAG,MAAA;AAAA,QACH,OAAA,EAAS,0BAAA;AAAA,QACT,kBAAkB,0BAAA,CAA2B,OAAA;AAAA,QAC7C,QAAA,EAAU,cAAA;AAAA,QACV,OAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAW,2BAAA;AAAA,QACX,OAAA,EAAS;AAAA,UACP;AAAA,YACE,SAAA,EAAW,aAAA;AAAA;AAAA,YAEX,KAAK,CAAC;AAAA;AAAA;AACR;AACF,OACD,CAAA;AACD,MAAA,QAAA,CAAS,IAAI,uBAAuB,CAAA;AACpC,MAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,0CAAA,EAA4CA,gBAAe,CAAA;AAE/G,MAAA,IAAIC,aAAAA,GAAepB,IAAI,CAAC,CAAA;AACxB,MAAA,IAAI,qBAAA,GAAwBA,IAAImB,gBAAAA,CAAgB,IAAA,EAAM,wBAAwB,CAAC,CAAA,CAAE,MAAM,qBAAqB,CAAA;AAC5G,MAAA,IAAInB,GAAAA,CAAI,qBAAqB,CAAA,CAAE,EAAA,CAAG,CAAC,CAAA,EAAG;AACpC,QAAA,qBAAA,GAAwBA,IAAI,CAAC,CAAA;AAAA,MAC/B;AACA,MAAA,MAAMqB,KAAAA,GAAO;AAAA,QACX,GAAGF,gBAAAA,CAAgB,IAAA;AAAA,QACnB,sBAAsBR,mBAAAA,CAAoBX,GAAAA,CAAI,qBAAqB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC;AAAA,OAClF;AACA,MAAA,KAAA,MAAW,MAAA,IAAUkB,mBAAkB,IAAA,EAAM;AAC3C,QAAA,IAAIhB,YAAAA,CAAoB,QAAA,CAAS,MAAM,CAAA,EAAG;AACxC,UAAA;AAAA,QACF;AACA,QAAAmB,KAAAA,CAAK,MAAM,CAAA,GAAIH,iBAAAA,CAAiB,KAAK,MAAM,CAAA;AAAA,MAC7C;AACA,MAAA,KAAA,MAAW,UAAUG,KAAAA,EAAM;AACzB,QAAA,IAAI,WAAA,CAAoB,QAAA,CAAS,MAAM,CAAA,EAAG;AACxC,UAAA;AAAA,QACF;AACA,QAAAD,aAAAA,GAAepB,IAAIoB,aAAAA,IAAgB,CAAC,EAAE,IAAA,CAAKC,KAAAA,CAAK,MAAM,CAAA,IAAK,CAAC,CAAA;AAAA,MAC9D;AAEA,MAAA,QAAA,CAAS,SAAS,wDAAwD,CAAA;AAE1E,MAAA,MAAM,+BAAA,GAAkC,qBACpCV,mBAAAA,CAAoBX,GAAAA,CAAI,gCAAgC,QAAA,EAAU,EAAE,GAAA,CAAI,EAAA,IAAM,QAAQ,QAAQ,CAAA,CAAE,QAAQ,OAAA,CAAQ,QAAA,EAAUA,IAAI,SAAS,CAAC,IACxIkB,iBAAAA,CAAiB,YAAA;AAErB,MAAA,OAAO;AAAA,QACL,GAAGC,gBAAAA;AAAA,QACH,UAAA,EAAY,IAAA;AAAA,QACZ,aAAA,EAAe,iCAAA;AAAA,QACf,WAAA,EAAa,0BAAA;AAAA,QACb,eAAA,EAAiBA,kBAAiB,KAAA,EAAO,SAAA;AAAA,QACzC,sBAAsB,EAAC;AAAA,QACvB,IAAA,EAAAE,KAAAA;AAAA,QACA,cAAcV,mBAAAA,CAAoBX,GAAAA,CAAIoB,aAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,QAC/D,YAAA,EAAA,CAAe,kBAAA,GAAqB,CAAA,GAAIF,iBAAAA,CAAiB,gBAAgBC,gBAAAA,CAAgB,YAAA;AAAA,QACzF,YAAA,EAAc,+BAAA;AAAA,QACd,UAAA,EAAY;AAAA,UACV,GAAGA,gBAAAA,CAAgB,UAAA;AAAA,UACnB,SAAS,MAAA,CAAO,OAAA;AAAA,UAChB,WAAA,EAAa,0BAAA;AAAA,UACb,YAAA,EAAc,4BAAA;AAAA,UACd,WAAW,MAAA,CAAO,SAAA;AAAA,UAClB,cAAA,EAAgBA,iBAAgB,KAAA,EAAO,cAAA;AAAA,UACvC,kBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,SAAA,EAAW;AAAA,UACT,GAAGA,gBAAAA,CAAgB,SAAA;AAAA,UACnB,kBAAA,EAAoB,CAACA,gBAAAA,CAAgB,SAAA,GAAY;AAAA,YAC/C,aAAa,SAAA,CAAU,eAAA;AAAA,YACvB,cAAA,EAAgBA,iBAAgB,KAAA,EAAO,cAAA;AAAA,YACvC,MAAA,EAAQA,iBAAgB,KAAA,EAAO;AAAA,WACjC,GAAI,KAAA;AAAA,UACJ,kBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,iBAAA,EAAmB;AAAA,OACrB;AAAA,IACF;AAIA,IAAA,IAAI,kBAAA,EAAoB;AACtB,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,MAAMA,gBAAAA,GAAkB,MAAM,iBAAA,CAAkB,UAAA,CAAW;AAAA,QACzD,GAAG,MAAA;AAAA,QACH,OAAA,EAAS,4BAAA;AAAA,QACT,GAAA,EAAK,wBAAA;AAAA,QACL,oBAAA,EAAsB,6BAAA;AAAA,QACtB;AAAA,OACD,CAAA;AACD,MAAA,QAAA,CAAS,IAAI,8BAA8B,CAAA;AAC3C,MAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,sCAAA,EAAwCA,gBAAe,CAAA;AAE3G,MAAA,QAAA,CAAS,SAAS,qDAAqD,CAAA;AAEvE,MAAA,OAAO;AAAA,QACL,GAAGA,gBAAAA;AAAA,QACH,UAAA,EAAY;AAAA,UACV,GAAGA,gBAAAA,CAAgB,UAAA;AAAA,UACnB,WAAA,EAAa,0BAAA;AAAA,UACb,YAAA,EAAc,4BAAA;AAAA,UACd,kBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,SAAA,EAAW;AAAA,UACT,GAAGA,gBAAAA,CAAgB,SAAA;AAAA,UACnB,kBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,iBAAA,EAAmB;AAAA,OACrB;AAAA,IACF;AAIA,IAAA,MAAM,eAAA,GAAkB,eAAA,CAAgB,SAAA,CAAU,SAAS,CAAA;AAC3D,IAAA,MAAM,oBAAA,GAAuB,eAAA,CAAgB,OAAA,CAAQ,SAAS,CAAA;AAE9D,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,eAAA,GAAkB,MAAM,iBAAA,CAAkB,iBAAA,CAAkB;AAAA,MAChE,GAAG,MAAA;AAAA,MACH,GAAA,EAAK,wBAAA;AAAA,MACL,oBAAA,EAAsB,6BAAA;AAAA,MACtB,4BAAA,EAA8B,iCAAA;AAAA,MAC9B,eAAA;AAAA,MACA,oBAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,QAAA,CAAS,IAAI,qCAAqC,CAAA;AAClD,IAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,sCAAA,EAAwC,eAAe,CAAA;AAI3G,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,gBAAA,GAAmB,MAAM,KAAA,CAAM,KAAA,CAAM;AAAA,MACzC,GAAG,MAAA;AAAA,MACH,SAAA,EAAW,4BAAA;AAAA,MACX,MAAA,EAAQ,iBAAA;AAAA,MACR,SAAA,EAAWnB,GAAAA,CAAI,eAAA,CAAgB,YAAY,CAAA,CAAE,KAAA,CAAM,EAAA,IAAM,4BAAA,CAA6B,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAA,EAAGA,IAAI,SAAS;AAAA,KACzH,CAAA;AACD,IAAA,QAAA,CAAS,IAAI,gBAAgB,CAAA;AAC7B,IAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,wCAAA,EAA0C,gBAAgB,CAAA;AAE9G,IAAA,IAAI,YAAA,GAAeA,IAAI,CAAC,CAAA;AACxB,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,GAAG,eAAA,CAAgB;AAAA,KACrB;AACA,IAAA,KAAA,MAAW,MAAA,IAAU,iBAAiB,IAAA,EAAM;AAC1C,MAAA,IAAIE,YAAAA,CAAoB,QAAA,CAAS,MAAM,CAAA,EAAG;AACxC,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,MAAM,CAAA,GAAI,gBAAA,CAAiB,IAAA,CAAK,MAAM,CAAA;AAAA,IAC7C;AACA,IAAA,KAAA,MAAW,UAAU,IAAA,EAAM;AACzB,MAAA,IAAI,WAAA,CAAoB,QAAA,CAAS,MAAM,CAAA,EAAG;AACxC,QAAA;AAAA,MACF;AACA,MAAA,YAAA,GAAeF,GAAAA,CAAI,gBAAgB,CAAC,CAAA,CAAE,KAAK,IAAA,CAAK,MAAM,KAAK,CAAC,CAAA;AAAA,IAC9D;AAEA,IAAA,MAAM,gBAAA,GAAmB,gBAAgB,SAAA,CAAU,KAAA,CAAM,gBAAgB,SAAA,CAAU,KAAA,CAAM,SAAS,CAAC,CAAA;AACnG,IAAA,MAAM,wBAAA,GAA2B,iBAAiB,SAAA,CAAU,KAAA,CAAM,iBAAiB,SAAA,CAAU,KAAA,CAAM,SAAS,CAAC,CAAA;AAC7G,IAAA,eAAA,CAAgB,UAAU,KAAA,CAAM,eAAA,CAAgB,UAAU,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,GAAI;AAAA,MAC5E,GAAG,gBAAA;AAAA,MACH,OAAO,wBAAA,CAAyB;AAAA,KAClC;AAEA,IAAA,QAAA,CAAS,SAAS,yDAAyD,CAAA;AAE3E,IAAA,OAAO;AAAA,MACL,GAAG,eAAA;AAAA,MACH,IAAA;AAAA,MACA,cAAcW,mBAAAA,CAAoBX,GAAAA,CAAI,YAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,MAC/D,YAAA,EAAc,eAAA,CAAgB,YAAA,GAAe,gBAAA,CAAiB,YAAA;AAAA,MAC9D,cAAc,gBAAA,CAAiB,YAAA;AAAA,MAC/B,UAAA,EAAY;AAAA,QACV,GAAG,eAAA,CAAgB,UAAA;AAAA,QACnB,WAAA,EAAa,0BAAA;AAAA,QACb,YAAA,EAAc,4BAAA;AAAA,QACd,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,GAAG,eAAA,CAAgB,SAAA;AAAA,QACnB,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,iBAAA,EAAmB;AAAA,KACrB;AAAA,EACF;AAAA,EAEA,MAAsB,KAAK,MAAA,EAAa;AACtC,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,SAAA;AAAA,MACA,GAAG;AAAA,KACL,GAAI,MAAA;AAGJ,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAI,UAAU,kBAAA,EAAoB;AAChC,QAAA,OAAO,MAAA,CAAO,IAAA,CAAKY,QAAAA,CAAS,QAAA,EAAU,UAAU,kBAAkB,CAAA;AAAA,MACpE;AACA,MAAA,MAAM,KAAK,MAAM,MAAA,CAAO,IAAA,CAAKA,QAAAA,CAAS,MAAM,SAAS,CAAA;AACrD,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,OAAO,MAAA,CAAO,IAAA,CAAKA,QAAAA,CAAS,IAAA,EAAM,IAAI,CAAA;AAAA,EACxC;AAAA,EAEA,MAAsB,mBAAA,CAAoB,MAAA,EAAa,SAAA,EAAgB;AACrE,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA;AAAA,KACF,GAAI,SAAA;AAGJ,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAI,UAAU,kBAAA,EAAoB;AAChC,QAAA,OAAO,SAAA;AAAA,MACT;AACA,MAAA,OAAO,KAAA,CAAM,mBAAA,CAAoB,MAAA,EAAQ,SAAS,CAAA;AAAA,IACpD;AAEA,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEO,UAAU,MAAA,EAAyB;AACxC,IAAA,OAAOC,WAAwC,WAAA,EAAa;AAAA,MAC1D,iBAAiB,MAAA,CAAO;AAAA,KACzB,CAAA;AAAA,EACH;AACF,CAAA;AAEA,IAAO,qBAAA,GAAQ,IAAI,wBAAA,EAAyB;AC5WrC,IAAM,uBAAN,MAA2B;AAAA,EAChC,MAAa,MAAM,MAAA,EAAa;AAC9B,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,EAAA,GAAK,IAAIH,GAAAA,CAAIN,OAAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AACf,IAAA,MAAM,QAAA,GAAW,IAAID,QAAAA,CAAS,EAAE,IAAA,EAAM,sBAAA,EAAwB,QAAA,EAAU,UAAA,EAAY,OAAA,EAASC,OAAAA,CAAQ,KAAA,EAAO,CAAA;AAE5G,IAAA,IAAI,iBAAA,GAAoB,SAAA;AACxB,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAEA,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,GAAG,MAAA;AAAA,MACH,OAAA,EAAS,kBAAA;AAAA,MACT,kBAAkB,kBAAA,CAAmB,SAAA;AAAA,MACrC,SAAA,EAAW;AAAA,KACb;AACA,IAAA,MAAM,cAAA,GAAiB;AAAA,MACrB,GAAG,MAAA;AAAA,MACH,SAAA,EAAW,kBAAA;AAAA,MACX,aAAa,kBAAA,CAAmB,OAAA;AAAA,MAChC,QAAA,EAAU,YAAA;AAAA,MACV,OAAA,EAAS,KAAA;AAAA,MACT,QAAA,EAAU,4BAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,IAAI,cAAA;AACJ,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,MAAM,YAAA,GAAe;AAAA,QACnB,gBAAA,CAAgB,MAAM,cAAc,CAAA;AAAA,QACpC,aAAA,CAAa,MAAM,WAAW;AAAA,OAChC;AACA,MAAA,MAAM,SAAA,GAAY,MAAM,OAAA,CAAQ,GAAA,CAAI,YAAY,CAAA;AAChD,MAAA,cAAA,GAAiB,UAAU,CAAC,CAAA;AAC5B,MAAA,WAAA,GAAc,UAAU,CAAC,CAAA;AACzB,MAAA,QAAA,CAAS,IAAI,4CAA4C,CAAA;AAAA,IAC3D,CAAA,MAEK;AACH,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,cAAA,GAAiB,MAAM,gBAAA,CAAgB,KAAA,CAAM,cAAc,CAAA;AAC3D,MAAA,QAAA,CAAS,IAAI,uBAAuB,CAAA;AAEpC,MAAA,IAAI,eAAe,MAAA,EAAQ;AACzB,QAAA,OAAO,cAAA;AAAA,MACT;AAEA,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,WAAA,CAAY,SAAA,GAAY,eAAe,KAAA,CAAM,cAAA;AAAA,MAC/C;AAEA,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,WAAA,GAAc,MAAM,aAAA,CAAa,KAAA,CAAM,WAAW,CAAA;AAClD,MAAA,QAAA,CAAS,IAAI,oBAAoB,CAAA;AAAA,IACnC;AAEA,IAAA,GAAA,CAAI,4BAAA,EAA8B,UAAA,EAAY,oBAAA,EAAsB,cAAc,CAAA;AAClF,IAAA,GAAA,CAAI,4BAAA,EAA8B,UAAA,EAAY,iBAAA,EAAmB,WAAW,CAAA;AAE5E,IAAA,IAAI,YAAA,GAAeJ,IAAI,CAAC,CAAA;AACxB,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,GAAG,WAAA,CAAY;AAAA,KACjB;AACA,IAAA,KAAA,MAAW,MAAA,IAAU,eAAe,IAAA,EAAM;AACxC,MAAA,IAAI,WAAA,CAAoB,QAAA,CAAS,MAAM,CAAA,EAAG;AACxC,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,MAAM,CAAA,GAAI,cAAA,CAAe,IAAA,CAAK,MAAM,CAAA;AAAA,IAC3C;AACA,IAAA,KAAA,MAAW,UAAU,IAAA,EAAM;AACzB,MAAA,IAAIE,YAAAA,CAAiB,QAAA,CAAS,MAAM,CAAA,EAAG;AACrC,QAAA;AAAA,MACF;AACA,MAAA,YAAA,GAAeF,GAAAA,CAAI,gBAAgB,CAAC,CAAA,CAAE,KAAK,IAAA,CAAK,MAAM,KAAK,CAAC,CAAA;AAAA,IAC9D;AAEA,IAAA,QAAA,CAAS,SAAS,4BAA4B,CAAA;AAE9C,IAAA,OAAO;AAAA,MACL,GAAG,WAAA;AAAA,MACH,IAAA;AAAA,MACA,cAAcW,mBAAAA,CAAoBX,GAAAA,CAAI,YAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,MAC/D,YAAA,EAAc,WAAA,CAAY,YAAA,GAAe,cAAA,CAAe,YAAA;AAAA,MACxD,cAAc,cAAA,CAAe,YAAA;AAAA,MAC7B,aAAa,cAAA,CAAe,WAAA;AAAA,MAC5B,cAAc,cAAA,CAAe,YAAA;AAAA,MAC7B,UAAA,EAAY;AAAA,QACV,GAAG,WAAA,CAAY,UAAA;AAAA,QACf,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,WAAA,EAAa,kBAAA;AAAA,QACb,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,cAAA,EAAgB,eAAe,KAAA,CAAM;AAAA,OACvC;AAAA,MACA,iBAAA,EAAmB;AAAA,KACrB;AAAA,EACF;AAAA,EAEA,MAAa,mBAAA,CAAoB,MAAA,EAAa,SAAA,EAAgB;AAG5D,IAAA,OAAO,aAAA,CAAa,mBAAA,CAAoB,MAAA,EAAQ,SAAS,CAAA;AAAA,EAC3D;AAAA,EAEA,MAAa,KAAK,MAAA,EAAa;AAC7B,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,GAAG;AAAA,KACL,GAAI,MAAA;AAEJ,IAAA,OAAO,MAAA,CAAO,IAAA,CAAKY,QAAAA,CAAS,IAAA,EAAM,IAAI,CAAA;AAAA,EACxC;AAAA,EAEO,UAAU,MAAA,EAAyB;AACxC,IAAA,OAAOC,WAAwC,WAAA,EAAa;AAAA,MAC1D,iBAAiB,MAAA,CAAO;AAAA,KACzB,CAAA;AAAA,EACH;AACF,CAAA;AAEA,IAAOS,oBAAAA,GAAQ,IAAI,oBAAA,EAAqB;AClIjC,IAAM,uBAAN,MAA2B;AAAA,EAChC,MAAa,MAAM,MAAA,EAAa;AAC9B,IAAA,MAAM;AAAA,MACJ,SAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,QAAA,GAAW,IAAInB,QAAAA,CAAS,EAAE,IAAA,EAAM,eAAA,EAAiB,QAAA,EAAU,UAAA,EAAY,OAAA,EAASC,OAAAA,CAAQ,KAAA,EAAO,CAAA;AAErG,IAAA,IAAI,iBAAA,GAAoB,SAAA;AACxB,IAAA,IAAI,2BAAA,GAA8B,UAAA;AAClC,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AACA,IAAA,IAAI,CAAC,2BAAA,EAA6B;AAChC,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AAQA,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,GAAG,MAAA;AAAA,MACH,WAAWJ,GAAAA,CAAI,MAAA,CAAO,SAAA,IAAa,CAAC,EAAE,GAAA,CAAI,EAAA,IAAM,SAAA,CAAU,QAAQ,EAAE,KAAA,CAAM,EAAA,IAAM,mBAAmB,QAAQ,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,MACtH,SAAA,EAAW,kBAAA;AAAA,MACX,aAAa,kBAAA,CAAmB,SAAA;AAAA,MAChC,QAAA,EAAU,4BAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,WAAA,GAAc,MAAM,aAAA,CAAa,KAAA,CAAM,WAAW,CAAA;AACxD,IAAA,QAAA,CAAS,IAAI,oBAAoB,CAAA;AAEjC,IAAA,MAAM,qBAAA,GAAwB,GAAA;AAC9B,IAAA,WAAA,CAAY,IAAA,CAAK,YAAA,GAAeW,mBAAAA,CAAoBX,GAAAA,CAAI,YAAY,IAAA,EAAM,YAAA,IAAgB,CAAC,CAAA,CAAE,MAAM,CAAA,GAAI,qBAAqB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AACzI,IAAA,WAAA,CAAY,KAAK,SAAA,GAAYW,mBAAAA,CAAoBX,GAAAA,CAAI,WAAA,CAAY,MAAM,SAAA,IAAa,CAAC,CAAA,CAAE,KAAA,CAAM,IAAI,qBAAqB,CAAA,CAAE,QAAQ,SAAA,CAAU,WAAA,CAAY,QAAQ,CAAC,CAAA;AAE/J,IAAA,MAAM,kBAAA,GAAqB,YAAY,IAAA,CAAK,YAAA;AAE5C,IAAA,MAAM,qBAAA,GAAwBA,GAAAA,CAAI,kBAAA,IAAsB,CAAC,EAAE,GAAA,CAAIe,QAAAA,CAAS,MAAA,EAAQ,kBAAA,CAAmB,MAAM,CAAA,IAAK,CAAC,CAAA,CAAE,OAAA,CAAQ,mBAAmB,QAAQ,CAAA;AAEpJ,IAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,MAAA,OAAO,WAAA;AAAA,IACT;AAKA,IAAA,MAAM,gBAAA,GAAmBf,GAAAA,CAAI,qBAAA,IAAyB,CAAC,EACpD,GAAA,CAAIA,GAAAA,CAAI,qBAAA,IAAyB,CAAC,CAAA,CAAE,IAAA,CAAKA,GAAAA,CAAI,MAAA,CAAO,SAAS,CAAA,CAAE,GAAA,CAAI,EAAA,IAAM,SAAA,CAAU,QAAQ,CAAA,CAAE,OAAA,CAAQ,SAAA,CAAU,QAAQ,CAAC,CAAC,CAAA,CACzH,KAAA,CAAM,GAAK,CAAA,CACX,OAAA,CAAQ,CAAA,EAAGA,IAAI,OAAO,CAAA;AAMzB,IAAA,IAAIA,GAAAA,CAAI,gBAAgB,CAAA,CAAE,EAAA,CAAG,GAAK,CAAA,EAAG;AACnC,MAAA,OAAO,EAAE,MAAA,EAAQ,CAAA,4BAAA,EAA+B,qBAAqB,CAAA,CAAA,EAAG;AAAA,IAC1E;AAMA,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,cAAA,GAAiB,MAAM,gBAAA,CAAgB,KAAA,CAAM;AAAA,MACjD,GAAG,MAAA;AAAA,MACH,OAAA,EAAS,kBAAA;AAAA,MACT,kBAAkB,kBAAA,CAAmB,OAAA;AAAA,MACrC,QAAA,EAAU,cAAA;AAAA,MACV,OAAA,EAAS,IAAA;AAAA,MACT,SAAA,EAAW,2BAAA;AAAA,MACX,OAAA,EAAS;AAAA,QACP;AAAA,UACE,SAAA,EAAW,aAAA;AAAA;AAAA,UAEX,KAAK,CAAC;AAAA;AAAA;AACR;AACF,KACD,CAAA;AACD,IAAA,QAAA,CAAS,IAAI,uBAAuB,CAAA;AAEpC,IAAA,IAAI,YAAA,GAAeA,IAAI,CAAC,CAAA;AACxB,IAAA,IAAI,qBAAA,GAAwBA,IAAI,cAAA,CAAe,IAAA,EAAM,wBAAwB,CAAC,CAAA,CAAE,MAAM,kBAAkB,CAAA;AACxG,IAAA,IAAIA,GAAAA,CAAI,qBAAqB,CAAA,CAAE,EAAA,CAAG,CAAC,CAAA,EAAG;AACpC,MAAA,qBAAA,GAAwBA,IAAI,CAAC,CAAA;AAAA,IAC/B;AACA,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,GAAG,cAAA,CAAe,IAAA;AAAA,MAClB,sBAAsBW,mBAAAA,CAAoBX,GAAAA,CAAI,qBAAqB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC;AAAA,KAClF;AACA,IAAA,KAAA,MAAW,MAAA,IAAU,YAAY,IAAA,EAAM;AACrC,MAAA,IAAIE,YAAAA,CAAiB,QAAA,CAAS,MAAM,CAAA,EAAG;AACrC,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,MAAM,CAAA,GAAI,WAAA,CAAY,IAAA,CAAK,MAAM,CAAA;AAAA,IACxC;AACA,IAAA,KAAA,MAAW,UAAU,IAAA,EAAM;AACzB,MAAA,IAAI,WAAA,CAAoB,QAAA,CAAS,MAAM,CAAA,EAAG;AACxC,QAAA;AAAA,MACF;AACA,MAAA,YAAA,GAAeF,GAAAA,CAAI,gBAAgB,CAAC,CAAA,CAAE,KAAK,IAAA,CAAK,MAAM,KAAK,CAAC,CAAA;AAAA,IAC9D;AAEA,IAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,SAAA,EAAW,KAAA,GAAQ,CAAC,CAAA;AACvD,IAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,SAAA,EAAW,KAAA,GAAQ,CAAC,CAAA;AAExD,IAAA,QAAA,CAAS,IAAI,4BAA4B,CAAA;AAEzC,IAAA,OAAO;AAAA,MACL,GAAG,cAAA;AAAA,MACH,UAAA,EAAY,IAAA;AAAA,MACZ,aAAA,EAAe,+BAAA;AAAA,MACf,WAAA,EAAa,kBAAA;AAAA,MACb,eAAA,EAAiB,gBAAgB,KAAA,EAAO,SAAA;AAAA,MACxC,oBAAA,EAAsB;AAAA,QACpB,WAAW,cAAA,EAAgB,QAAA;AAAA,QAC3B,aAAa,cAAA,EAAgB,UAAA;AAAA,QAC7B,SAAS,cAAA,EAAgB,MAAA;AAAA,QACzB,eAAe,cAAA,EAAgB,YAAA;AAAA,QAC/B,aAAA,EAAe,cAAA,EAAgB,WAAA,EAAa,QAAA,EAAS;AAAA,QACrD,SAAS,cAAA,EAAgB,MAAA;AAAA,QACzB,IAAI,cAAA,EAAgB,EAAA;AAAA,QACpB,UAAA,EAAY,eAAA,EAAiB,SAAA,EAAW,QAAA;AAAS,OACnD;AAAA,MACA,IAAA;AAAA,MACA,cAAcW,mBAAAA,CAAoBX,GAAAA,CAAI,YAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,MAC/D,YAAA,EAAc,WAAA,CAAY,YAAA,GAAe,cAAA,CAAe,YAAA;AAAA,MACxD,cAAc,WAAA,CAAY,YAAA;AAAA,MAC1B,UAAA,EAAY;AAAA,QACV,GAAG,cAAA,CAAe,UAAA;AAAA,QAClB,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,WAAA,EAAa,kBAAA;AAAA,QACb,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,cAAA,EAAgB,YAAY,UAAA,EAAY,cAAA;AAAA,QACxC,mBAAA,EAAqB,YAAY,UAAA,EAAY;AAAA,OAC/C;AAAA,MACA,cAAA;AAAA,MACA,eAAA;AAAA,MACA,iBAAA,EAAmB;AAAA,KACrB;AAAA,EACF;AAAA,EAEA,MAAa,mBAAA,CAAoB,MAAA,EAAa,SAAA,EAAgB;AAG5D,IAAA,OAAO,gBAAA,CAAgB,mBAAA,CAAoB,MAAA,EAAQ,SAAS,CAAA;AAAA,EAC9D;AAAA,EAEA,MAAa,KAAK,MAAA,EAAa;AAC7B,IAAA,OAAO,gBAAA,CAAgB,KAAK,MAAM,CAAA;AAAA,EACpC;AAAA,EAEO,UAAU,MAAA,EAAyB;AACxC,IAAA,OAAOa,WAAwC,WAAA,EAAa;AAAA,MAC1D,iBAAiB,MAAA,CAAO;AAAA,KACzB,CAAA;AAAA,EACH;AACF,CAAA;AAEA,IAAOU,sBAAAA,GAAQ,IAAI,oBAAA,EAAqB;;;AC/KjC,IAAM,YAAA,GAAuC;AAAA,EAClD,UAAA,EAAY,UAAA;AAAA,EACZ,UAAA,EAAY,UAAA;AAAA,EACZ,WAAA,EAAa,KAAA;AAAA,EACb,MAAA,EAAQ;AACV,CAAA;AAEO,IAAM,cAAA,GAAoE;AAAA,EAC/E,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,4CAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,4CAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,4CAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,4CAAA;AAAA,IACN,MAAA,EAAQ;AAAA;AAEZ,CAAA;ACjBO,IAAM,gBAAN,MAAoB;AAAA,EACzB,MAAa,MAAM,MAAA,EAAa;AAC9B,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,aAAa,CAAA,cAAA,EAAiB,SAAA,EAAW,SAAS,CAAA,EAAA,EAAK,SAAS,SAAS,CAAA,CAAA;AAC/E,IAAA,MAAM,QAAA,GAAW,IAAIpB,QAAAA,CAAS,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,YAAA,EAAc,OAAA,EAASC,OAAAA,CAAQ,KAAA,EAAO,CAAA;AAElG,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,SAAA,KAAc,OAAA,CAAQ,SAAA;AAE/C,IAAA,IAAI,QAAA,GAAW,aAAA;AACf,IAAA,MAAM,WAAA,GAAmB;AAAA,MACvB,OAAA,EAAS,CAAA;AAAA,MACT,YAAA,EAAc,QAAA;AAAA,MACd,UAAA,EAAY,SAAA;AAAA,MACZ,mBAAA,EAAqB,SAAA;AAAA,MACrB,SAAA,EAAW,QAAA;AAAA,MACX,SAAA,EAAW,YAAA,CAAa,SAAA,CAAU,SAAS,CAAA;AAAA,MAC3C,SAAA,EAAW,YAAA,CAAa,OAAA,CAAQ,SAAS,CAAA;AAAA,MACzC,UAAU,SAAA,CAAU,eAAA;AAAA,MACpB,WAAW,OAAA,CAAQ,eAAA;AAAA,MACnB,UAAA,EAAY,SAAA;AAAA,MACZ,WAAA,EAAa,EAAA;AAAA;AAAA,MACb,cAAA,EAAgB,GAAA;AAAA;AAAA,MAChB,QAAA,EAAU,iBAAA;AAAA,MACV,cAAA,EAAgB;AAAA,KAClB;AAEA,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,QAAA,GAAW,mBAAA;AAAA,IACb;AAEA,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,QAAA,GAAW,UAAU,QAAQ,CAAA,CAAA;AAAA,IAC/B;AAEA,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,WAAgB,MAAMS,UAAAA,CAAW,CAAA,GAAA,EAAM,QAAQ,IAAI,WAAW,CAAA;AACpE,IAAA,QAAA,CAAS,GAAA,CAAI,4BAA4B,QAAQ,CAAA;AAEjD,IAAA,IAAI,CAAC,UAAU,OAAA,EAAS;AACtB,MAAA,IAAI,YAAA,GAAe,UAAU,OAAA,IAAW,qBAAA;AAExC,MAAA,IAAI,YAAA,CAAa,QAAA,CAAS,oDAAoD,CAAA,EAAG;AAC/E,QAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,KAAA,CAAM,WAAW,CAAA;AAC5C,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAM,MAAA,GAAS,MAAM,CAAC,CAAA;AACtB,UAAA,MAAM,YAAYb,GAAAA,CAAI,MAAM,EAAE,GAAA,CAAI,EAAA,IAAM,UAAU,QAAQ,CAAA;AAC1D,UAAA,YAAA,GAAe,CAAA,4BAAA,EAA+B,aAAa,SAAA,EAAW,SAAA,CAAU,UAAU,IAAI,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,MAAM,CAAA,CAAA;AAAA,QACrH;AAAA,MACF;AACA,MAAA,IAAI,YAAA,CAAa,QAAA,CAAS,qDAAqD,CAAA,EAAG;AAChF,QAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,KAAA,CAAM,WAAW,CAAA;AAC5C,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAM,MAAA,GAAS,MAAM,CAAC,CAAA;AACtB,UAAA,MAAM,YAAYA,GAAAA,CAAI,MAAM,EAAE,GAAA,CAAI,EAAA,IAAM,QAAQ,QAAQ,CAAA;AACxD,UAAA,YAAA,GAAe,CAAA,gCAAA,EAAmC,aAAa,SAAA,EAAW,OAAA,CAAQ,UAAU,IAAI,CAAC,CAAA,CAAA,EAAI,OAAA,CAAQ,MAAM,CAAA,gBAAA,CAAA;AAAA,QACrH;AAAA,MACF;AACA,MAAA,MAAM,IAAI,MAAM,YAAY,CAAA;AAAA,IAC9B;AAEA,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,KAAA,CAAMD,QAAQ,MAAA,EAAQ;AAAA,MAChD,GAAG,MAAA;AAAA,MACH,GAAG,WAAA;AAAA,MACH,aAAA,EAAe,QAAA;AAAA,MACf,mBAAA,EAAqB,MAAA,GAAS,cAAA,CAAe,SAAA,CAAU,SAAS,EAAE,IAAA,GAAO,cAAA,CAAe,SAAA,CAAU,SAAS,CAAA,CAAE;AAAA,KAC9G,CAAA;AACD,IAAA,QAAA,CAAS,IAAI,oBAAoB,CAAA;AAEjC,IAAA,MAAA,CAAO,iBAAA,GAAoB,MAAA;AAE3B,IAAA,QAAA,CAAS,SAAS,qBAAqB,CAAA;AAEvC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,mBAAA,CAAoB,MAAA,EAAa,SAAA,EAAgB;AAC5D,IAAA,MAAM;AAAA,MACJ,SAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,EAAA,GAAK,IAAIW,GAAAA,CAAIN,OAAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AAEf,IAAA,IAAI,CAAC,SAAA,CAAU,SAAA,EAAW,SAAA,EAAW;AACnC,MAAA,OAAO,SAAA;AAAA,IACT;AAEA,IAAA,MAAM,SAAc,EAAE,IAAA,EAAM,EAAC,EAAG,GAAG,SAAA,EAAU;AAE7C,IAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,mBAAA,CAAoB;AAAA,MAC3C,GAAA,EAAK,KAAA;AAAA;AAAA,MAEL,GAAG,SAAA,CAAU,SAAA;AAAA,MACb,SAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAA,CAAO,IAAA,CAAK,iBAAiB,GAAA,CAAI,oBAAA;AACjC,IAAA,MAAA,CAAO,oBAAoB,GAAA,CAAI,iBAAA;AAC/B,IAAA,MAAA,CAAO,yBAAyB,GAAA,CAAI,iBAAA;AACpC,IAAA,MAAA,CAAO,uBAAuB,GAAA,CAAI,oBAAA;AAElC,IAAA,IAAI,SAAA,CAAU,cAAc,KAAA,EAAO;AACjC,MAAA,GAAA,CAAI,qCAAqC,WAAA,EAAa,kBAAA,EAAoB,MAAA,CAAO,SAAA,CAAU,UAAU,QAAQ,CAAA;AAC7G,MAAA,MAAA,CAAO,SAAA,CAAU,SAAA,CAAU,QAAA,GAAW,GAAA,CAAI,sBAAA;AAC1C,MAAA,GAAA,CAAI,qCAAqC,WAAA,EAAa,sBAAA,EAAwB,MAAA,CAAO,SAAA,CAAU,UAAU,QAAQ,CAAA;AAAA,IACnH;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,KAAK,MAAA,EAAa;AAC7B,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,MAAA,CAAO,eAAA,CAAgB;AAAA,MACrD,IAAI,SAAA,CAAU,MAAA;AAAA,MACd,MAAM,SAAA,CAAU,QAAA;AAAA,MAChB,OAAO,SAAA,CAAU,KAAA;AAAA,MACjB,UAAU,SAAA,CAAU;AAAA,KACrB,CAAA;AAGD,IAAA,MAAM,WAAW,IAAA,EAAK;AAEtB,IAAA,OAAO,UAAA,CAAW,IAAA;AAAA,EACpB;AAAA,EAEO,UAAU,MAAA,EAAyB;AACxC,IAAA,OAAOS,WAAwC,WAAA,EAAa;AAAA,MAC1D,iBAAiB,MAAA,CAAO;AAAA,KACzB,CAAA;AAAA,EACH;AACF,CAAA;AAEA,IAAO,cAAA,GAAQ,IAAI,aAAA,EAAc;ACvJ1B,IAAM,UAAA,GAAmC;AAAA,EAC9C,CAACd,OAAAA,CAAQ,QAAQ,GAAG,gBAAA;AAAA,EACpB,CAACA,OAAAA,CAAQ,KAAK,GAAG,aAAA;AAAA,EACjB,CAACA,OAAAA,CAAQ,IAAI,GAAG,YAAA;AAAA,EAChB,CAACA,OAAAA,CAAQ,QAAQ,GAAG,gBAAA;AAAA,EACpB,CAACA,OAAAA,CAAQ,gBAAgB,GAAG,mBAAA;AAAA,EAC5B,CAACA,OAAAA,CAAQ,gBAAgB,GAAG,qBAAA;AAAA,EAC5B,CAACA,OAAAA,CAAQ,aAAa,GAAGuB,oBAAAA;AAAA,EACzB,CAACvB,OAAAA,CAAQ,aAAa,GAAGwB,sBAAAA;AAAA,EACzB,CAACxB,OAAAA,CAAQ,MAAM,GAAG;AACpB;ACwBA,IAAM,cAAA,GAAiB,CACrB,WAAA,KAkB+C;AAC/C,EAAA,OAAOE,WAAAA,CAAY,iBAAiB,WAAW,CAAA;AACjD,CAAA;AAMO,IAAM,YAAN,MAAgB;AAAA,EACrB,aAAoB,YAAY,MAAA,EAAkG;AAChI,IAAA,MAAM,UAAwE,EAAC;AAE/E,IAAA,IAAI,EAAE,cAAA,GAAiB,GAAA,EAAK,gBAAA,EAAiB,GAAI,MAAA;AACjD,IAAA,IAAID,GAAAA,CAAI,cAAc,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG;AAC9B,MAAA,cAAA,GAAiB,GAAA;AAAA,IACnB;AAEA,IAAA,IACE,CAAC,MAAA,CAAO,SAAA,IACL,CAAC,MAAA,CAAO,SAAA,CAAU,eAAA,IAClB,CAAC,MAAA,CAAO,OAAA,IACR,CAAC,MAAA,CAAO,OAAA,CAAQ,eAAA,IAChB,CAAC,MAAA,CAAO,QAAA,IACR,CAAC,MAAA,CAAO,SAAA,IACR,CAAC,MAAA,CAAO,SAAA,IACRA,GAAAA,CAAI,MAAA,CAAO,SAAS,CAAA,CAAE,GAAA,CAAI,cAAc,CAAA,EAC3C;AACA,MAAA,MAAM,IAAI,MAAM,oBAAoB,CAAA;AAAA,IACtC;AAEA,IAAA,MAAM,iBAAA,GAAoB,CAAC,OAAA,KAAqB;AAC9C,MAAA,MAAM,OAAA,GAAe;AAAA,QACnB,KAAK,MAAA,CAAO,GAAA;AAAA,QACZ,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,QAAA,EAAU,OAAO,QAAA,IAAY,EAAA;AAAA,QAC7B,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,mBAAmB,MAAA,CAAO,iBAAA;AAAA,QAC1B,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,YAAY,MAAA,CAAO;AAAA,OACrB;AAEA,MAAA,IAAK;AAAA,QACHD,OAAAA,CAAQ,QAAA;AAAA,QACRA,OAAAA,CAAQ,aAAA;AAAA,QACRA,OAAAA,CAAQ,aAAA;AAAA,QACRA,OAAAA,CAAQ,gBAAA;AAAA,QACRA,OAAAA,CAAQ;AAAA,OACV,CAAgB,QAAA,CAAS,OAAO,CAAA,EAAG;AACjC,QAAA,OAAA,CAAQ,iBAAA,GAAoB,OAAO,iBAAA,GAAoB,GAAA;AACvD,QAAA,OAAA,CAAQ,WAAA,GAAc,OAAO,SAAA,CAAU,OAAA;AACvC,QAAA,OAAA,CAAQ,gBAAA,GAAmB,OAAO,OAAA,CAAQ,OAAA;AAC1C,QAAA,OAAA,CAAQ,UAAA,GAAa,cAAA;AACrB,QAAA,OAAA,CAAQ,OAAA,GAAU,MAAA,CAAO,cAAA,EAAgB,OAAA,IAAW,MAAA,CAAO,OAAA;AAC3D,QAAA,OAAA,CAAQ,QAAA,GAAW,OAAO,cAAA,EAAgB,QAAA;AAC1C,QAAA,OAAA,CAAQ,OAAA,GAAU,OAAO,cAAA,EAAgB,OAAA;AAAA,MAC3C;AACA,MAAA,IAAK;AAAA,QACHA,OAAAA,CAAQ,KAAA;AAAA,QACRA,OAAAA,CAAQ,IAAA;AAAA,QACRA,OAAAA,CAAQ,aAAA;AAAA,QACRA,OAAAA,CAAQ;AAAA,OACV,CAAgB,QAAA,CAAS,OAAO,CAAA,EAAG;AACjC,QAAA,OAAA,CAAQ,WAAA,GAAc,OAAO,SAAA,CAAU,SAAA;AACvC,QAAA,OAAA,CAAQ,gBAAA,GAAmB,OAAO,OAAA,CAAQ,SAAA;AAAA,MAC5C;AACA,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,CAAA,KAAA,KAAS,KAAA,CAAM,eAAA,CAAgB,WAAA,EAAY,KAAM,MAAA,CAAO,SAAA,CAAU,eAAA,CAAgB,WAAA,EAAa,CAAA;AAC7H,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,CAAA,KAAA,KAAS,KAAA,CAAM,eAAA,CAAgB,WAAA,EAAY,KAAM,MAAA,CAAO,OAAA,CAAQ,eAAA,CAAgB,WAAA,EAAa,CAAA;AAEzH,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,OAAA,EAAS;AAC1B,MAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,IAC5C;AAEA,IAAA,MAAM,aAAa,CAAC,MAAA,EAAQ,YAAO,CAAA,CAAE,QAAA,CAAS,UAAU,MAAM,CAAA;AAC9D,IAAA,MAAM,WAAW,CAAC,MAAA,EAAQ,YAAO,CAAA,CAAE,QAAA,CAAS,QAAQ,MAAM,CAAA;AAE1D,IAAA,MAAM,gBAAqB,EAAC;AAC5B,IAAA,MAAM,gBAAA,GAAmB,CAAC,QAAA,KAAsB;AAC9C,MAAA,MAAM,aAAA,GAAgB,cAAA,CAAe,QAAA,EAAU,gBAAgB,CAAA;AAC/D,MAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,QAAA;AAAA,MACF;AACA,MAAA,MAAM,WAAA,GAAc,kBAAkB,QAAQ,CAAA;AAC9C,MAAA,aAAA,CAAc,IAAA,CAAK;AAAA,QACjB,OAAA,EAAS,QAAA;AAAA,QACT,OAAO,MAAM;AACX,UAAA,OAAO,UAAA,CAAW,QAAQ,CAAA,CAAE,KAAA,CAAM,WAAW,CAAA;AAAA,QAC/C;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,KAAA,MAAW,WAAA,IAAe,MAAA,CAAO,MAAA,CAAOA,OAAO,CAAA,EAAG;AAChD,MAAA,IACE,SAAA,CAAU,SAAS,QAAA,CAAS,WAAW,KACpC,OAAA,CAAQ,QAAA,CAAS,QAAA,CAAS,WAAW,CAAA,EACxC;AACA,QAAA,gBAAA,CAAiB,WAAW,CAAA;AAAA,MAC9B;AAAA,IACF;AAEA,IAAA,IACE,SAAA,CAAU,QAAA,CAAS,QAAA,CAASA,OAAAA,CAAQ,KAAK,CAAA,IACtC,OAAA,CAAQ,QAAA,CAAS,QAAA,CAASA,OAAAA,CAAQ,QAAQ,CAAA,IAC1C,SAAA,CAAU,cAAc,UAAA,EAC3B;AACA,MAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,QAAA,IAAI,OAAA,CAAQ,cAAc,UAAA,EAAY;AACpC,UAAA,gBAAA,CAAiBA,QAAQ,aAAa,CAAA;AAAA,QACxC;AAAA,MACF,CAAA,MAAO;AACL,QAAA,gBAAA,CAAiBA,QAAQ,aAAa,CAAA;AAAA,MACxC;AAAA,IACF;AAEA,IAAA,IACE,SAAA,CAAU,QAAA,CAAS,QAAA,CAASA,OAAAA,CAAQ,QAAQ,CAAA,IACzC,OAAA,CAAQ,QAAA,CAAS,QAAA,CAASA,OAAAA,CAAQ,KAAK,CAAA,IACvC,OAAA,CAAQ,cAAc,UAAA,EACzB;AACA,MAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,QAAA,IAAI,SAAA,CAAU,cAAc,UAAA,EAAY;AACtC,UAAA,gBAAA,CAAiBA,QAAQ,aAAa,CAAA;AAAA,QACxC;AAAA,MACF,CAAA,MAAO;AACL,QAAA,gBAAA,CAAiBA,QAAQ,aAAa,CAAA;AAAA,MACxC;AAAA,IACF;AAEA,IAAA,IACE,SAAA,CAAU,QAAA,CAAS,QAAA,CAASA,OAAAA,CAAQ,QAAQ,CAAA,IACzC,OAAA,CAAQ,QAAA,CAAS,QAAA,CAASA,OAAAA,CAAQ,QAAQ,CAAA,EAC7C;AACA,MAAA,gBAAA,CAAiBA,QAAQ,gBAAgB,CAAA;AAAA,IAC3C;AAEA,IAAA,IACE,SAAA,CAAU,QAAA,CAAS,QAAA,CAASA,OAAAA,CAAQ,QAAQ,CAAA,IACzC,OAAA,CAAQ,QAAA,CAAS,QAAA,CAASA,OAAAA,CAAQ,QAAQ,CAAA,EAC7C;AACA,MAAA,gBAAA,CAAiBA,QAAQ,gBAAgB,CAAA;AAAA,IAC3C;AAEA,IAAA,IAAI,OAAO,aAAA,EAAe;AACxB,MAAA,MAAM,YAAA,GAAe,cAAc,IAAA,CAAK,CAAC,YAAiB,OAAA,CAAQ,OAAA,KAAY,OAAO,aAAa,CAAA;AAClG,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,IAAI;AACF,UAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,KAAA,EAAM;AAC1C,UAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,YACX,aAAa,YAAA,CAAa,OAAA;AAAA,YAC1B,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,QACH,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,IAAA,GAAO,iBAAiB,KAAA,EAAO,EAAE,SAAS,YAAA,CAAa,OAAA,EAAS,WAAW,CAAA;AACjF,UAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,QACnB;AAAA,MACF;AACA,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,MAAM,WAA4B,EAAC;AACnC,IAAA,KAAA,MAAW,gBAAgB,aAAA,EAAe;AACxC,MAAA,MAAM,WAAW,YAAY;AAC3B,QAAA,IAAI;AACF,UAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,KAAA,EAAM;AAC1C,UAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,YACX,aAAa,YAAA,CAAa,OAAA;AAAA,YAC1B,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,QACH,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,GAAA,CAAI,qBAAA,EAAuB,YAAA,CAAa,OAAA,EAAS,KAAK,CAAA;AAC9D,UAAA,MAAM,IAAA,GAAO,iBAAiB,KAAA,EAAO,EAAE,SAAS,YAAA,CAAa,OAAA,EAAS,WAAW,CAAA;AACjF,UAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,QACnB;AAAA,MACF,CAAA,GAAG;AACH,MAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,IACvB;AACA,IAAA,MAAM,OAAA,CAAQ,WAAW,QAAQ,CAAA;AACjC,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,aAAoB,IAAA,CAClB,WAAA,EACA,MAAA,EAaiB;AACjB,IAAA,MAAM,EAAA,GAAK,IAAIW,GAAAA,CAAIN,OAAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AAEf,IAAA,MAAM,OAAA,GAAU,WAAW,WAAW,CAAA;AACtC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,WAAW,CAAA,CAAE,CAAA;AAAA,IACxD;AAEA,IAAA,IAAI,CAAC,QAAQ,IAAA,EAAM;AACjB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,WAAW,CAAA,6BAAA,CAA+B,CAAA;AAAA,IACvE;AAEA,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,eAAA,EAAgB,GAAI,MAAA;AAE3C,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AAEA,IAAA,IAAI,MAAM,UAAA,EAAY;AACpB,MAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,QAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,MAChD;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAkB;AAAA,MACtB;AAAA,KACF;AAEA,IAAA,MAAM,EAAE,aAAA,EAAe,iBAAA,EAAmB,0BAAA,KAA+B,aAAA,CAAc;AAAA,MACrF,SAAA,EAAW,KAAA;AAAA,MACX,WAAA,EAAa,EAAE,gBAAA,EAAkB,WAAA;AAAY,KAC9C,CAAA;AACD,IAAA,MAAM,SAAA,GAAY,MAAM,UAAA,CAAW,SAAA;AACnC,IAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,OAAA;AACjC,IAAA,MAAM,cAAA,GAAiB,MAAM,KAAA,EAAO,cAAA;AACpC,IAAA,MAAM,YAAY,KAAA,CAAM,SAAA;AAExB,IAAA,IAAI,UAAA,GAAa,MAAM,UAAA,EAAY,SAAA;AACnC,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,UAAA,GAAa,MAAM,KAAA,EAAO,WAAA;AAAA,IAC5B;AAEA,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,UAAA,CAAW,SAAA,GAAY,SAAA;AACvB,MAAA,UAAA,CAAW,SAAA,GAAY,SAAA;AACvB,MAAA,UAAA,CAAW,cAAA,GAAiB,cAAA;AAC5B,MAAA,UAAA,CAAW,SAAA,GAAY,UAAA;AAAA,IACzB,CAAA,MAAO;AACL,MAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,QAAA,UAAA,CAAW,GAAG,CAAA,GAAI,SAAA,CAAU,GAAG,CAAA;AAAA,MACjC;AAAA,IACF;AAEA,IAAA,GAAA,CAAI,gBAAA,EAAkB,UAAA,EAAY,gBAAA,EAAkB,UAAU,CAAA;AAE9D,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAE5C,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAkB;AAAA,QACtB,OAAA,EAAS,eAAe,WAAW,CAAA;AAAA,QACnC,OAAA,EAAS,MAAM,UAAA,EAAY,QAAA;AAAA,QAC3B,QAAQ,aAAA,GAAgB,KAAA,CAAM,MAAM,iBAAA,GAAoBJ,GAAAA,CAAI,cAAc,CAAC,CAAA,CAAE,IAAI,EAAA,KAAO,SAAA,EAAW,YAAY,CAAA,CAAE,CAAA,CAAE,QAAQ,SAAA,EAAW,QAAA,IAAY,GAAG,CAAC,CAAA;AAAA,QACtJ,YAAY,KAAA,CAAM,YAAA;AAAA,QAClB,eAAA,EAAiB,iBAAA,GAAoB,KAAA,CAAM,KAAA,EAAO,cAAA,GAAiB,EAAA;AAAA,QACnE,eAAA,EAAiB,MAAM,UAAA,EAAY,SAAA;AAAA,QACnC,YAAY,SAAA,CAAU,UAAA;AAAA,QACtB,QAAQ,UAAA,CAAW,IAAA,CAAK,UAAU,MAAM,CAAA,GAAI,SAAS,SAAA,CAAU,MAAA;AAAA,QAC/D,UAAU,OAAA,CAAQ,UAAA;AAAA,QAClB,WAAW,UAAA,CAAW,IAAA,CAAK,QAAQ,MAAM,CAAA,GAAI,SAAS,OAAA,CAAQ,MAAA;AAAA,QAC9D,OAAA,EAAS;AAAA,OACX;AAEA,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,IAAK,CAACD,OAAAA,CAAQ,aAAa,CAAA,CAAgB,QAAA,CAAS,WAAW,CAAA,EAAG;AAChE,UAAA,UAAA,CAAW,iBAAA,GAAoB;AAAA,YAC7B,GAAG,eAAA;AAAA,YACH,GAAG,KAAA,CAAM;AAAA,WACX;AAAA,QACF;AACA,QAAA,IAAK,CAACA,QAAQ,gBAAA,EAAkBA,OAAAA,CAAQ,gBAAgB,CAAA,CAAgB,QAAA,CAAS,WAAW,CAAA,EAAG;AAC7F,UAAA,UAAA,CAAW,gBAAA,GAAmB;AAAA,YAC5B,GAAG,eAAA;AAAA,YACH,GAAG,KAAA,CAAM;AAAA,WACX;AAAA,QACF;AAAA,MACF;AAEA,MAAA,UAAA,CAAW,OAAA,GAAU,MAAA;AAErB,MAAA,IAAI,eAAA,GAAkB,MAAA;AACtB,MAAA,IAAI,0BAAA,EAA4B;AAC9B,QAAA,eAAA,GAAkB,KAAA,CAAM,YAAY,cAAA,IAAkB,MAAA;AAAA,MACxD;AACA,MAAA,IAAI,CAAC,WAAW,eAAA,EAAiB;AAC/B,QAAA,UAAA,CAAW,eAAA,GAAkB,eAAA;AAAA,MAC/B;AAEA,MAAA,IAAI,WAAA,KAAgBA,QAAQ,MAAA,EAAQ;AAClC,QAAA,MAAM,QAAA,GAAW,OAAO,MAAA,EAAQ,GAAA,GAAM,CAAC,KAAA,KAAe,KAAA,CAAM,OAAO,CAAA,IAAK,EAAC;AACzE,QAAA,UAAA,CAAW,QAAA,GAAW,QAAA;AAAA,MACxB;AAEA,MAAA,GAAA,CAAI,gBAAA,EAAkB,UAAA,EAAY,gBAAA,EAAkB,UAAU,CAAA;AAE9D,MAAA,cAAA,CAAe,UAAU,CAAA;AAAA,IAC3B,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,GAAA,CAAI,wBAAA,EAA0B,6BAAA,EAA+B,KAAK,CAAA;AAAA,IAC5E;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,aAAoB,SAAA,CAClB,WAAA,EACA,MAAA,EAIiE;AACjE,IAAA,MAAM,EAAA,GAAK,IAAIW,GAAAA,CAAIN,OAAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AAEf,IAAA,MAAM,OAAA,GAAU,WAAW,WAAW,CAAA;AACtC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,WAAW,CAAA,CAAE,CAAA;AAAA,IACxD;AAEA,IAAA,IAAI,CAAC,QAAQ,SAAA,EAAW;AACtB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,WAAW,CAAA,kCAAA,CAAoC,CAAA;AAAA,IAC5E;AAEA,IAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,MAAA;AAExB,IAAA,MAAM,kBAAmC,EAAC;AAE1C,IAAA,MAAM,EAAE,iBAAA,EAAmB,0BAAA,EAA2B,GAAI,aAAA,CAAc;AAAA,MACtE,SAAA,EAAW,KAAA;AAAA,MACX,WAAA,EAAa,EAAE,gBAAA,EAAkB,WAAA;AAAY,KAC9C,CAAA;AAED,IAAA,eAAA,CAAgB,cAAA,GAAiB,iBAAA,GAAoB,KAAA,CAAM,KAAA,CAAM,cAAA,GAAiB,EAAA;AAClF,IAAA,eAAA,CAAgB,IAAA,GAAO,IAAA;AAEvB,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,IAAI,eAAA,GAAkB,IAAA;AACtB,MAAA,IAAI,0BAAA,EAA4B;AAC9B,QAAA,eAAA,GAAkB,KAAA,EAAO,YAAY,cAAA,IAAkB,IAAA;AAAA,MACzD;AACA,MAAA,eAAA,CAAgB,cAAA,GAAiB,eAAA;AAAA,IACnC;AAEA,IAAA,GAAA,CAAI,WAAA,EAAa,aAAA,EAAe,qBAAA,EAAuB,eAAe,CAAA;AAEtE,IAAA,MAAM,MAAA,GAAiE,EAAE,MAAA,EAAQ,iBAAA,CAAkB,OAAA,EAAQ;AAC3G,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,SAAA,CAAU,eAAe,CAAA;AAExD,IAAA,IAAK,CAACL,QAAQ,IAAA,EAAMA,OAAAA,CAAQ,MAAM,CAAA,CAAgB,QAAA,CAAS,WAAW,CAAA,EAAG;AACvE,MAAA,MAAM,UAAU,QAAA,EAAU,IAAA;AAC1B,MAAA,MAAM,SAAS,OAAA,EAAS,MAAA;AACxB,MAAA,IAAI,MAAA,KAAW,iBAAiB,OAAA,EAAS;AACvC,QAAA,MAAA,CAAO,SAAS,iBAAA,CAAkB,OAAA;AAClC,QAAA,MAAA,CAAO,gBAAgB,OAAA,EAAS,UAAA;AAAA,MAClC;AACA,MAAA,IAAI,MAAA,KAAW,iBAAiB,MAAA,EAAQ;AACtC,QAAA,MAAA,CAAO,SAAS,iBAAA,CAAkB,MAAA;AAAA,MACpC;AAAA,IACF;AAEA,IAAA,IAAK,CAACA,OAAAA,CAAQ,KAAK,CAAA,CAAgB,QAAA,CAAS,WAAW,CAAA,EAAG;AACxD,MAAA,MAAM,OAAA,GAAU,QAAA,EAAU,IAAA,GAAO,CAAC,CAAA;AAClC,MAAA,MAAM,MAAA,GAAS,SAAS,MAAA,EAAQ,IAAA;AAChC,MAAA,IAAI,MAAA,KAAW,gBAAgB,SAAA,EAAW;AACxC,QAAA,MAAA,CAAO,SAAS,iBAAA,CAAkB,OAAA;AAClC,QAAA,MAAA,CAAO,aAAA,GAAgB,OAAA,EAAS,WAAA,EAAa,EAAA,EAAI,MAAA;AAAA,MACnD;AACA,MAAA,IAAI,CAAC,gBAAgB,MAAA,EAAQ,eAAA,CAAgB,OAAO,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA,EAAG;AACtE,QAAA,MAAA,CAAO,SAAS,iBAAA,CAAkB,MAAA;AAAA,MACpC;AAAA,IACF;AAEA,IAAA,IAAK,CAACA,OAAAA,CAAQ,QAAQ,CAAA,CAAgB,QAAA,CAAS,WAAW,CAAA,EAAG;AAC3D,MAAA,MAAM,SAAS,QAAA,EAAU,MAAA;AAEzB,MAAA,IAAI,MAAA,KAAW,eAAe,OAAA,EAAS;AACrC,QAAA,MAAA,CAAO,SAAS,iBAAA,CAAkB,OAAA;AAClC,QAAA,MAAA,CAAO,aAAA,GAAgB,QAAA,EAAU,WAAA,EAAa,wBAAA,GAA2B,CAAC,CAAA,EAAG,IAAA;AAAA,MAC/E;AAEA,MAAA,IAAI,CAAC,eAAe,QAAA,EAAU,cAAA,CAAe,MAAM,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA,EAAG;AACrE,QAAA,MAAA,CAAO,SAAS,iBAAA,CAAkB,MAAA;AAAA,MACpC;AAAA,IACF;AAEA,IAAA,IAAK,CAACA,OAAAA,CAAQ,aAAA,EAAeA,OAAAA,CAAQ,eAAeA,OAAAA,CAAQ,QAAA,EAAUA,OAAAA,CAAQ,gBAAA,EAAkBA,OAAAA,CAAQ,gBAAgB,CAAA,CAAgB,QAAA,CAAS,WAAW,CAAA,EAAG;AAC7J,MAAA,MAAM,UAAU,QAAA,EAAU,IAAA;AAC1B,MAAA,MAAM,SAAS,OAAA,EAAS,MAAA;AACxB,MAAA,IAAI,MAAA,KAAW,iBAAiB,OAAA,EAAS;AACvC,QAAA,MAAA,CAAO,SAAS,iBAAA,CAAkB,OAAA;AAClC,QAAA,MAAA,CAAO,gBAAgB,OAAA,EAAS,UAAA;AAAA,MAClC;AACA,MAAA,IAAI,MAAA,KAAW,iBAAiB,MAAA,EAAQ;AACtC,QAAA,MAAA,CAAO,SAAS,iBAAA,CAAkB,MAAA;AAAA,MACpC;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AChdO,IAAM,YAAA,GAAe,OAAO,MAAA,KAAgB;AACjD,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA;AAAA,GACF,GAAI,MAAA;AAEJ,EAAA,MAAM,EAAA,GAAK,IAAIW,GAAAA,CAAIN,OAAAA,CAAQ,KAAK,CAAA;AAChC,EAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AAEf,EAAA,MAAM,QAAA,GAAW,IAAID,QAAAA,CAAS,EAAE,IAAA,EAAM,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAY,OAAA,EAASC,OAAAA,CAAQ,KAAA,EAAO,CAAA;AAEpG,EAAA,MAAM,eAAA,GAAkB,aAAa,UAAU,CAAA;AAC/C,EAAA,MAAM,oBAAA,GAAuB,YAAA,CAAa,OAAA,CAAQ,SAAS,CAAA;AAE3D,EAAA,IAAI,cAAc,eAAA,CAAgB,GAAA;AAClC,EAAA,IAAI,2BAAA,GAA8B,oBAAA,CAAqB,GAAA,IAAO,oBAAA,CAAqB,SAAA;AACnF,EAAA,MAAM,mBAAA,GAAsB,gCAAgC,oBAAA,CAAqB,SAAA;AACjF,EAAA,IAAI,mBAAA,EAAqB;AACvB,IAAA,WAAA,GAAc,eAAA,CAAgB,aAAa,eAAA,CAAgB,GAAA;AAAA,EAC7D;AAEA,EAAA,QAAA,CAAS,UAAA,EAAW;AACpB,EAAA,MAAM,QAAA,GAAWa,sBAAAA,CAAuBO,WAAAA,CAAY,KAAK,CAAC,CAAA;AAC1D,EAAA,MAAM,kBAAkB,IAAI,MAAA,CAAO,QAAA,CAAS,WAAA,EAAc,SAAS,QAAQ,CAAA;AAC3E,EAAA,QAAA,CAAS,IAAI,eAAe,CAAA;AAE5B,EAAA,IAAI;AACF,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,SAAS,MAAM,eAAA,CAAgB,SAAA,CAAU,UAAA,CAAW,WAAW,KAAK,CAAA;AAC1E,IAAA,QAAA,CAAS,IAAI,WAAW,CAAA;AAExB,IAAA,MAAM,CAAC,SAAS,CAAA,GAAI,MAAA;AAEpB,IAAA,QAAA,CAAS,SAAS,cAAc,CAAA;AAEhC,IAAA,OAAO,YAAY,IAAA,GAAO,IAAA;AAAA,EAC5B,SAAS,KAAA,EAAO;AACd,IAAA,GAAA,CAAI,cAAA,EAAgB,SAAA,EAAW,yBAAA,EAA2B,KAAK,CAAA;AAC/D,IAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,EACtD;AACF","file":"index.mjs","sourcesContent":["export const ONECLICK_PROXY: Record<string, string> = {\n [\"Arbitrum\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Polygon\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"BNB Chain\"]: \"0xf5f1ec09b3ec88F6Cf23ADEEDd792E4642c5B7f1\",\n [\"Optimism\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Avalanche\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Ethereum\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Berachain\"]: \"0x1766A6B8453c7dbcA8c70d17980B6EA87ACA4F60\",\n [\"Tron\"]: \"TMqM35eVd3D9d7JbShRrMzMPyWLFweKYvW\",\n [\"Solana\"]: \"HWk6MsFEGzXxpe9B4mfEHpvVoCwNeVVMFxb5Mi7qNTM\",\n [\"Near\"]: \"stbflow.near\",\n [\"Aptos\"]: \"0x3000ceb3211d23ef73ad1b602a7a99b72020c9ce9537f580ac5bba556ec3bff9\",\n [\"Base\"]: \"0x7A18854b695BA7efB7229c17D0E1Cd2679481D28\",\n [\"X Layer\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Plasma\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Ton\"]: \"EQBeP9Aeu3m5n9qpVyCWZFyji8uQJbzrYuAxq0orWl5e2qjR\",\n [\"Sui\"]: \"0xc178428ac308d322b6051421af1b6019ff4815955306c4317aafd050bdc28146\",\n};\n\nexport const ONECLICK_PROXY_ABI = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"proxyTransfer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n];\n","import Big from \"big.js\";\nimport { ONECLICK_PROXY, ONECLICK_PROXY_ABI } from \"./contract\";\nimport { getRequest, GetStatusParams, numberRemoveEndZero, postRequest } from \"@stableflow/core\";\nimport { getPrice } from \"@stableflow/core\";\nimport { SendType } from \"@stableflow/core\";\nimport { Service } from \"@stableflow/core\";\nimport { DefaultAddresses } from \"@stableflow/core\";\nimport { OpenAPI } from '@stableflow/core';\nimport { ChainType } from \"@stableflow/core\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\n\nexport const BridgeFee = [\n {\n recipient: \"reffer.near\",\n // No bridge fee will be charged temporarily\n fee: 0, // 100=1% 1=0.01%\n },\n];\n\nexport const excludeFees: string[] = [\"estimateGasUsd\"];\n\nexport class OneClickService {\n private offsetTime = 1000 * 60 * 60;\n constructor() {\n }\n\n public async formatQuoteData(res: { data: any; params: any; }) {\n const { params } = res;\n const { isProxy = true, prices } = params;\n\n const isExactOutput = params.swapType === \"EXACT_OUTPUT\";\n const nativeTokenPrice = getPrice(prices, params.fromToken.nativeToken.symbol);\n const nativeTokenDecimals = params.fromToken.nativeToken.decimals;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n const execTime = new ExecTime({ type: \"OneClickService formatQuoteData\", logStyle: \"lime-300\", isDebug: OpenAPI.DEBUG });\n\n if (res.data) {\n // Updated the time estimate for bridge quotes to ensure it does not exceed a maximum threshold.\n // If the calculated time exceeds 60 seconds, it is randomized between 40 and 45 seconds,\n // enhancing user experience by providing more realistic estimates.\n if (res.data?.quote) {\n if (Big(res.data.quote.timeEstimate || 0).gt(60)) {\n res.data.quote.timeEstimate = Math.floor(Math.random() * 6) + 40;\n }\n }\n\n res.data.estimateTime = res.data?.quote?.timeEstimate; // seconds\n res.data.outputAmount = numberRemoveEndZero(Big(res.data?.quote?.amountOut || 0).div(10 ** params.toToken.decimals).toFixed(params.toToken.decimals, 0));\n let priceImpact = Big(0);\n let _amountInUsd = res.data?.quote?.amountInUsd || 0;\n let _amountOutUsd = res.data?.quote?.amountOutUsd || 0;\n if (isExactOutput) {\n res.data.quote.amountInFormatted = numberRemoveEndZero(Big(res.data?.quote?.minAmountIn || 0).div(10 ** params.fromToken.decimals).toFixed(params.fromToken.decimals, Big.roundUp));\n // Since 1click does not return minAmountInUsd, we calculate it using our own price\n _amountInUsd = Big(res.data.quote.amountInFormatted).times(getPrice(params.prices, params.fromToken.symbol));\n _amountOutUsd = Big(res.data?.quote?.amountOutFormatted || 0).times(getPrice(params.prices, params.fromToken.symbol));\n }\n try {\n priceImpact = Big(Big(_amountInUsd).minus(_amountOutUsd)).div(_amountInUsd || 1);\n if (Big(priceImpact).lt(0)) {\n priceImpact = Big(0);\n }\n } catch (error) { }\n res.data.priceImpact = numberRemoveEndZero(Big(priceImpact).toFixed(4));\n\n const fromTokenSymbol = params.fromToken.symbol === \"USD₮0\" ? \"USDT\" : params.fromToken.symbol;\n const toTokenSymbol = params.toToken.symbol === \"USD₮0\" ? \"USDT\" : params.toToken.symbol;\n res.data.exchangeRate = \"1\";\n if (fromTokenSymbol !== toTokenSymbol) {\n res.data.exchangeRate = numberRemoveEndZero(Big(res.data.quote?.amountOutFormatted || 0).div(res.data.quote?.amountInFormatted || 1).toFixed(params.toToken.decimals, 0));\n }\n\n try {\n const netFee = Big(_amountInUsd).minus(_amountOutUsd);\n let bridgeFeeValue = Big(0);\n let destinationGasFee = Big(netFee).minus(bridgeFeeValue);\n destinationGasFee = Big(destinationGasFee).lt(0) ? Big(0) : destinationGasFee;\n if (fromTokenSymbol !== toTokenSymbol) {\n destinationGasFee = Big(0);\n }\n res.data.fees = {\n bridgeFeeUsd: numberRemoveEndZero(Big(bridgeFeeValue).toFixed(20)),\n destinationGasFeeUsd: numberRemoveEndZero(Big(destinationGasFee).toFixed(20)),\n };\n\n // calculate total fees\n res.data.totalFeesUsd = \"0\";\n for (const feeKey in res.data.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n res.data.totalFeesUsd = Big(res.data.totalFeesUsd || 0).plus(res.data.fees[feeKey] || 0);\n }\n res.data.totalFeesUsd = numberRemoveEndZero(Big(res.data.totalFeesUsd).toFixed(20));\n\n } catch (error) {\n csl(\"OneClickService formatQuoteData\", \"red-500\", \"oneclick estimate failed: %o\", error);\n }\n\n const proxyAddress = ONECLICK_PROXY[params.fromToken.chainName];\n let proxyParams: any = {};\n if (proxyAddress && isProxy) {\n proxyParams = {\n dry: params.dry,\n proxyAddress,\n abi: ONECLICK_PROXY_ABI,\n fromToken: params.fromToken,\n refundTo: params.refundTo,\n recipient: params.recipient,\n amountWei: isExactOutput ? res.data?.quote?.minAmountIn : params.amountWei,\n prices: params.prices,\n evmGasFees: params.evmGasFees,\n depositAddress: res.data?.quote?.depositAddress ?? DefaultAddresses[params.fromToken.chainType as ChainType],\n };\n try {\n execTime.breakpoint();\n const proxyResult = await params.wallet.quote(Service.OneClick, proxyParams);\n execTime.log(\"wallet.quoteOneClickProxy\");\n\n for (const proxyKey in proxyResult) {\n if (proxyKey === \"fees\") {\n for (const feeKey in proxyResult.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n res.data.fees[feeKey] = proxyResult.fees[feeKey];\n }\n continue;\n }\n res.data[proxyKey] = proxyResult[proxyKey];\n }\n\n res.data.transferSourceGasFee = proxyResult.estimateSourceGas;\n const transferSourceGasFeeUsd = Big(proxyResult.estimateSourceGas || 0).div(10 ** params.fromToken.nativeToken.decimals).times(getPrice(params.prices, params.fromToken.nativeToken.symbol));\n res.data.transferSourceGasFeeUsd = numberRemoveEndZero(Big(transferSourceGasFeeUsd).toFixed(20));\n } catch (error) {\n csl(\"OneClickService formatQuoteData\", \"red-500\", \"oneclick quote proxy failed: %o\", error);\n }\n }\n\n res.data.quoteParam = {\n ...params,\n ...proxyParams,\n };\n }\n\n execTime.logTotal(\"OneClickService.formatQuoteData\");\n\n return res.data || {};\n }\n\n public async quote(params: {\n wallet: any,\n fromToken: any,\n toToken: any,\n dry: boolean;\n slippageTolerance: number;\n originAsset: string;\n destinationAsset: string;\n refundTo: string;\n refundType: \"ORIGIN_CHAIN\";\n recipient: string;\n connectedWallets?: string[];\n prices: Record<string, string>;\n amountWei: string;\n appFees?: { recipient: string; fee: number; }[];\n swapType?: \"EXACT_INPUT\" | \"EXACT_OUTPUT\" | \"FLEX_INPUT\";\n isProxy?: boolean;\n }) {\n const {\n wallet,\n fromToken,\n toToken,\n prices,\n amountWei,\n appFees = [],\n swapType = \"EXACT_INPUT\",\n isProxy = true,\n ...restParams\n } = params;\n\n const _quoteType = `OneClickService ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"lime-400\", isDebug: OpenAPI.DEBUG });\n\n const quoteParams: any = {\n depositMode: \"SIMPLE\",\n swapType: swapType || \"EXACT_INPUT\",\n depositType: \"ORIGIN_CHAIN\",\n sessionId: `session_${Date.now()}_${Math.random()\n .toString(36)\n .substr(2, 9)}`,\n recipientType: \"DESTINATION_CHAIN\",\n deadline: new Date(Date.now() + this.offsetTime).toISOString(),\n quoteWaitingTimeMs: 0,\n appFees: [\n ...BridgeFee,\n ...appFees,\n ],\n referral: \"stableflow\",\n amount: amountWei,\n };\n\n if (swapType === \"EXACT_OUTPUT\") {\n quoteParams.amount = Big(amountWei || 0).div(10 ** fromToken.decimals).times(10 ** toToken.decimals).toFixed(0);\n }\n\n for (const k in restParams) {\n if ([\"evmAddress\", \"evmWallet\", \"destinationChain\", \"originChain\"].includes(k)) {\n continue;\n }\n quoteParams[k] = restParams[k as keyof typeof restParams];\n }\n\n execTime.breakpoint();\n const response: any = await postRequest(\"/v0/quote\", quoteParams);\n execTime.log(\"/v0/quote\");\n\n execTime.breakpoint();\n const result = await this.formatQuoteData({ data: response, params });\n execTime.log(\"formatQuoteData\");\n\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"OneClickService.quote\");\n\n return result;\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const {\n fromToken,\n isProxy = true,\n wallet,\n amountWei,\n refundTo,\n prices,\n acceptTronEnergy,\n evmGasFees,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const result: any = { fees: {}, ...quoteData };\n\n const proxyAddress = ONECLICK_PROXY[fromToken.chainName];\n const isFromTron = fromToken.chainType === \"tron\";\n const isFromTronEnergy = isFromTron && acceptTronEnergy;\n const isFinalProxy = proxyAddress && isProxy;\n const nativeTokenPrice = getPrice(prices, fromToken.nativeToken.symbol);\n const nativeTokenDecimals = fromToken.nativeToken.decimals;\n\n if (isFromTron) {\n try {\n const _estGas = await wallet.estimateTransferGas({\n fromToken: fromToken,\n depositAddress: DefaultAddresses[fromToken.chainType as ChainType],\n amount: amountWei,\n account: refundTo,\n });\n result.transferSourceGasFee = _estGas.estimateGas;\n const transferSourceGasFeeUsd = Big(result.transferSourceGasFee || 0).div(10 ** nativeTokenDecimals).times(nativeTokenPrice);\n result.transferSourceGasFeeUsd = numberRemoveEndZero(Big(transferSourceGasFeeUsd).toFixed(20));\n } catch (error) {\n csl(\"OneClickService estimateTransaction\", \"red-500\", \"oneclick estimate transaction without proxy failed: %o\", error);\n }\n }\n\n if (isFinalProxy) {\n const estimateTransactionParams = {\n dry: false,\n ...quoteData.sendParam,\n fromToken,\n prices,\n evmGasFees,\n };\n if (isFromTron) {\n estimateTransactionParams.defaultEnergyUsed = 200000;\n estimateTransactionParams.defaultRawDataHexLength = 500;\n }\n const ett = await wallet.estimateTransaction(estimateTransactionParams);\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n result.transferSourceGasFee = ett.estimateSourceGas;\n result.transferSourceGasFeeUsd = ett.estimateSourceGasUsd;\n\n if (fromToken.chainType === \"evm\") {\n const sendParams = result.sendParam?.param;\n if (\n sendParams\n && Array.isArray(sendParams)\n && sendParams[sendParams.length - 1]\n && typeof sendParams[sendParams.length - 1] === \"object\"\n && sendParams[sendParams.length - 1].gasLimit !== void 0\n ) {\n csl(\"OneClickService estimateTransaction\", \"green-500\", \"Old gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n sendParams[sendParams.length - 1].gasLimit = ett.estimateSourceGasLimit;\n csl(\"OneClickService estimateTransaction\", \"green-500\", \"Updated gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n }\n }\n } else {\n let sourceGasFee = result.transferSourceGasFee || {};\n if (isFromTronEnergy) {\n sourceGasFee = result.energySourceGasFee;\n }\n const estimateGasUsd = Big(sourceGasFee.estimateGas || 0).div(10 ** nativeTokenDecimals).times(nativeTokenPrice);\n result.fees.estimateGasUsd = numberRemoveEndZero(Big(estimateGasUsd).toFixed(20));\n result.estimateSourceGas = sourceGasFee.estimateGas;\n result.totalEstimateSourceGas = sourceGasFee.estimateGas;\n result.estimateSourceGasUsd = numberRemoveEndZero(Big(estimateGasUsd).toFixed(20));\n }\n\n if (result.needApprove && wallet.estimateApprove) {\n const estApptroveGas = await wallet.estimateApprove({\n dry: false,\n amountWei,\n spender: result.approveSpender,\n fromToken,\n prices,\n });\n result.estimateApproveGas = estApptroveGas.estimateSourceGas;\n }\n\n result.totalFeesUsd = \"0\";\n for (const feeKey in result.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd).toFixed(20));\n\n return result;\n }\n\n public async send(params: any) {\n const {\n wallet,\n fromToken,\n depositAddress,\n amountWei,\n sendParam,\n } = params;\n\n // proxy transfer\n if (sendParam) {\n const tx = await wallet.send(SendType.SEND, sendParam);\n return tx;\n }\n\n const hash = await wallet.send(SendType.TRANSFER, {\n originAsset: fromToken.contractAddress,\n depositAddress: depositAddress,\n amount: amountWei,\n });\n return hash;\n }\n\n public submitHash(params: { txHash: string; depositAddress: string }) {\n return postRequest(\"/v0/deposit/submit\", params);\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest(\"/v0/status\", params);\n }\n}\n\nexport default new OneClickService();\n","export interface LayerZeroChainConfig {\n eid: number;\n chainKey: string;\n blockTime: number;\n}\n\n// LayerZero chain configuration\n// blockTime: Average block time in seconds, fetched from https://chainspect.app/\nexport const LAYERZZERO_CHAINS: Record<string, LayerZeroChainConfig> = {\n \"Ethereum\": {\n eid: 30101,\n chainKey: \"ethereum\",\n blockTime: 12,\n },\n Arbitrum: {\n eid: 30110,\n chainKey: \"arbitrum\",\n blockTime: 0.25,\n },\n Avalanche: {\n eid: 30106,\n chainKey: \"avax\",\n blockTime: 1.2,\n },\n Polygon: {\n eid: 30109,\n chainKey: \"polygon\",\n blockTime: 2,\n },\n Optimism: {\n eid: 30111,\n chainKey: \"optimism\",\n blockTime: 2,\n },\n Berachain: {\n eid: 30362,\n chainKey: \"berachain\",\n blockTime: 2,\n },\n Solana: {\n eid: 30168,\n chainKey: \"solana\",\n blockTime: 0.4,\n },\n Tron: {\n eid: 30420,\n chainKey: \"tron\",\n blockTime: 3,\n },\n \"X Layer\": {\n eid: 30274,\n chainKey: \"xlayer\",\n blockTime: 0.5,\n },\n \"Plasma\": {\n eid: 30383,\n chainKey: \"plasma\",\n blockTime: 1,\n },\n \"Mantle\": {\n eid: 30181,\n chainKey: \"mantle\",\n blockTime: 2,\n },\n \"MegaETH\": {\n eid: 30398,\n chainKey: \"megaeth\",\n blockTime: 1,\n },\n \"Ink\": {\n eid: 30339,\n chainKey: \"ink\",\n blockTime: 1,\n },\n \"Stable\": {\n eid: 30396,\n chainKey: \"stable\",\n blockTime: 0.7,\n },\n \"Celo\": {\n eid: 30125,\n chainKey: \"celo\",\n blockTime: 1,\n },\n \"Sei\": {\n eid: 30280,\n chainKey: \"sei\",\n blockTime: 2,\n },\n \"Flare\": {\n eid: 30295,\n chainKey: \"flare\",\n blockTime: 1.8,\n },\n \"BNB Chain\": {\n eid: 30102,\n chainKey: \"bsc\",\n blockTime: 0.45,\n },\n Fraxtal: {\n eid: 30255,\n chainKey: \"frax\",\n blockTime: 2,\n },\n Ton: {\n eid: 30343,\n chainKey: \"ton\",\n blockTime: 2.71,\n },\n Katana: {\n eid: 30375,\n chainKey: \"katana\",\n blockTime: 1,\n },\n};\n\n/**\n * Calculates cross-chain estimated time using the LayerZero formula.\n * Formula: Total Time ≈ (sourceBlockTime × blockConfirmations) + (destinationBlockTime × (2 blocks + DVN count))\n *\n * @param params - Object containing configuration and DVN details.\n * @param params.requiredDvnCount - The number of DVNs for this bridge (typically fixed per application, e.g., 2 or 3)\n * @param params.originConfig - Source chain configuration; should include blockTime (number) and confirmations (number)\n * @param params.destinationConfig - Destination chain configuration; should include blockTime (number)\n * @returns Estimated time in seconds. Returns 32 if configuration is missing or invalid.\n */\nexport function calculateEstimateTime(params: {\n requiredDvnCount: number;\n originConfig: { blockTime: number; confirmations: number; };\n destinationConfig: { blockTime: number; confirmations: number; };\n}): number {\n const {\n requiredDvnCount,\n originConfig,\n destinationConfig,\n } = params;\n\n // Return default value if config is missing\n if (!originConfig || !destinationConfig) {\n return 32;\n }\n\n // Validate required configuration fields\n if (\n typeof originConfig.blockTime !== 'number' ||\n typeof originConfig.confirmations !== 'number' ||\n typeof destinationConfig.blockTime !== 'number'\n ) {\n return 32;\n }\n\n const sourceBlockTime = originConfig.blockTime;\n const blockConfirmations = originConfig.confirmations;\n const destinationBlockTime = destinationConfig.blockTime;\n const dvnCount = requiredDvnCount;\n\n // Calculate: source chain part + destination chain part\n const sourceTime = sourceBlockTime * blockConfirmations;\n const destinationTime = destinationBlockTime * (2 + dvnCount);\n const totalTime = Math.ceil(sourceTime + destinationTime);\n\n return totalTime;\n}\n","import { Service } from \"@stableflow/core\";\n\nexport const getQuoteModes = (params: { quoteData?: any; bridgeStore?: { quoteDataService: Service; } }) => {\n const { quoteData, bridgeStore } = params;\n const { quoteDataService } = bridgeStore ?? {};\n\n const getIsExactOutput = () => {\n if (typeof quoteDataService === \"undefined\") {\n return false;\n }\n if (([Service.OneClickUsdt0] as Service[]).includes(quoteDataService)) {\n return true;\n }\n if (quoteDataService === Service.OneClickFraxZero) {\n const isFromEthereumUSDC = quoteData?.quoteParam?.isFromEthereumUSDC;\n const isToEthereumFrxUSD = quoteData?.quoteParam?.isToEthereumFrxUSD;\n if (!isFromEthereumUSDC) {\n return true;\n }\n }\n return false;\n };\n\n const getIsOneClickService = () => {\n if (typeof quoteDataService === \"undefined\") {\n return false;\n }\n if (([Service.OneClickUsdt0, Service.OneClick] as Service[]).includes(quoteDataService)) {\n return true;\n }\n if (quoteDataService === Service.OneClickFraxZero) {\n const isFromEthereumUSDC = quoteData?.quoteParam?.isFromEthereumUSDC;\n const isToEthereumFrxUSD = quoteData?.quoteParam?.isToEthereumFrxUSD;\n if (!isFromEthereumUSDC) {\n return true;\n }\n }\n return false;\n };\n\n const getIsQuoteParamDepositAddress = () => {\n if (typeof quoteDataService === \"undefined\") {\n return false;\n }\n if (([Service.Usdt0OneClick] as Service[]).includes(quoteDataService)) {\n return true;\n }\n if (quoteDataService === Service.FraxZeroOneClick) {\n const isFromEthereumFrxUSD = quoteData?.quoteParam?.isFromEthereumFrxUSD;\n const isToEthereumUSDC = quoteData?.quoteParam?.isToEthereumUSDC;\n if (!isToEthereumUSDC) {\n return true;\n }\n }\n\n return false;\n };\n\n return {\n isExactOutput: getIsExactOutput(),\n isOneClickService: getIsOneClickService(),\n isQuoteParamDepositAddress: getIsQuoteParamDepositAddress(),\n isPermitWithNonce: typeof quoteDataService === \"undefined\" ? false : ([Service.OneClickUsdt0, Service.OneClickFraxZero, Service.FraxZeroOneClick] as Service[]).includes(quoteDataService),\n };\n};\n","import bs58 from \"bs58\";\nimport { Buffer } from 'buffer';\n\n/** Left-pad a hex value to `lengthBytes` (ethers v6 zeroPadValue semantics). */\nfunction zeroPadValue(hex: string, lengthBytes: number): string {\n const normalized = hex.startsWith(\"0x\") ? hex.slice(2) : hex;\n const targetLen = lengthBytes * 2;\n if (normalized.length > targetLen) {\n throw new Error(`hex value exceeds ${lengthBytes} bytes`);\n }\n return \"0x\" + normalized.padStart(targetLen, \"0\");\n}\n\n// Address validation utilities for different blockchains\n\nexport interface AddressValidationResult {\n isValid: boolean;\n error?: string;\n}\n\n/**\n * Validates an address based on the target blockchain\n * @param address - The address to validate\n * @param blockchain - The target blockchain key\n * @returns AddressValidationResult with validation status and error message\n */\nexport function validateAddress(\n address: string,\n blockchain: string\n): AddressValidationResult {\n if (!address.trim()) {\n return {\n isValid: false,\n error: \"Address cannot be empty\"\n };\n }\n\n const trimmedAddress = address.trim();\n\n switch (blockchain) {\n case \"near\":\n return validateNearAddress(trimmedAddress);\n case \"sol\":\n return validateSolanaAddress(trimmedAddress);\n case \"evm\":\n return validateEthereumAddress(trimmedAddress);\n case \"aptos\":\n return validateAptosAddress(trimmedAddress);\n case \"tron\":\n return validateTronAddress(trimmedAddress);\n case \"ton\":\n return validateTonAddress(trimmedAddress);\n default:\n return {\n isValid: false,\n error: \"Unsupported blockchain\"\n };\n }\n}\n\n/**\n * Validates a NEAR address\n * Supports named accounts (alice.near, burrow.sputnik-dao.near) and\n * implicit accounts (64-char hex public key hash).\n */\nfunction validateNearAddress(address: string): AddressValidationResult {\n // Length check\n if (address.length < 2 || address.length > 64) {\n return {\n isValid: false,\n error: \"NEAR address must be 2-64 characters long\"\n };\n }\n\n // Additional checks\n if (address.startsWith(\".\") || address.endsWith(\".\")) {\n return {\n isValid: false,\n error: \"NEAR address cannot start or end with a dot\"\n };\n }\n\n if (address.includes(\"..\")) {\n return {\n isValid: false,\n error: \"NEAR address cannot contain consecutive dots\"\n };\n }\n\n // NEAR implicit accounts: 64-char hex string\n if (/^[0-9a-f]{64}$/i.test(address)) {\n return { isValid: true };\n }\n\n // Named account: letters, numbers and separators ., -, _\n const nearPattern = /^[a-zA-Z0-9._-]+$/;\n if (!nearPattern.test(address)) {\n return {\n isValid: false,\n error: \"Invalid NEAR address\"\n };\n }\n\n // Every account label should start/end with alphanumeric.\n const labelPattern = /^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$/;\n const labels = address.split(\".\");\n if (!labels.every(label => labelPattern.test(label))) {\n return {\n isValid: false,\n error: \"NEAR address labels must start/end with letters or numbers\"\n };\n }\n\n // Named NEAR account cannot be purely numeric.\n if (/^\\d+$/.test(address)) {\n return {\n isValid: false,\n error: \"NEAR address cannot be purely numeric\"\n };\n }\n\n const hasLetterPattern = /[a-zA-Z]/;\n if (!hasLetterPattern.test(address)) {\n return {\n isValid: false,\n error: \"NEAR address must contain at least one letter\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Validates a Solana address\n * Solana addresses are base58 encoded and typically 32-44 characters long\n */\nfunction validateSolanaAddress(address: string): AddressValidationResult {\n // Solana address pattern: base58 encoded, typically 32-44 characters\n const solanaPattern = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;\n\n if (!solanaPattern.test(address)) {\n return {\n isValid: false,\n error: \"Invalid Solana address\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Validates an Ethereum address (used for Arbitrum)\n * Ethereum addresses are 42 characters long, starting with 0x\n */\nfunction validateEthereumAddress(address: string): AddressValidationResult {\n // Ethereum address pattern: 0x followed by 40 hexadecimal characters\n const ethereumPattern = /^0x[a-fA-F0-9]{40}$/;\n\n if (!ethereumPattern.test(address)) {\n return {\n isValid: false,\n error: \"Invalid Ethereum address\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Validates an Aptos address\n * Aptos addresses are 32 bytes (64 hex characters), optionally prefixed with 0x\n */\nfunction validateAptosAddress(address: string): AddressValidationResult {\n // Aptos address can be with or without 0x prefix\n // With 0x: 0x + 64 hex characters = 66 characters total\n // Without 0x: 64 hex characters\n const aptosPatternWithPrefix = /^0x[a-fA-F0-9]{64}$/;\n const aptosPatternWithoutPrefix = /^[a-fA-F0-9]{64}$/;\n\n if (!aptosPatternWithPrefix.test(address) && !aptosPatternWithoutPrefix.test(address)) {\n return {\n isValid: false,\n error: \"Invalid Aptos address\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Validates a TON address.\n * Supports:\n * - user-friendly format, e.g. EQ..., UQ..., kQ...\n * - raw format, e.g. 0:<64 hex chars>, -1:<64 hex chars>\n */\nexport function validateTonAddress(address: string): AddressValidationResult {\n try {\n parseTonAddress(address);\n return { isValid: true };\n } catch {\n return {\n isValid: false,\n error: \"Invalid TON address\",\n };\n }\n}\n\n/**\n * Validates a Tron address\n * Tron addresses are Base58 encoded, starting with T, and 34 characters long\n */\nfunction validateTronAddress(address: string): AddressValidationResult {\n // Tron address pattern: Base58 encoded, starts with T, 34 characters long\n // Base58 alphabet: 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz (no 0, O, I, l)\n const tronPattern = /^T[1-9A-HJ-NP-Za-km-z]{33}$/;\n\n if (!tronPattern.test(address)) {\n return {\n isValid: false,\n error: \"Invalid Tron address\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Gets a placeholder text for the address input based on the target blockchain\n */\nexport function getAddressPlaceholder(blockchain: string): string {\n switch (blockchain) {\n case \"near\":\n return \"Enter NEAR wallet address (e.g., alice.near or 64-char hex)\";\n case \"sol\":\n return \"Enter Solana wallet address (e.g., 9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM)\";\n case \"arb\":\n return \"Enter Ethereum/Arbitrum wallet address (e.g., 0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6)\";\n case \"aptos\":\n return \"Enter Aptos wallet address (e.g., 0x93493b07d031c4f18ad1e874575761be7e47d4cea5c81d538600e8ec72d6ab1c)\";\n case \"tron\":\n return \"Enter Tron wallet address (e.g., TG4cfJGzvmpWxYyQKSosCWTacKCxEwSiKw)\";\n default:\n return \"Enter recipient wallet address\";\n }\n}\n\n/**\n * Convert Tron address to bytes32 format (for LayerZero OFT)\n * @param {string} tronAddress - Tron address in Base58check format (starts with T)\n * @returns {string} Address in bytes32 format (starts with 0x, left-padded with zeros)\n */\nexport function tronAddressToBytes32(tronAddress: string) {\n try {\n // 1. Decode base58check format\n const decoded = bs58.decode(tronAddress);\n\n // 2. Remove the first byte (0x41 prefix) and the last 4 bytes (checksum)\n // Tron address structure: [0x41] + [20-byte address] + [4-byte checksum]\n const addressBytes = decoded.slice(1, 21);\n\n // 3. Validate length\n if (addressBytes.length !== 20) {\n throw new Error('Invalid Tron address length');\n }\n\n // 4. Left pad with 12 zero bytes to make it 32 bytes\n const paddedBytes = Buffer.concat([\n Buffer.alloc(12, 0), // 12 zero bytes\n addressBytes // 20-byte address\n ]);\n\n // 5. Convert to hexadecimal string\n return '0x' + paddedBytes.toString('hex');\n } catch (error: any) {\n throw new Error(`Failed to convert Tron address: ${error.message}`);\n }\n}\n\n/**\n * SHA256 hash using Web Crypto API (browser compatible)\n * @param {Uint8Array} data - Data to hash\n * @returns {Promise<Uint8Array>} Hash result\n */\nasync function sha256(data: Uint8Array): Promise<Uint8Array> {\n // Create a new ArrayBuffer from the Uint8Array to ensure proper type\n const buffer = new Uint8Array(data).buffer;\n const hashBuffer = await crypto.subtle.digest('SHA-256', buffer);\n return new Uint8Array(hashBuffer);\n}\n\n/**\n * Converts bytes32 to Tron address\n * @param {string} bytes32Address - Address in bytes32 format\n * @returns {Promise<string>} Tron address in Base58check format\n */\nexport async function bytes32ToTronAddress(bytes32Address: string): Promise<string> {\n try {\n // Remove '0x' prefix\n const hexString = bytes32Address.startsWith('0x')\n ? bytes32Address.slice(2)\n : bytes32Address;\n\n // Convert to Buffer\n const buffer = Buffer.from(hexString, 'hex');\n\n // Take the last 20 bytes (remove the leading 12 zero bytes)\n const addressBytes = buffer.slice(12, 32);\n\n // Add Tron prefix 0x41\n const addressWithPrefix = Buffer.concat([\n Buffer.from([0x41]),\n addressBytes\n ]);\n\n // Calculate checksum (first 4 bytes of double SHA256)\n const hash1 = await sha256(new Uint8Array(addressWithPrefix));\n const hash2 = await sha256(hash1);\n const checksum = Buffer.from(hash2.slice(0, 4));\n\n // Combine: prefix + address + checksum\n const fullAddress = Buffer.concat([addressWithPrefix, checksum]);\n\n // Base58 encoding\n return bs58.encode(fullAddress);\n } catch (error: any) {\n throw new Error(`Failed to convert bytes32 to Tron address: ${error.message}`);\n }\n}\n\n/**\n * Converts Solana address to bytes32 format (for LayerZero OFT)\n * @param {string} solanaAddress - Solana address in Base58 format\n * @returns {string} Address in bytes32 format (starts with 0x, left-padded with zeros)\n */\nexport function solanaAddressToBytes32(solanaAddress: string) {\n // Decode the Solana address from base58 format\n const decoded = bs58.decode(solanaAddress);\n\n // Validate length (Solana public key is 32 bytes)\n if (decoded.length !== 32) {\n throw new Error('Invalid Solana address length');\n }\n\n // Convert to hexadecimal string\n return '0x' + Buffer.from(decoded).toString('hex');\n}\n\n/**\n * Converts bytes32 to Solana address\n * @param {string} bytes32Address - Address in bytes32 format\n * @returns {string} Solana address in Base58 format\n */\nexport function bytes32ToSolanaAddress(bytes32Address: string) {\n const hexString = bytes32Address.startsWith('0x')\n ? bytes32Address.slice(2)\n : bytes32Address;\n\n const buffer = Buffer.from(hexString, 'hex');\n\n // Encode as base58\n return bs58.encode(buffer);\n}\n\n/**\n * Converts TON address to bytes32 format for LayerZero OFT.\n *\n * @param tonAddress TON address in user-friendly or raw format\n * @returns 0x + 32-byte account hash as hex\n */\nexport function tonAddressToBytes32(tonAddress: string): string {\n try {\n const parsed = parseTonAddress(tonAddress);\n\n if (parsed.hash.length !== 32) {\n throw new Error(\"Invalid TON address hash length\");\n }\n\n return \"0x\" + bytesToHex(parsed.hash);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n throw new Error(`Failed to convert TON address: ${message}`);\n }\n}\n\nexport function addressToBytes32(chainType: string, address: string) {\n if (chainType === \"evm\") {\n return zeroPadValue(address, 32);\n }\n if (chainType === \"sol\") {\n return solanaAddressToBytes32(address);\n }\n if (chainType === \"tron\") {\n return tronAddressToBytes32(address);\n }\n if (chainType === \"ton\") {\n return tonAddressToBytes32(address);\n }\n return address;\n}\n\n//#region TON address parsing utilities\ntype ParsedTonAddress = {\n workchain: number;\n hash: Uint8Array; // 32 bytes\n isUserFriendly: boolean;\n isBounceable?: boolean;\n isTestOnly?: boolean;\n};\n\n/**\n * TON user-friendly address:\n * 36 bytes total:\n * [0] flags\n * [1] workchain as signed int8-ish, 0xff means -1\n * [2..33] 32-byte account hash\n * [34..35] CRC16-CCITT of first 34 bytes\n *\n * Raw address:\n * workchain:64-hex-chars\n */\nfunction parseTonAddress(address: string): ParsedTonAddress {\n const input = address.trim();\n\n if (!input) {\n throw new Error(\"Address is empty\");\n }\n\n if (isRawTonAddress(input)) {\n return parseRawTonAddress(input);\n }\n\n return parseUserFriendlyTonAddress(input);\n}\n\n/**\n * CRC16-CCITT, polynomial 0x1021, initial value 0x0000.\n * Returns big-endian 2-byte checksum.\n */\nfunction crc16Ccitt(data: Uint8Array): Uint8Array {\n let crc = 0x0000;\n\n for (const byte of data) {\n crc ^= byte << 8;\n\n for (let i = 0; i < 8; i++) {\n if ((crc & 0x8000) !== 0) {\n crc = ((crc << 1) ^ 0x1021) & 0xffff;\n } else {\n crc = (crc << 1) & 0xffff;\n }\n }\n }\n\n return new Uint8Array([(crc >> 8) & 0xff, crc & 0xff]);\n}\n\nfunction base64ToBytes(input: string): Uint8Array {\n // base64url -> base64\n let normalized = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\n // Add padding if needed.\n const padding = normalized.length % 4;\n if (padding === 2) {\n normalized += \"==\";\n } else if (padding === 3) {\n normalized += \"=\";\n } else if (padding !== 0) {\n throw new Error(\"Invalid base64 TON address\");\n }\n\n // Node.js / bundlers\n if (typeof Buffer !== \"undefined\") {\n return new Uint8Array(Buffer.from(normalized, \"base64\"));\n }\n\n // Browser fallback\n if (typeof atob !== \"undefined\") {\n const binary = atob(normalized);\n const bytes = new Uint8Array(binary.length);\n\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n\n return bytes;\n }\n\n throw new Error(\"No base64 decoder available\");\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n if (hex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string\");\n }\n\n const bytes = new Uint8Array(hex.length / 2);\n\n for (let i = 0; i < bytes.length; i++) {\n const byte = Number.parseInt(hex.slice(i * 2, i * 2 + 2), 16);\n\n if (Number.isNaN(byte)) {\n throw new Error(\"Invalid hex string\");\n }\n\n bytes[i] = byte;\n }\n\n return bytes;\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\nfunction isRawTonAddress(address: string): boolean {\n return /^-?\\d+:[0-9a-fA-F]{64}$/.test(address);\n}\n\nfunction parseRawTonAddress(address: string): ParsedTonAddress {\n const [workchainPart, hashPart] = address.split(\":\");\n\n if (!workchainPart || !hashPart) {\n throw new Error(\"Invalid raw TON address\");\n }\n\n const workchain = Number(workchainPart);\n\n if (!Number.isInteger(workchain)) {\n throw new Error(\"Invalid TON workchain\");\n }\n\n if (!/^[0-9a-fA-F]{64}$/.test(hashPart)) {\n throw new Error(\"Invalid TON address hash\");\n }\n\n return {\n workchain,\n hash: hexToBytes(hashPart),\n isUserFriendly: false,\n };\n}\n\nfunction parseUserFriendlyTonAddress(address: string): ParsedTonAddress {\n // TON user-friendly address is 36 bytes encoded as base64/base64url,\n // usually 48 chars without padding.\n if (!/^[A-Za-z0-9+/_-]{48}$/.test(address)) {\n throw new Error(\"Invalid user-friendly TON address format\");\n }\n\n const data = base64ToBytes(address);\n\n if (data.length !== 36) {\n throw new Error(\"Invalid user-friendly TON address length\");\n }\n\n const body = data.slice(0, 34);\n const checksum = data.slice(34, 36);\n const expectedChecksum = crc16Ccitt(body);\n\n if (checksum[0] !== expectedChecksum[0] || checksum[1] !== expectedChecksum[1]) {\n throw new Error(\"Invalid TON address checksum\");\n }\n\n const flags = data[0];\n\n const isTestOnly = (flags & 0x80) !== 0;\n const tag = flags & 0x7f;\n\n // 0x11 = bounceable, 0x51 = non-bounceable.\n // With testOnly bit added: 0x91 / 0xd1.\n if (tag !== 0x11 && tag !== 0x51) {\n throw new Error(\"Invalid TON address flags\");\n }\n\n const isBounceable = tag === 0x11;\n\n const workchainByte = data[1];\n const workchain = workchainByte === 0xff ? -1 : workchainByte;\n\n const hash = data.slice(2, 34);\n\n if (hash.length !== 32) {\n throw new Error(\"Invalid TON address hash length\");\n }\n\n return {\n workchain,\n hash,\n isUserFriendly: true,\n isBounceable,\n isTestOnly,\n };\n}\n//#endregion\n","import Big from \"big.js\";\nimport { Service, type TokenConfig } from \"@stableflow/core\";\n\nexport const formatQuoteError = (error: any, options: { service: Service; fromToken: TokenConfig; }) => {\n const { service, fromToken } = options;\n\n const defaultErrorMessage = \"Failed to get quote, please try again later\";\n\n if (service === Service.OneClick) {\n const getQuoteErrorMessage = (): { message: string; sourceMessage: string; } => {\n const _messageResult = {\n message: defaultErrorMessage,\n sourceMessage: error?.response?.data?.message || defaultErrorMessage,\n };\n if (\n error?.response?.data?.message &&\n error?.response?.data?.message !== \"Internal server error\"\n ) {\n // quote failed, maybe out of liquidity\n if (error?.response?.data?.message === \"Failed to get quote\") {\n _messageResult.message = \"Amount exceeds max\";\n return _messageResult;\n }\n // Amount is too low for bridge\n if (error?.response?.data?.message?.includes(\"Amount is too low for bridge, try at least\")) {\n const match = error.response.data.message.match(/try at least\\s+(\\d+(?:\\.\\d+)?)/i);\n let minimumAmount = match ? match[1] : Big(1).times(10 ** fromToken.decimals).toFixed(0);\n minimumAmount = Big(minimumAmount).div(10 ** fromToken.decimals).toFixed(fromToken.decimals);\n _messageResult.message = `Amount is too low, at least ${minimumAmount}`;\n return _messageResult;\n }\n return _messageResult;\n }\n // Unknown error\n return _messageResult;\n };\n const onclickErrMsg = getQuoteErrorMessage();\n return {\n serviceType: service,\n error: onclickErrMsg.message,\n };\n }\n\n return {\n serviceType: service,\n error: error?.message || defaultErrorMessage,\n };\n};\n","import { postRequest } from '@stableflow/core';\n\nexport async function quoteSignature(params: any) {\n const response: any = await postRequest(\"/v0/cctp/sign\", params);\n return response.data ?? {};\n}\n","import Big from \"big.js\";\n\nexport const addThousandSeparator = (numberString: string) => {\n if (!numberString) return \"0\";\n const parts = String(numberString).split(\".\");\n const integerPart = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n const decimalPart = parts[1] ? `.${parts[1]}` : \"\";\n return integerPart + decimalPart;\n};\n\nexport const formatNumber = (\n value: string | number | Big.Big | undefined,\n precision: number,\n isSimple?: boolean,\n options?: {\n prefix?: string;\n isLTIntegerZero?: boolean;\n isZeroPrecision?: boolean;\n isShort?: boolean;\n isShortUppercase?: boolean;\n round?: Big.RoundingMode;\n isLessPrecision?: boolean;\n }\n): any => {\n const {\n prefix = \"\",\n isLTIntegerZero,\n isZeroPrecision,\n isShort,\n isShortUppercase,\n round = Big.roundHalfUp,\n isLessPrecision = true,\n } = options || {};\n\n const isValid = () => {\n try {\n if (!value) return false;\n Big(value);\n return true;\n } catch (err: any) {\n return false;\n }\n };\n\n if (!value || !isValid() || Big(value).eq(0)) {\n if (isSimple) {\n if (isZeroPrecision) {\n return `${prefix}${Big(0).toFixed(precision, round)}`;\n }\n return `${prefix}0`;\n }\n if (isZeroPrecision) {\n return {\n integer: `${prefix}0`,\n decimal: Big(0).toFixed(precision, round).replace(/^\\d/, \"\")\n };\n }\n return {\n integer: `${prefix}0`,\n decimal: \"\"\n };\n }\n\n if (isLessPrecision && Big(value).lt(Big(10).pow(-precision))) {\n if (isSimple) {\n return `< ${prefix}${Big(10).pow(-precision).toFixed(precision, round)}`;\n }\n if (isLTIntegerZero) {\n return {\n integer: `< ${prefix}0`,\n decimal: Big(10)\n .pow(-precision)\n .toFixed(precision, round)\n .replace(/^\\d/, \"\")\n };\n }\n return {\n integer: \"\",\n decimal: `< ${prefix}${Big(10).pow(-precision).toFixed(precision, round)}`\n };\n }\n\n const finalValue = addThousandSeparator(Big(value).toFixed(precision, round));\n const firstPart = finalValue.split(\".\")[0];\n let secondPart = finalValue.split(\".\")[1] || \"\";\n if (secondPart) {\n secondPart = \".\" + secondPart;\n }\n if (isSimple) {\n if (isShort) {\n const formatter = (split: number, unit: string): string => {\n const _num = Big(value)\n .div(split)\n .toFixed(precision, 0)\n .replace(/(?:\\.0*|(\\.\\d+?)0+)$/, \"$1\");\n const inter = _num.split(\".\")?.[0]?.replace(/\\d(?=(\\d{3})+\\b)/g, \"$&,\");\n const decimal = _num.split(\".\")?.[1] ?? \"\";\n return `${prefix}${inter}${decimal ? \".\" + decimal : \"\"}${unit}`;\n };\n if (Big(value).gte(1e12)) {\n return formatter(1e12, isShortUppercase ? \"T\" : \"t\");\n }\n if (Big(value).gte(1e9)) {\n return formatter(1e9, isShortUppercase ? \"B\" : \"b\");\n }\n if (Big(value).gte(1e6)) {\n return formatter(1e6, isShortUppercase ? \"M\" : \"m\");\n }\n if (Big(value).gte(1e3)) {\n return formatter(1e3, isShortUppercase ? \"K\" : \"k\");\n }\n }\n if (isZeroPrecision) {\n return `${prefix}${firstPart}${secondPart}`;\n }\n return `${prefix}${firstPart}${secondPart.replace(/[.]?0*$/, \"\")}`;\n }\n if (isZeroPrecision) {\n return {\n integer: `${prefix}${firstPart}`,\n decimal: secondPart\n };\n }\n return {\n integer: `${prefix}${firstPart}`,\n decimal: secondPart.replace(/[.]?0*$/, \"\")\n };\n};\n","import { usdt0Chains } from \"@stableflow/core\";\nimport { LAYERZZERO_CHAINS, type LayerZeroChainConfig } from \"../utils\";\n\ninterface Usdt0Config extends LayerZeroChainConfig {\n contractAddress: string;\n oft?: string;\n oftLegacy?: string;\n oftMultiHopComposer?: string;\n oftTetherTokenOFTExtension?: string;\n confirmations: number;\n lzReceiveOptionGas: number;\n lzReceiveOptionGasLegacy: number;\n composeOptionGas?: number;\n oftApprovalRequired?: boolean;\n oftLegacyApprovalRequired?: boolean;\n}\n\n// LayerZero chain configuration\n// blockTime: Average block time in seconds, fetched from https://chainspect.app/\n// chainKey: LayerZero chain identifier for querying default configurations\n// confirmations: Default block confirmations for source chain, fetched from https://layerzeroscan.com/tools/defaults (Send Confirmations)\n// For more accurate confirmation counts, visit https://layerzeroscan.com/application/usdt0, filter by the desired source chain, and check the \"confirmations\" value at the bottom of the page.\n// DVN count: USDT0 uses 2 DVNs (fixed value)\nexport const USDT0_CONFIG: Record<string, Usdt0Config> = {\n Ethereum: {\n contractAddress: \"0xdac17f958d2ee523a2206206994597c13d831ec7\",\n oft: \"0x6C96dE32CEa08842dcc4058c14d3aaAD7Fa41dee\",\n oftLegacy: \"0x1f748c76de468e9d11bd340fa9d5cbadf315dfb0\",\n ...LAYERZZERO_CHAINS[\"Ethereum\"],\n confirmations: 15, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n oftApprovalRequired: true,\n oftLegacyApprovalRequired: true,\n },\n Arbitrum: {\n contractAddress: \"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9\",\n oft: \"0x14E4A1B13bf7F943c8ff7C51fb60FA964A298D92\",\n oftLegacy: \"0x77652d5aba086137b595875263fc200182919b92\",\n oftMultiHopComposer: \"0x759BA420bF1ded1765F18C2DC3Fc57A1964A2Ad1\",\n ...LAYERZZERO_CHAINS[\"Arbitrum\"],\n confirmations: 60, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n oftApprovalRequired: false,\n oftLegacyApprovalRequired: true,\n },\n Polygon: {\n contractAddress: \"0xc2132D05D31c914a87C6611C10748AEb04B58e8F\",\n oft: \"0x6BA10300f0DC58B7a1e4c0e41f5daBb7D7829e13\",\n ...LAYERZZERO_CHAINS[\"Polygon\"],\n confirmations: 32, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n Optimism: {\n contractAddress: \"0x01bFF41798a0BcF287b996046Ca68b395DbC1071\",\n oft: \"0xF03b4d9AC1D5d1E7c4cEf54C2A313b9fe051A0aD\",\n ...LAYERZZERO_CHAINS[\"Optimism\"],\n confirmations: 450, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n Berachain: {\n contractAddress: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n oft: \"0x3Dc96399109df5ceb2C226664A086140bD0379cB\",\n oftTetherTokenOFTExtension: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n ...LAYERZZERO_CHAINS[\"Berachain\"],\n confirmations: 60, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n Solana: {\n contractAddress: \"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB\",\n oftLegacy: \"Fuww9mfc8ntAwxPUzFia7VJFAdvLppyZwhPJoXySZXf7\",\n ...LAYERZZERO_CHAINS[\"Solana\"],\n confirmations: 128, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 200000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 500000,\n oftLegacyApprovalRequired: false,\n },\n Tron: {\n contractAddress: \"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\",\n oftLegacy: \"TFG4wBaDQ8sHWWP1ACeSGnoNR6RRzevLPt\",\n ...LAYERZZERO_CHAINS[\"Tron\"],\n confirmations: 5, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 300000,\n lzReceiveOptionGasLegacy: 300000,\n composeOptionGas: 500000,\n oftLegacyApprovalRequired: true,\n },\n \"X Layer\": {\n contractAddress: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n oft: \"0x94bcca6bdfd6a61817ab0e960bfede4984505554\",\n ...LAYERZZERO_CHAINS[\"X Layer\"],\n confirmations: 9000, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Ton\": {\n contractAddress: \"EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs\",\n oftLegacy: \"EQAd31gAUhdO0d0NZsNb_cGl_Maa9PSuNhVLE9z8bBSjX6Gq\",\n eid: 30343,\n chainKey: \"ton\",\n blockTime: 3,\n confirmations: 2,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftLegacyApprovalRequired: false,\n },\n \"Plasma\": {\n contractAddress: \"0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb\",\n oft: \"0x02ca37966753bDdDf11216B73B16C1dE756A7CF9\",\n ...LAYERZZERO_CHAINS[\"Plasma\"],\n confirmations: 1800, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Mantle\": {\n contractAddress: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n oft: \"0xcb768e263FB1C62214E7cab4AA8d036D76dc59CC\",\n ...LAYERZZERO_CHAINS[\"Mantle\"],\n confirmations: 2000, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"MegaETH\": {\n contractAddress: \"0xb8ce59fc3717ada4c02eadf9682a9e934f625ebb\",\n oft: \"0x9151434b16b9763660705744891fa906f660ecc5\",\n ...LAYERZZERO_CHAINS[\"MegaETH\"],\n confirmations: 5400,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Ink\": {\n contractAddress: \"0x0200C29006150606B650577BBE7B6248F58470c1\",\n oft: \"0x1cB6De532588fCA4a21B7209DE7C456AF8434A65\",\n ...LAYERZZERO_CHAINS[\"Ink\"],\n confirmations: 450,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Stable\": {\n contractAddress: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n oft: \"0xedaba024be4d87974d5aB11C6Dd586963CcCB027\",\n ...LAYERZZERO_CHAINS[\"Stable\"],\n confirmations: 3600,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Celo\": {\n contractAddress: \"0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e\",\n oftLegacy: \"0xf10E161027410128E63E75D0200Fb6d34b2db243\",\n ...LAYERZZERO_CHAINS[\"Celo\"],\n confirmations: 10,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftLegacyApprovalRequired: true,\n },\n \"Sei\": {\n contractAddress: \"0x9151434b16b9763660705744891fA906F660EcC5\",\n oft: \"0x56Fe74A2e3b484b921c447357203431a3485CC60\",\n ...LAYERZZERO_CHAINS[\"Sei\"],\n confirmations: 2000,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Flare\": {\n contractAddress: \"0xe7cd86e13AC4309349F30B3435a9d337750fC82D\",\n oft: \"0x567287d2A9829215a37e3B88843d32f9221E7588\",\n ...LAYERZZERO_CHAINS[\"Flare\"],\n confirmations: 500,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n};\n\nexport const LZ_RECEIVE_VALUE: Record<string, any> = {\n Solana: 2039280,\n};\n\n// https://docs.layerzero.network/v2/developers/evm/tooling/layerzeroscan#transaction-statuses\n// https://scan.layerzero-api.com/v1/swagger\nexport const LzScanStatus = {\n // The message has been successfully sent and received by the destination chain.\n Delivered: \"DELIVERED\",\n // The message is currently being transmitted between chains and has not yet reached its destination.\n InFlight: \"INFLIGHT\",\n // The message arrived at the destination, but reverted or ran out of gas during execution and needs to be retried.\n PayloadStored: \"PAYLOAD_STORED\",\n // The transaction encountered an error and did not complete.\n Failed: \"FAILED\",\n // A previous message nonce has a stored payload, halting the current transaction.\n Blocked: \"BLOCKED\",\n // The system is validating the finality of a transaction amidst potential high gas replacements or block reorgs.\n Confirming: \"CONFIRMING\",\n ApplicationBurned: \"APPLICATION_BURNED\",\n ApplicationSkipped: \"APPLICATION_SKIPPED\",\n UnresolvableCommand: \"UNRESOLVABLE_COMMAND\",\n MalformedCommand: \"MALFORMED_COMMAND\",\n};\n\nexport type LzScanStatus = (typeof LzScanStatus)[keyof typeof LzScanStatus];\n\nexport const LzScanSourceStatus = {\n Waiting: \"WAITING\",\n ValidatingTx: \"VALIDATING_TX\",\n Succeeded: \"SUCCEEDED\",\n WaitingForHashDelivered: \"WAITING_FOR_HASH_DELIVERED\",\n UnresolvableCommand: \"UNRESOLVABLE_COMMAND\",\n MalformedCommand: \"MALFORMED_COMMAND\",\n};\nexport type LzScanSourceStatus = (typeof LzScanSourceStatus)[keyof typeof LzScanSourceStatus];\n\nexport const LzScanDestinationStatus = {\n Waiting: \"WAITING\",\n ValidatingTx: \"VALIDATING_TX\",\n Succeeded: \"SUCCEEDED\",\n PayloadStored: \"PAYLOAD_STORED\",\n};\nexport type LzScanDestinationStatus = (typeof LzScanDestinationStatus)[keyof typeof LzScanDestinationStatus];\n\nexport const LzScanLzComposeStatus = {\n Waiting: \"WAITING\",\n ValidatingTx: \"VALIDATING_TX\",\n Succeeded: \"SUCCEEDED\",\n NA: \"N/A\",\n Failed: \"FAILED\",\n SimulatedReverted: \"SIMULATION_REVERTED\",\n WaitingForComposeSentEvent: \"WAITING_FOR_COMPOSE_SENT_EVENT\",\n};\nexport type LzScanLzComposeStatus = (typeof LzScanLzComposeStatus)[keyof typeof LzScanLzComposeStatus];\n\n// USDT0 DVN count (fixed value)\nexport const USDT0_DVN_COUNT = 2;\n\nexport const USDT0_LEGACY_FEE = 0.0001; // 0.01%, 10000 usdt cost 1 usdt\nexport const USDT0_LEGACY_MESH_TRANSFTER_FEE = 0.0003; // 0.03% https://docs.usdt0.to/tutorial/how-to-transfer#usdt0\nexport const DATA_HEX_PROTOBUF_EXTRA = 3;\nexport const SIGNATURE_SIZE = 67;\n\nexport const MIDDLE_CHAIN_REFOUND_ADDRESS = \"0x654E7B96E1DE0b54E53D9ae8082fC2219E66dAC3\";\nexport const MIDDLE_TOKEN_CHAIN = usdt0Chains[\"arb\"];\nexport const MIDDLE_CHAIN_LAYERZERO_EXECUTOR = \"0x53812Feae0fd2C43f8E6D8847A7f5d035F1d1f8f\";\n\n","export const OFT_ABI = [\n {\n inputs: [],\n name: \"approvalRequired\",\n outputs: [\n { internalType: \"bool\", name: \"\", type: \"bool\" }\n ],\n stateMutability: \"pure\",\n type: \"function\"\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"uint32\", name: \"dstEid\", type: \"uint32\" },\n { internalType: \"bytes32\", name: \"to\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"amountLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"minAmountLD\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"extraOptions\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"composeMsg\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"oftCmd\", type: \"bytes\" }\n ],\n internalType: \"struct SendParam\",\n name: \"_sendParam\",\n type: \"tuple\"\n }\n ],\n name: \"quoteOFT\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"minAmountLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"maxAmountLD\", type: \"uint256\" }\n ],\n internalType: \"struct OFTLimit\",\n name: \"oftLimit\",\n type: \"tuple\"\n },\n {\n components: [\n { internalType: \"int256\", name: \"feeAmountLD\", type: \"int256\" },\n { internalType: \"string\", name: \"description\", type: \"string\" }\n ],\n internalType: \"struct OFTFeeDetail[]\",\n name: \"oftFeeDetails\",\n type: \"tuple[]\"\n },\n {\n components: [\n { internalType: \"uint256\", name: \"amountSentLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"amountReceivedLD\", type: \"uint256\" }\n ],\n internalType: \"struct OFTReceipt\",\n name: \"oftReceipt\",\n type: \"tuple\"\n }\n ],\n stateMutability: \"view\",\n type: \"function\"\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"uint32\", name: \"dstEid\", type: \"uint32\" },\n { internalType: \"bytes32\", name: \"to\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"amountLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"minAmountLD\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"extraOptions\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"composeMsg\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"oftCmd\", type: \"bytes\" }\n ],\n internalType: \"struct SendParam\",\n name: \"_sendParam\",\n type: \"tuple\"\n },\n { internalType: \"bool\", name: \"_payInLzToken\", type: \"bool\" }\n ],\n name: \"quoteSend\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"nativeFee\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"lzTokenFee\", type: \"uint256\" }\n ],\n internalType: \"struct MessagingFee\",\n name: \"msgFee\",\n type: \"tuple\"\n }\n ],\n stateMutability: \"view\",\n type: \"function\"\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"uint32\", name: \"dstEid\", type: \"uint32\" },\n { internalType: \"bytes32\", name: \"to\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"amountLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"minAmountLD\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"extraOptions\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"composeMsg\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"oftCmd\", type: \"bytes\" }\n ],\n internalType: \"struct SendParam\",\n name: \"_sendParam\",\n type: \"tuple\"\n },\n {\n components: [\n { internalType: \"uint256\", name: \"nativeFee\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"lzTokenFee\", type: \"uint256\" }\n ],\n internalType: \"struct MessagingFee\",\n name: \"_fee\",\n type: \"tuple\"\n },\n { internalType: \"address\", name: \"_refundAddress\", type: \"address\" }\n ],\n name: \"send\",\n outputs: [\n {\n components: [\n { internalType: \"bytes32\", name: \"guid\", type: \"bytes32\" },\n { internalType: \"uint64\", name: \"nonce\", type: \"uint64\" },\n {\n components: [\n { internalType: \"uint256\", name: \"nativeFee\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"lzTokenFee\", type: \"uint256\" }\n ],\n internalType: \"struct MessagingFee\",\n name: \"fee\",\n type: \"tuple\"\n }\n ],\n internalType: \"struct MessagingReceipt\",\n name: \"msgReceipt\",\n type: \"tuple\"\n },\n {\n components: [\n { internalType: \"uint256\", name: \"amountSentLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"amountReceivedLD\", type: \"uint256\" }\n ],\n internalType: \"struct OFTReceipt\",\n name: \"oftReceipt\",\n type: \"tuple\"\n }\n ],\n stateMutability: \"payable\",\n type: \"function\"\n }\n];\n\nexport const SOLANA_IDL = {\n \"metadata\": {\n \"name\": \"oft\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Created with Anchor\"\n },\n \"instructions\": [\n {\n \"name\": \"burn\",\n \"discriminator\": [\n 116,\n 110,\n 29,\n 56,\n 107,\n 219,\n 42,\n 93\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"BurnParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"deposit_local\",\n \"discriminator\": [\n 183,\n 51,\n 160,\n 173,\n 94,\n 131,\n 201,\n 173\n ],\n \"accounts\": [\n {\n \"name\": \"signer\",\n \"signer\": true\n },\n {\n \"name\": \"token_source\",\n \"writable\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"DepositLocalParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"init_oft\",\n \"discriminator\": [\n 182,\n 169,\n 147,\n 16,\n 201,\n 45,\n 76,\n 23\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"oft_store\",\n \"writable\": true\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"endpoint_settings\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"InitOFTParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lz_receive\",\n \"discriminator\": [\n 8,\n 179,\n 120,\n 109,\n 33,\n 118,\n 189,\n 80\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"peer\"\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"to_address\",\n \"optional\": true\n },\n {\n \"name\": \"token_dest\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"associated_token_program\"\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"LzReceiveParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lz_receive_types_info\",\n \"discriminator\": [\n 43,\n 148,\n 213,\n 93,\n 101,\n 127,\n 37,\n 170\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"lz_receive_types_accounts\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"LzReceiveParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lz_receive_types_v2\",\n \"discriminator\": [\n 109,\n 157,\n 200,\n 142,\n 138,\n 223,\n 159,\n 164\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"token_mint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"LzReceiveParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"LzReceiveTypesV2Result\"\n }\n }\n },\n {\n \"name\": \"nilify\",\n \"discriminator\": [\n 143,\n 136,\n 129,\n 199,\n 36,\n 35,\n 160,\n 85\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"NilifyParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"oft_version\",\n \"discriminator\": [\n 179,\n 115,\n 253,\n 187,\n 88,\n 22,\n 80,\n 64\n ],\n \"accounts\": [],\n \"args\": [],\n \"returns\": {\n \"defined\": {\n \"name\": \"Version\"\n }\n }\n },\n {\n \"name\": \"quote_oft\",\n \"discriminator\": [\n 179,\n 255,\n 92,\n 202,\n 251,\n 82,\n 82,\n 118\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\"\n },\n {\n \"name\": \"peer\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"QuoteOFTParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"QuoteOFTResult\"\n }\n }\n },\n {\n \"name\": \"quote_send\",\n \"discriminator\": [\n 207,\n 0,\n 49,\n 214,\n 160,\n 211,\n 76,\n 211\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\"\n },\n {\n \"name\": \"peer\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"QuoteSendParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingFee\"\n }\n }\n },\n {\n \"name\": \"quote_send_credits\",\n \"discriminator\": [\n 166,\n 117,\n 54,\n 109,\n 220,\n 29,\n 112,\n 107\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\"\n },\n {\n \"name\": \"peer\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"QuoteSendCreditsParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingFee\"\n }\n }\n },\n {\n \"name\": \"quote_withdraw_remote\",\n \"discriminator\": [\n 198,\n 64,\n 228,\n 34,\n 69,\n 19,\n 122,\n 58\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\"\n },\n {\n \"name\": \"peer\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"QuoteSendParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingFee\"\n }\n }\n },\n {\n \"name\": \"send\",\n \"discriminator\": [\n 102,\n 251,\n 20,\n 187,\n 65,\n 75,\n 12,\n 69\n ],\n \"accounts\": [\n {\n \"name\": \"signer\",\n \"signer\": true\n },\n {\n \"name\": \"peer\"\n },\n {\n \"name\": \"oft_store\",\n \"writable\": true\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_source\",\n \"writable\": true\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SendParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"send_credits\",\n \"discriminator\": [\n 92,\n 161,\n 204,\n 14,\n 139,\n 189,\n 105,\n 227\n ],\n \"accounts\": [\n {\n \"name\": \"planner\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"peer\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SendCreditsParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingReceipt\"\n }\n }\n },\n {\n \"name\": \"set_oft_config\",\n \"discriminator\": [\n 55,\n 126,\n 87,\n 217,\n 159,\n 66,\n 24,\n 194\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\",\n \"writable\": true\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SetOFTConfigParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"set_peer_config\",\n \"discriminator\": [\n 79,\n 187,\n 168,\n 57,\n 139,\n 140,\n 93,\n 47\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"peer\",\n \"writable\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SetPeerConfigParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"withdraw_fees\",\n \"discriminator\": [\n 198,\n 212,\n 171,\n 109,\n 144,\n 215,\n 174,\n 89\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"token_dest\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"WithdrawFeesParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"withdraw_local\",\n \"discriminator\": [\n 112,\n 250,\n 134,\n 10,\n 96,\n 9,\n 236,\n 176\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"token_dest\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"WithdrawLocalParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"withdraw_remote\",\n \"discriminator\": [\n 135,\n 200,\n 45,\n 240,\n 165,\n 104,\n 44,\n 102\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"peer\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SendParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingReceipt\"\n }\n }\n }\n ],\n \"accounts\": [\n {\n \"name\": \"Credits\",\n \"discriminator\": [\n 167,\n 92,\n 156,\n 89,\n 224,\n 222,\n 250,\n 237\n ]\n },\n {\n \"name\": \"EndpointSettings\",\n \"discriminator\": [\n 221,\n 232,\n 73,\n 56,\n 10,\n 66,\n 72,\n 14\n ]\n },\n {\n \"name\": \"OFTStore\",\n \"discriminator\": [\n 195,\n 215,\n 104,\n 134,\n 185,\n 195,\n 240,\n 114\n ]\n },\n {\n \"name\": \"PeerConfig\",\n \"discriminator\": [\n 181,\n 157,\n 86,\n 198,\n 33,\n 193,\n 94,\n 203\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"AddressLookupTableSet\",\n \"discriminator\": [\n 54,\n 206,\n 97,\n 134,\n 147,\n 43,\n 12,\n 34\n ]\n },\n {\n \"name\": \"BurnAndNilifyAdminSet\",\n \"discriminator\": [\n 198,\n 129,\n 215,\n 13,\n 129,\n 143,\n 91,\n 13\n ]\n },\n {\n \"name\": \"CreditsReceived\",\n \"discriminator\": [\n 247,\n 1,\n 147,\n 84,\n 187,\n 118,\n 0,\n 23\n ]\n },\n {\n \"name\": \"CreditsSent\",\n \"discriminator\": [\n 227,\n 230,\n 87,\n 90,\n 214,\n 189,\n 44,\n 241\n ]\n },\n {\n \"name\": \"EnforcedOptionsSet\",\n \"discriminator\": [\n 146,\n 122,\n 60,\n 148,\n 172,\n 173,\n 245,\n 181\n ]\n },\n {\n \"name\": \"FeeBpsSet\",\n \"discriminator\": [\n 157,\n 56,\n 175,\n 190,\n 219,\n 193,\n 106,\n 208\n ]\n },\n {\n \"name\": \"FeesWithdrawn\",\n \"discriminator\": [\n 234,\n 15,\n 0,\n 119,\n 148,\n 241,\n 40,\n 21\n ]\n },\n {\n \"name\": \"LocalDeposit\",\n \"discriminator\": [\n 137,\n 122,\n 12,\n 175,\n 43,\n 253,\n 64,\n 206\n ]\n },\n {\n \"name\": \"LocalWithdrawn\",\n \"discriminator\": [\n 123,\n 143,\n 13,\n 174,\n 243,\n 234,\n 207,\n 102\n ]\n },\n {\n \"name\": \"LpAdminSet\",\n \"discriminator\": [\n 204,\n 123,\n 111,\n 142,\n 215,\n 147,\n 149,\n 241\n ]\n },\n {\n \"name\": \"OFTReceived\",\n \"discriminator\": [\n 144,\n 129,\n 112,\n 67,\n 144,\n 152,\n 201,\n 42\n ]\n },\n {\n \"name\": \"OFTSent\",\n \"discriminator\": [\n 108,\n 171,\n 219,\n 2,\n 189,\n 21,\n 110,\n 110\n ]\n },\n {\n \"name\": \"PeerAddressSet\",\n \"discriminator\": [\n 23,\n 136,\n 173,\n 207,\n 43,\n 0,\n 240,\n 232\n ]\n },\n {\n \"name\": \"PlannerSet\",\n \"discriminator\": [\n 15,\n 204,\n 218,\n 142,\n 168,\n 147,\n 236,\n 100\n ]\n },\n {\n \"name\": \"RemoteWithdrawReceived\",\n \"discriminator\": [\n 19,\n 91,\n 253,\n 185,\n 110,\n 208,\n 124,\n 198\n ]\n },\n {\n \"name\": \"RemoteWithdrawn\",\n \"discriminator\": [\n 97,\n 15,\n 220,\n 84,\n 178,\n 82,\n 9,\n 250\n ]\n },\n {\n \"name\": \"SuperAdminSet\",\n \"discriminator\": [\n 138,\n 32,\n 131,\n 104,\n 28,\n 14,\n 79,\n 204\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"Unauthorized\"\n },\n {\n \"code\": 6001,\n \"name\": \"InvalidSender\"\n },\n {\n \"code\": 6002,\n \"name\": \"InvalidDecimals\"\n },\n {\n \"code\": 6003,\n \"name\": \"SlippageExceeded\"\n },\n {\n \"code\": 6004,\n \"name\": \"InvalidTokenDest\"\n },\n {\n \"code\": 6005,\n \"name\": \"InsufficientFeeBalance\"\n },\n {\n \"code\": 6006,\n \"name\": \"InvalidAmount\"\n },\n {\n \"code\": 6007,\n \"name\": \"InsufficientCredits\"\n },\n {\n \"code\": 6008,\n \"name\": \"InvalidEID\"\n },\n {\n \"code\": 6009,\n \"name\": \"InvalidMessage\"\n },\n {\n \"code\": 6010,\n \"name\": \"InvalidFeeBps\"\n },\n {\n \"code\": 6011,\n \"name\": \"TONComposeNotSupported\"\n }\n ],\n \"types\": [\n {\n \"name\": \"AccountMetaRef\",\n \"docs\": [\n \"Account metadata for V2 execution planning.\",\n \"Used by the Executor to construct the final transaction.\",\n \"\",\n \"V2 removes the legacy is_signer flag from V1's AccountMeta.\",\n \"Instead, signer roles are explicitly declared through AddressLocator variants.\",\n \"This provides clearer semantics and enables multiple signer support.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pubkey\",\n \"docs\": [\n \"The account address locator - supports multiple resolution strategies\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"AddressLocator\"\n }\n }\n },\n {\n \"name\": \"is_writable\",\n \"docs\": [\n \"Whether the account should be writable in the final transaction\"\n ],\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"AddressLocator\",\n \"docs\": [\n \"A generic account locator used in LZ execution planning for V2.\",\n \"Can reference the address directly, via ALT, or as a placeholder.\",\n \"\",\n \"This enum enables the compact account referencing design of V2, supporting:\",\n \"- OApps to request multiple signer accounts, not just a single Executor EOA\",\n \"- Dynamic creation of writable EOA-based data accounts\",\n \"- Efficient encoding of addresses via ALTs, reducing account list size\",\n \"\",\n \"The legacy is_signer flag is removed. Instead, signer roles are explicitly\",\n \"declared through Payer and indexed Signer(u8) variants.\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Address\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"AltIndex\",\n \"fields\": [\n \"u8\",\n \"u8\"\n ]\n },\n {\n \"name\": \"Payer\"\n },\n {\n \"name\": \"Signer\",\n \"fields\": [\n \"u8\"\n ]\n },\n {\n \"name\": \"Context\"\n }\n ]\n }\n },\n {\n \"name\": \"AddressLookupTableSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"BurnAndNilifyAdminSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"BurnParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"sender\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"payload_hash\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Credits\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"entries\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"CreditsEntry\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"CreditsBatch\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"credits_arbitrum\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_celo\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_eth\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_solana\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_ton\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_tron\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"CreditsEntry\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"CreditsReceived\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"message\",\n \"type\": \"bytes\"\n }\n ]\n }\n },\n {\n \"name\": \"CreditsSent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"credits_batch\",\n \"type\": {\n \"defined\": {\n \"name\": \"CreditsBatch\"\n }\n }\n },\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"DepositLocalParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EndpointSettings\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lz_token_mint\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"EnforcedOptions\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"withdraw_remote\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_oft\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_credits\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_oft_and_call\",\n \"type\": \"bytes\"\n }\n ]\n }\n },\n {\n \"name\": \"EnforcedOptionsSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"send\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_and_call\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_credits\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"withdraw_remote\",\n \"type\": \"bytes\"\n }\n ]\n }\n },\n {\n \"name\": \"FeeBpsSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"fee_bps\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"FeesWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"to\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"InitOFTParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"super_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"endpoint_program\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"alt\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"Instruction\",\n \"docs\": [\n \"The list of instructions that can be executed in the LzReceive transaction.\",\n \"\",\n \"V2's multi-instruction model enables complex patterns such as:\",\n \"- Preprocessing steps before lz_receive (e.g., account initialization)\",\n \"- Postprocessing steps after lz_receive (e.g., verification, cleanup)\",\n \"- ABA messaging patterns with additional LayerZero sends\",\n \"- Conditional execution flows based on message content\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"LzReceive\",\n \"fields\": [\n {\n \"name\": \"accounts\",\n \"docs\": [\n \"Account list for the lz_receive instruction\",\n \"Uses AddressLocator for flexible address resolution\"\n ],\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"AccountMetaRef\"\n }\n }\n }\n }\n ]\n },\n {\n \"name\": \"Standard\",\n \"fields\": [\n {\n \"name\": \"program_id\",\n \"docs\": [\n \"Target program ID for the custom instruction\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"accounts\",\n \"docs\": [\n \"Account list for the custom instruction\",\n \"Uses same AddressLocator system as LzReceive\"\n ],\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"AccountMetaRef\"\n }\n }\n }\n },\n {\n \"name\": \"data\",\n \"docs\": [\n \"Instruction data payload\",\n \"Raw bytes containing the instruction's parameters\"\n ],\n \"type\": \"bytes\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"LocalDeposit\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"LocalWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"to\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"LpAdminSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"LzReceiveParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"sender\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"message\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"extra_data\",\n \"type\": \"bytes\"\n }\n ]\n }\n },\n {\n \"name\": \"LzReceiveTypesV2Result\",\n \"docs\": [\n \"Output of the lz_receive_types_v2 instruction.\",\n \"\",\n \"This structure enables the multi-instruction execution model where OApps can\",\n \"define multiple instructions to be executed atomically by the Executor.\",\n \"The Executor constructs a single transaction containing all returned instructions.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"context_version\",\n \"docs\": [\n \"The version of context account\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"alts\",\n \"docs\": [\n \"ALTs required for this execution context\",\n \"Used by the Executor to resolve AltIndex references in AccountMetaRef\",\n \"Enables efficient account list compression for complex transactions\"\n ],\n \"type\": {\n \"vec\": \"pubkey\"\n }\n },\n {\n \"name\": \"instructions\",\n \"docs\": [\n \"The complete list of instructions required for LzReceive execution\",\n \"MUST include exactly one LzReceive instruction\",\n \"MAY include additional Standard instructions for preprocessing/postprocessing\",\n \"Instructions are executed in the order returned\"\n ],\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"Instruction\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"MessagingFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"native_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lz_token_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"MessagingReceipt\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee\",\n \"type\": {\n \"defined\": {\n \"name\": \"MessagingFee\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"NilifyParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"sender\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"payload_hash\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"OFTFeeDetail\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"fee_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"description\",\n \"type\": \"string\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTLimits\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"min_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTReceipt\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_sent_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount_received_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTReceived\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_received_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTSent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"from\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_sent_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount_received_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTStore\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"token_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_escrow\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"endpoint_program\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"fee_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"super_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"planner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lp_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"burn_and_nilify_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"alt\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"PeerAddressSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PeerConfig\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"peer_address\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"enforced_options\",\n \"type\": {\n \"defined\": {\n \"name\": \"EnforcedOptions\"\n }\n }\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"PeerConfigParam\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"PeerAddress\",\n \"fields\": [\n {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n ]\n },\n {\n \"name\": \"EnforcedOptions\",\n \"fields\": [\n {\n \"name\": \"send\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_and_call\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_credits\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"withdraw_remote\",\n \"type\": \"bytes\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"PlannerSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"QuoteOFTParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"compose_msg\",\n \"type\": {\n \"option\": \"bytes\"\n }\n },\n {\n \"name\": \"pay_in_lz_token\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"QuoteOFTResult\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"oft_limits\",\n \"type\": {\n \"defined\": {\n \"name\": \"OFTLimits\"\n }\n }\n },\n {\n \"name\": \"oft_fee_details\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"OFTFeeDetail\"\n }\n }\n }\n },\n {\n \"name\": \"oft_receipt\",\n \"type\": {\n \"defined\": {\n \"name\": \"OFTReceipt\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"QuoteSendCreditsParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"credits_batch\",\n \"type\": {\n \"defined\": {\n \"name\": \"CreditsBatch\"\n }\n }\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"pay_in_lz_token\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"QuoteSendParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"compose_msg\",\n \"type\": {\n \"option\": \"bytes\"\n }\n },\n {\n \"name\": \"pay_in_lz_token\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"RemoteWithdrawReceived\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_received_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RemoteWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SendCreditsParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"credits_batch\",\n \"type\": {\n \"defined\": {\n \"name\": \"CreditsBatch\"\n }\n }\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"native_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lz_token_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SendParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"compose_msg\",\n \"type\": {\n \"option\": \"bytes\"\n }\n },\n {\n \"name\": \"native_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lz_token_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SetOFTConfigParams\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"SuperAdmin\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"Delegate\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"Planner\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"LpAdmin\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"BurnAndNilifyAdmin\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"FeeBps\",\n \"fields\": [\n \"u16\"\n ]\n },\n {\n \"name\": \"AddressLookupTable\",\n \"fields\": [\n {\n \"option\": \"pubkey\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"SetPeerConfigParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"remote_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"config\",\n \"type\": {\n \"defined\": {\n \"name\": \"PeerConfigParam\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"SuperAdminSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"Version\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"interface\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"message\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"WithdrawFeesParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"WithdrawLocalParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n }\n ]\n};\n","import { USDT0_CONFIG, USDT0_DVN_COUNT } from \"./config\";\nimport { OFT_ABI, SOLANA_IDL } from \"./contract\";\nimport { getRequest, SendType } from \"@stableflow/core\";\nimport { Service } from \"@stableflow/core\";\nimport { OpenAPI } from '@stableflow/core';\nimport { request } from '@stableflow/core';\nimport { ExecTime } from \"@stableflow/core\";\nimport { calculateEstimateTime } from \"../utils\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\nimport Big from \"big.js\";\nimport { Csl } from \"@stableflow/core\";\n\nexport const PayInLzToken = false;\n\nexport const excludeFees: string[] = [\"estimateGasUsd\"];\n\nexport class Usdt0Service {\n public async quote(params: any) {\n const {\n dry,\n wallet,\n originChain,\n destinationChain,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n } = params;\n\n const _quoteType = `Usdt0Service ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"lime-600\", isDebug: OpenAPI.DEBUG });\n\n const originLayerzero = USDT0_CONFIG[originChain];\n const destinationLayerzero = USDT0_CONFIG[destinationChain];\n\n let originLayerzeroAddress = originLayerzero.oft;\n let destinationLayerzeroAddress = destinationLayerzero.oft;\n let dstEid = destinationLayerzero.eid;\n\n // Dynamically calculate estimated time\n const estimateTime = calculateEstimateTime({\n requiredDvnCount: USDT0_DVN_COUNT,\n originConfig: originLayerzero,\n destinationConfig: destinationLayerzero,\n });\n\n if (fromToken.chainType === \"evm\") {\n destinationLayerzeroAddress = destinationLayerzero.oft || destinationLayerzero.oftLegacy;\n let isOriginLegacy = false;\n let isDestinationLegacy = destinationLayerzeroAddress === destinationLayerzero.oftLegacy;\n if (isDestinationLegacy) {\n originLayerzeroAddress = originLayerzero.oftLegacy || originLayerzero.oft;\n isOriginLegacy = originLayerzeroAddress === originLayerzero.oftLegacy;\n }\n if (!originLayerzeroAddress) {\n originLayerzeroAddress = originLayerzero.oftLegacy;\n isOriginLegacy = true;\n if (destinationLayerzero.oftLegacy) {\n destinationLayerzeroAddress = destinationLayerzero.oftLegacy;\n isDestinationLegacy = true;\n }\n }\n const isBothLegacy = isOriginLegacy && isDestinationLegacy;\n const isBothOUpgradeable = !isOriginLegacy && !isDestinationLegacy;\n const isMultiHopComposer = !isBothLegacy && !isBothOUpgradeable;\n\n const result = await wallet.quote(Service.Usdt0, {\n dry,\n abi: OFT_ABI,\n dstEid,\n refundTo,\n recipient,\n amountWei,\n slippageTolerance,\n payInLzToken: PayInLzToken,\n fromToken,\n toToken,\n prices,\n originLayerzeroAddress,\n destinationLayerzeroAddress,\n excludeFees,\n multiHopComposer: USDT0_CONFIG[\"Arbitrum\"],\n isMultiHopComposer,\n isOriginLegacy,\n isDestinationLegacy,\n originLayerzero,\n destinationLayerzero,\n });\n\n result.estimateTime = estimateTime;\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"Usdt0Service.quote\");\n return result;\n }\n\n // source chain must be legacy\n const isOriginLegacy = true;\n originLayerzeroAddress = originLayerzero.oftLegacy;\n destinationLayerzeroAddress = destinationLayerzero.oftLegacy || destinationLayerzero.oft;\n const isDestinationLegacy = destinationLayerzeroAddress === destinationLayerzero.oftLegacy;\n const isBothLegacy = isOriginLegacy && isDestinationLegacy;\n const isMultiHopComposer = !isBothLegacy;\n\n // one is legacy, and one is upgradeable\n // should use multi hop composer\n // and special extraOptions & composeMsg\n if (isMultiHopComposer) {\n dstEid = USDT0_CONFIG[\"Arbitrum\"].eid;\n destinationLayerzeroAddress = USDT0_CONFIG[\"Arbitrum\"].oftMultiHopComposer;\n }\n\n const oftParams: any = {\n dry,\n dstEid: destinationLayerzero.eid,\n refundTo,\n recipient,\n amountWei,\n slippageTolerance,\n payInLzToken: PayInLzToken,\n fromToken,\n toToken,\n prices,\n originLayerzeroAddress,\n destinationLayerzeroAddress,\n excludeFees,\n multiHopComposer: USDT0_CONFIG[\"Arbitrum\"],\n isMultiHopComposer,\n isOriginLegacy,\n isDestinationLegacy,\n originLayerzero,\n destinationLayerzero,\n };\n\n if (fromToken.chainType === \"tron\") {\n oftParams.abi = OFT_ABI;\n }\n\n if (fromToken.chainType === \"sol\") {\n oftParams.idl = SOLANA_IDL;\n }\n\n const result = await wallet.quote(Service.Usdt0, {\n idl: SOLANA_IDL,\n ...oftParams,\n });\n\n result.estimateTime = estimateTime;\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"Usdt0Service.quote\");\n\n return result;\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const {\n fromToken,\n amountWei,\n wallet,\n prices,\n evmGasFees,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const result: any = { fees: {}, ...quoteData };\n\n const isFromTron = fromToken.chainType === \"tron\";\n const nativeTokenDecimals = fromToken.nativeToken.decimals;\n\n const estimateTransactionParams = {\n dry: false,\n ...quoteData.sendParam,\n fromToken,\n prices,\n evmGasFees,\n };\n if (isFromTron) {\n estimateTransactionParams.defaultEnergyUsed = 300000;\n estimateTransactionParams.defaultRawDataHexLength = 1000;\n }\n const ett = await wallet.estimateTransaction(estimateTransactionParams);\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n result.totalEstimateSourceGas = BigInt(Big(quoteData.fees?.nativeFee || 0).times(10 ** nativeTokenDecimals).toFixed(0)) + ett.estimateSourceGas;\n\n if (result.needApprove && wallet.estimateApprove) {\n const estApptroveGas = await wallet.estimateApprove({\n dry: false,\n amountWei,\n spender: result.approveSpender,\n fromToken,\n prices,\n });\n result.estimateApproveGas = estApptroveGas.estimateSourceGas;\n }\n\n result.totalFeesUsd = \"0\";\n for (const feeKey in result.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd).toFixed(20));\n\n if (fromToken.chainType === \"evm\") {\n const sendParams = result.sendParam?.param;\n if (\n sendParams\n && Array.isArray(sendParams)\n && sendParams[sendParams.length - 1]\n && typeof sendParams[sendParams.length - 1] === \"object\"\n && sendParams[sendParams.length - 1].gasLimit !== void 0\n ) {\n csl(\"USDT0Service estimateTransaction\", \"green-500\", \"Old gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n sendParams[sendParams.length - 1].gasLimit = ett.estimateSourceGasLimit;\n csl(\"USDT0Service estimateTransaction\", \"green-500\", \"Updated gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n }\n }\n\n return result;\n }\n\n public async send(params: any) {\n const {\n wallet,\n ...rest\n } = params;\n\n return wallet.send(SendType.SEND, rest);\n }\n\n public getStatus(params: any) {\n return getRequest(`/v0/messages/tx/${params.hash}`);\n }\n}\n\nexport default new Usdt0Service();\n","\n// https://developers.circle.com/cctp/evm-smart-contracts#tokenmessengerv2-mainnet\nexport const CCTP_TOKEN_MESSENGER: Record<string, string> = {\n [\"Ethereum\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Arbitrum\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Polygon\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Optimism\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Avalanche\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Solana\"]: \"CCTPV2vPZJS2u2BBsUoscuikbYjnpFmbFsvVuJdgUMQe\",\n};\n\nexport const CCTP_TOKEN_PROXY: Record<string, string> = {\n [\"Ethereum\"]: \"0x54Cf68aB8f68813F2a2dF20Af72D19c44485a0b2\",\n [\"Arbitrum\"]: \"0x54Cf68aB8f68813F2a2dF20Af72D19c44485a0b2\",\n [\"Polygon\"]: \"0x7A18854b695BA7efB7229c17D0E1Cd2679481D28\",\n [\"Optimism\"]: \"0x54Cf68aB8f68813F2a2dF20Af72D19c44485a0b2\",\n [\"Avalanche\"]: \"0xB6E3a1165aC3E0c370e316C27E959482460dBeDD\",\n [\"Solana\"]: \"8whUZNSbjJXC2UDRpo3PXo5MHzhptwVTTwpSYuTgQJNY\",\n [\"Base\"]: \"0x7092B8E5445Fca836B0f9780c77C38C7cbb9A43D\",\n};\n\nexport const CCTP_TOKEN_MESSENGER_ABI = [\n {\n type: \"function\",\n name: \"depositForBurn\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"amount\", type: \"uint256\" },\n { name: \"destinationDomain\", type: \"uint32\" },\n { name: \"mintRecipient\", type: \"bytes32\" },\n { name: \"burnToken\", type: \"address\" },\n { name: \"hookData\", type: \"bytes32\" },\n { name: \"maxFee\", type: \"uint256\" },\n { name: \"finalityThreshold\", type: \"uint32\" },\n ],\n outputs: [],\n },\n {\n type: \"function\",\n name: \"receiveMessage\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"message\", type: \"bytes\" },\n { name: \"attestation\", type: \"bytes\" },\n ],\n outputs: [],\n },\n];\n\nexport const CCTP_TOKEN_PROXY_ABI = [\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"originalAmount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"chargedAmount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"destinationDomain\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"mintRecipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"burnToken\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"destinationCaller\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"maxFee\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"minFinalityThreshold\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"signature\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"depositWithFee\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"userNonces\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n];\n","export const IRIS_API_URL = \"https://iris-api.circle.com/v2\";\n\nexport const CCTP_DOMAINS: Record<string, number> = {\n Ethereum: 0,\n Arbitrum: 3,\n Polygon: 7,\n Optimism: 2,\n Avalanche: 1,\n Solana: 5,\n Base: 6,\n};\n","import { CCTP_TOKEN_PROXY, CCTP_TOKEN_PROXY_ABI } from \"./contract\";\nimport { CCTP_DOMAINS } from \"./config\";\nimport { getRequest, GetStatusParams, GetStatusStableflowResponse, OpenAPI } from '@stableflow/core';\nimport { SendType } from \"@stableflow/core\";\nimport { Service } from \"@stableflow/core\";\nimport Big from \"big.js\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\n\nexport const PayInLzToken = false;\n\nconst excludeFees: string[] = [\"estimateGasUsd\"];\n\nexport class CCTPService {\n constructor() {\n }\n\n public async quote(params: any) {\n const {\n dry,\n wallet,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n } = params;\n\n const _quoteType = `CCTPService ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"indigo-500\", isDebug: OpenAPI.DEBUG });\n\n const sourceDomain = CCTP_DOMAINS[fromToken.chainName];\n const destinationDomain = CCTP_DOMAINS[toToken.chainName];\n const proxyAddress = CCTP_TOKEN_PROXY[fromToken.chainName];\n\n const result = await wallet.quote(Service.CCTP, {\n dry,\n proxyAddress,\n abi: CCTP_TOKEN_PROXY_ABI,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n excludeFees,\n destinationDomain,\n sourceDomain,\n });\n\n execTime.logTotal(\"CCTPService.quote\");\n result.sourceQuoteParams = params;\n\n return result;\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const {\n fromToken,\n wallet,\n prices,\n evmGasFees,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const result: any = { fees: {}, ...quoteData };\n\n const ett = await wallet.estimateTransaction({\n dry: false,\n ...quoteData.sendParam,\n fromToken,\n prices,\n evmGasFees,\n });\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n result.totalFeesUsd = \"0\";\n for (const feeKey in result.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd).toFixed(20));\n\n if (fromToken.chainType === \"evm\") {\n const sendParams = result.sendParam?.param;\n if (\n sendParams\n && Array.isArray(sendParams)\n && sendParams[sendParams.length - 1]\n && typeof sendParams[sendParams.length - 1] === \"object\"\n && sendParams[sendParams.length - 1].gasLimit !== void 0\n ) {\n csl(\"CCTPService estimateTransaction\", \"green-500\", \"Old gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n sendParams[sendParams.length - 1].gasLimit = ett.estimateSourceGasLimit;\n csl(\"CCTPService estimateTransaction\", \"green-500\", \"Updated gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n }\n }\n\n return result;\n }\n\n public async send(params: any) {\n const {\n wallet,\n ...rest\n } = params;\n\n return wallet.send(SendType.SEND, rest);\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new CCTPService();\n","import { frxusdChains } from \"@stableflow/core\";\nimport { usdcChains } from \"@stableflow/core\";\nimport { LayerZeroChainConfig, LAYERZZERO_CHAINS } from \"../utils\";\n\nexport interface FraxZeroConfig extends LayerZeroChainConfig {\n remoteHop?: string;\n lockbox?: string;\n programId?: string;\n mint?: string;\n escrow?: string;\n confirmations: number;\n oftApprovalRequired?: boolean;\n oftLegacyApprovalRequired?: boolean;\n}\n\n// DVN count: frax-finance uses 3 DVNs (fixed value)\nexport const FRAXZERO_REQUIRED_DVN_COUNT = 3;\n\n// FraxZero RemoteHop config, see https://docs.frax.com/frxusd/fraxzero-supported-networks\n// Chain names match chainName in frxusdChains, excluding Fraxtal\n// confirmation counts: visit https://layerzeroscan.com/application/frax-finance, filter by the desired source chain, and check the \"confirmations\" value at the bottom of the page.\nexport const FRAXZERO_CONFIG: Record<string, FraxZeroConfig> = {\n Ethereum: {\n ...LAYERZZERO_CHAINS[\"Ethereum\"],\n remoteHop: \"0x3ad4dC2319394bB4BE99A0e4aE2AbF7bCEbD648E\",\n lockbox: \"0x566a6442a5a6e9895b9dca97cc7879d632c6e4b0\",\n confirmations: 15,\n oftApprovalRequired: true,\n },\n Arbitrum: {\n ...LAYERZZERO_CHAINS[\"Arbitrum\"],\n remoteHop: \"0x29F5DBD0FE72d8f11271FCBE79Cb87E18a83C70A\",\n confirmations: 20,\n oftApprovalRequired: true,\n },\n Avalanche: {\n ...LAYERZZERO_CHAINS[\"Avalanche\"],\n remoteHop: \"0x7a07D606c87b7251c2953A30Fa445d8c5F856C7A\",\n confirmations: 12,\n oftApprovalRequired: true,\n },\n Berachain: {\n ...LAYERZZERO_CHAINS[\"Berachain\"],\n remoteHop: \"0xc71BF5Ee4740405030eF521F18A96eA14fec802D\",\n confirmations: 20,\n oftApprovalRequired: true,\n },\n \"BNB Chain\": {\n ...LAYERZZERO_CHAINS[\"BNB Chain\"],\n remoteHop: \"0x452420df4AC1e3db5429b5FD629f3047482C543C\",\n confirmations: 20,\n oftApprovalRequired: true,\n },\n Optimism: {\n ...LAYERZZERO_CHAINS[\"Optimism\"],\n remoteHop: \"0x31D982ebd82Ad900358984bd049207A4c2468640\",\n confirmations: 20,\n oftApprovalRequired: true,\n },\n Polygon: {\n ...LAYERZZERO_CHAINS[\"Polygon\"],\n remoteHop: \"0xf74D38A26948E9DDa53eD85cF03C6b1188FbB30C\",\n confirmations: 512,\n oftApprovalRequired: true,\n },\n \"X Layer\": {\n ...LAYERZZERO_CHAINS[\"X Layer\"],\n remoteHop: \"0x79152c303AD5aE429eDefa4553CB1Ad2c6EE1396\",\n confirmations: 225000,\n oftApprovalRequired: true,\n },\n Solana: {\n ...LAYERZZERO_CHAINS[\"Solana\"],\n programId: \"E1ht9dUh1ZkgWWRRPCuN3kExEoF2FXiyADXeN3XyMHaQ\",\n escrow: \"84AFSH3TSzyjbEFJX9z8sjpV7npTWq7f8ZR5zkLG22hX\",\n confirmations: 32,\n oftApprovalRequired: false,\n },\n Fraxtal: {\n ...LAYERZZERO_CHAINS[\"Fraxtal\"],\n lockbox: \"0x96A394058E2b84A89bac9667B19661Ed003cF5D4\",\n confirmations: 5,\n oftApprovalRequired: true,\n },\n Katana: {\n ...LAYERZZERO_CHAINS[\"Katana\"],\n remoteHop: \"0x5d8eb59a12bc98708702305a7b032f4b69dd5b5c\",\n confirmations: 5,\n oftApprovalRequired: true,\n },\n};\n\nexport const FRAXZERO_MIDDLE_TOKEN_USDC = usdcChains[\"eth\"];\nexport const FRAXZERO_MIDDLE_TOKEN_FRXUSD = frxusdChains[\"eth\"];\nexport const FRAXZERO_MIDDLE_CHAIN_REFOUND_ADDRESS = \"0x654E7B96E1DE0b54E53D9ae8082fC2219E66dAC3\";\n\nexport const FRAXZERO_REDEEM_USDC_CONTRACT = \"0x4F95C5bA0C7c69FB2f9340E190cCeE890B3bd87c\";\nexport const FRAXZERO_REDEEM_RWA_CONTRACT = \"0x5fbAa3A3B489199338fbD85F7E3D444dc0504F33\";\nexport const FRAXZERO_REDEMPTION_CONTRACT = \"0x4c21B7577C8FE8b0B0669165ee7C8f67fa1454Cf\";\n\nexport const FRAXZERO_REDEEM_AND_MINT_CONTRACT = \"0x466c34Fb4a758e80eBc7Ea7e636B755A0AE10397\";\n\n// gas amount = gas limit * gas price\nexport const FRAXZERO_GAS_USED = {\n REDEEM: 0n, // 358964n\n MINT: {\n TO_SOL: 0n, // 756271n\n TO_FRAXTAL: 0n, // 660997n\n TO_ETHEREUM: 0n, // 334550n\n SEND: 0n, // 756271n\n },\n};\n","export const FRAXZERO_ABI = [\n {\n \"inputs\": [\n { \"internalType\": \"bytes32\", \"name\": \"_fraxtalHop\", \"type\": \"bytes32\" },\n { \"internalType\": \"uint256\", \"name\": \"_numDVNs\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"_EXECUTOR\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"_DVN\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"_TREASURY\", \"type\": \"address\" },\n { \"internalType\": \"address[]\", \"name\": \"_approvedOfts\", \"type\": \"address[]\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"target\", \"type\": \"address\" }\n ],\n \"name\": \"AddressEmptyCode\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n ],\n \"name\": \"AddressInsufficientBalance\",\n \"type\": \"error\"\n },\n { \"inputs\": [], \"name\": \"FailedInnerCall\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"HopPaused\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"InsufficientFee\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"InvalidOFT\", \"type\": \"error\" },\n {\n \"inputs\": [\n { \"internalType\": \"uint16\", \"name\": \"optionType\", \"type\": \"uint16\" }\n ],\n \"name\": \"InvalidOptionType\",\n \"type\": \"error\"\n },\n { \"inputs\": [], \"name\": \"NotEndpoint\", \"type\": \"error\" },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" }\n ],\n \"name\": \"OwnableInvalidOwner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n ],\n \"name\": \"OwnableUnauthorizedAccount\",\n \"type\": \"error\"\n },\n { \"inputs\": [], \"name\": \"RefundFailed\", \"type\": \"error\" },\n {\n \"inputs\": [\n { \"internalType\": \"uint8\", \"name\": \"bits\", \"type\": \"uint8\" },\n { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" }\n ],\n \"name\": \"SafeCastOverflowedUintDowncast\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" }\n ],\n \"name\": \"SafeERC20FailedOperation\",\n \"type\": \"error\"\n },\n { \"inputs\": [], \"name\": \"ZeroAmountSend\", \"type\": \"error\" },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"previousOwner\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n ],\n \"name\": \"OwnershipTransferStarted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"previousOwner\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": false, \"internalType\": \"address\", \"name\": \"oft\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"uint32\", \"name\": \"dstEid\", \"type\": \"uint32\" },\n { \"indexed\": true, \"internalType\": \"bytes32\", \"name\": \"to\", \"type\": \"bytes32\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"amountLD\", \"type\": \"uint256\" }\n ],\n \"name\": \"SendOFT\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"DVN\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"EXECUTOR\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"TREASURY\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"acceptOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"name\": \"approvedOft\",\n \"outputs\": [\n { \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint32\", \"name\": \"\", \"type\": \"uint32\" }\n ],\n \"name\": \"executorOptions\",\n \"outputs\": [\n { \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"fraxtalHop\",\n \"outputs\": [\n { \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"hopFee\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"numDVNs\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"bool\", \"name\": \"_paused\", \"type\": \"bool\" }\n ],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n { \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"pendingOwner\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"_oft\", \"type\": \"address\" },\n { \"internalType\": \"uint32\", \"name\": \"_dstEid\", \"type\": \"uint32\" },\n { \"internalType\": \"bytes32\", \"name\": \"_to\", \"type\": \"bytes32\" },\n { \"internalType\": \"uint256\", \"name\": \"_amountLD\", \"type\": \"uint256\" }\n ],\n \"name\": \"quote\",\n \"outputs\": [\n {\n \"components\": [\n { \"internalType\": \"uint256\", \"name\": \"nativeFee\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"lzTokenFee\", \"type\": \"uint256\" }\n ],\n \"internalType\": \"struct MessagingFee\",\n \"name\": \"fee\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint32\", \"name\": \"_dstEid\", \"type\": \"uint32\" }\n ],\n \"name\": \"quoteHop\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"finalFee\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"tokenAddress\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"tokenAmount\", \"type\": \"uint256\" }\n ],\n \"name\": \"recoverERC20\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"tokenAmount\", \"type\": \"uint256\" }\n ],\n \"name\": \"recoverETH\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"_oft\", \"type\": \"address\" },\n { \"internalType\": \"uint32\", \"name\": \"_dstEid\", \"type\": \"uint32\" },\n { \"internalType\": \"bytes32\", \"name\": \"_to\", \"type\": \"bytes32\" },\n { \"internalType\": \"uint256\", \"name\": \"_amountLD\", \"type\": \"uint256\" }\n ],\n \"name\": \"sendOFT\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint32\", \"name\": \"eid\", \"type\": \"uint32\" },\n { \"internalType\": \"bytes\", \"name\": \"_options\", \"type\": \"bytes\" }\n ],\n \"name\": \"setExecutorOptions\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"_fraxtalHop\", \"type\": \"address\" }\n ],\n \"name\": \"setFraxtalHop\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"bytes32\", \"name\": \"_fraxtalHop\", \"type\": \"bytes32\" }\n ],\n \"name\": \"setFraxtalHop\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_hopFee\", \"type\": \"uint256\" }\n ],\n \"name\": \"setHopFee\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_numDVNs\", \"type\": \"uint256\" }\n ],\n \"name\": \"setNumDVNs\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"_oft\", \"type\": \"address\" },\n { \"internalType\": \"bool\", \"name\": \"_approved\", \"type\": \"bool\" }\n ],\n \"name\": \"toggleOFTApproval\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n }\n];\n\nexport const FRAXZERO_REDEEM_MINT_ABI = [\n {\n \"inputs\": [],\n \"name\": \"mdwrComboView\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"maxAssetsDepositable\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"maxSharesMintable\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"maxAssetsWithdrawable\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"maxSharesRedeemable\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"sharesIn\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"receiver\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" }\n ],\n \"name\": \"redeem\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"assetsOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"assetsIn\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"receiver\", \"type\": \"address\" }\n ],\n \"name\": \"deposit\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"sharesOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_assetsIn\", \"type\": \"uint256\" }\n ],\n \"name\": \"previewDeposit\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_sharesOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_assetsOut\", \"type\": \"uint256\" }\n ],\n \"name\": \"previewWithdraw\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_sharesIn\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_sharesOut\", \"type\": \"uint256\" }\n ],\n \"name\": \"previewMint\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_assetsIn\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_sharesIn\", \"type\": \"uint256\" }\n ],\n \"name\": \"previewRedeem\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_assetsOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"assetsIn\", \"type\": \"uint256\" },\n { \"internalType\": \"uint32\", \"name\": \"dstEid\", \"type\": \"uint32\" },\n { \"internalType\": \"bytes32\", \"name\": \"receiver\", \"type\": \"bytes32\" }\n ],\n \"name\": \"mintAndSend\",\n \"outputs\": [\n { \"internalType\": \"bytes32\", \"name\": \"guidOrZero\", \"type\": \"bytes32\" },\n { \"internalType\": \"uint256\", \"name\": \"sharesOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"sharesIn\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"receiver\", \"type\": \"address\" }\n ],\n \"name\": \"redeemToUsdcAndTransfer\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"assetsOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"maxUstbRedemptionAmount\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"superstateTokenAmount\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"usdPerUstbChainlinkRaw\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"superstateTokenInAmount\", \"type\": \"uint256\" }\n ],\n \"name\": \"calculateUsdcOut\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"usdcOutAmountAfterFee\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"usdPerUstbChainlinkRaw\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n];\n","import { FRAXZERO_CONFIG, FRAXZERO_REQUIRED_DVN_COUNT } from \"./config\";\nimport { FRAXZERO_ABI } from \"./contract\";\nimport { calculateEstimateTime } from \"../utils\";\nimport { Usdt0Service } from \"../usdt0\";\nimport { OFT_ABI } from \"../usdt0/contract\";\nimport { ExecTime, getRequest, GetStatusParams, GetStatusStableflowResponse } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { Service } from \"@stableflow/core\";\n\nexport const PayInLzToken = false;\n\nexport const excludeFees: string[] = [\"estimateGasUsd\"];\n\nexport class FraxZeroService extends Usdt0Service {\n public override async quote(params: any) {\n const {\n wallet,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n } = params;\n\n const _quoteType = `FraxZeroService ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"fuchsia-600\", isDebug: OpenAPI.DEBUG });\n\n const originLayerzero = FRAXZERO_CONFIG[fromToken.chainName];\n const destinationLayerzero = FRAXZERO_CONFIG[toToken.chainName];\n\n const isFromEthereumOrFraxtal = fromToken.chainId === 1 || fromToken.chainId === 252;\n const isToEthereumOrFraxtal = toToken.chainId === 1 || toToken.chainId === 252;\n const isFraxtal = fromToken.chainId === 252 || toToken.chainId === 252;\n const isFromSolana = fromToken.chainName === \"Solana\";\n\n if (isFromSolana) {\n // only support Ethereum and Fraxtal\n if (![1, 252].includes(toToken.chainId)) {\n throw new Error(\"Invalid destination chain\");\n }\n }\n\n const estimateTime = calculateEstimateTime({\n requiredDvnCount: FRAXZERO_REQUIRED_DVN_COUNT,\n originConfig: originLayerzero,\n destinationConfig: destinationLayerzero,\n });\n\n if (isFraxtal && !isFromSolana) {\n const result = await wallet.quote(Service.Usdt0, {\n ...params,\n abi: OFT_ABI,\n dstEid: destinationLayerzero.eid,\n payInLzToken: PayInLzToken,\n originLayerzeroAddress: isFromEthereumOrFraxtal ? originLayerzero.lockbox : fromToken.contractAddress,\n destinationLayerzeroAddress: isToEthereumOrFraxtal ? destinationLayerzero.lockbox : toToken.contractAddress,\n excludeFees,\n originLayerzero,\n destinationLayerzero,\n });\n\n result.estimateTime = estimateTime;\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"FraxZeroService.quote isFraxtal\");\n\n return result;\n }\n\n const result = await wallet.quote(Service.FraxZero, {\n ...params,\n abi: FRAXZERO_ABI,\n originLayerzero,\n destinationLayerzero,\n excludeFees,\n });\n\n result.estimateTime = estimateTime;\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"FraxZeroService.quote\");\n\n return result;\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new FraxZeroService();\n","import { FraxZeroService, excludeFees as fraxExcludeFees } from \".\";\nimport { FRAXZERO_MIDDLE_CHAIN_REFOUND_ADDRESS, FRAXZERO_MIDDLE_TOKEN_USDC, FRAXZERO_MIDDLE_TOKEN_FRXUSD, FRAXZERO_REDEEM_USDC_CONTRACT, FRAXZERO_REDEEM_RWA_CONTRACT, FRAXZERO_REDEEM_AND_MINT_CONTRACT, FRAXZERO_GAS_USED, FRAXZERO_REDEMPTION_CONTRACT } from \"./config\";\nimport oneClickService, { excludeFees as oneClickExcludeFees } from \"../oneclick\";\nimport Big from \"big.js\";\nimport { getRequest, GetStatusParams, GetStatusStableflowResponse, numberRemoveEndZero } from \"@stableflow/core\";\nimport { FRAXZERO_REDEEM_MINT_ABI } from \"./contract\";\nimport { getPrice } from \"@stableflow/core\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { evmRpcFallbackProvider } from \"@stableflow/utils-evm\";\nimport { Csl } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\n\nexport class FraxZero2OneClickService extends FraxZeroService {\n public override async quote(params: any) {\n const {\n dry,\n wallet,\n evmWallet,\n evmAddress,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n evmGasFees,\n switchChainAsync,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n csl(\"FraxZero2OneClickService quote\", \"yellow-500\", \"params: %o\", params);\n\n const _quoteType = `FraxZero2OneClick ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"fuchsia-700\", isDebug: OpenAPI.DEBUG });\n\n const isFromEthereumFrxUSD = fromToken.chainId === 1 && fromToken.symbol === FRAXZERO_MIDDLE_TOKEN_FRXUSD.symbol;\n const isToEthereumUSDC = toToken.chainId === 1 && toToken.symbol === FRAXZERO_MIDDLE_TOKEN_USDC.symbol;\n\n const provider = evmRpcFallbackProvider(FRAXZERO_MIDDLE_TOKEN_FRXUSD);\n\n let middleChainWallet = evmWallet;\n let middleChainRecipientAddress = evmAddress;\n if (!middleChainWallet) {\n throw new Error(\"evmWallet is required\");\n }\n if (!middleChainRecipientAddress) {\n throw new Error(\"evmAddress is required\");\n }\n\n // fraxzero quote result\n let firstStepResult: any;\n if (!isFromEthereumFrxUSD) {\n execTime.breakpoint();\n // bridge to Ethereum\n firstStepResult = await super.quote({\n ...params,\n toToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n recipient: middleChainRecipientAddress,\n });\n execTime.log(\"FraxZero.quote\");\n }\n csl(\"FraxZero2OneClickService quote\", \"yellow-600\", \"firstStepResult: %o\", firstStepResult);\n const ethereumFrxUSDAmountWei = isFromEthereumFrxUSD\n ? amountWei\n : Big(firstStepResult.outputAmount || 0).times(10 ** FRAXZERO_MIDDLE_TOKEN_FRXUSD.decimals).toFixed(0, Big.roundDown);\n const ethereumFrxUSDAmount = isFromEthereumFrxUSD\n ? Big(amountWei || 0).div(10 ** fromToken.decimals).toFixed(fromToken.decimals, Big.roundDown)\n : firstStepResult.outputAmount;\n\n // oneclick quote result\n let thirdStepResult: any;\n let preivewRedeemResult: any;\n if (!isToEthereumUSDC) {\n let oneClickFeeRatio = \"0\";\n // These fees are currently all 0\n // No need to request for now\n // if (!isFromEthereumFrxUSD) {\n // execTime.breakpoint();\n // const { usd, wei, amount } = await middleChainWallet.getEstimateGas({\n // gasLimit: FRAXZERO_GAS_USED.REDEEM * 120n / 100n,\n // price: getPrice(prices, FRAXZERO_MIDDLE_TOKEN_FRXUSD.nativeToken.symbol),\n // nativeToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD.nativeToken,\n // provider,\n // gasPrice: dry ? evmGasFees[FRAXZERO_MIDDLE_TOKEN_FRXUSD.chainId as number].gasPrice : void 0,\n // });\n // execTime.log(\"middleChainWallet.getEstimateGas\");\n // const secondStepGasToAmount = Big(usd).div(getPrice(prices, FRAXZERO_MIDDLE_TOKEN_USDC.symbol) || 1).toFixed(FRAXZERO_MIDDLE_TOKEN_USDC.decimals);\n // oneClickFeeRatio = Big(secondStepGasToAmount)\n // .div(Big(secondStepGasToAmount).plus(Big(ethereumFrxUSDAmountWei).div(10 ** FRAXZERO_MIDDLE_TOKEN_USDC.decimals).toFixed(FRAXZERO_MIDDLE_TOKEN_USDC.decimals)))\n // .times(10000)\n // .toFixed(0, Big.roundUp);\n // }\n\n // estimate redeem amount\n // If it's a quote, use a 1:1 exchange rate\n let ethereumUSDCAmountWei = Big(ethereumFrxUSDAmount || 0).times(10 ** FRAXZERO_MIDDLE_TOKEN_USDC.decimals).toFixed(0, Big.roundDown);\n try {\n execTime.breakpoint();\n preivewRedeemResult = await middleChainWallet.preivewRedeemFrxUSD({\n dry,\n amountWei: ethereumFrxUSDAmountWei,\n fromToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n rwaCustodianAddress: FRAXZERO_REDEEM_RWA_CONTRACT,\n redemptionAddress: FRAXZERO_REDEMPTION_CONTRACT,\n });\n execTime.log(\"middleChainWallet.preivewRedeemFrxUSD\");\n ethereumUSDCAmountWei = preivewRedeemResult.totalAssetsOut.toString();\n } catch (error) {\n csl(\"FraxZero2OneClickService quote\", \"red-500\", \"estimate redeem amount failed: %o\", error);\n }\n\n // from ethereum USDC to toToken\n execTime.breakpoint();\n thirdStepResult = await oneClickService.quote({\n ...params,\n amountWei: ethereumUSDCAmountWei,\n fromToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n originAsset: FRAXZERO_MIDDLE_TOKEN_USDC.assetId,\n swapType: \"FLEX_INPUT\",\n isProxy: false,\n refundTo: middleChainRecipientAddress,\n wallet: middleChainWallet,\n appFees: [\n {\n recipient: \"reffer.near\",\n // No bridge fee will be charged temporarily\n fee: +oneClickFeeRatio, // 10000 = 100% 1000 = 10% 100=1% 1=0.01%\n },\n ],\n });\n execTime.log(\"oneClickService.quote\");\n }\n csl(\"FraxZero2OneClickService quote\", \"yellow-600\", \"thirdStepResult: %o\", thirdStepResult);\n\n // redeem from ethereum frxUSD to ethereum USDC\n execTime.breakpoint();\n const secondStepResult = await middleChainWallet.redeemFrxUSD({\n ...params,\n preivewRedeemResult,\n fromToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n amountWei: ethereumFrxUSDAmountWei,\n toToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n refundTo: middleChainRecipientAddress,\n recipient: !isToEthereumUSDC ? (thirdStepResult?.quote?.depositAddress || middleChainRecipientAddress) : recipient,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n rwaCustodianAddress: FRAXZERO_REDEEM_RWA_CONTRACT,\n redemptionAddress: FRAXZERO_REDEMPTION_CONTRACT,\n redeemAndMintContractAddress: FRAXZERO_REDEEM_AND_MINT_CONTRACT,\n });\n execTime.log(\"middleChainWallet.redeemFrxUSD\");\n csl(\"FraxZero2OneClickService quote\", \"yellow-600\", \"secondStepResult: %o\", secondStepResult);\n\n const withOneClick = (_result: any) => {\n let totalFeesUsd = Big(0);\n let estimateTime = _result?.estimateTime || 0;\n let finalOutputAmount = _result?.outputAmount || \"0\";\n let depositAddress = thirdStepResult?.quote?.depositAddress;\n\n const fees = {\n ..._result?.fees,\n };\n if (!isToEthereumUSDC) {\n for (const feeKey in thirdStepResult?.fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = thirdStepResult.fees[feeKey];\n }\n estimateTime = estimateTime + (thirdStepResult?.estimateTime || 0);\n finalOutputAmount = thirdStepResult?.outputAmount || \"0\";\n }\n for (const feeKey in fees) {\n if (fraxExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n const inputAmount = Big(amountWei).div(10 ** fromToken.decimals).toFixed(fromToken.decimals, Big.roundDown);\n const amountInUsd = Big(inputAmount).times(getPrice(prices, fromToken.symbol));\n const priceImpact = Big(amountInUsd).minus(Big(finalOutputAmount).times(getPrice(prices, toToken.symbol))).div(amountInUsd);\n const exchangeRate = Big(finalOutputAmount).div(inputAmount);\n\n return {\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime,\n outputAmount: finalOutputAmount,\n priceImpact: numberRemoveEndZero(Big(priceImpact).toFixed(4)),\n exchangeRate: numberRemoveEndZero(Big(exchangeRate).toFixed(6, Big.roundDown)),\n quoteParam: {\n ..._result?.quoteParam,\n fromToken,\n amountWei,\n toToken,\n refundTo,\n recipient,\n middleToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n middleToken2: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n isFromEthereumFrxUSD,\n isToEthereumUSDC,\n depositAddress,\n },\n sourceQuoteParams: params,\n };\n };\n\n // Redeem from the frontend\n if (isFromEthereumFrxUSD) {\n\n const oneClickResult = withOneClick(secondStepResult);\n\n execTime.logTotal(\"FraxZero2OneClickService.quote is From EthereumFrxUSD\");\n\n return {\n ...secondStepResult,\n ...oneClickResult,\n sourceQuoteParams: params,\n };\n }\n\n // Redeem is done by the backend, and the frontend calls FraxZero to bridge to Ethereum frxUSD\n const oneClickResult = withOneClick({\n ...firstStepResult,\n outputAmount: secondStepResult.outputAmount,\n });\n\n execTime.logTotal(\"FraxZero2OneClickService.quote is NOT From EthereumFrxUSD\");\n\n return {\n ...firstStepResult,\n ...oneClickResult,\n recipient,\n needPermit: true,\n permitSpender: FRAXZERO_REDEEM_AND_MINT_CONTRACT,\n permitToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n permitAmountWei: ethereumFrxUSDAmountWei,\n permitAdditionalData: {},\n sourceQuoteParams: params,\n };\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new FraxZero2OneClickService();\n","import oneClickService, { excludeFees as oneClickExcludeFees } from \"../oneclick\";\nimport { FraxZeroService, excludeFees as fraxZeroExcludeFees } from \".\";\nimport { FRAXZERO_CONFIG, FRAXZERO_GAS_USED, FRAXZERO_MIDDLE_CHAIN_REFOUND_ADDRESS, FRAXZERO_MIDDLE_TOKEN_FRXUSD, FRAXZERO_MIDDLE_TOKEN_USDC, FRAXZERO_REDEEM_AND_MINT_CONTRACT, FRAXZERO_REDEEM_USDC_CONTRACT } from \"./config\";\nimport { getPrice, getRequest, GetStatusParams, GetStatusStableflowResponse } from \"@stableflow/core\";\nimport { FRAXZERO_REDEEM_MINT_ABI } from \"./contract\";\nimport Big from \"big.js\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\nimport { SendType } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { evmRpcFallbackProvider } from \"@stableflow/utils-evm\";\n\nexport class OneClick2FraxZeroService extends FraxZeroService {\n public override async quote(params: any) {\n const {\n dry,\n wallet,\n evmWallet,\n evmAddress,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n evmGasFees,\n switchChainAsync,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"params: %o\", params);\n\n const _quoteType = `OneClick2FraxZero ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"fuchsia-500\", isDebug: OpenAPI.DEBUG });\n\n const isFromEthereumUSDC = fromToken.chainId === 1 && fromToken.symbol === FRAXZERO_MIDDLE_TOKEN_USDC.symbol;\n const isToEthereumFrxUSD = toToken.chainId === 1 && toToken.symbol === FRAXZERO_MIDDLE_TOKEN_FRXUSD.symbol;\n const isToSolana = toToken.chainName === \"Solana\";\n const isToFraxtal = toToken.chainId === 252;\n const isSend = !isToEthereumFrxUSD && !isToSolana && !isToFraxtal;\n\n const provider = evmRpcFallbackProvider(FRAXZERO_MIDDLE_TOKEN_USDC);\n\n let middleChainWallet = evmWallet;\n let middleChainRecipientAddress = evmAddress;\n if (!middleChainWallet) {\n throw new Error(\"evmWallet is required\");\n }\n if (!middleChainRecipientAddress) {\n throw new Error(\"evmAddress is required\");\n }\n\n let previewMintResult: any;\n // 1. use OneClick to bridge to Ethereum USDC first\n if (!isFromEthereumUSDC) {\n // estimate gas\n let gasLimit = FRAXZERO_GAS_USED.MINT.SEND;\n if (isToEthereumFrxUSD) {\n gasLimit = FRAXZERO_GAS_USED.MINT.TO_ETHEREUM;\n }\n if (isToSolana) {\n gasLimit = FRAXZERO_GAS_USED.MINT.TO_SOL;\n }\n if (isToFraxtal) {\n gasLimit = FRAXZERO_GAS_USED.MINT.TO_FRAXTAL;\n }\n gasLimit = gasLimit * 120n / 100n;\n\n // Mint should be a 1:1 conversion from Ethereum USDC to Ethereum frxUSD.\n // The ratio can be obtained from the contract.\n execTime.breakpoint();\n previewMintResult = await middleChainWallet.previewMintFrxUSD({\n dry,\n amountWei: Big(amountWei || 0).div(10 ** fromToken.decimals).times(10 ** FRAXZERO_MIDDLE_TOKEN_USDC.decimals).toFixed(0, 0),\n fromToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n });\n const { totalAssetsOut: estimateEthereumFrxUSDAmountWei } = previewMintResult;\n execTime.log(\"previewMintFrxUSD\");\n\n execTime.breakpoint();\n const { usd, wei, amount } = await middleChainWallet.getEstimateGas({\n gasLimit,\n price: getPrice(prices, FRAXZERO_MIDDLE_TOKEN_USDC.nativeToken.symbol),\n nativeToken: FRAXZERO_MIDDLE_TOKEN_USDC.nativeToken,\n provider: provider,\n gasPrice: dry ? evmGasFees[FRAXZERO_MIDDLE_TOKEN_USDC.chainId as number].gasPrice : void 0,\n });\n execTime.log(\"middleChainWallet.getEstimateGas\");\n const secondStepGasToAmount = Big(usd || 0).div(getPrice(prices, fromToken.symbol) || 1).toFixed(fromToken.decimals);\n\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC EstimateGas usd: %o, wei: %o, amount: %o\", usd, wei, amount);\n\n // estimate lz message fee\n // from Ethereum frxUSD to toToken\n let secondStepResult: any;\n if (!isToEthereumFrxUSD) {\n execTime.breakpoint();\n secondStepResult = await super.quote({\n ...params,\n fromToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n wallet: middleChainWallet,\n amountWei: estimateEthereumFrxUSDAmountWei.toString(),\n refundTo: middleChainRecipientAddress,\n });\n execTime.log(\"FraxZero.quote\");\n }\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC secondStepResult: %o\", secondStepResult);\n\n let secondStepLzMsgFeeUsd = secondStepResult?.fees?.nativeFeeUsd || \"0\";\n let secondStepLzMsgFee = secondStepResult?.fees?.nativeFee || \"0\";\n // add 120% buffer\n const usdt0MessageFeeBuffer = 1.2;\n // super.quote has already added a buffer, but here we add a bit more to further reduce the chance of failure\n secondStepLzMsgFeeUsd = Big(secondStepLzMsgFeeUsd || 0).times(1 + usdt0MessageFeeBuffer);\n secondStepLzMsgFee = Big(secondStepLzMsgFee || 0).times(1 + usdt0MessageFeeBuffer);\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC secondStepLzMsgFeeUsd: %o\", secondStepLzMsgFeeUsd.toString());\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC secondStepLzMsgFee: %o\", secondStepLzMsgFee.toString());\n const secondStepLzMsgFeeAmount = Big(secondStepLzMsgFeeUsd).div(getPrice(prices, fromToken.symbol) || 1).toFixed(fromToken.decimals);\n\n const totalAppFeesAmount = Big(secondStepGasToAmount).plus(secondStepLzMsgFeeAmount);\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC totalAppFeesAmount: %o\", totalAppFeesAmount.toString());\n const oneClickFeeRatio = Big(totalAppFeesAmount)\n .div(Big(totalAppFeesAmount).plus(Big(params.amountWei).div(10 ** fromToken.decimals).toFixed(fromToken.decimals)))\n .times(10000)\n .toFixed(0, Big.roundUp);\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC oneClickFeeRatio: %o\", oneClickFeeRatio.toString());\n if (secondStepResult) {\n secondStepResult.fees.nativeFee = secondStepLzMsgFee.toString();\n secondStepResult.fees.nativeFeeUsd = secondStepLzMsgFeeUsd.toString();\n }\n\n execTime.breakpoint();\n const firstStepResult = await oneClickService.quote({\n ...params,\n toToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n destinationAsset: FRAXZERO_MIDDLE_TOKEN_USDC.assetId,\n swapType: \"EXACT_OUTPUT\",\n isProxy: true,\n recipient: middleChainRecipientAddress,\n appFees: [\n {\n recipient: \"reffer.near\",\n // No bridge fee will be charged temporarily\n fee: +oneClickFeeRatio, // 10000 = 100% 1000 = 10% 100=1% 1=0.01%\n },\n ],\n });\n execTime.log(\"oneClickService.quote\");\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC firstStepResult: %o\", firstStepResult);\n\n let totalFeesUsd = Big(0);\n let _destinationGasFeeUsd = Big(firstStepResult.fees?.destinationGasFeeUsd || 0).minus(secondStepLzMsgFeeUsd);\n if (Big(_destinationGasFeeUsd).lt(0)) {\n _destinationGasFeeUsd = Big(0);\n }\n const fees = {\n ...firstStepResult.fees,\n destinationGasFeeUsd: numberRemoveEndZero(Big(_destinationGasFeeUsd).toFixed(20)),\n };\n for (const feeKey in secondStepResult?.fees) {\n if (fraxZeroExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = secondStepResult.fees[feeKey];\n }\n for (const feeKey in fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n execTime.logTotal(\"OneClick2FraxZeroService.quote is NOT FromEthereumUSDC\");\n\n const notFromEthUSDCFinalOutputAmount = isToEthereumFrxUSD\n ? numberRemoveEndZero(Big(estimateEthereumFrxUSDAmountWei.toString()).div(10 ** toToken.decimals).toFixed(toToken.decimals, Big.roundDown))\n : secondStepResult.outputAmount;\n\n return {\n ...firstStepResult,\n needPermit: true,\n permitSpender: FRAXZERO_REDEEM_AND_MINT_CONTRACT,\n permitToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n permitAmountWei: firstStepResult?.quote?.amountOut,\n permitAdditionalData: {},\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime: (isToEthereumFrxUSD ? 0 : secondStepResult.estimateTime) + firstStepResult.estimateTime,\n outputAmount: notFromEthUSDCFinalOutputAmount,\n quoteParam: {\n ...firstStepResult.quoteParam,\n toToken: params.toToken,\n middleToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n middleToken2: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n recipient: params.recipient,\n depositAddress: firstStepResult.quote?.depositAddress,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sendParam: {\n ...firstStepResult.sendParam,\n isOneClickTransfer: !firstStepResult.sendParam ? {\n originAsset: fromToken.contractAddress,\n depositAddress: firstStepResult.quote?.depositAddress,\n amount: firstStepResult.quote?.minAmountIn,\n } : false,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sourceQuoteParams: params,\n };\n }\n\n // 2. If is from Ethereum USDC, skip the first step\n // mint and bridge use contract directly\n if (isToEthereumFrxUSD) {\n execTime.breakpoint();\n const firstStepResult = await middleChainWallet.mintFrxUSD({\n ...params,\n toToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n previewMintResult,\n });\n execTime.log(\"middleChainWallet.mintFrxUSD\");\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"FromEthereumUSDC firstStepResult: %o\", firstStepResult);\n\n execTime.logTotal(\"OneClick2FraxZeroService.quote is To EthereumFrxUSD\");\n\n return {\n ...firstStepResult,\n quoteParam: {\n ...firstStepResult.quoteParam,\n middleToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n middleToken2: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sendParam: {\n ...firstStepResult.sendParam,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sourceQuoteParams: params,\n };\n }\n\n // 3. to other chain frxUSD\n // The mintAndSend method of the _FRAXZERO_REDEEM_AND_MINT_CONTRACT contract should be called here\n const originLayerzero = FRAXZERO_CONFIG[fromToken.chainName];\n const destinationLayerzero = FRAXZERO_CONFIG[toToken.chainName];\n\n execTime.breakpoint();\n const firstStepResult = await middleChainWallet.mintAndSendFrxUSD({\n ...params,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n redeemAndMintContractAddress: FRAXZERO_REDEEM_AND_MINT_CONTRACT,\n originLayerzero,\n destinationLayerzero,\n previewMintResult,\n });\n execTime.log(\"middleChainWallet.mintAndSendFrxUSD\");\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"FromEthereumUSDC firstStepResult: %o\", firstStepResult);\n\n // estimate lz message fee\n // from Ethereum frxUSD to toToken\n execTime.breakpoint();\n const secondStepResult = await super.quote({\n ...params,\n fromToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n wallet: middleChainWallet,\n amountWei: Big(firstStepResult.outputAmount).times(10 ** FRAXZERO_MIDDLE_TOKEN_FRXUSD.decimals).toFixed(0, Big.roundDown),\n });\n execTime.log(\"FraxZero.quote\");\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"FromEthereumUSDC estimate fraxzero: %o\", secondStepResult);\n\n let totalFeesUsd = Big(0);\n const fees = {\n ...firstStepResult.fees,\n };\n for (const feeKey in secondStepResult.fees) {\n if (fraxZeroExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = secondStepResult.fees[feeKey];\n }\n for (const feeKey in fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n const sendParamOptions = firstStepResult.sendParam.param[firstStepResult.sendParam.param.length - 1];\n const fraxzeroSendParamOptions = secondStepResult.sendParam.param[secondStepResult.sendParam.param.length - 1];\n firstStepResult.sendParam.param[firstStepResult.sendParam.param.length - 1] = {\n ...sendParamOptions,\n value: fraxzeroSendParamOptions.value,\n };\n\n execTime.logTotal(\"OneClick2FraxZeroService.quote is To Other Chain FrxUSD\");\n\n return {\n ...firstStepResult,\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime: firstStepResult.estimateTime + secondStepResult.estimateTime,\n outputAmount: secondStepResult.outputAmount,\n quoteParam: {\n ...firstStepResult.quoteParam,\n middleToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n middleToken2: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sendParam: {\n ...firstStepResult.sendParam,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sourceQuoteParams: params,\n };\n }\n\n public override async send(params: any) {\n const {\n wallet,\n sendParam,\n ...rest\n } = params;\n\n // proxy transfer\n if (sendParam) {\n if (sendParam.isOneClickTransfer) {\n return wallet.send(SendType.TRANSFER, sendParam.isOneClickTransfer);\n }\n const tx = await wallet.send(SendType.SEND, sendParam);\n return tx;\n }\n\n return wallet.send(SendType.SEND, rest);\n }\n\n public override async estimateTransaction(params: any, quoteData: any) {\n const {\n wallet,\n sendParam,\n } = quoteData;\n\n // proxy transfer\n if (sendParam) {\n if (sendParam.isOneClickTransfer) {\n return quoteData;\n }\n return super.estimateTransaction(params, quoteData);\n }\n\n return quoteData;\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new OneClick2FraxZeroService();\n","import { getRequest, GetStatusParams, GetStatusStableflowResponse, SendType } from \"@stableflow/core\";\nimport oneClickService, { excludeFees as oneClickExcludeFees } from \"../oneclick\";\nimport usdt0Service, { excludeFees as usdt0ExcludeFees } from \"../usdt0\";\nimport Big from \"big.js\";\nimport { MIDDLE_CHAIN_REFOUND_ADDRESS, MIDDLE_TOKEN_CHAIN } from \"./config\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\n\nexport class Usdt0OneClickService {\n public async quote(params: any) {\n const {\n dry,\n evmWallet,\n evmAddress,\n fromToken,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n const execTime = new ExecTime({ type: \"Usdt0OneClickService\", logStyle: \"lime-700\", isDebug: OpenAPI.DEBUG });\n\n let middleChainWallet = evmWallet;\n if (!middleChainWallet) {\n throw new Error(\"evmWallet is required\");\n }\n\n const usdt0Params = {\n ...params,\n toToken: MIDDLE_TOKEN_CHAIN,\n destinationChain: MIDDLE_TOKEN_CHAIN.chainName,\n recipient: MIDDLE_CHAIN_REFOUND_ADDRESS,\n };\n const oneClickParams = {\n ...params,\n fromToken: MIDDLE_TOKEN_CHAIN,\n originAsset: MIDDLE_TOKEN_CHAIN.assetId,\n swapType: \"FLEX_INPUT\",\n isProxy: false,\n refundTo: MIDDLE_CHAIN_REFOUND_ADDRESS,\n wallet: middleChainWallet,\n };\n\n let oneClickResult: any;\n let usdt0Result: any;\n if (dry) {\n execTime.breakpoint();\n const mergedQuotes = [\n oneClickService.quote(oneClickParams),\n usdt0Service.quote(usdt0Params)\n ];\n const merdedRes = await Promise.all(mergedQuotes);\n oneClickResult = merdedRes[0];\n usdt0Result = merdedRes[1];\n execTime.log(\"oneClickService.quote & usdt0Service.quote\");\n }\n // not dry\n else {\n execTime.breakpoint();\n oneClickResult = await oneClickService.quote(oneClickParams);\n execTime.log(\"oneClickService.quote\");\n\n if (oneClickResult.errMsg) {\n return oneClickResult;\n }\n\n if (!dry) {\n usdt0Params.recipient = oneClickResult.quote.depositAddress;\n }\n\n execTime.breakpoint();\n usdt0Result = await usdt0Service.quote(usdt0Params);\n execTime.log(\"usdt0Service.quote\");\n }\n\n csl(\"Usdt0OneClickService quote\", \"rose-600\", \"oneClickResult: %o\", oneClickResult);\n csl(\"Usdt0OneClickService quote\", \"rose-600\", \"usdt0Result: %o\", usdt0Result);\n\n let totalFeesUsd = Big(0);\n const fees = {\n ...usdt0Result.fees,\n };\n for (const feeKey in oneClickResult.fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = oneClickResult.fees[feeKey];\n }\n for (const feeKey in fees) {\n if (usdt0ExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n execTime.logTotal(\"Usdt0OneClickService.quote\");\n\n return {\n ...usdt0Result,\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime: usdt0Result.estimateTime + oneClickResult.estimateTime,\n outputAmount: oneClickResult.outputAmount,\n priceImpact: oneClickResult.priceImpact,\n exchangeRate: oneClickResult.exchangeRate,\n quoteParam: {\n ...usdt0Result.quoteParam,\n toToken: params.toToken,\n middleToken: MIDDLE_TOKEN_CHAIN,\n recipient: params.recipient,\n depositAddress: oneClickResult.quote.depositAddress,\n },\n sourceQuoteParams: params,\n };\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const { } = params;\n\n return usdt0Service.estimateTransaction(params, quoteData);\n }\n\n public async send(params: any) {\n const {\n wallet,\n ...rest\n } = params;\n\n return wallet.send(SendType.SEND, rest);\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new Usdt0OneClickService();\n","import oneClickService, { excludeFees as oneClickExcludeFees } from \"../oneclick\";\nimport usdt0Service, { excludeFees as usdt0ExcludeFees } from \"../usdt0\";\nimport Big from \"big.js\";\nimport { MIDDLE_CHAIN_LAYERZERO_EXECUTOR, MIDDLE_CHAIN_REFOUND_ADDRESS, MIDDLE_TOKEN_CHAIN } from \"./config\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\nimport { getPrice, GetStatusParams, getRequest, GetStatusStableflowResponse } from \"@stableflow/core\";\n\nexport class OneClickUsdt0Service {\n public async quote(params: any) {\n const {\n evmWallet,\n evmAddress,\n fromToken,\n prices,\n } = params;\n\n const execTime = new ExecTime({ type: \"OneClickUsdt0\", logStyle: \"lime-500\", isDebug: OpenAPI.DEBUG });\n\n let middleChainWallet = evmWallet;\n let destinationRecipientAddress = evmAddress;\n if (!middleChainWallet) {\n throw new Error(\"evmWallet is required\");\n }\n if (!destinationRecipientAddress) {\n throw new Error(\"evmAddress is required\");\n }\n\n // First, call the usdt0 quote method\n // Retrieve sendParam, fees, and estimated costs\n // usdt0 is the second step, so the source chain is arb\n // The refund address is MIDDLE_CHAIN_REFOUND_ADDRESS\n // Since the first step uses oneclick with EXACT_OUTPUT mode,\n // params.amountWei is the input amount for the second step\n const usdt0Params = {\n ...params,\n amountWei: Big(params.amountWei || 0).div(10 ** fromToken.decimals).times(10 ** MIDDLE_TOKEN_CHAIN.decimals).toFixed(0),\n fromToken: MIDDLE_TOKEN_CHAIN,\n originChain: MIDDLE_TOKEN_CHAIN.chainName,\n refundTo: MIDDLE_CHAIN_REFOUND_ADDRESS,\n wallet: middleChainWallet,\n };\n\n execTime.breakpoint();\n const usdt0Result = await usdt0Service.quote(usdt0Params);\n execTime.log(\"usdt0Service.quote\");\n\n const usdt0MessageFeeBuffer = 1.2;\n usdt0Result.fees.nativeFeeUsd = numberRemoveEndZero(Big(usdt0Result.fees?.nativeFeeUsd || 0).times(1 + usdt0MessageFeeBuffer).toFixed(20));\n usdt0Result.fees.nativeFee = numberRemoveEndZero(Big(usdt0Result.fees?.nativeFee || 0).times(1 + usdt0MessageFeeBuffer).toFixed(fromToken.nativeToken.decimals));\n // LZ message fee to USD\n const usdt0MessageFeeUsd = usdt0Result.fees.nativeFeeUsd;\n // add 20% buffer\n const usdt0MessageFeeAmount = Big(usdt0MessageFeeUsd || 0).div(getPrice(prices, MIDDLE_TOKEN_CHAIN.symbol) || 1).toFixed(MIDDLE_TOKEN_CHAIN.decimals);\n\n if (usdt0Result.errMsg) {\n return usdt0Result;\n }\n\n // OneClick charges a proportional fee\n // The OneClick fee ratio is calculated based on usdt0MessageFeeAmount\n // fee bp = fee amount / (fee amount + amount), minimum is 1, maximum is 10000\n const oneClickFeeRatio = Big(usdt0MessageFeeAmount || 0)\n .div(Big(usdt0MessageFeeAmount || 0).plus(Big(params.amountWei).div(10 ** fromToken.decimals).toFixed(fromToken.decimals)))\n .times(10000)\n .toFixed(0, Big.roundUp);\n\n // csl(\"OneClickUsdt0Service quote\", \"rose-400\", \"usdt0MessageFeeAmount: %o\", usdt0MessageFeeAmount);\n // csl(\"OneClickUsdt0Service quote\", \"rose-400\", \"amount: %o\", Big(params.amountWei).div(10 ** fromToken.decimals).toFixed(fromToken.decimals));\n // csl(\"OneClickUsdt0Service quote\", \"rose-400\", \"oneClickFeeRatio: %o\", oneClickFeeRatio);\n\n if (Big(oneClickFeeRatio).gt(10000)) {\n return { errMsg: `Amount is too low, at least ${usdt0MessageFeeAmount}` };\n }\n\n // Call oneclick quote method again\n // The destination chain is arb\n // Since the exact amount transferred by oneclick needs to be signed, EXACT_OUTPUT mode must be used\n // In EXACT_OUTPUT mode, the output amount equals the expected value\n execTime.breakpoint();\n const oneClickResult = await oneClickService.quote({\n ...params,\n toToken: MIDDLE_TOKEN_CHAIN,\n destinationAsset: MIDDLE_TOKEN_CHAIN.assetId,\n swapType: \"EXACT_OUTPUT\",\n isProxy: true,\n recipient: destinationRecipientAddress,\n appFees: [\n {\n recipient: \"reffer.near\",\n // No bridge fee will be charged temporarily\n fee: +oneClickFeeRatio, // 10000 = 100% 1000 = 10% 100=1% 1=0.01%\n },\n ],\n });\n execTime.log(\"oneClickService.quote\");\n\n let totalFeesUsd = Big(0);\n let _destinationGasFeeUsd = Big(oneClickResult.fees?.destinationGasFeeUsd || 0).minus(usdt0MessageFeeUsd);\n if (Big(_destinationGasFeeUsd).lt(0)) {\n _destinationGasFeeUsd = Big(0);\n }\n const fees = {\n ...oneClickResult.fees,\n destinationGasFeeUsd: numberRemoveEndZero(Big(_destinationGasFeeUsd).toFixed(20)),\n };\n for (const feeKey in usdt0Result.fees) {\n if (usdt0ExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = usdt0Result.fees[feeKey];\n }\n for (const feeKey in fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n const usdt0SendParam = usdt0Result.sendParam?.param?.[0];\n const usdt0MessageFee = usdt0Result.sendParam?.param?.[1];\n\n execTime.log(\"OneClickUsdt0Service.quote\");\n\n return {\n ...oneClickResult,\n needPermit: true,\n permitSpender: MIDDLE_CHAIN_LAYERZERO_EXECUTOR,\n permitToken: MIDDLE_TOKEN_CHAIN,\n permitAmountWei: oneClickResult?.quote?.amountOut,\n permitAdditionalData: {\n amount_ld: usdt0SendParam?.amountLD,\n compose_msg: usdt0SendParam?.composeMsg,\n dst_eid: usdt0SendParam?.dstEid,\n extra_options: usdt0SendParam?.extraOptions,\n min_amount_ld: usdt0SendParam?.minAmountLD?.toString(),\n oft_cmd: usdt0SendParam?.oftCmd,\n to: usdt0SendParam?.to,\n native_fee: usdt0MessageFee?.nativeFee?.toString(),\n },\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime: usdt0Result.estimateTime + oneClickResult.estimateTime,\n outputAmount: usdt0Result.outputAmount,\n quoteParam: {\n ...oneClickResult.quoteParam,\n toToken: params.toToken,\n middleToken: MIDDLE_TOKEN_CHAIN,\n recipient: params.recipient,\n isOriginLegacy: usdt0Result.quoteParam?.isOriginLegacy,\n isDestinationLegacy: usdt0Result.quoteParam?.isDestinationLegacy,\n },\n usdt0SendParam,\n usdt0MessageFee,\n sourceQuoteParams: params,\n };\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const { } = params;\n\n return oneClickService.estimateTransaction(params, quoteData);\n }\n\n public async send(params: any) {\n return oneClickService.send(params);\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new OneClickUsdt0Service();\n","// native chain name\nexport const NativeChains: Record<string, string> = {\n \"Ethereum\": \"ethereum\",\n \"Arbitrum\": \"arbitrum\",\n \"BNB Chain\": \"bsc\",\n \"Base\": \"base\",\n};\n\nexport const NativeV4Routes: Record<string, { swap: string; bridge: string; }> = {\n \"Ethereum\": {\n swap: \"0x8a2ddc0461Fcf96F81a05529Bed540d4f1eb2a00\",\n bridge: \"0xceBFC5dFBD5CE21694fe2ACefa63aD6f828831d2\",\n },\n \"Arbitrum\": {\n swap: \"0x0FC85a171bD0b53BF0bBace74F04B66170Ae3eAb\",\n bridge: \"0x5E65CEa5473fC8977e4DfDe940B2A99a439181cA\",\n },\n \"BNB Chain\": {\n swap: \"0xF064b069Ed18Eb5c61159247C55C5af79B28a968\",\n bridge: \"0x5B933868f5e710070b146213ED2Cd71628E465C1\",\n },\n \"Base\": {\n swap: \"0xaEC634d949df14Be76dC317504C7b9a6a8A5f576\",\n bridge: \"0xA11f7CdE7402093FF4D24A91FD8cdcc8AA0c96A8\",\n },\n};\n","import { formatNumber } from \"../utils/format-number\";\nimport Big from \"big.js\";\nimport { NativeChains, NativeV4Routes } from \"./contract\";\nimport { ExecTime, getRequest, GetStatusParams, GetStatusStableflowResponse } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { Service } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\n\nexport class NativeService {\n public async quote(params: any) {\n const {\n dry,\n wallet,\n amountWei,\n refundTo,\n fromToken,\n toToken,\n prices,\n recipient,\n slippageTolerance,\n } = params;\n\n const _quoteType = `NativeService ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"indigo-600\", isDebug: OpenAPI.DEBUG });\n\n const isSwap = fromToken.chainName === toToken.chainName;\n\n let quoteUri = \"/firm-quote\";\n const quoteParams: any = {\n version: 4,\n from_address: refundTo,\n to_address: recipient,\n beneficiary_address: recipient,\n refund_to: refundTo,\n src_chain: NativeChains[fromToken.chainName],\n dst_chain: NativeChains[toToken.chainName],\n token_in: fromToken.contractAddress,\n token_out: toToken.contractAddress,\n amount_wei: amountWei,\n expiry_time: 90, // 90 seconds\n timeout_millis: 3000, // 3 seconds\n slippage: slippageTolerance,\n allow_multihop: true\n };\n\n if (dry) {\n quoteUri = \"/indicative-quote\";\n }\n\n if (!isSwap) {\n quoteUri = `/bridge${quoteUri}`;\n }\n\n execTime.breakpoint();\n const response: any = await getRequest(`/v0${quoteUri}`, quoteParams);\n execTime.log(\"Native API, response: %o\", response);\n\n if (!response?.success) {\n let errorMessage = response?.message || \"Native quote failed\";\n // requested amount smaller than token in minimum wei [18446744073709551615]\n if (errorMessage.includes(\"requested amount smaller than token in minimum wei\")) {\n const match = errorMessage.match(/\\[(\\d+)\\]/);\n if (match) {\n const minWei = match[1];\n const minAmount = Big(minWei).div(10 ** fromToken.decimals);\n errorMessage = `Amount is too low, at least ${formatNumber(minAmount, fromToken.decimals, true)} ${fromToken.symbol}`;\n }\n }\n if (errorMessage.includes(\"requested amount smaller than token out minimum wei\")) {\n const match = errorMessage.match(/\\[(\\d+)\\]/);\n if (match) {\n const minWei = match[1];\n const minAmount = Big(minWei).div(10 ** toToken.decimals);\n errorMessage = `Amount is too low. A minimum of ${formatNumber(minAmount, toToken.decimals, true)} ${toToken.symbol} must be output.`;\n }\n }\n throw new Error(errorMessage);\n }\n\n execTime.breakpoint();\n const result = await wallet.quote(Service.Native, {\n ...params,\n ...quoteParams,\n quoteResponse: response,\n bridgeRouterAddress: isSwap ? NativeV4Routes[fromToken.chainName].swap : NativeV4Routes[fromToken.chainName].bridge,\n });\n execTime.log(\"wallet.quoteNative\");\n\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"NativeService.quote\");\n\n return result;\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const {\n fromToken,\n wallet,\n prices,\n evmGasFees,\n refundTo,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n if (!quoteData.sendParam?.txRequest) {\n return quoteData;\n }\n\n const result: any = { fees: {}, ...quoteData };\n\n const ett = await wallet.estimateTransaction({\n dry: false,\n // { txRequest: {} }\n ...quoteData.sendParam,\n fromToken,\n prices,\n evmGasFees,\n refundTo,\n });\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n if (fromToken.chainType === \"evm\") {\n csl(\"NativeService estimateTransaction\", \"green-500\", \"Old gasLimit: %o\", result.sendParam.txRequest.gasLimit);\n result.sendParam.txRequest.gasLimit = ett.estimateSourceGasLimit;\n csl(\"NativeService estimateTransaction\", \"green-500\", \"Updated gasLimit: %o\", result.sendParam.txRequest.gasLimit);\n }\n\n return result;\n }\n\n public async send(params: any) {\n const {\n wallet,\n txRequest,\n } = params;\n\n const txResponse = await wallet.signer.sendTransaction({\n to: txRequest.target,\n data: txRequest.calldata,\n value: txRequest.value,\n gasLimit: txRequest.gasLimit,\n });\n\n // wait for tx to be mined\n await txResponse.wait();\n\n return txResponse.hash;\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new NativeService();\n","import oneClickService from \"./oneclick\";\nimport usdt0Service from \"./usdt0\";\nimport cctpService from \"./cctp\";\nimport fraxzeroService from \"./fraxzero\";\nimport fraxZeroOneClickService from \"./fraxzero/to-oneclick\";\nimport oneClickFraxZeroService from \"./fraxzero/from-oneclick\";\nimport usdt0OneClickService from \"./usdt0/to-oneclick\";\nimport oneClickUsdt0Service from \"./usdt0/from-oneclick\";\nimport nativeService from \"./native\";\nimport { Service } from \"@stableflow/core\";\n\nexport const ServiceMap: Record<Service, any> = {\n [Service.OneClick]: oneClickService,\n [Service.Usdt0]: usdt0Service,\n [Service.CCTP]: cctpService,\n [Service.FraxZero]: fraxzeroService,\n [Service.FraxZeroOneClick]: fraxZeroOneClickService,\n [Service.OneClickFraxZero]: oneClickFraxZeroService,\n [Service.Usdt0OneClick]: usdt0OneClickService,\n [Service.OneClickUsdt0]: oneClickUsdt0Service,\n [Service.Native]: nativeService,\n};\n","import type { GetStatusParams, SubmitDepositTxResponse } from '@stableflow/core';\nimport {\n OpenAPI,\n Service,\n ServiceBackend,\n TransactionStatus,\n tokens,\n type TokenConfig,\n type WalletConfig,\n getRouteStatus,\n Csl,\n CancelablePromise,\n StableflowStatus,\n LayerZeroStatus,\n OneClickStatus,\n postRequest,\n} from '@stableflow/core';\nimport Big from 'big.js';\nimport { ServiceMap } from './service-map';\nimport { formatQuoteError, getQuoteModes } from './utils';\n\nexport interface GetAllQuoteParams {\n singleService?: Service;\n disabledServices?: Service[];\n dry?: boolean;\n prices: Record<string, string>;\n fromToken: TokenConfig;\n toToken: TokenConfig;\n wallet: WalletConfig;\n evmWallet?: WalletConfig | null;\n evmAddress?: string | null;\n recipient: string;\n refundTo: string;\n amountWei: string;\n slippageTolerance: number;\n minInputAmount?: string;\n /** @deprecated Please migrate to oneclickParams */\n appFees?: { recipient: string; fee: number; }[];\n oneclickParams?: {\n appFees?: { recipient: string; fee: number; }[];\n swapType?: \"EXACT_INPUT\" | \"EXACT_OUTPUT\" | \"FLEX_INPUT\";\n isProxy?: boolean;\n };\n}\n\nconst submitOthersTx = (\n requestBody: {\n address: string;\n amount?: string;\n deposit_address: string;\n destination_domain_id?: number;\n fee?: string;\n project: \"nearintents\" | \"layerzero\" | \"cctp\";\n receive_address: string;\n source_domain_id?: number;\n out_amount?: string;\n from_chain?: string;\n symbol?: string;\n to_chain?: string;\n to_symbol?: string;\n tx_hash?: string;\n layer_zero_permit?: unknown;\n frax_zero_permit?: unknown;\n },\n): CancelablePromise<SubmitDepositTxResponse> => {\n return postRequest('/v0/trade/add', requestBody);\n};\n\n/**\n * Full cross-chain bridge API (multi-route quote, send, status).\n * Install `@stableflow/bridges` alongside `@stableflow/core`.\n */\nexport class BridgeSFA {\n public static async getAllQuote(params: GetAllQuoteParams): Promise<Array<{ serviceType: Service; quote?: any; error?: string }>> {\n const results: Array<{ serviceType: Service; quote?: any; error?: string }> = [];\n\n let { minInputAmount = \"1\", disabledServices } = params;\n if (Big(minInputAmount).lte(0)) {\n minInputAmount = \"1\";\n }\n\n if (\n !params.fromToken\n || !params.fromToken.contractAddress\n || !params.toToken\n || !params.toToken.contractAddress\n || !params.refundTo\n || !params.recipient\n || !params.amountWei\n || Big(params.amountWei).lte(minInputAmount)\n ) {\n throw new Error('Invalid parameters');\n }\n\n const formatQuoteParams = (service: Service) => {\n const _params: any = {\n dry: params.dry,\n amountWei: params.amountWei,\n refundTo: params.refundTo || \"\",\n recipient: params.recipient,\n wallet: params.wallet,\n fromToken: params.fromToken,\n toToken: params.toToken,\n prices: params.prices,\n slippageTolerance: params.slippageTolerance,\n evmWallet: params.evmWallet,\n evmAddress: params.evmAddress,\n };\n\n if (([\n Service.OneClick,\n Service.Usdt0OneClick,\n Service.OneClickUsdt0,\n Service.FraxZeroOneClick,\n Service.OneClickFraxZero,\n ] as Service[]).includes(service)) {\n _params.slippageTolerance = params.slippageTolerance * 100;\n _params.originAsset = params.fromToken.assetId;\n _params.destinationAsset = params.toToken.assetId;\n _params.refundType = \"ORIGIN_CHAIN\";\n _params.appFees = params.oneclickParams?.appFees || params.appFees;\n _params.swapType = params.oneclickParams?.swapType;\n _params.isProxy = params.oneclickParams?.isProxy;\n }\n if (([\n Service.Usdt0,\n Service.CCTP,\n Service.Usdt0OneClick,\n Service.OneClickUsdt0\n ] as Service[]).includes(service)) {\n _params.originChain = params.fromToken.chainName;\n _params.destinationChain = params.toToken.chainName;\n }\n return _params;\n };\n\n const fromToken = tokens.find(token => token.contractAddress.toLowerCase() === params.fromToken.contractAddress.toLowerCase());\n const toToken = tokens.find(token => token.contractAddress.toLowerCase() === params.toToken.contractAddress.toLowerCase());\n\n if (!fromToken || !toToken) {\n throw new Error('Token pair not supported');\n }\n\n const isFromUsdt = [\"USDT\", \"USD₮0\"].includes(fromToken.symbol);\n const isToUsdt = [\"USDT\", \"USD₮0\"].includes(toToken.symbol);\n\n const quoteServices: any = [];\n const pushQuoteService = (_service: Service) => {\n const serviceStatus = getRouteStatus(_service, disabledServices);\n if (serviceStatus.disabled) {\n return;\n }\n const quoteParams = formatQuoteParams(_service);\n quoteServices.push({\n service: _service,\n quote: () => {\n return ServiceMap[_service].quote(quoteParams);\n },\n });\n };\n\n for (const serviceType of Object.values(Service)) {\n if (\n fromToken.services.includes(serviceType)\n && toToken.services.includes(serviceType)\n ) {\n pushQuoteService(serviceType);\n }\n }\n\n if (\n fromToken.services.includes(Service.Usdt0)\n && toToken.services.includes(Service.OneClick)\n && fromToken.chainName !== \"Arbitrum\"\n ) {\n if (isFromUsdt && isToUsdt) {\n if (toToken.chainName !== \"Arbitrum\") {\n pushQuoteService(Service.Usdt0OneClick);\n }\n } else {\n pushQuoteService(Service.Usdt0OneClick);\n }\n }\n\n if (\n fromToken.services.includes(Service.OneClick)\n && toToken.services.includes(Service.Usdt0)\n && toToken.chainName !== \"Arbitrum\"\n ) {\n if (isFromUsdt && isToUsdt) {\n if (fromToken.chainName !== \"Arbitrum\") {\n pushQuoteService(Service.OneClickUsdt0);\n }\n } else {\n pushQuoteService(Service.OneClickUsdt0);\n }\n }\n\n if (\n fromToken.services.includes(Service.FraxZero)\n && toToken.services.includes(Service.OneClick)\n ) {\n pushQuoteService(Service.FraxZeroOneClick);\n }\n\n if (\n fromToken.services.includes(Service.OneClick)\n && toToken.services.includes(Service.FraxZero)\n ) {\n pushQuoteService(Service.OneClickFraxZero);\n }\n\n if (params.singleService) {\n const quoteService = quoteServices.find((service: any) => service.service === params.singleService);\n if (quoteService) {\n try {\n const quoteRes = await quoteService.quote();\n results.push({\n serviceType: quoteService.service,\n quote: quoteRes,\n });\n } catch (error) {\n const _err = formatQuoteError(error, { service: quoteService.service, fromToken });\n results.push(_err);\n }\n }\n return results;\n }\n\n const promises: Promise<void>[] = [];\n for (const quoteService of quoteServices) {\n const promise = (async () => {\n try {\n const quoteRes = await quoteService.quote();\n results.push({\n serviceType: quoteService.service,\n quote: quoteRes,\n });\n } catch (error) {\n console.log(\"%s quote failed: %o\", quoteService.service, error);\n const _err = formatQuoteError(error, { service: quoteService.service, fromToken });\n results.push(_err);\n }\n })();\n promises.push(promise);\n }\n await Promise.allSettled(promises);\n return results;\n }\n\n public static async send(\n serviceType: Service,\n params: {\n wallet: any;\n quote: any;\n permitSignature?: {\n amount: string;\n deadline: number;\n nonce: string;\n owner: string;\n r: string;\n s: string;\n v: 27 | 28;\n };\n }\n ): Promise<string> {\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const service = ServiceMap[serviceType];\n if (!service) {\n throw new Error(`Invalid service type: ${serviceType}`);\n }\n\n if (!service.send) {\n throw new Error(`Service ${serviceType} does not support send method`);\n }\n\n const { quote, wallet, permitSignature } = params;\n\n if (!quote) {\n throw new Error('Quote data is required');\n }\n\n if (quote.needPermit) {\n if (!permitSignature) {\n throw new Error('Permit signature is required');\n }\n }\n\n const sendParams: any = {\n wallet,\n };\n\n const { isExactOutput, isOneClickService, isQuoteParamDepositAddress } = getQuoteModes({\n quoteData: quote,\n bridgeStore: { quoteDataService: serviceType },\n });\n const fromToken = quote.quoteParam.fromToken;\n const toToken = quote.quoteParam.toToken;\n const depositAddress = quote.quote?.depositAddress;\n const sendParam = quote.sendParam;\n\n let _amountWei = quote.quoteParam?.amountWei;\n if (isExactOutput) {\n _amountWei = quote.quote?.minAmountIn;\n }\n\n if (isOneClickService) {\n sendParams.sendParam = sendParam;\n sendParams.fromToken = fromToken;\n sendParams.depositAddress = depositAddress;\n sendParams.amountWei = _amountWei;\n } else {\n for (const key in sendParam) {\n sendParams[key] = sendParam[key];\n }\n }\n\n csl(\"BridgeSFA.send\", \"blue-400\", \"sendParams: %o\", sendParams);\n\n const txhash = await service.send(sendParams);\n\n try {\n const reportData: any = {\n project: ServiceBackend[serviceType] as any,\n address: quote.quoteParam?.refundTo,\n amount: isExactOutput ? quote.quote.amountInFormatted : Big(_amountWei || 0).div(10 ** (fromToken?.decimals || 6)).toFixed(fromToken?.decimals || 6, 0),\n out_amount: quote.outputAmount,\n deposit_address: isOneClickService ? quote.quote?.depositAddress : \"\",\n receive_address: quote.quoteParam?.recipient,\n from_chain: fromToken.blockchain,\n symbol: /^USD₮0$/i.test(fromToken.symbol) ? \"USDT\" : fromToken.symbol,\n to_chain: toToken.blockchain,\n to_symbol: /^USD₮0$/i.test(toToken.symbol) ? \"USDT\" : toToken.symbol,\n tx_hash: \"\",\n };\n\n if (permitSignature) {\n if (([Service.OneClickUsdt0] as Service[]).includes(serviceType)) {\n reportData.layer_zero_permit = {\n ...permitSignature,\n ...quote.permitAdditionalData,\n };\n }\n if (([Service.OneClickFraxZero, Service.FraxZeroOneClick] as Service[]).includes(serviceType)) {\n reportData.frax_zero_permit = {\n ...permitSignature,\n ...quote.permitAdditionalData,\n };\n }\n }\n\n reportData.tx_hash = txhash;\n\n let _depositAddress = txhash;\n if (isQuoteParamDepositAddress) {\n _depositAddress = quote.quoteParam?.depositAddress || txhash;\n }\n if (!reportData.deposit_address) {\n reportData.deposit_address = _depositAddress;\n }\n\n if (serviceType === Service.Native) {\n const quoteIds = quote?.orders?.map?.((order: any) => order.quoteId) || [];\n reportData.quoteIds = quoteIds;\n }\n\n csl(\"BridgeSFA.send\", \"blue-400\", \"reportData: %o\", reportData);\n\n submitOthersTx(reportData);\n } catch (error) {\n console.log(\"%cReport tx failed: %o\", \"background:#f00;color:#fff;\", error);\n }\n\n return txhash;\n }\n\n public static async getStatus(\n serviceType: Service,\n params: {\n quote: any;\n hash: string;\n }\n ): Promise<{ status: TransactionStatus; toChainTxHash?: string; }> {\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const service = ServiceMap[serviceType];\n if (!service) {\n throw new Error(`Invalid service type: ${serviceType}`);\n }\n\n if (!service.getStatus) {\n throw new Error(`Service ${serviceType} does not support getStatus method`);\n }\n\n const { quote, hash } = params;\n\n const getStatusParams: GetStatusParams = {};\n\n const { isOneClickService, isQuoteParamDepositAddress } = getQuoteModes({\n quoteData: quote,\n bridgeStore: { quoteDataService: serviceType },\n });\n\n getStatusParams.depositAddress = isOneClickService ? quote.quote.depositAddress : \"\";\n getStatusParams.hash = hash;\n\n if (!isOneClickService) {\n let _depositAddress = hash;\n if (isQuoteParamDepositAddress) {\n _depositAddress = quote?.quoteParam?.depositAddress || hash;\n }\n getStatusParams.depositAddress = _depositAddress;\n }\n\n csl(\"getStatus\", \"fuchsia-500\", \"getStatusParams: %o\", getStatusParams);\n\n const result: { status: TransactionStatus; toChainTxHash?: string; } = { status: TransactionStatus.Pending };\n const response = await service.getStatus(getStatusParams);\n\n if (([Service.CCTP, Service.Native] as Service[]).includes(serviceType)) {\n const _result = response?.data;\n const status = _result?.status;\n if (status === StableflowStatus.SUCCESS) {\n result.status = TransactionStatus.Success;\n result.toChainTxHash = _result?.to_tx_hash;\n }\n if (status === StableflowStatus.FAILED) {\n result.status = TransactionStatus.Failed;\n }\n }\n\n if (([Service.Usdt0] as Service[]).includes(serviceType)) {\n const _result = response?.data?.[0];\n const status = _result?.status?.name;\n if (status === LayerZeroStatus.DELIVERED) {\n result.status = TransactionStatus.Success;\n result.toChainTxHash = _result?.destination?.tx?.txHash;\n }\n if ([LayerZeroStatus.FAILED, LayerZeroStatus.BLOCKED].includes(status)) {\n result.status = TransactionStatus.Failed;\n }\n }\n\n if (([Service.OneClick] as Service[]).includes(serviceType)) {\n const status = response?.status;\n\n if (status === OneClickStatus.SUCCESS) {\n result.status = TransactionStatus.Success;\n result.toChainTxHash = response?.swapDetails?.destinationChainTxHashes?.[0]?.hash;\n }\n\n if ([OneClickStatus.REFUNDED, OneClickStatus.FAILED].includes(status)) {\n result.status = TransactionStatus.Failed;\n }\n }\n\n if (([Service.OneClickUsdt0, Service.Usdt0OneClick, Service.FraxZero, Service.OneClickFraxZero, Service.FraxZeroOneClick] as Service[]).includes(serviceType)) {\n const _result = response?.data;\n const status = _result?.status;\n if (status === StableflowStatus.SUCCESS) {\n result.status = TransactionStatus.Success;\n result.toChainTxHash = _result?.to_tx_hash;\n }\n if (status === StableflowStatus.FAILED) {\n result.status = TransactionStatus.Failed;\n }\n }\n\n return result;\n }\n}\n","import { ethers } from \"ethers\";\nimport { USDT0_CONFIG } from \"./config\";\nimport { OFT_ABI } from \"./contract\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { usdt0Chains } from \"@stableflow/core\";\nimport { evmRpcFallbackProvider } from \"@stableflow/utils-evm\";\nimport { Csl } from \"@stableflow/core\";\n\nexport const getHopMsgFee = async (params: any) => {\n const {\n sendParam,\n toToken,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const execTime = new ExecTime({ type: \"getHopMsgFee\", logStyle: \"lime-800\", isDebug: OpenAPI.DEBUG });\n\n const originLayerzero = USDT0_CONFIG[\"Arbitrum\"];\n const destinationLayerzero = USDT0_CONFIG[toToken.chainName];\n\n let arbitrumOft = originLayerzero.oft;\n let destinationLayerzeroAddress = destinationLayerzero.oft || destinationLayerzero.oftLegacy;\n const isDestinationLegacy = destinationLayerzeroAddress === destinationLayerzero.oftLegacy;\n if (isDestinationLegacy) {\n arbitrumOft = originLayerzero.oftLegacy || originLayerzero.oft;\n }\n\n execTime.breakpoint();\n const provider = evmRpcFallbackProvider(usdt0Chains[\"arb\"]);\n const oftContractRead = new ethers.Contract(arbitrumOft!, OFT_ABI, provider);\n execTime.log(\"provider init\");\n\n try {\n execTime.breakpoint();\n const msgFee = await oftContractRead.quoteSend.staticCall(sendParam, false);\n execTime.log(\"quoteSend\");\n\n const [nativeFee] = msgFee;\n\n execTime.logTotal(\"getHopMsgFee\");\n\n return nativeFee * 100n / 100n;\n } catch (error) {\n csl(\"getHopMsgFee\", \"red-500\", \"getHopMsgFee failed: %o\", error);\n throw new Error(\"Quote multi hop message fee failed\");\n }\n};\n"]}
1
+ {"version":3,"sources":["../src/oneclick/contract.ts","../src/oneclick/index.ts","../src/utils/layerzero.ts","../src/utils/nearintents.ts","../src/utils/address.ts","../src/utils/error.ts","../src/utils/cctp.ts","../src/utils/format-number.ts","../src/usdt0/config.ts","../src/usdt0/contract.ts","../src/usdt0/index.ts","../src/cctp/contract.ts","../src/cctp/config.ts","../src/cctp/index.ts","../src/fraxzero/config.ts","../src/fraxzero/contract.ts","../src/fraxzero/index.ts","../src/fraxzero/to-oneclick.ts","../src/fraxzero/from-oneclick.ts","../src/usdt0/to-oneclick.ts","../src/usdt0/from-oneclick.ts","../src/native/contract.ts","../src/native/index.ts","../src/service-map.ts","../src/sfa.ts","../src/usdt0/hop-composer.ts"],"names":["Service","Big","postRequest","excludeFees","ExecTime","OpenAPI","isOriginLegacy","isDestinationLegacy","isBothLegacy","isMultiHopComposer","result","Csl","numberRemoveEndZero","SendType","getRequest","PayInLzToken","getPrice","oneClickResult","evmRpcFallbackProvider","secondStepResult","firstStepResult","totalFeesUsd","fees","to_oneclick_default","from_oneclick_default","usdt0Chains"],"mappings":";;;;;;;;;;AAAO,IAAM,cAAA,GAAyC;AAAA,EACpD,CAAC,UAAU,GAAG,4CAAA;AAAA,EACd,CAAC,SAAS,GAAG,4CAAA;AAAA,EACb,CAAC,WAAW,GAAG,4CAAA;AAAA,EACf,CAAC,UAAU,GAAG,4CAAA;AAAA,EACd,CAAC,WAAW,GAAG,4CAAA;AAAA,EACf,CAAC,UAAU,GAAG,4CAAA;AAAA,EACd,CAAC,WAAW,GAAG,4CAAA;AAAA,EACf,CAAC,MAAM,GAAG,oCAAA;AAAA,EACV,CAAC,QAAQ,GAAG,6CAAA;AAAA,EACZ,CAAC,MAAM,GAAG,cAAA;AAAA,EACV,CAAC,OAAO,GAAG,oEAAA;AAAA,EACX,CAAC,MAAM,GAAG,4CAAA;AAAA,EACV,CAAC,SAAS,GAAG,4CAAA;AAAA,EACb,CAAC,QAAQ,GAAG,4CAAA;AAAA,EACZ,CAAC,KAAK,GAAG,kDAAA;AAAA,EACT,CAAC,KAAK,GAAG;AACX,CAAA;AAEO,IAAM,kBAAA,GAAqB;AAAA,EAChC;AAAA,IACE,QAAA,EAAU;AAAA,MACR;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,cAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,IACA,MAAA,EAAQ,eAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA;AAEZ,CAAA;AC/BO,IAAM,SAAA,GAAY;AAAA,EACvB;AAAA,IACE,SAAA,EAAW,aAAA;AAAA;AAAA,IAEX,GAAA,EAAK;AAAA;AAAA;AAET,CAAA;AAEO,IAAM,WAAA,GAAwB,CAAC,gBAAgB,CAAA;AAE/C,IAAM,kBAAN,MAAsB;AAAA,EAE3B,WAAA,GAAc;AADd,IAAA,IAAA,CAAQ,UAAA,GAAa,MAAO,EAAA,GAAK,EAAA;AAAA,EAEjC;AAAA,EAEA,MAAa,gBAAgB,GAAA,EAAkC;AAC7D,IAAA,MAAM,EAAE,QAAO,GAAI,GAAA;AACnB,IAAA,MAAM,EAAE,OAAA,GAAU,IAAA,EAAM,MAAA,EAAO,GAAI,MAAA;AAEnC,IAAA,MAAM,aAAA,GAAgB,OAAO,QAAA,KAAa,cAAA;AAC1C,IAAyB,QAAA,CAAS,MAAA,EAAQ,MAAA,CAAO,SAAA,CAAU,YAAY,MAAM;AAC7E,IAA4B,MAAA,CAAO,SAAA,CAAU,WAAA,CAAY;AAEzD,IAAA,MAAM,EAAA,GAAK,IAAI,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AACf,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,CAAS,EAAE,IAAA,EAAM,iCAAA,EAAmC,QAAA,EAAU,UAAA,EAAY,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAO,CAAA;AAEvH,IAAA,IAAI,IAAI,IAAA,EAAM;AAIZ,MAAA,IAAI,GAAA,CAAI,MAAM,KAAA,EAAO;AACnB,QAAA,IAAI,GAAA,CAAI,IAAI,IAAA,CAAK,KAAA,CAAM,gBAAgB,CAAC,CAAA,CAAE,EAAA,CAAG,EAAE,CAAA,EAAG;AAChD,UAAA,GAAA,CAAI,IAAA,CAAK,MAAM,YAAA,GAAe,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,EAAO,GAAI,CAAC,CAAA,GAAI,EAAA;AAAA,QAChE;AAAA,MACF;AAEA,MAAA,GAAA,CAAI,IAAA,CAAK,YAAA,GAAe,GAAA,CAAI,IAAA,EAAM,KAAA,EAAO,YAAA;AACzC,MAAA,GAAA,CAAI,IAAA,CAAK,eAAe,mBAAA,CAAoB,GAAA,CAAI,IAAI,IAAA,EAAM,KAAA,EAAO,aAAa,CAAC,CAAA,CAAE,IAAI,EAAA,IAAM,MAAA,CAAO,QAAQ,QAAQ,CAAA,CAAE,QAAQ,MAAA,CAAO,OAAA,CAAQ,QAAA,EAAU,CAAC,CAAC,CAAA;AACvJ,MAAA,IAAI,WAAA,GAAc,IAAI,CAAC,CAAA;AACvB,MAAA,IAAI,YAAA,GAAe,GAAA,CAAI,IAAA,EAAM,KAAA,EAAO,WAAA,IAAe,CAAA;AACnD,MAAA,IAAI,aAAA,GAAgB,GAAA,CAAI,IAAA,EAAM,KAAA,EAAO,YAAA,IAAgB,CAAA;AACrD,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,GAAA,CAAI,IAAA,CAAK,MAAM,iBAAA,GAAoB,mBAAA,CAAoB,IAAI,GAAA,CAAI,IAAA,EAAM,KAAA,EAAO,WAAA,IAAe,CAAC,CAAA,CAAE,IAAI,EAAA,IAAM,MAAA,CAAO,SAAA,CAAU,QAAQ,CAAA,CAAE,OAAA,CAAQ,OAAO,SAAA,CAAU,QAAA,EAAU,GAAA,CAAI,OAAO,CAAC,CAAA;AAElL,QAAA,YAAA,GAAe,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,iBAAiB,CAAA,CAAE,KAAA,CAAM,QAAA,CAAS,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,SAAA,CAAU,MAAM,CAAC,CAAA;AAC3G,QAAA,aAAA,GAAgB,GAAA,CAAI,GAAA,CAAI,IAAA,EAAM,KAAA,EAAO,sBAAsB,CAAC,CAAA,CAAE,KAAA,CAAM,QAAA,CAAS,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,MACtH;AACA,MAAA,IAAI;AACF,QAAA,WAAA,GAAc,GAAA,CAAI,GAAA,CAAI,YAAY,CAAA,CAAE,KAAA,CAAM,aAAa,CAAC,CAAA,CAAE,GAAA,CAAI,YAAA,IAAgB,CAAC,CAAA;AAC/E,QAAA,IAAI,GAAA,CAAI,WAAW,CAAA,CAAE,EAAA,CAAG,CAAC,CAAA,EAAG;AAC1B,UAAA,WAAA,GAAc,IAAI,CAAC,CAAA;AAAA,QACrB;AAAA,MACF,SAAS,KAAA,EAAO;AAAA,MAAE;AAClB,MAAA,GAAA,CAAI,IAAA,CAAK,cAAc,mBAAA,CAAoB,GAAA,CAAI,WAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA;AAEtE,MAAA,MAAM,kBAAkB,MAAA,CAAO,SAAA,CAAU,WAAW,YAAA,GAAU,MAAA,GAAS,OAAO,SAAA,CAAU,MAAA;AACxF,MAAA,MAAM,gBAAgB,MAAA,CAAO,OAAA,CAAQ,WAAW,YAAA,GAAU,MAAA,GAAS,OAAO,OAAA,CAAQ,MAAA;AAClF,MAAA,GAAA,CAAI,KAAK,YAAA,GAAe,GAAA;AACxB,MAAA,IAAI,oBAAoB,aAAA,EAAe;AACrC,QAAA,GAAA,CAAI,IAAA,CAAK,eAAe,mBAAA,CAAoB,GAAA,CAAI,IAAI,IAAA,CAAK,KAAA,EAAO,kBAAA,IAAsB,CAAC,CAAA,CAAE,GAAA,CAAI,IAAI,IAAA,CAAK,KAAA,EAAO,qBAAqB,CAAC,CAAA,CAAE,QAAQ,MAAA,CAAO,OAAA,CAAQ,QAAA,EAAU,CAAC,CAAC,CAAA;AAAA,MAC1K;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,GAAA,CAAI,YAAY,CAAA,CAAE,MAAM,aAAa,CAAA;AACpD,QAAA,IAAI,cAAA,GAAiB,IAAI,CAAC,CAAA;AAC1B,QAAA,IAAI,iBAAA,GAAoB,GAAA,CAAI,MAAM,CAAA,CAAE,MAAM,cAAc,CAAA;AACxD,QAAA,iBAAA,GAAoB,GAAA,CAAI,iBAAiB,CAAA,CAAE,EAAA,CAAG,CAAC,CAAA,GAAI,GAAA,CAAI,CAAC,CAAA,GAAI,iBAAA;AAC5D,QAAA,IAAI,oBAAoB,aAAA,EAAe;AACrC,UAAA,iBAAA,GAAoB,IAAI,CAAC,CAAA;AAAA,QAC3B;AACA,QAAA,GAAA,CAAI,KAAK,IAAA,GAAO;AAAA,UACd,cAAc,mBAAA,CAAoB,GAAA,CAAI,cAAc,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,UACjE,sBAAsB,mBAAA,CAAoB,GAAA,CAAI,iBAAiB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC;AAAA,SAC9E;AAGA,QAAA,GAAA,CAAI,KAAK,YAAA,GAAe,GAAA;AACxB,QAAA,KAAA,MAAW,MAAA,IAAU,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM;AAClC,UAAA,IAAI,WAAA,CAAY,SAAS,MAAM,CAAA,IAAK,CAAC,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACxD,YAAA;AAAA,UACF;AACA,UAAA,GAAA,CAAI,IAAA,CAAK,YAAA,GAAe,GAAA,CAAI,GAAA,CAAI,KAAK,YAAA,IAAgB,CAAC,CAAA,CAAE,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAA,CAAK,MAAM,KAAK,CAAC,CAAA;AAAA,QACzF;AACA,QAAA,GAAA,CAAI,IAAA,CAAK,YAAA,GAAe,mBAAA,CAAoB,GAAA,CAAI,GAAA,CAAI,KAAK,YAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,MAEpF,SAAS,KAAA,EAAO;AACd,QAAA,GAAA,CAAI,iCAAA,EAAmC,SAAA,EAAW,8BAAA,EAAgC,KAAK,CAAA;AAAA,MACzF;AAEA,MAAA,MAAM,YAAA,GAAe,cAAA,CAAe,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA;AAC9D,MAAA,IAAI,cAAmB,EAAC;AACxB,MAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,QAAA,WAAA,GAAc;AAAA,UACZ,KAAK,MAAA,CAAO,GAAA;AAAA,UACZ,YAAA;AAAA,UACA,GAAA,EAAK,kBAAA;AAAA,UACL,WAAW,MAAA,CAAO,SAAA;AAAA,UAClB,UAAU,MAAA,CAAO,QAAA;AAAA,UACjB,WAAW,MAAA,CAAO,SAAA;AAAA,UAClB,WAAW,aAAA,GAAgB,GAAA,CAAI,IAAA,EAAM,KAAA,EAAO,cAAc,MAAA,CAAO,SAAA;AAAA,UACjE,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,YAAY,MAAA,CAAO,UAAA;AAAA,UACnB,cAAA,EAAgB,IAAI,IAAA,EAAM,KAAA,EAAO,kBAAkB,gBAAA,CAAiB,MAAA,CAAO,UAAU,SAAsB;AAAA,SAC7G;AACA,QAAA,IAAI;AACF,UAAA,QAAA,CAAS,UAAA,EAAW;AACpB,UAAA,MAAM,cAAc,MAAM,MAAA,CAAO,OAAO,KAAA,CAAM,OAAA,CAAQ,UAAU,WAAW,CAAA;AAC3E,UAAA,QAAA,CAAS,IAAI,2BAA2B,CAAA;AAExC,UAAA,KAAA,MAAW,YAAY,WAAA,EAAa;AAClC,YAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,cAAA,KAAA,MAAW,MAAA,IAAU,YAAY,IAAA,EAAM;AACrC,gBAAA,IAAI,WAAA,CAAY,SAAS,MAAM,CAAA,IAAK,CAAC,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACxD,kBAAA;AAAA,gBACF;AACA,gBAAA,GAAA,CAAI,KAAK,IAAA,CAAK,MAAM,CAAA,GAAI,WAAA,CAAY,KAAK,MAAM,CAAA;AAAA,cACjD;AACA,cAAA;AAAA,YACF;AACA,YAAA,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA,GAAI,WAAA,CAAY,QAAQ,CAAA;AAAA,UAC3C;AAEA,UAAA,GAAA,CAAI,IAAA,CAAK,uBAAuB,WAAA,CAAY,iBAAA;AAC5C,UAAA,MAAM,uBAAA,GAA0B,IAAI,WAAA,CAAY,iBAAA,IAAqB,CAAC,CAAA,CAAE,GAAA,CAAI,MAAM,MAAA,CAAO,SAAA,CAAU,YAAY,QAAQ,CAAA,CAAE,MAAM,QAAA,CAAS,MAAA,CAAO,QAAQ,MAAA,CAAO,SAAA,CAAU,WAAA,CAAY,MAAM,CAAC,CAAA;AAC3L,UAAA,GAAA,CAAI,IAAA,CAAK,0BAA0B,mBAAA,CAAoB,GAAA,CAAI,uBAAuB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,QACjG,SAAS,KAAA,EAAO;AACd,UAAA,GAAA,CAAI,iCAAA,EAAmC,SAAA,EAAW,iCAAA,EAAmC,KAAK,CAAA;AAAA,QAC5F;AAAA,MACF;AAEA,MAAA,GAAA,CAAI,KAAK,UAAA,GAAa;AAAA,QACpB,GAAG,MAAA;AAAA,QACH,GAAG;AAAA,OACL;AAAA,IACF;AAEA,IAAA,QAAA,CAAS,SAAS,iCAAiC,CAAA;AAEnD,IAAA,OAAO,GAAA,CAAI,QAAQ,EAAC;AAAA,EACtB;AAAA,EAEA,MAAa,MAAM,MAAA,EAiBhB;AACD,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAU,EAAC;AAAA,MACX,QAAA,GAAW,aAAA;AAAA,MACX,OAAA,GAAU,IAAA;AAAA,MACV,GAAG;AAAA,KACL,GAAI,MAAA;AAEJ,IAAA,MAAM,aAAa,CAAA,gBAAA,EAAmB,SAAA,EAAW,SAAS,CAAA,EAAA,EAAK,SAAS,SAAS,CAAA,CAAA;AACjF,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,CAAS,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,UAAA,EAAY,OAAA,EAAS,OAAA,CAAQ,KAAA,EAAO,CAAA;AAEhG,IAAA,MAAM,WAAA,GAAmB;AAAA,MACvB,WAAA,EAAa,QAAA;AAAA,MACb,UAAU,QAAA,IAAY,aAAA;AAAA,MACtB,WAAA,EAAa,cAAA;AAAA,MACb,SAAA,EAAW,CAAA,QAAA,EAAW,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAC7C,SAAS,EAAE,CAAA,CACX,MAAA,CAAO,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAAA,MACf,aAAA,EAAe,mBAAA;AAAA,MACf,QAAA,EAAU,IAAI,IAAA,CAAK,IAAA,CAAK,KAAI,GAAI,IAAA,CAAK,UAAU,CAAA,CAAE,WAAA,EAAY;AAAA,MAC7D,kBAAA,EAAoB,CAAA;AAAA,MACpB,OAAA,EAAS;AAAA,QACP,GAAG,SAAA;AAAA,QACH,GAAG;AAAA,OACL;AAAA,MACA,QAAA,EAAU,YAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,IAAI,aAAa,cAAA,EAAgB;AAC/B,MAAA,WAAA,CAAY,SAAS,GAAA,CAAI,SAAA,IAAa,CAAC,CAAA,CAAE,IAAI,EAAA,IAAM,SAAA,CAAU,QAAQ,CAAA,CAAE,MAAM,EAAA,IAAM,OAAA,CAAQ,QAAQ,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,IAChH;AAEA,IAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,MAAA,IAAI,CAAC,cAAc,WAAA,EAAa,kBAAA,EAAoB,aAAa,CAAA,CAAE,QAAA,CAAS,CAAC,CAAA,EAAG;AAC9E,QAAA;AAAA,MACF;AACA,MAAA,WAAA,CAAY,CAAC,CAAA,GAAI,UAAA,CAAW,CAA4B,CAAA;AAAA,IAC1D;AAEA,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,QAAA,GAAgB,MAAM,WAAA,CAAY,WAAA,EAAa,WAAW,CAAA;AAChE,IAAA,QAAA,CAAS,IAAI,WAAW,CAAA;AAExB,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,eAAA,CAAgB,EAAE,IAAA,EAAM,QAAA,EAAU,QAAQ,CAAA;AACpE,IAAA,QAAA,CAAS,IAAI,iBAAiB,CAAA;AAE9B,IAAA,MAAA,CAAO,iBAAA,GAAoB,MAAA;AAE3B,IAAA,QAAA,CAAS,SAAS,uBAAuB,CAAA;AAEzC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,mBAAA,CAAoB,MAAA,EAAa,SAAA,EAAgB;AAC5D,IAAA,MAAM;AAAA,MACJ,SAAA;AAAA,MACA,OAAA,GAAU,IAAA;AAAA,MACV,MAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,gBAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,EAAA,GAAK,IAAI,GAAA,CAAI,OAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AAEf,IAAA,MAAM,SAAc,EAAE,IAAA,EAAM,EAAC,EAAG,GAAG,SAAA,EAAU;AAE7C,IAAA,MAAM,YAAA,GAAe,cAAA,CAAe,SAAA,CAAU,SAAS,CAAA;AACvD,IAAA,MAAM,UAAA,GAAa,UAAU,SAAA,KAAc,MAAA;AAC3C,IAAA,MAAM,mBAAmB,UAAA,IAAc,gBAAA;AACvC,IAAA,MAAM,eAAe,YAAA,IAAgB,OAAA;AACrC,IAAA,MAAM,gBAAA,GAAmB,QAAA,CAAS,MAAA,EAAQ,SAAA,CAAU,YAAY,MAAM,CAAA;AACtE,IAAA,MAAM,mBAAA,GAAsB,UAAU,WAAA,CAAY,QAAA;AAElD,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,mBAAA,CAAoB;AAAA,UAC/C,SAAA;AAAA,UACA,cAAA,EAAgB,gBAAA,CAAiB,SAAA,CAAU,SAAsB,CAAA;AAAA,UACjE,MAAA,EAAQ,SAAA;AAAA,UACR,OAAA,EAAS;AAAA,SACV,CAAA;AACD,QAAA,MAAA,CAAO,uBAAuB,OAAA,CAAQ,WAAA;AACtC,QAAA,MAAM,uBAAA,GAA0B,GAAA,CAAI,MAAA,CAAO,oBAAA,IAAwB,CAAC,CAAA,CAAE,GAAA,CAAI,EAAA,IAAM,mBAAmB,CAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA;AAC3H,QAAA,MAAA,CAAO,0BAA0B,mBAAA,CAAoB,GAAA,CAAI,uBAAuB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,MAC/F,SAAS,KAAA,EAAO;AACd,QAAA,GAAA,CAAI,qCAAA,EAAuC,SAAA,EAAW,wDAAA,EAA0D,KAAK,CAAA;AAAA,MACvH;AAAA,IACF;AAEA,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAM,yBAAA,GAA4B;AAAA,QAChC,GAAA,EAAK,KAAA;AAAA,QACL,GAAG,SAAA,CAAU,SAAA;AAAA,QACb,SAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,yBAAA,CAA0B,iBAAA,GAAoB,GAAA;AAC9C,QAAA,yBAAA,CAA0B,uBAAA,GAA0B,GAAA;AAAA,MACtD;AACA,MAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,mBAAA,CAAoB,yBAAyB,CAAA;AACtE,MAAA,MAAA,CAAO,IAAA,CAAK,iBAAiB,GAAA,CAAI,oBAAA;AACjC,MAAA,MAAA,CAAO,oBAAoB,GAAA,CAAI,iBAAA;AAC/B,MAAA,MAAA,CAAO,yBAAyB,GAAA,CAAI,iBAAA;AACpC,MAAA,MAAA,CAAO,uBAAuB,GAAA,CAAI,oBAAA;AAElC,MAAA,MAAA,CAAO,uBAAuB,GAAA,CAAI,iBAAA;AAClC,MAAA,MAAA,CAAO,0BAA0B,GAAA,CAAI,oBAAA;AAErC,MAAA,IAAI,SAAA,CAAU,cAAc,KAAA,EAAO;AACjC,QAAA,MAAM,UAAA,GAAa,OAAO,SAAA,EAAW,KAAA;AACrC,QAAA,IACE,UAAA,IACG,MAAM,OAAA,CAAQ,UAAU,KACxB,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,IAChC,OAAO,WAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,KAAM,QAAA,IAC7C,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,CAAA,CAAE,QAAA,KAAa,MAAA,EAClD;AACA,UAAA,GAAA,CAAI,qCAAA,EAAuC,aAAa,kBAAA,EAAoB,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,EAAE,QAAQ,CAAA;AACtH,UAAA,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,CAAE,WAAW,GAAA,CAAI,sBAAA;AACjD,UAAA,GAAA,CAAI,qCAAA,EAAuC,aAAa,sBAAA,EAAwB,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,EAAE,QAAQ,CAAA;AAAA,QAC5H;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAI,YAAA,GAAe,MAAA,CAAO,oBAAA,IAAwB,EAAC;AACnD,MAAA,IAAI,gBAAA,EAAkB;AACpB,QAAA,YAAA,GAAe,MAAA,CAAO,kBAAA;AAAA,MACxB;AACA,MAAA,MAAM,cAAA,GAAiB,GAAA,CAAI,YAAA,CAAa,WAAA,IAAe,CAAC,CAAA,CAAE,GAAA,CAAI,EAAA,IAAM,mBAAmB,CAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA;AAC/G,MAAA,MAAA,CAAO,IAAA,CAAK,iBAAiB,mBAAA,CAAoB,GAAA,CAAI,cAAc,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAChF,MAAA,MAAA,CAAO,oBAAoB,YAAA,CAAa,WAAA;AACxC,MAAA,MAAA,CAAO,yBAAyB,YAAA,CAAa,WAAA;AAC7C,MAAA,MAAA,CAAO,uBAAuB,mBAAA,CAAoB,GAAA,CAAI,cAAc,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,IACnF;AAEA,IAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,eAAA,EAAiB;AAChD,MAAA,MAAM,cAAA,GAAiB,MAAM,MAAA,CAAO,eAAA,CAAgB;AAAA,QAClD,GAAA,EAAK,KAAA;AAAA,QACL,SAAA;AAAA,QACA,SAAS,MAAA,CAAO,cAAA;AAAA,QAChB,SAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,MAAA,CAAO,qBAAqB,cAAA,CAAe,iBAAA;AAAA,IAC7C;AAEA,IAAA,MAAA,CAAO,YAAA,GAAe,GAAA;AACtB,IAAA,KAAA,MAAW,MAAA,IAAU,OAAO,IAAA,EAAM;AAChC,MAAA,IAAI,WAAA,CAAY,SAAS,MAAM,CAAA,IAAK,CAAC,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACxD,QAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,YAAA,GAAe,GAAA,CAAI,MAAA,CAAO,YAAA,IAAgB,CAAC,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,IAAK,CAAC,CAAA;AAAA,IACnF;AACA,IAAA,MAAA,CAAO,YAAA,GAAe,oBAAoB,GAAA,CAAI,MAAA,CAAO,YAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAE9E,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,KAAK,MAAA,EAAa;AAC7B,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,SAAA;AAAA,MACA,cAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAGJ,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAM,KAAK,MAAM,MAAA,CAAO,IAAA,CAAK,QAAA,CAAS,MAAM,SAAS,CAAA;AACrD,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,IAAA,CAAK,SAAS,QAAA,EAAU;AAAA,MAChD,aAAa,SAAA,CAAU,eAAA;AAAA,MACvB,cAAA;AAAA,MACA,MAAA,EAAQ;AAAA,KACT,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEO,WAAW,MAAA,EAAoD;AACpE,IAAA,OAAO,WAAA,CAAY,sBAAsB,MAAM,CAAA;AAAA,EACjD;AAAA,EAEO,UAAU,MAAA,EAAyB;AACxC,IAAA,OAAO,UAAA,CAAW,cAAc,MAAM,CAAA;AAAA,EACxC;AACF,CAAA;AAEA,IAAO,gBAAA,GAAQ,IAAI,eAAA,EAAgB;;;AC7W5B,IAAM,iBAAA,GAA0D;AAAA,EACrE,UAAA,EAAY;AAAA,IACV,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,UAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,UAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,SAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,UAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,WAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,QAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,QAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,QAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,QAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,SAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,KAAA,EAAO;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,KAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,QAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,KAAA,EAAO;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,KAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,OAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,WAAA,EAAa;AAAA,IACX,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,KAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AAAA,EAMA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,QAAA;AAAA,IACV,SAAA,EAAW;AAAA;AAEf,CAAA;AAYO,SAAS,sBAAsB,MAAA,EAI3B;AACT,EAAA,MAAM;AAAA,IACJ,gBAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF,GAAI,MAAA;AAGJ,EAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,iBAAA,EAAmB;AACvC,IAAA,OAAO,EAAA;AAAA,EACT;AAGA,EAAA,IACE,OAAO,YAAA,CAAa,SAAA,KAAc,QAAA,IAClC,OAAO,YAAA,CAAa,aAAA,KAAkB,QAAA,IACtC,OAAO,iBAAA,CAAkB,SAAA,KAAc,QAAA,EACvC;AACA,IAAA,OAAO,EAAA;AAAA,EACT;AAEA,EAAA,MAAM,kBAAkB,YAAA,CAAa,SAAA;AACrC,EAAA,MAAM,qBAAqB,YAAA,CAAa,aAAA;AACxC,EAAA,MAAM,uBAAuB,iBAAA,CAAkB,SAAA;AAC/C,EAAA,MAAM,QAAA,GAAW,gBAAA;AAGjB,EAAA,MAAM,aAAa,eAAA,GAAkB,kBAAA;AACrC,EAAA,MAAM,eAAA,GAAkB,wBAAwB,CAAA,GAAI,QAAA,CAAA;AACpD,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,CAAK,UAAA,GAAa,eAAe,CAAA;AAExD,EAAA,OAAO,SAAA;AACT;AChKO,IAAM,aAAA,GAAgB,CAAC,MAAA,KAA8E;AAC1G,EAAA,MAAM,EAAE,SAAA,EAAW,WAAA,EAAY,GAAI,MAAA;AACnC,EAAA,MAAM,EAAE,gBAAA,EAAiB,GAAI,WAAA,IAAe,EAAC;AAE7C,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,IAAI,OAAO,qBAAqB,WAAA,EAAa;AAC3C,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAK,CAACA,OAAAA,CAAQ,aAAa,CAAA,CAAgB,QAAA,CAAS,gBAAgB,CAAA,EAAG;AACrE,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,gBAAA,KAAqBA,QAAQ,gBAAA,EAAkB;AACjD,MAAA,MAAM,kBAAA,GAAqB,WAAW,UAAA,EAAY,kBAAA;AAClD,MAA2B,WAAW,UAAA,EAAY;AAClD,MAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,uBAAuB,MAAM;AACjC,IAAA,IAAI,OAAO,qBAAqB,WAAA,EAAa;AAC3C,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAK,CAACA,QAAQ,aAAA,EAAeA,OAAAA,CAAQ,QAAQ,CAAA,CAAgB,QAAA,CAAS,gBAAgB,CAAA,EAAG;AACvF,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,gBAAA,KAAqBA,QAAQ,gBAAA,EAAkB;AACjD,MAAA,MAAM,kBAAA,GAAqB,WAAW,UAAA,EAAY,kBAAA;AAClD,MAA2B,WAAW,UAAA,EAAY;AAClD,MAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,gCAAgC,MAAM;AAC1C,IAAA,IAAI,OAAO,qBAAqB,WAAA,EAAa;AAC3C,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAK,CAACA,OAAAA,CAAQ,aAAa,CAAA,CAAgB,QAAA,CAAS,gBAAgB,CAAA,EAAG;AACrE,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,gBAAA,KAAqBA,QAAQ,gBAAA,EAAkB;AACjD,MAA6B,WAAW,UAAA,EAAY;AACpD,MAAA,MAAM,gBAAA,GAAmB,WAAW,UAAA,EAAY,gBAAA;AAChD,MAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,eAAe,gBAAA,EAAiB;AAAA,IAChC,mBAAmB,oBAAA,EAAqB;AAAA,IACxC,4BAA4B,6BAAA,EAA8B;AAAA,IAC1D,iBAAA,EAAmB,OAAO,gBAAA,KAAqB,WAAA,GAAc,QAAS,CAACA,OAAAA,CAAQ,aAAA,EAAeA,OAAAA,CAAQ,gBAAA,EAAkBA,OAAAA,CAAQ,gBAAgB,CAAA,CAAgB,SAAS,gBAAgB;AAAA,GAC3L;AACF;AC5DA,SAAS,YAAA,CAAa,KAAa,WAAA,EAA6B;AAC9D,EAAA,MAAM,UAAA,GAAa,IAAI,UAAA,CAAW,IAAI,IAAI,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,GAAI,GAAA;AACzD,EAAA,MAAM,YAAY,WAAA,GAAc,CAAA;AAChC,EAAA,IAAI,UAAA,CAAW,SAAS,SAAA,EAAW;AACjC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,WAAW,CAAA,MAAA,CAAQ,CAAA;AAAA,EAC1D;AACA,EAAA,OAAO,IAAA,GAAO,UAAA,CAAW,QAAA,CAAS,SAAA,EAAW,GAAG,CAAA;AAClD;AAgPO,SAAS,qBAAqB,WAAA,EAAqB;AACxD,EAAA,IAAI;AAEF,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA;AAIvC,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAGxC,IAAA,IAAI,YAAA,CAAa,WAAW,EAAA,EAAI;AAC9B,MAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,IAC/C;AAGA,IAAA,MAAM,WAAA,GAAc,OAAO,MAAA,CAAO;AAAA,MAChC,MAAA,CAAO,KAAA,CAAM,EAAA,EAAI,CAAC,CAAA;AAAA;AAAA,MAClB;AAAA;AAAA,KACD,CAAA;AAGD,IAAA,OAAO,IAAA,GAAO,WAAA,CAAY,QAAA,CAAS,KAAK,CAAA;AAAA,EAC1C,SAAS,KAAA,EAAY;AACnB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmC,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,EACpE;AACF;AA0DO,SAAS,uBAAuB,aAAA,EAAuB;AAE5D,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,aAAa,CAAA;AAGzC,EAAA,IAAI,OAAA,CAAQ,WAAW,EAAA,EAAI;AACzB,IAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,EACjD;AAGA,EAAA,OAAO,OAAO,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,SAAS,KAAK,CAAA;AACnD;AAwBO,SAAS,oBAAoB,UAAA,EAA4B;AAC9D,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,gBAAgB,UAAU,CAAA;AAEzC,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,MAAA,KAAW,EAAA,EAAI;AAC7B,MAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,IACnD;AAEA,IAAA,OAAO,IAAA,GAAO,UAAA,CAAW,MAAA,CAAO,IAAI,CAAA;AAAA,EACtC,SAAS,KAAA,EAAgB;AACvB,IAAA,MAAM,OAAA,GAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,eAAA;AACzD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,OAAO,CAAA,CAAE,CAAA;AAAA,EAC7D;AACF;AAEO,SAAS,gBAAA,CAAiB,WAAmB,OAAA,EAAiB;AACnE,EAAA,IAAI,cAAc,KAAA,EAAO;AACvB,IAAA,OAAO,YAAA,CAAa,SAAS,EAAE,CAAA;AAAA,EACjC;AACA,EAAA,IAAI,cAAc,KAAA,EAAO;AACvB,IAAA,OAAO,uBAAuB,OAAO,CAAA;AAAA,EACvC;AACA,EAAA,IAAI,cAAc,MAAA,EAAQ;AACxB,IAAA,OAAO,qBAAqB,OAAO,CAAA;AAAA,EACrC;AACA,EAAA,IAAI,cAAc,KAAA,EAAO;AACvB,IAAA,OAAO,oBAAoB,OAAO,CAAA;AAAA,EACpC;AACA,EAAA,OAAO,OAAA;AACT;AAsBA,SAAS,gBAAgB,OAAA,EAAmC;AAC1D,EAAA,MAAM,KAAA,GAAQ,QAAQ,IAAA,EAAK;AAE3B,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,MAAM,kBAAkB,CAAA;AAAA,EACpC;AAEA,EAAA,IAAI,eAAA,CAAgB,KAAK,CAAA,EAAG;AAC1B,IAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,EACjC;AAEA,EAAA,OAAO,4BAA4B,KAAK,CAAA;AAC1C;AAMA,SAAS,WAAW,IAAA,EAA8B;AAChD,EAAA,IAAI,GAAA,GAAM,CAAA;AAEV,EAAA,KAAA,MAAW,QAAQ,IAAA,EAAM;AACvB,IAAA,GAAA,IAAO,IAAA,IAAQ,CAAA;AAEf,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,IAAA,CAAK,GAAA,GAAM,WAAY,CAAA,EAAG;AACxB,QAAA,GAAA,GAAA,CAAQ,GAAA,IAAO,IAAK,IAAA,IAAU,KAAA;AAAA,MAChC,CAAA,MAAO;AACL,QAAA,GAAA,GAAO,OAAO,CAAA,GAAK,KAAA;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAI,WAAW,CAAE,GAAA,IAAO,IAAK,GAAA,EAAM,GAAA,GAAM,GAAI,CAAC,CAAA;AACvD;AAEA,SAAS,cAAc,KAAA,EAA2B;AAEhD,EAAA,IAAI,UAAA,GAAa,MAAM,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA,CAAE,OAAA,CAAQ,MAAM,GAAG,CAAA;AAG3D,EAAA,MAAM,OAAA,GAAU,WAAW,MAAA,GAAS,CAAA;AACpC,EAAA,IAAI,YAAY,CAAA,EAAG;AACjB,IAAA,UAAA,IAAc,IAAA;AAAA,EAChB,CAAA,MAAA,IAAW,YAAY,CAAA,EAAG;AACxB,IAAA,UAAA,IAAc,GAAA;AAAA,EAChB,CAAA,MAAA,IAAW,YAAY,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,EAC9C;AAGA,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA,OAAO,IAAI,UAAA,CAAW,MAAA,CAAO,IAAA,CAAK,UAAA,EAAY,QAAQ,CAAC,CAAA;AAAA,EACzD;AAGA,EAAA,IAAI,OAAO,SAAS,WAAA,EAAa;AAC/B,IAAA,MAAM,MAAA,GAAS,KAAK,UAAU,CAAA;AAC9B,IAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA;AAE1C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,MAAA,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,CAAC,CAAA;AAAA,IAChC;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAC/C;AAEA,SAAS,WAAW,GAAA,EAAyB;AAC3C,EAAA,IAAI,GAAA,CAAI,MAAA,GAAS,CAAA,KAAM,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,oBAAoB,CAAA;AAAA,EACtC;AAEA,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,GAAA,CAAI,SAAS,CAAC,CAAA;AAE3C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAC,CAAA,EAAG,EAAE,CAAA;AAE5D,IAAA,IAAI,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA,EAAG;AACtB,MAAA,MAAM,IAAI,MAAM,oBAAoB,CAAA;AAAA,IACtC;AAEA,IAAA,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA;AAAA,EACb;AAEA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,WAAW,KAAA,EAA2B;AAC7C,EAAA,OAAO,MAAM,IAAA,CAAK,KAAK,CAAA,CACpB,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,QAAA,CAAS,EAAE,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAChD,KAAK,EAAE,CAAA;AACZ;AAEA,SAAS,gBAAgB,OAAA,EAA0B;AACjD,EAAA,OAAO,yBAAA,CAA0B,KAAK,OAAO,CAAA;AAC/C;AAEA,SAAS,mBAAmB,OAAA,EAAmC;AAC7D,EAAA,MAAM,CAAC,aAAA,EAAe,QAAQ,CAAA,GAAI,OAAA,CAAQ,MAAM,GAAG,CAAA;AAEnD,EAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,QAAA,EAAU;AAC/B,IAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,EAC3C;AAEA,EAAA,MAAM,SAAA,GAAY,OAAO,aAAa,CAAA;AAEtC,EAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA,EAAG;AAChC,IAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,EACzC;AAEA,EAAA,IAAI,CAAC,mBAAA,CAAoB,IAAA,CAAK,QAAQ,CAAA,EAAG;AACvC,IAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,EAC5C;AAEA,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,IAAA,EAAM,WAAW,QAAQ,CAAA;AAAA,IACzB,cAAA,EAAgB;AAAA,GAClB;AACF;AAEA,SAAS,4BAA4B,OAAA,EAAmC;AAGtE,EAAA,IAAI,CAAC,uBAAA,CAAwB,IAAA,CAAK,OAAO,CAAA,EAAG;AAC1C,IAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,EAC5D;AAEA,EAAA,MAAM,IAAA,GAAO,cAAc,OAAO,CAAA;AAElC,EAAA,IAAI,IAAA,CAAK,WAAW,EAAA,EAAI;AACtB,IAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,EAC5D;AAEA,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAC7B,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,EAAA,EAAI,EAAE,CAAA;AAClC,EAAA,MAAM,gBAAA,GAAmB,WAAW,IAAI,CAAA;AAExC,EAAA,IAAI,QAAA,CAAS,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAC,CAAA,IAAK,QAAA,CAAS,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAC,CAAA,EAAG;AAC9E,IAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,EAChD;AAEA,EAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AAEpB,EAAA,MAAM,UAAA,GAAA,CAAc,QAAQ,GAAA,MAAU,CAAA;AACtC,EAAA,MAAM,MAAM,KAAA,GAAQ,GAAA;AAIpB,EAAA,IAAI,GAAA,KAAQ,EAAA,IAAQ,GAAA,KAAQ,EAAA,EAAM;AAChC,IAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAAA,EAC7C;AAEA,EAAA,MAAM,eAAe,GAAA,KAAQ,EAAA;AAE7B,EAAA,MAAM,aAAA,GAAgB,KAAK,CAAC,CAAA;AAC5B,EAAA,MAAM,SAAA,GAAY,aAAA,KAAkB,GAAA,GAAO,EAAA,GAAK,aAAA;AAEhD,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAE7B,EAAA,IAAI,IAAA,CAAK,WAAW,EAAA,EAAI;AACtB,IAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,EACnD;AAEA,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,IAAA;AAAA,IACA,cAAA,EAAgB,IAAA;AAAA,IAChB,YAAA;AAAA,IACA;AAAA,GACF;AACF;AC/kBO,IAAM,gBAAA,GAAmB,CAAC,KAAA,EAAY,OAAA,KAA2D;AACtG,EAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAU,GAAI,OAAA;AAE/B,EAAA,MAAM,mBAAA,GAAsB,6CAAA;AAE5B,EAAA,IAAI,OAAA,KAAYA,QAAQ,QAAA,EAAU;AAChC,IAAA,MAAM,uBAAuB,MAAmD;AAC9E,MAAA,MAAM,cAAA,GAAiB;AAAA,QACrB,OAAA,EAAS,mBAAA;AAAA,QACT,aAAA,EAAe,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,OAAA,IAAW;AAAA,OACnD;AACA,MAAA,IACE,KAAA,EAAO,UAAU,IAAA,EAAM,OAAA,IACvB,OAAO,QAAA,EAAU,IAAA,EAAM,YAAY,uBAAA,EACnC;AAEA,QAAA,IAAI,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,OAAA,KAAY,qBAAA,EAAuB;AAC5D,UAAA,cAAA,CAAe,OAAA,GAAU,oBAAA;AACzB,UAAA,OAAO,cAAA;AAAA,QACT;AAEA,QAAA,IAAI,OAAO,QAAA,EAAU,IAAA,EAAM,OAAA,EAAS,QAAA,CAAS,4CAA4C,CAAA,EAAG;AAC1F,UAAA,MAAM,QAAQ,KAAA,CAAM,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,MAAM,iCAAiC,CAAA;AACjF,UAAA,IAAI,aAAA,GAAgB,KAAA,GAAQ,KAAA,CAAM,CAAC,IAAIC,GAAAA,CAAI,CAAC,CAAA,CAAE,KAAA,CAAM,EAAA,IAAM,SAAA,CAAU,QAAQ,CAAA,CAAE,QAAQ,CAAC,CAAA;AACvF,UAAA,aAAA,GAAgBA,GAAAA,CAAI,aAAa,CAAA,CAAE,GAAA,CAAI,EAAA,IAAM,UAAU,QAAQ,CAAA,CAAE,OAAA,CAAQ,SAAA,CAAU,QAAQ,CAAA;AAC3F,UAAA,cAAA,CAAe,OAAA,GAAU,+BAA+B,aAAa,CAAA,CAAA;AACrE,UAAA,OAAO,cAAA;AAAA,QACT;AACA,QAAA,OAAO,cAAA;AAAA,MACT;AAEA,MAAA,OAAO,cAAA;AAAA,IACT,CAAA;AACA,IAAA,MAAM,gBAAgB,oBAAA,EAAqB;AAC3C,IAAA,OAAO;AAAA,MACL,WAAA,EAAa,OAAA;AAAA,MACb,OAAO,aAAA,CAAc;AAAA,KACvB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,WAAA,EAAa,OAAA;AAAA,IACb,KAAA,EAAO,OAAO,OAAA,IAAW;AAAA,GAC3B;AACF;AC7CA,eAAsB,eAAe,MAAA,EAAa;AAChD,EAAA,MAAM,QAAA,GAAgB,MAAMC,WAAAA,CAAY,eAAA,EAAiB,MAAM,CAAA;AAC/D,EAAA,OAAO,QAAA,CAAS,QAAQ,EAAC;AAC3B;ACHO,IAAM,oBAAA,GAAuB,CAAC,YAAA,KAAyB;AAC5D,EAAA,IAAI,CAAC,cAAc,OAAO,GAAA;AAC1B,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,YAAY,CAAA,CAAE,MAAM,GAAG,CAAA;AAC5C,EAAA,MAAM,cAAc,KAAA,CAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,yBAAyB,GAAG,CAAA;AACjE,EAAA,MAAM,WAAA,GAAc,MAAM,CAAC,CAAA,GAAI,IAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,GAAK,EAAA;AAChD,EAAA,OAAO,WAAA,GAAc,WAAA;AACvB,CAAA;AAEO,IAAM,YAAA,GAAe,CAC1B,KAAA,EACA,SAAA,EACA,UACA,OAAA,KASQ;AACR,EAAA,MAAM;AAAA,IACJ,MAAA,GAAS,EAAA;AAAA,IACT,eAAA;AAAA,IACA,eAAA;AAAA,IACA,OAAA;AAAA,IACA,gBAAA;AAAA,IACA,QAAQD,GAAAA,CAAI,WAAA;AAAA,IACZ,eAAA,GAAkB;AAAA,GACpB,GAAI,WAAW,EAAC;AAEhB,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,MAAAA,IAAI,KAAK,CAAA;AACT,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,GAAA,EAAU;AACjB,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF,CAAA;AAEA,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,OAAA,EAAQ,IAAKA,IAAI,KAAK,CAAA,CAAE,EAAA,CAAG,CAAC,CAAA,EAAG;AAC5C,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAGA,GAAAA,CAAI,CAAC,CAAA,CAAE,OAAA,CAAQ,SAAA,EAAW,KAAK,CAAC,CAAA,CAAA;AAAA,MACrD;AACA,MAAA,OAAO,GAAG,MAAM,CAAA,CAAA,CAAA;AAAA,IAClB;AACA,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,GAAG,MAAM,CAAA,CAAA,CAAA;AAAA,QAClB,OAAA,EAASA,GAAAA,CAAI,CAAC,CAAA,CAAE,OAAA,CAAQ,WAAW,KAAK,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE;AAAA,OAC7D;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,GAAG,MAAM,CAAA,CAAA,CAAA;AAAA,MAClB,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AAEA,EAAA,IAAI,eAAA,IAAmBA,GAAAA,CAAI,KAAK,CAAA,CAAE,EAAA,CAAGA,GAAAA,CAAI,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,SAAS,CAAC,CAAA,EAAG;AAC7D,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,CAAA,EAAA,EAAK,MAAM,CAAA,EAAGA,GAAAA,CAAI,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,SAAS,CAAA,CAAE,OAAA,CAAQ,SAAA,EAAW,KAAK,CAAC,CAAA,CAAA;AAAA,IACxE;AACA,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,KAAK,MAAM,CAAA,CAAA,CAAA;AAAA,QACpB,OAAA,EAASA,GAAAA,CAAI,EAAE,CAAA,CACZ,IAAI,CAAC,SAAS,CAAA,CACd,OAAA,CAAQ,SAAA,EAAW,KAAK,CAAA,CACxB,OAAA,CAAQ,OAAO,EAAE;AAAA,OACtB;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,EAAA;AAAA,MACT,OAAA,EAAS,CAAA,EAAA,EAAK,MAAM,CAAA,EAAGA,IAAI,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,SAAS,CAAA,CAAE,OAAA,CAAQ,SAAA,EAAW,KAAK,CAAC,CAAA;AAAA,KAC1E;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,qBAAqBA,GAAAA,CAAI,KAAK,EAAE,OAAA,CAAQ,SAAA,EAAW,KAAK,CAAC,CAAA;AAC5E,EAAA,MAAM,SAAA,GAAY,UAAA,CAAW,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACzC,EAAA,IAAI,aAAa,UAAA,CAAW,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA;AAC7C,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,UAAA,GAAa,GAAA,GAAM,UAAA;AAAA,EACrB;AACA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,SAAA,GAAY,CAAC,KAAA,EAAe,IAAA,KAAyB;AACzD,QAAA,MAAM,IAAA,GAAOA,GAAAA,CAAI,KAAK,CAAA,CACnB,GAAA,CAAI,KAAK,CAAA,CACT,OAAA,CAAQ,SAAA,EAAW,CAAC,CAAA,CACpB,OAAA,CAAQ,wBAAwB,IAAI,CAAA;AACvC,QAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,GAAG,IAAI,CAAC,CAAA,EAAG,OAAA,CAAQ,mBAAA,EAAqB,KAAK,CAAA;AACtE,QAAA,MAAM,UAAU,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,GAAI,CAAC,CAAA,IAAK,EAAA;AACxC,QAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,KAAK,CAAA,EAAG,UAAU,GAAA,GAAM,OAAA,GAAU,EAAE,CAAA,EAAG,IAAI,CAAA,CAAA;AAAA,MAChE,CAAA;AACA,MAAA,IAAIA,GAAAA,CAAI,KAAK,CAAA,CAAE,GAAA,CAAI,IAAI,CAAA,EAAG;AACxB,QAAA,OAAO,SAAA,CAAU,IAAA,EAAM,gBAAA,GAAmB,GAAA,GAAM,GAAG,CAAA;AAAA,MACrD;AACA,MAAA,IAAIA,GAAAA,CAAI,KAAK,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,EAAG;AACvB,QAAA,OAAO,SAAA,CAAU,GAAA,EAAK,gBAAA,GAAmB,GAAA,GAAM,GAAG,CAAA;AAAA,MACpD;AACA,MAAA,IAAIA,GAAAA,CAAI,KAAK,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,EAAG;AACvB,QAAA,OAAO,SAAA,CAAU,GAAA,EAAK,gBAAA,GAAmB,GAAA,GAAM,GAAG,CAAA;AAAA,MACpD;AACA,MAAA,IAAIA,GAAAA,CAAI,KAAK,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,EAAG;AACvB,QAAA,OAAO,SAAA,CAAU,GAAA,EAAK,gBAAA,GAAmB,GAAA,GAAM,GAAG,CAAA;AAAA,MACpD;AAAA,IACF;AACA,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,SAAS,GAAG,UAAU,CAAA,CAAA;AAAA,IAC3C;AACA,IAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,SAAS,GAAG,UAAA,CAAW,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAC,CAAA,CAAA;AAAA,EAClE;AACA,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,CAAA,EAAG,MAAM,CAAA,EAAG,SAAS,CAAA,CAAA;AAAA,MAC9B,OAAA,EAAS;AAAA,KACX;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA,EAAG,MAAM,CAAA,EAAG,SAAS,CAAA,CAAA;AAAA,IAC9B,OAAA,EAAS,UAAA,CAAW,OAAA,CAAQ,SAAA,EAAW,EAAE;AAAA,GAC3C;AACF;;;ACxGO,IAAM,YAAA,GAA4C;AAAA,EACvD,QAAA,EAAU;AAAA,IACR,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,SAAA,EAAW,4CAAA;AAAA,IACX,GAAG,kBAAkB,UAAU,CAAA;AAAA,IAC/B,aAAA,EAAe,EAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,mBAAA,EAAqB,IAAA;AAAA,IACrB,yBAAA,EAA2B;AAAA,GAC7B;AAAA,EACA,QAAA,EAAU;AAAA,IACR,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,SAAA,EAAW,4CAAA;AAAA,IACX,mBAAA,EAAqB,4CAAA;AAAA,IACrB,GAAG,kBAAkB,UAAU,CAAA;AAAA,IAC/B,aAAA,EAAe,EAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,mBAAA,EAAqB,KAAA;AAAA,IACrB,yBAAA,EAA2B;AAAA,GAC7B;AAAA,EACA,OAAA,EAAS;AAAA,IACP,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,SAAS,CAAA;AAAA,IAC9B,aAAA,EAAe,EAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,QAAA,EAAU;AAAA,IACR,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,UAAU,CAAA;AAAA,IAC/B,aAAA,EAAe,GAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,SAAA,EAAW;AAAA,IACT,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,0BAAA,EAA4B,4CAAA;AAAA,IAC5B,GAAG,kBAAkB,WAAW,CAAA;AAAA,IAChC,aAAA,EAAe,EAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,eAAA,EAAiB,8CAAA;AAAA,IACjB,SAAA,EAAW,8CAAA;AAAA,IACX,GAAG,kBAAkB,QAAQ,CAAA;AAAA,IAC7B,aAAA,EAAe,GAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,yBAAA,EAA2B;AAAA,GAC7B;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,eAAA,EAAiB,oCAAA;AAAA,IACjB,SAAA,EAAW,oCAAA;AAAA,IACX,GAAG,kBAAkB,MAAM,CAAA;AAAA,IAC3B,aAAA,EAAe,CAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,yBAAA,EAA2B;AAAA,GAC7B;AAAA,EACA,SAAA,EAAW;AAAA,IACT,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,SAAS,CAAA;AAAA,IAC9B,aAAA,EAAe,GAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,eAAA,EAAiB,kDAAA;AAAA,IACjB,SAAA,EAAW,kDAAA;AAAA,IACX,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,KAAA;AAAA,IACV,SAAA,EAAW,CAAA;AAAA,IACX,aAAA,EAAe,CAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,yBAAA,EAA2B;AAAA,GAC7B;AAAA,EACA,QAAA,EAAU;AAAA,IACR,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,QAAQ,CAAA;AAAA,IAC7B,aAAA,EAAe,IAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,QAAA,EAAU;AAAA,IACR,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,QAAQ,CAAA;AAAA,IAC7B,aAAA,EAAe,GAAA;AAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,SAAA,EAAW;AAAA,IACT,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,SAAS,CAAA;AAAA,IAC9B,aAAA,EAAe,IAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,KAAA,EAAO;AAAA,IACL,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,KAAK,CAAA;AAAA,IAC1B,aAAA,EAAe,GAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,QAAA,EAAU;AAAA,IACR,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,QAAQ,CAAA;AAAA,IAC7B,aAAA,EAAe,IAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,eAAA,EAAiB,4CAAA;AAAA,IACjB,SAAA,EAAW,4CAAA;AAAA,IACX,GAAG,kBAAkB,MAAM,CAAA;AAAA,IAC3B,aAAA,EAAe,EAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,yBAAA,EAA2B;AAAA,GAC7B;AAAA,EACA,KAAA,EAAO;AAAA,IACL,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,KAAK,CAAA;AAAA,IAC1B,aAAA,EAAe,GAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,eAAA,EAAiB,4CAAA;AAAA,IACjB,GAAA,EAAK,4CAAA;AAAA,IACL,GAAG,kBAAkB,OAAO,CAAA;AAAA,IAC5B,aAAA,EAAe,GAAA;AAAA,IACf,kBAAA,EAAoB,GAAA;AAAA,IACpB,wBAAA,EAA0B,GAAA;AAAA,IAC1B,gBAAA,EAAkB,GAAA;AAAA,IAClB,mBAAA,EAAqB;AAAA;AAEzB;AAEO,IAAM,gBAAA,GAAwC;AAAA,EACnD,MAAA,EAAQ;AACV;AAuDO,IAAM,eAAA,GAAkB,CAAA;AAGxB,IAAM,+BAAA,GAAkC;AACxC,IAAM,uBAAA,GAA0B;AAChC,IAAM,cAAA,GAAiB;AAEvB,IAAM,4BAAA,GAA+B,4CAAA;AACrC,IAAM,kBAAA,GAAqB,YAAY,KAAK,CAAA;AAC5C,IAAM,+BAAA,GAAkC,4CAAA;;;AC5QxC,IAAM,OAAA,GAAU;AAAA,EACrB;AAAA,IACE,QAAQ,EAAC;AAAA,IACT,IAAA,EAAM,kBAAA;AAAA,IACN,OAAA,EAAS;AAAA,MACP,EAAE,YAAA,EAAc,MAAA,EAAQ,IAAA,EAAM,EAAA,EAAI,MAAM,MAAA;AAAO,KACjD;AAAA,IACA,eAAA,EAAiB,MAAA;AAAA,IACjB,IAAA,EAAM;AAAA,GACR;AAAA,EACA;AAAA,IACE,MAAA,EAAQ;AAAA,MACN;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,MAAM,QAAA,EAAS;AAAA,UACzD,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,UACvD,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,UAAA,EAAY,MAAM,SAAA,EAAU;AAAA,UAC7D,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,aAAA,EAAe,MAAM,SAAA,EAAU;AAAA,UAChE,EAAE,YAAA,EAAc,OAAA,EAAS,IAAA,EAAM,cAAA,EAAgB,MAAM,OAAA,EAAQ;AAAA,UAC7D,EAAE,YAAA,EAAc,OAAA,EAAS,IAAA,EAAM,YAAA,EAAc,MAAM,OAAA,EAAQ;AAAA,UAC3D,EAAE,YAAA,EAAc,OAAA,EAAS,IAAA,EAAM,QAAA,EAAU,MAAM,OAAA;AAAQ,SACzD;AAAA,QACA,YAAA,EAAc,kBAAA;AAAA,QACd,IAAA,EAAM,YAAA;AAAA,QACN,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,IAAA,EAAM,UAAA;AAAA,IACN,OAAA,EAAS;AAAA,MACP;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,aAAA,EAAe,MAAM,SAAA,EAAU;AAAA,UAChE,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,aAAA,EAAe,MAAM,SAAA;AAAU,SAClE;AAAA,QACA,YAAA,EAAc,iBAAA;AAAA,QACd,IAAA,EAAM,UAAA;AAAA,QACN,IAAA,EAAM;AAAA,OACR;AAAA,MACA;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,QAAA,EAAU,IAAA,EAAM,aAAA,EAAe,MAAM,QAAA,EAAS;AAAA,UAC9D,EAAE,YAAA,EAAc,QAAA,EAAU,IAAA,EAAM,aAAA,EAAe,MAAM,QAAA;AAAS,SAChE;AAAA,QACA,YAAA,EAAc,uBAAA;AAAA,QACd,IAAA,EAAM,eAAA;AAAA,QACN,IAAA,EAAM;AAAA,OACR;AAAA,MACA;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,cAAA,EAAgB,MAAM,SAAA,EAAU;AAAA,UACjE,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,kBAAA,EAAoB,MAAM,SAAA;AAAU,SACvE;AAAA,QACA,YAAA,EAAc,mBAAA;AAAA,QACd,IAAA,EAAM,YAAA;AAAA,QACN,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB,MAAA;AAAA,IACjB,IAAA,EAAM;AAAA,GACR;AAAA,EACA;AAAA,IACE,MAAA,EAAQ;AAAA,MACN;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,MAAM,QAAA,EAAS;AAAA,UACzD,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,UACvD,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,UAAA,EAAY,MAAM,SAAA,EAAU;AAAA,UAC7D,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,aAAA,EAAe,MAAM,SAAA,EAAU;AAAA,UAChE,EAAE,YAAA,EAAc,OAAA,EAAS,IAAA,EAAM,cAAA,EAAgB,MAAM,OAAA,EAAQ;AAAA,UAC7D,EAAE,YAAA,EAAc,OAAA,EAAS,IAAA,EAAM,YAAA,EAAc,MAAM,OAAA,EAAQ;AAAA,UAC3D,EAAE,YAAA,EAAc,OAAA,EAAS,IAAA,EAAM,QAAA,EAAU,MAAM,OAAA;AAAQ,SACzD;AAAA,QACA,YAAA,EAAc,kBAAA;AAAA,QACd,IAAA,EAAM,YAAA;AAAA,QACN,IAAA,EAAM;AAAA,OACR;AAAA,MACA,EAAE,YAAA,EAAc,MAAA,EAAQ,IAAA,EAAM,eAAA,EAAiB,MAAM,MAAA;AAAO,KAC9D;AAAA,IACA,IAAA,EAAM,WAAA;AAAA,IACN,OAAA,EAAS;AAAA,MACP;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,WAAA,EAAa,MAAM,SAAA,EAAU;AAAA,UAC9D,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,YAAA,EAAc,MAAM,SAAA;AAAU,SACjE;AAAA,QACA,YAAA,EAAc,qBAAA;AAAA,QACd,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB,MAAA;AAAA,IACjB,IAAA,EAAM;AAAA,GACR;AAAA,EACA;AAAA,IACE,MAAA,EAAQ;AAAA,MACN;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,QAAA,EAAU,IAAA,EAAM,QAAA,EAAU,MAAM,QAAA,EAAS;AAAA,UACzD,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,UACvD,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,UAAA,EAAY,MAAM,SAAA,EAAU;AAAA,UAC7D,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,aAAA,EAAe,MAAM,SAAA,EAAU;AAAA,UAChE,EAAE,YAAA,EAAc,OAAA,EAAS,IAAA,EAAM,cAAA,EAAgB,MAAM,OAAA,EAAQ;AAAA,UAC7D,EAAE,YAAA,EAAc,OAAA,EAAS,IAAA,EAAM,YAAA,EAAc,MAAM,OAAA,EAAQ;AAAA,UAC3D,EAAE,YAAA,EAAc,OAAA,EAAS,IAAA,EAAM,QAAA,EAAU,MAAM,OAAA;AAAQ,SACzD;AAAA,QACA,YAAA,EAAc,kBAAA;AAAA,QACd,IAAA,EAAM,YAAA;AAAA,QACN,IAAA,EAAM;AAAA,OACR;AAAA,MACA;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,WAAA,EAAa,MAAM,SAAA,EAAU;AAAA,UAC9D,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,YAAA,EAAc,MAAM,SAAA;AAAU,SACjE;AAAA,QACA,YAAA,EAAc,qBAAA;AAAA,QACd,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM;AAAA,OACR;AAAA,MACA,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,gBAAA,EAAkB,MAAM,SAAA;AAAU,KACrE;AAAA,IACA,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS;AAAA,MACP;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,MAAA,EAAQ,MAAM,SAAA,EAAU;AAAA,UACzD,EAAE,YAAA,EAAc,QAAA,EAAU,IAAA,EAAM,OAAA,EAAS,MAAM,QAAA,EAAS;AAAA,UACxD;AAAA,YACE,UAAA,EAAY;AAAA,cACV,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,WAAA,EAAa,MAAM,SAAA,EAAU;AAAA,cAC9D,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,YAAA,EAAc,MAAM,SAAA;AAAU,aACjE;AAAA,YACA,YAAA,EAAc,qBAAA;AAAA,YACd,IAAA,EAAM,KAAA;AAAA,YACN,IAAA,EAAM;AAAA;AACR,SACF;AAAA,QACA,YAAA,EAAc,yBAAA;AAAA,QACd,IAAA,EAAM,YAAA;AAAA,QACN,IAAA,EAAM;AAAA,OACR;AAAA,MACA;AAAA,QACE,UAAA,EAAY;AAAA,UACV,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,cAAA,EAAgB,MAAM,SAAA,EAAU;AAAA,UACjE,EAAE,YAAA,EAAc,SAAA,EAAW,IAAA,EAAM,kBAAA,EAAoB,MAAM,SAAA;AAAU,SACvE;AAAA,QACA,YAAA,EAAc,mBAAA;AAAA,QACd,IAAA,EAAM,YAAA;AAAA,QACN,IAAA,EAAM;AAAA;AACR,KACF;AAAA,IACA,eAAA,EAAiB,SAAA;AAAA,IACjB,IAAA,EAAM;AAAA;AAEV;AAEO,IAAM,UAAA,GAAa;AAAA,EACxB,UAAA,EAAY;AAAA,IACV,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW,OAAA;AAAA,IACX,MAAA,EAAQ,OAAA;AAAA,IACR,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,cAAA,EAAgB;AAAA,IACd;AAAA,MACE,MAAA,EAAQ,MAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,eAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,cAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,cAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,SAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,UAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,OAAA;AAAA,UACR,UAAA,EAAY,IAAA;AAAA,UACZ,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,WAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,SAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,cAAA;AAAA,UACR,UAAA,EAAY,IAAA;AAAA,UACZ,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,CAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,OAAA;AAAA,UACR,UAAA,EAAY,IAAA;AAAA,UACZ,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,SAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,cAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,YAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,YAAA;AAAA,UACR,UAAA,EAAY,IAAA;AAAA,UACZ,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,uBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,qBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,QAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,aAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,YAAY,EAAC;AAAA,MACb,QAAQ,EAAC;AAAA,MACT,SAAA,EAAW;AAAA,QACT,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,WAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,CAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,oBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,uBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,MAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,WAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,SAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,cAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,cAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,cAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,SAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,SAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,WAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,OAAA;AAAA,UACR,UAAA,EAAY,IAAA;AAAA,UACZ,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,MAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,eAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,WAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,cAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,YAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,SAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,cAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,YAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAY;AAAA,QACV;AAAA,UACE,MAAA,EAAQ,OAAA;AAAA,UACR,QAAA,EAAU;AAAA,SACZ;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ,SAAA;AAAA,UACR,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA,SACV;AAAA,QACA;AAAA,UACE,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN;AAAA,UACE,MAAA,EAAQ,QAAA;AAAA,UACR,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW;AAAA,cACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,GACF;AAAA,EACA,UAAA,EAAY;AAAA,IACV;AAAA,MACE,MAAA,EAAQ,SAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,kBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,UAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF;AACF,GACF;AAAA,EACA,QAAA,EAAU;AAAA,IACR;AAAA,MACE,MAAA,EAAQ,uBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,uBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,aAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,oBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,WAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,eAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,cAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,aAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,SAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,CAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,wBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,EAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,CAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,eAAA;AAAA,MACR,eAAA,EAAiB;AAAA,QACf,GAAA;AAAA,QACA,EAAA;AAAA,QACA,GAAA;AAAA,QACA,GAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA,EAAA;AAAA,QACA;AAAA;AACF;AACF,GACF;AAAA,EACA,QAAA,EAAU;AAAA,IACR;AAAA,MACE,MAAA,EAAQ,GAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA,KACV;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,IAAA;AAAA,MACR,MAAA,EAAQ;AAAA;AACV,GACF;AAAA,EACA,OAAA,EAAS;AAAA,IACP;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,6CAAA;AAAA,QACA,0DAAA;AAAA,QACA,EAAA;AAAA,QACA,6DAAA;AAAA,QACA,gFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,QAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,MAAA,EAAQ;AAAA,cACN,SAAA,EAAW;AAAA,gBACT,MAAA,EAAQ;AAAA;AACV;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,iEAAA;AAAA,QACA,mEAAA;AAAA,QACA,EAAA;AAAA,QACA,6EAAA;AAAA,QACA,6EAAA;AAAA,QACA,wDAAA;AAAA,QACA,wEAAA;AAAA,QACA,EAAA;AAAA,QACA,4EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,MAAA;AAAA,QACR,UAAA,EAAY;AAAA,UACV;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,UAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR,IAAA;AAAA,cACA;AAAA;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,QAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,uBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,QAAA,EAAU;AAAA;AACZ;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,uBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,QAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,OAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,SAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,KAAA,EAAO;AAAA,gBACL,SAAA,EAAW;AAAA,kBACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,kBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,gBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,KAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,QAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,aAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,SAAA,EAAW;AAAA,gBACT,MAAA,EAAQ;AAAA;AACV;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,oBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,kBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,KAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,OAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,QAAA,EAAU;AAAA;AACZ;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,iBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,UAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,mBAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,oBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,iBAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,WAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,eAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,IAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,eAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,kBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,QAAA,EAAU;AAAA;AACZ,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,KAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,QAAA,EAAU;AAAA;AACZ;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,aAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,6EAAA;AAAA,QACA,EAAA;AAAA,QACA,gEAAA;AAAA,QACA,wEAAA;AAAA,QACA,uEAAA;AAAA,QACA,0DAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,MAAA;AAAA,QACR,UAAA,EAAY;AAAA,UACV;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA,gBACE,MAAA,EAAQ,UAAA;AAAA,gBACR,MAAA,EAAQ;AAAA,kBACN,6CAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBACA,MAAA,EAAQ;AAAA,kBACN,KAAA,EAAO;AAAA,oBACL,SAAA,EAAW;AAAA,sBACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,UAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA,gBACE,MAAA,EAAQ,YAAA;AAAA,gBACR,MAAA,EAAQ;AAAA,kBACN;AAAA,iBACF;AAAA,gBACA,MAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,MAAA,EAAQ,UAAA;AAAA,gBACR,MAAA,EAAQ;AAAA,kBACN,yCAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBACA,MAAA,EAAQ;AAAA,kBACN,KAAA,EAAO;AAAA,oBACL,SAAA,EAAW;AAAA,sBACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,eACF;AAAA,cACA;AAAA,gBACE,MAAA,EAAQ,MAAA;AAAA,gBACR,MAAA,EAAQ;AAAA,kBACN,0BAAA;AAAA,kBACA;AAAA,iBACF;AAAA,gBACA,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,IAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,QAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,OAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,wBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,gDAAA;AAAA,QACA,EAAA;AAAA,QACA,8EAAA;AAAA,QACA,yEAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,iBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN;AAAA,aACF;AAAA,YACA,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,0CAAA;AAAA,cACA,uEAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,MAAA,EAAQ;AAAA,cACN,KAAA,EAAO;AAAA;AACT,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,oEAAA;AAAA,cACA,gDAAA;AAAA,cACA,+EAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,MAAA,EAAQ;AAAA,cACN,KAAA,EAAO;AAAA,gBACL,SAAA,EAAW;AAAA,kBACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,kBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,OAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,KAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,SAAA,EAAW;AAAA,gBACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,QAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,OAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,cAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,WAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,gBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,oBAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,aAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,IAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,oBAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,SAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,gBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,oBAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,UAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,kBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,UAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,uBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,KAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,QAAA,EAAU;AAAA;AACZ;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,kBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,SAAA,EAAW;AAAA,gBACT,MAAA,EAAQ;AAAA;AACV;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,MAAA;AAAA,QACR,UAAA,EAAY;AAAA,UACV;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA,gBACE,OAAA,EAAS;AAAA,kBACP,IAAA;AAAA,kBACA;AAAA;AACF;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,iBAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA,gBACE,MAAA,EAAQ,MAAA;AAAA,gBACR,MAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,MAAA,EAAQ,eAAA;AAAA,gBACR,MAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,MAAA,EAAQ,cAAA;AAAA,gBACR,MAAA,EAAQ;AAAA,eACV;AAAA,cACA;AAAA,gBACE,MAAA,EAAQ,iBAAA;AAAA,gBACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,IAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,QAAA,EAAU;AAAA;AACZ,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,iBAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,gBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,SAAA,EAAW;AAAA,gBACT,MAAA,EAAQ;AAAA;AACV;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,iBAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,KAAA,EAAO;AAAA,gBACL,SAAA,EAAW;AAAA,kBACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,SAAA,EAAW;AAAA,gBACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,wBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,SAAA,EAAW;AAAA,gBACT,MAAA,EAAQ;AAAA;AACV;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,iBAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,IAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,QAAA,EAAU;AAAA;AACZ,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,iBAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,wBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,IAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,oBAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,iBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,mBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,SAAA,EAAW;AAAA,gBACT,MAAA,EAAQ;AAAA;AACV;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,YAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,IAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,OAAA,EAAS;AAAA,gBACP,IAAA;AAAA,gBACA;AAAA;AACF;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,eAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,aAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,QAAA,EAAU;AAAA;AACZ,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,oBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,MAAA;AAAA,QACR,UAAA,EAAY;AAAA,UACV;AAAA,YACE,MAAA,EAAQ,YAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,UAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,oBAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,QAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA;AACF,WACF;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,oBAAA;AAAA,YACR,QAAA,EAAU;AAAA,cACR;AAAA,gBACE,QAAA,EAAU;AAAA;AACZ;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,qBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,QAAA;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,SAAA,EAAW;AAAA,gBACT,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,eAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,SAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,SAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,oBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF,KACF;AAAA,IACA;AAAA,MACE,MAAA,EAAQ,qBAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,WAAA;AAAA,YACR,MAAA,EAAQ;AAAA;AACV;AACF;AACF;AACF;AAEJ,CAAA;AChnFO,IAAM,YAAA,GAAe,KAAA;AAErB,IAAME,YAAAA,GAAwB,CAAC,gBAAgB,CAAA;AAE/C,IAAM,eAAN,MAAmB;AAAA,EACxB,MAAa,MAAM,MAAA,EAAa;AAC9B,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,iBAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,aAAa,CAAA,aAAA,EAAgB,SAAA,EAAW,SAAS,CAAA,EAAA,EAAK,SAAS,SAAS,CAAA,CAAA;AAC9E,IAAA,MAAM,QAAA,GAAW,IAAIC,QAAAA,CAAS,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,UAAA,EAAY,OAAA,EAASC,OAAAA,CAAQ,KAAA,EAAO,CAAA;AAEhG,IAAA,MAAM,eAAA,GAAkB,aAAa,WAAW,CAAA;AAChD,IAAA,MAAM,oBAAA,GAAuB,aAAa,gBAAgB,CAAA;AAE1D,IAAA,IAAI,yBAAyB,eAAA,CAAgB,GAAA;AAC7C,IAAA,IAAI,8BAA8B,oBAAA,CAAqB,GAAA;AACvD,IAAA,IAAI,SAAS,oBAAA,CAAqB,GAAA;AAGlC,IAAA,MAAM,eAAe,qBAAA,CAAsB;AAAA,MACzC,gBAAA,EAAkB,eAAA;AAAA,MAClB,YAAA,EAAc,eAAA;AAAA,MACd,iBAAA,EAAmB;AAAA,KACpB,CAAA;AAED,IAAA,IAAI,SAAA,CAAU,cAAc,KAAA,EAAO;AACjC,MAAA,2BAAA,GAA8B,oBAAA,CAAqB,OAAO,oBAAA,CAAqB,SAAA;AAC/E,MAAA,IAAIC,eAAAA,GAAiB,KAAA;AACrB,MAAA,IAAIC,oBAAAA,GAAsB,gCAAgC,oBAAA,CAAqB,SAAA;AAC/E,MAAA,IAAIA,oBAAAA,EAAqB;AACvB,QAAA,sBAAA,GAAyB,eAAA,CAAgB,aAAa,eAAA,CAAgB,GAAA;AACtE,QAAAD,eAAAA,GAAiB,2BAA2B,eAAA,CAAgB,SAAA;AAAA,MAC9D;AACA,MAAA,IAAI,CAAC,sBAAA,EAAwB;AAC3B,QAAA,sBAAA,GAAyB,eAAA,CAAgB,SAAA;AACzC,QAAAA,eAAAA,GAAiB,IAAA;AACjB,QAAA,IAAI,qBAAqB,SAAA,EAAW;AAClC,UAAA,2BAAA,GAA8B,oBAAA,CAAqB,SAAA;AACnD,UAAAC,oBAAAA,GAAsB,IAAA;AAAA,QACxB;AAAA,MACF;AACA,MAAA,MAAMC,gBAAeF,eAAAA,IAAkBC,oBAAAA;AACvC,MAAA,MAAM,kBAAA,GAAqB,CAACD,eAAAA,IAAkB,CAACC,oBAAAA;AAC/C,MAAA,MAAME,mBAAAA,GAAqB,CAACD,aAAAA,IAAgB,CAAC,kBAAA;AAE7C,MAAA,MAAME,OAAAA,GAAS,MAAM,MAAA,CAAO,KAAA,CAAMV,QAAQ,KAAA,EAAO;AAAA,QAC/C,GAAA;AAAA,QACA,GAAA,EAAK,OAAA;AAAA,QACL,MAAA;AAAA,QACA,QAAA;AAAA,QACA,SAAA;AAAA,QACA,SAAA;AAAA,QACA,iBAAA;AAAA,QACA,YAAA,EAAc,YAAA;AAAA,QACd,SAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,QACA,sBAAA;AAAA,QACA,2BAAA;AAAA,QACA,WAAA,EAAAG,YAAAA;AAAA,QACA,gBAAA,EAAkB,aAAa,UAAU,CAAA;AAAA,QACzC,kBAAA,EAAAM,mBAAAA;AAAA,QACA,cAAA,EAAAH,eAAAA;AAAA,QACA,mBAAA,EAAAC,oBAAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAAG,QAAO,YAAA,GAAe,YAAA;AACtB,MAAAA,QAAO,iBAAA,GAAoB,MAAA;AAE3B,MAAA,QAAA,CAAS,SAAS,oBAAoB,CAAA;AACtC,MAAA,OAAOA,OAAAA;AAAA,IACT;AAGA,IAAA,MAAM,cAAA,GAAiB,IAAA;AACvB,IAAA,sBAAA,GAAyB,eAAA,CAAgB,SAAA;AACzC,IAAA,2BAAA,GAA8B,oBAAA,CAAqB,aAAa,oBAAA,CAAqB,GAAA;AACrF,IAAA,MAAM,mBAAA,GAAsB,gCAAgC,oBAAA,CAAqB,SAAA;AACjF,IAAA,MAAM,eAAiC,mBAAA;AACvC,IAAA,MAAM,qBAAqB,CAAC,YAAA;AAK5B,IAAA,IAAI,kBAAA,EAAoB;AACtB,MAAA,MAAA,GAAS,YAAA,CAAa,UAAU,CAAA,CAAE,GAAA;AAClC,MAAA,2BAAA,GAA8B,YAAA,CAAa,UAAU,CAAA,CAAE,mBAAA;AAAA,IACzD;AAEA,IAAA,MAAM,SAAA,GAAiB;AAAA,MACrB,GAAA;AAAA,MACA,QAAQ,oBAAA,CAAqB,GAAA;AAAA,MAC7B,QAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,iBAAA;AAAA,MACA,YAAA,EAAc,YAAA;AAAA,MACd,SAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,sBAAA;AAAA,MACA,2BAAA;AAAA,MACA,WAAA,EAAAP,YAAAA;AAAA,MACA,gBAAA,EAAkB,aAAa,UAAU,CAAA;AAAA,MACzC,kBAAA;AAAA,MACA,cAAA;AAAA,MACA,mBAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,SAAA,CAAU,cAAc,MAAA,EAAQ;AAClC,MAAA,SAAA,CAAU,GAAA,GAAM,OAAA;AAAA,IAClB;AAEA,IAAA,IAAI,SAAA,CAAU,cAAc,KAAA,EAAO;AACjC,MAAA,SAAA,CAAU,GAAA,GAAM,UAAA;AAAA,IAClB;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,KAAA,CAAMH,QAAQ,KAAA,EAAO;AAAA,MAC/C,GAAA,EAAK,UAAA;AAAA,MACL,GAAG;AAAA,KACJ,CAAA;AAED,IAAA,MAAA,CAAO,YAAA,GAAe,YAAA;AACtB,IAAA,MAAA,CAAO,iBAAA,GAAoB,MAAA;AAE3B,IAAA,QAAA,CAAS,SAAS,oBAAoB,CAAA;AAEtC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,mBAAA,CAAoB,MAAA,EAAa,SAAA,EAAgB;AAC5D,IAAA,MAAM;AAAA,MACJ,SAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,EAAA,GAAK,IAAIW,GAAAA,CAAIN,OAAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AAEf,IAAA,MAAM,SAAc,EAAE,IAAA,EAAM,EAAC,EAAG,GAAG,SAAA,EAAU;AAE7C,IAAA,MAAM,UAAA,GAAa,UAAU,SAAA,KAAc,MAAA;AAC3C,IAAA,MAAM,mBAAA,GAAsB,UAAU,WAAA,CAAY,QAAA;AAElD,IAAA,MAAM,yBAAA,GAA4B;AAAA,MAChC,GAAA,EAAK,KAAA;AAAA,MACL,GAAG,SAAA,CAAU,SAAA;AAAA,MACb,SAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,yBAAA,CAA0B,iBAAA,GAAoB,GAAA;AAC9C,MAAA,yBAAA,CAA0B,uBAAA,GAA0B,GAAA;AAAA,IACtD;AACA,IAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,mBAAA,CAAoB,yBAAyB,CAAA;AACtE,IAAA,MAAA,CAAO,IAAA,CAAK,iBAAiB,GAAA,CAAI,oBAAA;AACjC,IAAA,MAAA,CAAO,oBAAoB,GAAA,CAAI,iBAAA;AAC/B,IAAA,MAAA,CAAO,uBAAuB,GAAA,CAAI,oBAAA;AAClC,IAAA,MAAA,CAAO,yBAAyB,MAAA,CAAOJ,GAAAA,CAAI,SAAA,CAAU,IAAA,EAAM,aAAa,CAAC,CAAA,CAAE,KAAA,CAAM,EAAA,IAAM,mBAAmB,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,IAAI,GAAA,CAAI,iBAAA;AAE9H,IAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,eAAA,EAAiB;AAChD,MAAA,MAAM,cAAA,GAAiB,MAAM,MAAA,CAAO,eAAA,CAAgB;AAAA,QAClD,GAAA,EAAK,KAAA;AAAA,QACL,SAAA;AAAA,QACA,SAAS,MAAA,CAAO,cAAA;AAAA,QAChB,SAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,MAAA,CAAO,qBAAqB,cAAA,CAAe,iBAAA;AAAA,IAC7C;AAEA,IAAA,MAAA,CAAO,YAAA,GAAe,GAAA;AACtB,IAAA,KAAA,MAAW,MAAA,IAAU,OAAO,IAAA,EAAM;AAChC,MAAA,IAAIE,YAAAA,CAAY,SAAS,MAAM,CAAA,IAAK,CAAC,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACxD,QAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,YAAA,GAAeF,GAAAA,CAAI,MAAA,CAAO,YAAA,IAAgB,CAAC,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,IAAK,CAAC,CAAA;AAAA,IACnF;AACA,IAAA,MAAA,CAAO,YAAA,GAAeW,oBAAoBX,GAAAA,CAAI,MAAA,CAAO,YAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAE9E,IAAA,IAAI,SAAA,CAAU,cAAc,KAAA,EAAO;AACjC,MAAA,MAAM,UAAA,GAAa,OAAO,SAAA,EAAW,KAAA;AACrC,MAAA,IACE,UAAA,IACG,MAAM,OAAA,CAAQ,UAAU,KACxB,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,IAChC,OAAO,WAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,KAAM,QAAA,IAC7C,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,CAAA,CAAE,QAAA,KAAa,MAAA,EAClD;AACA,QAAA,GAAA,CAAI,kCAAA,EAAoC,aAAa,kBAAA,EAAoB,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,EAAE,QAAQ,CAAA;AACnH,QAAA,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,CAAE,WAAW,GAAA,CAAI,sBAAA;AACjD,QAAA,GAAA,CAAI,kCAAA,EAAoC,aAAa,sBAAA,EAAwB,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,EAAE,QAAQ,CAAA;AAAA,MACzH;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,KAAK,MAAA,EAAa;AAC7B,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,GAAG;AAAA,KACL,GAAI,MAAA;AAEJ,IAAA,OAAO,MAAA,CAAO,IAAA,CAAKY,QAAAA,CAAS,IAAA,EAAM,IAAI,CAAA;AAAA,EACxC;AAAA,EAEO,UAAU,MAAA,EAAa;AAC5B,IAAA,OAAOC,UAAAA,CAAW,CAAA,gBAAA,EAAmB,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAAA,EACpD;AACF,CAAA;AAEA,IAAO,aAAA,GAAQ,IAAI,YAAA,EAAa;;;ACzOzB,IAAM,gBAAA,GAA2C;AAAA,EACtD,CAAC,UAAU,GAAG,4CAAA;AAAA,EACd,CAAC,UAAU,GAAG,4CAAA;AAAA,EACd,CAAC,SAAS,GAAG,4CAAA;AAAA,EACb,CAAC,UAAU,GAAG,4CAAA;AAAA,EACd,CAAC,WAAW,GAAG,4CAAA;AAAA,EACf,CAAC,QAAQ,GAAG,8CAAA;AAAA,EACZ,CAAC,MAAM,GAAG;AACZ,CAAA;AA8BO,IAAM,oBAAA,GAAuB;AAAA,EAClC;AAAA,IACE,QAAA,EAAU;AAAA,MACR;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,gBAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,eAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,QAAA;AAAA,QAChB,MAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,eAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,QAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,QAAA;AAAA,QAChB,MAAA,EAAQ,sBAAA;AAAA,QACR,MAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,cAAA,EAAgB,OAAA;AAAA,QAChB,MAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,IACA,MAAA,EAAQ,gBAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,EAAA;AAAA,QACR,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,IACA,MAAA,EAAQ,YAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT;AAAA,QACE,cAAA,EAAgB,SAAA;AAAA,QAChB,MAAA,EAAQ,EAAA;AAAA,QACR,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA;AAEZ,CAAA;;;ACxHO,IAAM,YAAA,GAAuC;AAAA,EAClD,QAAA,EAAU,CAAA;AAAA,EACV,QAAA,EAAU,CAAA;AAAA,EACV,OAAA,EAAS,CAAA;AAAA,EACT,QAAA,EAAU,CAAA;AAAA,EACV,SAAA,EAAW,CAAA;AAAA,EACX,MAAA,EAAQ,CAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;ACEA,IAAMX,YAAAA,GAAwB,CAAC,gBAAgB,CAAA;AAExC,IAAM,cAAN,MAAkB;AAAA,EACvB,WAAA,GAAc;AAAA,EACd;AAAA,EAEA,MAAa,MAAM,MAAA,EAAa;AAC9B,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,iBAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,aAAa,CAAA,YAAA,EAAe,SAAA,EAAW,SAAS,CAAA,EAAA,EAAK,SAAS,SAAS,CAAA,CAAA;AAC7E,IAAA,MAAM,QAAA,GAAW,IAAIC,QAAAA,CAAS,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,YAAA,EAAc,OAAA,EAASC,OAAAA,CAAQ,KAAA,EAAO,CAAA;AAElG,IAAA,MAAM,YAAA,GAAe,YAAA,CAAa,SAAA,CAAU,SAAS,CAAA;AACrD,IAAA,MAAM,iBAAA,GAAoB,YAAA,CAAa,OAAA,CAAQ,SAAS,CAAA;AACxD,IAAA,MAAM,YAAA,GAAe,gBAAA,CAAiB,SAAA,CAAU,SAAS,CAAA;AAEzD,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,KAAA,CAAML,QAAQ,IAAA,EAAM;AAAA,MAC9C,GAAA;AAAA,MACA,YAAA;AAAA,MACA,GAAA,EAAK,oBAAA;AAAA,MACL,SAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,iBAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA,EAAAG,YAAAA;AAAA,MACA,iBAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,QAAA,CAAS,SAAS,mBAAmB,CAAA;AACrC,IAAA,MAAA,CAAO,iBAAA,GAAoB,MAAA;AAE3B,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,mBAAA,CAAoB,MAAA,EAAa,SAAA,EAAgB;AAC5D,IAAA,MAAM;AAAA,MACJ,SAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,EAAA,GAAK,IAAIQ,GAAAA,CAAIN,OAAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AAEf,IAAA,MAAM,SAAc,EAAE,IAAA,EAAM,EAAC,EAAG,GAAG,SAAA,EAAU;AAE7C,IAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,mBAAA,CAAoB;AAAA,MAC3C,GAAA,EAAK,KAAA;AAAA,MACL,GAAG,SAAA,CAAU,SAAA;AAAA,MACb,SAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAA,CAAO,IAAA,CAAK,iBAAiB,GAAA,CAAI,oBAAA;AACjC,IAAA,MAAA,CAAO,oBAAoB,GAAA,CAAI,iBAAA;AAC/B,IAAA,MAAA,CAAO,uBAAuB,GAAA,CAAI,oBAAA;AAElC,IAAA,MAAA,CAAO,YAAA,GAAe,GAAA;AACtB,IAAA,KAAA,MAAW,MAAA,IAAU,OAAO,IAAA,EAAM;AAChC,MAAA,IAAIF,YAAAA,CAAY,SAAS,MAAM,CAAA,IAAK,CAAC,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACxD,QAAA;AAAA,MACF;AACA,MAAA,MAAA,CAAO,YAAA,GAAeF,GAAAA,CAAI,MAAA,CAAO,YAAA,IAAgB,CAAC,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,IAAK,CAAC,CAAA;AAAA,IACnF;AACA,IAAA,MAAA,CAAO,YAAA,GAAeW,oBAAoBX,GAAAA,CAAI,MAAA,CAAO,YAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAE9E,IAAA,IAAI,SAAA,CAAU,cAAc,KAAA,EAAO;AACjC,MAAA,MAAM,UAAA,GAAa,OAAO,SAAA,EAAW,KAAA;AACrC,MAAA,IACE,UAAA,IACG,MAAM,OAAA,CAAQ,UAAU,KACxB,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,IAChC,OAAO,WAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,KAAM,QAAA,IAC7C,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,CAAA,CAAE,QAAA,KAAa,MAAA,EAClD;AACA,QAAA,GAAA,CAAI,iCAAA,EAAmC,aAAa,kBAAA,EAAoB,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,EAAE,QAAQ,CAAA;AAClH,QAAA,UAAA,CAAW,UAAA,CAAW,MAAA,GAAS,CAAC,CAAA,CAAE,WAAW,GAAA,CAAI,sBAAA;AACjD,QAAA,GAAA,CAAI,iCAAA,EAAmC,aAAa,sBAAA,EAAwB,UAAA,CAAW,WAAW,MAAA,GAAS,CAAC,EAAE,QAAQ,CAAA;AAAA,MACxH;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,KAAK,MAAA,EAAa;AAC7B,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,GAAG;AAAA,KACL,GAAI,MAAA;AAEJ,IAAA,OAAO,MAAA,CAAO,IAAA,CAAKY,QAAAA,CAAS,IAAA,EAAM,IAAI,CAAA;AAAA,EACxC;AAAA,EAEO,UAAU,MAAA,EAAyB;AACxC,IAAA,OAAOC,WAAwC,WAAA,EAAa;AAAA,MAC1D,iBAAiB,MAAA,CAAO;AAAA,KACzB,CAAA;AAAA,EACH;AACF,CAAA;AAEA,IAAO,YAAA,GAAQ,IAAI,WAAA,EAAY;AC/GxB,IAAM,2BAAA,GAA8B,CAAA;AAKpC,IAAM,eAAA,GAAkD;AAAA,EAC7D,QAAA,EAAU;AAAA,IACR,GAAG,kBAAkB,UAAU,CAAA;AAAA,IAC/B,SAAA,EAAW,4CAAA;AAAA,IACX,OAAA,EAAS,4CAAA;AAAA,IACT,aAAA,EAAe,EAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAG,kBAAkB,UAAU,CAAA;AAAA,IAC/B,SAAA,EAAW,4CAAA;AAAA,IACX,aAAA,EAAe,EAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAG,kBAAkB,WAAW,CAAA;AAAA,IAChC,SAAA,EAAW,4CAAA;AAAA,IACX,aAAA,EAAe,EAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAG,kBAAkB,WAAW,CAAA;AAAA,IAChC,SAAA,EAAW,4CAAA;AAAA,IACX,aAAA,EAAe,EAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,WAAA,EAAa;AAAA,IACX,GAAG,kBAAkB,WAAW,CAAA;AAAA,IAChC,SAAA,EAAW,4CAAA;AAAA,IACX,aAAA,EAAe,EAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,QAAA,EAAU;AAAA,IACR,GAAG,kBAAkB,UAAU,CAAA;AAAA,IAC/B,SAAA,EAAW,4CAAA;AAAA,IACX,aAAA,EAAe,EAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAG,kBAAkB,SAAS,CAAA;AAAA,IAC9B,SAAA,EAAW,4CAAA;AAAA,IACX,aAAA,EAAe,GAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,SAAA,EAAW;AAAA,IACT,GAAG,kBAAkB,SAAS,CAAA;AAAA,IAC9B,SAAA,EAAW,4CAAA;AAAA,IACX,aAAA,EAAe,KAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAG,kBAAkB,QAAQ,CAAA;AAAA,IAC7B,SAAA,EAAW,8CAAA;AAAA,IACX,MAAA,EAAQ,8CAAA;AAAA,IACR,aAAA,EAAe,EAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,GAAG,kBAAkB,SAAS,CAAA;AAAA,IAC9B,OAAA,EAAS,4CAAA;AAAA,IACT,aAAA,EAAe,CAAA;AAAA,IACf,mBAAA,EAAqB;AAAA,GACvB;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAG,kBAAkB,QAAQ,CAAA;AAAA,IAC7B,SAAA,EAAW,4CAAA;AAAA,IACX,aAAA,EAAe,CAAA;AAAA,IACf,mBAAA,EAAqB;AAAA;AAEzB,CAAA;AAEO,IAAM,0BAAA,GAA6B,WAAW,KAAK;AACnD,IAAM,4BAAA,GAA+B,aAAa,KAAK;AAGvD,IAAM,6BAAA,GAAgC,4CAAA;AACtC,IAAM,4BAAA,GAA+B,4CAAA;AACrC,IAAM,4BAAA,GAA+B,4CAAA;AAErC,IAAM,iCAAA,GAAoC,4CAAA;AAG1C,IAAM,iBAAA,GAAoB;AAAA,EACvB;AAAA,EACR,IAAA,EAAM;AAAA,IACJ,MAAA,EAAQ,EAAA;AAAA;AAAA,IACR,UAAA,EAAY,EAAA;AAAA;AAAA,IACZ,WAAA,EAAa,EAAA;AAAA;AAAA,IACb,IAAA,EAAM;AAAA;AAAA;AAEV,CAAA;;;AC/GO,IAAM,YAAA,GAAe;AAAA,EAC1B;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,aAAA,EAAe,QAAQ,SAAA,EAAU;AAAA,MACtE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA,EAAU;AAAA,MACnE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA,EAAU;AAAA,MACpE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,MAAA,EAAQ,QAAQ,SAAA,EAAU;AAAA,MAC/D,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA,EAAU;AAAA,MACpE,EAAE,cAAA,EAAgB,WAAA,EAAa,MAAA,EAAQ,eAAA,EAAiB,QAAQ,WAAA;AAAY,KAC9E;AAAA,IACA,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,QAAA,EAAU,QAAQ,SAAA;AAAU,KACnE;AAAA,IACA,MAAA,EAAQ,kBAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,QAAQ,SAAA;AAAU,KACpE;AAAA,IACA,MAAA,EAAQ,4BAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,EAAE,QAAA,EAAU,IAAI,MAAA,EAAQ,iBAAA,EAAmB,QAAQ,OAAA,EAAQ;AAAA,EAC3D,EAAE,QAAA,EAAU,IAAI,MAAA,EAAQ,WAAA,EAAa,QAAQ,OAAA,EAAQ;AAAA,EACrD,EAAE,QAAA,EAAU,IAAI,MAAA,EAAQ,iBAAA,EAAmB,QAAQ,OAAA,EAAQ;AAAA,EAC3D,EAAE,QAAA,EAAU,IAAI,MAAA,EAAQ,YAAA,EAAc,QAAQ,OAAA,EAAQ;AAAA,EACtD;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,QAAA,EAAU,MAAA,EAAQ,YAAA,EAAc,QAAQ,QAAA;AAAS,KACrE;AAAA,IACA,MAAA,EAAQ,mBAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,EAAE,QAAA,EAAU,IAAI,MAAA,EAAQ,aAAA,EAAe,QAAQ,OAAA,EAAQ;AAAA,EACvD;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,OAAA,EAAS,QAAQ,SAAA;AAAU,KAClE;AAAA,IACA,MAAA,EAAQ,qBAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,QAAQ,SAAA;AAAU,KACpE;AAAA,IACA,MAAA,EAAQ,4BAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,EAAE,QAAA,EAAU,IAAI,MAAA,EAAQ,cAAA,EAAgB,QAAQ,OAAA,EAAQ;AAAA,EACxD;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,OAAA,EAAS,MAAA,EAAQ,MAAA,EAAQ,QAAQ,OAAA,EAAQ;AAAA,MAC3D,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,OAAA,EAAS,QAAQ,SAAA;AAAU,KAClE;AAAA,IACA,MAAA,EAAQ,gCAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,OAAA,EAAS,QAAQ,SAAA;AAAU,KAClE;AAAA,IACA,MAAA,EAAQ,0BAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,EAAE,QAAA,EAAU,IAAI,MAAA,EAAQ,gBAAA,EAAkB,QAAQ,OAAA,EAAQ;AAAA,EAC1D;AAAA,IACE,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR,EAAE,WAAW,IAAA,EAAM,cAAA,EAAgB,WAAW,MAAA,EAAQ,eAAA,EAAiB,QAAQ,SAAA,EAAU;AAAA,MACzF,EAAE,WAAW,IAAA,EAAM,cAAA,EAAgB,WAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA;AAAU,KACtF;AAAA,IACA,MAAA,EAAQ,0BAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR,EAAE,WAAW,IAAA,EAAM,cAAA,EAAgB,WAAW,MAAA,EAAQ,eAAA,EAAiB,QAAQ,SAAA,EAAU;AAAA,MACzF,EAAE,WAAW,IAAA,EAAM,cAAA,EAAgB,WAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA;AAAU,KACtF;AAAA,IACA,MAAA,EAAQ,sBAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU;AAAA,MACR,EAAE,WAAW,KAAA,EAAO,cAAA,EAAgB,WAAW,MAAA,EAAQ,KAAA,EAAO,QAAQ,SAAA,EAAU;AAAA,MAChF,EAAE,WAAW,IAAA,EAAM,cAAA,EAAgB,WAAW,MAAA,EAAQ,QAAA,EAAU,QAAQ,SAAA,EAAU;AAAA,MAClF,EAAE,WAAW,IAAA,EAAM,cAAA,EAAgB,UAAU,MAAA,EAAQ,QAAA,EAAU,QAAQ,QAAA,EAAS;AAAA,MAChF,EAAE,WAAW,IAAA,EAAM,cAAA,EAAgB,WAAW,MAAA,EAAQ,IAAA,EAAM,QAAQ,SAAA,EAAU;AAAA,MAC9E,EAAE,WAAW,KAAA,EAAO,cAAA,EAAgB,WAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA;AAAU,KACvF;AAAA,IACA,MAAA,EAAQ,SAAA;AAAA,IACR,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,QAAQ,SAAA;AAAU,KAC7D;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,UAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,QAAQ,SAAA;AAAU,KAC7D;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,UAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,QAAQ,SAAA;AAAU,KAC7D;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,iBAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,QAAQ,SAAA;AAAU,KAC7D;AAAA,IACA,MAAA,EAAQ,aAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,MAAA,EAAQ,MAAA,EAAQ,EAAA,EAAI,QAAQ,MAAA;AAAO,KACvD;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,QAAA,EAAU,MAAA,EAAQ,EAAA,EAAI,QAAQ,QAAA;AAAS,KAC3D;AAAA,IACA,MAAA,EAAQ,iBAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,OAAA,EAAS,MAAA,EAAQ,EAAA,EAAI,QAAQ,OAAA;AAAQ,KACzD;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,YAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,QAAQ,SAAA;AAAU,KAC7D;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,QAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,QAAQ,SAAA;AAAU,KAC7D;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,SAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,QAAQ,SAAA;AAAU,KAC7D;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,OAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,QAAQ,SAAA;AAAU,KAC7D;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAW,QAAQ,MAAA;AAAO,KAC9D;AAAA,IACA,MAAA,EAAQ,OAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,QAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,MAAA,EAAQ,MAAA,EAAQ,EAAA,EAAI,QAAQ,MAAA;AAAO,KACvD;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,cAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,EAAA,EAAI,QAAQ,SAAA;AAAU,KAC7D;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,MAAA,EAAQ,QAAQ,SAAA,EAAU;AAAA,MAC/D,EAAE,cAAA,EAAgB,QAAA,EAAU,MAAA,EAAQ,SAAA,EAAW,QAAQ,QAAA,EAAS;AAAA,MAChE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,KAAA,EAAO,QAAQ,SAAA,EAAU;AAAA,MAC9D,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,MAAA,EAAQ,OAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT;AAAA,QACE,YAAA,EAAc;AAAA,UACZ,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA,EAAU;AAAA,UACpE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,YAAA,EAAc,QAAQ,SAAA;AAAU,SACvE;AAAA,QACA,cAAA,EAAgB,qBAAA;AAAA,QAChB,MAAA,EAAQ,KAAA;AAAA,QACR,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,QAAA,EAAU,MAAA,EAAQ,SAAA,EAAW,QAAQ,QAAA;AAAS,KAClE;AAAA,IACA,MAAA,EAAQ,UAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA;AAAU,KACrE;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,cAAA,EAAgB,QAAQ,SAAA,EAAU;AAAA,MACvE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA,EAAU;AAAA,MACpE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,aAAA,EAAe,QAAQ,SAAA;AAAU,KACxE;AAAA,IACA,MAAA,EAAQ,cAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA,EAAU;AAAA,MACpE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,aAAA,EAAe,QAAQ,SAAA;AAAU,KACxE;AAAA,IACA,MAAA,EAAQ,YAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,mBAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,MAAA,EAAQ,QAAQ,SAAA,EAAU;AAAA,MAC/D,EAAE,cAAA,EAAgB,QAAA,EAAU,MAAA,EAAQ,SAAA,EAAW,QAAQ,QAAA,EAAS;AAAA,MAChE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,KAAA,EAAO,QAAQ,SAAA,EAAU;AAAA,MAC9D,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,MAAA,EAAQ,SAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,SAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,QAAA,EAAU,MAAA,EAAQ,KAAA,EAAO,QAAQ,QAAA,EAAS;AAAA,MAC5D,EAAE,cAAA,EAAgB,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAQ,OAAA;AAAQ,KACjE;AAAA,IACA,MAAA,EAAQ,oBAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,aAAA,EAAe,QAAQ,SAAA;AAAU,KACxE;AAAA,IACA,MAAA,EAAQ,eAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,aAAA,EAAe,QAAQ,SAAA;AAAU,KACxE;AAAA,IACA,MAAA,EAAQ,eAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,QAAQ,SAAA;AAAU,KACpE;AAAA,IACA,MAAA,EAAQ,WAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA;AAAU,KACrE;AAAA,IACA,MAAA,EAAQ,YAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,MAAA,EAAQ,QAAQ,SAAA,EAAU;AAAA,MAC/D,EAAE,cAAA,EAAgB,MAAA,EAAQ,MAAA,EAAQ,WAAA,EAAa,QAAQ,MAAA;AAAO,KAChE;AAAA,IACA,MAAA,EAAQ,mBAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA;AAAU,KACrE;AAAA,IACA,MAAA,EAAQ,mBAAA;AAAA,IACR,WAAW,EAAC;AAAA,IACZ,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,iBAAA,EAAmB,SAAA;AAAA,IACnB,MAAA,EAAQ;AAAA;AAEZ,CAAA;AAEO,IAAM,wBAAA,GAA2B;AAAA,EACtC;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,eAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,sBAAA,EAAwB,QAAQ,SAAA,EAAU;AAAA,MAC/E,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,mBAAA,EAAqB,QAAQ,SAAA,EAAU;AAAA,MAC5E,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,uBAAA,EAAyB,QAAQ,SAAA,EAAU;AAAA,MAChF,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,qBAAA,EAAuB,QAAQ,SAAA;AAAU,KAChF;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA,EAAU;AAAA,MACnE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA,EAAU;AAAA,MACnE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,OAAA,EAAS,QAAQ,SAAA;AAAU,KAClE;AAAA,IACA,MAAA,EAAQ,QAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA,EAAU;AAAA,MACnE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA;AAAU,KACrE;AAAA,IACA,MAAA,EAAQ,SAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,MAAA,EAAQ,gBAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,YAAA,EAAc,QAAQ,SAAA;AAAU,KACvE;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,YAAA,EAAc,QAAQ,SAAA;AAAU,KACvE;AAAA,IACA,MAAA,EAAQ,iBAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,YAAA,EAAc,QAAQ,SAAA;AAAU,KACvE;AAAA,IACA,MAAA,EAAQ,aAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,MAAA,EAAQ,eAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,YAAA,EAAc,QAAQ,SAAA;AAAU,KACvE;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA,EAAU;AAAA,MACnE,EAAE,cAAA,EAAgB,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,QAAQ,QAAA,EAAS;AAAA,MAC/D,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA;AAAU,KACrE;AAAA,IACA,MAAA,EAAQ,aAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,YAAA,EAAc,QAAQ,SAAA,EAAU;AAAA,MACrE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,iBAAA,EAAmB,SAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA,EAAU;AAAA,MACnE,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,UAAA,EAAY,QAAQ,SAAA;AAAU,KACrE;AAAA,IACA,MAAA,EAAQ,yBAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,WAAA,EAAa,QAAQ,SAAA;AAAU,KACtE;AAAA,IACA,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,UAAU,EAAC;AAAA,IACX,MAAA,EAAQ,yBAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,uBAAA,EAAyB,QAAQ,SAAA,EAAU;AAAA,MAChF,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,wBAAA,EAA0B,QAAQ,SAAA;AAAU,KACnF;AAAA,IACA,iBAAA,EAAmB,MAAA;AAAA,IACnB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,yBAAA,EAA2B,QAAQ,SAAA;AAAU,KACpF;AAAA,IACA,MAAA,EAAQ,kBAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,uBAAA,EAAyB,QAAQ,SAAA,EAAU;AAAA,MAChF,EAAE,cAAA,EAAgB,SAAA,EAAW,MAAA,EAAQ,wBAAA,EAA0B,QAAQ,SAAA;AAAU,KACnF;AAAA,IACA,iBAAA,EAAmB,YAAA;AAAA,IACnB,MAAA,EAAQ;AAAA;AAEZ,CAAA;ACpeO,IAAMC,aAAAA,GAAe,KAAA;AAErB,IAAMZ,YAAAA,GAAwB,CAAC,gBAAgB,CAAA;AAE/C,IAAM,eAAA,GAAN,cAA8B,YAAA,CAAa;AAAA,EAChD,MAAsB,MAAM,MAAA,EAAa;AACvC,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,iBAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,aAAa,CAAA,gBAAA,EAAmB,SAAA,EAAW,SAAS,CAAA,EAAA,EAAK,SAAS,SAAS,CAAA,CAAA;AACjF,IAAA,MAAM,QAAA,GAAW,IAAIC,QAAAA,CAAS,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,aAAA,EAAe,OAAA,EAASC,OAAAA,CAAQ,KAAA,EAAO,CAAA;AAEnG,IAAA,MAAM,eAAA,GAAkB,eAAA,CAAgB,SAAA,CAAU,SAAS,CAAA;AAC3D,IAAA,MAAM,oBAAA,GAAuB,eAAA,CAAgB,OAAA,CAAQ,SAAS,CAAA;AAE9D,IAAA,MAAM,uBAAA,GAA0B,SAAA,CAAU,OAAA,KAAY,CAAA,IAAK,UAAU,OAAA,KAAY,GAAA;AACjF,IAAA,MAAM,qBAAA,GAAwB,OAAA,CAAQ,OAAA,KAAY,CAAA,IAAK,QAAQ,OAAA,KAAY,GAAA;AAC3E,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,OAAA,KAAY,GAAA,IAAO,QAAQ,OAAA,KAAY,GAAA;AACnE,IAAA,MAAM,YAAA,GAAe,UAAU,SAAA,KAAc,QAAA;AAE7C,IAAA,IAAI,YAAA,EAAc;AAEhB,MAAA,IAAI,CAAC,CAAC,CAAA,EAAG,GAAG,EAAE,QAAA,CAAS,OAAA,CAAQ,OAAO,CAAA,EAAG;AACvC,QAAA,MAAM,IAAI,MAAM,2BAA2B,CAAA;AAAA,MAC7C;AAAA,IACF;AAEA,IAAA,MAAM,eAAe,qBAAA,CAAsB;AAAA,MACzC,gBAAA,EAAkB,2BAAA;AAAA,MAClB,YAAA,EAAc,eAAA;AAAA,MACd,iBAAA,EAAmB;AAAA,KACpB,CAAA;AAED,IAAA,IAAI,SAAA,IAAa,CAAC,YAAA,EAAc;AAC9B,MAAA,MAAMK,OAAAA,GAAS,MAAM,MAAA,CAAO,KAAA,CAAMV,QAAQ,KAAA,EAAO;AAAA,QAC/C,GAAG,MAAA;AAAA,QACH,GAAA,EAAK,OAAA;AAAA,QACL,QAAQ,oBAAA,CAAqB,GAAA;AAAA,QAC7B,YAAA,EAAce,aAAAA;AAAA,QACd,sBAAA,EAAwB,uBAAA,GAA0B,eAAA,CAAgB,OAAA,GAAU,SAAA,CAAU,eAAA;AAAA,QACtF,2BAAA,EAA6B,qBAAA,GAAwB,oBAAA,CAAqB,OAAA,GAAU,OAAA,CAAQ,eAAA;AAAA,QAC5F,WAAA,EAAAZ,YAAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAAO,QAAO,YAAA,GAAe,YAAA;AACtB,MAAAA,QAAO,iBAAA,GAAoB,MAAA;AAE3B,MAAA,QAAA,CAAS,SAAS,iCAAiC,CAAA;AAEnD,MAAA,OAAOA,OAAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,KAAA,CAAMV,QAAQ,QAAA,EAAU;AAAA,MAClD,GAAG,MAAA;AAAA,MACH,GAAA,EAAK,YAAA;AAAA,MACL,eAAA;AAAA,MACA,oBAAA;AAAA,MACA,WAAA,EAAAG;AAAA,KACD,CAAA;AAED,IAAA,MAAA,CAAO,YAAA,GAAe,YAAA;AACtB,IAAA,MAAA,CAAO,iBAAA,GAAoB,MAAA;AAE3B,IAAA,QAAA,CAAS,SAAS,uBAAuB,CAAA;AAEzC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEO,UAAU,MAAA,EAAyB;AACxC,IAAA,OAAOW,WAAwC,WAAA,EAAa;AAAA,MAC1D,iBAAiB,MAAA,CAAO;AAAA,KACzB,CAAA;AAAA,EACH;AACF,CAAA;AAEA,IAAO,gBAAA,GAAQ,IAAI,eAAA,EAAgB;AClF5B,IAAM,wBAAA,GAAN,cAAuC,eAAA,CAAgB;AAAA,EAC5D,MAAsB,MAAM,MAAA,EAAa;AACvC,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,iBAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,EAAA,GAAK,IAAIH,GAAAA,CAAIN,OAAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AAEf,IAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,YAAA,EAAc,MAAM,CAAA;AAExE,IAAA,MAAM,aAAa,CAAA,kBAAA,EAAqB,SAAA,EAAW,SAAS,CAAA,EAAA,EAAK,SAAS,SAAS,CAAA,CAAA;AACnF,IAAA,MAAM,QAAA,GAAW,IAAID,QAAAA,CAAS,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,aAAA,EAAe,OAAA,EAASC,OAAAA,CAAQ,KAAA,EAAO,CAAA;AAEnG,IAAA,MAAM,uBAAuB,SAAA,CAAU,OAAA,KAAY,CAAA,IAAK,SAAA,CAAU,WAAW,4BAAA,CAA6B,MAAA;AAC1G,IAAA,MAAM,mBAAmB,OAAA,CAAQ,OAAA,KAAY,CAAA,IAAK,OAAA,CAAQ,WAAW,0BAAA,CAA2B,MAAA;AAEhG,IAAiB,uBAAuB,4BAA4B;AAEpE,IAAA,IAAI,iBAAA,GAAoB,SAAA;AACxB,IAAA,IAAI,2BAAA,GAA8B,UAAA;AAClC,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AACA,IAAA,IAAI,CAAC,2BAAA,EAA6B;AAChC,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AAGA,IAAA,IAAI,eAAA;AACJ,IAAA,IAAI,CAAC,oBAAA,EAAsB;AACzB,MAAA,QAAA,CAAS,UAAA,EAAW;AAEpB,MAAA,eAAA,GAAkB,MAAM,MAAM,KAAA,CAAM;AAAA,QAClC,GAAG,MAAA;AAAA,QACH,OAAA,EAAS,4BAAA;AAAA,QACT,SAAA,EAAW;AAAA,OACZ,CAAA;AACD,MAAA,QAAA,CAAS,IAAI,gBAAgB,CAAA;AAAA,IAC/B;AACA,IAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,qBAAA,EAAuB,eAAe,CAAA;AAC1F,IAAA,MAAM,0BAA0B,oBAAA,GAC5B,SAAA,GACAJ,GAAAA,CAAI,eAAA,CAAgB,gBAAgB,CAAC,CAAA,CAAE,KAAA,CAAM,EAAA,IAAM,6BAA6B,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAA,EAAGA,IAAI,SAAS,CAAA;AACtH,IAAA,MAAM,uBAAuB,oBAAA,GACzBA,GAAAA,CAAI,SAAA,IAAa,CAAC,EAAE,GAAA,CAAI,EAAA,IAAM,SAAA,CAAU,QAAQ,EAAE,OAAA,CAAQ,SAAA,CAAU,UAAUA,GAAAA,CAAI,SAAS,IAC3F,eAAA,CAAgB,YAAA;AAGpB,IAAA,IAAI,eAAA;AACJ,IAAA,IAAI,mBAAA;AACJ,IAAA,IAAI,CAAC,gBAAA,EAAkB;AAuBrB,MAAA,IAAI,qBAAA,GAAwBA,GAAAA,CAAI,oBAAA,IAAwB,CAAC,CAAA,CAAE,KAAA,CAAM,EAAA,IAAM,0BAAA,CAA2B,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAA,EAAGA,IAAI,SAAS,CAAA;AACpI,MAAA,IAAI;AACF,QAAA,QAAA,CAAS,UAAA,EAAW;AACpB,QAAA,mBAAA,GAAsB,MAAM,kBAAkB,mBAAA,CAAoB;AAAA,UAChE,GAAA;AAAA,UACA,SAAA,EAAW,uBAAA;AAAA,UACX,SAAA,EAAW,4BAAA;AAAA,UACX,GAAA,EAAK,wBAAA;AAAA,UACL,oBAAA,EAAsB,6BAAA;AAAA,UACtB,mBAAA,EAAqB,4BAAA;AAAA,UACrB,iBAAA,EAAmB;AAAA,SACpB,CAAA;AACD,QAAA,QAAA,CAAS,IAAI,uCAAuC,CAAA;AACpD,QAAA,qBAAA,GAAwB,mBAAA,CAAoB,eAAe,QAAA,EAAS;AAAA,MACtE,SAAS,KAAA,EAAO;AACd,QAAA,GAAA,CAAI,gCAAA,EAAkC,SAAA,EAAW,mCAAA,EAAqC,KAAK,CAAA;AAAA,MAC7F;AAGA,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,eAAA,GAAkB,MAAM,iBAAgB,KAAA,CAAM;AAAA,QAC5C,GAAG,MAAA;AAAA,QACH,SAAA,EAAW,qBAAA;AAAA,QACX,SAAA,EAAW,0BAAA;AAAA,QACX,aAAa,0BAAA,CAA2B,OAAA;AAAA,QACxC,QAAA,EAAU,YAAA;AAAA,QACV,OAAA,EAAS,KAAA;AAAA,QACT,QAAA,EAAU,2BAAA;AAAA,QACV,MAAA,EAAQ,iBAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP;AAAA,YACE,SAAA,EAAW,aAAA;AAAA;AAAA,YAEX,KAAK;AAAC;AAAA;AACR;AACF,OACD,CAAA;AACD,MAAA,QAAA,CAAS,IAAI,uBAAuB,CAAA;AAAA,IACtC;AACA,IAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,qBAAA,EAAuB,eAAe,CAAA;AAG1F,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,gBAAA,GAAmB,MAAM,iBAAA,CAAkB,YAAA,CAAa;AAAA,MAC5D,GAAG,MAAA;AAAA,MACH,mBAAA;AAAA,MACA,SAAA,EAAW,4BAAA;AAAA,MACX,SAAA,EAAW,uBAAA;AAAA,MACX,OAAA,EAAS,0BAAA;AAAA,MACT,QAAA,EAAU,2BAAA;AAAA,MACV,WAAW,CAAC,gBAAA,GAAoB,eAAA,EAAiB,KAAA,EAAO,kBAAkB,2BAAA,GAA+B,SAAA;AAAA,MACzG,GAAA,EAAK,wBAAA;AAAA,MACL,oBAAA,EAAsB,6BAAA;AAAA,MACtB,mBAAA,EAAqB,4BAAA;AAAA,MACrB,iBAAA,EAAmB,4BAAA;AAAA,MACnB,4BAAA,EAA8B;AAAA,KAC/B,CAAA;AACD,IAAA,QAAA,CAAS,IAAI,gCAAgC,CAAA;AAC7C,IAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,sBAAA,EAAwB,gBAAgB,CAAA;AAE5F,IAAA,MAAM,YAAA,GAAe,CAAC,OAAA,KAAiB;AACrC,MAAA,IAAI,YAAA,GAAeA,IAAI,CAAC,CAAA;AACxB,MAAA,IAAI,YAAA,GAAe,SAAS,YAAA,IAAgB,CAAA;AAC5C,MAAA,IAAI,iBAAA,GAAoB,SAAS,YAAA,IAAgB,GAAA;AACjD,MAAA,IAAI,cAAA,GAAiB,iBAAiB,KAAA,EAAO,cAAA;AAE7C,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,GAAG,OAAA,EAAS;AAAA,OACd;AACA,MAAA,IAAI,CAAC,gBAAA,EAAkB;AACrB,QAAA,KAAA,MAAW,MAAA,IAAU,iBAAiB,IAAA,EAAM;AAC1C,UAAA,IAAI,WAAA,CAAoB,QAAA,CAAS,MAAM,CAAA,EAAG;AACxC,YAAA;AAAA,UACF;AACA,UAAA,IAAA,CAAK,MAAM,CAAA,GAAI,eAAA,CAAgB,IAAA,CAAK,MAAM,CAAA;AAAA,QAC5C;AACA,QAAA,YAAA,GAAe,YAAA,IAAgB,iBAAiB,YAAA,IAAgB,CAAA,CAAA;AAChE,QAAA,iBAAA,GAAoB,iBAAiB,YAAA,IAAgB,GAAA;AAAA,MACvD;AACA,MAAA,KAAA,MAAW,UAAU,IAAA,EAAM;AACzB,QAAA,IAAIE,YAAAA,CAAgB,QAAA,CAAS,MAAM,CAAA,EAAG;AACpC,UAAA;AAAA,QACF;AACA,QAAA,YAAA,GAAeF,GAAAA,CAAI,gBAAgB,CAAC,CAAA,CAAE,KAAK,IAAA,CAAK,MAAM,KAAK,CAAC,CAAA;AAAA,MAC9D;AAEA,MAAA,MAAM,WAAA,GAAcA,GAAAA,CAAI,SAAS,CAAA,CAAE,GAAA,CAAI,EAAA,IAAM,SAAA,CAAU,QAAQ,CAAA,CAAE,OAAA,CAAQ,SAAA,CAAU,QAAA,EAAUA,IAAI,SAAS,CAAA;AAC1G,MAAA,MAAM,WAAA,GAAcA,IAAI,WAAW,CAAA,CAAE,MAAMe,QAAAA,CAAS,MAAA,EAAQ,SAAA,CAAU,MAAM,CAAC,CAAA;AAC7E,MAAA,MAAM,cAAcf,GAAAA,CAAI,WAAW,CAAA,CAAE,KAAA,CAAMA,IAAI,iBAAiB,CAAA,CAAE,KAAA,CAAMe,QAAAA,CAAS,QAAQ,OAAA,CAAQ,MAAM,CAAC,CAAC,CAAA,CAAE,IAAI,WAAW,CAAA;AAC1H,MAAA,MAAM,YAAA,GAAef,GAAAA,CAAI,iBAAiB,CAAA,CAAE,IAAI,WAAW,CAAA;AAE3D,MAAA,OAAO;AAAA,QACL,IAAA;AAAA,QACA,cAAcW,mBAAAA,CAAoBX,GAAAA,CAAI,YAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,QAC/D,YAAA;AAAA,QACA,YAAA,EAAc,iBAAA;AAAA,QACd,aAAaW,mBAAAA,CAAoBX,GAAAA,CAAI,WAAW,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,QAC5D,YAAA,EAAcW,oBAAoBX,GAAAA,CAAI,YAAY,EAAE,OAAA,CAAQ,CAAA,EAAGA,GAAAA,CAAI,SAAS,CAAC,CAAA;AAAA,QAC7E,UAAA,EAAY;AAAA,UACV,GAAG,OAAA,EAAS,UAAA;AAAA,UACZ,SAAA;AAAA,UACA,SAAA;AAAA,UACA,OAAA;AAAA,UACA,QAAA;AAAA,UACA,SAAA;AAAA,UACA,WAAA,EAAa,0BAAA;AAAA,UACb,YAAA,EAAc,4BAAA;AAAA,UACd,oBAAA;AAAA,UACA,gBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,iBAAA,EAAmB;AAAA,OACrB;AAAA,IACF,CAAA;AAGA,IAAA,IAAI,oBAAA,EAAsB;AAExB,MAAA,MAAMgB,eAAAA,GAAiB,aAAa,gBAAgB,CAAA;AAEpD,MAAA,QAAA,CAAS,SAAS,uDAAuD,CAAA;AAEzE,MAAA,OAAO;AAAA,QACL,GAAG,gBAAA;AAAA,QACH,GAAGA,eAAAA;AAAA,QACH,iBAAA,EAAmB;AAAA,OACrB;AAAA,IACF;AAGA,IAAA,MAAM,iBAAiB,YAAA,CAAa;AAAA,MAClC,GAAG,eAAA;AAAA,MACH,cAAc,gBAAA,CAAiB;AAAA,KAChC,CAAA;AAED,IAAA,QAAA,CAAS,SAAS,2DAA2D,CAAA;AAE7E,IAAA,OAAO;AAAA,MACL,GAAG,eAAA;AAAA,MACH,GAAG,cAAA;AAAA,MACH,SAAA;AAAA,MACA,UAAA,EAAY,IAAA;AAAA,MACZ,aAAA,EAAe,iCAAA;AAAA,MACf,WAAA,EAAa,4BAAA;AAAA,MACb,eAAA,EAAiB,uBAAA;AAAA,MACjB,sBAAsB,EAAC;AAAA,MACvB,iBAAA,EAAmB;AAAA,KACrB;AAAA,EACF;AAAA,EAEO,UAAU,MAAA,EAAyB;AACxC,IAAA,OAAOH,WAAwC,WAAA,EAAa;AAAA,MAC1D,iBAAiB,MAAA,CAAO;AAAA,KACzB,CAAA;AAAA,EACH;AACF,CAAA;AAEA,IAAO,mBAAA,GAAQ,IAAI,wBAAA,EAAyB;AClPrC,IAAM,wBAAA,GAAN,cAAuC,eAAA,CAAgB;AAAA,EAC5D,MAAsB,MAAM,MAAA,EAAa;AACvC,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,iBAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,EAAA,GAAK,IAAIH,GAAAA,CAAIN,OAAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AAEf,IAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,YAAA,EAAc,MAAM,CAAA;AAExE,IAAA,MAAM,aAAa,CAAA,kBAAA,EAAqB,SAAA,EAAW,SAAS,CAAA,EAAA,EAAK,SAAS,SAAS,CAAA,CAAA;AACnF,IAAA,MAAM,QAAA,GAAW,IAAID,QAAAA,CAAS,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,aAAA,EAAe,OAAA,EAASC,OAAAA,CAAQ,KAAA,EAAO,CAAA;AAEnG,IAAA,MAAM,qBAAqB,SAAA,CAAU,OAAA,KAAY,CAAA,IAAK,SAAA,CAAU,WAAW,0BAAA,CAA2B,MAAA;AACtG,IAAA,MAAM,qBAAqB,OAAA,CAAQ,OAAA,KAAY,CAAA,IAAK,OAAA,CAAQ,WAAW,4BAAA,CAA6B,MAAA;AACpG,IAAA,MAAM,UAAA,GAAa,QAAQ,SAAA,KAAc,QAAA;AACzC,IAAA,MAAM,WAAA,GAAc,QAAQ,OAAA,KAAY,GAAA;AAGxC,IAAA,MAAM,QAAA,GAAWa,uBAAuB,0BAA0B,CAAA;AAElE,IAAA,IAAI,iBAAA,GAAoB,SAAA;AACxB,IAAA,IAAI,2BAAA,GAA8B,UAAA;AAClC,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AACA,IAAA,IAAI,CAAC,2BAAA,EAA6B;AAChC,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AAEA,IAAA,IAAI,iBAAA;AAEJ,IAAA,IAAI,CAAC,kBAAA,EAAoB;AAEvB,MAAA,IAAI,QAAA,GAAW,kBAAkB,IAAA,CAAK,IAAA;AACtC,MAAA,IAAI,kBAAA,EAAoB;AACtB,QAAA,QAAA,GAAW,kBAAkB,IAAA,CAAK,WAAA;AAAA,MACpC;AACA,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,QAAA,GAAW,kBAAkB,IAAA,CAAK,MAAA;AAAA,MACpC;AACA,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,QAAA,GAAW,kBAAkB,IAAA,CAAK,UAAA;AAAA,MACpC;AACA,MAAA,QAAA,GAAW,WAAW,IAAA,GAAO,IAAA;AAI7B,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,iBAAA,GAAoB,MAAM,kBAAkB,iBAAA,CAAkB;AAAA,QAC5D,GAAA;AAAA,QACA,WAAWjB,GAAAA,CAAI,SAAA,IAAa,CAAC,CAAA,CAAE,IAAI,EAAA,IAAM,SAAA,CAAU,QAAQ,CAAA,CAAE,MAAM,EAAA,IAAM,0BAAA,CAA2B,QAAQ,CAAA,CAAE,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,QAC1H,SAAA,EAAW,0BAAA;AAAA,QACX,GAAA,EAAK,wBAAA;AAAA,QACL,oBAAA,EAAsB;AAAA,OACvB,CAAA;AACD,MAAA,MAAM,EAAE,cAAA,EAAgB,+BAAA,EAAgC,GAAI,iBAAA;AAC5D,MAAA,QAAA,CAAS,IAAI,mBAAmB,CAAA;AAEhC,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,MAAM,EAAE,GAAA,EAAK,GAAA,EAAK,QAAO,GAAI,MAAM,kBAAkB,cAAA,CAAe;AAAA,QAClE,QAAA;AAAA,QACA,KAAA,EAAOe,QAAAA,CAAS,MAAA,EAAQ,0BAAA,CAA2B,YAAY,MAAM,CAAA;AAAA,QACrE,aAAa,0BAAA,CAA2B,WAAA;AAAA,QACxC,QAAA;AAAA,QACA,UAAU,GAAA,GAAM,UAAA,CAAW,0BAAA,CAA2B,OAAiB,EAAE,QAAA,GAAW;AAAA,OACrF,CAAA;AACD,MAAA,QAAA,CAAS,IAAI,kCAAkC,CAAA;AAC/C,MAAA,MAAM,qBAAA,GAAwBf,GAAAA,CAAI,GAAA,IAAO,CAAC,EAAE,GAAA,CAAIe,QAAAA,CAAS,MAAA,EAAQ,SAAA,CAAU,MAAM,CAAA,IAAK,CAAC,CAAA,CAAE,OAAA,CAAQ,UAAU,QAAQ,CAAA;AAEnH,MAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,+DAAA,EAAiE,GAAA,EAAK,KAAK,MAAM,CAAA;AAIrI,MAAA,IAAIG,iBAAAA;AACJ,MAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,QAAA,QAAA,CAAS,UAAA,EAAW;AACpB,QAAAA,iBAAAA,GAAmB,MAAM,KAAA,CAAM,KAAA,CAAM;AAAA,UACnC,GAAG,MAAA;AAAA,UACH,SAAA,EAAW,4BAAA;AAAA,UACX,MAAA,EAAQ,iBAAA;AAAA,UACR,SAAA,EAAW,gCAAgC,QAAA,EAAS;AAAA,UACpD,QAAA,EAAU;AAAA,SACX,CAAA;AACD,QAAA,QAAA,CAAS,IAAI,gBAAgB,CAAA;AAAA,MAC/B;AACA,MAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,2CAAA,EAA6CA,iBAAgB,CAAA;AAEjH,MAAA,IAAI,qBAAA,GAAwBA,iBAAAA,EAAkB,IAAA,EAAM,YAAA,IAAgB,GAAA;AACpE,MAAA,IAAI,kBAAA,GAAqBA,iBAAAA,EAAkB,IAAA,EAAM,SAAA,IAAa,GAAA;AAE9D,MAAA,MAAM,qBAAA,GAAwB,GAAA;AAE9B,MAAA,qBAAA,GAAwBlB,IAAI,qBAAA,IAAyB,CAAC,CAAA,CAAE,KAAA,CAAM,IAAI,qBAAqB,CAAA;AACvF,MAAA,kBAAA,GAAqBA,IAAI,kBAAA,IAAsB,CAAC,CAAA,CAAE,KAAA,CAAM,IAAI,qBAAqB,CAAA;AACjF,MAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,gDAAA,EAAkD,qBAAA,CAAsB,UAAU,CAAA;AACtI,MAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,6CAAA,EAA+C,kBAAA,CAAmB,UAAU,CAAA;AAChI,MAAA,MAAM,wBAAA,GAA2BA,GAAAA,CAAI,qBAAqB,CAAA,CAAE,IAAIe,QAAAA,CAAS,MAAA,EAAQ,SAAA,CAAU,MAAM,CAAA,IAAK,CAAC,CAAA,CAAE,OAAA,CAAQ,UAAU,QAAQ,CAAA;AAEnI,MAAA,MAAM,kBAAA,GAAqBf,GAAAA,CAAI,qBAAqB,CAAA,CAAE,KAAK,wBAAwB,CAAA;AACnF,MAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,6CAAA,EAA+C,kBAAA,CAAmB,UAAU,CAAA;AAChI,MAAA,MAAM,gBAAA,GAAmBA,GAAAA,CAAI,kBAAkB,CAAA,CAC5C,GAAA,CAAIA,GAAAA,CAAI,kBAAkB,CAAA,CAAE,IAAA,CAAKA,GAAAA,CAAI,MAAA,CAAO,SAAS,EAAE,GAAA,CAAI,EAAA,IAAM,SAAA,CAAU,QAAQ,CAAA,CAAE,OAAA,CAAQ,SAAA,CAAU,QAAQ,CAAC,CAAC,CAAA,CACjH,KAAA,CAAM,GAAK,CAAA,CACX,OAAA,CAAQ,CAAA,EAAGA,IAAI,OAAO,CAAA;AACzB,MAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,2CAAA,EAA6C,gBAAA,CAAiB,UAAU,CAAA;AAC5H,MAAA,IAAIkB,iBAAAA,EAAkB;AACpB,QAAAA,iBAAAA,CAAiB,IAAA,CAAK,SAAA,GAAY,kBAAA,CAAmB,QAAA,EAAS;AAC9D,QAAAA,iBAAAA,CAAiB,IAAA,CAAK,YAAA,GAAe,qBAAA,CAAsB,QAAA,EAAS;AAAA,MACtE;AAEA,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,MAAMC,gBAAAA,GAAkB,MAAM,gBAAA,CAAgB,KAAA,CAAM;AAAA,QAClD,GAAG,MAAA;AAAA,QACH,OAAA,EAAS,0BAAA;AAAA,QACT,kBAAkB,0BAAA,CAA2B,OAAA;AAAA,QAC7C,QAAA,EAAU,cAAA;AAAA,QACV,OAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAW,2BAAA;AAAA,QACX,OAAA,EAAS;AAAA,UACP;AAAA,YACE,SAAA,EAAW,aAAA;AAAA;AAAA,YAEX,KAAK,CAAC;AAAA;AAAA;AACR;AACF,OACD,CAAA;AACD,MAAA,QAAA,CAAS,IAAI,uBAAuB,CAAA;AACpC,MAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,0CAAA,EAA4CA,gBAAe,CAAA;AAE/G,MAAA,IAAIC,aAAAA,GAAepB,IAAI,CAAC,CAAA;AACxB,MAAA,IAAI,qBAAA,GAAwBA,IAAImB,gBAAAA,CAAgB,IAAA,EAAM,wBAAwB,CAAC,CAAA,CAAE,MAAM,qBAAqB,CAAA;AAC5G,MAAA,IAAInB,GAAAA,CAAI,qBAAqB,CAAA,CAAE,EAAA,CAAG,CAAC,CAAA,EAAG;AACpC,QAAA,qBAAA,GAAwBA,IAAI,CAAC,CAAA;AAAA,MAC/B;AACA,MAAA,MAAMqB,KAAAA,GAAO;AAAA,QACX,GAAGF,gBAAAA,CAAgB,IAAA;AAAA,QACnB,sBAAsBR,mBAAAA,CAAoBX,GAAAA,CAAI,qBAAqB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC;AAAA,OAClF;AACA,MAAA,KAAA,MAAW,MAAA,IAAUkB,mBAAkB,IAAA,EAAM;AAC3C,QAAA,IAAIhB,YAAAA,CAAoB,QAAA,CAAS,MAAM,CAAA,EAAG;AACxC,UAAA;AAAA,QACF;AACA,QAAAmB,KAAAA,CAAK,MAAM,CAAA,GAAIH,iBAAAA,CAAiB,KAAK,MAAM,CAAA;AAAA,MAC7C;AACA,MAAA,KAAA,MAAW,UAAUG,KAAAA,EAAM;AACzB,QAAA,IAAI,WAAA,CAAoB,QAAA,CAAS,MAAM,CAAA,EAAG;AACxC,UAAA;AAAA,QACF;AACA,QAAAD,aAAAA,GAAepB,IAAIoB,aAAAA,IAAgB,CAAC,EAAE,IAAA,CAAKC,KAAAA,CAAK,MAAM,CAAA,IAAK,CAAC,CAAA;AAAA,MAC9D;AAEA,MAAA,QAAA,CAAS,SAAS,wDAAwD,CAAA;AAE1E,MAAA,MAAM,+BAAA,GAAkC,qBACpCV,mBAAAA,CAAoBX,GAAAA,CAAI,gCAAgC,QAAA,EAAU,EAAE,GAAA,CAAI,EAAA,IAAM,QAAQ,QAAQ,CAAA,CAAE,QAAQ,OAAA,CAAQ,QAAA,EAAUA,IAAI,SAAS,CAAC,IACxIkB,iBAAAA,CAAiB,YAAA;AAErB,MAAA,OAAO;AAAA,QACL,GAAGC,gBAAAA;AAAA,QACH,UAAA,EAAY,IAAA;AAAA,QACZ,aAAA,EAAe,iCAAA;AAAA,QACf,WAAA,EAAa,0BAAA;AAAA,QACb,eAAA,EAAiBA,kBAAiB,KAAA,EAAO,SAAA;AAAA,QACzC,sBAAsB,EAAC;AAAA,QACvB,IAAA,EAAAE,KAAAA;AAAA,QACA,cAAcV,mBAAAA,CAAoBX,GAAAA,CAAIoB,aAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,QAC/D,YAAA,EAAA,CAAe,kBAAA,GAAqB,CAAA,GAAIF,iBAAAA,CAAiB,gBAAgBC,gBAAAA,CAAgB,YAAA;AAAA,QACzF,YAAA,EAAc,+BAAA;AAAA,QACd,UAAA,EAAY;AAAA,UACV,GAAGA,gBAAAA,CAAgB,UAAA;AAAA,UACnB,SAAS,MAAA,CAAO,OAAA;AAAA,UAChB,WAAA,EAAa,0BAAA;AAAA,UACb,YAAA,EAAc,4BAAA;AAAA,UACd,WAAW,MAAA,CAAO,SAAA;AAAA,UAClB,cAAA,EAAgBA,iBAAgB,KAAA,EAAO,cAAA;AAAA,UACvC,kBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,SAAA,EAAW;AAAA,UACT,GAAGA,gBAAAA,CAAgB,SAAA;AAAA,UACnB,kBAAA,EAAoB,CAACA,gBAAAA,CAAgB,SAAA,GAAY;AAAA,YAC/C,aAAa,SAAA,CAAU,eAAA;AAAA,YACvB,cAAA,EAAgBA,iBAAgB,KAAA,EAAO,cAAA;AAAA,YACvC,MAAA,EAAQA,iBAAgB,KAAA,EAAO;AAAA,WACjC,GAAI,KAAA;AAAA,UACJ,kBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,iBAAA,EAAmB;AAAA,OACrB;AAAA,IACF;AAIA,IAAA,IAAI,kBAAA,EAAoB;AACtB,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,MAAMA,gBAAAA,GAAkB,MAAM,iBAAA,CAAkB,UAAA,CAAW;AAAA,QACzD,GAAG,MAAA;AAAA,QACH,OAAA,EAAS,4BAAA;AAAA,QACT,GAAA,EAAK,wBAAA;AAAA,QACL,oBAAA,EAAsB,6BAAA;AAAA,QACtB;AAAA,OACD,CAAA;AACD,MAAA,QAAA,CAAS,IAAI,8BAA8B,CAAA;AAC3C,MAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,sCAAA,EAAwCA,gBAAe,CAAA;AAE3G,MAAA,QAAA,CAAS,SAAS,qDAAqD,CAAA;AAEvE,MAAA,OAAO;AAAA,QACL,GAAGA,gBAAAA;AAAA,QACH,UAAA,EAAY;AAAA,UACV,GAAGA,gBAAAA,CAAgB,UAAA;AAAA,UACnB,WAAA,EAAa,0BAAA;AAAA,UACb,YAAA,EAAc,4BAAA;AAAA,UACd,kBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,SAAA,EAAW;AAAA,UACT,GAAGA,gBAAAA,CAAgB,SAAA;AAAA,UACnB,kBAAA;AAAA,UACA;AAAA,SACF;AAAA,QACA,iBAAA,EAAmB;AAAA,OACrB;AAAA,IACF;AAIA,IAAA,MAAM,eAAA,GAAkB,eAAA,CAAgB,SAAA,CAAU,SAAS,CAAA;AAC3D,IAAA,MAAM,oBAAA,GAAuB,eAAA,CAAgB,OAAA,CAAQ,SAAS,CAAA;AAE9D,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,eAAA,GAAkB,MAAM,iBAAA,CAAkB,iBAAA,CAAkB;AAAA,MAChE,GAAG,MAAA;AAAA,MACH,GAAA,EAAK,wBAAA;AAAA,MACL,oBAAA,EAAsB,6BAAA;AAAA,MACtB,4BAAA,EAA8B,iCAAA;AAAA,MAC9B,eAAA;AAAA,MACA,oBAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,QAAA,CAAS,IAAI,qCAAqC,CAAA;AAClD,IAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,sCAAA,EAAwC,eAAe,CAAA;AAI3G,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,gBAAA,GAAmB,MAAM,KAAA,CAAM,KAAA,CAAM;AAAA,MACzC,GAAG,MAAA;AAAA,MACH,SAAA,EAAW,4BAAA;AAAA,MACX,MAAA,EAAQ,iBAAA;AAAA,MACR,SAAA,EAAWnB,GAAAA,CAAI,eAAA,CAAgB,YAAY,CAAA,CAAE,KAAA,CAAM,EAAA,IAAM,4BAAA,CAA6B,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAA,EAAGA,IAAI,SAAS;AAAA,KACzH,CAAA;AACD,IAAA,QAAA,CAAS,IAAI,gBAAgB,CAAA;AAC7B,IAAA,GAAA,CAAI,gCAAA,EAAkC,YAAA,EAAc,wCAAA,EAA0C,gBAAgB,CAAA;AAE9G,IAAA,IAAI,YAAA,GAAeA,IAAI,CAAC,CAAA;AACxB,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,GAAG,eAAA,CAAgB;AAAA,KACrB;AACA,IAAA,KAAA,MAAW,MAAA,IAAU,iBAAiB,IAAA,EAAM;AAC1C,MAAA,IAAIE,YAAAA,CAAoB,QAAA,CAAS,MAAM,CAAA,EAAG;AACxC,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,MAAM,CAAA,GAAI,gBAAA,CAAiB,IAAA,CAAK,MAAM,CAAA;AAAA,IAC7C;AACA,IAAA,KAAA,MAAW,UAAU,IAAA,EAAM;AACzB,MAAA,IAAI,WAAA,CAAoB,QAAA,CAAS,MAAM,CAAA,EAAG;AACxC,QAAA;AAAA,MACF;AACA,MAAA,YAAA,GAAeF,GAAAA,CAAI,gBAAgB,CAAC,CAAA,CAAE,KAAK,IAAA,CAAK,MAAM,KAAK,CAAC,CAAA;AAAA,IAC9D;AAEA,IAAA,MAAM,gBAAA,GAAmB,gBAAgB,SAAA,CAAU,KAAA,CAAM,gBAAgB,SAAA,CAAU,KAAA,CAAM,SAAS,CAAC,CAAA;AACnG,IAAA,MAAM,wBAAA,GAA2B,iBAAiB,SAAA,CAAU,KAAA,CAAM,iBAAiB,SAAA,CAAU,KAAA,CAAM,SAAS,CAAC,CAAA;AAC7G,IAAA,eAAA,CAAgB,UAAU,KAAA,CAAM,eAAA,CAAgB,UAAU,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,GAAI;AAAA,MAC5E,GAAG,gBAAA;AAAA,MACH,OAAO,wBAAA,CAAyB;AAAA,KAClC;AAEA,IAAA,QAAA,CAAS,SAAS,yDAAyD,CAAA;AAE3E,IAAA,OAAO;AAAA,MACL,GAAG,eAAA;AAAA,MACH,IAAA;AAAA,MACA,cAAcW,mBAAAA,CAAoBX,GAAAA,CAAI,YAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,MAC/D,YAAA,EAAc,eAAA,CAAgB,YAAA,GAAe,gBAAA,CAAiB,YAAA;AAAA,MAC9D,cAAc,gBAAA,CAAiB,YAAA;AAAA,MAC/B,UAAA,EAAY;AAAA,QACV,GAAG,eAAA,CAAgB,UAAA;AAAA,QACnB,WAAA,EAAa,0BAAA;AAAA,QACb,YAAA,EAAc,4BAAA;AAAA,QACd,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,SAAA,EAAW;AAAA,QACT,GAAG,eAAA,CAAgB,SAAA;AAAA,QACnB,kBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,iBAAA,EAAmB;AAAA,KACrB;AAAA,EACF;AAAA,EAEA,MAAsB,KAAK,MAAA,EAAa;AACtC,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,SAAA;AAAA,MACA,GAAG;AAAA,KACL,GAAI,MAAA;AAGJ,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAI,UAAU,kBAAA,EAAoB;AAChC,QAAA,OAAO,MAAA,CAAO,IAAA,CAAKY,QAAAA,CAAS,QAAA,EAAU,UAAU,kBAAkB,CAAA;AAAA,MACpE;AACA,MAAA,MAAM,KAAK,MAAM,MAAA,CAAO,IAAA,CAAKA,QAAAA,CAAS,MAAM,SAAS,CAAA;AACrD,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,OAAO,MAAA,CAAO,IAAA,CAAKA,QAAAA,CAAS,IAAA,EAAM,IAAI,CAAA;AAAA,EACxC;AAAA,EAEA,MAAsB,mBAAA,CAAoB,MAAA,EAAa,SAAA,EAAgB;AACrE,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA;AAAA,KACF,GAAI,SAAA;AAGJ,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAI,UAAU,kBAAA,EAAoB;AAChC,QAAA,OAAO,SAAA;AAAA,MACT;AACA,MAAA,OAAO,KAAA,CAAM,mBAAA,CAAoB,MAAA,EAAQ,SAAS,CAAA;AAAA,IACpD;AAEA,IAAA,OAAO,SAAA;AAAA,EACT;AAAA,EAEO,UAAU,MAAA,EAAyB;AACxC,IAAA,OAAOC,WAAwC,WAAA,EAAa;AAAA,MAC1D,iBAAiB,MAAA,CAAO;AAAA,KACzB,CAAA;AAAA,EACH;AACF,CAAA;AAEA,IAAO,qBAAA,GAAQ,IAAI,wBAAA,EAAyB;AC5WrC,IAAM,uBAAN,MAA2B;AAAA,EAChC,MAAa,MAAM,MAAA,EAAa;AAC9B,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,EAAA,GAAK,IAAIH,GAAAA,CAAIN,OAAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AACf,IAAA,MAAM,QAAA,GAAW,IAAID,QAAAA,CAAS,EAAE,IAAA,EAAM,sBAAA,EAAwB,QAAA,EAAU,UAAA,EAAY,OAAA,EAASC,OAAAA,CAAQ,KAAA,EAAO,CAAA;AAE5G,IAAA,IAAI,iBAAA,GAAoB,SAAA;AACxB,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AAEA,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,GAAG,MAAA;AAAA,MACH,OAAA,EAAS,kBAAA;AAAA,MACT,kBAAkB,kBAAA,CAAmB,SAAA;AAAA,MACrC,SAAA,EAAW;AAAA,KACb;AACA,IAAA,MAAM,cAAA,GAAiB;AAAA,MACrB,GAAG,MAAA;AAAA,MACH,SAAA,EAAW,kBAAA;AAAA,MACX,aAAa,kBAAA,CAAmB,OAAA;AAAA,MAChC,QAAA,EAAU,YAAA;AAAA,MACV,OAAA,EAAS,KAAA;AAAA,MACT,QAAA,EAAU,4BAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,IAAI,cAAA;AACJ,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,MAAM,YAAA,GAAe;AAAA,QACnB,gBAAA,CAAgB,MAAM,cAAc,CAAA;AAAA,QACpC,aAAA,CAAa,MAAM,WAAW;AAAA,OAChC;AACA,MAAA,MAAM,SAAA,GAAY,MAAM,OAAA,CAAQ,GAAA,CAAI,YAAY,CAAA;AAChD,MAAA,cAAA,GAAiB,UAAU,CAAC,CAAA;AAC5B,MAAA,WAAA,GAAc,UAAU,CAAC,CAAA;AACzB,MAAA,QAAA,CAAS,IAAI,4CAA4C,CAAA;AAAA,IAC3D,CAAA,MAEK;AACH,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,cAAA,GAAiB,MAAM,gBAAA,CAAgB,KAAA,CAAM,cAAc,CAAA;AAC3D,MAAA,QAAA,CAAS,IAAI,uBAAuB,CAAA;AAEpC,MAAA,IAAI,eAAe,MAAA,EAAQ;AACzB,QAAA,OAAO,cAAA;AAAA,MACT;AAEA,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,WAAA,CAAY,SAAA,GAAY,eAAe,KAAA,CAAM,cAAA;AAAA,MAC/C;AAEA,MAAA,QAAA,CAAS,UAAA,EAAW;AACpB,MAAA,WAAA,GAAc,MAAM,aAAA,CAAa,KAAA,CAAM,WAAW,CAAA;AAClD,MAAA,QAAA,CAAS,IAAI,oBAAoB,CAAA;AAAA,IACnC;AAEA,IAAA,GAAA,CAAI,4BAAA,EAA8B,UAAA,EAAY,oBAAA,EAAsB,cAAc,CAAA;AAClF,IAAA,GAAA,CAAI,4BAAA,EAA8B,UAAA,EAAY,iBAAA,EAAmB,WAAW,CAAA;AAE5E,IAAA,IAAI,YAAA,GAAeJ,IAAI,CAAC,CAAA;AACxB,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,GAAG,WAAA,CAAY;AAAA,KACjB;AACA,IAAA,KAAA,MAAW,MAAA,IAAU,eAAe,IAAA,EAAM;AACxC,MAAA,IAAI,WAAA,CAAoB,QAAA,CAAS,MAAM,CAAA,EAAG;AACxC,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,MAAM,CAAA,GAAI,cAAA,CAAe,IAAA,CAAK,MAAM,CAAA;AAAA,IAC3C;AACA,IAAA,KAAA,MAAW,UAAU,IAAA,EAAM;AACzB,MAAA,IAAIE,YAAAA,CAAiB,QAAA,CAAS,MAAM,CAAA,EAAG;AACrC,QAAA;AAAA,MACF;AACA,MAAA,YAAA,GAAeF,GAAAA,CAAI,gBAAgB,CAAC,CAAA,CAAE,KAAK,IAAA,CAAK,MAAM,KAAK,CAAC,CAAA;AAAA,IAC9D;AAEA,IAAA,QAAA,CAAS,SAAS,4BAA4B,CAAA;AAE9C,IAAA,OAAO;AAAA,MACL,GAAG,WAAA;AAAA,MACH,IAAA;AAAA,MACA,cAAcW,mBAAAA,CAAoBX,GAAAA,CAAI,YAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,MAC/D,YAAA,EAAc,WAAA,CAAY,YAAA,GAAe,cAAA,CAAe,YAAA;AAAA,MACxD,cAAc,cAAA,CAAe,YAAA;AAAA,MAC7B,aAAa,cAAA,CAAe,WAAA;AAAA,MAC5B,cAAc,cAAA,CAAe,YAAA;AAAA,MAC7B,UAAA,EAAY;AAAA,QACV,GAAG,WAAA,CAAY,UAAA;AAAA,QACf,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,WAAA,EAAa,kBAAA;AAAA,QACb,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,cAAA,EAAgB,eAAe,KAAA,CAAM;AAAA,OACvC;AAAA,MACA,iBAAA,EAAmB;AAAA,KACrB;AAAA,EACF;AAAA,EAEA,MAAa,mBAAA,CAAoB,MAAA,EAAa,SAAA,EAAgB;AAG5D,IAAA,OAAO,aAAA,CAAa,mBAAA,CAAoB,MAAA,EAAQ,SAAS,CAAA;AAAA,EAC3D;AAAA,EAEA,MAAa,KAAK,MAAA,EAAa;AAC7B,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA,GAAG;AAAA,KACL,GAAI,MAAA;AAEJ,IAAA,OAAO,MAAA,CAAO,IAAA,CAAKY,QAAAA,CAAS,IAAA,EAAM,IAAI,CAAA;AAAA,EACxC;AAAA,EAEO,UAAU,MAAA,EAAyB;AACxC,IAAA,OAAOC,WAAwC,WAAA,EAAa;AAAA,MAC1D,iBAAiB,MAAA,CAAO;AAAA,KACzB,CAAA;AAAA,EACH;AACF,CAAA;AAEA,IAAOS,oBAAAA,GAAQ,IAAI,oBAAA,EAAqB;AClIjC,IAAM,uBAAN,MAA2B;AAAA,EAChC,MAAa,MAAM,MAAA,EAAa;AAC9B,IAAA,MAAM;AAAA,MACJ,SAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,QAAA,GAAW,IAAInB,QAAAA,CAAS,EAAE,IAAA,EAAM,eAAA,EAAiB,QAAA,EAAU,UAAA,EAAY,OAAA,EAASC,OAAAA,CAAQ,KAAA,EAAO,CAAA;AAErG,IAAA,IAAI,iBAAA,GAAoB,SAAA;AACxB,IAAA,IAAI,2BAAA,GAA8B,UAAA;AAClC,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IACzC;AACA,IAAA,IAAI,CAAC,2BAAA,EAA6B;AAChC,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AAQA,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,GAAG,MAAA;AAAA,MACH,WAAWJ,GAAAA,CAAI,MAAA,CAAO,SAAA,IAAa,CAAC,EAAE,GAAA,CAAI,EAAA,IAAM,SAAA,CAAU,QAAQ,EAAE,KAAA,CAAM,EAAA,IAAM,mBAAmB,QAAQ,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,MACtH,SAAA,EAAW,kBAAA;AAAA,MACX,aAAa,kBAAA,CAAmB,SAAA;AAAA,MAChC,QAAA,EAAU,4BAAA;AAAA,MACV,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,WAAA,GAAc,MAAM,aAAA,CAAa,KAAA,CAAM,WAAW,CAAA;AACxD,IAAA,QAAA,CAAS,IAAI,oBAAoB,CAAA;AAEjC,IAAA,MAAM,qBAAA,GAAwB,GAAA;AAC9B,IAAA,WAAA,CAAY,IAAA,CAAK,YAAA,GAAeW,mBAAAA,CAAoBX,GAAAA,CAAI,YAAY,IAAA,EAAM,YAAA,IAAgB,CAAC,CAAA,CAAE,MAAM,CAAA,GAAI,qBAAqB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AACzI,IAAA,WAAA,CAAY,KAAK,SAAA,GAAYW,mBAAAA,CAAoBX,GAAAA,CAAI,WAAA,CAAY,MAAM,SAAA,IAAa,CAAC,CAAA,CAAE,KAAA,CAAM,IAAI,qBAAqB,CAAA,CAAE,QAAQ,SAAA,CAAU,WAAA,CAAY,QAAQ,CAAC,CAAA;AAE/J,IAAA,MAAM,kBAAA,GAAqB,YAAY,IAAA,CAAK,YAAA;AAE5C,IAAA,MAAM,qBAAA,GAAwBA,GAAAA,CAAI,kBAAA,IAAsB,CAAC,EAAE,GAAA,CAAIe,QAAAA,CAAS,MAAA,EAAQ,kBAAA,CAAmB,MAAM,CAAA,IAAK,CAAC,CAAA,CAAE,OAAA,CAAQ,mBAAmB,QAAQ,CAAA;AAEpJ,IAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,MAAA,OAAO,WAAA;AAAA,IACT;AAKA,IAAA,MAAM,gBAAA,GAAmBf,GAAAA,CAAI,qBAAA,IAAyB,CAAC,EACpD,GAAA,CAAIA,GAAAA,CAAI,qBAAA,IAAyB,CAAC,CAAA,CAAE,IAAA,CAAKA,GAAAA,CAAI,MAAA,CAAO,SAAS,CAAA,CAAE,GAAA,CAAI,EAAA,IAAM,SAAA,CAAU,QAAQ,CAAA,CAAE,OAAA,CAAQ,SAAA,CAAU,QAAQ,CAAC,CAAC,CAAA,CACzH,KAAA,CAAM,GAAK,CAAA,CACX,OAAA,CAAQ,CAAA,EAAGA,IAAI,OAAO,CAAA;AAMzB,IAAA,IAAIA,GAAAA,CAAI,gBAAgB,CAAA,CAAE,EAAA,CAAG,GAAK,CAAA,EAAG;AACnC,MAAA,OAAO,EAAE,MAAA,EAAQ,CAAA,4BAAA,EAA+B,qBAAqB,CAAA,CAAA,EAAG;AAAA,IAC1E;AAMA,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,cAAA,GAAiB,MAAM,gBAAA,CAAgB,KAAA,CAAM;AAAA,MACjD,GAAG,MAAA;AAAA,MACH,OAAA,EAAS,kBAAA;AAAA,MACT,kBAAkB,kBAAA,CAAmB,OAAA;AAAA,MACrC,QAAA,EAAU,cAAA;AAAA,MACV,OAAA,EAAS,IAAA;AAAA,MACT,SAAA,EAAW,2BAAA;AAAA,MACX,OAAA,EAAS;AAAA,QACP;AAAA,UACE,SAAA,EAAW,aAAA;AAAA;AAAA,UAEX,KAAK,CAAC;AAAA;AAAA;AACR;AACF,KACD,CAAA;AACD,IAAA,QAAA,CAAS,IAAI,uBAAuB,CAAA;AAEpC,IAAA,IAAI,YAAA,GAAeA,IAAI,CAAC,CAAA;AACxB,IAAA,IAAI,qBAAA,GAAwBA,IAAI,cAAA,CAAe,IAAA,EAAM,wBAAwB,CAAC,CAAA,CAAE,MAAM,kBAAkB,CAAA;AACxG,IAAA,IAAIA,GAAAA,CAAI,qBAAqB,CAAA,CAAE,EAAA,CAAG,CAAC,CAAA,EAAG;AACpC,MAAA,qBAAA,GAAwBA,IAAI,CAAC,CAAA;AAAA,IAC/B;AACA,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,GAAG,cAAA,CAAe,IAAA;AAAA,MAClB,sBAAsBW,mBAAAA,CAAoBX,GAAAA,CAAI,qBAAqB,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC;AAAA,KAClF;AACA,IAAA,KAAA,MAAW,MAAA,IAAU,YAAY,IAAA,EAAM;AACrC,MAAA,IAAIE,YAAAA,CAAiB,QAAA,CAAS,MAAM,CAAA,EAAG;AACrC,QAAA;AAAA,MACF;AACA,MAAA,IAAA,CAAK,MAAM,CAAA,GAAI,WAAA,CAAY,IAAA,CAAK,MAAM,CAAA;AAAA,IACxC;AACA,IAAA,KAAA,MAAW,UAAU,IAAA,EAAM;AACzB,MAAA,IAAI,WAAA,CAAoB,QAAA,CAAS,MAAM,CAAA,EAAG;AACxC,QAAA;AAAA,MACF;AACA,MAAA,YAAA,GAAeF,GAAAA,CAAI,gBAAgB,CAAC,CAAA,CAAE,KAAK,IAAA,CAAK,MAAM,KAAK,CAAC,CAAA;AAAA,IAC9D;AAEA,IAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,SAAA,EAAW,KAAA,GAAQ,CAAC,CAAA;AACvD,IAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,SAAA,EAAW,KAAA,GAAQ,CAAC,CAAA;AAExD,IAAA,QAAA,CAAS,IAAI,4BAA4B,CAAA;AAEzC,IAAA,OAAO;AAAA,MACL,GAAG,cAAA;AAAA,MACH,UAAA,EAAY,IAAA;AAAA,MACZ,aAAA,EAAe,+BAAA;AAAA,MACf,WAAA,EAAa,kBAAA;AAAA,MACb,eAAA,EAAiB,gBAAgB,KAAA,EAAO,SAAA;AAAA,MACxC,oBAAA,EAAsB;AAAA,QACpB,WAAW,cAAA,EAAgB,QAAA;AAAA,QAC3B,aAAa,cAAA,EAAgB,UAAA;AAAA,QAC7B,SAAS,cAAA,EAAgB,MAAA;AAAA,QACzB,eAAe,cAAA,EAAgB,YAAA;AAAA,QAC/B,aAAA,EAAe,cAAA,EAAgB,WAAA,EAAa,QAAA,EAAS;AAAA,QACrD,SAAS,cAAA,EAAgB,MAAA;AAAA,QACzB,IAAI,cAAA,EAAgB,EAAA;AAAA,QACpB,UAAA,EAAY,eAAA,EAAiB,SAAA,EAAW,QAAA;AAAS,OACnD;AAAA,MACA,IAAA;AAAA,MACA,cAAcW,mBAAAA,CAAoBX,GAAAA,CAAI,YAAY,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,MAC/D,YAAA,EAAc,WAAA,CAAY,YAAA,GAAe,cAAA,CAAe,YAAA;AAAA,MACxD,cAAc,WAAA,CAAY,YAAA;AAAA,MAC1B,UAAA,EAAY;AAAA,QACV,GAAG,cAAA,CAAe,UAAA;AAAA,QAClB,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,WAAA,EAAa,kBAAA;AAAA,QACb,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,cAAA,EAAgB,YAAY,UAAA,EAAY,cAAA;AAAA,QACxC,mBAAA,EAAqB,YAAY,UAAA,EAAY;AAAA,OAC/C;AAAA,MACA,cAAA;AAAA,MACA,eAAA;AAAA,MACA,iBAAA,EAAmB;AAAA,KACrB;AAAA,EACF;AAAA,EAEA,MAAa,mBAAA,CAAoB,MAAA,EAAa,SAAA,EAAgB;AAG5D,IAAA,OAAO,gBAAA,CAAgB,mBAAA,CAAoB,MAAA,EAAQ,SAAS,CAAA;AAAA,EAC9D;AAAA,EAEA,MAAa,KAAK,MAAA,EAAa;AAC7B,IAAA,OAAO,gBAAA,CAAgB,KAAK,MAAM,CAAA;AAAA,EACpC;AAAA,EAEO,UAAU,MAAA,EAAyB;AACxC,IAAA,OAAOa,WAAwC,WAAA,EAAa;AAAA,MAC1D,iBAAiB,MAAA,CAAO;AAAA,KACzB,CAAA;AAAA,EACH;AACF,CAAA;AAEA,IAAOU,sBAAAA,GAAQ,IAAI,oBAAA,EAAqB;;;AC/KjC,IAAM,YAAA,GAAuC;AAAA,EAClD,UAAA,EAAY,UAAA;AAAA,EACZ,UAAA,EAAY,UAAA;AAAA,EACZ,WAAA,EAAa,KAAA;AAAA,EACb,MAAA,EAAQ;AACV,CAAA;AAEO,IAAM,cAAA,GAAoE;AAAA,EAC/E,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,4CAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,UAAA,EAAY;AAAA,IACV,IAAA,EAAM,4CAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,4CAAA;AAAA,IACN,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,4CAAA;AAAA,IACN,MAAA,EAAQ;AAAA;AAEZ,CAAA;ACjBO,IAAM,gBAAN,MAAoB;AAAA,EACzB,MAAa,MAAM,MAAA,EAAa;AAC9B,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,aAAa,CAAA,cAAA,EAAiB,SAAA,EAAW,SAAS,CAAA,EAAA,EAAK,SAAS,SAAS,CAAA,CAAA;AAC/E,IAAA,MAAM,QAAA,GAAW,IAAIpB,QAAAA,CAAS,EAAE,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,YAAA,EAAc,OAAA,EAASC,OAAAA,CAAQ,KAAA,EAAO,CAAA;AAElG,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,SAAA,KAAc,OAAA,CAAQ,SAAA;AAE/C,IAAA,IAAI,QAAA,GAAW,aAAA;AACf,IAAA,MAAM,WAAA,GAAmB;AAAA,MACvB,OAAA,EAAS,CAAA;AAAA,MACT,YAAA,EAAc,QAAA;AAAA,MACd,UAAA,EAAY,SAAA;AAAA,MACZ,mBAAA,EAAqB,SAAA;AAAA,MACrB,SAAA,EAAW,QAAA;AAAA,MACX,SAAA,EAAW,YAAA,CAAa,SAAA,CAAU,SAAS,CAAA;AAAA,MAC3C,SAAA,EAAW,YAAA,CAAa,OAAA,CAAQ,SAAS,CAAA;AAAA,MACzC,UAAU,SAAA,CAAU,eAAA;AAAA,MACpB,WAAW,OAAA,CAAQ,eAAA;AAAA,MACnB,UAAA,EAAY,SAAA;AAAA,MACZ,WAAA,EAAa,EAAA;AAAA;AAAA,MACb,cAAA,EAAgB,GAAA;AAAA;AAAA,MAChB,QAAA,EAAU,iBAAA;AAAA,MACV,cAAA,EAAgB;AAAA,KAClB;AAEA,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,QAAA,GAAW,mBAAA;AAAA,IACb;AAEA,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,QAAA,GAAW,UAAU,QAAQ,CAAA,CAAA;AAAA,IAC/B;AAEA,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,WAAgB,MAAMS,UAAAA,CAAW,CAAA,GAAA,EAAM,QAAQ,IAAI,WAAW,CAAA;AACpE,IAAA,QAAA,CAAS,GAAA,CAAI,4BAA4B,QAAQ,CAAA;AAEjD,IAAA,IAAI,CAAC,UAAU,OAAA,EAAS;AACtB,MAAA,IAAI,YAAA,GAAe,UAAU,OAAA,IAAW,qBAAA;AAExC,MAAA,IAAI,YAAA,CAAa,QAAA,CAAS,oDAAoD,CAAA,EAAG;AAC/E,QAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,KAAA,CAAM,WAAW,CAAA;AAC5C,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAM,MAAA,GAAS,MAAM,CAAC,CAAA;AACtB,UAAA,MAAM,YAAYb,GAAAA,CAAI,MAAM,EAAE,GAAA,CAAI,EAAA,IAAM,UAAU,QAAQ,CAAA;AAC1D,UAAA,YAAA,GAAe,CAAA,4BAAA,EAA+B,aAAa,SAAA,EAAW,SAAA,CAAU,UAAU,IAAI,CAAC,CAAA,CAAA,EAAI,SAAA,CAAU,MAAM,CAAA,CAAA;AAAA,QACrH;AAAA,MACF;AACA,MAAA,IAAI,YAAA,CAAa,QAAA,CAAS,qDAAqD,CAAA,EAAG;AAChF,QAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,KAAA,CAAM,WAAW,CAAA;AAC5C,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAM,MAAA,GAAS,MAAM,CAAC,CAAA;AACtB,UAAA,MAAM,YAAYA,GAAAA,CAAI,MAAM,EAAE,GAAA,CAAI,EAAA,IAAM,QAAQ,QAAQ,CAAA;AACxD,UAAA,YAAA,GAAe,CAAA,gCAAA,EAAmC,aAAa,SAAA,EAAW,OAAA,CAAQ,UAAU,IAAI,CAAC,CAAA,CAAA,EAAI,OAAA,CAAQ,MAAM,CAAA,gBAAA,CAAA;AAAA,QACrH;AAAA,MACF;AACA,MAAA,MAAM,IAAI,MAAM,YAAY,CAAA;AAAA,IAC9B;AAEA,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,KAAA,CAAMD,QAAQ,MAAA,EAAQ;AAAA,MAChD,GAAG,MAAA;AAAA,MACH,GAAG,WAAA;AAAA,MACH,aAAA,EAAe,QAAA;AAAA,MACf,mBAAA,EAAqB,MAAA,GAAS,cAAA,CAAe,SAAA,CAAU,SAAS,EAAE,IAAA,GAAO,cAAA,CAAe,SAAA,CAAU,SAAS,CAAA,CAAE;AAAA,KAC9G,CAAA;AACD,IAAA,QAAA,CAAS,IAAI,oBAAoB,CAAA;AAEjC,IAAA,MAAA,CAAO,iBAAA,GAAoB,MAAA;AAE3B,IAAA,QAAA,CAAS,SAAS,qBAAqB,CAAA;AAEvC,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,mBAAA,CAAoB,MAAA,EAAa,SAAA,EAAgB;AAC5D,IAAA,MAAM;AAAA,MACJ,SAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,EAAA,GAAK,IAAIW,GAAAA,CAAIN,OAAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AAEf,IAAA,IAAI,CAAC,SAAA,CAAU,SAAA,EAAW,SAAA,EAAW;AACnC,MAAA,OAAO,SAAA;AAAA,IACT;AAEA,IAAA,MAAM,SAAc,EAAE,IAAA,EAAM,EAAC,EAAG,GAAG,SAAA,EAAU;AAE7C,IAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,mBAAA,CAAoB;AAAA,MAC3C,GAAA,EAAK,KAAA;AAAA;AAAA,MAEL,GAAG,SAAA,CAAU,SAAA;AAAA,MACb,SAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,MAAA,CAAO,IAAA,CAAK,iBAAiB,GAAA,CAAI,oBAAA;AACjC,IAAA,MAAA,CAAO,oBAAoB,GAAA,CAAI,iBAAA;AAC/B,IAAA,MAAA,CAAO,yBAAyB,GAAA,CAAI,iBAAA;AACpC,IAAA,MAAA,CAAO,uBAAuB,GAAA,CAAI,oBAAA;AAElC,IAAA,IAAI,SAAA,CAAU,cAAc,KAAA,EAAO;AACjC,MAAA,GAAA,CAAI,qCAAqC,WAAA,EAAa,kBAAA,EAAoB,MAAA,CAAO,SAAA,CAAU,UAAU,QAAQ,CAAA;AAC7G,MAAA,MAAA,CAAO,SAAA,CAAU,SAAA,CAAU,QAAA,GAAW,GAAA,CAAI,sBAAA;AAC1C,MAAA,GAAA,CAAI,qCAAqC,WAAA,EAAa,sBAAA,EAAwB,MAAA,CAAO,SAAA,CAAU,UAAU,QAAQ,CAAA;AAAA,IACnH;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAa,KAAK,MAAA,EAAa;AAC7B,IAAA,MAAM;AAAA,MACJ,MAAA;AAAA,MACA;AAAA,KACF,GAAI,MAAA;AAEJ,IAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,MAAA,CAAO,eAAA,CAAgB;AAAA,MACrD,IAAI,SAAA,CAAU,MAAA;AAAA,MACd,MAAM,SAAA,CAAU,QAAA;AAAA,MAChB,OAAO,SAAA,CAAU,KAAA;AAAA,MACjB,UAAU,SAAA,CAAU;AAAA,KACrB,CAAA;AAGD,IAAA,MAAM,WAAW,IAAA,EAAK;AAEtB,IAAA,OAAO,UAAA,CAAW,IAAA;AAAA,EACpB;AAAA,EAEO,UAAU,MAAA,EAAyB;AACxC,IAAA,OAAOS,WAAwC,WAAA,EAAa;AAAA,MAC1D,iBAAiB,MAAA,CAAO;AAAA,KACzB,CAAA;AAAA,EACH;AACF,CAAA;AAEA,IAAO,cAAA,GAAQ,IAAI,aAAA,EAAc;ACvJ1B,IAAM,UAAA,GAAmC;AAAA,EAC9C,CAACd,OAAAA,CAAQ,QAAQ,GAAG,gBAAA;AAAA,EACpB,CAACA,OAAAA,CAAQ,KAAK,GAAG,aAAA;AAAA,EACjB,CAACA,OAAAA,CAAQ,IAAI,GAAG,YAAA;AAAA,EAChB,CAACA,OAAAA,CAAQ,QAAQ,GAAG,gBAAA;AAAA,EACpB,CAACA,OAAAA,CAAQ,gBAAgB,GAAG,mBAAA;AAAA,EAC5B,CAACA,OAAAA,CAAQ,gBAAgB,GAAG,qBAAA;AAAA,EAC5B,CAACA,OAAAA,CAAQ,aAAa,GAAGuB,oBAAAA;AAAA,EACzB,CAACvB,OAAAA,CAAQ,aAAa,GAAGwB,sBAAAA;AAAA,EACzB,CAACxB,OAAAA,CAAQ,MAAM,GAAG;AACpB;ACwBA,IAAM,cAAA,GAAiB,CACrB,WAAA,KAkB+C;AAC/C,EAAA,OAAOE,WAAAA,CAAY,iBAAiB,WAAW,CAAA;AACjD,CAAA;AAMO,IAAM,YAAN,MAAgB;AAAA,EACrB,aAAoB,YAAY,MAAA,EAAkG;AAChI,IAAA,MAAM,UAAwE,EAAC;AAE/E,IAAA,IAAI,EAAE,cAAA,GAAiB,GAAA,EAAK,gBAAA,EAAiB,GAAI,MAAA;AACjD,IAAA,IAAID,GAAAA,CAAI,cAAc,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,EAAG;AAC9B,MAAA,cAAA,GAAiB,GAAA;AAAA,IACnB;AAEA,IAAA,IACE,CAAC,MAAA,CAAO,SAAA,IACL,CAAC,MAAA,CAAO,SAAA,CAAU,eAAA,IAClB,CAAC,MAAA,CAAO,OAAA,IACR,CAAC,MAAA,CAAO,OAAA,CAAQ,eAAA,IAChB,CAAC,MAAA,CAAO,QAAA,IACR,CAAC,MAAA,CAAO,SAAA,IACR,CAAC,MAAA,CAAO,SAAA,IACRA,GAAAA,CAAI,MAAA,CAAO,SAAS,CAAA,CAAE,GAAA,CAAI,cAAc,CAAA,EAC3C;AACA,MAAA,MAAM,IAAI,MAAM,oBAAoB,CAAA;AAAA,IACtC;AAEA,IAAA,MAAM,iBAAA,GAAoB,CAAC,OAAA,KAAqB;AAC9C,MAAA,MAAM,OAAA,GAAe;AAAA,QACnB,KAAK,MAAA,CAAO,GAAA;AAAA,QACZ,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,QAAA,EAAU,OAAO,QAAA,IAAY,EAAA;AAAA,QAC7B,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,SAAS,MAAA,CAAO,OAAA;AAAA,QAChB,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,mBAAmB,MAAA,CAAO,iBAAA;AAAA,QAC1B,WAAW,MAAA,CAAO,SAAA;AAAA,QAClB,YAAY,MAAA,CAAO;AAAA,OACrB;AAEA,MAAA,IAAK;AAAA,QACHD,OAAAA,CAAQ,QAAA;AAAA,QACRA,OAAAA,CAAQ,aAAA;AAAA,QACRA,OAAAA,CAAQ,aAAA;AAAA,QACRA,OAAAA,CAAQ,gBAAA;AAAA,QACRA,OAAAA,CAAQ;AAAA,OACV,CAAgB,QAAA,CAAS,OAAO,CAAA,EAAG;AACjC,QAAA,OAAA,CAAQ,iBAAA,GAAoB,OAAO,iBAAA,GAAoB,GAAA;AACvD,QAAA,OAAA,CAAQ,WAAA,GAAc,OAAO,SAAA,CAAU,OAAA;AACvC,QAAA,OAAA,CAAQ,gBAAA,GAAmB,OAAO,OAAA,CAAQ,OAAA;AAC1C,QAAA,OAAA,CAAQ,UAAA,GAAa,cAAA;AACrB,QAAA,OAAA,CAAQ,OAAA,GAAU,MAAA,CAAO,cAAA,EAAgB,OAAA,IAAW,MAAA,CAAO,OAAA;AAC3D,QAAA,OAAA,CAAQ,QAAA,GAAW,OAAO,cAAA,EAAgB,QAAA;AAC1C,QAAA,OAAA,CAAQ,OAAA,GAAU,OAAO,cAAA,EAAgB,OAAA;AAAA,MAC3C;AACA,MAAA,IAAK;AAAA,QACHA,OAAAA,CAAQ,KAAA;AAAA,QACRA,OAAAA,CAAQ,IAAA;AAAA,QACRA,OAAAA,CAAQ,aAAA;AAAA,QACRA,OAAAA,CAAQ;AAAA,OACV,CAAgB,QAAA,CAAS,OAAO,CAAA,EAAG;AACjC,QAAA,OAAA,CAAQ,WAAA,GAAc,OAAO,SAAA,CAAU,SAAA;AACvC,QAAA,OAAA,CAAQ,gBAAA,GAAmB,OAAO,OAAA,CAAQ,SAAA;AAAA,MAC5C;AACA,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,CAAA,KAAA,KAAS,KAAA,CAAM,eAAA,CAAgB,WAAA,EAAY,KAAM,MAAA,CAAO,SAAA,CAAU,eAAA,CAAgB,WAAA,EAAa,CAAA;AAC7H,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,CAAA,KAAA,KAAS,KAAA,CAAM,eAAA,CAAgB,WAAA,EAAY,KAAM,MAAA,CAAO,OAAA,CAAQ,eAAA,CAAgB,WAAA,EAAa,CAAA;AAEzH,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,OAAA,EAAS;AAC1B,MAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,IAC5C;AAEA,IAAA,MAAM,aAAa,CAAC,MAAA,EAAQ,YAAO,CAAA,CAAE,QAAA,CAAS,UAAU,MAAM,CAAA;AAC9D,IAAA,MAAM,WAAW,CAAC,MAAA,EAAQ,YAAO,CAAA,CAAE,QAAA,CAAS,QAAQ,MAAM,CAAA;AAE1D,IAAA,MAAM,gBAAqB,EAAC;AAC5B,IAAA,MAAM,gBAAA,GAAmB,CAAC,QAAA,KAAsB;AAC9C,MAAA,MAAM,aAAA,GAAgB,cAAA,CAAe,QAAA,EAAU,gBAAgB,CAAA;AAC/D,MAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,QAAA;AAAA,MACF;AACA,MAAA,MAAM,WAAA,GAAc,kBAAkB,QAAQ,CAAA;AAC9C,MAAA,aAAA,CAAc,IAAA,CAAK;AAAA,QACjB,OAAA,EAAS,QAAA;AAAA,QACT,OAAO,MAAM;AACX,UAAA,OAAO,UAAA,CAAW,QAAQ,CAAA,CAAE,KAAA,CAAM,WAAW,CAAA;AAAA,QAC/C;AAAA,OACD,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,KAAA,MAAW,WAAA,IAAe,MAAA,CAAO,MAAA,CAAOA,OAAO,CAAA,EAAG;AAChD,MAAA,IACE,SAAA,CAAU,SAAS,QAAA,CAAS,WAAW,KACpC,OAAA,CAAQ,QAAA,CAAS,QAAA,CAAS,WAAW,CAAA,EACxC;AACA,QAAA,gBAAA,CAAiB,WAAW,CAAA;AAAA,MAC9B;AAAA,IACF;AAEA,IAAA,IACE,SAAA,CAAU,QAAA,CAAS,QAAA,CAASA,OAAAA,CAAQ,KAAK,CAAA,IACtC,OAAA,CAAQ,QAAA,CAAS,QAAA,CAASA,OAAAA,CAAQ,QAAQ,CAAA,IAC1C,SAAA,CAAU,cAAc,UAAA,EAC3B;AACA,MAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,QAAA,IAAI,OAAA,CAAQ,cAAc,UAAA,EAAY;AACpC,UAAA,gBAAA,CAAiBA,QAAQ,aAAa,CAAA;AAAA,QACxC;AAAA,MACF,CAAA,MAAO;AACL,QAAA,gBAAA,CAAiBA,QAAQ,aAAa,CAAA;AAAA,MACxC;AAAA,IACF;AAEA,IAAA,IACE,SAAA,CAAU,QAAA,CAAS,QAAA,CAASA,OAAAA,CAAQ,QAAQ,CAAA,IACzC,OAAA,CAAQ,QAAA,CAAS,QAAA,CAASA,OAAAA,CAAQ,KAAK,CAAA,IACvC,OAAA,CAAQ,cAAc,UAAA,EACzB;AACA,MAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,QAAA,IAAI,SAAA,CAAU,cAAc,UAAA,EAAY;AACtC,UAAA,gBAAA,CAAiBA,QAAQ,aAAa,CAAA;AAAA,QACxC;AAAA,MACF,CAAA,MAAO;AACL,QAAA,gBAAA,CAAiBA,QAAQ,aAAa,CAAA;AAAA,MACxC;AAAA,IACF;AAEA,IAAA,IACE,SAAA,CAAU,QAAA,CAAS,QAAA,CAASA,OAAAA,CAAQ,QAAQ,CAAA,IACzC,OAAA,CAAQ,QAAA,CAAS,QAAA,CAASA,OAAAA,CAAQ,QAAQ,CAAA,EAC7C;AACA,MAAA,gBAAA,CAAiBA,QAAQ,gBAAgB,CAAA;AAAA,IAC3C;AAEA,IAAA,IACE,SAAA,CAAU,QAAA,CAAS,QAAA,CAASA,OAAAA,CAAQ,QAAQ,CAAA,IACzC,OAAA,CAAQ,QAAA,CAAS,QAAA,CAASA,OAAAA,CAAQ,QAAQ,CAAA,EAC7C;AACA,MAAA,gBAAA,CAAiBA,QAAQ,gBAAgB,CAAA;AAAA,IAC3C;AAEA,IAAA,IAAI,OAAO,aAAA,EAAe;AACxB,MAAA,MAAM,YAAA,GAAe,cAAc,IAAA,CAAK,CAAC,YAAiB,OAAA,CAAQ,OAAA,KAAY,OAAO,aAAa,CAAA;AAClG,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,IAAI;AACF,UAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,KAAA,EAAM;AAC1C,UAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,YACX,aAAa,YAAA,CAAa,OAAA;AAAA,YAC1B,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,QACH,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,IAAA,GAAO,iBAAiB,KAAA,EAAO,EAAE,SAAS,YAAA,CAAa,OAAA,EAAS,WAAW,CAAA;AACjF,UAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,QACnB;AAAA,MACF;AACA,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,MAAM,WAA4B,EAAC;AACnC,IAAA,KAAA,MAAW,gBAAgB,aAAA,EAAe;AACxC,MAAA,MAAM,WAAW,YAAY;AAC3B,QAAA,IAAI;AACF,UAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,KAAA,EAAM;AAC1C,UAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,YACX,aAAa,YAAA,CAAa,OAAA;AAAA,YAC1B,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,QACH,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,GAAA,CAAI,qBAAA,EAAuB,YAAA,CAAa,OAAA,EAAS,KAAK,CAAA;AAC9D,UAAA,MAAM,IAAA,GAAO,iBAAiB,KAAA,EAAO,EAAE,SAAS,YAAA,CAAa,OAAA,EAAS,WAAW,CAAA;AACjF,UAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,QACnB;AAAA,MACF,CAAA,GAAG;AACH,MAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,IACvB;AACA,IAAA,MAAM,OAAA,CAAQ,WAAW,QAAQ,CAAA;AACjC,IAAA,OAAO,OAAA;AAAA,EACT;AAAA,EAEA,aAAoB,IAAA,CAClB,WAAA,EACA,MAAA,EAaiB;AACjB,IAAA,MAAM,EAAA,GAAK,IAAIW,GAAAA,CAAIN,OAAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AAEf,IAAA,MAAM,OAAA,GAAU,WAAW,WAAW,CAAA;AACtC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,WAAW,CAAA,CAAE,CAAA;AAAA,IACxD;AAEA,IAAA,IAAI,CAAC,QAAQ,IAAA,EAAM;AACjB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,WAAW,CAAA,6BAAA,CAA+B,CAAA;AAAA,IACvE;AAEA,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAQ,eAAA,EAAgB,GAAI,MAAA;AAE3C,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAAA,IAC1C;AAEA,IAAA,IAAI,MAAM,UAAA,EAAY;AACpB,MAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,QAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,MAChD;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAkB;AAAA,MACtB;AAAA,KACF;AAEA,IAAA,MAAM,EAAE,aAAA,EAAe,iBAAA,EAAmB,0BAAA,KAA+B,aAAA,CAAc;AAAA,MACrF,SAAA,EAAW,KAAA;AAAA,MACX,WAAA,EAAa,EAAE,gBAAA,EAAkB,WAAA;AAAY,KAC9C,CAAA;AACD,IAAA,MAAM,SAAA,GAAY,MAAM,UAAA,CAAW,SAAA;AACnC,IAAA,MAAM,OAAA,GAAU,MAAM,UAAA,CAAW,OAAA;AACjC,IAAA,MAAM,cAAA,GAAiB,MAAM,KAAA,EAAO,cAAA;AACpC,IAAA,MAAM,YAAY,KAAA,CAAM,SAAA;AAExB,IAAA,IAAI,UAAA,GAAa,MAAM,UAAA,EAAY,SAAA;AACnC,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,UAAA,GAAa,MAAM,KAAA,EAAO,WAAA;AAAA,IAC5B;AAEA,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,UAAA,CAAW,SAAA,GAAY,SAAA;AACvB,MAAA,UAAA,CAAW,SAAA,GAAY,SAAA;AACvB,MAAA,UAAA,CAAW,cAAA,GAAiB,cAAA;AAC5B,MAAA,UAAA,CAAW,SAAA,GAAY,UAAA;AAAA,IACzB,CAAA,MAAO;AACL,MAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,QAAA,UAAA,CAAW,GAAG,CAAA,GAAI,SAAA,CAAU,GAAG,CAAA;AAAA,MACjC;AAAA,IACF;AAEA,IAAA,GAAA,CAAI,gBAAA,EAAkB,UAAA,EAAY,gBAAA,EAAkB,UAAU,CAAA;AAE9D,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAE5C,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAkB;AAAA,QACtB,OAAA,EAAS,eAAe,WAAW,CAAA;AAAA,QACnC,OAAA,EAAS,MAAM,UAAA,EAAY,QAAA;AAAA,QAC3B,QAAQ,aAAA,GAAgB,KAAA,CAAM,MAAM,iBAAA,GAAoBJ,GAAAA,CAAI,cAAc,CAAC,CAAA,CAAE,IAAI,EAAA,KAAO,SAAA,EAAW,YAAY,CAAA,CAAE,CAAA,CAAE,QAAQ,SAAA,EAAW,QAAA,IAAY,GAAG,CAAC,CAAA;AAAA,QACtJ,YAAY,KAAA,CAAM,YAAA;AAAA,QAClB,eAAA,EAAiB,iBAAA,GAAoB,KAAA,CAAM,KAAA,EAAO,cAAA,GAAiB,EAAA;AAAA,QACnE,eAAA,EAAiB,MAAM,UAAA,EAAY,SAAA;AAAA,QACnC,YAAY,SAAA,CAAU,UAAA;AAAA,QACtB,QAAQ,UAAA,CAAW,IAAA,CAAK,UAAU,MAAM,CAAA,GAAI,SAAS,SAAA,CAAU,MAAA;AAAA,QAC/D,UAAU,OAAA,CAAQ,UAAA;AAAA,QAClB,WAAW,UAAA,CAAW,IAAA,CAAK,QAAQ,MAAM,CAAA,GAAI,SAAS,OAAA,CAAQ,MAAA;AAAA,QAC9D,OAAA,EAAS;AAAA,OACX;AAEA,MAAA,IAAI,eAAA,EAAiB;AACnB,QAAA,IAAK,CAACD,OAAAA,CAAQ,aAAa,CAAA,CAAgB,QAAA,CAAS,WAAW,CAAA,EAAG;AAChE,UAAA,UAAA,CAAW,iBAAA,GAAoB;AAAA,YAC7B,GAAG,eAAA;AAAA,YACH,GAAG,KAAA,CAAM;AAAA,WACX;AAAA,QACF;AACA,QAAA,IAAK,CAACA,QAAQ,gBAAA,EAAkBA,OAAAA,CAAQ,gBAAgB,CAAA,CAAgB,QAAA,CAAS,WAAW,CAAA,EAAG;AAC7F,UAAA,UAAA,CAAW,gBAAA,GAAmB;AAAA,YAC5B,GAAG,eAAA;AAAA,YACH,GAAG,KAAA,CAAM;AAAA,WACX;AAAA,QACF;AAAA,MACF;AAEA,MAAA,UAAA,CAAW,OAAA,GAAU,MAAA;AAErB,MAAA,IAAI,eAAA,GAAkB,MAAA;AACtB,MAAA,IAAI,0BAAA,EAA4B;AAC9B,QAAA,eAAA,GAAkB,KAAA,CAAM,YAAY,cAAA,IAAkB,MAAA;AAAA,MACxD;AACA,MAAA,IAAI,CAAC,WAAW,eAAA,EAAiB;AAC/B,QAAA,UAAA,CAAW,eAAA,GAAkB,eAAA;AAAA,MAC/B;AAEA,MAAA,IAAI,WAAA,KAAgBA,QAAQ,MAAA,EAAQ;AAClC,QAAA,MAAM,QAAA,GAAW,OAAO,MAAA,EAAQ,GAAA,GAAM,CAAC,KAAA,KAAe,KAAA,CAAM,OAAO,CAAA,IAAK,EAAC;AACzE,QAAA,UAAA,CAAW,QAAA,GAAW,QAAA;AAAA,MACxB;AAEA,MAAA,GAAA,CAAI,gBAAA,EAAkB,UAAA,EAAY,gBAAA,EAAkB,UAAU,CAAA;AAE9D,MAAA,cAAA,CAAe,UAAU,CAAA;AAAA,IAC3B,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,GAAA,CAAI,wBAAA,EAA0B,6BAAA,EAA+B,KAAK,CAAA;AAAA,IAC5E;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,aAAoB,SAAA,CAClB,WAAA,EACA,MAAA,EAIiE;AACjE,IAAA,MAAM,EAAA,GAAK,IAAIW,GAAAA,CAAIN,OAAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AAEf,IAAA,MAAM,OAAA,GAAU,WAAW,WAAW,CAAA;AACtC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,WAAW,CAAA,CAAE,CAAA;AAAA,IACxD;AAEA,IAAA,IAAI,CAAC,QAAQ,SAAA,EAAW;AACtB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,WAAW,CAAA,kCAAA,CAAoC,CAAA;AAAA,IAC5E;AAEA,IAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,MAAA;AAExB,IAAA,MAAM,kBAAmC,EAAC;AAE1C,IAAA,MAAM,EAAE,iBAAA,EAAmB,0BAAA,EAA2B,GAAI,aAAA,CAAc;AAAA,MACtE,SAAA,EAAW,KAAA;AAAA,MACX,WAAA,EAAa,EAAE,gBAAA,EAAkB,WAAA;AAAY,KAC9C,CAAA;AAED,IAAA,eAAA,CAAgB,cAAA,GAAiB,iBAAA,GAAoB,KAAA,CAAM,KAAA,CAAM,cAAA,GAAiB,EAAA;AAClF,IAAA,eAAA,CAAgB,IAAA,GAAO,IAAA;AAEvB,IAAA,IAAI,CAAC,iBAAA,EAAmB;AACtB,MAAA,IAAI,eAAA,GAAkB,IAAA;AACtB,MAAA,IAAI,0BAAA,EAA4B;AAC9B,QAAA,eAAA,GAAkB,KAAA,EAAO,YAAY,cAAA,IAAkB,IAAA;AAAA,MACzD;AACA,MAAA,eAAA,CAAgB,cAAA,GAAiB,eAAA;AAAA,IACnC;AAEA,IAAA,GAAA,CAAI,WAAA,EAAa,aAAA,EAAe,qBAAA,EAAuB,eAAe,CAAA;AAEtE,IAAA,MAAM,MAAA,GAAiE,EAAE,MAAA,EAAQ,iBAAA,CAAkB,OAAA,EAAQ;AAC3G,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,SAAA,CAAU,eAAe,CAAA;AAExD,IAAA,IAAK,CAACL,QAAQ,IAAA,EAAMA,OAAAA,CAAQ,MAAM,CAAA,CAAgB,QAAA,CAAS,WAAW,CAAA,EAAG;AACvE,MAAA,MAAM,UAAU,QAAA,EAAU,IAAA;AAC1B,MAAA,MAAM,SAAS,OAAA,EAAS,MAAA;AACxB,MAAA,IAAI,MAAA,KAAW,iBAAiB,OAAA,EAAS;AACvC,QAAA,MAAA,CAAO,SAAS,iBAAA,CAAkB,OAAA;AAClC,QAAA,MAAA,CAAO,gBAAgB,OAAA,EAAS,UAAA;AAAA,MAClC;AACA,MAAA,IAAI,MAAA,KAAW,iBAAiB,MAAA,EAAQ;AACtC,QAAA,MAAA,CAAO,SAAS,iBAAA,CAAkB,MAAA;AAAA,MACpC;AAAA,IACF;AAEA,IAAA,IAAK,CAACA,OAAAA,CAAQ,KAAK,CAAA,CAAgB,QAAA,CAAS,WAAW,CAAA,EAAG;AACxD,MAAA,MAAM,OAAA,GAAU,QAAA,EAAU,IAAA,GAAO,CAAC,CAAA;AAClC,MAAA,MAAM,MAAA,GAAS,SAAS,MAAA,EAAQ,IAAA;AAChC,MAAA,IAAI,MAAA,KAAW,gBAAgB,SAAA,EAAW;AACxC,QAAA,MAAA,CAAO,SAAS,iBAAA,CAAkB,OAAA;AAClC,QAAA,MAAA,CAAO,aAAA,GAAgB,OAAA,EAAS,WAAA,EAAa,EAAA,EAAI,MAAA;AAAA,MACnD;AACA,MAAA,IAAI,CAAC,gBAAgB,MAAA,EAAQ,eAAA,CAAgB,OAAO,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA,EAAG;AACtE,QAAA,MAAA,CAAO,SAAS,iBAAA,CAAkB,MAAA;AAAA,MACpC;AAAA,IACF;AAEA,IAAA,IAAK,CAACA,OAAAA,CAAQ,QAAQ,CAAA,CAAgB,QAAA,CAAS,WAAW,CAAA,EAAG;AAC3D,MAAA,MAAM,SAAS,QAAA,EAAU,MAAA;AAEzB,MAAA,IAAI,MAAA,KAAW,eAAe,OAAA,EAAS;AACrC,QAAA,MAAA,CAAO,SAAS,iBAAA,CAAkB,OAAA;AAClC,QAAA,MAAA,CAAO,aAAA,GAAgB,QAAA,EAAU,WAAA,EAAa,wBAAA,GAA2B,CAAC,CAAA,EAAG,IAAA;AAAA,MAC/E;AAEA,MAAA,IAAI,CAAC,eAAe,QAAA,EAAU,cAAA,CAAe,MAAM,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA,EAAG;AACrE,QAAA,MAAA,CAAO,SAAS,iBAAA,CAAkB,MAAA;AAAA,MACpC;AAAA,IACF;AAEA,IAAA,IAAK,CAACA,OAAAA,CAAQ,aAAA,EAAeA,OAAAA,CAAQ,eAAeA,OAAAA,CAAQ,QAAA,EAAUA,OAAAA,CAAQ,gBAAA,EAAkBA,OAAAA,CAAQ,gBAAgB,CAAA,CAAgB,QAAA,CAAS,WAAW,CAAA,EAAG;AAC7J,MAAA,MAAM,UAAU,QAAA,EAAU,IAAA;AAC1B,MAAA,MAAM,SAAS,OAAA,EAAS,MAAA;AACxB,MAAA,IAAI,MAAA,KAAW,iBAAiB,OAAA,EAAS;AACvC,QAAA,MAAA,CAAO,SAAS,iBAAA,CAAkB,OAAA;AAClC,QAAA,MAAA,CAAO,gBAAgB,OAAA,EAAS,UAAA;AAAA,MAClC;AACA,MAAA,IAAI,MAAA,KAAW,iBAAiB,MAAA,EAAQ;AACtC,QAAA,MAAA,CAAO,SAAS,iBAAA,CAAkB,MAAA;AAAA,MACpC;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AChdO,IAAM,YAAA,GAAe,OAAO,MAAA,KAAgB;AACjD,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA;AAAA,GACF,GAAI,MAAA;AAEJ,EAAA,MAAM,EAAA,GAAK,IAAIW,GAAAA,CAAIN,OAAAA,CAAQ,KAAK,CAAA;AAChC,EAAA,MAAM,MAAM,EAAA,CAAG,GAAA;AAEf,EAAA,MAAM,QAAA,GAAW,IAAID,QAAAA,CAAS,EAAE,IAAA,EAAM,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAY,OAAA,EAASC,OAAAA,CAAQ,KAAA,EAAO,CAAA;AAEpG,EAAA,MAAM,eAAA,GAAkB,aAAa,UAAU,CAAA;AAC/C,EAAA,MAAM,oBAAA,GAAuB,YAAA,CAAa,OAAA,CAAQ,SAAS,CAAA;AAE3D,EAAA,IAAI,cAAc,eAAA,CAAgB,GAAA;AAClC,EAAA,IAAI,2BAAA,GAA8B,oBAAA,CAAqB,GAAA,IAAO,oBAAA,CAAqB,SAAA;AACnF,EAAA,MAAM,mBAAA,GAAsB,gCAAgC,oBAAA,CAAqB,SAAA;AACjF,EAAA,IAAI,mBAAA,EAAqB;AACvB,IAAA,WAAA,GAAc,eAAA,CAAgB,aAAa,eAAA,CAAgB,GAAA;AAAA,EAC7D;AAEA,EAAA,QAAA,CAAS,UAAA,EAAW;AACpB,EAAA,MAAM,QAAA,GAAWa,sBAAAA,CAAuBO,WAAAA,CAAY,KAAK,CAAC,CAAA;AAC1D,EAAA,MAAM,kBAAkB,IAAI,MAAA,CAAO,QAAA,CAAS,WAAA,EAAc,SAAS,QAAQ,CAAA;AAC3E,EAAA,QAAA,CAAS,IAAI,eAAe,CAAA;AAE5B,EAAA,IAAI;AACF,IAAA,QAAA,CAAS,UAAA,EAAW;AACpB,IAAA,MAAM,SAAS,MAAM,eAAA,CAAgB,SAAA,CAAU,UAAA,CAAW,WAAW,KAAK,CAAA;AAC1E,IAAA,QAAA,CAAS,IAAI,WAAW,CAAA;AAExB,IAAA,MAAM,CAAC,SAAS,CAAA,GAAI,MAAA;AAEpB,IAAA,QAAA,CAAS,SAAS,cAAc,CAAA;AAEhC,IAAA,OAAO,YAAY,IAAA,GAAO,IAAA;AAAA,EAC5B,SAAS,KAAA,EAAO;AACd,IAAA,GAAA,CAAI,cAAA,EAAgB,SAAA,EAAW,yBAAA,EAA2B,KAAK,CAAA;AAC/D,IAAA,MAAM,IAAI,MAAM,oCAAoC,CAAA;AAAA,EACtD;AACF","file":"index.mjs","sourcesContent":["export const ONECLICK_PROXY: Record<string, string> = {\n [\"Arbitrum\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Polygon\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"BNB Chain\"]: \"0xf5f1ec09b3ec88F6Cf23ADEEDd792E4642c5B7f1\",\n [\"Optimism\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Avalanche\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Ethereum\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Berachain\"]: \"0x1766A6B8453c7dbcA8c70d17980B6EA87ACA4F60\",\n [\"Tron\"]: \"TMqM35eVd3D9d7JbShRrMzMPyWLFweKYvW\",\n [\"Solana\"]: \"HWk6MsFEGzXxpe9B4mfEHpvVoCwNeVVMFxb5Mi7qNTM\",\n [\"Near\"]: \"stbflow.near\",\n [\"Aptos\"]: \"0x3000ceb3211d23ef73ad1b602a7a99b72020c9ce9537f580ac5bba556ec3bff9\",\n [\"Base\"]: \"0x7A18854b695BA7efB7229c17D0E1Cd2679481D28\",\n [\"X Layer\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Plasma\"]: \"0xc8dB1175132C64e311D01258dD05D4e2e75fD7b8\",\n [\"Ton\"]: \"EQBeP9Aeu3m5n9qpVyCWZFyji8uQJbzrYuAxq0orWl5e2qjR\",\n [\"Sui\"]: \"0xc178428ac308d322b6051421af1b6019ff4815955306c4317aafd050bdc28146\",\n};\n\nexport const ONECLICK_PROXY_ABI = [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"recipient\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"proxyTransfer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n];\n","import Big from \"big.js\";\nimport { ONECLICK_PROXY, ONECLICK_PROXY_ABI } from \"./contract\";\nimport { getRequest, GetStatusParams, numberRemoveEndZero, postRequest } from \"@stableflow/core\";\nimport { getPrice } from \"@stableflow/core\";\nimport { SendType } from \"@stableflow/core\";\nimport { Service } from \"@stableflow/core\";\nimport { DefaultAddresses } from \"@stableflow/core\";\nimport { OpenAPI } from '@stableflow/core';\nimport { ChainType } from \"@stableflow/core\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\n\nexport const BridgeFee = [\n {\n recipient: \"reffer.near\",\n // No bridge fee will be charged temporarily\n fee: 0, // 100=1% 1=0.01%\n },\n];\n\nexport const excludeFees: string[] = [\"estimateGasUsd\"];\n\nexport class OneClickService {\n private offsetTime = 1000 * 60 * 60;\n constructor() {\n }\n\n public async formatQuoteData(res: { data: any; params: any; }) {\n const { params } = res;\n const { isProxy = true, prices } = params;\n\n const isExactOutput = params.swapType === \"EXACT_OUTPUT\";\n const nativeTokenPrice = getPrice(prices, params.fromToken.nativeToken.symbol);\n const nativeTokenDecimals = params.fromToken.nativeToken.decimals;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n const execTime = new ExecTime({ type: \"OneClickService formatQuoteData\", logStyle: \"lime-300\", isDebug: OpenAPI.DEBUG });\n\n if (res.data) {\n // Updated the time estimate for bridge quotes to ensure it does not exceed a maximum threshold.\n // If the calculated time exceeds 60 seconds, it is randomized between 40 and 45 seconds,\n // enhancing user experience by providing more realistic estimates.\n if (res.data?.quote) {\n if (Big(res.data.quote.timeEstimate || 0).gt(60)) {\n res.data.quote.timeEstimate = Math.floor(Math.random() * 6) + 40;\n }\n }\n\n res.data.estimateTime = res.data?.quote?.timeEstimate; // seconds\n res.data.outputAmount = numberRemoveEndZero(Big(res.data?.quote?.amountOut || 0).div(10 ** params.toToken.decimals).toFixed(params.toToken.decimals, 0));\n let priceImpact = Big(0);\n let _amountInUsd = res.data?.quote?.amountInUsd || 0;\n let _amountOutUsd = res.data?.quote?.amountOutUsd || 0;\n if (isExactOutput) {\n res.data.quote.amountInFormatted = numberRemoveEndZero(Big(res.data?.quote?.minAmountIn || 0).div(10 ** params.fromToken.decimals).toFixed(params.fromToken.decimals, Big.roundUp));\n // Since 1click does not return minAmountInUsd, we calculate it using our own price\n _amountInUsd = Big(res.data.quote.amountInFormatted).times(getPrice(params.prices, params.fromToken.symbol));\n _amountOutUsd = Big(res.data?.quote?.amountOutFormatted || 0).times(getPrice(params.prices, params.fromToken.symbol));\n }\n try {\n priceImpact = Big(Big(_amountInUsd).minus(_amountOutUsd)).div(_amountInUsd || 1);\n if (Big(priceImpact).lt(0)) {\n priceImpact = Big(0);\n }\n } catch (error) { }\n res.data.priceImpact = numberRemoveEndZero(Big(priceImpact).toFixed(4));\n\n const fromTokenSymbol = params.fromToken.symbol === \"USD₮0\" ? \"USDT\" : params.fromToken.symbol;\n const toTokenSymbol = params.toToken.symbol === \"USD₮0\" ? \"USDT\" : params.toToken.symbol;\n res.data.exchangeRate = \"1\";\n if (fromTokenSymbol !== toTokenSymbol) {\n res.data.exchangeRate = numberRemoveEndZero(Big(res.data.quote?.amountOutFormatted || 0).div(res.data.quote?.amountInFormatted || 1).toFixed(params.toToken.decimals, 0));\n }\n\n try {\n const netFee = Big(_amountInUsd).minus(_amountOutUsd);\n let bridgeFeeValue = Big(0);\n let destinationGasFee = Big(netFee).minus(bridgeFeeValue);\n destinationGasFee = Big(destinationGasFee).lt(0) ? Big(0) : destinationGasFee;\n if (fromTokenSymbol !== toTokenSymbol) {\n destinationGasFee = Big(0);\n }\n res.data.fees = {\n bridgeFeeUsd: numberRemoveEndZero(Big(bridgeFeeValue).toFixed(20)),\n destinationGasFeeUsd: numberRemoveEndZero(Big(destinationGasFee).toFixed(20)),\n };\n\n // calculate total fees\n res.data.totalFeesUsd = \"0\";\n for (const feeKey in res.data.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n res.data.totalFeesUsd = Big(res.data.totalFeesUsd || 0).plus(res.data.fees[feeKey] || 0);\n }\n res.data.totalFeesUsd = numberRemoveEndZero(Big(res.data.totalFeesUsd).toFixed(20));\n\n } catch (error) {\n csl(\"OneClickService formatQuoteData\", \"red-500\", \"oneclick estimate failed: %o\", error);\n }\n\n const proxyAddress = ONECLICK_PROXY[params.fromToken.chainName];\n let proxyParams: any = {};\n if (proxyAddress && isProxy) {\n proxyParams = {\n dry: params.dry,\n proxyAddress,\n abi: ONECLICK_PROXY_ABI,\n fromToken: params.fromToken,\n refundTo: params.refundTo,\n recipient: params.recipient,\n amountWei: isExactOutput ? res.data?.quote?.minAmountIn : params.amountWei,\n prices: params.prices,\n evmGasFees: params.evmGasFees,\n depositAddress: res.data?.quote?.depositAddress ?? DefaultAddresses[params.fromToken.chainType as ChainType],\n };\n try {\n execTime.breakpoint();\n const proxyResult = await params.wallet.quote(Service.OneClick, proxyParams);\n execTime.log(\"wallet.quoteOneClickProxy\");\n\n for (const proxyKey in proxyResult) {\n if (proxyKey === \"fees\") {\n for (const feeKey in proxyResult.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n res.data.fees[feeKey] = proxyResult.fees[feeKey];\n }\n continue;\n }\n res.data[proxyKey] = proxyResult[proxyKey];\n }\n\n res.data.transferSourceGasFee = proxyResult.estimateSourceGas;\n const transferSourceGasFeeUsd = Big(proxyResult.estimateSourceGas || 0).div(10 ** params.fromToken.nativeToken.decimals).times(getPrice(params.prices, params.fromToken.nativeToken.symbol));\n res.data.transferSourceGasFeeUsd = numberRemoveEndZero(Big(transferSourceGasFeeUsd).toFixed(20));\n } catch (error) {\n csl(\"OneClickService formatQuoteData\", \"red-500\", \"oneclick quote proxy failed: %o\", error);\n }\n }\n\n res.data.quoteParam = {\n ...params,\n ...proxyParams,\n };\n }\n\n execTime.logTotal(\"OneClickService.formatQuoteData\");\n\n return res.data || {};\n }\n\n public async quote(params: {\n wallet: any,\n fromToken: any,\n toToken: any,\n dry: boolean;\n slippageTolerance: number;\n originAsset: string;\n destinationAsset: string;\n refundTo: string;\n refundType: \"ORIGIN_CHAIN\";\n recipient: string;\n connectedWallets?: string[];\n prices: Record<string, string>;\n amountWei: string;\n appFees?: { recipient: string; fee: number; }[];\n swapType?: \"EXACT_INPUT\" | \"EXACT_OUTPUT\" | \"FLEX_INPUT\";\n isProxy?: boolean;\n }) {\n const {\n wallet,\n fromToken,\n toToken,\n prices,\n amountWei,\n appFees = [],\n swapType = \"EXACT_INPUT\",\n isProxy = true,\n ...restParams\n } = params;\n\n const _quoteType = `OneClickService ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"lime-400\", isDebug: OpenAPI.DEBUG });\n\n const quoteParams: any = {\n depositMode: \"SIMPLE\",\n swapType: swapType || \"EXACT_INPUT\",\n depositType: \"ORIGIN_CHAIN\",\n sessionId: `session_${Date.now()}_${Math.random()\n .toString(36)\n .substr(2, 9)}`,\n recipientType: \"DESTINATION_CHAIN\",\n deadline: new Date(Date.now() + this.offsetTime).toISOString(),\n quoteWaitingTimeMs: 0,\n appFees: [\n ...BridgeFee,\n ...appFees,\n ],\n referral: \"stableflow\",\n amount: amountWei,\n };\n\n if (swapType === \"EXACT_OUTPUT\") {\n quoteParams.amount = Big(amountWei || 0).div(10 ** fromToken.decimals).times(10 ** toToken.decimals).toFixed(0);\n }\n\n for (const k in restParams) {\n if ([\"evmAddress\", \"evmWallet\", \"destinationChain\", \"originChain\"].includes(k)) {\n continue;\n }\n quoteParams[k] = restParams[k as keyof typeof restParams];\n }\n\n execTime.breakpoint();\n const response: any = await postRequest(\"/v0/quote\", quoteParams);\n execTime.log(\"/v0/quote\");\n\n execTime.breakpoint();\n const result = await this.formatQuoteData({ data: response, params });\n execTime.log(\"formatQuoteData\");\n\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"OneClickService.quote\");\n\n return result;\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const {\n fromToken,\n isProxy = true,\n wallet,\n amountWei,\n refundTo,\n prices,\n acceptTronEnergy,\n evmGasFees,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const result: any = { fees: {}, ...quoteData };\n\n const proxyAddress = ONECLICK_PROXY[fromToken.chainName];\n const isFromTron = fromToken.chainType === \"tron\";\n const isFromTronEnergy = isFromTron && acceptTronEnergy;\n const isFinalProxy = proxyAddress && isProxy;\n const nativeTokenPrice = getPrice(prices, fromToken.nativeToken.symbol);\n const nativeTokenDecimals = fromToken.nativeToken.decimals;\n\n if (isFromTron) {\n try {\n const _estGas = await wallet.estimateTransferGas({\n fromToken: fromToken,\n depositAddress: DefaultAddresses[fromToken.chainType as ChainType],\n amount: amountWei,\n account: refundTo,\n });\n result.transferSourceGasFee = _estGas.estimateGas;\n const transferSourceGasFeeUsd = Big(result.transferSourceGasFee || 0).div(10 ** nativeTokenDecimals).times(nativeTokenPrice);\n result.transferSourceGasFeeUsd = numberRemoveEndZero(Big(transferSourceGasFeeUsd).toFixed(20));\n } catch (error) {\n csl(\"OneClickService estimateTransaction\", \"red-500\", \"oneclick estimate transaction without proxy failed: %o\", error);\n }\n }\n\n if (isFinalProxy) {\n const estimateTransactionParams = {\n dry: false,\n ...quoteData.sendParam,\n fromToken,\n prices,\n evmGasFees,\n };\n if (isFromTron) {\n estimateTransactionParams.defaultEnergyUsed = 200000;\n estimateTransactionParams.defaultRawDataHexLength = 500;\n }\n const ett = await wallet.estimateTransaction(estimateTransactionParams);\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n result.transferSourceGasFee = ett.estimateSourceGas;\n result.transferSourceGasFeeUsd = ett.estimateSourceGasUsd;\n\n if (fromToken.chainType === \"evm\") {\n const sendParams = result.sendParam?.param;\n if (\n sendParams\n && Array.isArray(sendParams)\n && sendParams[sendParams.length - 1]\n && typeof sendParams[sendParams.length - 1] === \"object\"\n && sendParams[sendParams.length - 1].gasLimit !== void 0\n ) {\n csl(\"OneClickService estimateTransaction\", \"green-500\", \"Old gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n sendParams[sendParams.length - 1].gasLimit = ett.estimateSourceGasLimit;\n csl(\"OneClickService estimateTransaction\", \"green-500\", \"Updated gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n }\n }\n } else {\n let sourceGasFee = result.transferSourceGasFee || {};\n if (isFromTronEnergy) {\n sourceGasFee = result.energySourceGasFee;\n }\n const estimateGasUsd = Big(sourceGasFee.estimateGas || 0).div(10 ** nativeTokenDecimals).times(nativeTokenPrice);\n result.fees.estimateGasUsd = numberRemoveEndZero(Big(estimateGasUsd).toFixed(20));\n result.estimateSourceGas = sourceGasFee.estimateGas;\n result.totalEstimateSourceGas = sourceGasFee.estimateGas;\n result.estimateSourceGasUsd = numberRemoveEndZero(Big(estimateGasUsd).toFixed(20));\n }\n\n if (result.needApprove && wallet.estimateApprove) {\n const estApptroveGas = await wallet.estimateApprove({\n dry: false,\n amountWei,\n spender: result.approveSpender,\n fromToken,\n prices,\n });\n result.estimateApproveGas = estApptroveGas.estimateSourceGas;\n }\n\n result.totalFeesUsd = \"0\";\n for (const feeKey in result.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd).toFixed(20));\n\n return result;\n }\n\n public async send(params: any) {\n const {\n wallet,\n fromToken,\n depositAddress,\n amountWei,\n sendParam,\n } = params;\n\n // proxy transfer\n if (sendParam) {\n const tx = await wallet.send(SendType.SEND, sendParam);\n return tx;\n }\n\n const hash = await wallet.send(SendType.TRANSFER, {\n originAsset: fromToken.contractAddress,\n depositAddress: depositAddress,\n amount: amountWei,\n });\n return hash;\n }\n\n public submitHash(params: { txHash: string; depositAddress: string }) {\n return postRequest(\"/v0/deposit/submit\", params);\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest(\"/v0/status\", params);\n }\n}\n\nexport default new OneClickService();\n","export interface LayerZeroChainConfig {\n eid: number;\n chainKey: string;\n blockTime: number;\n}\n\n// LayerZero chain configuration\n// blockTime: Average block time in seconds, fetched from https://chainspect.app/\nexport const LAYERZZERO_CHAINS: Record<string, LayerZeroChainConfig> = {\n \"Ethereum\": {\n eid: 30101,\n chainKey: \"ethereum\",\n blockTime: 12,\n },\n Arbitrum: {\n eid: 30110,\n chainKey: \"arbitrum\",\n blockTime: 0.25,\n },\n Avalanche: {\n eid: 30106,\n chainKey: \"avax\",\n blockTime: 1.2,\n },\n Polygon: {\n eid: 30109,\n chainKey: \"polygon\",\n blockTime: 2,\n },\n Optimism: {\n eid: 30111,\n chainKey: \"optimism\",\n blockTime: 2,\n },\n Berachain: {\n eid: 30362,\n chainKey: \"berachain\",\n blockTime: 2,\n },\n Solana: {\n eid: 30168,\n chainKey: \"solana\",\n blockTime: 0.4,\n },\n Tron: {\n eid: 30420,\n chainKey: \"tron\",\n blockTime: 3,\n },\n \"X Layer\": {\n eid: 30274,\n chainKey: \"xlayer\",\n blockTime: 0.5,\n },\n \"Plasma\": {\n eid: 30383,\n chainKey: \"plasma\",\n blockTime: 1,\n },\n \"Mantle\": {\n eid: 30181,\n chainKey: \"mantle\",\n blockTime: 2,\n },\n \"MegaETH\": {\n eid: 30398,\n chainKey: \"megaeth\",\n blockTime: 1,\n },\n \"Ink\": {\n eid: 30339,\n chainKey: \"ink\",\n blockTime: 1,\n },\n \"Stable\": {\n eid: 30396,\n chainKey: \"stable\",\n blockTime: 0.7,\n },\n \"Celo\": {\n eid: 30125,\n chainKey: \"celo\",\n blockTime: 1,\n },\n \"Sei\": {\n eid: 30280,\n chainKey: \"sei\",\n blockTime: 2,\n },\n \"Flare\": {\n eid: 30295,\n chainKey: \"flare\",\n blockTime: 1.8,\n },\n \"BNB Chain\": {\n eid: 30102,\n chainKey: \"bsc\",\n blockTime: 0.45,\n },\n Fraxtal: {\n eid: 30255,\n chainKey: \"frax\",\n blockTime: 2,\n },\n Ton: {\n eid: 30343,\n chainKey: \"ton\",\n blockTime: 2.71,\n },\n Katana: {\n eid: 30375,\n chainKey: \"katana\",\n blockTime: 1,\n },\n};\n\n/**\n * Calculates cross-chain estimated time using the LayerZero formula.\n * Formula: Total Time ≈ (sourceBlockTime × blockConfirmations) + (destinationBlockTime × (2 blocks + DVN count))\n *\n * @param params - Object containing configuration and DVN details.\n * @param params.requiredDvnCount - The number of DVNs for this bridge (typically fixed per application, e.g., 2 or 3)\n * @param params.originConfig - Source chain configuration; should include blockTime (number) and confirmations (number)\n * @param params.destinationConfig - Destination chain configuration; should include blockTime (number)\n * @returns Estimated time in seconds. Returns 32 if configuration is missing or invalid.\n */\nexport function calculateEstimateTime(params: {\n requiredDvnCount: number;\n originConfig: { blockTime: number; confirmations: number; };\n destinationConfig: { blockTime: number; confirmations: number; };\n}): number {\n const {\n requiredDvnCount,\n originConfig,\n destinationConfig,\n } = params;\n\n // Return default value if config is missing\n if (!originConfig || !destinationConfig) {\n return 32;\n }\n\n // Validate required configuration fields\n if (\n typeof originConfig.blockTime !== 'number' ||\n typeof originConfig.confirmations !== 'number' ||\n typeof destinationConfig.blockTime !== 'number'\n ) {\n return 32;\n }\n\n const sourceBlockTime = originConfig.blockTime;\n const blockConfirmations = originConfig.confirmations;\n const destinationBlockTime = destinationConfig.blockTime;\n const dvnCount = requiredDvnCount;\n\n // Calculate: source chain part + destination chain part\n const sourceTime = sourceBlockTime * blockConfirmations;\n const destinationTime = destinationBlockTime * (2 + dvnCount);\n const totalTime = Math.ceil(sourceTime + destinationTime);\n\n return totalTime;\n}\n","import { Service } from \"@stableflow/core\";\n\nexport const getQuoteModes = (params: { quoteData?: any; bridgeStore?: { quoteDataService: Service; } }) => {\n const { quoteData, bridgeStore } = params;\n const { quoteDataService } = bridgeStore ?? {};\n\n const getIsExactOutput = () => {\n if (typeof quoteDataService === \"undefined\") {\n return false;\n }\n if (([Service.OneClickUsdt0] as Service[]).includes(quoteDataService)) {\n return true;\n }\n if (quoteDataService === Service.OneClickFraxZero) {\n const isFromEthereumUSDC = quoteData?.quoteParam?.isFromEthereumUSDC;\n const isToEthereumFrxUSD = quoteData?.quoteParam?.isToEthereumFrxUSD;\n if (!isFromEthereumUSDC) {\n return true;\n }\n }\n return false;\n };\n\n const getIsOneClickService = () => {\n if (typeof quoteDataService === \"undefined\") {\n return false;\n }\n if (([Service.OneClickUsdt0, Service.OneClick] as Service[]).includes(quoteDataService)) {\n return true;\n }\n if (quoteDataService === Service.OneClickFraxZero) {\n const isFromEthereumUSDC = quoteData?.quoteParam?.isFromEthereumUSDC;\n const isToEthereumFrxUSD = quoteData?.quoteParam?.isToEthereumFrxUSD;\n if (!isFromEthereumUSDC) {\n return true;\n }\n }\n return false;\n };\n\n const getIsQuoteParamDepositAddress = () => {\n if (typeof quoteDataService === \"undefined\") {\n return false;\n }\n if (([Service.Usdt0OneClick] as Service[]).includes(quoteDataService)) {\n return true;\n }\n if (quoteDataService === Service.FraxZeroOneClick) {\n const isFromEthereumFrxUSD = quoteData?.quoteParam?.isFromEthereumFrxUSD;\n const isToEthereumUSDC = quoteData?.quoteParam?.isToEthereumUSDC;\n if (!isToEthereumUSDC) {\n return true;\n }\n }\n\n return false;\n };\n\n return {\n isExactOutput: getIsExactOutput(),\n isOneClickService: getIsOneClickService(),\n isQuoteParamDepositAddress: getIsQuoteParamDepositAddress(),\n isPermitWithNonce: typeof quoteDataService === \"undefined\" ? false : ([Service.OneClickUsdt0, Service.OneClickFraxZero, Service.FraxZeroOneClick] as Service[]).includes(quoteDataService),\n };\n};\n","import bs58 from \"bs58\";\nimport { Buffer } from 'buffer';\n\n/** Left-pad a hex value to `lengthBytes` (ethers v6 zeroPadValue semantics). */\nfunction zeroPadValue(hex: string, lengthBytes: number): string {\n const normalized = hex.startsWith(\"0x\") ? hex.slice(2) : hex;\n const targetLen = lengthBytes * 2;\n if (normalized.length > targetLen) {\n throw new Error(`hex value exceeds ${lengthBytes} bytes`);\n }\n return \"0x\" + normalized.padStart(targetLen, \"0\");\n}\n\n// Address validation utilities for different blockchains\n\nexport interface AddressValidationResult {\n isValid: boolean;\n error?: string;\n}\n\n/**\n * Validates an address based on the target blockchain\n * @param address - The address to validate\n * @param blockchain - The target blockchain key\n * @returns AddressValidationResult with validation status and error message\n */\nexport function validateAddress(\n address: string,\n blockchain: string\n): AddressValidationResult {\n if (!address.trim()) {\n return {\n isValid: false,\n error: \"Address cannot be empty\"\n };\n }\n\n const trimmedAddress = address.trim();\n\n switch (blockchain) {\n case \"near\":\n return validateNearAddress(trimmedAddress);\n case \"sol\":\n return validateSolanaAddress(trimmedAddress);\n case \"evm\":\n return validateEthereumAddress(trimmedAddress);\n case \"aptos\":\n return validateAptosAddress(trimmedAddress);\n case \"tron\":\n return validateTronAddress(trimmedAddress);\n case \"ton\":\n return validateTonAddress(trimmedAddress);\n default:\n return {\n isValid: false,\n error: \"Unsupported blockchain\"\n };\n }\n}\n\n/**\n * Validates a NEAR address\n * Supports named accounts (alice.near, burrow.sputnik-dao.near) and\n * implicit accounts (64-char hex public key hash).\n */\nfunction validateNearAddress(address: string): AddressValidationResult {\n // Length check\n if (address.length < 2 || address.length > 64) {\n return {\n isValid: false,\n error: \"NEAR address must be 2-64 characters long\"\n };\n }\n\n // Additional checks\n if (address.startsWith(\".\") || address.endsWith(\".\")) {\n return {\n isValid: false,\n error: \"NEAR address cannot start or end with a dot\"\n };\n }\n\n if (address.includes(\"..\")) {\n return {\n isValid: false,\n error: \"NEAR address cannot contain consecutive dots\"\n };\n }\n\n // NEAR implicit accounts: 64-char hex string\n if (/^[0-9a-f]{64}$/i.test(address)) {\n return { isValid: true };\n }\n\n // Named account: letters, numbers and separators ., -, _\n const nearPattern = /^[a-zA-Z0-9._-]+$/;\n if (!nearPattern.test(address)) {\n return {\n isValid: false,\n error: \"Invalid NEAR address\"\n };\n }\n\n // Every account label should start/end with alphanumeric.\n const labelPattern = /^[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?$/;\n const labels = address.split(\".\");\n if (!labels.every(label => labelPattern.test(label))) {\n return {\n isValid: false,\n error: \"NEAR address labels must start/end with letters or numbers\"\n };\n }\n\n // Named NEAR account cannot be purely numeric.\n if (/^\\d+$/.test(address)) {\n return {\n isValid: false,\n error: \"NEAR address cannot be purely numeric\"\n };\n }\n\n const hasLetterPattern = /[a-zA-Z]/;\n if (!hasLetterPattern.test(address)) {\n return {\n isValid: false,\n error: \"NEAR address must contain at least one letter\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Validates a Solana address\n * Solana addresses are base58 encoded and typically 32-44 characters long\n */\nfunction validateSolanaAddress(address: string): AddressValidationResult {\n // Solana address pattern: base58 encoded, typically 32-44 characters\n const solanaPattern = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;\n\n if (!solanaPattern.test(address)) {\n return {\n isValid: false,\n error: \"Invalid Solana address\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Validates an Ethereum address (used for Arbitrum)\n * Ethereum addresses are 42 characters long, starting with 0x\n */\nfunction validateEthereumAddress(address: string): AddressValidationResult {\n // Ethereum address pattern: 0x followed by 40 hexadecimal characters\n const ethereumPattern = /^0x[a-fA-F0-9]{40}$/;\n\n if (!ethereumPattern.test(address)) {\n return {\n isValid: false,\n error: \"Invalid Ethereum address\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Validates an Aptos address\n * Aptos addresses are 32 bytes (64 hex characters), optionally prefixed with 0x\n */\nfunction validateAptosAddress(address: string): AddressValidationResult {\n // Aptos address can be with or without 0x prefix\n // With 0x: 0x + 64 hex characters = 66 characters total\n // Without 0x: 64 hex characters\n const aptosPatternWithPrefix = /^0x[a-fA-F0-9]{64}$/;\n const aptosPatternWithoutPrefix = /^[a-fA-F0-9]{64}$/;\n\n if (!aptosPatternWithPrefix.test(address) && !aptosPatternWithoutPrefix.test(address)) {\n return {\n isValid: false,\n error: \"Invalid Aptos address\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Validates a TON address.\n * Supports:\n * - user-friendly format, e.g. EQ..., UQ..., kQ...\n * - raw format, e.g. 0:<64 hex chars>, -1:<64 hex chars>\n */\nexport function validateTonAddress(address: string): AddressValidationResult {\n try {\n parseTonAddress(address);\n return { isValid: true };\n } catch {\n return {\n isValid: false,\n error: \"Invalid TON address\",\n };\n }\n}\n\n/**\n * Validates a Tron address\n * Tron addresses are Base58 encoded, starting with T, and 34 characters long\n */\nfunction validateTronAddress(address: string): AddressValidationResult {\n // Tron address pattern: Base58 encoded, starts with T, 34 characters long\n // Base58 alphabet: 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz (no 0, O, I, l)\n const tronPattern = /^T[1-9A-HJ-NP-Za-km-z]{33}$/;\n\n if (!tronPattern.test(address)) {\n return {\n isValid: false,\n error: \"Invalid Tron address\"\n };\n }\n\n return { isValid: true };\n}\n\n/**\n * Gets a placeholder text for the address input based on the target blockchain\n */\nexport function getAddressPlaceholder(blockchain: string): string {\n switch (blockchain) {\n case \"near\":\n return \"Enter NEAR wallet address (e.g., alice.near or 64-char hex)\";\n case \"sol\":\n return \"Enter Solana wallet address (e.g., 9WzDXwBbmkg8ZTbNMqUxvQRAyrZzDsGYdLVL9zYtAWWM)\";\n case \"arb\":\n return \"Enter Ethereum/Arbitrum wallet address (e.g., 0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6)\";\n case \"aptos\":\n return \"Enter Aptos wallet address (e.g., 0x93493b07d031c4f18ad1e874575761be7e47d4cea5c81d538600e8ec72d6ab1c)\";\n case \"tron\":\n return \"Enter Tron wallet address (e.g., TG4cfJGzvmpWxYyQKSosCWTacKCxEwSiKw)\";\n default:\n return \"Enter recipient wallet address\";\n }\n}\n\n/**\n * Convert Tron address to bytes32 format (for LayerZero OFT)\n * @param {string} tronAddress - Tron address in Base58check format (starts with T)\n * @returns {string} Address in bytes32 format (starts with 0x, left-padded with zeros)\n */\nexport function tronAddressToBytes32(tronAddress: string) {\n try {\n // 1. Decode base58check format\n const decoded = bs58.decode(tronAddress);\n\n // 2. Remove the first byte (0x41 prefix) and the last 4 bytes (checksum)\n // Tron address structure: [0x41] + [20-byte address] + [4-byte checksum]\n const addressBytes = decoded.slice(1, 21);\n\n // 3. Validate length\n if (addressBytes.length !== 20) {\n throw new Error('Invalid Tron address length');\n }\n\n // 4. Left pad with 12 zero bytes to make it 32 bytes\n const paddedBytes = Buffer.concat([\n Buffer.alloc(12, 0), // 12 zero bytes\n addressBytes // 20-byte address\n ]);\n\n // 5. Convert to hexadecimal string\n return '0x' + paddedBytes.toString('hex');\n } catch (error: any) {\n throw new Error(`Failed to convert Tron address: ${error.message}`);\n }\n}\n\n/**\n * SHA256 hash using Web Crypto API (browser compatible)\n * @param {Uint8Array} data - Data to hash\n * @returns {Promise<Uint8Array>} Hash result\n */\nasync function sha256(data: Uint8Array): Promise<Uint8Array> {\n // Create a new ArrayBuffer from the Uint8Array to ensure proper type\n const buffer = new Uint8Array(data).buffer;\n const hashBuffer = await crypto.subtle.digest('SHA-256', buffer);\n return new Uint8Array(hashBuffer);\n}\n\n/**\n * Converts bytes32 to Tron address\n * @param {string} bytes32Address - Address in bytes32 format\n * @returns {Promise<string>} Tron address in Base58check format\n */\nexport async function bytes32ToTronAddress(bytes32Address: string): Promise<string> {\n try {\n // Remove '0x' prefix\n const hexString = bytes32Address.startsWith('0x')\n ? bytes32Address.slice(2)\n : bytes32Address;\n\n // Convert to Buffer\n const buffer = Buffer.from(hexString, 'hex');\n\n // Take the last 20 bytes (remove the leading 12 zero bytes)\n const addressBytes = buffer.slice(12, 32);\n\n // Add Tron prefix 0x41\n const addressWithPrefix = Buffer.concat([\n Buffer.from([0x41]),\n addressBytes\n ]);\n\n // Calculate checksum (first 4 bytes of double SHA256)\n const hash1 = await sha256(new Uint8Array(addressWithPrefix));\n const hash2 = await sha256(hash1);\n const checksum = Buffer.from(hash2.slice(0, 4));\n\n // Combine: prefix + address + checksum\n const fullAddress = Buffer.concat([addressWithPrefix, checksum]);\n\n // Base58 encoding\n return bs58.encode(fullAddress);\n } catch (error: any) {\n throw new Error(`Failed to convert bytes32 to Tron address: ${error.message}`);\n }\n}\n\n/**\n * Converts Solana address to bytes32 format (for LayerZero OFT)\n * @param {string} solanaAddress - Solana address in Base58 format\n * @returns {string} Address in bytes32 format (starts with 0x, left-padded with zeros)\n */\nexport function solanaAddressToBytes32(solanaAddress: string) {\n // Decode the Solana address from base58 format\n const decoded = bs58.decode(solanaAddress);\n\n // Validate length (Solana public key is 32 bytes)\n if (decoded.length !== 32) {\n throw new Error('Invalid Solana address length');\n }\n\n // Convert to hexadecimal string\n return '0x' + Buffer.from(decoded).toString('hex');\n}\n\n/**\n * Converts bytes32 to Solana address\n * @param {string} bytes32Address - Address in bytes32 format\n * @returns {string} Solana address in Base58 format\n */\nexport function bytes32ToSolanaAddress(bytes32Address: string) {\n const hexString = bytes32Address.startsWith('0x')\n ? bytes32Address.slice(2)\n : bytes32Address;\n\n const buffer = Buffer.from(hexString, 'hex');\n\n // Encode as base58\n return bs58.encode(buffer);\n}\n\n/**\n * Converts TON address to bytes32 format for LayerZero OFT.\n *\n * @param tonAddress TON address in user-friendly or raw format\n * @returns 0x + 32-byte account hash as hex\n */\nexport function tonAddressToBytes32(tonAddress: string): string {\n try {\n const parsed = parseTonAddress(tonAddress);\n\n if (parsed.hash.length !== 32) {\n throw new Error(\"Invalid TON address hash length\");\n }\n\n return \"0x\" + bytesToHex(parsed.hash);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n throw new Error(`Failed to convert TON address: ${message}`);\n }\n}\n\nexport function addressToBytes32(chainType: string, address: string) {\n if (chainType === \"evm\") {\n return zeroPadValue(address, 32);\n }\n if (chainType === \"sol\") {\n return solanaAddressToBytes32(address);\n }\n if (chainType === \"tron\") {\n return tronAddressToBytes32(address);\n }\n if (chainType === \"ton\") {\n return tonAddressToBytes32(address);\n }\n return address;\n}\n\n//#region TON address parsing utilities\ntype ParsedTonAddress = {\n workchain: number;\n hash: Uint8Array; // 32 bytes\n isUserFriendly: boolean;\n isBounceable?: boolean;\n isTestOnly?: boolean;\n};\n\n/**\n * TON user-friendly address:\n * 36 bytes total:\n * [0] flags\n * [1] workchain as signed int8-ish, 0xff means -1\n * [2..33] 32-byte account hash\n * [34..35] CRC16-CCITT of first 34 bytes\n *\n * Raw address:\n * workchain:64-hex-chars\n */\nfunction parseTonAddress(address: string): ParsedTonAddress {\n const input = address.trim();\n\n if (!input) {\n throw new Error(\"Address is empty\");\n }\n\n if (isRawTonAddress(input)) {\n return parseRawTonAddress(input);\n }\n\n return parseUserFriendlyTonAddress(input);\n}\n\n/**\n * CRC16-CCITT, polynomial 0x1021, initial value 0x0000.\n * Returns big-endian 2-byte checksum.\n */\nfunction crc16Ccitt(data: Uint8Array): Uint8Array {\n let crc = 0x0000;\n\n for (const byte of data) {\n crc ^= byte << 8;\n\n for (let i = 0; i < 8; i++) {\n if ((crc & 0x8000) !== 0) {\n crc = ((crc << 1) ^ 0x1021) & 0xffff;\n } else {\n crc = (crc << 1) & 0xffff;\n }\n }\n }\n\n return new Uint8Array([(crc >> 8) & 0xff, crc & 0xff]);\n}\n\nfunction base64ToBytes(input: string): Uint8Array {\n // base64url -> base64\n let normalized = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\n // Add padding if needed.\n const padding = normalized.length % 4;\n if (padding === 2) {\n normalized += \"==\";\n } else if (padding === 3) {\n normalized += \"=\";\n } else if (padding !== 0) {\n throw new Error(\"Invalid base64 TON address\");\n }\n\n // Node.js / bundlers\n if (typeof Buffer !== \"undefined\") {\n return new Uint8Array(Buffer.from(normalized, \"base64\"));\n }\n\n // Browser fallback\n if (typeof atob !== \"undefined\") {\n const binary = atob(normalized);\n const bytes = new Uint8Array(binary.length);\n\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n\n return bytes;\n }\n\n throw new Error(\"No base64 decoder available\");\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n if (hex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string\");\n }\n\n const bytes = new Uint8Array(hex.length / 2);\n\n for (let i = 0; i < bytes.length; i++) {\n const byte = Number.parseInt(hex.slice(i * 2, i * 2 + 2), 16);\n\n if (Number.isNaN(byte)) {\n throw new Error(\"Invalid hex string\");\n }\n\n bytes[i] = byte;\n }\n\n return bytes;\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\nfunction isRawTonAddress(address: string): boolean {\n return /^-?\\d+:[0-9a-fA-F]{64}$/.test(address);\n}\n\nfunction parseRawTonAddress(address: string): ParsedTonAddress {\n const [workchainPart, hashPart] = address.split(\":\");\n\n if (!workchainPart || !hashPart) {\n throw new Error(\"Invalid raw TON address\");\n }\n\n const workchain = Number(workchainPart);\n\n if (!Number.isInteger(workchain)) {\n throw new Error(\"Invalid TON workchain\");\n }\n\n if (!/^[0-9a-fA-F]{64}$/.test(hashPart)) {\n throw new Error(\"Invalid TON address hash\");\n }\n\n return {\n workchain,\n hash: hexToBytes(hashPart),\n isUserFriendly: false,\n };\n}\n\nfunction parseUserFriendlyTonAddress(address: string): ParsedTonAddress {\n // TON user-friendly address is 36 bytes encoded as base64/base64url,\n // usually 48 chars without padding.\n if (!/^[A-Za-z0-9+/_-]{48}$/.test(address)) {\n throw new Error(\"Invalid user-friendly TON address format\");\n }\n\n const data = base64ToBytes(address);\n\n if (data.length !== 36) {\n throw new Error(\"Invalid user-friendly TON address length\");\n }\n\n const body = data.slice(0, 34);\n const checksum = data.slice(34, 36);\n const expectedChecksum = crc16Ccitt(body);\n\n if (checksum[0] !== expectedChecksum[0] || checksum[1] !== expectedChecksum[1]) {\n throw new Error(\"Invalid TON address checksum\");\n }\n\n const flags = data[0];\n\n const isTestOnly = (flags & 0x80) !== 0;\n const tag = flags & 0x7f;\n\n // 0x11 = bounceable, 0x51 = non-bounceable.\n // With testOnly bit added: 0x91 / 0xd1.\n if (tag !== 0x11 && tag !== 0x51) {\n throw new Error(\"Invalid TON address flags\");\n }\n\n const isBounceable = tag === 0x11;\n\n const workchainByte = data[1];\n const workchain = workchainByte === 0xff ? -1 : workchainByte;\n\n const hash = data.slice(2, 34);\n\n if (hash.length !== 32) {\n throw new Error(\"Invalid TON address hash length\");\n }\n\n return {\n workchain,\n hash,\n isUserFriendly: true,\n isBounceable,\n isTestOnly,\n };\n}\n//#endregion\n","import Big from \"big.js\";\nimport { Service, type TokenConfig } from \"@stableflow/core\";\n\nexport const formatQuoteError = (error: any, options: { service: Service; fromToken: TokenConfig; }) => {\n const { service, fromToken } = options;\n\n const defaultErrorMessage = \"Failed to get quote, please try again later\";\n\n if (service === Service.OneClick) {\n const getQuoteErrorMessage = (): { message: string; sourceMessage: string; } => {\n const _messageResult = {\n message: defaultErrorMessage,\n sourceMessage: error?.response?.data?.message || defaultErrorMessage,\n };\n if (\n error?.response?.data?.message &&\n error?.response?.data?.message !== \"Internal server error\"\n ) {\n // quote failed, maybe out of liquidity\n if (error?.response?.data?.message === \"Failed to get quote\") {\n _messageResult.message = \"Amount exceeds max\";\n return _messageResult;\n }\n // Amount is too low for bridge\n if (error?.response?.data?.message?.includes(\"Amount is too low for bridge, try at least\")) {\n const match = error.response.data.message.match(/try at least\\s+(\\d+(?:\\.\\d+)?)/i);\n let minimumAmount = match ? match[1] : Big(1).times(10 ** fromToken.decimals).toFixed(0);\n minimumAmount = Big(minimumAmount).div(10 ** fromToken.decimals).toFixed(fromToken.decimals);\n _messageResult.message = `Amount is too low, at least ${minimumAmount}`;\n return _messageResult;\n }\n return _messageResult;\n }\n // Unknown error\n return _messageResult;\n };\n const onclickErrMsg = getQuoteErrorMessage();\n return {\n serviceType: service,\n error: onclickErrMsg.message,\n };\n }\n\n return {\n serviceType: service,\n error: error?.message || defaultErrorMessage,\n };\n};\n","import { postRequest } from '@stableflow/core';\n\nexport async function quoteSignature(params: any) {\n const response: any = await postRequest(\"/v0/cctp/sign\", params);\n return response.data ?? {};\n}\n","import Big from \"big.js\";\n\nexport const addThousandSeparator = (numberString: string) => {\n if (!numberString) return \"0\";\n const parts = String(numberString).split(\".\");\n const integerPart = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n const decimalPart = parts[1] ? `.${parts[1]}` : \"\";\n return integerPart + decimalPart;\n};\n\nexport const formatNumber = (\n value: string | number | Big.Big | undefined,\n precision: number,\n isSimple?: boolean,\n options?: {\n prefix?: string;\n isLTIntegerZero?: boolean;\n isZeroPrecision?: boolean;\n isShort?: boolean;\n isShortUppercase?: boolean;\n round?: Big.RoundingMode;\n isLessPrecision?: boolean;\n }\n): any => {\n const {\n prefix = \"\",\n isLTIntegerZero,\n isZeroPrecision,\n isShort,\n isShortUppercase,\n round = Big.roundHalfUp,\n isLessPrecision = true,\n } = options || {};\n\n const isValid = () => {\n try {\n if (!value) return false;\n Big(value);\n return true;\n } catch (err: any) {\n return false;\n }\n };\n\n if (!value || !isValid() || Big(value).eq(0)) {\n if (isSimple) {\n if (isZeroPrecision) {\n return `${prefix}${Big(0).toFixed(precision, round)}`;\n }\n return `${prefix}0`;\n }\n if (isZeroPrecision) {\n return {\n integer: `${prefix}0`,\n decimal: Big(0).toFixed(precision, round).replace(/^\\d/, \"\")\n };\n }\n return {\n integer: `${prefix}0`,\n decimal: \"\"\n };\n }\n\n if (isLessPrecision && Big(value).lt(Big(10).pow(-precision))) {\n if (isSimple) {\n return `< ${prefix}${Big(10).pow(-precision).toFixed(precision, round)}`;\n }\n if (isLTIntegerZero) {\n return {\n integer: `< ${prefix}0`,\n decimal: Big(10)\n .pow(-precision)\n .toFixed(precision, round)\n .replace(/^\\d/, \"\")\n };\n }\n return {\n integer: \"\",\n decimal: `< ${prefix}${Big(10).pow(-precision).toFixed(precision, round)}`\n };\n }\n\n const finalValue = addThousandSeparator(Big(value).toFixed(precision, round));\n const firstPart = finalValue.split(\".\")[0];\n let secondPart = finalValue.split(\".\")[1] || \"\";\n if (secondPart) {\n secondPart = \".\" + secondPart;\n }\n if (isSimple) {\n if (isShort) {\n const formatter = (split: number, unit: string): string => {\n const _num = Big(value)\n .div(split)\n .toFixed(precision, 0)\n .replace(/(?:\\.0*|(\\.\\d+?)0+)$/, \"$1\");\n const inter = _num.split(\".\")?.[0]?.replace(/\\d(?=(\\d{3})+\\b)/g, \"$&,\");\n const decimal = _num.split(\".\")?.[1] ?? \"\";\n return `${prefix}${inter}${decimal ? \".\" + decimal : \"\"}${unit}`;\n };\n if (Big(value).gte(1e12)) {\n return formatter(1e12, isShortUppercase ? \"T\" : \"t\");\n }\n if (Big(value).gte(1e9)) {\n return formatter(1e9, isShortUppercase ? \"B\" : \"b\");\n }\n if (Big(value).gte(1e6)) {\n return formatter(1e6, isShortUppercase ? \"M\" : \"m\");\n }\n if (Big(value).gte(1e3)) {\n return formatter(1e3, isShortUppercase ? \"K\" : \"k\");\n }\n }\n if (isZeroPrecision) {\n return `${prefix}${firstPart}${secondPart}`;\n }\n return `${prefix}${firstPart}${secondPart.replace(/[.]?0*$/, \"\")}`;\n }\n if (isZeroPrecision) {\n return {\n integer: `${prefix}${firstPart}`,\n decimal: secondPart\n };\n }\n return {\n integer: `${prefix}${firstPart}`,\n decimal: secondPart.replace(/[.]?0*$/, \"\")\n };\n};\n","import { usdt0Chains } from \"@stableflow/core\";\nimport { LAYERZZERO_CHAINS, type LayerZeroChainConfig } from \"../utils\";\n\ninterface Usdt0Config extends LayerZeroChainConfig {\n contractAddress: string;\n oft?: string;\n oftLegacy?: string;\n oftMultiHopComposer?: string;\n oftTetherTokenOFTExtension?: string;\n confirmations: number;\n lzReceiveOptionGas: number;\n lzReceiveOptionGasLegacy: number;\n composeOptionGas?: number;\n oftApprovalRequired?: boolean;\n oftLegacyApprovalRequired?: boolean;\n}\n\n// LayerZero chain configuration\n// blockTime: Average block time in seconds, fetched from https://chainspect.app/\n// chainKey: LayerZero chain identifier for querying default configurations\n// confirmations: Default block confirmations for source chain, fetched from https://layerzeroscan.com/tools/defaults (Send Confirmations)\n// For more accurate confirmation counts, visit https://layerzeroscan.com/application/usdt0, filter by the desired source chain, and check the \"confirmations\" value at the bottom of the page.\n// DVN count: USDT0 uses 2 DVNs (fixed value)\nexport const USDT0_CONFIG: Record<string, Usdt0Config> = {\n Ethereum: {\n contractAddress: \"0xdac17f958d2ee523a2206206994597c13d831ec7\",\n oft: \"0x6C96dE32CEa08842dcc4058c14d3aaAD7Fa41dee\",\n oftLegacy: \"0x1f748c76de468e9d11bd340fa9d5cbadf315dfb0\",\n ...LAYERZZERO_CHAINS[\"Ethereum\"],\n confirmations: 15, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n oftApprovalRequired: true,\n oftLegacyApprovalRequired: true,\n },\n Arbitrum: {\n contractAddress: \"0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9\",\n oft: \"0x14E4A1B13bf7F943c8ff7C51fb60FA964A298D92\",\n oftLegacy: \"0x77652d5aba086137b595875263fc200182919b92\",\n oftMultiHopComposer: \"0x759BA420bF1ded1765F18C2DC3Fc57A1964A2Ad1\",\n ...LAYERZZERO_CHAINS[\"Arbitrum\"],\n confirmations: 60, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n oftApprovalRequired: false,\n oftLegacyApprovalRequired: true,\n },\n Polygon: {\n contractAddress: \"0xc2132D05D31c914a87C6611C10748AEb04B58e8F\",\n oft: \"0x6BA10300f0DC58B7a1e4c0e41f5daBb7D7829e13\",\n ...LAYERZZERO_CHAINS[\"Polygon\"],\n confirmations: 32, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n Optimism: {\n contractAddress: \"0x01bFF41798a0BcF287b996046Ca68b395DbC1071\",\n oft: \"0xF03b4d9AC1D5d1E7c4cEf54C2A313b9fe051A0aD\",\n ...LAYERZZERO_CHAINS[\"Optimism\"],\n confirmations: 450, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n Berachain: {\n contractAddress: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n oft: \"0x3Dc96399109df5ceb2C226664A086140bD0379cB\",\n oftTetherTokenOFTExtension: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n ...LAYERZZERO_CHAINS[\"Berachain\"],\n confirmations: 60, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n Solana: {\n contractAddress: \"Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB\",\n oftLegacy: \"Fuww9mfc8ntAwxPUzFia7VJFAdvLppyZwhPJoXySZXf7\",\n ...LAYERZZERO_CHAINS[\"Solana\"],\n confirmations: 128, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 200000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 500000,\n oftLegacyApprovalRequired: false,\n },\n Tron: {\n contractAddress: \"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\",\n oftLegacy: \"TFG4wBaDQ8sHWWP1ACeSGnoNR6RRzevLPt\",\n ...LAYERZZERO_CHAINS[\"Tron\"],\n confirmations: 5, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 300000,\n lzReceiveOptionGasLegacy: 300000,\n composeOptionGas: 500000,\n oftLegacyApprovalRequired: true,\n },\n \"X Layer\": {\n contractAddress: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n oft: \"0x94bcca6bdfd6a61817ab0e960bfede4984505554\",\n ...LAYERZZERO_CHAINS[\"X Layer\"],\n confirmations: 9000, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Ton\": {\n contractAddress: \"EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs\",\n oftLegacy: \"EQAd31gAUhdO0d0NZsNb_cGl_Maa9PSuNhVLE9z8bBSjX6Gq\",\n eid: 30343,\n chainKey: \"ton\",\n blockTime: 3,\n confirmations: 2,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftLegacyApprovalRequired: false,\n },\n \"Plasma\": {\n contractAddress: \"0xB8CE59FC3717ada4C02eaDF9682A9e934F625ebb\",\n oft: \"0x02ca37966753bDdDf11216B73B16C1dE756A7CF9\",\n ...LAYERZZERO_CHAINS[\"Plasma\"],\n confirmations: 1800, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Mantle\": {\n contractAddress: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n oft: \"0xcb768e263FB1C62214E7cab4AA8d036D76dc59CC\",\n ...LAYERZZERO_CHAINS[\"Mantle\"],\n confirmations: 2000, // Default confirmations from layerzeroscan.com\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"MegaETH\": {\n contractAddress: \"0xb8ce59fc3717ada4c02eadf9682a9e934f625ebb\",\n oft: \"0x9151434b16b9763660705744891fa906f660ecc5\",\n ...LAYERZZERO_CHAINS[\"MegaETH\"],\n confirmations: 5400,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Ink\": {\n contractAddress: \"0x0200C29006150606B650577BBE7B6248F58470c1\",\n oft: \"0x1cB6De532588fCA4a21B7209DE7C456AF8434A65\",\n ...LAYERZZERO_CHAINS[\"Ink\"],\n confirmations: 450,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Stable\": {\n contractAddress: \"0x779Ded0c9e1022225f8E0630b35a9b54bE713736\",\n oft: \"0xedaba024be4d87974d5aB11C6Dd586963CcCB027\",\n ...LAYERZZERO_CHAINS[\"Stable\"],\n confirmations: 3600,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Celo\": {\n contractAddress: \"0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e\",\n oftLegacy: \"0xf10E161027410128E63E75D0200Fb6d34b2db243\",\n ...LAYERZZERO_CHAINS[\"Celo\"],\n confirmations: 10,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftLegacyApprovalRequired: true,\n },\n \"Sei\": {\n contractAddress: \"0x9151434b16b9763660705744891fA906F660EcC5\",\n oft: \"0x56Fe74A2e3b484b921c447357203431a3485CC60\",\n ...LAYERZZERO_CHAINS[\"Sei\"],\n confirmations: 2000,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n \"Flare\": {\n contractAddress: \"0xe7cd86e13AC4309349F30B3435a9d337750fC82D\",\n oft: \"0x567287d2A9829215a37e3B88843d32f9221E7588\",\n ...LAYERZZERO_CHAINS[\"Flare\"],\n confirmations: 500,\n lzReceiveOptionGas: 80000,\n lzReceiveOptionGasLegacy: 200000,\n composeOptionGas: 600000,\n oftApprovalRequired: false,\n },\n};\n\nexport const LZ_RECEIVE_VALUE: Record<string, any> = {\n Solana: 2039280,\n};\n\n// https://docs.layerzero.network/v2/developers/evm/tooling/layerzeroscan#transaction-statuses\n// https://scan.layerzero-api.com/v1/swagger\nexport const LzScanStatus = {\n // The message has been successfully sent and received by the destination chain.\n Delivered: \"DELIVERED\",\n // The message is currently being transmitted between chains and has not yet reached its destination.\n InFlight: \"INFLIGHT\",\n // The message arrived at the destination, but reverted or ran out of gas during execution and needs to be retried.\n PayloadStored: \"PAYLOAD_STORED\",\n // The transaction encountered an error and did not complete.\n Failed: \"FAILED\",\n // A previous message nonce has a stored payload, halting the current transaction.\n Blocked: \"BLOCKED\",\n // The system is validating the finality of a transaction amidst potential high gas replacements or block reorgs.\n Confirming: \"CONFIRMING\",\n ApplicationBurned: \"APPLICATION_BURNED\",\n ApplicationSkipped: \"APPLICATION_SKIPPED\",\n UnresolvableCommand: \"UNRESOLVABLE_COMMAND\",\n MalformedCommand: \"MALFORMED_COMMAND\",\n};\n\nexport type LzScanStatus = (typeof LzScanStatus)[keyof typeof LzScanStatus];\n\nexport const LzScanSourceStatus = {\n Waiting: \"WAITING\",\n ValidatingTx: \"VALIDATING_TX\",\n Succeeded: \"SUCCEEDED\",\n WaitingForHashDelivered: \"WAITING_FOR_HASH_DELIVERED\",\n UnresolvableCommand: \"UNRESOLVABLE_COMMAND\",\n MalformedCommand: \"MALFORMED_COMMAND\",\n};\nexport type LzScanSourceStatus = (typeof LzScanSourceStatus)[keyof typeof LzScanSourceStatus];\n\nexport const LzScanDestinationStatus = {\n Waiting: \"WAITING\",\n ValidatingTx: \"VALIDATING_TX\",\n Succeeded: \"SUCCEEDED\",\n PayloadStored: \"PAYLOAD_STORED\",\n};\nexport type LzScanDestinationStatus = (typeof LzScanDestinationStatus)[keyof typeof LzScanDestinationStatus];\n\nexport const LzScanLzComposeStatus = {\n Waiting: \"WAITING\",\n ValidatingTx: \"VALIDATING_TX\",\n Succeeded: \"SUCCEEDED\",\n NA: \"N/A\",\n Failed: \"FAILED\",\n SimulatedReverted: \"SIMULATION_REVERTED\",\n WaitingForComposeSentEvent: \"WAITING_FOR_COMPOSE_SENT_EVENT\",\n};\nexport type LzScanLzComposeStatus = (typeof LzScanLzComposeStatus)[keyof typeof LzScanLzComposeStatus];\n\n// USDT0 DVN count (fixed value)\nexport const USDT0_DVN_COUNT = 2;\n\nexport const USDT0_LEGACY_FEE = 0.0001; // 0.01%, 10000 usdt cost 1 usdt\nexport const USDT0_LEGACY_MESH_TRANSFTER_FEE = 0.0003; // 0.03% https://docs.usdt0.to/tutorial/how-to-transfer#usdt0\nexport const DATA_HEX_PROTOBUF_EXTRA = 3;\nexport const SIGNATURE_SIZE = 67;\n\nexport const MIDDLE_CHAIN_REFOUND_ADDRESS = \"0x654E7B96E1DE0b54E53D9ae8082fC2219E66dAC3\";\nexport const MIDDLE_TOKEN_CHAIN = usdt0Chains[\"arb\"];\nexport const MIDDLE_CHAIN_LAYERZERO_EXECUTOR = \"0x6f4042401823a97E3b02F1A533e62C40409a75fa\";\n\n","export const OFT_ABI = [\n {\n inputs: [],\n name: \"approvalRequired\",\n outputs: [\n { internalType: \"bool\", name: \"\", type: \"bool\" }\n ],\n stateMutability: \"pure\",\n type: \"function\"\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"uint32\", name: \"dstEid\", type: \"uint32\" },\n { internalType: \"bytes32\", name: \"to\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"amountLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"minAmountLD\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"extraOptions\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"composeMsg\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"oftCmd\", type: \"bytes\" }\n ],\n internalType: \"struct SendParam\",\n name: \"_sendParam\",\n type: \"tuple\"\n }\n ],\n name: \"quoteOFT\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"minAmountLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"maxAmountLD\", type: \"uint256\" }\n ],\n internalType: \"struct OFTLimit\",\n name: \"oftLimit\",\n type: \"tuple\"\n },\n {\n components: [\n { internalType: \"int256\", name: \"feeAmountLD\", type: \"int256\" },\n { internalType: \"string\", name: \"description\", type: \"string\" }\n ],\n internalType: \"struct OFTFeeDetail[]\",\n name: \"oftFeeDetails\",\n type: \"tuple[]\"\n },\n {\n components: [\n { internalType: \"uint256\", name: \"amountSentLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"amountReceivedLD\", type: \"uint256\" }\n ],\n internalType: \"struct OFTReceipt\",\n name: \"oftReceipt\",\n type: \"tuple\"\n }\n ],\n stateMutability: \"view\",\n type: \"function\"\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"uint32\", name: \"dstEid\", type: \"uint32\" },\n { internalType: \"bytes32\", name: \"to\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"amountLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"minAmountLD\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"extraOptions\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"composeMsg\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"oftCmd\", type: \"bytes\" }\n ],\n internalType: \"struct SendParam\",\n name: \"_sendParam\",\n type: \"tuple\"\n },\n { internalType: \"bool\", name: \"_payInLzToken\", type: \"bool\" }\n ],\n name: \"quoteSend\",\n outputs: [\n {\n components: [\n { internalType: \"uint256\", name: \"nativeFee\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"lzTokenFee\", type: \"uint256\" }\n ],\n internalType: \"struct MessagingFee\",\n name: \"msgFee\",\n type: \"tuple\"\n }\n ],\n stateMutability: \"view\",\n type: \"function\"\n },\n {\n inputs: [\n {\n components: [\n { internalType: \"uint32\", name: \"dstEid\", type: \"uint32\" },\n { internalType: \"bytes32\", name: \"to\", type: \"bytes32\" },\n { internalType: \"uint256\", name: \"amountLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"minAmountLD\", type: \"uint256\" },\n { internalType: \"bytes\", name: \"extraOptions\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"composeMsg\", type: \"bytes\" },\n { internalType: \"bytes\", name: \"oftCmd\", type: \"bytes\" }\n ],\n internalType: \"struct SendParam\",\n name: \"_sendParam\",\n type: \"tuple\"\n },\n {\n components: [\n { internalType: \"uint256\", name: \"nativeFee\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"lzTokenFee\", type: \"uint256\" }\n ],\n internalType: \"struct MessagingFee\",\n name: \"_fee\",\n type: \"tuple\"\n },\n { internalType: \"address\", name: \"_refundAddress\", type: \"address\" }\n ],\n name: \"send\",\n outputs: [\n {\n components: [\n { internalType: \"bytes32\", name: \"guid\", type: \"bytes32\" },\n { internalType: \"uint64\", name: \"nonce\", type: \"uint64\" },\n {\n components: [\n { internalType: \"uint256\", name: \"nativeFee\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"lzTokenFee\", type: \"uint256\" }\n ],\n internalType: \"struct MessagingFee\",\n name: \"fee\",\n type: \"tuple\"\n }\n ],\n internalType: \"struct MessagingReceipt\",\n name: \"msgReceipt\",\n type: \"tuple\"\n },\n {\n components: [\n { internalType: \"uint256\", name: \"amountSentLD\", type: \"uint256\" },\n { internalType: \"uint256\", name: \"amountReceivedLD\", type: \"uint256\" }\n ],\n internalType: \"struct OFTReceipt\",\n name: \"oftReceipt\",\n type: \"tuple\"\n }\n ],\n stateMutability: \"payable\",\n type: \"function\"\n }\n];\n\nexport const SOLANA_IDL = {\n \"metadata\": {\n \"name\": \"oft\",\n \"version\": \"0.1.0\",\n \"spec\": \"0.1.0\",\n \"description\": \"Created with Anchor\"\n },\n \"instructions\": [\n {\n \"name\": \"burn\",\n \"discriminator\": [\n 116,\n 110,\n 29,\n 56,\n 107,\n 219,\n 42,\n 93\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"BurnParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"deposit_local\",\n \"discriminator\": [\n 183,\n 51,\n 160,\n 173,\n 94,\n 131,\n 201,\n 173\n ],\n \"accounts\": [\n {\n \"name\": \"signer\",\n \"signer\": true\n },\n {\n \"name\": \"token_source\",\n \"writable\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"DepositLocalParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"init_oft\",\n \"discriminator\": [\n 182,\n 169,\n 147,\n 16,\n 201,\n 45,\n 76,\n 23\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"oft_store\",\n \"writable\": true\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"endpoint_settings\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"system_program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"InitOFTParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lz_receive\",\n \"discriminator\": [\n 8,\n 179,\n 120,\n 109,\n 33,\n 118,\n 189,\n 80\n ],\n \"accounts\": [\n {\n \"name\": \"payer\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"peer\"\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"to_address\",\n \"optional\": true\n },\n {\n \"name\": \"token_dest\",\n \"writable\": true,\n \"optional\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"associated_token_program\"\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"LzReceiveParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lz_receive_types_info\",\n \"discriminator\": [\n 43,\n 148,\n 213,\n 93,\n 101,\n 127,\n 37,\n 170\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"lz_receive_types_accounts\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"LzReceiveParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"lz_receive_types_v2\",\n \"discriminator\": [\n 109,\n 157,\n 200,\n 142,\n 138,\n 223,\n 159,\n 164\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"token_mint\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"LzReceiveParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"LzReceiveTypesV2Result\"\n }\n }\n },\n {\n \"name\": \"nilify\",\n \"discriminator\": [\n 143,\n 136,\n 129,\n 199,\n 36,\n 35,\n 160,\n 85\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"NilifyParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"oft_version\",\n \"discriminator\": [\n 179,\n 115,\n 253,\n 187,\n 88,\n 22,\n 80,\n 64\n ],\n \"accounts\": [],\n \"args\": [],\n \"returns\": {\n \"defined\": {\n \"name\": \"Version\"\n }\n }\n },\n {\n \"name\": \"quote_oft\",\n \"discriminator\": [\n 179,\n 255,\n 92,\n 202,\n 251,\n 82,\n 82,\n 118\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\"\n },\n {\n \"name\": \"peer\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"QuoteOFTParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"QuoteOFTResult\"\n }\n }\n },\n {\n \"name\": \"quote_send\",\n \"discriminator\": [\n 207,\n 0,\n 49,\n 214,\n 160,\n 211,\n 76,\n 211\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\"\n },\n {\n \"name\": \"peer\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"QuoteSendParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingFee\"\n }\n }\n },\n {\n \"name\": \"quote_send_credits\",\n \"discriminator\": [\n 166,\n 117,\n 54,\n 109,\n 220,\n 29,\n 112,\n 107\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\"\n },\n {\n \"name\": \"peer\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"QuoteSendCreditsParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingFee\"\n }\n }\n },\n {\n \"name\": \"quote_withdraw_remote\",\n \"discriminator\": [\n 198,\n 64,\n 228,\n 34,\n 69,\n 19,\n 122,\n 58\n ],\n \"accounts\": [\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\"\n },\n {\n \"name\": \"peer\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"QuoteSendParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingFee\"\n }\n }\n },\n {\n \"name\": \"send\",\n \"discriminator\": [\n 102,\n 251,\n 20,\n 187,\n 65,\n 75,\n 12,\n 69\n ],\n \"accounts\": [\n {\n \"name\": \"signer\",\n \"signer\": true\n },\n {\n \"name\": \"peer\"\n },\n {\n \"name\": \"oft_store\",\n \"writable\": true\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_source\",\n \"writable\": true\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SendParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"send_credits\",\n \"discriminator\": [\n 92,\n 161,\n 204,\n 14,\n 139,\n 189,\n 105,\n 227\n ],\n \"accounts\": [\n {\n \"name\": \"planner\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"peer\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SendCreditsParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingReceipt\"\n }\n }\n },\n {\n \"name\": \"set_oft_config\",\n \"discriminator\": [\n 55,\n 126,\n 87,\n 217,\n 159,\n 66,\n 24,\n 194\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\",\n \"writable\": true\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SetOFTConfigParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"set_peer_config\",\n \"discriminator\": [\n 79,\n 187,\n 168,\n 57,\n 139,\n 140,\n 93,\n 47\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"writable\": true,\n \"signer\": true\n },\n {\n \"name\": \"peer\",\n \"writable\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"system_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SetPeerConfigParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"withdraw_fees\",\n \"discriminator\": [\n 198,\n 212,\n 171,\n 109,\n 144,\n 215,\n 174,\n 89\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"token_dest\",\n \"writable\": true\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"WithdrawFeesParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"withdraw_local\",\n \"discriminator\": [\n 112,\n 250,\n 134,\n 10,\n 96,\n 9,\n 236,\n 176\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"token_escrow\",\n \"writable\": true\n },\n {\n \"name\": \"token_dest\",\n \"writable\": true\n },\n {\n \"name\": \"token_mint\"\n },\n {\n \"name\": \"token_program\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"WithdrawLocalParams\"\n }\n }\n }\n ]\n },\n {\n \"name\": \"withdraw_remote\",\n \"discriminator\": [\n 135,\n 200,\n 45,\n 240,\n 165,\n 104,\n 44,\n 102\n ],\n \"accounts\": [\n {\n \"name\": \"admin\",\n \"signer\": true\n },\n {\n \"name\": \"oft_store\"\n },\n {\n \"name\": \"credits\",\n \"writable\": true\n },\n {\n \"name\": \"peer\"\n },\n {\n \"name\": \"event_authority\"\n },\n {\n \"name\": \"program\"\n }\n ],\n \"args\": [\n {\n \"name\": \"params\",\n \"type\": {\n \"defined\": {\n \"name\": \"SendParams\"\n }\n }\n }\n ],\n \"returns\": {\n \"defined\": {\n \"name\": \"MessagingReceipt\"\n }\n }\n }\n ],\n \"accounts\": [\n {\n \"name\": \"Credits\",\n \"discriminator\": [\n 167,\n 92,\n 156,\n 89,\n 224,\n 222,\n 250,\n 237\n ]\n },\n {\n \"name\": \"EndpointSettings\",\n \"discriminator\": [\n 221,\n 232,\n 73,\n 56,\n 10,\n 66,\n 72,\n 14\n ]\n },\n {\n \"name\": \"OFTStore\",\n \"discriminator\": [\n 195,\n 215,\n 104,\n 134,\n 185,\n 195,\n 240,\n 114\n ]\n },\n {\n \"name\": \"PeerConfig\",\n \"discriminator\": [\n 181,\n 157,\n 86,\n 198,\n 33,\n 193,\n 94,\n 203\n ]\n }\n ],\n \"events\": [\n {\n \"name\": \"AddressLookupTableSet\",\n \"discriminator\": [\n 54,\n 206,\n 97,\n 134,\n 147,\n 43,\n 12,\n 34\n ]\n },\n {\n \"name\": \"BurnAndNilifyAdminSet\",\n \"discriminator\": [\n 198,\n 129,\n 215,\n 13,\n 129,\n 143,\n 91,\n 13\n ]\n },\n {\n \"name\": \"CreditsReceived\",\n \"discriminator\": [\n 247,\n 1,\n 147,\n 84,\n 187,\n 118,\n 0,\n 23\n ]\n },\n {\n \"name\": \"CreditsSent\",\n \"discriminator\": [\n 227,\n 230,\n 87,\n 90,\n 214,\n 189,\n 44,\n 241\n ]\n },\n {\n \"name\": \"EnforcedOptionsSet\",\n \"discriminator\": [\n 146,\n 122,\n 60,\n 148,\n 172,\n 173,\n 245,\n 181\n ]\n },\n {\n \"name\": \"FeeBpsSet\",\n \"discriminator\": [\n 157,\n 56,\n 175,\n 190,\n 219,\n 193,\n 106,\n 208\n ]\n },\n {\n \"name\": \"FeesWithdrawn\",\n \"discriminator\": [\n 234,\n 15,\n 0,\n 119,\n 148,\n 241,\n 40,\n 21\n ]\n },\n {\n \"name\": \"LocalDeposit\",\n \"discriminator\": [\n 137,\n 122,\n 12,\n 175,\n 43,\n 253,\n 64,\n 206\n ]\n },\n {\n \"name\": \"LocalWithdrawn\",\n \"discriminator\": [\n 123,\n 143,\n 13,\n 174,\n 243,\n 234,\n 207,\n 102\n ]\n },\n {\n \"name\": \"LpAdminSet\",\n \"discriminator\": [\n 204,\n 123,\n 111,\n 142,\n 215,\n 147,\n 149,\n 241\n ]\n },\n {\n \"name\": \"OFTReceived\",\n \"discriminator\": [\n 144,\n 129,\n 112,\n 67,\n 144,\n 152,\n 201,\n 42\n ]\n },\n {\n \"name\": \"OFTSent\",\n \"discriminator\": [\n 108,\n 171,\n 219,\n 2,\n 189,\n 21,\n 110,\n 110\n ]\n },\n {\n \"name\": \"PeerAddressSet\",\n \"discriminator\": [\n 23,\n 136,\n 173,\n 207,\n 43,\n 0,\n 240,\n 232\n ]\n },\n {\n \"name\": \"PlannerSet\",\n \"discriminator\": [\n 15,\n 204,\n 218,\n 142,\n 168,\n 147,\n 236,\n 100\n ]\n },\n {\n \"name\": \"RemoteWithdrawReceived\",\n \"discriminator\": [\n 19,\n 91,\n 253,\n 185,\n 110,\n 208,\n 124,\n 198\n ]\n },\n {\n \"name\": \"RemoteWithdrawn\",\n \"discriminator\": [\n 97,\n 15,\n 220,\n 84,\n 178,\n 82,\n 9,\n 250\n ]\n },\n {\n \"name\": \"SuperAdminSet\",\n \"discriminator\": [\n 138,\n 32,\n 131,\n 104,\n 28,\n 14,\n 79,\n 204\n ]\n }\n ],\n \"errors\": [\n {\n \"code\": 6000,\n \"name\": \"Unauthorized\"\n },\n {\n \"code\": 6001,\n \"name\": \"InvalidSender\"\n },\n {\n \"code\": 6002,\n \"name\": \"InvalidDecimals\"\n },\n {\n \"code\": 6003,\n \"name\": \"SlippageExceeded\"\n },\n {\n \"code\": 6004,\n \"name\": \"InvalidTokenDest\"\n },\n {\n \"code\": 6005,\n \"name\": \"InsufficientFeeBalance\"\n },\n {\n \"code\": 6006,\n \"name\": \"InvalidAmount\"\n },\n {\n \"code\": 6007,\n \"name\": \"InsufficientCredits\"\n },\n {\n \"code\": 6008,\n \"name\": \"InvalidEID\"\n },\n {\n \"code\": 6009,\n \"name\": \"InvalidMessage\"\n },\n {\n \"code\": 6010,\n \"name\": \"InvalidFeeBps\"\n },\n {\n \"code\": 6011,\n \"name\": \"TONComposeNotSupported\"\n }\n ],\n \"types\": [\n {\n \"name\": \"AccountMetaRef\",\n \"docs\": [\n \"Account metadata for V2 execution planning.\",\n \"Used by the Executor to construct the final transaction.\",\n \"\",\n \"V2 removes the legacy is_signer flag from V1's AccountMeta.\",\n \"Instead, signer roles are explicitly declared through AddressLocator variants.\",\n \"This provides clearer semantics and enables multiple signer support.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"pubkey\",\n \"docs\": [\n \"The account address locator - supports multiple resolution strategies\"\n ],\n \"type\": {\n \"defined\": {\n \"name\": \"AddressLocator\"\n }\n }\n },\n {\n \"name\": \"is_writable\",\n \"docs\": [\n \"Whether the account should be writable in the final transaction\"\n ],\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"AddressLocator\",\n \"docs\": [\n \"A generic account locator used in LZ execution planning for V2.\",\n \"Can reference the address directly, via ALT, or as a placeholder.\",\n \"\",\n \"This enum enables the compact account referencing design of V2, supporting:\",\n \"- OApps to request multiple signer accounts, not just a single Executor EOA\",\n \"- Dynamic creation of writable EOA-based data accounts\",\n \"- Efficient encoding of addresses via ALTs, reducing account list size\",\n \"\",\n \"The legacy is_signer flag is removed. Instead, signer roles are explicitly\",\n \"declared through Payer and indexed Signer(u8) variants.\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Address\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"AltIndex\",\n \"fields\": [\n \"u8\",\n \"u8\"\n ]\n },\n {\n \"name\": \"Payer\"\n },\n {\n \"name\": \"Signer\",\n \"fields\": [\n \"u8\"\n ]\n },\n {\n \"name\": \"Context\"\n }\n ]\n }\n },\n {\n \"name\": \"AddressLookupTableSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"BurnAndNilifyAdminSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"BurnParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"sender\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"payload_hash\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"Credits\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"entries\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"CreditsEntry\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"CreditsBatch\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"credits_arbitrum\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_celo\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_eth\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_solana\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_ton\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"credits_tron\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"CreditsEntry\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"CreditsReceived\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"message\",\n \"type\": \"bytes\"\n }\n ]\n }\n },\n {\n \"name\": \"CreditsSent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"credits_batch\",\n \"type\": {\n \"defined\": {\n \"name\": \"CreditsBatch\"\n }\n }\n },\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"DepositLocalParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"EndpointSettings\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lz_token_mint\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"EnforcedOptions\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"withdraw_remote\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_oft\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_credits\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_oft_and_call\",\n \"type\": \"bytes\"\n }\n ]\n }\n },\n {\n \"name\": \"EnforcedOptionsSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"send\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_and_call\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_credits\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"withdraw_remote\",\n \"type\": \"bytes\"\n }\n ]\n }\n },\n {\n \"name\": \"FeeBpsSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"fee_bps\",\n \"type\": \"u16\"\n }\n ]\n }\n },\n {\n \"name\": \"FeesWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"to\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"InitOFTParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"super_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"endpoint_program\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n },\n {\n \"name\": \"alt\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"Instruction\",\n \"docs\": [\n \"The list of instructions that can be executed in the LzReceive transaction.\",\n \"\",\n \"V2's multi-instruction model enables complex patterns such as:\",\n \"- Preprocessing steps before lz_receive (e.g., account initialization)\",\n \"- Postprocessing steps after lz_receive (e.g., verification, cleanup)\",\n \"- ABA messaging patterns with additional LayerZero sends\",\n \"- Conditional execution flows based on message content\"\n ],\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"LzReceive\",\n \"fields\": [\n {\n \"name\": \"accounts\",\n \"docs\": [\n \"Account list for the lz_receive instruction\",\n \"Uses AddressLocator for flexible address resolution\"\n ],\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"AccountMetaRef\"\n }\n }\n }\n }\n ]\n },\n {\n \"name\": \"Standard\",\n \"fields\": [\n {\n \"name\": \"program_id\",\n \"docs\": [\n \"Target program ID for the custom instruction\"\n ],\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"accounts\",\n \"docs\": [\n \"Account list for the custom instruction\",\n \"Uses same AddressLocator system as LzReceive\"\n ],\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"AccountMetaRef\"\n }\n }\n }\n },\n {\n \"name\": \"data\",\n \"docs\": [\n \"Instruction data payload\",\n \"Raw bytes containing the instruction's parameters\"\n ],\n \"type\": \"bytes\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"LocalDeposit\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"LocalWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"to\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"LpAdminSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"LzReceiveParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"sender\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"message\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"extra_data\",\n \"type\": \"bytes\"\n }\n ]\n }\n },\n {\n \"name\": \"LzReceiveTypesV2Result\",\n \"docs\": [\n \"Output of the lz_receive_types_v2 instruction.\",\n \"\",\n \"This structure enables the multi-instruction execution model where OApps can\",\n \"define multiple instructions to be executed atomically by the Executor.\",\n \"The Executor constructs a single transaction containing all returned instructions.\"\n ],\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"context_version\",\n \"docs\": [\n \"The version of context account\"\n ],\n \"type\": \"u8\"\n },\n {\n \"name\": \"alts\",\n \"docs\": [\n \"ALTs required for this execution context\",\n \"Used by the Executor to resolve AltIndex references in AccountMetaRef\",\n \"Enables efficient account list compression for complex transactions\"\n ],\n \"type\": {\n \"vec\": \"pubkey\"\n }\n },\n {\n \"name\": \"instructions\",\n \"docs\": [\n \"The complete list of instructions required for LzReceive execution\",\n \"MUST include exactly one LzReceive instruction\",\n \"MAY include additional Standard instructions for preprocessing/postprocessing\",\n \"Instructions are executed in the order returned\"\n ],\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"Instruction\"\n }\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"MessagingFee\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"native_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lz_token_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"MessagingReceipt\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"fee\",\n \"type\": {\n \"defined\": {\n \"name\": \"MessagingFee\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"NilifyParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"sender\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"nonce\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"payload_hash\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"OFTFeeDetail\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"fee_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"description\",\n \"type\": \"string\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTLimits\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"min_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"max_amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTReceipt\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_sent_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount_received_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTReceived\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_received_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTSent\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"from\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_sent_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"amount_received_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"OFTStore\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"token_mint\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"token_escrow\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"endpoint_program\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n },\n {\n \"name\": \"fee_balance\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"super_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"planner\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"lp_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"burn_and_nilify_admin\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"fee_bps\",\n \"type\": \"u16\"\n },\n {\n \"name\": \"alt\",\n \"type\": {\n \"option\": \"pubkey\"\n }\n }\n ]\n }\n },\n {\n \"name\": \"PeerAddressSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n }\n ]\n }\n },\n {\n \"name\": \"PeerConfig\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"peer_address\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"enforced_options\",\n \"type\": {\n \"defined\": {\n \"name\": \"EnforcedOptions\"\n }\n }\n },\n {\n \"name\": \"bump\",\n \"type\": \"u8\"\n }\n ]\n }\n },\n {\n \"name\": \"PeerConfigParam\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"PeerAddress\",\n \"fields\": [\n {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n ]\n },\n {\n \"name\": \"EnforcedOptions\",\n \"fields\": [\n {\n \"name\": \"send\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_and_call\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"send_credits\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"withdraw_remote\",\n \"type\": \"bytes\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"PlannerSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"QuoteOFTParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"compose_msg\",\n \"type\": {\n \"option\": \"bytes\"\n }\n },\n {\n \"name\": \"pay_in_lz_token\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"QuoteOFTResult\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"oft_limits\",\n \"type\": {\n \"defined\": {\n \"name\": \"OFTLimits\"\n }\n }\n },\n {\n \"name\": \"oft_fee_details\",\n \"type\": {\n \"vec\": {\n \"defined\": {\n \"name\": \"OFTFeeDetail\"\n }\n }\n }\n },\n {\n \"name\": \"oft_receipt\",\n \"type\": {\n \"defined\": {\n \"name\": \"OFTReceipt\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"QuoteSendCreditsParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"credits_batch\",\n \"type\": {\n \"defined\": {\n \"name\": \"CreditsBatch\"\n }\n }\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"pay_in_lz_token\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"QuoteSendParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"compose_msg\",\n \"type\": {\n \"option\": \"bytes\"\n }\n },\n {\n \"name\": \"pay_in_lz_token\",\n \"type\": \"bool\"\n }\n ]\n }\n },\n {\n \"name\": \"RemoteWithdrawReceived\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"src_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": \"pubkey\"\n },\n {\n \"name\": \"amount_received_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"RemoteWithdrawn\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"guid\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SendCreditsParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"credits_batch\",\n \"type\": {\n \"defined\": {\n \"name\": \"CreditsBatch\"\n }\n }\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"native_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lz_token_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SendParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"dst_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"to\",\n \"type\": {\n \"array\": [\n \"u8\",\n 32\n ]\n }\n },\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"min_amount_ld\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"extra_options\",\n \"type\": \"bytes\"\n },\n {\n \"name\": \"compose_msg\",\n \"type\": {\n \"option\": \"bytes\"\n }\n },\n {\n \"name\": \"native_fee\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"lz_token_fee\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"SetOFTConfigParams\",\n \"type\": {\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"SuperAdmin\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"Delegate\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"Planner\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"LpAdmin\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"BurnAndNilifyAdmin\",\n \"fields\": [\n \"pubkey\"\n ]\n },\n {\n \"name\": \"FeeBps\",\n \"fields\": [\n \"u16\"\n ]\n },\n {\n \"name\": \"AddressLookupTable\",\n \"fields\": [\n {\n \"option\": \"pubkey\"\n }\n ]\n }\n ]\n }\n },\n {\n \"name\": \"SetPeerConfigParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"remote_eid\",\n \"type\": \"u32\"\n },\n {\n \"name\": \"config\",\n \"type\": {\n \"defined\": {\n \"name\": \"PeerConfigParam\"\n }\n }\n }\n ]\n }\n },\n {\n \"name\": \"SuperAdminSet\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"address\",\n \"type\": \"pubkey\"\n }\n ]\n }\n },\n {\n \"name\": \"Version\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"interface\",\n \"type\": \"u64\"\n },\n {\n \"name\": \"message\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"WithdrawFeesParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n },\n {\n \"name\": \"WithdrawLocalParams\",\n \"type\": {\n \"kind\": \"struct\",\n \"fields\": [\n {\n \"name\": \"amount_ld\",\n \"type\": \"u64\"\n }\n ]\n }\n }\n ]\n};\n","import { USDT0_CONFIG, USDT0_DVN_COUNT } from \"./config\";\nimport { OFT_ABI, SOLANA_IDL } from \"./contract\";\nimport { getRequest, SendType } from \"@stableflow/core\";\nimport { Service } from \"@stableflow/core\";\nimport { OpenAPI } from '@stableflow/core';\nimport { request } from '@stableflow/core';\nimport { ExecTime } from \"@stableflow/core\";\nimport { calculateEstimateTime } from \"../utils\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\nimport Big from \"big.js\";\nimport { Csl } from \"@stableflow/core\";\n\nexport const PayInLzToken = false;\n\nexport const excludeFees: string[] = [\"estimateGasUsd\"];\n\nexport class Usdt0Service {\n public async quote(params: any) {\n const {\n dry,\n wallet,\n originChain,\n destinationChain,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n } = params;\n\n const _quoteType = `Usdt0Service ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"lime-600\", isDebug: OpenAPI.DEBUG });\n\n const originLayerzero = USDT0_CONFIG[originChain];\n const destinationLayerzero = USDT0_CONFIG[destinationChain];\n\n let originLayerzeroAddress = originLayerzero.oft;\n let destinationLayerzeroAddress = destinationLayerzero.oft;\n let dstEid = destinationLayerzero.eid;\n\n // Dynamically calculate estimated time\n const estimateTime = calculateEstimateTime({\n requiredDvnCount: USDT0_DVN_COUNT,\n originConfig: originLayerzero,\n destinationConfig: destinationLayerzero,\n });\n\n if (fromToken.chainType === \"evm\") {\n destinationLayerzeroAddress = destinationLayerzero.oft || destinationLayerzero.oftLegacy;\n let isOriginLegacy = false;\n let isDestinationLegacy = destinationLayerzeroAddress === destinationLayerzero.oftLegacy;\n if (isDestinationLegacy) {\n originLayerzeroAddress = originLayerzero.oftLegacy || originLayerzero.oft;\n isOriginLegacy = originLayerzeroAddress === originLayerzero.oftLegacy;\n }\n if (!originLayerzeroAddress) {\n originLayerzeroAddress = originLayerzero.oftLegacy;\n isOriginLegacy = true;\n if (destinationLayerzero.oftLegacy) {\n destinationLayerzeroAddress = destinationLayerzero.oftLegacy;\n isDestinationLegacy = true;\n }\n }\n const isBothLegacy = isOriginLegacy && isDestinationLegacy;\n const isBothOUpgradeable = !isOriginLegacy && !isDestinationLegacy;\n const isMultiHopComposer = !isBothLegacy && !isBothOUpgradeable;\n\n const result = await wallet.quote(Service.Usdt0, {\n dry,\n abi: OFT_ABI,\n dstEid,\n refundTo,\n recipient,\n amountWei,\n slippageTolerance,\n payInLzToken: PayInLzToken,\n fromToken,\n toToken,\n prices,\n originLayerzeroAddress,\n destinationLayerzeroAddress,\n excludeFees,\n multiHopComposer: USDT0_CONFIG[\"Arbitrum\"],\n isMultiHopComposer,\n isOriginLegacy,\n isDestinationLegacy,\n originLayerzero,\n destinationLayerzero,\n });\n\n result.estimateTime = estimateTime;\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"Usdt0Service.quote\");\n return result;\n }\n\n // source chain must be legacy\n const isOriginLegacy = true;\n originLayerzeroAddress = originLayerzero.oftLegacy;\n destinationLayerzeroAddress = destinationLayerzero.oftLegacy || destinationLayerzero.oft;\n const isDestinationLegacy = destinationLayerzeroAddress === destinationLayerzero.oftLegacy;\n const isBothLegacy = isOriginLegacy && isDestinationLegacy;\n const isMultiHopComposer = !isBothLegacy;\n\n // one is legacy, and one is upgradeable\n // should use multi hop composer\n // and special extraOptions & composeMsg\n if (isMultiHopComposer) {\n dstEid = USDT0_CONFIG[\"Arbitrum\"].eid;\n destinationLayerzeroAddress = USDT0_CONFIG[\"Arbitrum\"].oftMultiHopComposer;\n }\n\n const oftParams: any = {\n dry,\n dstEid: destinationLayerzero.eid,\n refundTo,\n recipient,\n amountWei,\n slippageTolerance,\n payInLzToken: PayInLzToken,\n fromToken,\n toToken,\n prices,\n originLayerzeroAddress,\n destinationLayerzeroAddress,\n excludeFees,\n multiHopComposer: USDT0_CONFIG[\"Arbitrum\"],\n isMultiHopComposer,\n isOriginLegacy,\n isDestinationLegacy,\n originLayerzero,\n destinationLayerzero,\n };\n\n if (fromToken.chainType === \"tron\") {\n oftParams.abi = OFT_ABI;\n }\n\n if (fromToken.chainType === \"sol\") {\n oftParams.idl = SOLANA_IDL;\n }\n\n const result = await wallet.quote(Service.Usdt0, {\n idl: SOLANA_IDL,\n ...oftParams,\n });\n\n result.estimateTime = estimateTime;\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"Usdt0Service.quote\");\n\n return result;\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const {\n fromToken,\n amountWei,\n wallet,\n prices,\n evmGasFees,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const result: any = { fees: {}, ...quoteData };\n\n const isFromTron = fromToken.chainType === \"tron\";\n const nativeTokenDecimals = fromToken.nativeToken.decimals;\n\n const estimateTransactionParams = {\n dry: false,\n ...quoteData.sendParam,\n fromToken,\n prices,\n evmGasFees,\n };\n if (isFromTron) {\n estimateTransactionParams.defaultEnergyUsed = 300000;\n estimateTransactionParams.defaultRawDataHexLength = 1000;\n }\n const ett = await wallet.estimateTransaction(estimateTransactionParams);\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n result.totalEstimateSourceGas = BigInt(Big(quoteData.fees?.nativeFee || 0).times(10 ** nativeTokenDecimals).toFixed(0)) + ett.estimateSourceGas;\n\n if (result.needApprove && wallet.estimateApprove) {\n const estApptroveGas = await wallet.estimateApprove({\n dry: false,\n amountWei,\n spender: result.approveSpender,\n fromToken,\n prices,\n });\n result.estimateApproveGas = estApptroveGas.estimateSourceGas;\n }\n\n result.totalFeesUsd = \"0\";\n for (const feeKey in result.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd).toFixed(20));\n\n if (fromToken.chainType === \"evm\") {\n const sendParams = result.sendParam?.param;\n if (\n sendParams\n && Array.isArray(sendParams)\n && sendParams[sendParams.length - 1]\n && typeof sendParams[sendParams.length - 1] === \"object\"\n && sendParams[sendParams.length - 1].gasLimit !== void 0\n ) {\n csl(\"USDT0Service estimateTransaction\", \"green-500\", \"Old gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n sendParams[sendParams.length - 1].gasLimit = ett.estimateSourceGasLimit;\n csl(\"USDT0Service estimateTransaction\", \"green-500\", \"Updated gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n }\n }\n\n return result;\n }\n\n public async send(params: any) {\n const {\n wallet,\n ...rest\n } = params;\n\n return wallet.send(SendType.SEND, rest);\n }\n\n public getStatus(params: any) {\n return getRequest(`/v0/messages/tx/${params.hash}`);\n }\n}\n\nexport default new Usdt0Service();\n","\n// https://developers.circle.com/cctp/evm-smart-contracts#tokenmessengerv2-mainnet\nexport const CCTP_TOKEN_MESSENGER: Record<string, string> = {\n [\"Ethereum\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Arbitrum\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Polygon\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Optimism\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Avalanche\"]: \"0x28b5a0e9C621a5BadaA536219b3a228C8168cf5d\",\n [\"Solana\"]: \"CCTPV2vPZJS2u2BBsUoscuikbYjnpFmbFsvVuJdgUMQe\",\n};\n\nexport const CCTP_TOKEN_PROXY: Record<string, string> = {\n [\"Ethereum\"]: \"0x54Cf68aB8f68813F2a2dF20Af72D19c44485a0b2\",\n [\"Arbitrum\"]: \"0x54Cf68aB8f68813F2a2dF20Af72D19c44485a0b2\",\n [\"Polygon\"]: \"0x7A18854b695BA7efB7229c17D0E1Cd2679481D28\",\n [\"Optimism\"]: \"0x54Cf68aB8f68813F2a2dF20Af72D19c44485a0b2\",\n [\"Avalanche\"]: \"0xB6E3a1165aC3E0c370e316C27E959482460dBeDD\",\n [\"Solana\"]: \"8whUZNSbjJXC2UDRpo3PXo5MHzhptwVTTwpSYuTgQJNY\",\n [\"Base\"]: \"0x7092B8E5445Fca836B0f9780c77C38C7cbb9A43D\",\n};\n\nexport const CCTP_TOKEN_MESSENGER_ABI = [\n {\n type: \"function\",\n name: \"depositForBurn\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"amount\", type: \"uint256\" },\n { name: \"destinationDomain\", type: \"uint32\" },\n { name: \"mintRecipient\", type: \"bytes32\" },\n { name: \"burnToken\", type: \"address\" },\n { name: \"hookData\", type: \"bytes32\" },\n { name: \"maxFee\", type: \"uint256\" },\n { name: \"finalityThreshold\", type: \"uint32\" },\n ],\n outputs: [],\n },\n {\n type: \"function\",\n name: \"receiveMessage\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"message\", type: \"bytes\" },\n { name: \"attestation\", type: \"bytes\" },\n ],\n outputs: [],\n },\n];\n\nexport const CCTP_TOKEN_PROXY_ABI = [\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"originalAmount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"chargedAmount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"destinationDomain\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"mintRecipient\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"burnToken\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"destinationCaller\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"maxFee\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"minFinalityThreshold\",\n \"type\": \"uint32\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"signature\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"depositWithFee\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"userNonces\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n }\n];\n","export const IRIS_API_URL = \"https://iris-api.circle.com/v2\";\n\nexport const CCTP_DOMAINS: Record<string, number> = {\n Ethereum: 0,\n Arbitrum: 3,\n Polygon: 7,\n Optimism: 2,\n Avalanche: 1,\n Solana: 5,\n Base: 6,\n};\n","import { CCTP_TOKEN_PROXY, CCTP_TOKEN_PROXY_ABI } from \"./contract\";\nimport { CCTP_DOMAINS } from \"./config\";\nimport { getRequest, GetStatusParams, GetStatusStableflowResponse, OpenAPI } from '@stableflow/core';\nimport { SendType } from \"@stableflow/core\";\nimport { Service } from \"@stableflow/core\";\nimport Big from \"big.js\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\n\nexport const PayInLzToken = false;\n\nconst excludeFees: string[] = [\"estimateGasUsd\"];\n\nexport class CCTPService {\n constructor() {\n }\n\n public async quote(params: any) {\n const {\n dry,\n wallet,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n } = params;\n\n const _quoteType = `CCTPService ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"indigo-500\", isDebug: OpenAPI.DEBUG });\n\n const sourceDomain = CCTP_DOMAINS[fromToken.chainName];\n const destinationDomain = CCTP_DOMAINS[toToken.chainName];\n const proxyAddress = CCTP_TOKEN_PROXY[fromToken.chainName];\n\n const result = await wallet.quote(Service.CCTP, {\n dry,\n proxyAddress,\n abi: CCTP_TOKEN_PROXY_ABI,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n excludeFees,\n destinationDomain,\n sourceDomain,\n });\n\n execTime.logTotal(\"CCTPService.quote\");\n result.sourceQuoteParams = params;\n\n return result;\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const {\n fromToken,\n wallet,\n prices,\n evmGasFees,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const result: any = { fees: {}, ...quoteData };\n\n const ett = await wallet.estimateTransaction({\n dry: false,\n ...quoteData.sendParam,\n fromToken,\n prices,\n evmGasFees,\n });\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n result.totalFeesUsd = \"0\";\n for (const feeKey in result.fees) {\n if (excludeFees.includes(feeKey) || !/Usd$/.test(feeKey)) {\n continue;\n }\n result.totalFeesUsd = Big(result.totalFeesUsd || 0).plus(result.fees[feeKey] || 0);\n }\n result.totalFeesUsd = numberRemoveEndZero(Big(result.totalFeesUsd).toFixed(20));\n\n if (fromToken.chainType === \"evm\") {\n const sendParams = result.sendParam?.param;\n if (\n sendParams\n && Array.isArray(sendParams)\n && sendParams[sendParams.length - 1]\n && typeof sendParams[sendParams.length - 1] === \"object\"\n && sendParams[sendParams.length - 1].gasLimit !== void 0\n ) {\n csl(\"CCTPService estimateTransaction\", \"green-500\", \"Old gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n sendParams[sendParams.length - 1].gasLimit = ett.estimateSourceGasLimit;\n csl(\"CCTPService estimateTransaction\", \"green-500\", \"Updated gasLimit: %o\", sendParams[sendParams.length - 1].gasLimit);\n }\n }\n\n return result;\n }\n\n public async send(params: any) {\n const {\n wallet,\n ...rest\n } = params;\n\n return wallet.send(SendType.SEND, rest);\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new CCTPService();\n","import { frxusdChains } from \"@stableflow/core\";\nimport { usdcChains } from \"@stableflow/core\";\nimport { LayerZeroChainConfig, LAYERZZERO_CHAINS } from \"../utils\";\n\nexport interface FraxZeroConfig extends LayerZeroChainConfig {\n remoteHop?: string;\n lockbox?: string;\n programId?: string;\n mint?: string;\n escrow?: string;\n confirmations: number;\n oftApprovalRequired?: boolean;\n oftLegacyApprovalRequired?: boolean;\n}\n\n// DVN count: frax-finance uses 3 DVNs (fixed value)\nexport const FRAXZERO_REQUIRED_DVN_COUNT = 3;\n\n// FraxZero RemoteHop config, see https://docs.frax.com/frxusd/fraxzero-supported-networks\n// Chain names match chainName in frxusdChains, excluding Fraxtal\n// confirmation counts: visit https://layerzeroscan.com/application/frax-finance, filter by the desired source chain, and check the \"confirmations\" value at the bottom of the page.\nexport const FRAXZERO_CONFIG: Record<string, FraxZeroConfig> = {\n Ethereum: {\n ...LAYERZZERO_CHAINS[\"Ethereum\"],\n remoteHop: \"0x3ad4dC2319394bB4BE99A0e4aE2AbF7bCEbD648E\",\n lockbox: \"0x566a6442a5a6e9895b9dca97cc7879d632c6e4b0\",\n confirmations: 15,\n oftApprovalRequired: true,\n },\n Arbitrum: {\n ...LAYERZZERO_CHAINS[\"Arbitrum\"],\n remoteHop: \"0x29F5DBD0FE72d8f11271FCBE79Cb87E18a83C70A\",\n confirmations: 20,\n oftApprovalRequired: true,\n },\n Avalanche: {\n ...LAYERZZERO_CHAINS[\"Avalanche\"],\n remoteHop: \"0x7a07D606c87b7251c2953A30Fa445d8c5F856C7A\",\n confirmations: 12,\n oftApprovalRequired: true,\n },\n Berachain: {\n ...LAYERZZERO_CHAINS[\"Berachain\"],\n remoteHop: \"0xc71BF5Ee4740405030eF521F18A96eA14fec802D\",\n confirmations: 20,\n oftApprovalRequired: true,\n },\n \"BNB Chain\": {\n ...LAYERZZERO_CHAINS[\"BNB Chain\"],\n remoteHop: \"0x452420df4AC1e3db5429b5FD629f3047482C543C\",\n confirmations: 20,\n oftApprovalRequired: true,\n },\n Optimism: {\n ...LAYERZZERO_CHAINS[\"Optimism\"],\n remoteHop: \"0x31D982ebd82Ad900358984bd049207A4c2468640\",\n confirmations: 20,\n oftApprovalRequired: true,\n },\n Polygon: {\n ...LAYERZZERO_CHAINS[\"Polygon\"],\n remoteHop: \"0xf74D38A26948E9DDa53eD85cF03C6b1188FbB30C\",\n confirmations: 512,\n oftApprovalRequired: true,\n },\n \"X Layer\": {\n ...LAYERZZERO_CHAINS[\"X Layer\"],\n remoteHop: \"0x79152c303AD5aE429eDefa4553CB1Ad2c6EE1396\",\n confirmations: 225000,\n oftApprovalRequired: true,\n },\n Solana: {\n ...LAYERZZERO_CHAINS[\"Solana\"],\n programId: \"E1ht9dUh1ZkgWWRRPCuN3kExEoF2FXiyADXeN3XyMHaQ\",\n escrow: \"84AFSH3TSzyjbEFJX9z8sjpV7npTWq7f8ZR5zkLG22hX\",\n confirmations: 32,\n oftApprovalRequired: false,\n },\n Fraxtal: {\n ...LAYERZZERO_CHAINS[\"Fraxtal\"],\n lockbox: \"0x96A394058E2b84A89bac9667B19661Ed003cF5D4\",\n confirmations: 5,\n oftApprovalRequired: true,\n },\n Katana: {\n ...LAYERZZERO_CHAINS[\"Katana\"],\n remoteHop: \"0x5d8eb59a12bc98708702305a7b032f4b69dd5b5c\",\n confirmations: 5,\n oftApprovalRequired: true,\n },\n};\n\nexport const FRAXZERO_MIDDLE_TOKEN_USDC = usdcChains[\"eth\"];\nexport const FRAXZERO_MIDDLE_TOKEN_FRXUSD = frxusdChains[\"eth\"];\nexport const FRAXZERO_MIDDLE_CHAIN_REFOUND_ADDRESS = \"0x654E7B96E1DE0b54E53D9ae8082fC2219E66dAC3\";\n\nexport const FRAXZERO_REDEEM_USDC_CONTRACT = \"0x4F95C5bA0C7c69FB2f9340E190cCeE890B3bd87c\";\nexport const FRAXZERO_REDEEM_RWA_CONTRACT = \"0x5fbAa3A3B489199338fbD85F7E3D444dc0504F33\";\nexport const FRAXZERO_REDEMPTION_CONTRACT = \"0x4c21B7577C8FE8b0B0669165ee7C8f67fa1454Cf\";\n\nexport const FRAXZERO_REDEEM_AND_MINT_CONTRACT = \"0x466c34Fb4a758e80eBc7Ea7e636B755A0AE10397\";\n\n// gas amount = gas limit * gas price\nexport const FRAXZERO_GAS_USED = {\n REDEEM: 0n, // 358964n\n MINT: {\n TO_SOL: 0n, // 756271n\n TO_FRAXTAL: 0n, // 660997n\n TO_ETHEREUM: 0n, // 334550n\n SEND: 0n, // 756271n\n },\n};\n","export const FRAXZERO_ABI = [\n {\n \"inputs\": [\n { \"internalType\": \"bytes32\", \"name\": \"_fraxtalHop\", \"type\": \"bytes32\" },\n { \"internalType\": \"uint256\", \"name\": \"_numDVNs\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"_EXECUTOR\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"_DVN\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"_TREASURY\", \"type\": \"address\" },\n { \"internalType\": \"address[]\", \"name\": \"_approvedOfts\", \"type\": \"address[]\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"target\", \"type\": \"address\" }\n ],\n \"name\": \"AddressEmptyCode\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n ],\n \"name\": \"AddressInsufficientBalance\",\n \"type\": \"error\"\n },\n { \"inputs\": [], \"name\": \"FailedInnerCall\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"HopPaused\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"InsufficientFee\", \"type\": \"error\" },\n { \"inputs\": [], \"name\": \"InvalidOFT\", \"type\": \"error\" },\n {\n \"inputs\": [\n { \"internalType\": \"uint16\", \"name\": \"optionType\", \"type\": \"uint16\" }\n ],\n \"name\": \"InvalidOptionType\",\n \"type\": \"error\"\n },\n { \"inputs\": [], \"name\": \"NotEndpoint\", \"type\": \"error\" },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" }\n ],\n \"name\": \"OwnableInvalidOwner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"account\", \"type\": \"address\" }\n ],\n \"name\": \"OwnableUnauthorizedAccount\",\n \"type\": \"error\"\n },\n { \"inputs\": [], \"name\": \"RefundFailed\", \"type\": \"error\" },\n {\n \"inputs\": [\n { \"internalType\": \"uint8\", \"name\": \"bits\", \"type\": \"uint8\" },\n { \"internalType\": \"uint256\", \"name\": \"value\", \"type\": \"uint256\" }\n ],\n \"name\": \"SafeCastOverflowedUintDowncast\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"token\", \"type\": \"address\" }\n ],\n \"name\": \"SafeERC20FailedOperation\",\n \"type\": \"error\"\n },\n { \"inputs\": [], \"name\": \"ZeroAmountSend\", \"type\": \"error\" },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"previousOwner\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n ],\n \"name\": \"OwnershipTransferStarted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"previousOwner\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n { \"indexed\": false, \"internalType\": \"address\", \"name\": \"oft\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"address\", \"name\": \"sender\", \"type\": \"address\" },\n { \"indexed\": true, \"internalType\": \"uint32\", \"name\": \"dstEid\", \"type\": \"uint32\" },\n { \"indexed\": true, \"internalType\": \"bytes32\", \"name\": \"to\", \"type\": \"bytes32\" },\n { \"indexed\": false, \"internalType\": \"uint256\", \"name\": \"amountLD\", \"type\": \"uint256\" }\n ],\n \"name\": \"SendOFT\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"DVN\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"EXECUTOR\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"TREASURY\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"acceptOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"name\": \"approvedOft\",\n \"outputs\": [\n { \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint32\", \"name\": \"\", \"type\": \"uint32\" }\n ],\n \"name\": \"executorOptions\",\n \"outputs\": [\n { \"internalType\": \"bytes\", \"name\": \"\", \"type\": \"bytes\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"fraxtalHop\",\n \"outputs\": [\n { \"internalType\": \"bytes32\", \"name\": \"\", \"type\": \"bytes32\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"hopFee\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"numDVNs\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"bool\", \"name\": \"_paused\", \"type\": \"bool\" }\n ],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n { \"internalType\": \"bool\", \"name\": \"\", \"type\": \"bool\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"pendingOwner\",\n \"outputs\": [\n { \"internalType\": \"address\", \"name\": \"\", \"type\": \"address\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"_oft\", \"type\": \"address\" },\n { \"internalType\": \"uint32\", \"name\": \"_dstEid\", \"type\": \"uint32\" },\n { \"internalType\": \"bytes32\", \"name\": \"_to\", \"type\": \"bytes32\" },\n { \"internalType\": \"uint256\", \"name\": \"_amountLD\", \"type\": \"uint256\" }\n ],\n \"name\": \"quote\",\n \"outputs\": [\n {\n \"components\": [\n { \"internalType\": \"uint256\", \"name\": \"nativeFee\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"lzTokenFee\", \"type\": \"uint256\" }\n ],\n \"internalType\": \"struct MessagingFee\",\n \"name\": \"fee\",\n \"type\": \"tuple\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint32\", \"name\": \"_dstEid\", \"type\": \"uint32\" }\n ],\n \"name\": \"quoteHop\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"finalFee\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"tokenAddress\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"tokenAmount\", \"type\": \"uint256\" }\n ],\n \"name\": \"recoverERC20\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"recipient\", \"type\": \"address\" },\n { \"internalType\": \"uint256\", \"name\": \"tokenAmount\", \"type\": \"uint256\" }\n ],\n \"name\": \"recoverETH\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"_oft\", \"type\": \"address\" },\n { \"internalType\": \"uint32\", \"name\": \"_dstEid\", \"type\": \"uint32\" },\n { \"internalType\": \"bytes32\", \"name\": \"_to\", \"type\": \"bytes32\" },\n { \"internalType\": \"uint256\", \"name\": \"_amountLD\", \"type\": \"uint256\" }\n ],\n \"name\": \"sendOFT\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint32\", \"name\": \"eid\", \"type\": \"uint32\" },\n { \"internalType\": \"bytes\", \"name\": \"_options\", \"type\": \"bytes\" }\n ],\n \"name\": \"setExecutorOptions\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"_fraxtalHop\", \"type\": \"address\" }\n ],\n \"name\": \"setFraxtalHop\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"bytes32\", \"name\": \"_fraxtalHop\", \"type\": \"bytes32\" }\n ],\n \"name\": \"setFraxtalHop\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_hopFee\", \"type\": \"uint256\" }\n ],\n \"name\": \"setHopFee\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_numDVNs\", \"type\": \"uint256\" }\n ],\n \"name\": \"setNumDVNs\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"_oft\", \"type\": \"address\" },\n { \"internalType\": \"bool\", \"name\": \"_approved\", \"type\": \"bool\" }\n ],\n \"name\": \"toggleOFTApproval\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"address\", \"name\": \"newOwner\", \"type\": \"address\" }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"stateMutability\": \"payable\",\n \"type\": \"receive\"\n }\n];\n\nexport const FRAXZERO_REDEEM_MINT_ABI = [\n {\n \"inputs\": [],\n \"name\": \"mdwrComboView\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"maxAssetsDepositable\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"maxSharesMintable\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"maxAssetsWithdrawable\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"maxSharesRedeemable\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"sharesIn\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"receiver\", \"type\": \"address\" },\n { \"internalType\": \"address\", \"name\": \"owner\", \"type\": \"address\" }\n ],\n \"name\": \"redeem\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"assetsOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"assetsIn\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"receiver\", \"type\": \"address\" }\n ],\n \"name\": \"deposit\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"sharesOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_assetsIn\", \"type\": \"uint256\" }\n ],\n \"name\": \"previewDeposit\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_sharesOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_assetsOut\", \"type\": \"uint256\" }\n ],\n \"name\": \"previewWithdraw\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_sharesIn\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_sharesOut\", \"type\": \"uint256\" }\n ],\n \"name\": \"previewMint\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_assetsIn\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_sharesIn\", \"type\": \"uint256\" }\n ],\n \"name\": \"previewRedeem\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"_assetsOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"assetsIn\", \"type\": \"uint256\" },\n { \"internalType\": \"uint32\", \"name\": \"dstEid\", \"type\": \"uint32\" },\n { \"internalType\": \"bytes32\", \"name\": \"receiver\", \"type\": \"bytes32\" }\n ],\n \"name\": \"mintAndSend\",\n \"outputs\": [\n { \"internalType\": \"bytes32\", \"name\": \"guidOrZero\", \"type\": \"bytes32\" },\n { \"internalType\": \"uint256\", \"name\": \"sharesOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"sharesIn\", \"type\": \"uint256\" },\n { \"internalType\": \"address\", \"name\": \"receiver\", \"type\": \"address\" }\n ],\n \"name\": \"redeemToUsdcAndTransfer\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"assetsOut\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"maxUstbRedemptionAmount\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"superstateTokenAmount\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"usdPerUstbChainlinkRaw\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n { \"internalType\": \"uint256\", \"name\": \"superstateTokenInAmount\", \"type\": \"uint256\" }\n ],\n \"name\": \"calculateUsdcOut\",\n \"outputs\": [\n { \"internalType\": \"uint256\", \"name\": \"usdcOutAmountAfterFee\", \"type\": \"uint256\" },\n { \"internalType\": \"uint256\", \"name\": \"usdPerUstbChainlinkRaw\", \"type\": \"uint256\" }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n];\n","import { FRAXZERO_CONFIG, FRAXZERO_REQUIRED_DVN_COUNT } from \"./config\";\nimport { FRAXZERO_ABI } from \"./contract\";\nimport { calculateEstimateTime } from \"../utils\";\nimport { Usdt0Service } from \"../usdt0\";\nimport { OFT_ABI } from \"../usdt0/contract\";\nimport { ExecTime, getRequest, GetStatusParams, GetStatusStableflowResponse } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { Service } from \"@stableflow/core\";\n\nexport const PayInLzToken = false;\n\nexport const excludeFees: string[] = [\"estimateGasUsd\"];\n\nexport class FraxZeroService extends Usdt0Service {\n public override async quote(params: any) {\n const {\n wallet,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n } = params;\n\n const _quoteType = `FraxZeroService ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"fuchsia-600\", isDebug: OpenAPI.DEBUG });\n\n const originLayerzero = FRAXZERO_CONFIG[fromToken.chainName];\n const destinationLayerzero = FRAXZERO_CONFIG[toToken.chainName];\n\n const isFromEthereumOrFraxtal = fromToken.chainId === 1 || fromToken.chainId === 252;\n const isToEthereumOrFraxtal = toToken.chainId === 1 || toToken.chainId === 252;\n const isFraxtal = fromToken.chainId === 252 || toToken.chainId === 252;\n const isFromSolana = fromToken.chainName === \"Solana\";\n\n if (isFromSolana) {\n // only support Ethereum and Fraxtal\n if (![1, 252].includes(toToken.chainId)) {\n throw new Error(\"Invalid destination chain\");\n }\n }\n\n const estimateTime = calculateEstimateTime({\n requiredDvnCount: FRAXZERO_REQUIRED_DVN_COUNT,\n originConfig: originLayerzero,\n destinationConfig: destinationLayerzero,\n });\n\n if (isFraxtal && !isFromSolana) {\n const result = await wallet.quote(Service.Usdt0, {\n ...params,\n abi: OFT_ABI,\n dstEid: destinationLayerzero.eid,\n payInLzToken: PayInLzToken,\n originLayerzeroAddress: isFromEthereumOrFraxtal ? originLayerzero.lockbox : fromToken.contractAddress,\n destinationLayerzeroAddress: isToEthereumOrFraxtal ? destinationLayerzero.lockbox : toToken.contractAddress,\n excludeFees,\n originLayerzero,\n destinationLayerzero,\n });\n\n result.estimateTime = estimateTime;\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"FraxZeroService.quote isFraxtal\");\n\n return result;\n }\n\n const result = await wallet.quote(Service.FraxZero, {\n ...params,\n abi: FRAXZERO_ABI,\n originLayerzero,\n destinationLayerzero,\n excludeFees,\n });\n\n result.estimateTime = estimateTime;\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"FraxZeroService.quote\");\n\n return result;\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new FraxZeroService();\n","import { FraxZeroService, excludeFees as fraxExcludeFees } from \".\";\nimport { FRAXZERO_MIDDLE_CHAIN_REFOUND_ADDRESS, FRAXZERO_MIDDLE_TOKEN_USDC, FRAXZERO_MIDDLE_TOKEN_FRXUSD, FRAXZERO_REDEEM_USDC_CONTRACT, FRAXZERO_REDEEM_RWA_CONTRACT, FRAXZERO_REDEEM_AND_MINT_CONTRACT, FRAXZERO_GAS_USED, FRAXZERO_REDEMPTION_CONTRACT } from \"./config\";\nimport oneClickService, { excludeFees as oneClickExcludeFees } from \"../oneclick\";\nimport Big from \"big.js\";\nimport { getRequest, GetStatusParams, GetStatusStableflowResponse, numberRemoveEndZero } from \"@stableflow/core\";\nimport { FRAXZERO_REDEEM_MINT_ABI } from \"./contract\";\nimport { getPrice } from \"@stableflow/core\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { evmRpcFallbackProvider } from \"@stableflow/utils-evm\";\nimport { Csl } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\n\nexport class FraxZero2OneClickService extends FraxZeroService {\n public override async quote(params: any) {\n const {\n dry,\n wallet,\n evmWallet,\n evmAddress,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n evmGasFees,\n switchChainAsync,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n csl(\"FraxZero2OneClickService quote\", \"yellow-500\", \"params: %o\", params);\n\n const _quoteType = `FraxZero2OneClick ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"fuchsia-700\", isDebug: OpenAPI.DEBUG });\n\n const isFromEthereumFrxUSD = fromToken.chainId === 1 && fromToken.symbol === FRAXZERO_MIDDLE_TOKEN_FRXUSD.symbol;\n const isToEthereumUSDC = toToken.chainId === 1 && toToken.symbol === FRAXZERO_MIDDLE_TOKEN_USDC.symbol;\n\n const provider = evmRpcFallbackProvider(FRAXZERO_MIDDLE_TOKEN_FRXUSD);\n\n let middleChainWallet = evmWallet;\n let middleChainRecipientAddress = evmAddress;\n if (!middleChainWallet) {\n throw new Error(\"evmWallet is required\");\n }\n if (!middleChainRecipientAddress) {\n throw new Error(\"evmAddress is required\");\n }\n\n // fraxzero quote result\n let firstStepResult: any;\n if (!isFromEthereumFrxUSD) {\n execTime.breakpoint();\n // bridge to Ethereum\n firstStepResult = await super.quote({\n ...params,\n toToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n recipient: middleChainRecipientAddress,\n });\n execTime.log(\"FraxZero.quote\");\n }\n csl(\"FraxZero2OneClickService quote\", \"yellow-600\", \"firstStepResult: %o\", firstStepResult);\n const ethereumFrxUSDAmountWei = isFromEthereumFrxUSD\n ? amountWei\n : Big(firstStepResult.outputAmount || 0).times(10 ** FRAXZERO_MIDDLE_TOKEN_FRXUSD.decimals).toFixed(0, Big.roundDown);\n const ethereumFrxUSDAmount = isFromEthereumFrxUSD\n ? Big(amountWei || 0).div(10 ** fromToken.decimals).toFixed(fromToken.decimals, Big.roundDown)\n : firstStepResult.outputAmount;\n\n // oneclick quote result\n let thirdStepResult: any;\n let preivewRedeemResult: any;\n if (!isToEthereumUSDC) {\n let oneClickFeeRatio = \"0\";\n // These fees are currently all 0\n // No need to request for now\n // if (!isFromEthereumFrxUSD) {\n // execTime.breakpoint();\n // const { usd, wei, amount } = await middleChainWallet.getEstimateGas({\n // gasLimit: FRAXZERO_GAS_USED.REDEEM * 120n / 100n,\n // price: getPrice(prices, FRAXZERO_MIDDLE_TOKEN_FRXUSD.nativeToken.symbol),\n // nativeToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD.nativeToken,\n // provider,\n // gasPrice: dry ? evmGasFees[FRAXZERO_MIDDLE_TOKEN_FRXUSD.chainId as number].gasPrice : void 0,\n // });\n // execTime.log(\"middleChainWallet.getEstimateGas\");\n // const secondStepGasToAmount = Big(usd).div(getPrice(prices, FRAXZERO_MIDDLE_TOKEN_USDC.symbol) || 1).toFixed(FRAXZERO_MIDDLE_TOKEN_USDC.decimals);\n // oneClickFeeRatio = Big(secondStepGasToAmount)\n // .div(Big(secondStepGasToAmount).plus(Big(ethereumFrxUSDAmountWei).div(10 ** FRAXZERO_MIDDLE_TOKEN_USDC.decimals).toFixed(FRAXZERO_MIDDLE_TOKEN_USDC.decimals)))\n // .times(10000)\n // .toFixed(0, Big.roundUp);\n // }\n\n // estimate redeem amount\n // If it's a quote, use a 1:1 exchange rate\n let ethereumUSDCAmountWei = Big(ethereumFrxUSDAmount || 0).times(10 ** FRAXZERO_MIDDLE_TOKEN_USDC.decimals).toFixed(0, Big.roundDown);\n try {\n execTime.breakpoint();\n preivewRedeemResult = await middleChainWallet.preivewRedeemFrxUSD({\n dry,\n amountWei: ethereumFrxUSDAmountWei,\n fromToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n rwaCustodianAddress: FRAXZERO_REDEEM_RWA_CONTRACT,\n redemptionAddress: FRAXZERO_REDEMPTION_CONTRACT,\n });\n execTime.log(\"middleChainWallet.preivewRedeemFrxUSD\");\n ethereumUSDCAmountWei = preivewRedeemResult.totalAssetsOut.toString();\n } catch (error) {\n csl(\"FraxZero2OneClickService quote\", \"red-500\", \"estimate redeem amount failed: %o\", error);\n }\n\n // from ethereum USDC to toToken\n execTime.breakpoint();\n thirdStepResult = await oneClickService.quote({\n ...params,\n amountWei: ethereumUSDCAmountWei,\n fromToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n originAsset: FRAXZERO_MIDDLE_TOKEN_USDC.assetId,\n swapType: \"FLEX_INPUT\",\n isProxy: false,\n refundTo: middleChainRecipientAddress,\n wallet: middleChainWallet,\n appFees: [\n {\n recipient: \"reffer.near\",\n // No bridge fee will be charged temporarily\n fee: +oneClickFeeRatio, // 10000 = 100% 1000 = 10% 100=1% 1=0.01%\n },\n ],\n });\n execTime.log(\"oneClickService.quote\");\n }\n csl(\"FraxZero2OneClickService quote\", \"yellow-600\", \"thirdStepResult: %o\", thirdStepResult);\n\n // redeem from ethereum frxUSD to ethereum USDC\n execTime.breakpoint();\n const secondStepResult = await middleChainWallet.redeemFrxUSD({\n ...params,\n preivewRedeemResult,\n fromToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n amountWei: ethereumFrxUSDAmountWei,\n toToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n refundTo: middleChainRecipientAddress,\n recipient: !isToEthereumUSDC ? (thirdStepResult?.quote?.depositAddress || middleChainRecipientAddress) : recipient,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n rwaCustodianAddress: FRAXZERO_REDEEM_RWA_CONTRACT,\n redemptionAddress: FRAXZERO_REDEMPTION_CONTRACT,\n redeemAndMintContractAddress: FRAXZERO_REDEEM_AND_MINT_CONTRACT,\n });\n execTime.log(\"middleChainWallet.redeemFrxUSD\");\n csl(\"FraxZero2OneClickService quote\", \"yellow-600\", \"secondStepResult: %o\", secondStepResult);\n\n const withOneClick = (_result: any) => {\n let totalFeesUsd = Big(0);\n let estimateTime = _result?.estimateTime || 0;\n let finalOutputAmount = _result?.outputAmount || \"0\";\n let depositAddress = thirdStepResult?.quote?.depositAddress;\n\n const fees = {\n ..._result?.fees,\n };\n if (!isToEthereumUSDC) {\n for (const feeKey in thirdStepResult?.fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = thirdStepResult.fees[feeKey];\n }\n estimateTime = estimateTime + (thirdStepResult?.estimateTime || 0);\n finalOutputAmount = thirdStepResult?.outputAmount || \"0\";\n }\n for (const feeKey in fees) {\n if (fraxExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n const inputAmount = Big(amountWei).div(10 ** fromToken.decimals).toFixed(fromToken.decimals, Big.roundDown);\n const amountInUsd = Big(inputAmount).times(getPrice(prices, fromToken.symbol));\n const priceImpact = Big(amountInUsd).minus(Big(finalOutputAmount).times(getPrice(prices, toToken.symbol))).div(amountInUsd);\n const exchangeRate = Big(finalOutputAmount).div(inputAmount);\n\n return {\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime,\n outputAmount: finalOutputAmount,\n priceImpact: numberRemoveEndZero(Big(priceImpact).toFixed(4)),\n exchangeRate: numberRemoveEndZero(Big(exchangeRate).toFixed(6, Big.roundDown)),\n quoteParam: {\n ..._result?.quoteParam,\n fromToken,\n amountWei,\n toToken,\n refundTo,\n recipient,\n middleToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n middleToken2: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n isFromEthereumFrxUSD,\n isToEthereumUSDC,\n depositAddress,\n },\n sourceQuoteParams: params,\n };\n };\n\n // Redeem from the frontend\n if (isFromEthereumFrxUSD) {\n\n const oneClickResult = withOneClick(secondStepResult);\n\n execTime.logTotal(\"FraxZero2OneClickService.quote is From EthereumFrxUSD\");\n\n return {\n ...secondStepResult,\n ...oneClickResult,\n sourceQuoteParams: params,\n };\n }\n\n // Redeem is done by the backend, and the frontend calls FraxZero to bridge to Ethereum frxUSD\n const oneClickResult = withOneClick({\n ...firstStepResult,\n outputAmount: secondStepResult.outputAmount,\n });\n\n execTime.logTotal(\"FraxZero2OneClickService.quote is NOT From EthereumFrxUSD\");\n\n return {\n ...firstStepResult,\n ...oneClickResult,\n recipient,\n needPermit: true,\n permitSpender: FRAXZERO_REDEEM_AND_MINT_CONTRACT,\n permitToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n permitAmountWei: ethereumFrxUSDAmountWei,\n permitAdditionalData: {},\n sourceQuoteParams: params,\n };\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new FraxZero2OneClickService();\n","import oneClickService, { excludeFees as oneClickExcludeFees } from \"../oneclick\";\nimport { FraxZeroService, excludeFees as fraxZeroExcludeFees } from \".\";\nimport { FRAXZERO_CONFIG, FRAXZERO_GAS_USED, FRAXZERO_MIDDLE_CHAIN_REFOUND_ADDRESS, FRAXZERO_MIDDLE_TOKEN_FRXUSD, FRAXZERO_MIDDLE_TOKEN_USDC, FRAXZERO_REDEEM_AND_MINT_CONTRACT, FRAXZERO_REDEEM_USDC_CONTRACT } from \"./config\";\nimport { getPrice, getRequest, GetStatusParams, GetStatusStableflowResponse } from \"@stableflow/core\";\nimport { FRAXZERO_REDEEM_MINT_ABI } from \"./contract\";\nimport Big from \"big.js\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\nimport { SendType } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { evmRpcFallbackProvider } from \"@stableflow/utils-evm\";\n\nexport class OneClick2FraxZeroService extends FraxZeroService {\n public override async quote(params: any) {\n const {\n dry,\n wallet,\n evmWallet,\n evmAddress,\n amountWei,\n refundTo,\n recipient,\n fromToken,\n toToken,\n slippageTolerance,\n prices,\n evmGasFees,\n switchChainAsync,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"params: %o\", params);\n\n const _quoteType = `OneClick2FraxZero ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"fuchsia-500\", isDebug: OpenAPI.DEBUG });\n\n const isFromEthereumUSDC = fromToken.chainId === 1 && fromToken.symbol === FRAXZERO_MIDDLE_TOKEN_USDC.symbol;\n const isToEthereumFrxUSD = toToken.chainId === 1 && toToken.symbol === FRAXZERO_MIDDLE_TOKEN_FRXUSD.symbol;\n const isToSolana = toToken.chainName === \"Solana\";\n const isToFraxtal = toToken.chainId === 252;\n const isSend = !isToEthereumFrxUSD && !isToSolana && !isToFraxtal;\n\n const provider = evmRpcFallbackProvider(FRAXZERO_MIDDLE_TOKEN_USDC);\n\n let middleChainWallet = evmWallet;\n let middleChainRecipientAddress = evmAddress;\n if (!middleChainWallet) {\n throw new Error(\"evmWallet is required\");\n }\n if (!middleChainRecipientAddress) {\n throw new Error(\"evmAddress is required\");\n }\n\n let previewMintResult: any;\n // 1. use OneClick to bridge to Ethereum USDC first\n if (!isFromEthereumUSDC) {\n // estimate gas\n let gasLimit = FRAXZERO_GAS_USED.MINT.SEND;\n if (isToEthereumFrxUSD) {\n gasLimit = FRAXZERO_GAS_USED.MINT.TO_ETHEREUM;\n }\n if (isToSolana) {\n gasLimit = FRAXZERO_GAS_USED.MINT.TO_SOL;\n }\n if (isToFraxtal) {\n gasLimit = FRAXZERO_GAS_USED.MINT.TO_FRAXTAL;\n }\n gasLimit = gasLimit * 120n / 100n;\n\n // Mint should be a 1:1 conversion from Ethereum USDC to Ethereum frxUSD.\n // The ratio can be obtained from the contract.\n execTime.breakpoint();\n previewMintResult = await middleChainWallet.previewMintFrxUSD({\n dry,\n amountWei: Big(amountWei || 0).div(10 ** fromToken.decimals).times(10 ** FRAXZERO_MIDDLE_TOKEN_USDC.decimals).toFixed(0, 0),\n fromToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n });\n const { totalAssetsOut: estimateEthereumFrxUSDAmountWei } = previewMintResult;\n execTime.log(\"previewMintFrxUSD\");\n\n execTime.breakpoint();\n const { usd, wei, amount } = await middleChainWallet.getEstimateGas({\n gasLimit,\n price: getPrice(prices, FRAXZERO_MIDDLE_TOKEN_USDC.nativeToken.symbol),\n nativeToken: FRAXZERO_MIDDLE_TOKEN_USDC.nativeToken,\n provider: provider,\n gasPrice: dry ? evmGasFees[FRAXZERO_MIDDLE_TOKEN_USDC.chainId as number].gasPrice : void 0,\n });\n execTime.log(\"middleChainWallet.getEstimateGas\");\n const secondStepGasToAmount = Big(usd || 0).div(getPrice(prices, fromToken.symbol) || 1).toFixed(fromToken.decimals);\n\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC EstimateGas usd: %o, wei: %o, amount: %o\", usd, wei, amount);\n\n // estimate lz message fee\n // from Ethereum frxUSD to toToken\n let secondStepResult: any;\n if (!isToEthereumFrxUSD) {\n execTime.breakpoint();\n secondStepResult = await super.quote({\n ...params,\n fromToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n wallet: middleChainWallet,\n amountWei: estimateEthereumFrxUSDAmountWei.toString(),\n refundTo: middleChainRecipientAddress,\n });\n execTime.log(\"FraxZero.quote\");\n }\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC secondStepResult: %o\", secondStepResult);\n\n let secondStepLzMsgFeeUsd = secondStepResult?.fees?.nativeFeeUsd || \"0\";\n let secondStepLzMsgFee = secondStepResult?.fees?.nativeFee || \"0\";\n // add 120% buffer\n const usdt0MessageFeeBuffer = 1.2;\n // super.quote has already added a buffer, but here we add a bit more to further reduce the chance of failure\n secondStepLzMsgFeeUsd = Big(secondStepLzMsgFeeUsd || 0).times(1 + usdt0MessageFeeBuffer);\n secondStepLzMsgFee = Big(secondStepLzMsgFee || 0).times(1 + usdt0MessageFeeBuffer);\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC secondStepLzMsgFeeUsd: %o\", secondStepLzMsgFeeUsd.toString());\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC secondStepLzMsgFee: %o\", secondStepLzMsgFee.toString());\n const secondStepLzMsgFeeAmount = Big(secondStepLzMsgFeeUsd).div(getPrice(prices, fromToken.symbol) || 1).toFixed(fromToken.decimals);\n\n const totalAppFeesAmount = Big(secondStepGasToAmount).plus(secondStepLzMsgFeeAmount);\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC totalAppFeesAmount: %o\", totalAppFeesAmount.toString());\n const oneClickFeeRatio = Big(totalAppFeesAmount)\n .div(Big(totalAppFeesAmount).plus(Big(params.amountWei).div(10 ** fromToken.decimals).toFixed(fromToken.decimals)))\n .times(10000)\n .toFixed(0, Big.roundUp);\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC oneClickFeeRatio: %o\", oneClickFeeRatio.toString());\n if (secondStepResult) {\n secondStepResult.fees.nativeFee = secondStepLzMsgFee.toString();\n secondStepResult.fees.nativeFeeUsd = secondStepLzMsgFeeUsd.toString();\n }\n\n execTime.breakpoint();\n const firstStepResult = await oneClickService.quote({\n ...params,\n toToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n destinationAsset: FRAXZERO_MIDDLE_TOKEN_USDC.assetId,\n swapType: \"EXACT_OUTPUT\",\n isProxy: true,\n recipient: middleChainRecipientAddress,\n appFees: [\n {\n recipient: \"reffer.near\",\n // No bridge fee will be charged temporarily\n fee: +oneClickFeeRatio, // 10000 = 100% 1000 = 10% 100=1% 1=0.01%\n },\n ],\n });\n execTime.log(\"oneClickService.quote\");\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"NOT FromEthereumUSDC firstStepResult: %o\", firstStepResult);\n\n let totalFeesUsd = Big(0);\n let _destinationGasFeeUsd = Big(firstStepResult.fees?.destinationGasFeeUsd || 0).minus(secondStepLzMsgFeeUsd);\n if (Big(_destinationGasFeeUsd).lt(0)) {\n _destinationGasFeeUsd = Big(0);\n }\n const fees = {\n ...firstStepResult.fees,\n destinationGasFeeUsd: numberRemoveEndZero(Big(_destinationGasFeeUsd).toFixed(20)),\n };\n for (const feeKey in secondStepResult?.fees) {\n if (fraxZeroExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = secondStepResult.fees[feeKey];\n }\n for (const feeKey in fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n execTime.logTotal(\"OneClick2FraxZeroService.quote is NOT FromEthereumUSDC\");\n\n const notFromEthUSDCFinalOutputAmount = isToEthereumFrxUSD\n ? numberRemoveEndZero(Big(estimateEthereumFrxUSDAmountWei.toString()).div(10 ** toToken.decimals).toFixed(toToken.decimals, Big.roundDown))\n : secondStepResult.outputAmount;\n\n return {\n ...firstStepResult,\n needPermit: true,\n permitSpender: FRAXZERO_REDEEM_AND_MINT_CONTRACT,\n permitToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n permitAmountWei: firstStepResult?.quote?.amountOut,\n permitAdditionalData: {},\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime: (isToEthereumFrxUSD ? 0 : secondStepResult.estimateTime) + firstStepResult.estimateTime,\n outputAmount: notFromEthUSDCFinalOutputAmount,\n quoteParam: {\n ...firstStepResult.quoteParam,\n toToken: params.toToken,\n middleToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n middleToken2: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n recipient: params.recipient,\n depositAddress: firstStepResult.quote?.depositAddress,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sendParam: {\n ...firstStepResult.sendParam,\n isOneClickTransfer: !firstStepResult.sendParam ? {\n originAsset: fromToken.contractAddress,\n depositAddress: firstStepResult.quote?.depositAddress,\n amount: firstStepResult.quote?.minAmountIn,\n } : false,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sourceQuoteParams: params,\n };\n }\n\n // 2. If is from Ethereum USDC, skip the first step\n // mint and bridge use contract directly\n if (isToEthereumFrxUSD) {\n execTime.breakpoint();\n const firstStepResult = await middleChainWallet.mintFrxUSD({\n ...params,\n toToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n previewMintResult,\n });\n execTime.log(\"middleChainWallet.mintFrxUSD\");\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"FromEthereumUSDC firstStepResult: %o\", firstStepResult);\n\n execTime.logTotal(\"OneClick2FraxZeroService.quote is To EthereumFrxUSD\");\n\n return {\n ...firstStepResult,\n quoteParam: {\n ...firstStepResult.quoteParam,\n middleToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n middleToken2: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sendParam: {\n ...firstStepResult.sendParam,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sourceQuoteParams: params,\n };\n }\n\n // 3. to other chain frxUSD\n // The mintAndSend method of the _FRAXZERO_REDEEM_AND_MINT_CONTRACT contract should be called here\n const originLayerzero = FRAXZERO_CONFIG[fromToken.chainName];\n const destinationLayerzero = FRAXZERO_CONFIG[toToken.chainName];\n\n execTime.breakpoint();\n const firstStepResult = await middleChainWallet.mintAndSendFrxUSD({\n ...params,\n abi: FRAXZERO_REDEEM_MINT_ABI,\n usdcCustodianAddress: FRAXZERO_REDEEM_USDC_CONTRACT,\n redeemAndMintContractAddress: FRAXZERO_REDEEM_AND_MINT_CONTRACT,\n originLayerzero,\n destinationLayerzero,\n previewMintResult,\n });\n execTime.log(\"middleChainWallet.mintAndSendFrxUSD\");\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"FromEthereumUSDC firstStepResult: %o\", firstStepResult);\n\n // estimate lz message fee\n // from Ethereum frxUSD to toToken\n execTime.breakpoint();\n const secondStepResult = await super.quote({\n ...params,\n fromToken: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n wallet: middleChainWallet,\n amountWei: Big(firstStepResult.outputAmount).times(10 ** FRAXZERO_MIDDLE_TOKEN_FRXUSD.decimals).toFixed(0, Big.roundDown),\n });\n execTime.log(\"FraxZero.quote\");\n csl(\"OneClick2FraxZeroService quote\", \"yellow-600\", \"FromEthereumUSDC estimate fraxzero: %o\", secondStepResult);\n\n let totalFeesUsd = Big(0);\n const fees = {\n ...firstStepResult.fees,\n };\n for (const feeKey in secondStepResult.fees) {\n if (fraxZeroExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = secondStepResult.fees[feeKey];\n }\n for (const feeKey in fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n const sendParamOptions = firstStepResult.sendParam.param[firstStepResult.sendParam.param.length - 1];\n const fraxzeroSendParamOptions = secondStepResult.sendParam.param[secondStepResult.sendParam.param.length - 1];\n firstStepResult.sendParam.param[firstStepResult.sendParam.param.length - 1] = {\n ...sendParamOptions,\n value: fraxzeroSendParamOptions.value,\n };\n\n execTime.logTotal(\"OneClick2FraxZeroService.quote is To Other Chain FrxUSD\");\n\n return {\n ...firstStepResult,\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime: firstStepResult.estimateTime + secondStepResult.estimateTime,\n outputAmount: secondStepResult.outputAmount,\n quoteParam: {\n ...firstStepResult.quoteParam,\n middleToken: FRAXZERO_MIDDLE_TOKEN_USDC,\n middleToken2: FRAXZERO_MIDDLE_TOKEN_FRXUSD,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sendParam: {\n ...firstStepResult.sendParam,\n isFromEthereumUSDC,\n isToEthereumFrxUSD,\n },\n sourceQuoteParams: params,\n };\n }\n\n public override async send(params: any) {\n const {\n wallet,\n sendParam,\n ...rest\n } = params;\n\n // proxy transfer\n if (sendParam) {\n if (sendParam.isOneClickTransfer) {\n return wallet.send(SendType.TRANSFER, sendParam.isOneClickTransfer);\n }\n const tx = await wallet.send(SendType.SEND, sendParam);\n return tx;\n }\n\n return wallet.send(SendType.SEND, rest);\n }\n\n public override async estimateTransaction(params: any, quoteData: any) {\n const {\n wallet,\n sendParam,\n } = quoteData;\n\n // proxy transfer\n if (sendParam) {\n if (sendParam.isOneClickTransfer) {\n return quoteData;\n }\n return super.estimateTransaction(params, quoteData);\n }\n\n return quoteData;\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new OneClick2FraxZeroService();\n","import { getRequest, GetStatusParams, GetStatusStableflowResponse, SendType } from \"@stableflow/core\";\nimport oneClickService, { excludeFees as oneClickExcludeFees } from \"../oneclick\";\nimport usdt0Service, { excludeFees as usdt0ExcludeFees } from \"../usdt0\";\nimport Big from \"big.js\";\nimport { MIDDLE_CHAIN_REFOUND_ADDRESS, MIDDLE_TOKEN_CHAIN } from \"./config\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\n\nexport class Usdt0OneClickService {\n public async quote(params: any) {\n const {\n dry,\n evmWallet,\n evmAddress,\n fromToken,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n const execTime = new ExecTime({ type: \"Usdt0OneClickService\", logStyle: \"lime-700\", isDebug: OpenAPI.DEBUG });\n\n let middleChainWallet = evmWallet;\n if (!middleChainWallet) {\n throw new Error(\"evmWallet is required\");\n }\n\n const usdt0Params = {\n ...params,\n toToken: MIDDLE_TOKEN_CHAIN,\n destinationChain: MIDDLE_TOKEN_CHAIN.chainName,\n recipient: MIDDLE_CHAIN_REFOUND_ADDRESS,\n };\n const oneClickParams = {\n ...params,\n fromToken: MIDDLE_TOKEN_CHAIN,\n originAsset: MIDDLE_TOKEN_CHAIN.assetId,\n swapType: \"FLEX_INPUT\",\n isProxy: false,\n refundTo: MIDDLE_CHAIN_REFOUND_ADDRESS,\n wallet: middleChainWallet,\n };\n\n let oneClickResult: any;\n let usdt0Result: any;\n if (dry) {\n execTime.breakpoint();\n const mergedQuotes = [\n oneClickService.quote(oneClickParams),\n usdt0Service.quote(usdt0Params)\n ];\n const merdedRes = await Promise.all(mergedQuotes);\n oneClickResult = merdedRes[0];\n usdt0Result = merdedRes[1];\n execTime.log(\"oneClickService.quote & usdt0Service.quote\");\n }\n // not dry\n else {\n execTime.breakpoint();\n oneClickResult = await oneClickService.quote(oneClickParams);\n execTime.log(\"oneClickService.quote\");\n\n if (oneClickResult.errMsg) {\n return oneClickResult;\n }\n\n if (!dry) {\n usdt0Params.recipient = oneClickResult.quote.depositAddress;\n }\n\n execTime.breakpoint();\n usdt0Result = await usdt0Service.quote(usdt0Params);\n execTime.log(\"usdt0Service.quote\");\n }\n\n csl(\"Usdt0OneClickService quote\", \"rose-600\", \"oneClickResult: %o\", oneClickResult);\n csl(\"Usdt0OneClickService quote\", \"rose-600\", \"usdt0Result: %o\", usdt0Result);\n\n let totalFeesUsd = Big(0);\n const fees = {\n ...usdt0Result.fees,\n };\n for (const feeKey in oneClickResult.fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = oneClickResult.fees[feeKey];\n }\n for (const feeKey in fees) {\n if (usdt0ExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n execTime.logTotal(\"Usdt0OneClickService.quote\");\n\n return {\n ...usdt0Result,\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime: usdt0Result.estimateTime + oneClickResult.estimateTime,\n outputAmount: oneClickResult.outputAmount,\n priceImpact: oneClickResult.priceImpact,\n exchangeRate: oneClickResult.exchangeRate,\n quoteParam: {\n ...usdt0Result.quoteParam,\n toToken: params.toToken,\n middleToken: MIDDLE_TOKEN_CHAIN,\n recipient: params.recipient,\n depositAddress: oneClickResult.quote.depositAddress,\n },\n sourceQuoteParams: params,\n };\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const { } = params;\n\n return usdt0Service.estimateTransaction(params, quoteData);\n }\n\n public async send(params: any) {\n const {\n wallet,\n ...rest\n } = params;\n\n return wallet.send(SendType.SEND, rest);\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new Usdt0OneClickService();\n","import oneClickService, { excludeFees as oneClickExcludeFees } from \"../oneclick\";\nimport usdt0Service, { excludeFees as usdt0ExcludeFees } from \"../usdt0\";\nimport Big from \"big.js\";\nimport { MIDDLE_CHAIN_LAYERZERO_EXECUTOR, MIDDLE_CHAIN_REFOUND_ADDRESS, MIDDLE_TOKEN_CHAIN } from \"./config\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { numberRemoveEndZero } from \"@stableflow/core\";\nimport { getPrice, GetStatusParams, getRequest, GetStatusStableflowResponse } from \"@stableflow/core\";\n\nexport class OneClickUsdt0Service {\n public async quote(params: any) {\n const {\n evmWallet,\n evmAddress,\n fromToken,\n prices,\n } = params;\n\n const execTime = new ExecTime({ type: \"OneClickUsdt0\", logStyle: \"lime-500\", isDebug: OpenAPI.DEBUG });\n\n let middleChainWallet = evmWallet;\n let destinationRecipientAddress = evmAddress;\n if (!middleChainWallet) {\n throw new Error(\"evmWallet is required\");\n }\n if (!destinationRecipientAddress) {\n throw new Error(\"evmAddress is required\");\n }\n\n // First, call the usdt0 quote method\n // Retrieve sendParam, fees, and estimated costs\n // usdt0 is the second step, so the source chain is arb\n // The refund address is MIDDLE_CHAIN_REFOUND_ADDRESS\n // Since the first step uses oneclick with EXACT_OUTPUT mode,\n // params.amountWei is the input amount for the second step\n const usdt0Params = {\n ...params,\n amountWei: Big(params.amountWei || 0).div(10 ** fromToken.decimals).times(10 ** MIDDLE_TOKEN_CHAIN.decimals).toFixed(0),\n fromToken: MIDDLE_TOKEN_CHAIN,\n originChain: MIDDLE_TOKEN_CHAIN.chainName,\n refundTo: MIDDLE_CHAIN_REFOUND_ADDRESS,\n wallet: middleChainWallet,\n };\n\n execTime.breakpoint();\n const usdt0Result = await usdt0Service.quote(usdt0Params);\n execTime.log(\"usdt0Service.quote\");\n\n const usdt0MessageFeeBuffer = 1.2;\n usdt0Result.fees.nativeFeeUsd = numberRemoveEndZero(Big(usdt0Result.fees?.nativeFeeUsd || 0).times(1 + usdt0MessageFeeBuffer).toFixed(20));\n usdt0Result.fees.nativeFee = numberRemoveEndZero(Big(usdt0Result.fees?.nativeFee || 0).times(1 + usdt0MessageFeeBuffer).toFixed(fromToken.nativeToken.decimals));\n // LZ message fee to USD\n const usdt0MessageFeeUsd = usdt0Result.fees.nativeFeeUsd;\n // add 20% buffer\n const usdt0MessageFeeAmount = Big(usdt0MessageFeeUsd || 0).div(getPrice(prices, MIDDLE_TOKEN_CHAIN.symbol) || 1).toFixed(MIDDLE_TOKEN_CHAIN.decimals);\n\n if (usdt0Result.errMsg) {\n return usdt0Result;\n }\n\n // OneClick charges a proportional fee\n // The OneClick fee ratio is calculated based on usdt0MessageFeeAmount\n // fee bp = fee amount / (fee amount + amount), minimum is 1, maximum is 10000\n const oneClickFeeRatio = Big(usdt0MessageFeeAmount || 0)\n .div(Big(usdt0MessageFeeAmount || 0).plus(Big(params.amountWei).div(10 ** fromToken.decimals).toFixed(fromToken.decimals)))\n .times(10000)\n .toFixed(0, Big.roundUp);\n\n // csl(\"OneClickUsdt0Service quote\", \"rose-400\", \"usdt0MessageFeeAmount: %o\", usdt0MessageFeeAmount);\n // csl(\"OneClickUsdt0Service quote\", \"rose-400\", \"amount: %o\", Big(params.amountWei).div(10 ** fromToken.decimals).toFixed(fromToken.decimals));\n // csl(\"OneClickUsdt0Service quote\", \"rose-400\", \"oneClickFeeRatio: %o\", oneClickFeeRatio);\n\n if (Big(oneClickFeeRatio).gt(10000)) {\n return { errMsg: `Amount is too low, at least ${usdt0MessageFeeAmount}` };\n }\n\n // Call oneclick quote method again\n // The destination chain is arb\n // Since the exact amount transferred by oneclick needs to be signed, EXACT_OUTPUT mode must be used\n // In EXACT_OUTPUT mode, the output amount equals the expected value\n execTime.breakpoint();\n const oneClickResult = await oneClickService.quote({\n ...params,\n toToken: MIDDLE_TOKEN_CHAIN,\n destinationAsset: MIDDLE_TOKEN_CHAIN.assetId,\n swapType: \"EXACT_OUTPUT\",\n isProxy: true,\n recipient: destinationRecipientAddress,\n appFees: [\n {\n recipient: \"reffer.near\",\n // No bridge fee will be charged temporarily\n fee: +oneClickFeeRatio, // 10000 = 100% 1000 = 10% 100=1% 1=0.01%\n },\n ],\n });\n execTime.log(\"oneClickService.quote\");\n\n let totalFeesUsd = Big(0);\n let _destinationGasFeeUsd = Big(oneClickResult.fees?.destinationGasFeeUsd || 0).minus(usdt0MessageFeeUsd);\n if (Big(_destinationGasFeeUsd).lt(0)) {\n _destinationGasFeeUsd = Big(0);\n }\n const fees = {\n ...oneClickResult.fees,\n destinationGasFeeUsd: numberRemoveEndZero(Big(_destinationGasFeeUsd).toFixed(20)),\n };\n for (const feeKey in usdt0Result.fees) {\n if (usdt0ExcludeFees.includes(feeKey)) {\n continue;\n }\n fees[feeKey] = usdt0Result.fees[feeKey];\n }\n for (const feeKey in fees) {\n if (oneClickExcludeFees.includes(feeKey)) {\n continue;\n }\n totalFeesUsd = Big(totalFeesUsd || 0).plus(fees[feeKey] || 0);\n }\n\n const usdt0SendParam = usdt0Result.sendParam?.param?.[0];\n const usdt0MessageFee = usdt0Result.sendParam?.param?.[1];\n\n execTime.log(\"OneClickUsdt0Service.quote\");\n\n return {\n ...oneClickResult,\n needPermit: true,\n permitSpender: MIDDLE_CHAIN_LAYERZERO_EXECUTOR,\n permitToken: MIDDLE_TOKEN_CHAIN,\n permitAmountWei: oneClickResult?.quote?.amountOut,\n permitAdditionalData: {\n amount_ld: usdt0SendParam?.amountLD,\n compose_msg: usdt0SendParam?.composeMsg,\n dst_eid: usdt0SendParam?.dstEid,\n extra_options: usdt0SendParam?.extraOptions,\n min_amount_ld: usdt0SendParam?.minAmountLD?.toString(),\n oft_cmd: usdt0SendParam?.oftCmd,\n to: usdt0SendParam?.to,\n native_fee: usdt0MessageFee?.nativeFee?.toString(),\n },\n fees,\n totalFeesUsd: numberRemoveEndZero(Big(totalFeesUsd).toFixed(20)),\n estimateTime: usdt0Result.estimateTime + oneClickResult.estimateTime,\n outputAmount: usdt0Result.outputAmount,\n quoteParam: {\n ...oneClickResult.quoteParam,\n toToken: params.toToken,\n middleToken: MIDDLE_TOKEN_CHAIN,\n recipient: params.recipient,\n isOriginLegacy: usdt0Result.quoteParam?.isOriginLegacy,\n isDestinationLegacy: usdt0Result.quoteParam?.isDestinationLegacy,\n },\n usdt0SendParam,\n usdt0MessageFee,\n sourceQuoteParams: params,\n };\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const { } = params;\n\n return oneClickService.estimateTransaction(params, quoteData);\n }\n\n public async send(params: any) {\n return oneClickService.send(params);\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new OneClickUsdt0Service();\n","// native chain name\nexport const NativeChains: Record<string, string> = {\n \"Ethereum\": \"ethereum\",\n \"Arbitrum\": \"arbitrum\",\n \"BNB Chain\": \"bsc\",\n \"Base\": \"base\",\n};\n\nexport const NativeV4Routes: Record<string, { swap: string; bridge: string; }> = {\n \"Ethereum\": {\n swap: \"0x8a2ddc0461Fcf96F81a05529Bed540d4f1eb2a00\",\n bridge: \"0xceBFC5dFBD5CE21694fe2ACefa63aD6f828831d2\",\n },\n \"Arbitrum\": {\n swap: \"0x0FC85a171bD0b53BF0bBace74F04B66170Ae3eAb\",\n bridge: \"0x5E65CEa5473fC8977e4DfDe940B2A99a439181cA\",\n },\n \"BNB Chain\": {\n swap: \"0xF064b069Ed18Eb5c61159247C55C5af79B28a968\",\n bridge: \"0x5B933868f5e710070b146213ED2Cd71628E465C1\",\n },\n \"Base\": {\n swap: \"0xaEC634d949df14Be76dC317504C7b9a6a8A5f576\",\n bridge: \"0xA11f7CdE7402093FF4D24A91FD8cdcc8AA0c96A8\",\n },\n};\n","import { formatNumber } from \"../utils/format-number\";\nimport Big from \"big.js\";\nimport { NativeChains, NativeV4Routes } from \"./contract\";\nimport { ExecTime, getRequest, GetStatusParams, GetStatusStableflowResponse } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { Service } from \"@stableflow/core\";\nimport { Csl } from \"@stableflow/core\";\n\nexport class NativeService {\n public async quote(params: any) {\n const {\n dry,\n wallet,\n amountWei,\n refundTo,\n fromToken,\n toToken,\n prices,\n recipient,\n slippageTolerance,\n } = params;\n\n const _quoteType = `NativeService ${fromToken?.chainName}->${toToken?.chainName}`;\n const execTime = new ExecTime({ type: _quoteType, logStyle: \"indigo-600\", isDebug: OpenAPI.DEBUG });\n\n const isSwap = fromToken.chainName === toToken.chainName;\n\n let quoteUri = \"/firm-quote\";\n const quoteParams: any = {\n version: 4,\n from_address: refundTo,\n to_address: recipient,\n beneficiary_address: recipient,\n refund_to: refundTo,\n src_chain: NativeChains[fromToken.chainName],\n dst_chain: NativeChains[toToken.chainName],\n token_in: fromToken.contractAddress,\n token_out: toToken.contractAddress,\n amount_wei: amountWei,\n expiry_time: 90, // 90 seconds\n timeout_millis: 3000, // 3 seconds\n slippage: slippageTolerance,\n allow_multihop: true\n };\n\n if (dry) {\n quoteUri = \"/indicative-quote\";\n }\n\n if (!isSwap) {\n quoteUri = `/bridge${quoteUri}`;\n }\n\n execTime.breakpoint();\n const response: any = await getRequest(`/v0${quoteUri}`, quoteParams);\n execTime.log(\"Native API, response: %o\", response);\n\n if (!response?.success) {\n let errorMessage = response?.message || \"Native quote failed\";\n // requested amount smaller than token in minimum wei [18446744073709551615]\n if (errorMessage.includes(\"requested amount smaller than token in minimum wei\")) {\n const match = errorMessage.match(/\\[(\\d+)\\]/);\n if (match) {\n const minWei = match[1];\n const minAmount = Big(minWei).div(10 ** fromToken.decimals);\n errorMessage = `Amount is too low, at least ${formatNumber(minAmount, fromToken.decimals, true)} ${fromToken.symbol}`;\n }\n }\n if (errorMessage.includes(\"requested amount smaller than token out minimum wei\")) {\n const match = errorMessage.match(/\\[(\\d+)\\]/);\n if (match) {\n const minWei = match[1];\n const minAmount = Big(minWei).div(10 ** toToken.decimals);\n errorMessage = `Amount is too low. A minimum of ${formatNumber(minAmount, toToken.decimals, true)} ${toToken.symbol} must be output.`;\n }\n }\n throw new Error(errorMessage);\n }\n\n execTime.breakpoint();\n const result = await wallet.quote(Service.Native, {\n ...params,\n ...quoteParams,\n quoteResponse: response,\n bridgeRouterAddress: isSwap ? NativeV4Routes[fromToken.chainName].swap : NativeV4Routes[fromToken.chainName].bridge,\n });\n execTime.log(\"wallet.quoteNative\");\n\n result.sourceQuoteParams = params;\n\n execTime.logTotal(\"NativeService.quote\");\n\n return result;\n }\n\n public async estimateTransaction(params: any, quoteData: any) {\n const {\n fromToken,\n wallet,\n prices,\n evmGasFees,\n refundTo,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n if (!quoteData.sendParam?.txRequest) {\n return quoteData;\n }\n\n const result: any = { fees: {}, ...quoteData };\n\n const ett = await wallet.estimateTransaction({\n dry: false,\n // { txRequest: {} }\n ...quoteData.sendParam,\n fromToken,\n prices,\n evmGasFees,\n refundTo,\n });\n result.fees.estimateGasUsd = ett.estimateSourceGasUsd;\n result.estimateSourceGas = ett.estimateSourceGas;\n result.totalEstimateSourceGas = ett.estimateSourceGas;\n result.estimateSourceGasUsd = ett.estimateSourceGasUsd;\n\n if (fromToken.chainType === \"evm\") {\n csl(\"NativeService estimateTransaction\", \"green-500\", \"Old gasLimit: %o\", result.sendParam.txRequest.gasLimit);\n result.sendParam.txRequest.gasLimit = ett.estimateSourceGasLimit;\n csl(\"NativeService estimateTransaction\", \"green-500\", \"Updated gasLimit: %o\", result.sendParam.txRequest.gasLimit);\n }\n\n return result;\n }\n\n public async send(params: any) {\n const {\n wallet,\n txRequest,\n } = params;\n\n const txResponse = await wallet.signer.sendTransaction({\n to: txRequest.target,\n data: txRequest.calldata,\n value: txRequest.value,\n gasLimit: txRequest.gasLimit,\n });\n\n // wait for tx to be mined\n await txResponse.wait();\n\n return txResponse.hash;\n }\n\n public getStatus(params: GetStatusParams) {\n return getRequest<GetStatusStableflowResponse>(\"/v0/trade\", {\n deposit_address: params.depositAddress,\n });\n }\n}\n\nexport default new NativeService();\n","import oneClickService from \"./oneclick\";\nimport usdt0Service from \"./usdt0\";\nimport cctpService from \"./cctp\";\nimport fraxzeroService from \"./fraxzero\";\nimport fraxZeroOneClickService from \"./fraxzero/to-oneclick\";\nimport oneClickFraxZeroService from \"./fraxzero/from-oneclick\";\nimport usdt0OneClickService from \"./usdt0/to-oneclick\";\nimport oneClickUsdt0Service from \"./usdt0/from-oneclick\";\nimport nativeService from \"./native\";\nimport { Service } from \"@stableflow/core\";\n\nexport const ServiceMap: Record<Service, any> = {\n [Service.OneClick]: oneClickService,\n [Service.Usdt0]: usdt0Service,\n [Service.CCTP]: cctpService,\n [Service.FraxZero]: fraxzeroService,\n [Service.FraxZeroOneClick]: fraxZeroOneClickService,\n [Service.OneClickFraxZero]: oneClickFraxZeroService,\n [Service.Usdt0OneClick]: usdt0OneClickService,\n [Service.OneClickUsdt0]: oneClickUsdt0Service,\n [Service.Native]: nativeService,\n};\n","import type { GetStatusParams, SubmitDepositTxResponse } from '@stableflow/core';\nimport {\n OpenAPI,\n Service,\n ServiceBackend,\n TransactionStatus,\n tokens,\n type TokenConfig,\n type WalletConfig,\n getRouteStatus,\n Csl,\n CancelablePromise,\n StableflowStatus,\n LayerZeroStatus,\n OneClickStatus,\n postRequest,\n} from '@stableflow/core';\nimport Big from 'big.js';\nimport { ServiceMap } from './service-map';\nimport { formatQuoteError, getQuoteModes } from './utils';\n\nexport interface GetAllQuoteParams {\n singleService?: Service;\n disabledServices?: Service[];\n dry?: boolean;\n prices: Record<string, string>;\n fromToken: TokenConfig;\n toToken: TokenConfig;\n wallet: WalletConfig;\n evmWallet?: WalletConfig | null;\n evmAddress?: string | null;\n recipient: string;\n refundTo: string;\n amountWei: string;\n slippageTolerance: number;\n minInputAmount?: string;\n /** @deprecated Please migrate to oneclickParams */\n appFees?: { recipient: string; fee: number; }[];\n oneclickParams?: {\n appFees?: { recipient: string; fee: number; }[];\n swapType?: \"EXACT_INPUT\" | \"EXACT_OUTPUT\" | \"FLEX_INPUT\";\n isProxy?: boolean;\n };\n}\n\nconst submitOthersTx = (\n requestBody: {\n address: string;\n amount?: string;\n deposit_address: string;\n destination_domain_id?: number;\n fee?: string;\n project: \"nearintents\" | \"layerzero\" | \"cctp\";\n receive_address: string;\n source_domain_id?: number;\n out_amount?: string;\n from_chain?: string;\n symbol?: string;\n to_chain?: string;\n to_symbol?: string;\n tx_hash?: string;\n layer_zero_permit?: unknown;\n frax_zero_permit?: unknown;\n },\n): CancelablePromise<SubmitDepositTxResponse> => {\n return postRequest('/v0/trade/add', requestBody);\n};\n\n/**\n * Full cross-chain bridge API (multi-route quote, send, status).\n * Install `@stableflow/bridges` alongside `@stableflow/core`.\n */\nexport class BridgeSFA {\n public static async getAllQuote(params: GetAllQuoteParams): Promise<Array<{ serviceType: Service; quote?: any; error?: string }>> {\n const results: Array<{ serviceType: Service; quote?: any; error?: string }> = [];\n\n let { minInputAmount = \"1\", disabledServices } = params;\n if (Big(minInputAmount).lte(0)) {\n minInputAmount = \"1\";\n }\n\n if (\n !params.fromToken\n || !params.fromToken.contractAddress\n || !params.toToken\n || !params.toToken.contractAddress\n || !params.refundTo\n || !params.recipient\n || !params.amountWei\n || Big(params.amountWei).lte(minInputAmount)\n ) {\n throw new Error('Invalid parameters');\n }\n\n const formatQuoteParams = (service: Service) => {\n const _params: any = {\n dry: params.dry,\n amountWei: params.amountWei,\n refundTo: params.refundTo || \"\",\n recipient: params.recipient,\n wallet: params.wallet,\n fromToken: params.fromToken,\n toToken: params.toToken,\n prices: params.prices,\n slippageTolerance: params.slippageTolerance,\n evmWallet: params.evmWallet,\n evmAddress: params.evmAddress,\n };\n\n if (([\n Service.OneClick,\n Service.Usdt0OneClick,\n Service.OneClickUsdt0,\n Service.FraxZeroOneClick,\n Service.OneClickFraxZero,\n ] as Service[]).includes(service)) {\n _params.slippageTolerance = params.slippageTolerance * 100;\n _params.originAsset = params.fromToken.assetId;\n _params.destinationAsset = params.toToken.assetId;\n _params.refundType = \"ORIGIN_CHAIN\";\n _params.appFees = params.oneclickParams?.appFees || params.appFees;\n _params.swapType = params.oneclickParams?.swapType;\n _params.isProxy = params.oneclickParams?.isProxy;\n }\n if (([\n Service.Usdt0,\n Service.CCTP,\n Service.Usdt0OneClick,\n Service.OneClickUsdt0\n ] as Service[]).includes(service)) {\n _params.originChain = params.fromToken.chainName;\n _params.destinationChain = params.toToken.chainName;\n }\n return _params;\n };\n\n const fromToken = tokens.find(token => token.contractAddress.toLowerCase() === params.fromToken.contractAddress.toLowerCase());\n const toToken = tokens.find(token => token.contractAddress.toLowerCase() === params.toToken.contractAddress.toLowerCase());\n\n if (!fromToken || !toToken) {\n throw new Error('Token pair not supported');\n }\n\n const isFromUsdt = [\"USDT\", \"USD₮0\"].includes(fromToken.symbol);\n const isToUsdt = [\"USDT\", \"USD₮0\"].includes(toToken.symbol);\n\n const quoteServices: any = [];\n const pushQuoteService = (_service: Service) => {\n const serviceStatus = getRouteStatus(_service, disabledServices);\n if (serviceStatus.disabled) {\n return;\n }\n const quoteParams = formatQuoteParams(_service);\n quoteServices.push({\n service: _service,\n quote: () => {\n return ServiceMap[_service].quote(quoteParams);\n },\n });\n };\n\n for (const serviceType of Object.values(Service)) {\n if (\n fromToken.services.includes(serviceType)\n && toToken.services.includes(serviceType)\n ) {\n pushQuoteService(serviceType);\n }\n }\n\n if (\n fromToken.services.includes(Service.Usdt0)\n && toToken.services.includes(Service.OneClick)\n && fromToken.chainName !== \"Arbitrum\"\n ) {\n if (isFromUsdt && isToUsdt) {\n if (toToken.chainName !== \"Arbitrum\") {\n pushQuoteService(Service.Usdt0OneClick);\n }\n } else {\n pushQuoteService(Service.Usdt0OneClick);\n }\n }\n\n if (\n fromToken.services.includes(Service.OneClick)\n && toToken.services.includes(Service.Usdt0)\n && toToken.chainName !== \"Arbitrum\"\n ) {\n if (isFromUsdt && isToUsdt) {\n if (fromToken.chainName !== \"Arbitrum\") {\n pushQuoteService(Service.OneClickUsdt0);\n }\n } else {\n pushQuoteService(Service.OneClickUsdt0);\n }\n }\n\n if (\n fromToken.services.includes(Service.FraxZero)\n && toToken.services.includes(Service.OneClick)\n ) {\n pushQuoteService(Service.FraxZeroOneClick);\n }\n\n if (\n fromToken.services.includes(Service.OneClick)\n && toToken.services.includes(Service.FraxZero)\n ) {\n pushQuoteService(Service.OneClickFraxZero);\n }\n\n if (params.singleService) {\n const quoteService = quoteServices.find((service: any) => service.service === params.singleService);\n if (quoteService) {\n try {\n const quoteRes = await quoteService.quote();\n results.push({\n serviceType: quoteService.service,\n quote: quoteRes,\n });\n } catch (error) {\n const _err = formatQuoteError(error, { service: quoteService.service, fromToken });\n results.push(_err);\n }\n }\n return results;\n }\n\n const promises: Promise<void>[] = [];\n for (const quoteService of quoteServices) {\n const promise = (async () => {\n try {\n const quoteRes = await quoteService.quote();\n results.push({\n serviceType: quoteService.service,\n quote: quoteRes,\n });\n } catch (error) {\n console.log(\"%s quote failed: %o\", quoteService.service, error);\n const _err = formatQuoteError(error, { service: quoteService.service, fromToken });\n results.push(_err);\n }\n })();\n promises.push(promise);\n }\n await Promise.allSettled(promises);\n return results;\n }\n\n public static async send(\n serviceType: Service,\n params: {\n wallet: any;\n quote: any;\n permitSignature?: {\n amount: string;\n deadline: number;\n nonce: string;\n owner: string;\n r: string;\n s: string;\n v: 27 | 28;\n };\n }\n ): Promise<string> {\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const service = ServiceMap[serviceType];\n if (!service) {\n throw new Error(`Invalid service type: ${serviceType}`);\n }\n\n if (!service.send) {\n throw new Error(`Service ${serviceType} does not support send method`);\n }\n\n const { quote, wallet, permitSignature } = params;\n\n if (!quote) {\n throw new Error('Quote data is required');\n }\n\n if (quote.needPermit) {\n if (!permitSignature) {\n throw new Error('Permit signature is required');\n }\n }\n\n const sendParams: any = {\n wallet,\n };\n\n const { isExactOutput, isOneClickService, isQuoteParamDepositAddress } = getQuoteModes({\n quoteData: quote,\n bridgeStore: { quoteDataService: serviceType },\n });\n const fromToken = quote.quoteParam.fromToken;\n const toToken = quote.quoteParam.toToken;\n const depositAddress = quote.quote?.depositAddress;\n const sendParam = quote.sendParam;\n\n let _amountWei = quote.quoteParam?.amountWei;\n if (isExactOutput) {\n _amountWei = quote.quote?.minAmountIn;\n }\n\n if (isOneClickService) {\n sendParams.sendParam = sendParam;\n sendParams.fromToken = fromToken;\n sendParams.depositAddress = depositAddress;\n sendParams.amountWei = _amountWei;\n } else {\n for (const key in sendParam) {\n sendParams[key] = sendParam[key];\n }\n }\n\n csl(\"BridgeSFA.send\", \"blue-400\", \"sendParams: %o\", sendParams);\n\n const txhash = await service.send(sendParams);\n\n try {\n const reportData: any = {\n project: ServiceBackend[serviceType] as any,\n address: quote.quoteParam?.refundTo,\n amount: isExactOutput ? quote.quote.amountInFormatted : Big(_amountWei || 0).div(10 ** (fromToken?.decimals || 6)).toFixed(fromToken?.decimals || 6, 0),\n out_amount: quote.outputAmount,\n deposit_address: isOneClickService ? quote.quote?.depositAddress : \"\",\n receive_address: quote.quoteParam?.recipient,\n from_chain: fromToken.blockchain,\n symbol: /^USD₮0$/i.test(fromToken.symbol) ? \"USDT\" : fromToken.symbol,\n to_chain: toToken.blockchain,\n to_symbol: /^USD₮0$/i.test(toToken.symbol) ? \"USDT\" : toToken.symbol,\n tx_hash: \"\",\n };\n\n if (permitSignature) {\n if (([Service.OneClickUsdt0] as Service[]).includes(serviceType)) {\n reportData.layer_zero_permit = {\n ...permitSignature,\n ...quote.permitAdditionalData,\n };\n }\n if (([Service.OneClickFraxZero, Service.FraxZeroOneClick] as Service[]).includes(serviceType)) {\n reportData.frax_zero_permit = {\n ...permitSignature,\n ...quote.permitAdditionalData,\n };\n }\n }\n\n reportData.tx_hash = txhash;\n\n let _depositAddress = txhash;\n if (isQuoteParamDepositAddress) {\n _depositAddress = quote.quoteParam?.depositAddress || txhash;\n }\n if (!reportData.deposit_address) {\n reportData.deposit_address = _depositAddress;\n }\n\n if (serviceType === Service.Native) {\n const quoteIds = quote?.orders?.map?.((order: any) => order.quoteId) || [];\n reportData.quoteIds = quoteIds;\n }\n\n csl(\"BridgeSFA.send\", \"blue-400\", \"reportData: %o\", reportData);\n\n submitOthersTx(reportData);\n } catch (error) {\n console.log(\"%cReport tx failed: %o\", \"background:#f00;color:#fff;\", error);\n }\n\n return txhash;\n }\n\n public static async getStatus(\n serviceType: Service,\n params: {\n quote: any;\n hash: string;\n }\n ): Promise<{ status: TransactionStatus; toChainTxHash?: string; }> {\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const service = ServiceMap[serviceType];\n if (!service) {\n throw new Error(`Invalid service type: ${serviceType}`);\n }\n\n if (!service.getStatus) {\n throw new Error(`Service ${serviceType} does not support getStatus method`);\n }\n\n const { quote, hash } = params;\n\n const getStatusParams: GetStatusParams = {};\n\n const { isOneClickService, isQuoteParamDepositAddress } = getQuoteModes({\n quoteData: quote,\n bridgeStore: { quoteDataService: serviceType },\n });\n\n getStatusParams.depositAddress = isOneClickService ? quote.quote.depositAddress : \"\";\n getStatusParams.hash = hash;\n\n if (!isOneClickService) {\n let _depositAddress = hash;\n if (isQuoteParamDepositAddress) {\n _depositAddress = quote?.quoteParam?.depositAddress || hash;\n }\n getStatusParams.depositAddress = _depositAddress;\n }\n\n csl(\"getStatus\", \"fuchsia-500\", \"getStatusParams: %o\", getStatusParams);\n\n const result: { status: TransactionStatus; toChainTxHash?: string; } = { status: TransactionStatus.Pending };\n const response = await service.getStatus(getStatusParams);\n\n if (([Service.CCTP, Service.Native] as Service[]).includes(serviceType)) {\n const _result = response?.data;\n const status = _result?.status;\n if (status === StableflowStatus.SUCCESS) {\n result.status = TransactionStatus.Success;\n result.toChainTxHash = _result?.to_tx_hash;\n }\n if (status === StableflowStatus.FAILED) {\n result.status = TransactionStatus.Failed;\n }\n }\n\n if (([Service.Usdt0] as Service[]).includes(serviceType)) {\n const _result = response?.data?.[0];\n const status = _result?.status?.name;\n if (status === LayerZeroStatus.DELIVERED) {\n result.status = TransactionStatus.Success;\n result.toChainTxHash = _result?.destination?.tx?.txHash;\n }\n if ([LayerZeroStatus.FAILED, LayerZeroStatus.BLOCKED].includes(status)) {\n result.status = TransactionStatus.Failed;\n }\n }\n\n if (([Service.OneClick] as Service[]).includes(serviceType)) {\n const status = response?.status;\n\n if (status === OneClickStatus.SUCCESS) {\n result.status = TransactionStatus.Success;\n result.toChainTxHash = response?.swapDetails?.destinationChainTxHashes?.[0]?.hash;\n }\n\n if ([OneClickStatus.REFUNDED, OneClickStatus.FAILED].includes(status)) {\n result.status = TransactionStatus.Failed;\n }\n }\n\n if (([Service.OneClickUsdt0, Service.Usdt0OneClick, Service.FraxZero, Service.OneClickFraxZero, Service.FraxZeroOneClick] as Service[]).includes(serviceType)) {\n const _result = response?.data;\n const status = _result?.status;\n if (status === StableflowStatus.SUCCESS) {\n result.status = TransactionStatus.Success;\n result.toChainTxHash = _result?.to_tx_hash;\n }\n if (status === StableflowStatus.FAILED) {\n result.status = TransactionStatus.Failed;\n }\n }\n\n return result;\n }\n}\n","import { ethers } from \"ethers\";\nimport { USDT0_CONFIG } from \"./config\";\nimport { OFT_ABI } from \"./contract\";\nimport { ExecTime } from \"@stableflow/core\";\nimport { OpenAPI } from \"@stableflow/core\";\nimport { usdt0Chains } from \"@stableflow/core\";\nimport { evmRpcFallbackProvider } from \"@stableflow/utils-evm\";\nimport { Csl } from \"@stableflow/core\";\n\nexport const getHopMsgFee = async (params: any) => {\n const {\n sendParam,\n toToken,\n } = params;\n\n const cs = new Csl(OpenAPI.DEBUG);\n const csl = cs.log;\n\n const execTime = new ExecTime({ type: \"getHopMsgFee\", logStyle: \"lime-800\", isDebug: OpenAPI.DEBUG });\n\n const originLayerzero = USDT0_CONFIG[\"Arbitrum\"];\n const destinationLayerzero = USDT0_CONFIG[toToken.chainName];\n\n let arbitrumOft = originLayerzero.oft;\n let destinationLayerzeroAddress = destinationLayerzero.oft || destinationLayerzero.oftLegacy;\n const isDestinationLegacy = destinationLayerzeroAddress === destinationLayerzero.oftLegacy;\n if (isDestinationLegacy) {\n arbitrumOft = originLayerzero.oftLegacy || originLayerzero.oft;\n }\n\n execTime.breakpoint();\n const provider = evmRpcFallbackProvider(usdt0Chains[\"arb\"]);\n const oftContractRead = new ethers.Contract(arbitrumOft!, OFT_ABI, provider);\n execTime.log(\"provider init\");\n\n try {\n execTime.breakpoint();\n const msgFee = await oftContractRead.quoteSend.staticCall(sendParam, false);\n execTime.log(\"quoteSend\");\n\n const [nativeFee] = msgFee;\n\n execTime.logTotal(\"getHopMsgFee\");\n\n return nativeFee * 100n / 100n;\n } catch (error) {\n csl(\"getHopMsgFee\", \"red-500\", \"getHopMsgFee failed: %o\", error);\n throw new Error(\"Quote multi hop message fee failed\");\n }\n};\n"]}