fmp-ai-tools 0.2.0-beta.8 → 0.2.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/utils/logger.ts","../../../src/utils/format-response.ts","../../../src/utils/openai-tool-wrapper.ts","../../../src/client.ts","../../../src/definitions/types.ts","../../../src/definitions/quote.ts","../../../src/definitions/company.ts","../../../src/definitions/financial.ts","../../../src/definitions/calendar.ts","../../../src/definitions/economic.ts","../../../src/definitions/etf.ts","../../../src/definitions/insider.ts","../../../src/definitions/institutional.ts","../../../src/definitions/market.ts","../../../src/definitions/news.ts","../../../src/definitions/screener.ts","../../../src/definitions/search.ts","../../../src/definitions/analyst.ts","../../../src/definitions/valuation.ts","../../../src/definitions/technical.ts","../../../src/definitions/senate-house.ts","../../../src/definitions/stock.ts","../../../src/definitions/index.ts","../../../src/providers/openai/index.ts"],"names":["tool","FMP","z","symbol","limit","period","symbolSchema"],"mappings":";;;;;;;;;AAgBO,SAAS,mBAAA,GAA+B;AAC7C,EAAA,OAAO,OAAA,CAAQ,IAAI,yBAAA,KAA8B,MAAA;AACnD;AAMO,SAAS,wBAAA,GAAoC;AAClD,EAAA,OAAO,OAAA,CAAQ,IAAI,uBAAA,KAA4B,MAAA;AACjD;AAMA,SAAS,mBAAmB,IAAA,EAAsB;AAEhD,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC9B,IAAA,OAAO,0BAA0B,MAAM,CAAA;AAAA,GACzC,CAAA,MAAQ;AAEN,IAAA,OAAO,0BAA0B,IAAI,CAAA;AAAA;AAEzC;AAKA,SAAS,0BAA0B,IAAA,EAAuB;AACxD,EAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,MAAA,EAAW;AACvC,IAAA,OAAO,CAAA;AAAA;AAGT,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAG5B,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAAA;AAGlC,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAE5B,IAAA,OAAO,IAAA,CAAK,QAAA,EAAS,CAAE,MAAA,GAAS,KAAK,CAAA,GAAI,CAAA;AAAA;AAG3C,EAAA,IAAI,OAAO,SAAS,SAAA,EAAW;AAC7B,IAAA,OAAO,CAAA;AAAA;AAGT,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AAEvB,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,KAAA,MAAW,QAAQ,IAAA,EAAM;AACvB,MAAA,MAAA,IAAU,0BAA0B,IAAI,CAAA;AACxC,MAAA,IAAI,KAAK,OAAA,CAAQ,IAAI,CAAA,GAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACxC,QAAA,MAAA,IAAU,CAAA;AAAA;AACZ;AAEF,IAAA,OAAO,MAAA;AAAA;AAGT,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAE5B,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAC7B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,MAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,MAAA,MAAM,KAAA,GAAS,KAAiC,GAAG,CAAA;AAGnD,MAAA,MAAA,IAAU,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA;AAClC,MAAA,MAAA,IAAU,CAAA;AAGV,MAAA,MAAA,IAAU,CAAA;AAGV,MAAA,MAAA,IAAU,0BAA0B,KAAK,CAAA;AAGzC,MAAA,IAAI,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AACvB,QAAA,MAAA,IAAU,CAAA;AAAA;AACZ;AAEF,IAAA,OAAO,MAAA;AAAA;AAGT,EAAA,OAAO,CAAA;AACT;AAKA,SAAS,0BAA0B,IAAA,EAAsB;AAGvD,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,KAAK,EAAE,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAC9D,EAAA,IAAI,MAAA,GAAS,CAAA;AAEb,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG;AAEtB,MAAA,MAAA,IAAU,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,CAAA,GAAI,CAAA;AAAA,KAClC,MAAA,IAAW,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,EAAG;AAEhC,MAAA,MAAA,IAAU,CAAA;AAAA,KACZ,MAAA,IAAW,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA,EAAG;AAExC,MAAA,MAAA,IAAU,CAAA;AAAA,KACZ,MAAO;AAEL,MAAA,MAAA,IAAU,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,GAAG,CAAA;AAAA;AACvC;AAGF,EAAA,OAAO,MAAA;AACT;AAKA,SAAS,cAAc,MAAA,EAAyB;AAC9C,EAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,EAAW;AAC3C,IAAA,OAAO,gBAAA;AAAA;AAGT,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,UAAA,GAAa,mBAAmB,MAAM,CAAA;AAC5C,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAChC,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,QAAA,OAAO,CAAA,sBAAA,EAAyB,MAAA,CAAO,MAAM,CAAA,SAAA,EAAY,UAAU,CAAA,QAAA,CAAA;AAAA;AACrE,KACF,CAAA,MAAQ;AAAA;AAGR,IAAA,OAAO,CAAA,QAAA,EAAW,MAAA,CAAO,MAAM,CAAA,SAAA,EAAY,UAAU,CAAA,QAAA,CAAA;AAAA;AAGvD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AACrC,IAAA,MAAM,UAAA,GAAa,mBAAmB,OAAO,CAAA;AAC7C,IAAA,OAAO,CAAA,OAAA,EAAU,MAAA,CAAO,MAAM,CAAA,SAAA,EAAY,UAAU,CAAA,QAAA,CAAA;AAAA;AAGtD,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AACrC,IAAA,MAAM,UAAA,GAAa,mBAAmB,OAAO,CAAA;AAC7C,IAAA,OAAO,YAAY,UAAU,CAAA,QAAA,CAAA;AAAA;AAG/B,EAAA,OAAO,OAAO,MAAA;AAChB;AAKO,SAAS,gBAAgB,OAAA,EAA2B;AACzD,EAAA,IAAI,CAAC,qBAAoB,EAAG;AAC1B,IAAA;AAAA;AAGF,EAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAO,MAAA,EAAQ,eAAc,GAAI,OAAA;AAEnD,EAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AACjC,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,8BAAA,EAA0B,QAAQ,CAAA,CAAE,CAAA;AAChD,EAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AAE1B,EAAA,OAAA,CAAQ,IAAI,oBAAa,CAAA;AACzB,EAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,CAAC,CAAC,CAAA;AAE1C,EAAA,MAAM,UAAA,GAAa,cAAc,MAAM,CAAA;AAEvC,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,UAAA,EAAM,QAAQ,CAAA,EAAA,EAAK,UAAU,CAAA,CAAE,CAAA;AAE3C,EAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,8BAAA,EAAyB,aAAa,CAAA,EAAA,CAAI,CAAA;AAAA;AAGxD,EAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,EAAE,IAAI,IAAI,CAAA;AACnC;AAKO,SAAS,YAAY,OAAA,EAA2B;AACrD,EAAA,IAAI,CAAC,0BAAyB,EAAG;AAC/B,IAAA;AAAA;AAGF,EAAA,MAAM,EAAE,QAAO,GAAI,OAAA;AAEnB,EAAA,OAAA,CAAQ,IAAI,qBAAc,CAAA;AAC1B,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI;AAEF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAChC,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,KAC7C,CAAA,MAAQ;AAEN,MAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAAA;AACpB,GACF,MAAO;AACL,IAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA;AAG7C,EAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,EAAE,IAAI,IAAI,CAAA;AACnC;AAKA,eAAsB,yBAAA,CACpB,QAAA,EACA,KAAA,EACA,SAAA,EACY;AACZ,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAAU;AAC/B,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAEnC,IAAA,eAAA,CAAgB;AAAA,MACd,QAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AAGD,IAAA,WAAA,CAAY;AAAA,MACV,QAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,WACA,KAAA,EAAO;AACd,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAGnC,IAAA,IAAI,qBAAoB,EAAG;AACzB,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AACjC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,iCAAA,EAA+B,QAAQ,CAAA,CAAE,CAAA;AACrD,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AAC1B,MAAA,OAAA,CAAQ,IAAI,oBAAa,CAAA;AACzB,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,CAAC,CAAC,CAAA;AAC1C,MAAA,OAAA,CAAQ,IAAI,iBAAY,CAAA;AACxB,MAAA,OAAA,CAAQ,IAAI,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAClE,MAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,8BAAA,EAAyB,aAAa,CAAA,EAAA,CAAI,CAAA;AACtD,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,EAAE,IAAI,IAAI,CAAA;AAAA;AAGnC,IAAA,MAAM,KAAA;AAAA;AAEV;;;ACxQO,SAAS,eAAe,GAAA,EAAmC;AAEhE,EAAA,IAAI,GAAA,CAAI,YAAY,KAAA,EAAO;AACzB,IAAA,OAAO,KAAK,SAAA,CAAU;AAAA,MACpB,KAAA,EAAO,IAAA;AAAA,MACP,IAAA,EAAM,IAAI,SAAA,IAAa,SAAA;AAAA,MACvB,OAAA,EAAS,IAAI,KAAA,IAAS,qBAAA;AAAA,MACtB,QAAQ,GAAA,CAAI;AAAA,KACb,CAAA;AAAA;AAGH,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AACrB,IAAA,OAAO,IAAA,CAAK,UAAU,EAAE,IAAA,EAAM,EAAC,EAAG,IAAA,EAAM,0CAA0C,CAAA;AAAA;AAEpF,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,MAAM,CAAC,CAAA;AACzC;AAUO,SAAS,YAAY,KAAA,EAAwB;AAClD,EAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,EAAA,IAAI,IAAA,GAAqB,SAAA;AACzB,EAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,OAAO,CAAA,EAAG;AAClC,IAAA,IAAA,GAAO,MAAA;AAAA;AAET,EAAA,OAAO,IAAA,CAAK,UAAU,EAAE,KAAA,EAAO,MAAM,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,CAAA,EAAG,CAAA;AACjE;AAEA,SAAS,QAAQ,IAAA,EAAwB;AACvC,EAAA,IAAI,IAAA,IAAQ,MAAM,OAAO,IAAA;AACzB,EAAA,IAAI,MAAM,OAAA,CAAQ,IAAI,CAAA,EAAG,OAAO,KAAK,MAAA,KAAW,CAAA;AAChD,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU,OAAO,OAAO,IAAA,CAAK,IAAc,EAAE,MAAA,KAAW,CAAA;AAC5E,EAAA,OAAO,KAAA;AACT;;;ACrCO,SAAS,iBAA6C,MAAA,EAA6B;AACxF,EAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,WAAA,EAAa,SAAQ,GAAI,MAAA;AAOpD,EAAA,OAAOA,WAAA,CAAK;AAAA,IACV,IAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA,EAAY,WAAA;AAAA,IACZ,OAAA,EAAS,OAAO,KAAA,KAAmB;AACjC,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,WAAA,CAAY,KAAA,CAAM,KAAK,CAAA;AACpC,QAAA,OAAO,MAAM,yBAAA,CAA0B,IAAA,EAAM,MAAM,MAAM,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,eAC/D,KAAA,EAAO;AAGd,QAAA,OAAO,YAAY,KAAK,CAAA;AAAA;AAC1B;AACF,GACD,CAAA;AACH;ACzBA,IAAI,MAAA;AACJ,IAAI,UAAA;AAMG,SAAS,mBAAmB,MAAA,EAAyB;AAC1D,EAAA,UAAA,GAAa,MAAA;AACb,EAAA,MAAA,GAAS,MAAA;AACX;AAGO,SAAS,cAAA,GAAuB;AACrC,EAAA,MAAA,GAAS,MAAA;AACT,EAAA,UAAA,GAAa,MAAA;AACf;AAGO,SAAS,YAAA,GAAoB;AAClC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAA,GAAS,IAAIC,eAAI,UAAU,CAAA;AAAA;AAE7B,EAAA,OAAO,MAAA;AACT;;;ACXO,SAAS,WAAuC,GAAA,EAKjC;AACpB,EAAA,OAAO,GAAA;AACT;;;ACxBO,IAAM,gBAAA,GAAwC;AAAA,EACnD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EACE,sFAAA;AAAA,IACF,WAAA,EAAaC,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MACL,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,0BAA0B,CAAA,CACjC,QAAA,CAAS,sDAAsD;AAAA,KACnE,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,EAAO,KAAM,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,KAAA,CAAM,QAAA,CAASA,OAAM,CAAC;AAAA,GAC1F,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,oBAAA;AAAA,IACN,WAAA,EACE,8GAAA;AAAA,IACF,WAAA,EAAaD,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,mCAAmC,CAAA;AAAA,MACtE,IAAA,EAAMA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4CAA4C,CAAA;AAAA,MAC5F,EAAA,EAAIA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,0CAA0C,CAAA;AAAA,MACxF,KAAA,EAAOA,KAAA,CACJ,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,uDAAuD;AAAA,KACpE,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,EAAQ,MAAM,EAAA,EAAI,KAAA,EAAAC,MAAAA,GAAQ,EAAA,EAAG,KAAM;AACnD,MAAA,MAAM,GAAA,GAAM,MAAM,YAAA,EAAa,CAAE,MAAM,kBAAA,CAAmB;AAAA,QACxD,MAAA,EAAAD,OAAAA;AAAA,QACA,MAAM,IAAA,IAAQ,MAAA;AAAA,QACd,IAAI,EAAA,IAAM;AAAA,OACX,CAAA;AAED,MAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AACjB,MAAA,IAAI,IAAI,OAAA,IAAW,IAAA,IAAQ,MAAM,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG;AACzD,QAAA,OAAO,cAAA,CAAe;AAAA,UACpB,GAAG,GAAA;AAAA,UACH,IAAA,EAAM,EAAE,GAAG,IAAA,EAAM,UAAA,EAAY,KAAK,UAAA,CAAW,KAAA,CAAM,CAAA,EAAGC,MAAK,CAAA;AAAE,SACtC,CAAA;AAAA;AAE3B,MAAA,OAAO,eAAe,GAAG,CAAA;AAAA;AAC3B,GACD,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,aAAA;AAAA,IACN,WAAA,EACE,iGAAA;AAAA,IACF,WAAA,EAAaF,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,mCAAmC,CAAA;AAAA,MACtE,UAAUA,KAAA,CACP,IAAA,CAAK,CAAC,MAAA,EAAQ,QAAQ,OAAA,EAAS,OAAA,EAAS,OAAA,EAAS,OAAO,CAAC,CAAA,CACzD,OAAA,CAAQ,MAAM,CAAA,CACd,SAAS,cAAc,CAAA;AAAA,MAC1B,IAAA,EAAMA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4CAA4C,CAAA;AAAA,MAC5F,EAAA,EAAIA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,0CAA0C,CAAA;AAAA,MACxF,KAAA,EAAOA,KAAA,CACJ,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,uDAAuD;AAAA,KACpE,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,EAAQ,QAAA,GAAW,MAAA,EAAQ,IAAA,EAAM,EAAA,EAAI,KAAA,EAAAC,MAAAA,GAAQ,EAAA,EAAG,KAAM;AACtE,MAAA,MAAM,GAAA,GAAM,MAAM,YAAA,EAAa,CAAE,MAAM,WAAA,CAAY;AAAA,QACjD,MAAA,EAAAD,OAAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAM,IAAA,IAAQ,MAAA;AAAA,QACd,IAAI,EAAA,IAAM;AAAA,OACX,CAAA;AACD,MAAA,IAAI,IAAI,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AAC1C,QAAA,OAAO,cAAA,CAAe,EAAE,GAAG,GAAA,EAAK,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,CAAA,EAAGC,MAAK,CAAA,EAA2B,CAAA;AAAA;AAE1F,MAAA,OAAO,eAAe,GAAG,CAAA;AAAA;AAC3B,GACD;AACH,CAAA;AC9EA,IAAM,YAAA,GAAeF,MAAE,MAAA,CAAO;AAAA,EAC5B,MAAA,EAAQA,MACL,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,0BAA0B,CAAA,CACjC,QAAA,CAAS,4CAA4C;AAC1D,CAAC,CAAA;AAEM,IAAM,kBAAA,GAA0C;AAAA,EACrD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,mBAAA;AAAA,IACN,WAAA,EAAa,uCAAA;AAAA,IACb,WAAA,EAAa,YAAA;AAAA,IACb,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,EAAO,KACvB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,OAAA,CAAQ,iBAAA,CAAkBA,OAAM,CAAC;AAAA,GACxE,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,uBAAA;AAAA,IACN,WAAA,EAAa,8BAAA;AAAA,IACb,WAAA,EAAa,YAAA;AAAA,IACb,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAA,OAAAA,EAAO,KACvB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,OAAA,CAAQ,cAAA,CAAeA,OAAM,CAAC;AAAA,GACrE,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,iCAAA;AAAA,IACN,WAAA,EAAa,wCAAA;AAAA,IACb,WAAA,EAAa,YAAA;AAAA,IACb,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAA,OAAAA,EAAO,KACvB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,OAAA,CAAQ,wBAAA,CAAyBA,OAAM,CAAC;AAAA,GAC/E;AACH,CAAA;AC7BA,IAAM,MAAA,GAASD,KAAAA,CACZ,IAAA,CAAK,CAAC,QAAA,EAAU,SAAS,CAAC,CAAA,CAC1B,OAAA,CAAQ,QAAQ,CAAA,CAChB,QAAA,CAAS,qCAAqC,CAAA;AAEjD,IAAM,MAAA,GAAS,CAAC,IAAA,KAAiBA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,wBAAA,EAA2B,IAAI,CAAA,IAAA,CAAM,CAAA;AAEjG,IAAM,KAAA,GAAQA,MAAE,MAAA,EAAO,CAAE,QAAQ,CAAC,CAAA,CAAE,SAAS,mCAAmC,CAAA;AAGhF,IAAM,gBAAgB,CACpB,IAAA,EACA,WAAA,EACA,IAAA,EACA,SAEA,UAAA,CAAW;AAAA,EACT,IAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA,EAAaA,KAAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQ,OAAO,IAAI,CAAA,EAAG,MAAA,EAAQ,KAAA,EAAO,CAAA;AAAA,EAC7D,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,SAAQ,MAAA,EAAAE,OAAAA,EAAQ,OAAAD,MAAAA,EAAM,KAAM,eAAe,MAAM,IAAA,CAAK,EAAE,MAAA,EAAAD,OAAAA,EAAQ,QAAAE,OAAAA,EAAQ,KAAA,EAAAD,MAAAA,EAAO,CAAC;AACpG,CAAC,CAAA;AAEI,IAAM,oBAAA,GAA4C;AAAA,EACvD,aAAA;AAAA,IACE,iBAAA;AAAA,IACA,yEAAA;AAAA,IACA,eAAA;AAAA,IACA,CAAA,IAAA,KAAQ,YAAA,EAAa,CAAE,SAAA,CAAU,gBAAgB,IAAI;AAAA,GACvD;AAAA,EACA,aAAA;AAAA,IACE,oBAAA;AAAA,IACA,0EAAA;AAAA,IACA,kBAAA;AAAA,IACA,CAAA,IAAA,KAAQ,YAAA,EAAa,CAAE,SAAA,CAAU,mBAAmB,IAAI;AAAA,GAC1D;AAAA,EACA,aAAA;AAAA,IACE,sBAAA;AAAA,IACA,8FAAA;AAAA,IACA,qBAAA;AAAA,IACA,CAAA,IAAA,KAAQ,YAAA,EAAa,CAAE,SAAA,CAAU,qBAAqB,IAAI;AAAA,GAC5D;AAAA,EACA,aAAA;AAAA,IACE,eAAA;AAAA,IACA,+BAAA;AAAA,IACA,aAAA;AAAA,IACA,CAAA,IAAA,KAAQ,YAAA,EAAa,CAAE,SAAA,CAAU,cAAc,IAAI;AAAA,GACrD;AAAA,EACA,aAAA;AAAA,IACE,oBAAA;AAAA,IACA,+FAAA;AAAA,IACA,kBAAA;AAAA,IACA,CAAA,IAAA,KAAQ,YAAA,EAAa,CAAE,SAAA,CAAU,mBAAmB,IAAI;AAAA,GAC1D;AAAA,EACA,aAAA;AAAA,IACE,oBAAA;AAAA,IACA,oCAAA;AAAA,IACA,kBAAA;AAAA,IACA,CAAA,IAAA,KAAQ,YAAA,EAAa,CAAE,SAAA,CAAU,mBAAmB,IAAI;AAAA,GAC1D;AAAA,EACA,aAAA;AAAA,IACE,mBAAA;AAAA,IACA,mCAAA;AAAA,IACA,iBAAA;AAAA,IACA,CAAA,IAAA,KAAQ,YAAA,EAAa,CAAE,SAAA,CAAU,kBAAkB,IAAI;AAAA,GACzD;AAAA,EACA,aAAA;AAAA,IACE,iBAAA;AAAA,IACA,iCAAA;AAAA,IACA,eAAA;AAAA,IACA,CAAA,IAAA,KAAQ,YAAA,EAAa,CAAE,SAAA,CAAU,gBAAgB,IAAI;AAAA,GACvD;AAAA,EACA,aAAA;AAAA,IACE,uBAAA;AAAA,IACA,wCAAA;AAAA,IACA,sBAAA;AAAA,IACA,CAAA,IAAA,KAAQ,YAAA,EAAa,CAAE,SAAA,CAAU,sBAAsB,IAAI;AAAA,GAC7D;AAAA,EACA,aAAA;AAAA,IACE,oBAAA;AAAA,IACA,oCAAA;AAAA,IACA,kBAAA;AAAA,IACA,CAAA,IAAA,KAAQ,YAAA,EAAa,CAAE,SAAA,CAAU,mBAAmB,IAAI;AAAA,GAC1D;AAAA,EACA,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,uBAAA;AAAA,IACN,WAAA,EAAa,uCAAA;AAAA,IACb,WAAA,EAAaF,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQ,OAAO,qBAAqB,CAAA;AAAA,MACpC,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,QAAQ,EAAE,CAAA,CAAE,SAAS,mCAAmC;AAAA,KAC3E,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,SAAQ,KAAA,EAAAC,MAAAA,OACxB,cAAA,CAAe,MAAM,cAAa,CAAE,SAAA,CAAU,sBAAsB,EAAE,MAAA,EAAAD,SAAQ,KAAA,EAAAC,MAAAA,EAAO,CAAC;AAAA,GACzF;AACH,CAAA;AC9FA,IAAM,eAAA,GAAkBF,MAAE,MAAA,CAAO;AAAA,EAC/B,IAAA,EAAMA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4CAA4C,CAAA;AAAA,EAC5F,EAAA,EAAIA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,0CAA0C;AAC1F,CAAC,CAAA;AAEM,IAAM,mBAAA,GAA2C;AAAA,EACtD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,qBAAA;AAAA,IACN,WAAA,EAAa,0EAAA;AAAA,IACb,WAAA,EAAa,eAAA;AAAA,IACb,OAAA,EAAS,OAAO,EAAE,IAAA,EAAM,IAAG,KACzB,cAAA;AAAA,MACE,MAAM,YAAA,EAAa,CAAE,QAAA,CAAS,mBAAA,CAAoB;AAAA,QAChD,MAAM,IAAA,IAAQ,MAAA;AAAA,QACd,IAAI,EAAA,IAAM;AAAA,OACX;AAAA;AACH,GACH,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,qBAAA;AAAA,IACN,WAAA,EAAa,kFAAA;AAAA,IACb,WAAA,EAAa,eAAA;AAAA,IACb,OAAA,EAAS,OAAO,EAAE,IAAA,EAAM,IAAG,KACzB,cAAA;AAAA,MACE,MAAM,YAAA,EAAa,CAAE,QAAA,CAAS,oBAAA,CAAqB;AAAA,QACjD,MAAM,IAAA,IAAQ,MAAA;AAAA,QACd,IAAI,EAAA,IAAM;AAAA,OACX;AAAA;AACH,GACH;AACH,CAAA;AC9BA,IAAM,sBAAA,GAAyB;AAAA,EAC7B,KAAA;AAAA,EACA,SAAA;AAAA,EACA,qBAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA,KAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,mBAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA,qBAAA;AAAA,EACA,eAAA;AAAA,EACA,gCAAA;AAAA,EACA,gDAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kCAAA;AAAA,EACA,kDAAA;AAAA,EACA,wDAAA;AAAA,EACA,gCAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,mBAAA,GAA2C;AAAA,EACtD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,kBAAA;AAAA,IACN,WAAA,EAAa,uDAAA;AAAA,IACb,WAAA,EAAaA,MAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAMA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4CAA4C,CAAA;AAAA,MAC5F,EAAA,EAAIA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,0CAA0C;AAAA,KACzF,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,IAAA,EAAM,IAAG,KACzB,cAAA;AAAA,MACE,MAAM,YAAA,EAAa,CAAE,QAAA,CAAS,gBAAA,CAAiB;AAAA,QAC7C,MAAM,IAAA,IAAQ,MAAA;AAAA,QACd,IAAI,EAAA,IAAM;AAAA,OACX;AAAA;AACH,GACH,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,uBAAA;AAAA,IACN,WAAA,EAAa,sEAAA;AAAA,IACb,WAAA,EAAaA,MAAE,MAAA,CAAO;AAAA,MACpB,MAAMA,KAAAA,CAAE,IAAA,CAAK,sBAAsB,CAAA,CAAE,SAAS,oCAAoC,CAAA;AAAA,MAClF,IAAA,EAAMA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4CAA4C,CAAA;AAAA,MAC5F,EAAA,EAAIA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,0CAA0C;AAAA,KACzF,CAAA;AAAA,IACD,SAAS,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,IAAG,KAC/B,cAAA;AAAA,MACE,MAAM,YAAA,EAAa,CAAE,QAAA,CAAS,qBAAA,CAAsB;AAAA,QAClD,IAAA;AAAA,QACA,MAAM,IAAA,IAAQ,MAAA;AAAA,QACd,IAAI,EAAA,IAAM;AAAA,OACX;AAAA;AACH,GACH;AACH,CAAA;AC3DO,IAAM,cAAA,GAAsC;AAAA,EACjD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,gBAAA;AAAA,IACN,WAAA,EACE,6FAAA;AAAA,IACF,WAAA,EAAaA,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MACL,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,wBAAwB,CAAA,CAC/B,QAAA,CAAS,kCAAkC,CAAA;AAAA,MAC9C,IAAA,EAAMA,MACH,MAAA,EAAO,CACP,UAAS,CACT,QAAA,EAAS,CACT,QAAA,CAAS,mDAAmD;AAAA,KAChE,CAAA;AAAA,IACD,SAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,EAAQ,MAAK,KAAM;AAEnC,MAAA,MAAM,MAAA,GAAc,EAAE,MAAA,EAAAA,OAAAA,EAAO;AAC7B,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,MAAA,CAAO,IAAA,GAAO,IAAA;AAAA;AAEhB,MAAA,OAAO,eAAe,MAAM,YAAA,GAAe,GAAA,CAAI,WAAA,CAAY,MAAM,CAAC,CAAA;AAAA;AACpE,GACD,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAa,oFAAA;AAAA,IACb,WAAA,EAAaD,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MACL,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,wBAAwB,CAAA,CAC/B,QAAA,CAAS,kCAAkC;AAAA,KAC/C,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,EAAO,KAAM,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,GAAA,CAAI,UAAA,CAAWA,OAAM,CAAC;AAAA,GAC1F;AACH,CAAA;ACpCO,IAAM,kBAAA,GAA0C;AAAA,EACrD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,mBAAA;AAAA,IACN,WAAA,EACE,wGAAA;AAAA,IACF,WAAA,EAAaD,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MACL,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,0BAA0B,CAAA,CACjC,QAAA,CAAS,wCAAwC,CAAA;AAAA,MACpD,IAAA,EAAMA,KAAAA,CACH,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,OAAA,CAAQ,CAAC,CAAA,CACT,SAAS,sDAAsD;AAAA,KACnE,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,SAAQ,IAAA,EAAK,KAC7B,cAAA,CAAe,MAAM,cAAa,CAAE,OAAA,CAAQ,wBAAA,CAAyBA,OAAAA,EAAQ,IAAI,CAAC;AAAA,GACrF;AACH,CAAA;ACpBO,IAAM,wBAAA,GAAgD;AAAA,EAC3D,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,yBAAA;AAAA,IACN,WAAA,EACE,gHAAA;AAAA,IACF,WAAA,EAAaD,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MACL,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,0BAA0B,CAAA,CACjC,QAAA,CAAS,wCAAwC;AAAA,KACrD,CAAA;AAAA,IACD,SAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,cAAc,uBAAA,CAAwB,EAAE,MAAA,EAAAA,OAAAA,EAAQ,CAAC;AAAA,GACxF;AACH,CAAA;ACdA,IAAM,KAAA,GAAQD,KAAAA,CAAE,MAAA,CAAO,EAAE,CAAA;AAElB,IAAM,iBAAA,GAAyC;AAAA,EACpD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,sBAAA;AAAA,IACN,WAAA,EAAa,yEAAA;AAAA,IACb,WAAA,EAAa,KAAA;AAAA,IACb,OAAA,EAAS,YAAY,cAAA,CAAe,MAAM,cAAa,CAAE,MAAA,CAAO,sBAAsB;AAAA,GACvF,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,sBAAA;AAAA,IACN,WAAA,EAAa,iFAAA;AAAA,IACb,WAAA,EAAa,KAAA;AAAA,IACb,OAAA,EAAS,YAAY,cAAA,CAAe,MAAM,cAAa,CAAE,MAAA,CAAO,sBAAsB;AAAA,GACvF,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAa,sEAAA;AAAA,IACb,WAAA,EAAa,KAAA;AAAA,IACb,OAAA,EAAS,YAAY,cAAA,CAAe,MAAM,cAAa,CAAE,MAAA,CAAO,YAAY;AAAA,GAC7E,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,WAAA;AAAA,IACN,WAAA,EAAa,sEAAA;AAAA,IACb,WAAA,EAAa,KAAA;AAAA,IACb,OAAA,EAAS,YAAY,cAAA,CAAe,MAAM,cAAa,CAAE,MAAA,CAAO,WAAW;AAAA,GAC5E,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAa,uEAAA;AAAA,IACb,WAAA,EAAa,KAAA;AAAA,IACb,OAAA,EAAS,YAAY,cAAA,CAAe,MAAM,cAAa,CAAE,MAAA,CAAO,eAAe;AAAA,GAChF;AACH,CAAA;ACjCO,IAAM,eAAA,GAAuC;AAAA,EAClD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EAAa,mDAAA;AAAA,IACb,WAAA,EAAaA,MAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAMA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4CAA4C,CAAA;AAAA,MAC5F,EAAA,EAAIA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,0CAA0C,CAAA;AAAA,MACxF,KAAA,EAAOA,KAAAA,CACJ,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,+CAA+C;AAAA,KAC5D,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,IAAA,EAAM,IAAI,KAAA,EAAAE,MAAAA,GAAQ,IAAG,KACrC,cAAA;AAAA,MACE,MAAM,YAAA,EAAa,CAAE,IAAA,CAAK,YAAA,CAAa;AAAA,QACrC,MAAM,IAAA,IAAQ,MAAA;AAAA,QACd,IAAI,EAAA,IAAM,MAAA;AAAA,QACV,KAAA,EAAAA;AAAA,OACD;AAAA;AACH,GACH,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,sBAAA;AAAA,IACN,WAAA,EAAa,qEAAA;AAAA,IACb,WAAA,EAAaF,MAAE,MAAA,CAAO;AAAA,MACpB,OAAA,EAASA,KAAAA,CACN,KAAA,CAAMA,KAAAA,CAAE,QAAO,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA,CACvB,GAAA,CAAI,CAAC,CAAA,CACL,SAAS,wDAAwD,CAAA;AAAA,MACpE,IAAA,EAAMA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4CAA4C,CAAA;AAAA,MAC5F,EAAA,EAAIA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,0CAA0C,CAAA;AAAA,MACxF,KAAA,EAAOA,KAAAA,CACJ,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,+CAA+C;AAAA,KAC5D,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,OAAA,EAAS,MAAM,EAAA,EAAI,KAAA,EAAAE,MAAAA,GAAQ,EAAA,EAAG,KAC9C,cAAA;AAAA,MACE,MAAM,YAAA,EAAa,CAAE,IAAA,CAAK,oBAAA,CAAqB;AAAA,QAC7C,OAAA;AAAA,QACA,MAAM,IAAA,IAAQ,MAAA;AAAA,QACd,IAAI,EAAA,IAAM,MAAA;AAAA,QACV,KAAA,EAAAA;AAAA,OACD;AAAA;AACH,GACH;AACH,CAAA;ACjDO,IAAM,mBAAA,GAA2C;AAAA,EACtD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EACE,wHAAA;AAAA,IACF,WAAA,EAAaF,MAAE,MAAA,CAAO;AAAA,MACpB,iBAAA,EAAmBA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,+BAA+B,CAAA;AAAA,MAC5F,kBAAA,EAAoBA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,+BAA+B,CAAA;AAAA,MAC7F,aAAA,EAAeA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,qBAAqB,CAAA;AAAA,MAC9E,cAAA,EAAgBA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,qBAAqB,CAAA;AAAA,MAC/E,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,oCAAoC,CAAA;AAAA,MACtF,QAAA,EAAUA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,iBAAiB,CAAA;AAAA,MACrE,QAAA,EAAUA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,kCAAkC,CAAA;AAAA,MACtF,OAAA,EAASA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,6BAA6B,CAAA;AAAA,MAChF,KAAA,EAAOA,MAAE,OAAA,EAAQ,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,kBAAkB,CAAA;AAAA,MACpE,iBAAA,EAAmBA,MAAE,OAAA,EAAQ,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,8BAA8B,CAAA;AAAA,MAC5F,KAAA,EAAOA,KAAAA,CACJ,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,8CAA8C;AAAA,KAC3D,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,KAAA,EAAAE,SAAQ,EAAA,EAAI,GAAG,SAAQ,KAAM;AAE7C,MAAA,MAAM,MAAA,GAAkC,EAAE,KAAA,EAAAA,MAAAA,EAAM;AAChD,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClD,QAAA,IAAI,UAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA;AAE3D,MAAA,OAAO,eAAe,MAAM,YAAA,GAAe,QAAA,CAAS,WAAA,CAAY,MAAwB,CAAC,CAAA;AAAA;AAC3F,GACD;AACH,CAAA;ACjCO,IAAM,iBAAA,GAAyC;AAAA,EACpD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EACE,gGAAA;AAAA,IACF,WAAA,EAAaF,MAAE,MAAA,CAAO;AAAA,MACpB,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,sCAAsC,CAAA;AAAA,MACxE,KAAA,EAAOA,KAAAA,CACJ,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,8CAA8C,CAAA;AAAA,MAC1D,QAAA,EAAUA,MACP,MAAA,EAAO,CACP,UAAS,CACT,QAAA,EAAS,CACT,QAAA,CAAS,4DAA4D;AAAA,KACzE,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,KAAA,EAAO,OAAAE,MAAAA,GAAQ,EAAA,EAAI,UAAS,KAC5C,cAAA;AAAA,MACE,MAAM,YAAA,EAAa,CAAE,MAAA,CAAO,MAAA,CAAO,EAAE,KAAA,EAAO,KAAA,EAAAA,MAAAA,EAAO,QAAA,EAAU,QAAA,IAAY,MAAA,EAAW;AAAA;AACtF,GACH;AACH,CAAA;ACvBO,IAAM,kBAAA,GAA0C;AAAA,EACrD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,qBAAA;AAAA,IACN,WAAA,EACE,mFAAA;AAAA,IACF,WAAA,EAAaF,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,+BAA+B,CAAA;AAAA,MAClE,MAAA,EAAQA,KAAAA,CACL,IAAA,CAAK,CAAC,QAAA,EAAU,SAAS,CAAC,CAAA,CAC1B,OAAA,CAAQ,QAAQ,CAAA,CAChB,QAAA,CAAS,qCAAqC,CAAA;AAAA,MACjD,KAAA,EAAOA,KAAAA,CACJ,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,8CAA8C;AAAA,KAC3D,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,EAAQ,MAAA,EAAAE,OAAAA,GAAS,QAAA,EAAU,KAAA,EAAAD,MAAAA,GAAQ,EAAA,EAAG,KACtD,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,OAAA,CAAQ,YAAA,CAAa,EAAE,MAAA,EAAAD,OAAAA,EAAQ,MAAA,EAAAE,OAAAA,EAAQ,KAAA,EAAAD,MAAAA,EAAO,CAAC;AAAA,GACtF,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,yBAAA;AAAA,IACN,WAAA,EACE,qFAAA;AAAA,IACF,WAAA,EAAaF,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,+BAA+B;AAAA,KACnE,CAAA;AAAA,IACD,SAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,QAAQ,uBAAA,CAAwB,EAAE,MAAA,EAAAA,OAAAA,EAAQ,CAAC;AAAA,GAClF,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,gBAAA;AAAA,IACN,WAAA,EACE,qFAAA;AAAA,IACF,WAAA,EAAaD,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,+BAA+B,CAAA;AAAA,MAClE,KAAA,EAAOA,KAAAA,CACJ,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,oDAAoD;AAAA,KACjE,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,SAAQ,KAAA,EAAAC,MAAAA,GAAQ,IAAG,KAAM;AACzC,MAAA,MAAM,GAAA,GAAM,MAAM,YAAA,EAAa,CAAE,QAAQ,SAAA,CAAU,EAAE,MAAA,EAAAD,OAAAA,EAAQ,CAAA;AAC7D,MAAA,IAAI,IAAI,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AAC1C,QAAA,OAAO,cAAA,CAAe,EAAE,GAAG,GAAA,EAAK,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,CAAA,EAAGC,MAAK,CAAA,EAA2B,CAAA;AAAA;AAE1F,MAAA,OAAO,eAAe,GAAG,CAAA;AAAA;AAC3B,GACD;AACH,CAAA;ACrDA,IAAME,aAAAA,GAAeJ,MAAE,MAAA,CAAO;AAAA,EAC5B,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,+BAA+B;AACpE,CAAC,CAAA;AAEM,IAAM,oBAAA,GAA4C;AAAA,EACvD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,uBAAA;AAAA,IACN,WAAA,EACE,4FAAA;AAAA,IACF,WAAA,EAAaI,aAAAA;AAAA,IACb,SAAS,OAAO,EAAE,MAAA,EAAAH,OAAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,UAAU,qBAAA,CAAsB,EAAE,MAAA,EAAAA,OAAAA,EAAQ,CAAC;AAAA,GAClF,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,kBAAA;AAAA,IACN,WAAA,EAAa,uDAAA;AAAA,IACb,WAAA,EAAaG,aAAAA;AAAA,IACb,SAAS,OAAO,EAAE,MAAA,EAAAH,OAAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,UAAU,iBAAA,CAAkB,EAAE,MAAA,EAAAA,OAAAA,EAAQ,CAAC;AAAA,GAC9E;AACH,CAAA;ACnBO,IAAM,oBAAA,GAA4C;AAAA,EACvD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,uBAAA;AAAA,IACN,WAAA,EACE,iIAAA;AAAA,IACF,WAAA,EAAaD,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,mCAAmC,CAAA;AAAA,MACtE,MAAMA,KAAAA,CACH,IAAA,CAAK,CAAC,KAAA,EAAO,OAAO,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,qBAAqB,UAAA,EAAY,KAAK,CAAC,CAAA,CACzF,SAAS,oBAAoB,CAAA;AAAA,MAChC,YAAA,EAAcA,KAAAA,CACX,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,8DAA8D,CAAA;AAAA,MAC1E,WAAWA,KAAAA,CACR,IAAA,CAAK,CAAC,MAAA,EAAQ,MAAA,EAAQ,SAAS,OAAA,EAAS,OAAA,EAAS,SAAS,MAAA,EAAQ,OAAA,EAAS,QAAQ,CAAC,CAAA,CACpF,QAAQ,MAAM,CAAA,CACd,SAAS,eAAe,CAAA;AAAA,MAC3B,KAAA,EAAOA,KAAAA,CACJ,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,uDAAuD;AAAA,KACpE,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,EAAQ,IAAA,EAAM,YAAA,GAAe,EAAA,EAAI,SAAA,GAAY,MAAA,EAAQ,KAAA,EAAAC,MAAAA,GAAQ,IAAG,KAAM;AACtF,MAAA,MAAM,GAAA,GAAM,MAAM,YAAA,EAAa,CAAE,UAAU,qBAAA,CAAsB;AAAA,QAC/D,MAAA,EAAAD,OAAAA;AAAA,QACA,IAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,IAAI,IAAI,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AAC1C,QAAA,OAAO,cAAA,CAAe,EAAE,GAAG,GAAA,EAAK,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,CAAA,EAAGC,MAAK,CAAA,EAA2B,CAAA;AAAA;AAE1F,MAAA,OAAO,eAAe,GAAG,CAAA;AAAA;AAC3B,GACD;AACH,CAAA;ACzCA,IAAME,aAAAA,GAAeJ,MAAE,MAAA,CAAO;AAAA,EAC5B,MAAA,EAAQA,MACL,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,0BAA0B,CAAA,CACjC,QAAA,CAAS,wCAAwC;AACtD,CAAC,CAAA;AAED,IAAM,aAAA,GAAgBA,MAAE,MAAA,CAAO;AAAA,EAC7B,IAAA,EAAMA,KAAAA,CACH,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,OAAA,CAAQ,CAAC,CAAA,CACT,SAAS,sDAAsD;AACpE,CAAC,CAAA;AAEM,IAAM,sBAAA,GAA8C;AAAA,EACzD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,kBAAA;AAAA,IACN,WAAA,EAAa,kFAAA;AAAA,IACb,WAAA,EAAaI,aAAAA;AAAA,IACb,SAAS,OAAO,EAAE,MAAA,EAAAH,OAAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,YAAY,gBAAA,CAAiB,EAAE,MAAA,EAAAA,OAAAA,EAAQ,CAAC;AAAA,GAC/E,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,iBAAA;AAAA,IACN,WAAA,EACE,wFAAA;AAAA,IACF,WAAA,EAAaG,aAAAA;AAAA,IACb,SAAS,OAAO,EAAE,MAAA,EAAAH,OAAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,YAAY,eAAA,CAAgB,EAAE,MAAA,EAAAA,OAAAA,EAAQ,CAAC;AAAA,GAC9E,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,wBAAA;AAAA,IACN,WAAA,EACE,uFAAA;AAAA,IACF,WAAA,EAAaD,MAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAMA,MACH,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,kBAAkB,CAAA,CACzB,QAAA,CAAS,iDAAiD;AAAA,KAC9D,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,IAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,WAAA,CAAY,sBAAA,CAAuB,EAAE,IAAA,EAAM,CAAC;AAAA,GACnF,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,uBAAA;AAAA,IACN,WAAA,EACE,6FAAA;AAAA,IACF,WAAA,EAAaA,MAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAMA,MACH,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,kBAAkB,CAAA,CACzB,QAAA,CAAS,wDAAwD;AAAA,KACrE,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,IAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,WAAA,CAAY,qBAAA,CAAsB,EAAE,IAAA,EAAM,CAAC;AAAA,GAClF,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,yBAAA;AAAA,IACN,WAAA,EACE,6FAAA;AAAA,IACF,WAAA,EAAa,aAAA;AAAA;AAAA;AAAA,IAGb,OAAA,EAAS,OAAO,EAAE,IAAA,GAAO,GAAE,KACzB,cAAA,CAAe,MAAM,YAAA,GAAe,WAAA,CAAY,uBAAA,CAAwB,EAAE,IAAA,EAAM,CAAC;AAAA,GACpF,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,wBAAA;AAAA,IACN,WAAA,EACE,2FAAA;AAAA,IACF,WAAA,EAAa,aAAA;AAAA;AAAA;AAAA,IAGb,OAAA,EAAS,OAAO,EAAE,IAAA,GAAO,GAAE,KACzB,cAAA,CAAe,MAAM,YAAA,GAAe,WAAA,CAAY,sBAAA,CAAuB,EAAE,IAAA,EAAM,CAAC;AAAA,GACnF;AACH,CAAA;AC9EA,IAAMI,aAAAA,GAAeJ,MAAE,MAAA,CAAO;AAAA,EAC5B,MAAA,EAAQA,MACL,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,0BAA0B,CAAA,CACjC,QAAA,CAAS,4CAA4C;AAC1D,CAAC,CAAA;AAEM,IAAM,gBAAA,GAAwC;AAAA,EACnD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EAAa,sEAAA;AAAA,IACb,WAAA,EAAaI,aAAAA;AAAA,IACb,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAH,OAAAA,EAAO,KAAM,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,KAAA,CAAM,YAAA,CAAaA,OAAM,CAAC;AAAA,GAC9F,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,gBAAA;AAAA,IACN,WAAA,EAAa,kFAAA;AAAA,IACb,WAAA,EAAaG,aAAAA;AAAA,IACb,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAH,OAAAA,EAAO,KACvB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,KAAA,CAAM,cAAA,CAAeA,OAAM,CAAC;AAAA,GACnE,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,oBAAA;AAAA,IACN,WAAA,EAAa,6EAAA;AAAA,IACb,WAAA,EAAaG,aAAAA;AAAA,IACb,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAH,OAAAA,EAAO,KACvB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,KAAA,CAAM,kBAAA,CAAmBA,OAAM,CAAC;AAAA,GACvE;AACH,CAAA;;;ACSO,IAAM,cAAA,GAAsC;AAAA,EACjD,GAAG,gBAAA;AAAA,EACH,GAAG,kBAAA;AAAA,EACH,GAAG,oBAAA;AAAA,EACH,GAAG,mBAAA;AAAA,EACH,GAAG,mBAAA;AAAA,EACH,GAAG,cAAA;AAAA,EACH,GAAG,kBAAA;AAAA,EACH,GAAG,wBAAA;AAAA,EACH,GAAG,iBAAA;AAAA,EACH,GAAG,eAAA;AAAA,EACH,GAAG,mBAAA;AAAA,EACH,GAAG,iBAAA;AAAA,EACH,GAAG,kBAAA;AAAA,EACH,GAAG,oBAAA;AAAA,EACH,GAAG,oBAAA;AAAA,EACH,GAAG,sBAAA;AAAA,EACH,GAAG;AACL,CAAA;;;AC9BA,IAAM,SAAwC,MAAA,CAAO,WAAA;AAAA,EACnD,cAAA,CAAe,IAAI,CAAA,GAAA,KAAO,CAAC,IAAI,IAAA,EAAM,gBAAA,CAAiB,GAAG,CAAkB,CAAC;AAC9E,CAAA;AAEA,IAAM,IAAA,GAAO,CAAC,IAAA,KAA+C,IAAA,CAAK,IAAI,CAAA,GAAA,KAAO,MAAA,CAAO,GAAA,CAAI,IAAI,CAAC,CAAA;AAGtF,IAAM,gBAAgB,MAAA,CAAO;AAC7B,IAAM,qBAAqB,MAAA,CAAO;AAClC,IAAM,cAAc,MAAA,CAAO;AAC3B,IAAM,oBAAoB,MAAA,CAAO;AACjC,IAAM,wBAAwB,MAAA,CAAO;AACrC,IAAM,kCAAkC,MAAA,CAAO;AAC/C,IAAM,sBAAsB,MAAA,CAAO;AACnC,IAAM,sBAAsB,MAAA,CAAO;AACnC,IAAM,mBAAmB,MAAA,CAAO;AAChC,IAAM,wBAAwB,MAAA,CAAO;AACrC,IAAM,iBAAiB,MAAA,CAAO;AAC9B,IAAM,gBAAgB,MAAA,CAAO;AAC7B,IAAM,kBAAkB,MAAA,CAAO;AAC/B,IAAM,qBAAqB,MAAA,CAAO;AAClC,IAAM,uBAAuB,MAAA,CAAO;AACpC,IAAM,gBAAgB,MAAA,CAAO;AAC7B,IAAM,qBAAqB,MAAA,CAAO;AAClC,IAAM,qBAAqB,MAAA,CAAO;AAClC,IAAM,oBAAoB,MAAA,CAAO;AACjC,IAAM,kBAAkB,MAAA,CAAO;AAC/B,IAAM,wBAAwB,MAAA,CAAO;AACrC,IAAM,qBAAqB,MAAA,CAAO;AAClC,IAAM,wBAAwB,MAAA,CAAO;AACrC,IAAM,oBAAoB,MAAA,CAAO;AACjC,IAAM,0BAA0B,MAAA,CAAO;AACvC,IAAM,uBAAuB,MAAA,CAAO;AACpC,IAAM,uBAAuB,MAAA,CAAO;AACpC,IAAM,aAAa,MAAA,CAAO;AAC1B,IAAM,YAAY,MAAA,CAAO;AACzB,IAAM,gBAAgB,MAAA,CAAO;AAC7B,IAAM,mBAAmB,MAAA,CAAO;AAChC,IAAM,kBAAkB,MAAA,CAAO;AAC/B,IAAM,yBAAyB,MAAA,CAAO;AACtC,IAAM,wBAAwB,MAAA,CAAO;AACrC,IAAM,0BAA0B,MAAA,CAAO;AACvC,IAAM,yBAAyB,MAAA,CAAO;AACtC,IAAM,eAAe,MAAA,CAAO;AAC5B,IAAM,uBAAuB,MAAA,CAAO;AACpC,IAAM,eAAe,MAAA,CAAO;AAC5B,IAAM,eAAe,MAAA,CAAO;AAC5B,IAAM,sBAAsB,MAAA,CAAO;AACnC,IAAM,0BAA0B,MAAA,CAAO;AACvC,IAAM,iBAAiB,MAAA,CAAO;AAC9B,IAAM,wBAAwB,MAAA,CAAO;AACrC,IAAM,mBAAmB,MAAA,CAAO;AAChC,IAAM,wBAAwB,MAAA,CAAO;AACrC,IAAM,eAAe,MAAA,CAAO;AAC5B,IAAM,iBAAiB,MAAA,CAAO;AAC9B,IAAM,qBAAqB,MAAA,CAAO;AAGlC,IAAM,UAAA,GAAa,KAAK,gBAAgB;AACxC,IAAM,YAAA,GAAe,KAAK,kBAAkB;AAC5C,IAAM,cAAA,GAAiB,KAAK,oBAAoB;AAChD,IAAM,aAAA,GAAgB,KAAK,mBAAmB;AAC9C,IAAM,aAAA,GAAgB,KAAK,mBAAmB;AAC9C,IAAM,QAAA,GAAW,KAAK,cAAc;AACpC,IAAM,YAAA,GAAe,KAAK,kBAAkB;AAC5C,IAAM,kBAAA,GAAqB,KAAK,wBAAwB;AACxD,IAAM,WAAA,GAAc,KAAK,iBAAiB;AAC1C,IAAM,SAAA,GAAY,KAAK,eAAe;AACtC,IAAM,aAAA,GAAgB,KAAK,mBAAmB;AAC9C,IAAM,WAAA,GAAc,KAAK,iBAAiB;AAC1C,IAAM,YAAA,GAAe,KAAK,kBAAkB;AAC5C,IAAM,cAAA,GAAiB,KAAK,oBAAoB;AAChD,IAAM,cAAA,GAAiB,KAAK,oBAAoB;AAChD,IAAM,gBAAA,GAAmB,KAAK,sBAAsB;AACpD,IAAM,UAAA,GAAa,KAAK,gBAAgB;AAGxC,IAAM,WAA4B,cAAA,CAAe,GAAA,CAAI,SAAO,MAAA,CAAO,GAAA,CAAI,IAAI,CAAC","file":"index.js","sourcesContent":["/**\n * Logger utility for tools package\n * Controls logging of API results based on environment variable\n */\n\ninterface LogOptions {\n toolName: string;\n input: unknown;\n result: unknown;\n executionTime?: number;\n}\n\n/**\n * Check if API result logging is enabled via environment variable\n * Defaults to false if not set\n */\nexport function isApiLoggingEnabled(): boolean {\n return process.env.FMP_TOOLS_LOG_API_RESULTS === 'true';\n}\n\n/**\n * Check if data-only logging is enabled via environment variable\n * Defaults to false if not set\n */\nexport function isDataOnlyLoggingEnabled(): boolean {\n return process.env.FMP_TOOLS_LOG_DATA_ONLY === 'true';\n}\n\n/**\n * Estimate token count for LLM context (JSON-optimized)\n * JSON has many structural characters that count as single tokens\n */\nfunction estimateTokenCount(text: string): number {\n // Try to parse as JSON first for better estimation\n try {\n const parsed = JSON.parse(text);\n return estimateTokenCountForData(parsed);\n } catch {\n // Not JSON, use text-based estimation\n return estimateTokenCountForText(text);\n }\n}\n\n/**\n * Estimate tokens for parsed JSON data\n */\nfunction estimateTokenCountForData(data: unknown): number {\n if (data === null || data === undefined) {\n return 1; // null/undefined is typically 1 token\n }\n\n if (typeof data === 'string') {\n // Strings are typically tokenized by words/symbols\n // Financial data often has short strings like \"AAPL\", \"USD\", etc.\n return Math.ceil(data.length / 3); // More conservative for short strings\n }\n\n if (typeof data === 'number') {\n // Numbers are typically 1-2 tokens depending on size\n return data.toString().length > 10 ? 2 : 1;\n }\n\n if (typeof data === 'boolean') {\n return 1; // true/false are single tokens\n }\n\n if (Array.isArray(data)) {\n // Arrays: count structural tokens + content tokens\n let tokens = 2; // [ and ]\n for (const item of data) {\n tokens += estimateTokenCountForData(item);\n if (data.indexOf(item) < data.length - 1) {\n tokens += 1; // comma separator\n }\n }\n return tokens;\n }\n\n if (typeof data === 'object') {\n // Objects: count structural tokens + key-value pairs\n let tokens = 2; // { and }\n const keys = Object.keys(data);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = (data as Record<string, unknown>)[key];\n\n // Key (quoted string)\n tokens += Math.ceil(key.length / 3);\n tokens += 2; // quotes around key\n\n // Colon separator\n tokens += 1;\n\n // Value\n tokens += estimateTokenCountForData(value);\n\n // Comma separator (except for last item)\n if (i < keys.length - 1) {\n tokens += 1;\n }\n }\n return tokens;\n }\n\n return 1; // fallback\n}\n\n/**\n * Estimate tokens for plain text (non-JSON)\n */\nfunction estimateTokenCountForText(text: string): number {\n // For plain text, use a more conservative estimate\n // Consider that financial data often has numbers, symbols, and abbreviations\n const words = text.split(/\\s+/).filter(word => word.length > 0);\n let tokens = 0;\n\n for (const word of words) {\n if (/^\\d+$/.test(word)) {\n // Pure numbers are typically 1-2 tokens\n tokens += word.length > 8 ? 2 : 1;\n } else if (/^[A-Z]+$/.test(word)) {\n // All caps (like stock symbols) are often single tokens\n tokens += 1;\n } else if (/^\\$[\\d,]+\\.?\\d*$/.test(word)) {\n // Currency amounts are typically 2-3 tokens\n tokens += 3;\n } else {\n // Regular words: roughly 3-4 characters per token\n tokens += Math.ceil(word.length / 3.5);\n }\n }\n\n return tokens;\n}\n\n/**\n * Get simple metadata about the result for LLM context\n */\nfunction getResultInfo(result: unknown): string {\n if (result === null || result === undefined) {\n return 'null/undefined';\n }\n\n if (typeof result === 'string') {\n const tokenCount = estimateTokenCount(result);\n try {\n const parsed = JSON.parse(result);\n if (Array.isArray(parsed)) {\n return `JSON string (array of ${parsed.length} items, ~${tokenCount} tokens)`;\n }\n } catch {\n // Not JSON\n }\n return `string (${result.length} chars, ~${tokenCount} tokens)`;\n }\n\n if (Array.isArray(result)) {\n const jsonStr = JSON.stringify(result);\n const tokenCount = estimateTokenCount(jsonStr);\n return `array (${result.length} items, ~${tokenCount} tokens)`;\n }\n\n if (typeof result === 'object') {\n const jsonStr = JSON.stringify(result);\n const tokenCount = estimateTokenCount(jsonStr);\n return `object (~${tokenCount} tokens)`;\n }\n\n return typeof result;\n}\n\n/**\n * Log API tool execution details when enabled\n */\nexport function logApiExecution(options: LogOptions): void {\n if (!isApiLoggingEnabled()) {\n return;\n }\n\n const { toolName, input, result, executionTime } = options;\n\n console.log('\\n' + '='.repeat(80));\n console.log(`šŸ”§ FMP Tool Execution: ${toolName}`);\n console.log('='.repeat(80));\n\n console.log('\\nšŸ“„ Input:');\n console.log(JSON.stringify(input, null, 2));\n\n const resultInfo = getResultInfo(result);\n\n console.log(`šŸ”§ ${toolName}: ${resultInfo}`);\n\n if (executionTime !== undefined) {\n console.log(`\\nā±ļø Execution Time: ${executionTime}ms`);\n }\n\n console.log('='.repeat(80) + '\\n');\n}\n\n/**\n * Log data-only information for LLM context (when enabled)\n */\nexport function logDataOnly(options: LogOptions): void {\n if (!isDataOnlyLoggingEnabled()) {\n return;\n }\n\n const { result } = options;\n\n console.log('\\nšŸ“¤ Result:');\n if (typeof result === 'string') {\n try {\n // Try to parse and pretty-print if it's JSON\n const parsed = JSON.parse(result);\n console.log(JSON.stringify(parsed, null, 2));\n } catch {\n // If not JSON, log as-is\n console.log(result);\n }\n } else {\n console.log(JSON.stringify(result, null, 2));\n }\n\n console.log('='.repeat(80) + '\\n');\n}\n\n/**\n * Log API tool execution with timing\n */\nexport async function logApiExecutionWithTiming<T>(\n toolName: string,\n input: unknown,\n executeFn: () => Promise<T>,\n): Promise<T> {\n const startTime = Date.now();\n\n try {\n const result = await executeFn();\n const executionTime = Date.now() - startTime;\n\n logApiExecution({\n toolName,\n input,\n result,\n executionTime,\n });\n\n // Also log data-only info if enabled\n logDataOnly({\n toolName,\n input,\n result,\n executionTime,\n });\n\n return result;\n } catch (error) {\n const executionTime = Date.now() - startTime;\n\n // Log error case as well\n if (isApiLoggingEnabled()) {\n console.log('\\n' + '='.repeat(80));\n console.log(`āŒ FMP Tool Execution Error: ${toolName}`);\n console.log('='.repeat(80));\n console.log('\\nšŸ“„ Input:');\n console.log(JSON.stringify(input, null, 2));\n console.log('\\nāŒ Error:');\n console.log(error instanceof Error ? error.message : String(error));\n console.log(`\\nā±ļø Execution Time: ${executionTime}ms`);\n console.log('='.repeat(80) + '\\n');\n }\n\n throw error;\n }\n}\n","import type { APIResponse, FMPErrorType } from 'fmp-node-api';\n\n/**\n * Format an `fmp-node-api` response into the string an AI tool returns to the model.\n *\n * On success, returns the data as pretty JSON (or a clear \"no data\" note when the\n * payload is empty). On failure, returns a structured error object — including the\n * classified `type` (e.g. `plan-restricted`, `rate-limit`, `auth`) — so the model\n * can explain *why* the call failed instead of receiving a bare `null`.\n */\nexport function toToolResponse(res: APIResponse<unknown>): string {\n // Only an explicit failure surfaces an error; the client always sets `success`.\n if (res.success === false) {\n return JSON.stringify({\n error: true,\n type: res.errorType ?? 'unknown',\n message: res.error ?? 'The request failed.',\n status: res.status,\n });\n }\n\n if (isEmpty(res.data)) {\n return JSON.stringify({ data: [], note: 'No data was returned for this request.' });\n }\n return JSON.stringify(res.data, null, 2);\n}\n\n/**\n * Format a *thrown* error into the same structured shape `toToolResponse` uses.\n *\n * Some failures throw instead of returning an `APIResponse` — most notably a\n * missing/invalid `FMP_API_KEY`, which throws from the `FMP` constructor before\n * any request is made. Catching these at the tool boundary lets the model relay\n * the real reason instead of receiving a bare exception.\n */\nexport function toToolError(error: unknown): string {\n const message = error instanceof Error ? error.message : String(error);\n let type: FMPErrorType = 'unknown';\n if (/api[\\s_-]?key/i.test(message)) {\n type = 'auth';\n }\n return JSON.stringify({ error: true, type, message, status: 0 });\n}\n\nfunction isEmpty(data: unknown): boolean {\n if (data == null) return true;\n if (Array.isArray(data)) return data.length === 0;\n if (typeof data === 'object') return Object.keys(data as object).length === 0;\n return false;\n}\n","import { z } from 'zod';\nimport { tool } from '@openai/agents';\nimport { logApiExecutionWithTiming } from './logger';\nimport { toToolError } from './format-response';\n\nexport interface OpenAIToolConfig<T extends z.ZodObject<any>> {\n name: string;\n description: string;\n inputSchema: T;\n execute: (args: z.infer<T>) => Promise<string>;\n}\n\nexport function createOpenAITool<T extends z.ZodObject<any>>(config: OpenAIToolConfig<T>) {\n const { name, description, inputSchema, execute } = config;\n\n // @openai/agents derives the JSON schema from the Zod schema and validates\n // input against it before invoking execute. The cast widens our generic T to\n // the SDK's ZodObjectLike `parameters` type (runtime value is the real schema).\n // We also parse here so Zod defaults/coercion are applied consistently before\n // execute, regardless of whether the caller pre-validated.\n return tool({\n name,\n description,\n parameters: inputSchema as z.ZodObject<any>,\n execute: async (input: unknown) => {\n try {\n const args = inputSchema.parse(input) as z.infer<T>;\n return await logApiExecutionWithTiming(name, args, () => execute(args));\n } catch (error) {\n // Never throw out of a tool — return a structured error the model can\n // relay (e.g. a missing FMP_API_KEY, which throws from `new FMP()`).\n return toToolError(error);\n }\n },\n });\n}\n","/**\n * Internal FMP API client used by the tools.\n *\n * The client is memoized so tools reuse a single `FMP` instance instead of\n * constructing one (and re-validating the API key) on every tool call. By\n * default it reads the `FMP_API_KEY` environment variable; consumers can call\n * `configureFMPClient(...)` once at startup to provide a key/timeout explicitly.\n */\nimport { FMP, type FMPConfig } from 'fmp-node-api';\n\nlet cached: FMP | undefined;\nlet configured: FMPConfig | undefined;\n\n/**\n * Configure the FMP client used by all tools. Optional — by default the client\n * reads the `FMP_API_KEY` environment variable. Call once before using the tools.\n */\nexport function configureFMPClient(config: FMPConfig): void {\n configured = config;\n cached = undefined; // rebuilt lazily on next use\n}\n\n/** Reset the memoized client and configuration (mainly for tests / serverless reuse). */\nexport function resetFMPClient(): void {\n cached = undefined;\n configured = undefined;\n}\n\n/** Get the memoized FMP client instance (internal use by tools). */\nexport function getFMPClient(): FMP {\n if (!cached) {\n cached = new FMP(configured);\n }\n return cached;\n}\n","import { z } from 'zod';\n\n/**\n * Provider-agnostic definition of an FMP tool: its name, model-facing description,\n * Zod input schema, and the execute body (which returns the string the model receives,\n * already run through `toToolResponse`).\n *\n * Per-provider adapters (`createTool` for Vercel AI, `createOpenAITool` for OpenAI Agents)\n * turn a definition into an SDK-specific tool. Defining each tool once here keeps the\n * providers in sync and makes adding a new provider a single adapter file.\n */\nexport interface FMPToolDefinition {\n name: string;\n description: string;\n inputSchema: z.ZodObject<any>;\n execute: (args: any) => Promise<string>;\n}\n\n/**\n * Identity helper that preserves per-tool inference of `execute`'s args from the schema\n * at the definition site, while widening the result to `FMPToolDefinition` so definitions\n * can be collected into a single array.\n */\nexport function defineTool<T extends z.ZodObject<any>>(def: {\n name: string;\n description: string;\n inputSchema: T;\n execute: (args: z.infer<T>) => Promise<string>;\n}): FMPToolDefinition {\n return def as FMPToolDefinition;\n}\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\nimport type { APIResponse } from 'fmp-node-api';\n\nexport const quoteDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getStockQuote',\n description:\n 'Get the real-time stock quote for a company including price, volume, and market data',\n inputSchema: z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The symbol of the company to get the stock quote for'),\n }),\n execute: async ({ symbol }) => toToolResponse(await getFMPClient().quote.getQuote(symbol)),\n }),\n defineTool({\n name: 'getHistoricalPrice',\n description:\n 'Get historical daily prices (open/high/low/close/volume) for a symbol. Returns the most recent `limit` days.',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('The stock/ETF symbol (e.g., AAPL)'),\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n limit: z\n .number()\n .int()\n .positive()\n .default(30)\n .describe('Max number of most-recent days to return (default 30)'),\n }),\n execute: async ({ symbol, from, to, limit = 30 }) => {\n const res = await getFMPClient().quote.getHistoricalPrice({\n symbol,\n from: from ?? undefined,\n to: to ?? undefined,\n });\n // Response is { symbol, historical: [...] } (newest first); cap to `limit`.\n const data = res.data as { historical?: unknown[] } | null;\n if (res.success && data && Array.isArray(data.historical)) {\n return toToolResponse({\n ...res,\n data: { ...data, historical: data.historical.slice(0, limit) },\n } as APIResponse<unknown>);\n }\n return toToolResponse(res);\n },\n }),\n defineTool({\n name: 'getIntraday',\n description:\n 'Get intraday price bars for a symbol at a given interval. Returns the most recent `limit` bars.',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('The stock/ETF symbol (e.g., AAPL)'),\n interval: z\n .enum(['1min', '5min', '15min', '30min', '1hour', '4hour'])\n .default('5min')\n .describe('Bar interval'),\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n limit: z\n .number()\n .int()\n .positive()\n .default(50)\n .describe('Max number of most-recent bars to return (default 50)'),\n }),\n execute: async ({ symbol, interval = '5min', from, to, limit = 50 }) => {\n const res = await getFMPClient().quote.getIntraday({\n symbol,\n interval,\n from: from ?? undefined,\n to: to ?? undefined,\n });\n if (res.success && Array.isArray(res.data)) {\n return toToolResponse({ ...res, data: res.data.slice(0, limit) } as APIResponse<unknown>);\n }\n return toToolResponse(res);\n },\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nconst symbolSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n});\n\nexport const companyDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getCompanyProfile',\n description: 'Get the company profile for a company',\n inputSchema: symbolSchema,\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().company.getCompanyProfile(symbol)),\n }),\n defineTool({\n name: 'getCompanySharesFloat',\n description: 'Get the company shares float',\n inputSchema: symbolSchema,\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().company.getSharesFloat(symbol)),\n }),\n defineTool({\n name: 'getCompanyExecutiveCompensation',\n description: 'Get the company executive compensation',\n inputSchema: symbolSchema,\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().company.getExecutiveCompensation(symbol)),\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nconst period = z\n .enum(['annual', 'quarter'])\n .default('annual')\n .describe('The period type (annual or quarter)');\n\nconst symbol = (what: string) => z.string().min(1).describe(`The stock symbol to get ${what} for`);\n\nconst limit = z.number().default(5).describe('The number of periods to retrieve');\n\n/** Build a standard statement tool: symbol + period + limit -> fmp.financial[method]. */\nconst statementTool = (\n name: string,\n description: string,\n what: string,\n call: (args: { symbol: string; period: 'annual' | 'quarter'; limit: number }) => Promise<any>,\n) =>\n defineTool({\n name,\n description,\n inputSchema: z.object({ symbol: symbol(what), period, limit }),\n execute: async ({ symbol, period, limit }) => toToolResponse(await call({ symbol, period, limit })),\n });\n\nexport const financialDefinitions: FMPToolDefinition[] = [\n statementTool(\n 'getBalanceSheet',\n 'Get balance sheet for a company showing assets, liabilities, and equity',\n 'balance sheet',\n args => getFMPClient().financial.getBalanceSheet(args),\n ),\n statementTool(\n 'getIncomeStatement',\n 'Get income statement for a company showing revenue, expenses, and profit',\n 'income statement',\n args => getFMPClient().financial.getIncomeStatement(args),\n ),\n statementTool(\n 'getCashFlowStatement',\n 'Get cash flow statement for a company showing operating, investing, and financing cash flows',\n 'cash flow statement',\n args => getFMPClient().financial.getCashFlowStatement(args),\n ),\n statementTool(\n 'getKeyMetrics',\n 'Get key metrics for a company',\n 'key metrics',\n args => getFMPClient().financial.getKeyMetrics(args),\n ),\n statementTool(\n 'getFinancialRatios',\n 'Get financial ratios for a company including profitability, liquidity, and efficiency metrics',\n 'financial ratios',\n args => getFMPClient().financial.getFinancialRatios(args),\n ),\n statementTool(\n 'getEnterpriseValue',\n 'Get enterprise value for a company',\n 'enterprise value',\n args => getFMPClient().financial.getEnterpriseValue(args),\n ),\n statementTool(\n 'getCashflowGrowth',\n 'Get cashflow growth for a company',\n 'cashflow growth',\n args => getFMPClient().financial.getCashflowGrowth(args),\n ),\n statementTool(\n 'getIncomeGrowth',\n 'Get income growth for a company',\n 'income growth',\n args => getFMPClient().financial.getIncomeGrowth(args),\n ),\n statementTool(\n 'getBalanceSheetGrowth',\n 'Get balance sheet growth for a company',\n 'balance sheet growth',\n args => getFMPClient().financial.getBalanceSheetGrowth(args),\n ),\n statementTool(\n 'getFinancialGrowth',\n 'Get financial growth for a company',\n 'financial growth',\n args => getFMPClient().financial.getFinancialGrowth(args),\n ),\n defineTool({\n name: 'getEarningsHistorical',\n description: 'Get earnings historical for a company',\n inputSchema: z.object({\n symbol: symbol('earnings historical'),\n limit: z.number().default(10).describe('The number of periods to retrieve'),\n }),\n execute: async ({ symbol, limit }) =>\n toToolResponse(await getFMPClient().financial.getEarningsHistorical({ symbol, limit })),\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nconst dateRangeSchema = z.object({\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n});\n\nexport const calendarDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getEarningsCalendar',\n description: 'Get earnings calendar showing upcoming and recent earnings announcements',\n inputSchema: dateRangeSchema,\n execute: async ({ from, to }) =>\n toToolResponse(\n await getFMPClient().calendar.getEarningsCalendar({\n from: from ?? undefined,\n to: to ?? undefined,\n }),\n ),\n }),\n defineTool({\n name: 'getEconomicCalendar',\n description: 'Get economic calendar showing upcoming and recent economic events and indicators',\n inputSchema: dateRangeSchema,\n execute: async ({ from, to }) =>\n toToolResponse(\n await getFMPClient().calendar.getEconomicsCalendar({\n from: from ?? undefined,\n to: to ?? undefined,\n }),\n ),\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nconst economicIndicatorNames = [\n 'GDP',\n 'realGDP',\n 'nominalPotentialGDP',\n 'realGDPPerCapita',\n 'federalFunds',\n 'CPI',\n 'inflationRate',\n 'inflation',\n 'retailSales',\n 'consumerSentiment',\n 'durableGoods',\n 'unemploymentRate',\n 'totalNonfarmPayroll',\n 'initialClaims',\n 'industrialProductionTotalIndex',\n 'newPrivatelyOwnedHousingUnitsStartedTotalUnits',\n 'totalVehicleSales',\n 'retailMoneyFunds',\n 'smoothedUSRecessionProbabilities',\n '3MonthOr90DayRatesAndYieldsCertificatesOfDeposit',\n 'commercialBankInterestRateOnCreditCardPlansAllAccounts',\n '30YearFixedRateMortgageAverage',\n '15YearFixedRateMortgageAverage',\n] as const;\n\nexport const economicDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getTreasuryRates',\n description: 'Get treasury rates for different maturities over time',\n inputSchema: z.object({\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n }),\n execute: async ({ from, to }) =>\n toToolResponse(\n await getFMPClient().economic.getTreasuryRates({\n from: from ?? undefined,\n to: to ?? undefined,\n }),\n ),\n }),\n defineTool({\n name: 'getEconomicIndicators',\n description: 'Get economic indicators like GDP, unemployment rate, inflation, etc.',\n inputSchema: z.object({\n name: z.enum(economicIndicatorNames).describe('The name of the economic indicator'),\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n }),\n execute: async ({ name, from, to }) =>\n toToolResponse(\n await getFMPClient().economic.getEconomicIndicators({\n name,\n from: from ?? undefined,\n to: to ?? undefined,\n }),\n ),\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nexport const etfDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getETFHoldings',\n description:\n 'Get ETF holdings for a specific ETF symbol, showing the underlying assets and their weights',\n inputSchema: z.object({\n symbol: z\n .string()\n .min(1, 'ETF symbol is required')\n .describe('ETF symbol (e.g., SPY, QQQ, VTI)'),\n date: z\n .string()\n .optional()\n .nullable()\n .describe('Date for holdings in YYYY-MM-DD format (optional)'),\n }),\n execute: async ({ symbol, date }) => {\n // `date` is optional; the holdings params type treats it as required, so widen.\n const params: any = { symbol };\n if (date) {\n params.date = date;\n }\n return toToolResponse(await getFMPClient().etf.getHoldings(params));\n },\n }),\n defineTool({\n name: 'getETFProfile',\n description: 'Get ETF profile information including fund details, expense ratio, and key metrics',\n inputSchema: z.object({\n symbol: z\n .string()\n .min(1, 'ETF symbol is required')\n .describe('ETF symbol (e.g., SPY, QQQ, VTI)'),\n }),\n execute: async ({ symbol }) => toToolResponse(await getFMPClient().etf.getProfile(symbol)),\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nexport const insiderDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getInsiderTrading',\n description:\n 'Get insider trading data for a specific stock symbol showing buy/sell transactions by company insiders',\n inputSchema: z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('Stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n page: z\n .number()\n .int()\n .min(0)\n .default(0)\n .describe('Page number for pagination (optional, defaults to 0)'),\n }),\n execute: async ({ symbol, page }) =>\n toToolResponse(await getFMPClient().insider.getInsiderTradesBySymbol(symbol, page)),\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nexport const institutionalDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getInstitutionalHolders',\n description:\n 'Get institutional holders for a specific stock symbol showing which institutions own shares and their holdings',\n inputSchema: z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('Stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n }),\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().institutional.getInstitutionalHolders({ symbol })),\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nconst empty = z.object({});\n\nexport const marketDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getMarketPerformance',\n description: 'Get overall market performance data including major indices performance',\n inputSchema: empty,\n execute: async () => toToolResponse(await getFMPClient().market.getMarketPerformance()),\n }),\n defineTool({\n name: 'getSectorPerformance',\n description: 'Get sector performance data showing how different market sectors are performing',\n inputSchema: empty,\n execute: async () => toToolResponse(await getFMPClient().market.getSectorPerformance()),\n }),\n defineTool({\n name: 'getGainers',\n description: 'Get top gaining stocks showing the best performing stocks of the day',\n inputSchema: empty,\n execute: async () => toToolResponse(await getFMPClient().market.getGainers()),\n }),\n defineTool({\n name: 'getLosers',\n description: 'Get top losing stocks showing the worst performing stocks of the day',\n inputSchema: empty,\n execute: async () => toToolResponse(await getFMPClient().market.getLosers()),\n }),\n defineTool({\n name: 'getMostActive',\n description: 'Get most active stocks showing stocks with the highest trading volume',\n inputSchema: empty,\n execute: async () => toToolResponse(await getFMPClient().market.getMostActive()),\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nexport const newsDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getStockNews',\n description: 'Get the latest general stock market news articles',\n inputSchema: z.object({\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n limit: z\n .number()\n .int()\n .positive()\n .default(20)\n .describe('Max number of articles to return (default 20)'),\n }),\n execute: async ({ from, to, limit = 20 }) =>\n toToolResponse(\n await getFMPClient().news.getStockNews({\n from: from ?? undefined,\n to: to ?? undefined,\n limit,\n }),\n ),\n }),\n defineTool({\n name: 'getStockNewsBySymbol',\n description: 'Get the latest news articles for one or more specific stock symbols',\n inputSchema: z.object({\n symbols: z\n .array(z.string().min(1))\n .min(1)\n .describe('Stock symbols to get news for (e.g., [\"AAPL\", \"MSFT\"])'),\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n limit: z\n .number()\n .int()\n .positive()\n .default(20)\n .describe('Max number of articles to return (default 20)'),\n }),\n execute: async ({ symbols, from, to, limit = 20 }) =>\n toToolResponse(\n await getFMPClient().news.getStockNewsBySymbol({\n symbols,\n from: from ?? undefined,\n to: to ?? undefined,\n limit,\n }),\n ),\n }),\n];\n","import { z } from 'zod';\nimport type { ScreenerParams } from 'fmp-node-api';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nexport const screenerDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'screenStocks',\n description:\n 'Screen for stocks matching financial criteria (market cap, price, sector, exchange, etc.). Returns matching companies.',\n inputSchema: z.object({\n marketCapMoreThan: z.number().optional().nullable().describe('Minimum market capitalization'),\n marketCapLowerThan: z.number().optional().nullable().describe('Maximum market capitalization'),\n priceMoreThan: z.number().optional().nullable().describe('Minimum stock price'),\n priceLowerThan: z.number().optional().nullable().describe('Maximum stock price'),\n sector: z.string().optional().nullable().describe('Sector filter (e.g., \"Technology\")'),\n industry: z.string().optional().nullable().describe('Industry filter'),\n exchange: z.string().optional().nullable().describe('Exchange filter (e.g., \"NASDAQ\")'),\n country: z.string().optional().nullable().describe('Country filter (e.g., \"US\")'),\n isEtf: z.boolean().optional().nullable().describe('Restrict to ETFs'),\n isActivelyTrading: z.boolean().optional().nullable().describe('Restrict to actively trading'),\n limit: z\n .number()\n .int()\n .positive()\n .default(50)\n .describe('Max number of results to return (default 50)'),\n }),\n execute: async ({ limit = 50, ...filters }) => {\n // Drop null/undefined so they aren't sent as query params.\n const params: Record<string, unknown> = { limit };\n for (const [key, value] of Object.entries(filters)) {\n if (value !== null && value !== undefined) params[key] = value;\n }\n return toToolResponse(await getFMPClient().screener.getScreener(params as ScreenerParams));\n },\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nexport const searchDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'searchSymbol',\n description:\n 'Search for a ticker symbol by company name or partial ticker (e.g., resolve \"Apple\" to \"AAPL\")',\n inputSchema: z.object({\n query: z.string().min(1).describe('Company name or ticker to search for'),\n limit: z\n .number()\n .int()\n .positive()\n .default(10)\n .describe('Max number of results to return (default 10)'),\n exchange: z\n .string()\n .optional()\n .nullable()\n .describe('Restrict to a specific exchange (optional, e.g., \"NASDAQ\")'),\n }),\n execute: async ({ query, limit = 10, exchange }) =>\n toToolResponse(\n await getFMPClient().search.search({ query, limit, exchange: exchange ?? undefined }),\n ),\n }),\n];\n","import { z } from 'zod';\nimport type { APIResponse } from 'fmp-node-api';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nexport const analystDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getAnalystEstimates',\n description:\n 'Get analyst estimates (revenue, EBITDA, net income, EPS) for a company, by period',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('The stock symbol (e.g., AAPL)'),\n period: z\n .enum(['annual', 'quarter'])\n .default('annual')\n .describe('The period type (annual or quarter)'),\n limit: z\n .number()\n .int()\n .positive()\n .default(10)\n .describe('Max number of periods to return (default 10)'),\n }),\n execute: async ({ symbol, period = 'annual', limit = 10 }) =>\n toToolResponse(await getFMPClient().analyst.getEstimates({ symbol, period, limit })),\n }),\n defineTool({\n name: 'getPriceTargetConsensus',\n description:\n 'Get the analyst price-target consensus (high, low, consensus, median) for a company',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('The stock symbol (e.g., AAPL)'),\n }),\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().analyst.getPriceTargetConsensus({ symbol })),\n }),\n defineTool({\n name: 'getStockGrades',\n description:\n 'Get recent analyst grades (upgrades/downgrades) for a company (most recent `limit`)',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('The stock symbol (e.g., AAPL)'),\n limit: z\n .number()\n .int()\n .positive()\n .default(20)\n .describe('Max number of grade entries to return (default 20)'),\n }),\n execute: async ({ symbol, limit = 20 }) => {\n const res = await getFMPClient().analyst.getGrades({ symbol });\n if (res.success && Array.isArray(res.data)) {\n return toToolResponse({ ...res, data: res.data.slice(0, limit) } as APIResponse<unknown>);\n }\n return toToolResponse(res);\n },\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nconst symbolSchema = z.object({\n symbol: z.string().min(1).describe('The stock symbol (e.g., AAPL)'),\n});\n\nexport const valuationDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getDiscountedCashFlow',\n description:\n \"Get the discounted-cash-flow (DCF) fair-value estimate vs. the current price for a company\",\n inputSchema: symbolSchema,\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().valuation.getDiscountedCashFlow({ symbol })),\n }),\n defineTool({\n name: 'getCompanyRating',\n description: \"Get FMP's current rating/score snapshot for a company\",\n inputSchema: symbolSchema,\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().valuation.getRatingSnapshot({ symbol })),\n }),\n];\n","import { z } from 'zod';\nimport type { APIResponse } from 'fmp-node-api';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nexport const technicalDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getTechnicalIndicator',\n description:\n 'Get a technical indicator series (SMA, EMA, RSI, etc.) for a symbol at a given timeframe. Returns the most recent `limit` bars.',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('The stock/ETF symbol (e.g., AAPL)'),\n type: z\n .enum(['sma', 'ema', 'wma', 'dema', 'tema', 'rsi', 'standardDeviation', 'williams', 'adx'])\n .describe('The indicator type'),\n periodLength: z\n .number()\n .int()\n .positive()\n .default(10)\n .describe('Lookback period for the indicator (e.g. 14 for a 14-day RSI)'),\n timeframe: z\n .enum(['1min', '5min', '15min', '30min', '1hour', '4hour', '1day', '1week', '1month'])\n .default('1day')\n .describe('Bar timeframe'),\n limit: z\n .number()\n .int()\n .positive()\n .default(50)\n .describe('Max number of most-recent bars to return (default 50)'),\n }),\n execute: async ({ symbol, type, periodLength = 10, timeframe = '1day', limit = 50 }) => {\n const res = await getFMPClient().technical.getTechnicalIndicator({\n symbol,\n type,\n periodLength,\n timeframe,\n });\n if (res.success && Array.isArray(res.data)) {\n return toToolResponse({ ...res, data: res.data.slice(0, limit) } as APIResponse<unknown>);\n }\n return toToolResponse(res);\n },\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nconst symbolSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('Stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n});\n\nconst rssFeedSchema = z.object({\n page: z\n .number()\n .int()\n .min(0)\n .default(0)\n .describe('Page number for pagination (optional, defaults to 0)'),\n});\n\nexport const senateHouseDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getSenateTrading',\n description: 'Get senate trading data for a specific stock symbol showing senator transactions',\n inputSchema: symbolSchema,\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().senateHouse.getSenateTrading({ symbol })),\n }),\n defineTool({\n name: 'getHouseTrading',\n description:\n 'Get house trading data for a specific stock symbol showing representative transactions',\n inputSchema: symbolSchema,\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().senateHouse.getHouseTrading({ symbol })),\n }),\n defineTool({\n name: 'getSenateTradingByName',\n description:\n 'Get senate trading data for a specific senator by name showing their trading activity',\n inputSchema: z.object({\n name: z\n .string()\n .min(1, 'Name is required')\n .describe('The name of the senator to get trading data for'),\n }),\n execute: async ({ name }) =>\n toToolResponse(await getFMPClient().senateHouse.getSenateTradingByName({ name })),\n }),\n defineTool({\n name: 'getHouseTradingByName',\n description:\n 'Get house trading data for a specific representative by name showing their trading activity',\n inputSchema: z.object({\n name: z\n .string()\n .min(1, 'Name is required')\n .describe('The name of the representative to get trading data for'),\n }),\n execute: async ({ name }) =>\n toToolResponse(await getFMPClient().senateHouse.getHouseTradingByName({ name })),\n }),\n defineTool({\n name: 'getSenateTradingRSSFeed',\n description:\n 'Get senate trading data through RSS feed with pagination showing recent senate transactions',\n inputSchema: rssFeedSchema,\n // JS default mirrors the Zod default for the Vercel adapter, which (unlike the\n // OpenAI adapter) does not parse input before calling execute.\n execute: async ({ page = 0 }) =>\n toToolResponse(await getFMPClient().senateHouse.getSenateTradingRSSFeed({ page })),\n }),\n defineTool({\n name: 'getHouseTradingRSSFeed',\n description:\n 'Get house trading data through RSS feed with pagination showing recent house transactions',\n inputSchema: rssFeedSchema,\n // JS default mirrors the Zod default for the Vercel adapter, which (unlike the\n // OpenAI adapter) does not parse input before calling execute.\n execute: async ({ page = 0 }) =>\n toToolResponse(await getFMPClient().senateHouse.getHouseTradingRSSFeed({ page })),\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nconst symbolSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n});\n\nexport const stockDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getMarketCap',\n description: 'Get market capitalization for a company showing current market value',\n inputSchema: symbolSchema,\n execute: async ({ symbol }) => toToolResponse(await getFMPClient().stock.getMarketCap(symbol)),\n }),\n defineTool({\n name: 'getStockSplits',\n description: 'Get stock splits history for a company showing all historical stock split events',\n inputSchema: symbolSchema,\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().stock.getStockSplits(symbol)),\n }),\n defineTool({\n name: 'getDividendHistory',\n description: 'Get dividend history for a company showing all historical dividend payments',\n inputSchema: symbolSchema,\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().stock.getDividendHistory(symbol)),\n }),\n];\n","import { quoteDefinitions } from './quote';\nimport { companyDefinitions } from './company';\nimport { financialDefinitions } from './financial';\nimport { calendarDefinitions } from './calendar';\nimport { economicDefinitions } from './economic';\nimport { etfDefinitions } from './etf';\nimport { insiderDefinitions } from './insider';\nimport { institutionalDefinitions } from './institutional';\nimport { marketDefinitions } from './market';\nimport { newsDefinitions } from './news';\nimport { screenerDefinitions } from './screener';\nimport { searchDefinitions } from './search';\nimport { analystDefinitions } from './analyst';\nimport { valuationDefinitions } from './valuation';\nimport { technicalDefinitions } from './technical';\nimport { senateHouseDefinitions } from './senate-house';\nimport { stockDefinitions } from './stock';\nimport type { FMPToolDefinition } from './types';\n\nexport * from './types';\n\nexport {\n quoteDefinitions,\n companyDefinitions,\n financialDefinitions,\n calendarDefinitions,\n economicDefinitions,\n etfDefinitions,\n insiderDefinitions,\n institutionalDefinitions,\n marketDefinitions,\n newsDefinitions,\n screenerDefinitions,\n searchDefinitions,\n analystDefinitions,\n valuationDefinitions,\n technicalDefinitions,\n senateHouseDefinitions,\n stockDefinitions,\n};\n\n/** Every tool definition, in a stable order shared by all providers. */\nexport const allDefinitions: FMPToolDefinition[] = [\n ...quoteDefinitions,\n ...companyDefinitions,\n ...financialDefinitions,\n ...calendarDefinitions,\n ...economicDefinitions,\n ...etfDefinitions,\n ...insiderDefinitions,\n ...institutionalDefinitions,\n ...marketDefinitions,\n ...newsDefinitions,\n ...screenerDefinitions,\n ...searchDefinitions,\n ...analystDefinitions,\n ...valuationDefinitions,\n ...technicalDefinitions,\n ...senateHouseDefinitions,\n ...stockDefinitions,\n];\n","import type { Tool } from '@openai/agents';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\n\n// Re-export client configuration helpers (optional; tools default to FMP_API_KEY).\nexport { configureFMPClient, resetFMPClient } from '@/client';\n\nimport {\n allDefinitions,\n quoteDefinitions,\n companyDefinitions,\n financialDefinitions,\n calendarDefinitions,\n economicDefinitions,\n etfDefinitions,\n insiderDefinitions,\n institutionalDefinitions,\n marketDefinitions,\n newsDefinitions,\n screenerDefinitions,\n searchDefinitions,\n analystDefinitions,\n valuationDefinitions,\n technicalDefinitions,\n senateHouseDefinitions,\n stockDefinitions,\n type FMPToolDefinition,\n} from '@/definitions';\n\n// One OpenAI Agents tool instance per definition, addressable by name. The same\n// instances are reused for the individual exports and the category arrays below.\nconst byName: Record<string, Tool<unknown>> = Object.fromEntries(\n allDefinitions.map(def => [def.name, createOpenAITool(def) as Tool<unknown>]),\n);\n\nconst pick = (defs: FMPToolDefinition[]): Tool<unknown>[] => defs.map(def => byName[def.name]);\n\n// Individual tools for direct import\nexport const getStockQuote = byName.getStockQuote;\nexport const getHistoricalPrice = byName.getHistoricalPrice;\nexport const getIntraday = byName.getIntraday;\nexport const getCompanyProfile = byName.getCompanyProfile;\nexport const getCompanySharesFloat = byName.getCompanySharesFloat;\nexport const getCompanyExecutiveCompensation = byName.getCompanyExecutiveCompensation;\nexport const getEarningsCalendar = byName.getEarningsCalendar;\nexport const getEconomicCalendar = byName.getEconomicCalendar;\nexport const getTreasuryRates = byName.getTreasuryRates;\nexport const getEconomicIndicators = byName.getEconomicIndicators;\nexport const getETFHoldings = byName.getETFHoldings;\nexport const getETFProfile = byName.getETFProfile;\nexport const getBalanceSheet = byName.getBalanceSheet;\nexport const getIncomeStatement = byName.getIncomeStatement;\nexport const getCashFlowStatement = byName.getCashFlowStatement;\nexport const getKeyMetrics = byName.getKeyMetrics;\nexport const getFinancialRatios = byName.getFinancialRatios;\nexport const getEnterpriseValue = byName.getEnterpriseValue;\nexport const getCashflowGrowth = byName.getCashflowGrowth;\nexport const getIncomeGrowth = byName.getIncomeGrowth;\nexport const getBalanceSheetGrowth = byName.getBalanceSheetGrowth;\nexport const getFinancialGrowth = byName.getFinancialGrowth;\nexport const getEarningsHistorical = byName.getEarningsHistorical;\nexport const getInsiderTrading = byName.getInsiderTrading;\nexport const getInstitutionalHolders = byName.getInstitutionalHolders;\nexport const getMarketPerformance = byName.getMarketPerformance;\nexport const getSectorPerformance = byName.getSectorPerformance;\nexport const getGainers = byName.getGainers;\nexport const getLosers = byName.getLosers;\nexport const getMostActive = byName.getMostActive;\nexport const getSenateTrading = byName.getSenateTrading;\nexport const getHouseTrading = byName.getHouseTrading;\nexport const getSenateTradingByName = byName.getSenateTradingByName;\nexport const getHouseTradingByName = byName.getHouseTradingByName;\nexport const getSenateTradingRSSFeed = byName.getSenateTradingRSSFeed;\nexport const getHouseTradingRSSFeed = byName.getHouseTradingRSSFeed;\nexport const getStockNews = byName.getStockNews;\nexport const getStockNewsBySymbol = byName.getStockNewsBySymbol;\nexport const screenStocks = byName.screenStocks;\nexport const searchSymbol = byName.searchSymbol;\nexport const getAnalystEstimates = byName.getAnalystEstimates;\nexport const getPriceTargetConsensus = byName.getPriceTargetConsensus;\nexport const getStockGrades = byName.getStockGrades;\nexport const getDiscountedCashFlow = byName.getDiscountedCashFlow;\nexport const getCompanyRating = byName.getCompanyRating;\nexport const getTechnicalIndicator = byName.getTechnicalIndicator;\nexport const getMarketCap = byName.getMarketCap;\nexport const getStockSplits = byName.getStockSplits;\nexport const getDividendHistory = byName.getDividendHistory;\n\n// Tool groups as arrays for OpenAI Agents\nexport const quoteTools = pick(quoteDefinitions);\nexport const companyTools = pick(companyDefinitions);\nexport const financialTools = pick(financialDefinitions);\nexport const calendarTools = pick(calendarDefinitions);\nexport const economicTools = pick(economicDefinitions);\nexport const etfTools = pick(etfDefinitions);\nexport const insiderTools = pick(insiderDefinitions);\nexport const institutionalTools = pick(institutionalDefinitions);\nexport const marketTools = pick(marketDefinitions);\nexport const newsTools = pick(newsDefinitions);\nexport const screenerTools = pick(screenerDefinitions);\nexport const searchTools = pick(searchDefinitions);\nexport const analystTools = pick(analystDefinitions);\nexport const valuationTools = pick(valuationDefinitions);\nexport const technicalTools = pick(technicalDefinitions);\nexport const senateHouseTools = pick(senateHouseDefinitions);\nexport const stockTools = pick(stockDefinitions);\n\n// Combine all tools into a single array\nexport const fmpTools: Tool<unknown>[] = allDefinitions.map(def => byName[def.name]);\n"]}
1
+ {"version":3,"sources":["../../../src/utils/logger.ts","../../../src/utils/format-response.ts","../../../src/utils/openai-tool-wrapper.ts","../../../src/client.ts","../../../src/definitions/types.ts","../../../src/definitions/quote.ts","../../../src/definitions/company.ts","../../../src/definitions/financial.ts","../../../src/definitions/calendar.ts","../../../src/definitions/economic.ts","../../../src/definitions/etf.ts","../../../src/definitions/insider.ts","../../../src/definitions/institutional.ts","../../../src/definitions/market.ts","../../../src/definitions/news.ts","../../../src/definitions/screener.ts","../../../src/definitions/search.ts","../../../src/definitions/analyst.ts","../../../src/definitions/valuation.ts","../../../src/definitions/technical.ts","../../../src/definitions/senate-house.ts","../../../src/definitions/stock.ts","../../../src/definitions/index.ts","../../../src/providers/openai/index.ts"],"names":["tool","FMP","z","symbol","limit","period","symbolSchema"],"mappings":";;;;;;;;;AAgBO,SAAS,mBAAA,GAA+B;AAC7C,EAAA,OAAO,OAAA,CAAQ,IAAI,yBAAA,KAA8B,MAAA;AACnD;AAMO,SAAS,wBAAA,GAAoC;AAClD,EAAA,OAAO,OAAA,CAAQ,IAAI,uBAAA,KAA4B,MAAA;AACjD;AAMA,SAAS,mBAAmB,IAAA,EAAsB;AAEhD,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC9B,IAAA,OAAO,0BAA0B,MAAM,CAAA;AAAA,GACzC,CAAA,MAAQ;AAEN,IAAA,OAAO,0BAA0B,IAAI,CAAA;AAAA;AAEzC;AAKA,SAAS,0BAA0B,IAAA,EAAuB;AACxD,EAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,MAAA,EAAW;AACvC,IAAA,OAAO,CAAA;AAAA;AAGT,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAG5B,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAAA;AAGlC,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAE5B,IAAA,OAAO,IAAA,CAAK,QAAA,EAAS,CAAE,MAAA,GAAS,KAAK,CAAA,GAAI,CAAA;AAAA;AAG3C,EAAA,IAAI,OAAO,SAAS,SAAA,EAAW;AAC7B,IAAA,OAAO,CAAA;AAAA;AAGT,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AAEvB,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,KAAA,MAAW,QAAQ,IAAA,EAAM;AACvB,MAAA,MAAA,IAAU,0BAA0B,IAAI,CAAA;AACxC,MAAA,IAAI,KAAK,OAAA,CAAQ,IAAI,CAAA,GAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACxC,QAAA,MAAA,IAAU,CAAA;AAAA;AACZ;AAEF,IAAA,OAAO,MAAA;AAAA;AAGT,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAE5B,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAC7B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,MAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,MAAA,MAAM,KAAA,GAAS,KAAiC,GAAG,CAAA;AAGnD,MAAA,MAAA,IAAU,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA;AAClC,MAAA,MAAA,IAAU,CAAA;AAGV,MAAA,MAAA,IAAU,CAAA;AAGV,MAAA,MAAA,IAAU,0BAA0B,KAAK,CAAA;AAGzC,MAAA,IAAI,CAAA,GAAI,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AACvB,QAAA,MAAA,IAAU,CAAA;AAAA;AACZ;AAEF,IAAA,OAAO,MAAA;AAAA;AAGT,EAAA,OAAO,CAAA;AACT;AAKA,SAAS,0BAA0B,IAAA,EAAsB;AAGvD,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,KAAK,EAAE,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAC9D,EAAA,IAAI,MAAA,GAAS,CAAA;AAEb,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,IAAI,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG;AAEtB,MAAA,MAAA,IAAU,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,CAAA,GAAI,CAAA;AAAA,KAClC,MAAA,IAAW,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,EAAG;AAEhC,MAAA,MAAA,IAAU,CAAA;AAAA,KACZ,MAAA,IAAW,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA,EAAG;AAExC,MAAA,MAAA,IAAU,CAAA;AAAA,KACZ,MAAO;AAEL,MAAA,MAAA,IAAU,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,GAAG,CAAA;AAAA;AACvC;AAGF,EAAA,OAAO,MAAA;AACT;AAKA,SAAS,cAAc,MAAA,EAAyB;AAC9C,EAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,EAAW;AAC3C,IAAA,OAAO,gBAAA;AAAA;AAGT,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,UAAA,GAAa,mBAAmB,MAAM,CAAA;AAC5C,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAChC,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,QAAA,OAAO,CAAA,sBAAA,EAAyB,MAAA,CAAO,MAAM,CAAA,SAAA,EAAY,UAAU,CAAA,QAAA,CAAA;AAAA;AACrE,KACF,CAAA,MAAQ;AAAA;AAGR,IAAA,OAAO,CAAA,QAAA,EAAW,MAAA,CAAO,MAAM,CAAA,SAAA,EAAY,UAAU,CAAA,QAAA,CAAA;AAAA;AAGvD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACzB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AACrC,IAAA,MAAM,UAAA,GAAa,mBAAmB,OAAO,CAAA;AAC7C,IAAA,OAAO,CAAA,OAAA,EAAU,MAAA,CAAO,MAAM,CAAA,SAAA,EAAY,UAAU,CAAA,QAAA,CAAA;AAAA;AAGtD,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AACrC,IAAA,MAAM,UAAA,GAAa,mBAAmB,OAAO,CAAA;AAC7C,IAAA,OAAO,YAAY,UAAU,CAAA,QAAA,CAAA;AAAA;AAG/B,EAAA,OAAO,OAAO,MAAA;AAChB;AAKO,SAAS,gBAAgB,OAAA,EAA2B;AACzD,EAAA,IAAI,CAAC,qBAAoB,EAAG;AAC1B,IAAA;AAAA;AAGF,EAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAO,MAAA,EAAQ,eAAc,GAAI,OAAA;AAEnD,EAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AACjC,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,8BAAA,EAA0B,QAAQ,CAAA,CAAE,CAAA;AAChD,EAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AAE1B,EAAA,OAAA,CAAQ,IAAI,oBAAa,CAAA;AACzB,EAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,CAAC,CAAC,CAAA;AAE1C,EAAA,MAAM,UAAA,GAAa,cAAc,MAAM,CAAA;AAEvC,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,UAAA,EAAM,QAAQ,CAAA,EAAA,EAAK,UAAU,CAAA,CAAE,CAAA;AAE3C,EAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,8BAAA,EAAyB,aAAa,CAAA,EAAA,CAAI,CAAA;AAAA;AAGxD,EAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,EAAE,IAAI,IAAI,CAAA;AACnC;AAKO,SAAS,YAAY,OAAA,EAA2B;AACrD,EAAA,IAAI,CAAC,0BAAyB,EAAG;AAC/B,IAAA;AAAA;AAGF,EAAA,MAAM,EAAE,QAAO,GAAI,OAAA;AAEnB,EAAA,OAAA,CAAQ,IAAI,qBAAc,CAAA;AAC1B,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,IAAI;AAEF,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAChC,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,KAC7C,CAAA,MAAQ;AAEN,MAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAAA;AACpB,GACF,MAAO;AACL,IAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA;AAG7C,EAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,EAAE,IAAI,IAAI,CAAA;AACnC;AAKA,eAAsB,yBAAA,CACpB,QAAA,EACA,KAAA,EACA,SAAA,EACY;AACZ,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAE3B,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAAU;AAC/B,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAEnC,IAAA,eAAA,CAAgB;AAAA,MACd,QAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AAGD,IAAA,WAAA,CAAY;AAAA,MACV,QAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACD,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,WACA,KAAA,EAAO;AACd,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAGnC,IAAA,IAAI,qBAAoB,EAAG;AACzB,MAAA,OAAA,CAAQ,GAAA,CAAI,IAAA,GAAO,GAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AACjC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,iCAAA,EAA+B,QAAQ,CAAA,CAAE,CAAA;AACrD,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AAC1B,MAAA,OAAA,CAAQ,IAAI,oBAAa,CAAA;AACzB,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,CAAC,CAAC,CAAA;AAC1C,MAAA,OAAA,CAAQ,IAAI,iBAAY,CAAA;AACxB,MAAA,OAAA,CAAQ,IAAI,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA;AAClE,MAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,8BAAA,EAAyB,aAAa,CAAA,EAAA,CAAI,CAAA;AACtD,MAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,EAAE,IAAI,IAAI,CAAA;AAAA;AAGnC,IAAA,MAAM,KAAA;AAAA;AAEV;;;ACxQO,SAAS,eAAe,GAAA,EAAmC;AAEhE,EAAA,IAAI,GAAA,CAAI,YAAY,KAAA,EAAO;AACzB,IAAA,OAAO,KAAK,SAAA,CAAU;AAAA,MACpB,KAAA,EAAO,IAAA;AAAA,MACP,IAAA,EAAM,IAAI,SAAA,IAAa,SAAA;AAAA,MACvB,OAAA,EAAS,IAAI,KAAA,IAAS,qBAAA;AAAA,MACtB,QAAQ,GAAA,CAAI;AAAA,KACb,CAAA;AAAA;AAGH,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AACrB,IAAA,OAAO,IAAA,CAAK,UAAU,EAAE,IAAA,EAAM,EAAC,EAAG,IAAA,EAAM,0CAA0C,CAAA;AAAA;AAEpF,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,MAAM,CAAC,CAAA;AACzC;AAUO,SAAS,YAAY,KAAA,EAAwB;AAClD,EAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,EAAA,IAAI,IAAA,GAAqB,SAAA;AACzB,EAAA,IAAI,gBAAA,CAAiB,IAAA,CAAK,OAAO,CAAA,EAAG;AAClC,IAAA,IAAA,GAAO,MAAA;AAAA;AAET,EAAA,OAAO,IAAA,CAAK,UAAU,EAAE,KAAA,EAAO,MAAM,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,CAAA,EAAG,CAAA;AACjE;AAEA,SAAS,QAAQ,IAAA,EAAwB;AACvC,EAAA,IAAI,IAAA,IAAQ,MAAM,OAAO,IAAA;AACzB,EAAA,IAAI,MAAM,OAAA,CAAQ,IAAI,CAAA,EAAG,OAAO,KAAK,MAAA,KAAW,CAAA;AAChD,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU,OAAO,OAAO,IAAA,CAAK,IAAc,EAAE,MAAA,KAAW,CAAA;AAC5E,EAAA,OAAO,KAAA;AACT;;;ACrCO,SAAS,iBAA6C,MAAA,EAA6B;AACxF,EAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,WAAA,EAAa,SAAQ,GAAI,MAAA;AAOpD,EAAA,OAAOA,WAAA,CAAK;AAAA,IACV,IAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA,EAAY,WAAA;AAAA,IACZ,OAAA,EAAS,OAAO,KAAA,KAAmB;AACjC,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,WAAA,CAAY,KAAA,CAAM,KAAK,CAAA;AACpC,QAAA,OAAO,MAAM,yBAAA,CAA0B,IAAA,EAAM,MAAM,MAAM,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,eAC/D,KAAA,EAAO;AAGd,QAAA,OAAO,YAAY,KAAK,CAAA;AAAA;AAC1B;AACF,GACD,CAAA;AACH;ACzBA,IAAI,MAAA;AACJ,IAAI,UAAA;AAMG,SAAS,mBAAmB,MAAA,EAAyB;AAC1D,EAAA,UAAA,GAAa,MAAA;AACb,EAAA,MAAA,GAAS,MAAA;AACX;AAGO,SAAS,cAAA,GAAuB;AACrC,EAAA,MAAA,GAAS,MAAA;AACT,EAAA,UAAA,GAAa,MAAA;AACf;AAGO,SAAS,YAAA,GAAoB;AAClC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAA,GAAS,IAAIC,eAAI,UAAU,CAAA;AAAA;AAE7B,EAAA,OAAO,MAAA;AACT;;;ACXO,SAAS,WAAuC,GAAA,EAKjC;AACpB,EAAA,OAAO,GAAA;AACT;;;ACxBO,IAAM,gBAAA,GAAwC;AAAA,EACnD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EACE,sFAAA;AAAA,IACF,WAAA,EAAaC,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MACL,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,0BAA0B,CAAA,CACjC,QAAA,CAAS,sDAAsD;AAAA,KACnE,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,EAAO,KAAM,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,KAAA,CAAM,QAAA,CAASA,OAAM,CAAC;AAAA,GAC1F,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,oBAAA;AAAA,IACN,WAAA,EACE,8GAAA;AAAA,IACF,WAAA,EAAaD,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,mCAAmC,CAAA;AAAA,MACtE,IAAA,EAAMA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4CAA4C,CAAA;AAAA,MAC5F,EAAA,EAAIA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,0CAA0C,CAAA;AAAA,MACxF,KAAA,EAAOA,KAAA,CACJ,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,uDAAuD;AAAA,KACpE,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,EAAQ,MAAM,EAAA,EAAI,KAAA,EAAAC,MAAAA,GAAQ,EAAA,EAAG,KAAM;AACnD,MAAA,MAAM,GAAA,GAAM,MAAM,YAAA,EAAa,CAAE,MAAM,kBAAA,CAAmB;AAAA,QACxD,MAAA,EAAAD,OAAAA;AAAA,QACA,MAAM,IAAA,IAAQ,MAAA;AAAA,QACd,IAAI,EAAA,IAAM;AAAA,OACX,CAAA;AAED,MAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AACjB,MAAA,IAAI,IAAI,OAAA,IAAW,IAAA,IAAQ,MAAM,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG;AACzD,QAAA,OAAO,cAAA,CAAe;AAAA,UACpB,GAAG,GAAA;AAAA,UACH,IAAA,EAAM,EAAE,GAAG,IAAA,EAAM,UAAA,EAAY,KAAK,UAAA,CAAW,KAAA,CAAM,CAAA,EAAGC,MAAK,CAAA;AAAE,SACtC,CAAA;AAAA;AAE3B,MAAA,OAAO,eAAe,GAAG,CAAA;AAAA;AAC3B,GACD,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,aAAA;AAAA,IACN,WAAA,EACE,iGAAA;AAAA,IACF,WAAA,EAAaF,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,mCAAmC,CAAA;AAAA,MACtE,UAAUA,KAAA,CACP,IAAA,CAAK,CAAC,MAAA,EAAQ,QAAQ,OAAA,EAAS,OAAA,EAAS,OAAA,EAAS,OAAO,CAAC,CAAA,CACzD,OAAA,CAAQ,MAAM,CAAA,CACd,SAAS,cAAc,CAAA;AAAA,MAC1B,IAAA,EAAMA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4CAA4C,CAAA;AAAA,MAC5F,EAAA,EAAIA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,0CAA0C,CAAA;AAAA,MACxF,KAAA,EAAOA,KAAA,CACJ,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,uDAAuD;AAAA,KACpE,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,EAAQ,QAAA,GAAW,MAAA,EAAQ,IAAA,EAAM,EAAA,EAAI,KAAA,EAAAC,MAAAA,GAAQ,EAAA,EAAG,KAAM;AACtE,MAAA,MAAM,GAAA,GAAM,MAAM,YAAA,EAAa,CAAE,MAAM,WAAA,CAAY;AAAA,QACjD,MAAA,EAAAD,OAAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAM,IAAA,IAAQ,MAAA;AAAA,QACd,IAAI,EAAA,IAAM;AAAA,OACX,CAAA;AACD,MAAA,IAAI,IAAI,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AAC1C,QAAA,OAAO,cAAA,CAAe,EAAE,GAAG,GAAA,EAAK,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,CAAA,EAAGC,MAAK,CAAA,EAA2B,CAAA;AAAA;AAE1F,MAAA,OAAO,eAAe,GAAG,CAAA;AAAA;AAC3B,GACD;AACH,CAAA;AC9EA,IAAM,YAAA,GAAeF,MAAE,MAAA,CAAO;AAAA,EAC5B,MAAA,EAAQA,MACL,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,0BAA0B,CAAA,CACjC,QAAA,CAAS,4CAA4C;AAC1D,CAAC,CAAA;AAEM,IAAM,kBAAA,GAA0C;AAAA,EACrD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,mBAAA;AAAA,IACN,WAAA,EAAa,uCAAA;AAAA,IACb,WAAA,EAAa,YAAA;AAAA,IACb,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,EAAO,KACvB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,OAAA,CAAQ,iBAAA,CAAkBA,OAAM,CAAC;AAAA,GACxE,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,uBAAA;AAAA,IACN,WAAA,EAAa,8BAAA;AAAA,IACb,WAAA,EAAa,YAAA;AAAA,IACb,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAA,OAAAA,EAAO,KACvB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,OAAA,CAAQ,cAAA,CAAeA,OAAM,CAAC;AAAA,GACrE,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,iCAAA;AAAA,IACN,WAAA,EAAa,wCAAA;AAAA,IACb,WAAA,EAAa,YAAA;AAAA,IACb,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAA,OAAAA,EAAO,KACvB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,OAAA,CAAQ,wBAAA,CAAyBA,OAAM,CAAC;AAAA,GAC/E,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAa,wEAAA;AAAA,IACb,WAAA,EAAa,YAAA;AAAA,IACb,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAA,OAAAA,EAAO,KACvB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,OAAA,CAAQ,aAAA,CAAcA,OAAM,CAAC;AAAA,GACpE;AACH,CAAA;ACpCA,IAAM,MAAA,GAASD,KAAAA,CACZ,IAAA,CAAK,CAAC,QAAA,EAAU,SAAS,CAAC,CAAA,CAC1B,OAAA,CAAQ,QAAQ,CAAA,CAChB,QAAA,CAAS,qCAAqC,CAAA;AAEjD,IAAM,MAAA,GAAS,CAAC,IAAA,KAAiBA,KAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,QAAA,CAAS,CAAA,wBAAA,EAA2B,IAAI,CAAA,IAAA,CAAM,CAAA;AAEjG,IAAM,KAAA,GAAQA,MAAE,MAAA,EAAO,CAAE,QAAQ,CAAC,CAAA,CAAE,SAAS,mCAAmC,CAAA;AAGhF,IAAM,gBAAgB,CACpB,IAAA,EACA,WAAA,EACA,IAAA,EACA,SAEA,UAAA,CAAW;AAAA,EACT,IAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA,EAAaA,KAAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQ,OAAO,IAAI,CAAA,EAAG,MAAA,EAAQ,KAAA,EAAO,CAAA;AAAA,EAC7D,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,SAAQ,MAAA,EAAAE,OAAAA,EAAQ,OAAAD,MAAAA,EAAM,KACtC,eAAe,MAAM,IAAA,CAAK,EAAE,MAAA,EAAAD,OAAAA,EAAQ,QAAAE,OAAAA,EAAQ,KAAA,EAAAD,MAAAA,EAAO,CAAC;AACxD,CAAC,CAAA;AAEI,IAAM,oBAAA,GAA4C;AAAA,EACvD,aAAA;AAAA,IACE,iBAAA;AAAA,IACA,yEAAA;AAAA,IACA,eAAA;AAAA,IACA,CAAA,IAAA,KAAQ,YAAA,EAAa,CAAE,SAAA,CAAU,gBAAgB,IAAI;AAAA,GACvD;AAAA,EACA,aAAA;AAAA,IACE,oBAAA;AAAA,IACA,0EAAA;AAAA,IACA,kBAAA;AAAA,IACA,CAAA,IAAA,KAAQ,YAAA,EAAa,CAAE,SAAA,CAAU,mBAAmB,IAAI;AAAA,GAC1D;AAAA,EACA,aAAA;AAAA,IACE,sBAAA;AAAA,IACA,8FAAA;AAAA,IACA,qBAAA;AAAA,IACA,CAAA,IAAA,KAAQ,YAAA,EAAa,CAAE,SAAA,CAAU,qBAAqB,IAAI;AAAA,GAC5D;AAAA,EACA,aAAA;AAAA,IAAc,eAAA;AAAA,IAAiB,+BAAA;AAAA,IAAiC,aAAA;AAAA,IAAe,CAAA,IAAA,KAC7E,YAAA,EAAa,CAAE,SAAA,CAAU,cAAc,IAAI;AAAA,GAC7C;AAAA,EACA,aAAA;AAAA,IACE,oBAAA;AAAA,IACA,+FAAA;AAAA,IACA,kBAAA;AAAA,IACA,CAAA,IAAA,KAAQ,YAAA,EAAa,CAAE,SAAA,CAAU,mBAAmB,IAAI;AAAA,GAC1D;AAAA,EACA,aAAA;AAAA,IACE,oBAAA;AAAA,IACA,oCAAA;AAAA,IACA,kBAAA;AAAA,IACA,CAAA,IAAA,KAAQ,YAAA,EAAa,CAAE,SAAA,CAAU,mBAAmB,IAAI;AAAA,GAC1D;AAAA,EACA,aAAA;AAAA,IAAc,mBAAA;AAAA,IAAqB,mCAAA;AAAA,IAAqC,iBAAA;AAAA,IAAmB,CAAA,IAAA,KACzF,YAAA,EAAa,CAAE,SAAA,CAAU,kBAAkB,IAAI;AAAA,GACjD;AAAA,EACA,aAAA;AAAA,IAAc,iBAAA;AAAA,IAAmB,iCAAA;AAAA,IAAmC,eAAA;AAAA,IAAiB,CAAA,IAAA,KACnF,YAAA,EAAa,CAAE,SAAA,CAAU,gBAAgB,IAAI;AAAA,GAC/C;AAAA,EACA,aAAA;AAAA,IACE,uBAAA;AAAA,IACA,wCAAA;AAAA,IACA,sBAAA;AAAA,IACA,CAAA,IAAA,KAAQ,YAAA,EAAa,CAAE,SAAA,CAAU,sBAAsB,IAAI;AAAA,GAC7D;AAAA,EACA,aAAA;AAAA,IACE,oBAAA;AAAA,IACA,oCAAA;AAAA,IACA,kBAAA;AAAA,IACA,CAAA,IAAA,KAAQ,YAAA,EAAa,CAAE,SAAA,CAAU,mBAAmB,IAAI;AAAA,GAC1D;AAAA,EACA,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,uBAAA;AAAA,IACN,WAAA,EAAa,uCAAA;AAAA,IACb,WAAA,EAAaF,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQ,OAAO,qBAAqB,CAAA;AAAA,MACpC,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,QAAQ,EAAE,CAAA,CAAE,SAAS,mCAAmC;AAAA,KAC3E,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,SAAQ,KAAA,EAAAC,MAAAA,OACxB,cAAA,CAAe,MAAM,cAAa,CAAE,SAAA,CAAU,sBAAsB,EAAE,MAAA,EAAAD,SAAQ,KAAA,EAAAC,MAAAA,EAAO,CAAC;AAAA,GACzF,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,oBAAA;AAAA,IACN,WAAA,EACE,mHAAA;AAAA,IACF,WAAA,EAAaF,MAAE,MAAA,CAAO,EAAE,QAAQ,MAAA,CAAO,kBAAkB,GAAG,CAAA;AAAA,IAC5D,SAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,UAAU,kBAAA,CAAmB,EAAE,MAAA,EAAAA,OAAAA,EAAQ,CAAC;AAAA,GAC/E,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,kBAAA;AAAA,IACN,WAAA,EACE,sFAAA;AAAA,IACF,WAAA,EAAaD,MAAE,MAAA,CAAO,EAAE,QAAQ,MAAA,CAAO,iBAAiB,GAAG,CAAA;AAAA,IAC3D,SAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,UAAU,gBAAA,CAAiB,EAAE,MAAA,EAAAA,OAAAA,EAAQ,CAAC;AAAA,GAC7E,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,uBAAA;AAAA,IACN,WAAA,EACE,sGAAA;AAAA,IACF,WAAA,EAAaD,MAAE,MAAA,CAAO,EAAE,QAAQ,MAAA,CAAO,sBAAsB,GAAG,CAAA;AAAA,IAChE,SAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,UAAU,qBAAA,CAAsB,EAAE,MAAA,EAAAA,OAAAA,EAAQ,CAAC;AAAA,GAClF,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,+BAAA;AAAA,IACN,WAAA,EAAa,uDAAA;AAAA,IACb,WAAA,EAAaD,MAAE,MAAA,CAAO,EAAE,QAAQ,MAAA,CAAO,8BAA8B,CAAA,EAAG,MAAA,EAAQ,CAAA;AAAA,IAChF,SAAS,OAAO,EAAE,QAAAC,OAAAA,EAAQ,MAAA,EAAAE,SAAO,KAC/B,cAAA;AAAA,MACE,MAAM,YAAA,EAAa,CAAE,SAAA,CAAU,6BAAA,CAA8B,EAAE,MAAA,EAAAF,OAAAA,EAAQ,MAAA,EAAAE,OAAAA,EAAQ;AAAA;AACjF,GACH,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,kCAAA;AAAA,IACN,WAAA,EAAa,4DAAA;AAAA,IACb,WAAA,EAAaH,MAAE,MAAA,CAAO,EAAE,QAAQ,MAAA,CAAO,iCAAiC,CAAA,EAAG,MAAA,EAAQ,CAAA;AAAA,IACnF,SAAS,OAAO,EAAE,QAAAC,OAAAA,EAAQ,MAAA,EAAAE,SAAO,KAC/B,cAAA;AAAA,MACE,MAAM,YAAA,EAAa,CAAE,SAAA,CAAU,gCAAA,CAAiC,EAAE,MAAA,EAAAF,OAAAA,EAAQ,MAAA,EAAAE,OAAAA,EAAQ;AAAA;AACpF,GACH;AACH,CAAA;AChIA,IAAM,eAAA,GAAkBH,MAAE,MAAA,CAAO;AAAA,EAC/B,IAAA,EAAMA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4CAA4C,CAAA;AAAA,EAC5F,EAAA,EAAIA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,0CAA0C;AAC1F,CAAC,CAAA;AAEM,IAAM,mBAAA,GAA2C;AAAA,EACtD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,qBAAA;AAAA,IACN,WAAA,EAAa,0EAAA;AAAA,IACb,WAAA,EAAa,eAAA;AAAA,IACb,OAAA,EAAS,OAAO,EAAE,IAAA,EAAM,IAAG,KACzB,cAAA;AAAA,MACE,MAAM,YAAA,EAAa,CAAE,QAAA,CAAS,mBAAA,CAAoB;AAAA,QAChD,MAAM,IAAA,IAAQ,MAAA;AAAA,QACd,IAAI,EAAA,IAAM;AAAA,OACX;AAAA;AACH,GACH,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,qBAAA;AAAA,IACN,WAAA,EAAa,kFAAA;AAAA,IACb,WAAA,EAAa,eAAA;AAAA,IACb,OAAA,EAAS,OAAO,EAAE,IAAA,EAAM,IAAG,KACzB,cAAA;AAAA,MACE,MAAM,YAAA,EAAa,CAAE,QAAA,CAAS,oBAAA,CAAqB;AAAA,QACjD,MAAM,IAAA,IAAQ,MAAA;AAAA,QACd,IAAI,EAAA,IAAM;AAAA,OACX;AAAA;AACH,GACH;AACH,CAAA;AC9BA,IAAM,sBAAA,GAAyB;AAAA,EAC7B,KAAA;AAAA,EACA,SAAA;AAAA,EACA,qBAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AAAA,EACA,KAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,mBAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA,qBAAA;AAAA,EACA,eAAA;AAAA,EACA,gCAAA;AAAA,EACA,gDAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kCAAA;AAAA,EACA,kDAAA;AAAA,EACA,wDAAA;AAAA,EACA,gCAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,mBAAA,GAA2C;AAAA,EACtD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,kBAAA;AAAA,IACN,WAAA,EAAa,uDAAA;AAAA,IACb,WAAA,EAAaA,MAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAMA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4CAA4C,CAAA;AAAA,MAC5F,EAAA,EAAIA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,0CAA0C;AAAA,KACzF,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,IAAA,EAAM,IAAG,KACzB,cAAA;AAAA,MACE,MAAM,YAAA,EAAa,CAAE,QAAA,CAAS,gBAAA,CAAiB;AAAA,QAC7C,MAAM,IAAA,IAAQ,MAAA;AAAA,QACd,IAAI,EAAA,IAAM;AAAA,OACX;AAAA;AACH,GACH,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,uBAAA;AAAA,IACN,WAAA,EAAa,sEAAA;AAAA,IACb,WAAA,EAAaA,MAAE,MAAA,CAAO;AAAA,MACpB,MAAMA,KAAAA,CAAE,IAAA,CAAK,sBAAsB,CAAA,CAAE,SAAS,oCAAoC,CAAA;AAAA,MAClF,IAAA,EAAMA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4CAA4C,CAAA;AAAA,MAC5F,EAAA,EAAIA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,0CAA0C;AAAA,KACzF,CAAA;AAAA,IACD,SAAS,OAAO,EAAE,IAAA,EAAM,IAAA,EAAM,IAAG,KAC/B,cAAA;AAAA,MACE,MAAM,YAAA,EAAa,CAAE,QAAA,CAAS,qBAAA,CAAsB;AAAA,QAClD,IAAA;AAAA,QACA,MAAM,IAAA,IAAQ,MAAA;AAAA,QACd,IAAI,EAAA,IAAM;AAAA,OACX;AAAA;AACH,GACH;AACH,CAAA;AC3DO,IAAM,cAAA,GAAsC;AAAA,EACjD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,gBAAA;AAAA,IACN,WAAA,EACE,6FAAA;AAAA,IACF,WAAA,EAAaA,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MACL,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,wBAAwB,CAAA,CAC/B,QAAA,CAAS,kCAAkC,CAAA;AAAA,MAC9C,IAAA,EAAMA,MACH,MAAA,EAAO,CACP,UAAS,CACT,QAAA,EAAS,CACT,QAAA,CAAS,mDAAmD;AAAA,KAChE,CAAA;AAAA,IACD,SAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,EAAQ,MAAK,KAAM;AAEnC,MAAA,MAAM,MAAA,GAAc,EAAE,MAAA,EAAAA,OAAAA,EAAO;AAC7B,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,MAAA,CAAO,IAAA,GAAO,IAAA;AAAA;AAEhB,MAAA,OAAO,eAAe,MAAM,YAAA,GAAe,GAAA,CAAI,WAAA,CAAY,MAAM,CAAC,CAAA;AAAA;AACpE,GACD,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAa,oFAAA;AAAA,IACb,WAAA,EAAaD,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MACL,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,wBAAwB,CAAA,CAC/B,QAAA,CAAS,kCAAkC;AAAA,KAC/C,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,EAAO,KAAM,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,GAAA,CAAI,UAAA,CAAWA,OAAM,CAAC;AAAA,GAC1F;AACH,CAAA;ACpCO,IAAM,kBAAA,GAA0C;AAAA,EACrD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,mBAAA;AAAA,IACN,WAAA,EACE,wGAAA;AAAA,IACF,WAAA,EAAaD,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MACL,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,0BAA0B,CAAA,CACjC,QAAA,CAAS,wCAAwC,CAAA;AAAA,MACpD,IAAA,EAAMA,KAAAA,CACH,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,OAAA,CAAQ,CAAC,CAAA,CACT,SAAS,sDAAsD;AAAA,KACnE,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,SAAQ,IAAA,EAAK,KAC7B,cAAA,CAAe,MAAM,cAAa,CAAE,OAAA,CAAQ,wBAAA,CAAyBA,OAAAA,EAAQ,IAAI,CAAC;AAAA,GACrF;AACH,CAAA;ACpBO,IAAM,wBAAA,GAAgD;AAAA,EAC3D,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,yBAAA;AAAA,IACN,WAAA,EACE,gHAAA;AAAA,IACF,WAAA,EAAaD,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MACL,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,0BAA0B,CAAA,CACjC,QAAA,CAAS,wCAAwC;AAAA,KACrD,CAAA;AAAA,IACD,SAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,cAAc,uBAAA,CAAwB,EAAE,MAAA,EAAAA,OAAAA,EAAQ,CAAC;AAAA,GACxF;AACH,CAAA;ACdA,IAAM,KAAA,GAAQD,KAAAA,CAAE,MAAA,CAAO,EAAE,CAAA;AAElB,IAAM,iBAAA,GAAyC;AAAA,EACpD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,sBAAA;AAAA,IACN,WAAA,EAAa,yEAAA;AAAA,IACb,WAAA,EAAa,KAAA;AAAA,IACb,OAAA,EAAS,YAAY,cAAA,CAAe,MAAM,cAAa,CAAE,MAAA,CAAO,sBAAsB;AAAA,GACvF,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,sBAAA;AAAA,IACN,WAAA,EAAa,iFAAA;AAAA,IACb,WAAA,EAAa,KAAA;AAAA,IACb,OAAA,EAAS,YAAY,cAAA,CAAe,MAAM,cAAa,CAAE,MAAA,CAAO,sBAAsB;AAAA,GACvF,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAa,sEAAA;AAAA,IACb,WAAA,EAAa,KAAA;AAAA,IACb,OAAA,EAAS,YAAY,cAAA,CAAe,MAAM,cAAa,CAAE,MAAA,CAAO,YAAY;AAAA,GAC7E,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,WAAA;AAAA,IACN,WAAA,EAAa,sEAAA;AAAA,IACb,WAAA,EAAa,KAAA;AAAA,IACb,OAAA,EAAS,YAAY,cAAA,CAAe,MAAM,cAAa,CAAE,MAAA,CAAO,WAAW;AAAA,GAC5E,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,eAAA;AAAA,IACN,WAAA,EAAa,uEAAA;AAAA,IACb,WAAA,EAAa,KAAA;AAAA,IACb,OAAA,EAAS,YAAY,cAAA,CAAe,MAAM,cAAa,CAAE,MAAA,CAAO,eAAe;AAAA,GAChF;AACH,CAAA;ACjCO,IAAM,eAAA,GAAuC;AAAA,EAClD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EAAa,mDAAA;AAAA,IACb,WAAA,EAAaA,MAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAMA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4CAA4C,CAAA;AAAA,MAC5F,EAAA,EAAIA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,0CAA0C,CAAA;AAAA,MACxF,KAAA,EAAOA,KAAAA,CACJ,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,+CAA+C;AAAA,KAC5D,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,IAAA,EAAM,IAAI,KAAA,EAAAE,MAAAA,GAAQ,IAAG,KACrC,cAAA;AAAA,MACE,MAAM,YAAA,EAAa,CAAE,IAAA,CAAK,YAAA,CAAa;AAAA,QACrC,MAAM,IAAA,IAAQ,MAAA;AAAA,QACd,IAAI,EAAA,IAAM,MAAA;AAAA,QACV,KAAA,EAAAA;AAAA,OACD;AAAA;AACH,GACH,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,sBAAA;AAAA,IACN,WAAA,EAAa,qEAAA;AAAA,IACb,WAAA,EAAaF,MAAE,MAAA,CAAO;AAAA,MACpB,OAAA,EAASA,KAAAA,CACN,KAAA,CAAMA,KAAAA,CAAE,QAAO,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA,CACvB,GAAA,CAAI,CAAC,CAAA,CACL,SAAS,wDAAwD,CAAA;AAAA,MACpE,IAAA,EAAMA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,4CAA4C,CAAA;AAAA,MAC5F,EAAA,EAAIA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,0CAA0C,CAAA;AAAA,MACxF,KAAA,EAAOA,KAAAA,CACJ,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,+CAA+C;AAAA,KAC5D,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,OAAA,EAAS,MAAM,EAAA,EAAI,KAAA,EAAAE,MAAAA,GAAQ,EAAA,EAAG,KAC9C,cAAA;AAAA,MACE,MAAM,YAAA,EAAa,CAAE,IAAA,CAAK,oBAAA,CAAqB;AAAA,QAC7C,OAAA;AAAA,QACA,MAAM,IAAA,IAAQ,MAAA;AAAA,QACd,IAAI,EAAA,IAAM,MAAA;AAAA,QACV,KAAA,EAAAA;AAAA,OACD;AAAA;AACH,GACH;AACH,CAAA;ACjDO,IAAM,mBAAA,GAA2C;AAAA,EACtD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EACE,wHAAA;AAAA,IACF,WAAA,EAAaF,MAAE,MAAA,CAAO;AAAA,MACpB,iBAAA,EAAmBA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,+BAA+B,CAAA;AAAA,MAC5F,kBAAA,EAAoBA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,+BAA+B,CAAA;AAAA,MAC7F,aAAA,EAAeA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,qBAAqB,CAAA;AAAA,MAC9E,cAAA,EAAgBA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,qBAAqB,CAAA;AAAA,MAC/E,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,oCAAoC,CAAA;AAAA,MACtF,QAAA,EAAUA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,iBAAiB,CAAA;AAAA,MACrE,QAAA,EAAUA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,kCAAkC,CAAA;AAAA,MACtF,OAAA,EAASA,MAAE,MAAA,EAAO,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,6BAA6B,CAAA;AAAA,MAChF,KAAA,EAAOA,MAAE,OAAA,EAAQ,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,kBAAkB,CAAA;AAAA,MACpE,iBAAA,EAAmBA,MAAE,OAAA,EAAQ,CAAE,UAAS,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,8BAA8B,CAAA;AAAA,MAC5F,KAAA,EAAOA,KAAAA,CACJ,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,8CAA8C;AAAA,KAC3D,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,KAAA,EAAAE,SAAQ,EAAA,EAAI,GAAG,SAAQ,KAAM;AAE7C,MAAA,MAAM,MAAA,GAAkC,EAAE,KAAA,EAAAA,MAAAA,EAAM;AAChD,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClD,QAAA,IAAI,UAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA;AAE3D,MAAA,OAAO,eAAe,MAAM,YAAA,GAAe,QAAA,CAAS,WAAA,CAAY,MAAwB,CAAC,CAAA;AAAA;AAC3F,GACD;AACH,CAAA;ACjCO,IAAM,iBAAA,GAAyC;AAAA,EACpD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EACE,gGAAA;AAAA,IACF,WAAA,EAAaF,MAAE,MAAA,CAAO;AAAA,MACpB,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,sCAAsC,CAAA;AAAA,MACxE,KAAA,EAAOA,KAAAA,CACJ,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,8CAA8C,CAAA;AAAA,MAC1D,QAAA,EAAUA,MACP,MAAA,EAAO,CACP,UAAS,CACT,QAAA,EAAS,CACT,QAAA,CAAS,4DAA4D;AAAA,KACzE,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,KAAA,EAAO,OAAAE,MAAAA,GAAQ,EAAA,EAAI,UAAS,KAC5C,cAAA;AAAA,MACE,MAAM,YAAA,EAAa,CAAE,MAAA,CAAO,MAAA,CAAO,EAAE,KAAA,EAAO,KAAA,EAAAA,MAAAA,EAAO,QAAA,EAAU,QAAA,IAAY,MAAA,EAAW;AAAA;AACtF,GACH;AACH,CAAA;ACvBO,IAAM,kBAAA,GAA0C;AAAA,EACrD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,qBAAA;AAAA,IACN,WAAA,EACE,mFAAA;AAAA,IACF,WAAA,EAAaF,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,+BAA+B,CAAA;AAAA,MAClE,MAAA,EAAQA,KAAAA,CACL,IAAA,CAAK,CAAC,QAAA,EAAU,SAAS,CAAC,CAAA,CAC1B,OAAA,CAAQ,QAAQ,CAAA,CAChB,QAAA,CAAS,qCAAqC,CAAA;AAAA,MACjD,KAAA,EAAOA,KAAAA,CACJ,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,8CAA8C;AAAA,KAC3D,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,EAAQ,MAAA,EAAAE,OAAAA,GAAS,QAAA,EAAU,KAAA,EAAAD,MAAAA,GAAQ,EAAA,EAAG,KACtD,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,OAAA,CAAQ,YAAA,CAAa,EAAE,MAAA,EAAAD,OAAAA,EAAQ,MAAA,EAAAE,OAAAA,EAAQ,KAAA,EAAAD,MAAAA,EAAO,CAAC;AAAA,GACtF,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,yBAAA;AAAA,IACN,WAAA,EACE,qFAAA;AAAA,IACF,WAAA,EAAaF,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,+BAA+B;AAAA,KACnE,CAAA;AAAA,IACD,SAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,QAAQ,uBAAA,CAAwB,EAAE,MAAA,EAAAA,OAAAA,EAAQ,CAAC;AAAA,GAClF,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,gBAAA;AAAA,IACN,WAAA,EACE,qFAAA;AAAA,IACF,WAAA,EAAaD,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,+BAA+B,CAAA;AAAA,MAClE,KAAA,EAAOA,KAAAA,CACJ,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,oDAAoD;AAAA,KACjE,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,SAAQ,KAAA,EAAAC,MAAAA,GAAQ,IAAG,KAAM;AACzC,MAAA,MAAM,GAAA,GAAM,MAAM,YAAA,EAAa,CAAE,QAAQ,SAAA,CAAU,EAAE,MAAA,EAAAD,OAAAA,EAAQ,CAAA;AAC7D,MAAA,IAAI,IAAI,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AAC1C,QAAA,OAAO,cAAA,CAAe,EAAE,GAAG,GAAA,EAAK,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,CAAA,EAAGC,MAAK,CAAA,EAA2B,CAAA;AAAA;AAE1F,MAAA,OAAO,eAAe,GAAG,CAAA;AAAA;AAC3B,GACD,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,oBAAA;AAAA,IACN,WAAA,EACE,mHAAA;AAAA,IACF,WAAA,EAAaF,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,+BAA+B;AAAA,KACnE,CAAA;AAAA,IACD,SAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,QAAQ,kBAAA,CAAmB,EAAE,MAAA,EAAAA,OAAAA,EAAQ,CAAC;AAAA,GAC7E;AACH,CAAA;AC/DA,IAAMG,aAAAA,GAAeJ,MAAE,MAAA,CAAO;AAAA,EAC5B,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,+BAA+B;AACpE,CAAC,CAAA;AAEM,IAAM,oBAAA,GAA4C;AAAA,EACvD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,uBAAA;AAAA,IACN,WAAA,EACE,4FAAA;AAAA,IACF,WAAA,EAAaI,aAAAA;AAAA,IACb,SAAS,OAAO,EAAE,MAAA,EAAAH,OAAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,UAAU,qBAAA,CAAsB,EAAE,MAAA,EAAAA,OAAAA,EAAQ,CAAC;AAAA,GAClF,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,kBAAA;AAAA,IACN,WAAA,EAAa,uDAAA;AAAA,IACb,WAAA,EAAaG,aAAAA;AAAA,IACb,SAAS,OAAO,EAAE,MAAA,EAAAH,OAAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,UAAU,iBAAA,CAAkB,EAAE,MAAA,EAAAA,OAAAA,EAAQ,CAAC;AAAA,GAC9E;AACH,CAAA;ACnBO,IAAM,oBAAA,GAA4C;AAAA,EACvD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,uBAAA;AAAA,IACN,WAAA,EACE,iIAAA;AAAA,IACF,WAAA,EAAaD,MAAE,MAAA,CAAO;AAAA,MACpB,MAAA,EAAQA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,mCAAmC,CAAA;AAAA,MACtE,MAAMA,KAAAA,CACH,IAAA,CAAK,CAAC,KAAA,EAAO,OAAO,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAO,qBAAqB,UAAA,EAAY,KAAK,CAAC,CAAA,CACzF,SAAS,oBAAoB,CAAA;AAAA,MAChC,YAAA,EAAcA,KAAAA,CACX,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,8DAA8D,CAAA;AAAA,MAC1E,WAAWA,KAAAA,CACR,IAAA,CAAK,CAAC,MAAA,EAAQ,MAAA,EAAQ,SAAS,OAAA,EAAS,OAAA,EAAS,SAAS,MAAA,EAAQ,OAAA,EAAS,QAAQ,CAAC,CAAA,CACpF,QAAQ,MAAM,CAAA,CACd,SAAS,eAAe,CAAA;AAAA,MAC3B,KAAA,EAAOA,KAAAA,CACJ,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,QAAA,EAAS,CACT,OAAA,CAAQ,EAAE,CAAA,CACV,QAAA,CAAS,uDAAuD;AAAA,KACpE,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAC,OAAAA,EAAQ,IAAA,EAAM,YAAA,GAAe,EAAA,EAAI,SAAA,GAAY,MAAA,EAAQ,KAAA,EAAAC,MAAAA,GAAQ,IAAG,KAAM;AACtF,MAAA,MAAM,GAAA,GAAM,MAAM,YAAA,EAAa,CAAE,UAAU,qBAAA,CAAsB;AAAA,QAC/D,MAAA,EAAAD,OAAAA;AAAA,QACA,IAAA;AAAA,QACA,YAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,IAAI,IAAI,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,EAAG;AAC1C,QAAA,OAAO,cAAA,CAAe,EAAE,GAAG,GAAA,EAAK,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,CAAA,EAAGC,MAAK,CAAA,EAA2B,CAAA;AAAA;AAE1F,MAAA,OAAO,eAAe,GAAG,CAAA;AAAA;AAC3B,GACD;AACH,CAAA;ACzCA,IAAME,aAAAA,GAAeJ,MAAE,MAAA,CAAO;AAAA,EAC5B,MAAA,EAAQA,MACL,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,0BAA0B,CAAA,CACjC,QAAA,CAAS,wCAAwC;AACtD,CAAC,CAAA;AAED,IAAM,aAAA,GAAgBA,MAAE,MAAA,CAAO;AAAA,EAC7B,IAAA,EAAMA,KAAAA,CACH,MAAA,EAAO,CACP,GAAA,EAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,OAAA,CAAQ,CAAC,CAAA,CACT,SAAS,sDAAsD;AACpE,CAAC,CAAA;AAEM,IAAM,sBAAA,GAA8C;AAAA,EACzD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,kBAAA;AAAA,IACN,WAAA,EAAa,kFAAA;AAAA,IACb,WAAA,EAAaI,aAAAA;AAAA,IACb,SAAS,OAAO,EAAE,MAAA,EAAAH,OAAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,YAAY,gBAAA,CAAiB,EAAE,MAAA,EAAAA,OAAAA,EAAQ,CAAC;AAAA,GAC/E,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,iBAAA;AAAA,IACN,WAAA,EACE,wFAAA;AAAA,IACF,WAAA,EAAaG,aAAAA;AAAA,IACb,SAAS,OAAO,EAAE,MAAA,EAAAH,OAAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,YAAY,eAAA,CAAgB,EAAE,MAAA,EAAAA,OAAAA,EAAQ,CAAC;AAAA,GAC9E,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,wBAAA;AAAA,IACN,WAAA,EACE,uFAAA;AAAA,IACF,WAAA,EAAaD,MAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAMA,MACH,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,kBAAkB,CAAA,CACzB,QAAA,CAAS,iDAAiD;AAAA,KAC9D,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,IAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,WAAA,CAAY,sBAAA,CAAuB,EAAE,IAAA,EAAM,CAAC;AAAA,GACnF,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,uBAAA;AAAA,IACN,WAAA,EACE,6FAAA;AAAA,IACF,WAAA,EAAaA,MAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAMA,MACH,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,kBAAkB,CAAA,CACzB,QAAA,CAAS,wDAAwD;AAAA,KACrE,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,IAAA,OAChB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,WAAA,CAAY,qBAAA,CAAsB,EAAE,IAAA,EAAM,CAAC;AAAA,GAClF,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,yBAAA;AAAA,IACN,WAAA,EACE,6FAAA;AAAA,IACF,WAAA,EAAa,aAAA;AAAA;AAAA;AAAA,IAGb,OAAA,EAAS,OAAO,EAAE,IAAA,GAAO,GAAE,KACzB,cAAA,CAAe,MAAM,YAAA,GAAe,WAAA,CAAY,uBAAA,CAAwB,EAAE,IAAA,EAAM,CAAC;AAAA,GACpF,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,wBAAA;AAAA,IACN,WAAA,EACE,2FAAA;AAAA,IACF,WAAA,EAAa,aAAA;AAAA;AAAA;AAAA,IAGb,OAAA,EAAS,OAAO,EAAE,IAAA,GAAO,GAAE,KACzB,cAAA,CAAe,MAAM,YAAA,GAAe,WAAA,CAAY,sBAAA,CAAuB,EAAE,IAAA,EAAM,CAAC;AAAA,GACnF;AACH,CAAA;AC9EA,IAAMI,aAAAA,GAAeJ,MAAE,MAAA,CAAO;AAAA,EAC5B,MAAA,EAAQA,MACL,MAAA,EAAO,CACP,IAAI,CAAA,EAAG,0BAA0B,CAAA,CACjC,QAAA,CAAS,4CAA4C;AAC1D,CAAC,CAAA;AAEM,IAAM,gBAAA,GAAwC;AAAA,EACnD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,cAAA;AAAA,IACN,WAAA,EAAa,sEAAA;AAAA,IACb,WAAA,EAAaI,aAAAA;AAAA,IACb,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAH,OAAAA,EAAO,KAAM,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,KAAA,CAAM,YAAA,CAAaA,OAAM,CAAC;AAAA,GAC9F,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,gBAAA;AAAA,IACN,WAAA,EAAa,kFAAA;AAAA,IACb,WAAA,EAAaG,aAAAA;AAAA,IACb,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAH,OAAAA,EAAO,KACvB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,KAAA,CAAM,cAAA,CAAeA,OAAM,CAAC;AAAA,GACnE,CAAA;AAAA,EACD,UAAA,CAAW;AAAA,IACT,IAAA,EAAM,oBAAA;AAAA,IACN,WAAA,EAAa,6EAAA;AAAA,IACb,WAAA,EAAaG,aAAAA;AAAA,IACb,OAAA,EAAS,OAAO,EAAE,MAAA,EAAAH,OAAAA,EAAO,KACvB,cAAA,CAAe,MAAM,YAAA,EAAa,CAAE,KAAA,CAAM,kBAAA,CAAmBA,OAAM,CAAC;AAAA,GACvE;AACH,CAAA;;;ACSO,IAAM,cAAA,GAAsC;AAAA,EACjD,GAAG,gBAAA;AAAA,EACH,GAAG,kBAAA;AAAA,EACH,GAAG,oBAAA;AAAA,EACH,GAAG,mBAAA;AAAA,EACH,GAAG,mBAAA;AAAA,EACH,GAAG,cAAA;AAAA,EACH,GAAG,kBAAA;AAAA,EACH,GAAG,wBAAA;AAAA,EACH,GAAG,iBAAA;AAAA,EACH,GAAG,eAAA;AAAA,EACH,GAAG,mBAAA;AAAA,EACH,GAAG,iBAAA;AAAA,EACH,GAAG,kBAAA;AAAA,EACH,GAAG,oBAAA;AAAA,EACH,GAAG,oBAAA;AAAA,EACH,GAAG,sBAAA;AAAA,EACH,GAAG;AACL,CAAA;;;AC9BA,IAAM,SAAwC,MAAA,CAAO,WAAA;AAAA,EACnD,cAAA,CAAe,IAAI,CAAA,GAAA,KAAO,CAAC,IAAI,IAAA,EAAM,gBAAA,CAAiB,GAAG,CAAkB,CAAC;AAC9E,CAAA;AAEA,IAAM,IAAA,GAAO,CAAC,IAAA,KAA+C,IAAA,CAAK,IAAI,CAAA,GAAA,KAAO,MAAA,CAAO,GAAA,CAAI,IAAI,CAAC,CAAA;AAGtF,IAAM,gBAAgB,MAAA,CAAO;AAC7B,IAAM,qBAAqB,MAAA,CAAO;AAClC,IAAM,cAAc,MAAA,CAAO;AAC3B,IAAM,oBAAoB,MAAA,CAAO;AACjC,IAAM,wBAAwB,MAAA,CAAO;AACrC,IAAM,kCAAkC,MAAA,CAAO;AAC/C,IAAM,gBAAgB,MAAA,CAAO;AAC7B,IAAM,sBAAsB,MAAA,CAAO;AACnC,IAAM,sBAAsB,MAAA,CAAO;AACnC,IAAM,mBAAmB,MAAA,CAAO;AAChC,IAAM,wBAAwB,MAAA,CAAO;AACrC,IAAM,iBAAiB,MAAA,CAAO;AAC9B,IAAM,gBAAgB,MAAA,CAAO;AAC7B,IAAM,kBAAkB,MAAA,CAAO;AAC/B,IAAM,qBAAqB,MAAA,CAAO;AAClC,IAAM,uBAAuB,MAAA,CAAO;AACpC,IAAM,gBAAgB,MAAA,CAAO;AAC7B,IAAM,qBAAqB,MAAA,CAAO;AAClC,IAAM,qBAAqB,MAAA,CAAO;AAClC,IAAM,oBAAoB,MAAA,CAAO;AACjC,IAAM,kBAAkB,MAAA,CAAO;AAC/B,IAAM,wBAAwB,MAAA,CAAO;AACrC,IAAM,qBAAqB,MAAA,CAAO;AAClC,IAAM,wBAAwB,MAAA,CAAO;AACrC,IAAM,qBAAqB,MAAA,CAAO;AAClC,IAAM,mBAAmB,MAAA,CAAO;AAChC,IAAM,wBAAwB,MAAA,CAAO;AACrC,IAAM,gCAAgC,MAAA,CAAO;AAC7C,IAAM,mCAAmC,MAAA,CAAO;AAChD,IAAM,oBAAoB,MAAA,CAAO;AACjC,IAAM,0BAA0B,MAAA,CAAO;AACvC,IAAM,uBAAuB,MAAA,CAAO;AACpC,IAAM,uBAAuB,MAAA,CAAO;AACpC,IAAM,aAAa,MAAA,CAAO;AAC1B,IAAM,YAAY,MAAA,CAAO;AACzB,IAAM,gBAAgB,MAAA,CAAO;AAC7B,IAAM,mBAAmB,MAAA,CAAO;AAChC,IAAM,kBAAkB,MAAA,CAAO;AAC/B,IAAM,yBAAyB,MAAA,CAAO;AACtC,IAAM,wBAAwB,MAAA,CAAO;AACrC,IAAM,0BAA0B,MAAA,CAAO;AACvC,IAAM,yBAAyB,MAAA,CAAO;AACtC,IAAM,eAAe,MAAA,CAAO;AAC5B,IAAM,uBAAuB,MAAA,CAAO;AACpC,IAAM,eAAe,MAAA,CAAO;AAC5B,IAAM,eAAe,MAAA,CAAO;AAC5B,IAAM,sBAAsB,MAAA,CAAO;AACnC,IAAM,0BAA0B,MAAA,CAAO;AACvC,IAAM,iBAAiB,MAAA,CAAO;AAC9B,IAAM,qBAAqB,MAAA,CAAO;AAClC,IAAM,wBAAwB,MAAA,CAAO;AACrC,IAAM,mBAAmB,MAAA,CAAO;AAChC,IAAM,wBAAwB,MAAA,CAAO;AACrC,IAAM,eAAe,MAAA,CAAO;AAC5B,IAAM,iBAAiB,MAAA,CAAO;AAC9B,IAAM,qBAAqB,MAAA,CAAO;AAGlC,IAAM,UAAA,GAAa,KAAK,gBAAgB;AACxC,IAAM,YAAA,GAAe,KAAK,kBAAkB;AAC5C,IAAM,cAAA,GAAiB,KAAK,oBAAoB;AAChD,IAAM,aAAA,GAAgB,KAAK,mBAAmB;AAC9C,IAAM,aAAA,GAAgB,KAAK,mBAAmB;AAC9C,IAAM,QAAA,GAAW,KAAK,cAAc;AACpC,IAAM,YAAA,GAAe,KAAK,kBAAkB;AAC5C,IAAM,kBAAA,GAAqB,KAAK,wBAAwB;AACxD,IAAM,WAAA,GAAc,KAAK,iBAAiB;AAC1C,IAAM,SAAA,GAAY,KAAK,eAAe;AACtC,IAAM,aAAA,GAAgB,KAAK,mBAAmB;AAC9C,IAAM,WAAA,GAAc,KAAK,iBAAiB;AAC1C,IAAM,YAAA,GAAe,KAAK,kBAAkB;AAC5C,IAAM,cAAA,GAAiB,KAAK,oBAAoB;AAChD,IAAM,cAAA,GAAiB,KAAK,oBAAoB;AAChD,IAAM,gBAAA,GAAmB,KAAK,sBAAsB;AACpD,IAAM,UAAA,GAAa,KAAK,gBAAgB;AAGxC,IAAM,WAA4B,cAAA,CAAe,GAAA,CAAI,SAAO,MAAA,CAAO,GAAA,CAAI,IAAI,CAAC","file":"index.js","sourcesContent":["/**\n * Logger utility for tools package\n * Controls logging of API results based on environment variable\n */\n\ninterface LogOptions {\n toolName: string;\n input: unknown;\n result: unknown;\n executionTime?: number;\n}\n\n/**\n * Check if API result logging is enabled via environment variable\n * Defaults to false if not set\n */\nexport function isApiLoggingEnabled(): boolean {\n return process.env.FMP_TOOLS_LOG_API_RESULTS === 'true';\n}\n\n/**\n * Check if data-only logging is enabled via environment variable\n * Defaults to false if not set\n */\nexport function isDataOnlyLoggingEnabled(): boolean {\n return process.env.FMP_TOOLS_LOG_DATA_ONLY === 'true';\n}\n\n/**\n * Estimate token count for LLM context (JSON-optimized)\n * JSON has many structural characters that count as single tokens\n */\nfunction estimateTokenCount(text: string): number {\n // Try to parse as JSON first for better estimation\n try {\n const parsed = JSON.parse(text);\n return estimateTokenCountForData(parsed);\n } catch {\n // Not JSON, use text-based estimation\n return estimateTokenCountForText(text);\n }\n}\n\n/**\n * Estimate tokens for parsed JSON data\n */\nfunction estimateTokenCountForData(data: unknown): number {\n if (data === null || data === undefined) {\n return 1; // null/undefined is typically 1 token\n }\n\n if (typeof data === 'string') {\n // Strings are typically tokenized by words/symbols\n // Financial data often has short strings like \"AAPL\", \"USD\", etc.\n return Math.ceil(data.length / 3); // More conservative for short strings\n }\n\n if (typeof data === 'number') {\n // Numbers are typically 1-2 tokens depending on size\n return data.toString().length > 10 ? 2 : 1;\n }\n\n if (typeof data === 'boolean') {\n return 1; // true/false are single tokens\n }\n\n if (Array.isArray(data)) {\n // Arrays: count structural tokens + content tokens\n let tokens = 2; // [ and ]\n for (const item of data) {\n tokens += estimateTokenCountForData(item);\n if (data.indexOf(item) < data.length - 1) {\n tokens += 1; // comma separator\n }\n }\n return tokens;\n }\n\n if (typeof data === 'object') {\n // Objects: count structural tokens + key-value pairs\n let tokens = 2; // { and }\n const keys = Object.keys(data);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = (data as Record<string, unknown>)[key];\n\n // Key (quoted string)\n tokens += Math.ceil(key.length / 3);\n tokens += 2; // quotes around key\n\n // Colon separator\n tokens += 1;\n\n // Value\n tokens += estimateTokenCountForData(value);\n\n // Comma separator (except for last item)\n if (i < keys.length - 1) {\n tokens += 1;\n }\n }\n return tokens;\n }\n\n return 1; // fallback\n}\n\n/**\n * Estimate tokens for plain text (non-JSON)\n */\nfunction estimateTokenCountForText(text: string): number {\n // For plain text, use a more conservative estimate\n // Consider that financial data often has numbers, symbols, and abbreviations\n const words = text.split(/\\s+/).filter(word => word.length > 0);\n let tokens = 0;\n\n for (const word of words) {\n if (/^\\d+$/.test(word)) {\n // Pure numbers are typically 1-2 tokens\n tokens += word.length > 8 ? 2 : 1;\n } else if (/^[A-Z]+$/.test(word)) {\n // All caps (like stock symbols) are often single tokens\n tokens += 1;\n } else if (/^\\$[\\d,]+\\.?\\d*$/.test(word)) {\n // Currency amounts are typically 2-3 tokens\n tokens += 3;\n } else {\n // Regular words: roughly 3-4 characters per token\n tokens += Math.ceil(word.length / 3.5);\n }\n }\n\n return tokens;\n}\n\n/**\n * Get simple metadata about the result for LLM context\n */\nfunction getResultInfo(result: unknown): string {\n if (result === null || result === undefined) {\n return 'null/undefined';\n }\n\n if (typeof result === 'string') {\n const tokenCount = estimateTokenCount(result);\n try {\n const parsed = JSON.parse(result);\n if (Array.isArray(parsed)) {\n return `JSON string (array of ${parsed.length} items, ~${tokenCount} tokens)`;\n }\n } catch {\n // Not JSON\n }\n return `string (${result.length} chars, ~${tokenCount} tokens)`;\n }\n\n if (Array.isArray(result)) {\n const jsonStr = JSON.stringify(result);\n const tokenCount = estimateTokenCount(jsonStr);\n return `array (${result.length} items, ~${tokenCount} tokens)`;\n }\n\n if (typeof result === 'object') {\n const jsonStr = JSON.stringify(result);\n const tokenCount = estimateTokenCount(jsonStr);\n return `object (~${tokenCount} tokens)`;\n }\n\n return typeof result;\n}\n\n/**\n * Log API tool execution details when enabled\n */\nexport function logApiExecution(options: LogOptions): void {\n if (!isApiLoggingEnabled()) {\n return;\n }\n\n const { toolName, input, result, executionTime } = options;\n\n console.log('\\n' + '='.repeat(80));\n console.log(`šŸ”§ FMP Tool Execution: ${toolName}`);\n console.log('='.repeat(80));\n\n console.log('\\nšŸ“„ Input:');\n console.log(JSON.stringify(input, null, 2));\n\n const resultInfo = getResultInfo(result);\n\n console.log(`šŸ”§ ${toolName}: ${resultInfo}`);\n\n if (executionTime !== undefined) {\n console.log(`\\nā±ļø Execution Time: ${executionTime}ms`);\n }\n\n console.log('='.repeat(80) + '\\n');\n}\n\n/**\n * Log data-only information for LLM context (when enabled)\n */\nexport function logDataOnly(options: LogOptions): void {\n if (!isDataOnlyLoggingEnabled()) {\n return;\n }\n\n const { result } = options;\n\n console.log('\\nšŸ“¤ Result:');\n if (typeof result === 'string') {\n try {\n // Try to parse and pretty-print if it's JSON\n const parsed = JSON.parse(result);\n console.log(JSON.stringify(parsed, null, 2));\n } catch {\n // If not JSON, log as-is\n console.log(result);\n }\n } else {\n console.log(JSON.stringify(result, null, 2));\n }\n\n console.log('='.repeat(80) + '\\n');\n}\n\n/**\n * Log API tool execution with timing\n */\nexport async function logApiExecutionWithTiming<T>(\n toolName: string,\n input: unknown,\n executeFn: () => Promise<T>,\n): Promise<T> {\n const startTime = Date.now();\n\n try {\n const result = await executeFn();\n const executionTime = Date.now() - startTime;\n\n logApiExecution({\n toolName,\n input,\n result,\n executionTime,\n });\n\n // Also log data-only info if enabled\n logDataOnly({\n toolName,\n input,\n result,\n executionTime,\n });\n\n return result;\n } catch (error) {\n const executionTime = Date.now() - startTime;\n\n // Log error case as well\n if (isApiLoggingEnabled()) {\n console.log('\\n' + '='.repeat(80));\n console.log(`āŒ FMP Tool Execution Error: ${toolName}`);\n console.log('='.repeat(80));\n console.log('\\nšŸ“„ Input:');\n console.log(JSON.stringify(input, null, 2));\n console.log('\\nāŒ Error:');\n console.log(error instanceof Error ? error.message : String(error));\n console.log(`\\nā±ļø Execution Time: ${executionTime}ms`);\n console.log('='.repeat(80) + '\\n');\n }\n\n throw error;\n }\n}\n","import type { APIResponse, FMPErrorType } from 'fmp-node-api';\n\n/**\n * Format an `fmp-node-api` response into the string an AI tool returns to the model.\n *\n * On success, returns the data as pretty JSON (or a clear \"no data\" note when the\n * payload is empty). On failure, returns a structured error object — including the\n * classified `type` (e.g. `plan-restricted`, `rate-limit`, `auth`) — so the model\n * can explain *why* the call failed instead of receiving a bare `null`.\n */\nexport function toToolResponse(res: APIResponse<unknown>): string {\n // Only an explicit failure surfaces an error; the client always sets `success`.\n if (res.success === false) {\n return JSON.stringify({\n error: true,\n type: res.errorType ?? 'unknown',\n message: res.error ?? 'The request failed.',\n status: res.status,\n });\n }\n\n if (isEmpty(res.data)) {\n return JSON.stringify({ data: [], note: 'No data was returned for this request.' });\n }\n return JSON.stringify(res.data, null, 2);\n}\n\n/**\n * Format a *thrown* error into the same structured shape `toToolResponse` uses.\n *\n * Some failures throw instead of returning an `APIResponse` — most notably a\n * missing/invalid `FMP_API_KEY`, which throws from the `FMP` constructor before\n * any request is made. Catching these at the tool boundary lets the model relay\n * the real reason instead of receiving a bare exception.\n */\nexport function toToolError(error: unknown): string {\n const message = error instanceof Error ? error.message : String(error);\n let type: FMPErrorType = 'unknown';\n if (/api[\\s_-]?key/i.test(message)) {\n type = 'auth';\n }\n return JSON.stringify({ error: true, type, message, status: 0 });\n}\n\nfunction isEmpty(data: unknown): boolean {\n if (data == null) return true;\n if (Array.isArray(data)) return data.length === 0;\n if (typeof data === 'object') return Object.keys(data as object).length === 0;\n return false;\n}\n","import { z } from 'zod';\nimport { tool } from '@openai/agents';\nimport { logApiExecutionWithTiming } from './logger';\nimport { toToolError } from './format-response';\n\nexport interface OpenAIToolConfig<T extends z.ZodObject<any>> {\n name: string;\n description: string;\n inputSchema: T;\n execute: (args: z.infer<T>) => Promise<string>;\n}\n\nexport function createOpenAITool<T extends z.ZodObject<any>>(config: OpenAIToolConfig<T>) {\n const { name, description, inputSchema, execute } = config;\n\n // @openai/agents derives the JSON schema from the Zod schema and validates\n // input against it before invoking execute. The cast widens our generic T to\n // the SDK's ZodObjectLike `parameters` type (runtime value is the real schema).\n // We also parse here so Zod defaults/coercion are applied consistently before\n // execute, regardless of whether the caller pre-validated.\n return tool({\n name,\n description,\n parameters: inputSchema as z.ZodObject<any>,\n execute: async (input: unknown) => {\n try {\n const args = inputSchema.parse(input) as z.infer<T>;\n return await logApiExecutionWithTiming(name, args, () => execute(args));\n } catch (error) {\n // Never throw out of a tool — return a structured error the model can\n // relay (e.g. a missing FMP_API_KEY, which throws from `new FMP()`).\n return toToolError(error);\n }\n },\n });\n}\n","/**\n * Internal FMP API client used by the tools.\n *\n * The client is memoized so tools reuse a single `FMP` instance instead of\n * constructing one (and re-validating the API key) on every tool call. By\n * default it reads the `FMP_API_KEY` environment variable; consumers can call\n * `configureFMPClient(...)` once at startup to provide a key/timeout explicitly.\n */\nimport { FMP, type FMPConfig } from 'fmp-node-api';\n\nlet cached: FMP | undefined;\nlet configured: FMPConfig | undefined;\n\n/**\n * Configure the FMP client used by all tools. Optional — by default the client\n * reads the `FMP_API_KEY` environment variable. Call once before using the tools.\n */\nexport function configureFMPClient(config: FMPConfig): void {\n configured = config;\n cached = undefined; // rebuilt lazily on next use\n}\n\n/** Reset the memoized client and configuration (mainly for tests / serverless reuse). */\nexport function resetFMPClient(): void {\n cached = undefined;\n configured = undefined;\n}\n\n/** Get the memoized FMP client instance (internal use by tools). */\nexport function getFMPClient(): FMP {\n if (!cached) {\n cached = new FMP(configured);\n }\n return cached;\n}\n","import { z } from 'zod';\n\n/**\n * Provider-agnostic definition of an FMP tool: its name, model-facing description,\n * Zod input schema, and the execute body (which returns the string the model receives,\n * already run through `toToolResponse`).\n *\n * Per-provider adapters (`createTool` for Vercel AI, `createOpenAITool` for OpenAI Agents)\n * turn a definition into an SDK-specific tool. Defining each tool once here keeps the\n * providers in sync and makes adding a new provider a single adapter file.\n */\nexport interface FMPToolDefinition {\n name: string;\n description: string;\n inputSchema: z.ZodObject<any>;\n execute: (args: any) => Promise<string>;\n}\n\n/**\n * Identity helper that preserves per-tool inference of `execute`'s args from the schema\n * at the definition site, while widening the result to `FMPToolDefinition` so definitions\n * can be collected into a single array.\n */\nexport function defineTool<T extends z.ZodObject<any>>(def: {\n name: string;\n description: string;\n inputSchema: T;\n execute: (args: z.infer<T>) => Promise<string>;\n}): FMPToolDefinition {\n return def as FMPToolDefinition;\n}\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\nimport type { APIResponse } from 'fmp-node-api';\n\nexport const quoteDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getStockQuote',\n description:\n 'Get the real-time stock quote for a company including price, volume, and market data',\n inputSchema: z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The symbol of the company to get the stock quote for'),\n }),\n execute: async ({ symbol }) => toToolResponse(await getFMPClient().quote.getQuote(symbol)),\n }),\n defineTool({\n name: 'getHistoricalPrice',\n description:\n 'Get historical daily prices (open/high/low/close/volume) for a symbol. Returns the most recent `limit` days.',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('The stock/ETF symbol (e.g., AAPL)'),\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n limit: z\n .number()\n .int()\n .positive()\n .default(30)\n .describe('Max number of most-recent days to return (default 30)'),\n }),\n execute: async ({ symbol, from, to, limit = 30 }) => {\n const res = await getFMPClient().quote.getHistoricalPrice({\n symbol,\n from: from ?? undefined,\n to: to ?? undefined,\n });\n // Response is { symbol, historical: [...] } (newest first); cap to `limit`.\n const data = res.data as { historical?: unknown[] } | null;\n if (res.success && data && Array.isArray(data.historical)) {\n return toToolResponse({\n ...res,\n data: { ...data, historical: data.historical.slice(0, limit) },\n } as APIResponse<unknown>);\n }\n return toToolResponse(res);\n },\n }),\n defineTool({\n name: 'getIntraday',\n description:\n 'Get intraday price bars for a symbol at a given interval. Returns the most recent `limit` bars.',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('The stock/ETF symbol (e.g., AAPL)'),\n interval: z\n .enum(['1min', '5min', '15min', '30min', '1hour', '4hour'])\n .default('5min')\n .describe('Bar interval'),\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n limit: z\n .number()\n .int()\n .positive()\n .default(50)\n .describe('Max number of most-recent bars to return (default 50)'),\n }),\n execute: async ({ symbol, interval = '5min', from, to, limit = 50 }) => {\n const res = await getFMPClient().quote.getIntraday({\n symbol,\n interval,\n from: from ?? undefined,\n to: to ?? undefined,\n });\n if (res.success && Array.isArray(res.data)) {\n return toToolResponse({ ...res, data: res.data.slice(0, limit) } as APIResponse<unknown>);\n }\n return toToolResponse(res);\n },\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nconst symbolSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n});\n\nexport const companyDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getCompanyProfile',\n description: 'Get the company profile for a company',\n inputSchema: symbolSchema,\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().company.getCompanyProfile(symbol)),\n }),\n defineTool({\n name: 'getCompanySharesFloat',\n description: 'Get the company shares float',\n inputSchema: symbolSchema,\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().company.getSharesFloat(symbol)),\n }),\n defineTool({\n name: 'getCompanyExecutiveCompensation',\n description: 'Get the company executive compensation',\n inputSchema: symbolSchema,\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().company.getExecutiveCompensation(symbol)),\n }),\n defineTool({\n name: 'getStockPeers',\n description: 'Get a list of peer companies (with price and market cap) for a company',\n inputSchema: symbolSchema,\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().company.getStockPeers(symbol)),\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nconst period = z\n .enum(['annual', 'quarter'])\n .default('annual')\n .describe('The period type (annual or quarter)');\n\nconst symbol = (what: string) => z.string().min(1).describe(`The stock symbol to get ${what} for`);\n\nconst limit = z.number().default(5).describe('The number of periods to retrieve');\n\n/** Build a standard statement tool: symbol + period + limit -> fmp.financial[method]. */\nconst statementTool = (\n name: string,\n description: string,\n what: string,\n call: (args: { symbol: string; period: 'annual' | 'quarter'; limit: number }) => Promise<any>,\n) =>\n defineTool({\n name,\n description,\n inputSchema: z.object({ symbol: symbol(what), period, limit }),\n execute: async ({ symbol, period, limit }) =>\n toToolResponse(await call({ symbol, period, limit })),\n });\n\nexport const financialDefinitions: FMPToolDefinition[] = [\n statementTool(\n 'getBalanceSheet',\n 'Get balance sheet for a company showing assets, liabilities, and equity',\n 'balance sheet',\n args => getFMPClient().financial.getBalanceSheet(args),\n ),\n statementTool(\n 'getIncomeStatement',\n 'Get income statement for a company showing revenue, expenses, and profit',\n 'income statement',\n args => getFMPClient().financial.getIncomeStatement(args),\n ),\n statementTool(\n 'getCashFlowStatement',\n 'Get cash flow statement for a company showing operating, investing, and financing cash flows',\n 'cash flow statement',\n args => getFMPClient().financial.getCashFlowStatement(args),\n ),\n statementTool('getKeyMetrics', 'Get key metrics for a company', 'key metrics', args =>\n getFMPClient().financial.getKeyMetrics(args),\n ),\n statementTool(\n 'getFinancialRatios',\n 'Get financial ratios for a company including profitability, liquidity, and efficiency metrics',\n 'financial ratios',\n args => getFMPClient().financial.getFinancialRatios(args),\n ),\n statementTool(\n 'getEnterpriseValue',\n 'Get enterprise value for a company',\n 'enterprise value',\n args => getFMPClient().financial.getEnterpriseValue(args),\n ),\n statementTool('getCashflowGrowth', 'Get cashflow growth for a company', 'cashflow growth', args =>\n getFMPClient().financial.getCashflowGrowth(args),\n ),\n statementTool('getIncomeGrowth', 'Get income growth for a company', 'income growth', args =>\n getFMPClient().financial.getIncomeGrowth(args),\n ),\n statementTool(\n 'getBalanceSheetGrowth',\n 'Get balance sheet growth for a company',\n 'balance sheet growth',\n args => getFMPClient().financial.getBalanceSheetGrowth(args),\n ),\n statementTool(\n 'getFinancialGrowth',\n 'Get financial growth for a company',\n 'financial growth',\n args => getFMPClient().financial.getFinancialGrowth(args),\n ),\n defineTool({\n name: 'getEarningsHistorical',\n description: 'Get earnings historical for a company',\n inputSchema: z.object({\n symbol: symbol('earnings historical'),\n limit: z.number().default(10).describe('The number of periods to retrieve'),\n }),\n execute: async ({ symbol, limit }) =>\n toToolResponse(await getFMPClient().financial.getEarningsHistorical({ symbol, limit })),\n }),\n defineTool({\n name: 'getFinancialScores',\n description:\n 'Get financial health scores for a company (Altman Z-Score bankruptcy risk + Piotroski fundamental-strength score)',\n inputSchema: z.object({ symbol: symbol('financial scores') }),\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().financial.getFinancialScores({ symbol })),\n }),\n defineTool({\n name: 'getKeyMetricsTTM',\n description:\n 'Get current trailing-twelve-month (TTM) key metrics for a company (one snapshot row)',\n inputSchema: z.object({ symbol: symbol('TTM key metrics') }),\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().financial.getKeyMetricsTTM({ symbol })),\n }),\n defineTool({\n name: 'getFinancialRatiosTTM',\n description:\n 'Get current trailing-twelve-month (TTM) financial ratios for a company (margins, returns, liquidity)',\n inputSchema: z.object({ symbol: symbol('TTM financial ratios') }),\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().financial.getFinancialRatiosTTM({ symbol })),\n }),\n defineTool({\n name: 'getRevenueProductSegmentation',\n description: 'Get revenue broken down by product line for a company',\n inputSchema: z.object({ symbol: symbol('product revenue segmentation'), period }),\n execute: async ({ symbol, period }) =>\n toToolResponse(\n await getFMPClient().financial.getRevenueProductSegmentation({ symbol, period }),\n ),\n }),\n defineTool({\n name: 'getRevenueGeographicSegmentation',\n description: 'Get revenue broken down by geographic region for a company',\n inputSchema: z.object({ symbol: symbol('geographic revenue segmentation'), period }),\n execute: async ({ symbol, period }) =>\n toToolResponse(\n await getFMPClient().financial.getRevenueGeographicSegmentation({ symbol, period }),\n ),\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nconst dateRangeSchema = z.object({\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n});\n\nexport const calendarDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getEarningsCalendar',\n description: 'Get earnings calendar showing upcoming and recent earnings announcements',\n inputSchema: dateRangeSchema,\n execute: async ({ from, to }) =>\n toToolResponse(\n await getFMPClient().calendar.getEarningsCalendar({\n from: from ?? undefined,\n to: to ?? undefined,\n }),\n ),\n }),\n defineTool({\n name: 'getEconomicCalendar',\n description: 'Get economic calendar showing upcoming and recent economic events and indicators',\n inputSchema: dateRangeSchema,\n execute: async ({ from, to }) =>\n toToolResponse(\n await getFMPClient().calendar.getEconomicsCalendar({\n from: from ?? undefined,\n to: to ?? undefined,\n }),\n ),\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nconst economicIndicatorNames = [\n 'GDP',\n 'realGDP',\n 'nominalPotentialGDP',\n 'realGDPPerCapita',\n 'federalFunds',\n 'CPI',\n 'inflationRate',\n 'inflation',\n 'retailSales',\n 'consumerSentiment',\n 'durableGoods',\n 'unemploymentRate',\n 'totalNonfarmPayroll',\n 'initialClaims',\n 'industrialProductionTotalIndex',\n 'newPrivatelyOwnedHousingUnitsStartedTotalUnits',\n 'totalVehicleSales',\n 'retailMoneyFunds',\n 'smoothedUSRecessionProbabilities',\n '3MonthOr90DayRatesAndYieldsCertificatesOfDeposit',\n 'commercialBankInterestRateOnCreditCardPlansAllAccounts',\n '30YearFixedRateMortgageAverage',\n '15YearFixedRateMortgageAverage',\n] as const;\n\nexport const economicDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getTreasuryRates',\n description: 'Get treasury rates for different maturities over time',\n inputSchema: z.object({\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n }),\n execute: async ({ from, to }) =>\n toToolResponse(\n await getFMPClient().economic.getTreasuryRates({\n from: from ?? undefined,\n to: to ?? undefined,\n }),\n ),\n }),\n defineTool({\n name: 'getEconomicIndicators',\n description: 'Get economic indicators like GDP, unemployment rate, inflation, etc.',\n inputSchema: z.object({\n name: z.enum(economicIndicatorNames).describe('The name of the economic indicator'),\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n }),\n execute: async ({ name, from, to }) =>\n toToolResponse(\n await getFMPClient().economic.getEconomicIndicators({\n name,\n from: from ?? undefined,\n to: to ?? undefined,\n }),\n ),\n }),\n];\n","import { z } from 'zod';\r\nimport { getFMPClient } from '@/client';\r\nimport { toToolResponse } from '@/utils/format-response';\r\nimport { defineTool, type FMPToolDefinition } from './types';\r\n\r\nexport const etfDefinitions: FMPToolDefinition[] = [\r\n defineTool({\r\n name: 'getETFHoldings',\r\n description:\r\n 'Get ETF holdings for a specific ETF symbol, showing the underlying assets and their weights',\r\n inputSchema: z.object({\r\n symbol: z\r\n .string()\r\n .min(1, 'ETF symbol is required')\r\n .describe('ETF symbol (e.g., SPY, QQQ, VTI)'),\r\n date: z\r\n .string()\r\n .optional()\r\n .nullable()\r\n .describe('Date for holdings in YYYY-MM-DD format (optional)'),\r\n }),\r\n execute: async ({ symbol, date }) => {\r\n // `date` is optional; the holdings params type treats it as required, so widen.\r\n const params: any = { symbol };\r\n if (date) {\r\n params.date = date;\r\n }\r\n return toToolResponse(await getFMPClient().etf.getHoldings(params));\r\n },\r\n }),\r\n defineTool({\r\n name: 'getETFProfile',\r\n description: 'Get ETF profile information including fund details, expense ratio, and key metrics',\r\n inputSchema: z.object({\r\n symbol: z\r\n .string()\r\n .min(1, 'ETF symbol is required')\r\n .describe('ETF symbol (e.g., SPY, QQQ, VTI)'),\r\n }),\r\n execute: async ({ symbol }) => toToolResponse(await getFMPClient().etf.getProfile(symbol)),\r\n }),\r\n];\r\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nexport const insiderDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getInsiderTrading',\n description:\n 'Get insider trading data for a specific stock symbol showing buy/sell transactions by company insiders',\n inputSchema: z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('Stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n page: z\n .number()\n .int()\n .min(0)\n .default(0)\n .describe('Page number for pagination (optional, defaults to 0)'),\n }),\n execute: async ({ symbol, page }) =>\n toToolResponse(await getFMPClient().insider.getInsiderTradesBySymbol(symbol, page)),\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nexport const institutionalDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getInstitutionalHolders',\n description:\n 'Get institutional holders for a specific stock symbol showing which institutions own shares and their holdings',\n inputSchema: z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('Stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n }),\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().institutional.getInstitutionalHolders({ symbol })),\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nconst empty = z.object({});\n\nexport const marketDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getMarketPerformance',\n description: 'Get overall market performance data including major indices performance',\n inputSchema: empty,\n execute: async () => toToolResponse(await getFMPClient().market.getMarketPerformance()),\n }),\n defineTool({\n name: 'getSectorPerformance',\n description: 'Get sector performance data showing how different market sectors are performing',\n inputSchema: empty,\n execute: async () => toToolResponse(await getFMPClient().market.getSectorPerformance()),\n }),\n defineTool({\n name: 'getGainers',\n description: 'Get top gaining stocks showing the best performing stocks of the day',\n inputSchema: empty,\n execute: async () => toToolResponse(await getFMPClient().market.getGainers()),\n }),\n defineTool({\n name: 'getLosers',\n description: 'Get top losing stocks showing the worst performing stocks of the day',\n inputSchema: empty,\n execute: async () => toToolResponse(await getFMPClient().market.getLosers()),\n }),\n defineTool({\n name: 'getMostActive',\n description: 'Get most active stocks showing stocks with the highest trading volume',\n inputSchema: empty,\n execute: async () => toToolResponse(await getFMPClient().market.getMostActive()),\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nexport const newsDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getStockNews',\n description: 'Get the latest general stock market news articles',\n inputSchema: z.object({\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n limit: z\n .number()\n .int()\n .positive()\n .default(20)\n .describe('Max number of articles to return (default 20)'),\n }),\n execute: async ({ from, to, limit = 20 }) =>\n toToolResponse(\n await getFMPClient().news.getStockNews({\n from: from ?? undefined,\n to: to ?? undefined,\n limit,\n }),\n ),\n }),\n defineTool({\n name: 'getStockNewsBySymbol',\n description: 'Get the latest news articles for one or more specific stock symbols',\n inputSchema: z.object({\n symbols: z\n .array(z.string().min(1))\n .min(1)\n .describe('Stock symbols to get news for (e.g., [\"AAPL\", \"MSFT\"])'),\n from: z.string().optional().nullable().describe('Start date in YYYY-MM-DD format (optional)'),\n to: z.string().optional().nullable().describe('End date in YYYY-MM-DD format (optional)'),\n limit: z\n .number()\n .int()\n .positive()\n .default(20)\n .describe('Max number of articles to return (default 20)'),\n }),\n execute: async ({ symbols, from, to, limit = 20 }) =>\n toToolResponse(\n await getFMPClient().news.getStockNewsBySymbol({\n symbols,\n from: from ?? undefined,\n to: to ?? undefined,\n limit,\n }),\n ),\n }),\n];\n","import { z } from 'zod';\r\nimport type { ScreenerParams } from 'fmp-node-api';\r\nimport { getFMPClient } from '@/client';\r\nimport { toToolResponse } from '@/utils/format-response';\r\nimport { defineTool, type FMPToolDefinition } from './types';\r\n\r\nexport const screenerDefinitions: FMPToolDefinition[] = [\r\n defineTool({\r\n name: 'screenStocks',\r\n description:\r\n 'Screen for stocks matching financial criteria (market cap, price, sector, exchange, etc.). Returns matching companies.',\r\n inputSchema: z.object({\r\n marketCapMoreThan: z.number().optional().nullable().describe('Minimum market capitalization'),\r\n marketCapLowerThan: z.number().optional().nullable().describe('Maximum market capitalization'),\r\n priceMoreThan: z.number().optional().nullable().describe('Minimum stock price'),\r\n priceLowerThan: z.number().optional().nullable().describe('Maximum stock price'),\r\n sector: z.string().optional().nullable().describe('Sector filter (e.g., \"Technology\")'),\r\n industry: z.string().optional().nullable().describe('Industry filter'),\r\n exchange: z.string().optional().nullable().describe('Exchange filter (e.g., \"NASDAQ\")'),\r\n country: z.string().optional().nullable().describe('Country filter (e.g., \"US\")'),\r\n isEtf: z.boolean().optional().nullable().describe('Restrict to ETFs'),\r\n isActivelyTrading: z.boolean().optional().nullable().describe('Restrict to actively trading'),\r\n limit: z\r\n .number()\r\n .int()\r\n .positive()\r\n .default(50)\r\n .describe('Max number of results to return (default 50)'),\r\n }),\r\n execute: async ({ limit = 50, ...filters }) => {\r\n // Drop null/undefined so they aren't sent as query params.\r\n const params: Record<string, unknown> = { limit };\r\n for (const [key, value] of Object.entries(filters)) {\r\n if (value !== null && value !== undefined) params[key] = value;\r\n }\r\n return toToolResponse(await getFMPClient().screener.getScreener(params as ScreenerParams));\r\n },\r\n }),\r\n];\r\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nexport const searchDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'searchSymbol',\n description:\n 'Search for a ticker symbol by company name or partial ticker (e.g., resolve \"Apple\" to \"AAPL\")',\n inputSchema: z.object({\n query: z.string().min(1).describe('Company name or ticker to search for'),\n limit: z\n .number()\n .int()\n .positive()\n .default(10)\n .describe('Max number of results to return (default 10)'),\n exchange: z\n .string()\n .optional()\n .nullable()\n .describe('Restrict to a specific exchange (optional, e.g., \"NASDAQ\")'),\n }),\n execute: async ({ query, limit = 10, exchange }) =>\n toToolResponse(\n await getFMPClient().search.search({ query, limit, exchange: exchange ?? undefined }),\n ),\n }),\n];\n","import { z } from 'zod';\nimport type { APIResponse } from 'fmp-node-api';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nexport const analystDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getAnalystEstimates',\n description:\n 'Get analyst estimates (revenue, EBITDA, net income, EPS) for a company, by period',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('The stock symbol (e.g., AAPL)'),\n period: z\n .enum(['annual', 'quarter'])\n .default('annual')\n .describe('The period type (annual or quarter)'),\n limit: z\n .number()\n .int()\n .positive()\n .default(10)\n .describe('Max number of periods to return (default 10)'),\n }),\n execute: async ({ symbol, period = 'annual', limit = 10 }) =>\n toToolResponse(await getFMPClient().analyst.getEstimates({ symbol, period, limit })),\n }),\n defineTool({\n name: 'getPriceTargetConsensus',\n description:\n 'Get the analyst price-target consensus (high, low, consensus, median) for a company',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('The stock symbol (e.g., AAPL)'),\n }),\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().analyst.getPriceTargetConsensus({ symbol })),\n }),\n defineTool({\n name: 'getStockGrades',\n description:\n 'Get recent analyst grades (upgrades/downgrades) for a company (most recent `limit`)',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('The stock symbol (e.g., AAPL)'),\n limit: z\n .number()\n .int()\n .positive()\n .default(20)\n .describe('Max number of grade entries to return (default 20)'),\n }),\n execute: async ({ symbol, limit = 20 }) => {\n const res = await getFMPClient().analyst.getGrades({ symbol });\n if (res.success && Array.isArray(res.data)) {\n return toToolResponse({ ...res, data: res.data.slice(0, limit) } as APIResponse<unknown>);\n }\n return toToolResponse(res);\n },\n }),\n defineTool({\n name: 'getGradesConsensus',\n description:\n 'Get the analyst rating consensus for a company (counts of strongBuy/buy/hold/sell/strongSell + overall consensus)',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('The stock symbol (e.g., AAPL)'),\n }),\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().analyst.getGradesConsensus({ symbol })),\n }),\n];\n","import { z } from 'zod';\r\nimport { getFMPClient } from '@/client';\r\nimport { toToolResponse } from '@/utils/format-response';\r\nimport { defineTool, type FMPToolDefinition } from './types';\r\n\r\nconst symbolSchema = z.object({\r\n symbol: z.string().min(1).describe('The stock symbol (e.g., AAPL)'),\r\n});\r\n\r\nexport const valuationDefinitions: FMPToolDefinition[] = [\r\n defineTool({\r\n name: 'getDiscountedCashFlow',\r\n description:\r\n \"Get the discounted-cash-flow (DCF) fair-value estimate vs. the current price for a company\",\r\n inputSchema: symbolSchema,\r\n execute: async ({ symbol }) =>\r\n toToolResponse(await getFMPClient().valuation.getDiscountedCashFlow({ symbol })),\r\n }),\r\n defineTool({\r\n name: 'getCompanyRating',\r\n description: \"Get FMP's current rating/score snapshot for a company\",\r\n inputSchema: symbolSchema,\r\n execute: async ({ symbol }) =>\r\n toToolResponse(await getFMPClient().valuation.getRatingSnapshot({ symbol })),\r\n }),\r\n];\r\n","import { z } from 'zod';\nimport type { APIResponse } from 'fmp-node-api';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nexport const technicalDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getTechnicalIndicator',\n description:\n 'Get a technical indicator series (SMA, EMA, RSI, etc.) for a symbol at a given timeframe. Returns the most recent `limit` bars.',\n inputSchema: z.object({\n symbol: z.string().min(1).describe('The stock/ETF symbol (e.g., AAPL)'),\n type: z\n .enum(['sma', 'ema', 'wma', 'dema', 'tema', 'rsi', 'standardDeviation', 'williams', 'adx'])\n .describe('The indicator type'),\n periodLength: z\n .number()\n .int()\n .positive()\n .default(10)\n .describe('Lookback period for the indicator (e.g. 14 for a 14-day RSI)'),\n timeframe: z\n .enum(['1min', '5min', '15min', '30min', '1hour', '4hour', '1day', '1week', '1month'])\n .default('1day')\n .describe('Bar timeframe'),\n limit: z\n .number()\n .int()\n .positive()\n .default(50)\n .describe('Max number of most-recent bars to return (default 50)'),\n }),\n execute: async ({ symbol, type, periodLength = 10, timeframe = '1day', limit = 50 }) => {\n const res = await getFMPClient().technical.getTechnicalIndicator({\n symbol,\n type,\n periodLength,\n timeframe,\n });\n if (res.success && Array.isArray(res.data)) {\n return toToolResponse({ ...res, data: res.data.slice(0, limit) } as APIResponse<unknown>);\n }\n return toToolResponse(res);\n },\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nconst symbolSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('Stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n});\n\nconst rssFeedSchema = z.object({\n page: z\n .number()\n .int()\n .min(0)\n .default(0)\n .describe('Page number for pagination (optional, defaults to 0)'),\n});\n\nexport const senateHouseDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getSenateTrading',\n description: 'Get senate trading data for a specific stock symbol showing senator transactions',\n inputSchema: symbolSchema,\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().senateHouse.getSenateTrading({ symbol })),\n }),\n defineTool({\n name: 'getHouseTrading',\n description:\n 'Get house trading data for a specific stock symbol showing representative transactions',\n inputSchema: symbolSchema,\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().senateHouse.getHouseTrading({ symbol })),\n }),\n defineTool({\n name: 'getSenateTradingByName',\n description:\n 'Get senate trading data for a specific senator by name showing their trading activity',\n inputSchema: z.object({\n name: z\n .string()\n .min(1, 'Name is required')\n .describe('The name of the senator to get trading data for'),\n }),\n execute: async ({ name }) =>\n toToolResponse(await getFMPClient().senateHouse.getSenateTradingByName({ name })),\n }),\n defineTool({\n name: 'getHouseTradingByName',\n description:\n 'Get house trading data for a specific representative by name showing their trading activity',\n inputSchema: z.object({\n name: z\n .string()\n .min(1, 'Name is required')\n .describe('The name of the representative to get trading data for'),\n }),\n execute: async ({ name }) =>\n toToolResponse(await getFMPClient().senateHouse.getHouseTradingByName({ name })),\n }),\n defineTool({\n name: 'getSenateTradingRSSFeed',\n description:\n 'Get senate trading data through RSS feed with pagination showing recent senate transactions',\n inputSchema: rssFeedSchema,\n // JS default mirrors the Zod default for the Vercel adapter, which (unlike the\n // OpenAI adapter) does not parse input before calling execute.\n execute: async ({ page = 0 }) =>\n toToolResponse(await getFMPClient().senateHouse.getSenateTradingRSSFeed({ page })),\n }),\n defineTool({\n name: 'getHouseTradingRSSFeed',\n description:\n 'Get house trading data through RSS feed with pagination showing recent house transactions',\n inputSchema: rssFeedSchema,\n // JS default mirrors the Zod default for the Vercel adapter, which (unlike the\n // OpenAI adapter) does not parse input before calling execute.\n execute: async ({ page = 0 }) =>\n toToolResponse(await getFMPClient().senateHouse.getHouseTradingRSSFeed({ page })),\n }),\n];\n","import { z } from 'zod';\nimport { getFMPClient } from '@/client';\nimport { toToolResponse } from '@/utils/format-response';\nimport { defineTool, type FMPToolDefinition } from './types';\n\nconst symbolSchema = z.object({\n symbol: z\n .string()\n .min(1, 'Stock symbol is required')\n .describe('The stock symbol (e.g., AAPL, MSFT, GOOGL)'),\n});\n\nexport const stockDefinitions: FMPToolDefinition[] = [\n defineTool({\n name: 'getMarketCap',\n description: 'Get market capitalization for a company showing current market value',\n inputSchema: symbolSchema,\n execute: async ({ symbol }) => toToolResponse(await getFMPClient().stock.getMarketCap(symbol)),\n }),\n defineTool({\n name: 'getStockSplits',\n description: 'Get stock splits history for a company showing all historical stock split events',\n inputSchema: symbolSchema,\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().stock.getStockSplits(symbol)),\n }),\n defineTool({\n name: 'getDividendHistory',\n description: 'Get dividend history for a company showing all historical dividend payments',\n inputSchema: symbolSchema,\n execute: async ({ symbol }) =>\n toToolResponse(await getFMPClient().stock.getDividendHistory(symbol)),\n }),\n];\n","import { quoteDefinitions } from './quote';\nimport { companyDefinitions } from './company';\nimport { financialDefinitions } from './financial';\nimport { calendarDefinitions } from './calendar';\nimport { economicDefinitions } from './economic';\nimport { etfDefinitions } from './etf';\nimport { insiderDefinitions } from './insider';\nimport { institutionalDefinitions } from './institutional';\nimport { marketDefinitions } from './market';\nimport { newsDefinitions } from './news';\nimport { screenerDefinitions } from './screener';\nimport { searchDefinitions } from './search';\nimport { analystDefinitions } from './analyst';\nimport { valuationDefinitions } from './valuation';\nimport { technicalDefinitions } from './technical';\nimport { senateHouseDefinitions } from './senate-house';\nimport { stockDefinitions } from './stock';\nimport type { FMPToolDefinition } from './types';\n\nexport * from './types';\n\nexport {\n quoteDefinitions,\n companyDefinitions,\n financialDefinitions,\n calendarDefinitions,\n economicDefinitions,\n etfDefinitions,\n insiderDefinitions,\n institutionalDefinitions,\n marketDefinitions,\n newsDefinitions,\n screenerDefinitions,\n searchDefinitions,\n analystDefinitions,\n valuationDefinitions,\n technicalDefinitions,\n senateHouseDefinitions,\n stockDefinitions,\n};\n\n/** Every tool definition, in a stable order shared by all providers. */\nexport const allDefinitions: FMPToolDefinition[] = [\n ...quoteDefinitions,\n ...companyDefinitions,\n ...financialDefinitions,\n ...calendarDefinitions,\n ...economicDefinitions,\n ...etfDefinitions,\n ...insiderDefinitions,\n ...institutionalDefinitions,\n ...marketDefinitions,\n ...newsDefinitions,\n ...screenerDefinitions,\n ...searchDefinitions,\n ...analystDefinitions,\n ...valuationDefinitions,\n ...technicalDefinitions,\n ...senateHouseDefinitions,\n ...stockDefinitions,\n];\n","import type { Tool } from '@openai/agents';\nimport { createOpenAITool } from '@/utils/openai-tool-wrapper';\n\n// Re-export client configuration helpers (optional; tools default to FMP_API_KEY).\nexport { configureFMPClient, resetFMPClient } from '@/client';\n\nimport {\n allDefinitions,\n quoteDefinitions,\n companyDefinitions,\n financialDefinitions,\n calendarDefinitions,\n economicDefinitions,\n etfDefinitions,\n insiderDefinitions,\n institutionalDefinitions,\n marketDefinitions,\n newsDefinitions,\n screenerDefinitions,\n searchDefinitions,\n analystDefinitions,\n valuationDefinitions,\n technicalDefinitions,\n senateHouseDefinitions,\n stockDefinitions,\n type FMPToolDefinition,\n} from '@/definitions';\n\n// One OpenAI Agents tool instance per definition, addressable by name. The same\n// instances are reused for the individual exports and the category arrays below.\nconst byName: Record<string, Tool<unknown>> = Object.fromEntries(\n allDefinitions.map(def => [def.name, createOpenAITool(def) as Tool<unknown>]),\n);\n\nconst pick = (defs: FMPToolDefinition[]): Tool<unknown>[] => defs.map(def => byName[def.name]);\n\n// Individual tools for direct import\nexport const getStockQuote = byName.getStockQuote;\nexport const getHistoricalPrice = byName.getHistoricalPrice;\nexport const getIntraday = byName.getIntraday;\nexport const getCompanyProfile = byName.getCompanyProfile;\nexport const getCompanySharesFloat = byName.getCompanySharesFloat;\nexport const getCompanyExecutiveCompensation = byName.getCompanyExecutiveCompensation;\nexport const getStockPeers = byName.getStockPeers;\nexport const getEarningsCalendar = byName.getEarningsCalendar;\nexport const getEconomicCalendar = byName.getEconomicCalendar;\nexport const getTreasuryRates = byName.getTreasuryRates;\nexport const getEconomicIndicators = byName.getEconomicIndicators;\nexport const getETFHoldings = byName.getETFHoldings;\nexport const getETFProfile = byName.getETFProfile;\nexport const getBalanceSheet = byName.getBalanceSheet;\nexport const getIncomeStatement = byName.getIncomeStatement;\nexport const getCashFlowStatement = byName.getCashFlowStatement;\nexport const getKeyMetrics = byName.getKeyMetrics;\nexport const getFinancialRatios = byName.getFinancialRatios;\nexport const getEnterpriseValue = byName.getEnterpriseValue;\nexport const getCashflowGrowth = byName.getCashflowGrowth;\nexport const getIncomeGrowth = byName.getIncomeGrowth;\nexport const getBalanceSheetGrowth = byName.getBalanceSheetGrowth;\nexport const getFinancialGrowth = byName.getFinancialGrowth;\nexport const getEarningsHistorical = byName.getEarningsHistorical;\nexport const getFinancialScores = byName.getFinancialScores;\nexport const getKeyMetricsTTM = byName.getKeyMetricsTTM;\nexport const getFinancialRatiosTTM = byName.getFinancialRatiosTTM;\nexport const getRevenueProductSegmentation = byName.getRevenueProductSegmentation;\nexport const getRevenueGeographicSegmentation = byName.getRevenueGeographicSegmentation;\nexport const getInsiderTrading = byName.getInsiderTrading;\nexport const getInstitutionalHolders = byName.getInstitutionalHolders;\nexport const getMarketPerformance = byName.getMarketPerformance;\nexport const getSectorPerformance = byName.getSectorPerformance;\nexport const getGainers = byName.getGainers;\nexport const getLosers = byName.getLosers;\nexport const getMostActive = byName.getMostActive;\nexport const getSenateTrading = byName.getSenateTrading;\nexport const getHouseTrading = byName.getHouseTrading;\nexport const getSenateTradingByName = byName.getSenateTradingByName;\nexport const getHouseTradingByName = byName.getHouseTradingByName;\nexport const getSenateTradingRSSFeed = byName.getSenateTradingRSSFeed;\nexport const getHouseTradingRSSFeed = byName.getHouseTradingRSSFeed;\nexport const getStockNews = byName.getStockNews;\nexport const getStockNewsBySymbol = byName.getStockNewsBySymbol;\nexport const screenStocks = byName.screenStocks;\nexport const searchSymbol = byName.searchSymbol;\nexport const getAnalystEstimates = byName.getAnalystEstimates;\nexport const getPriceTargetConsensus = byName.getPriceTargetConsensus;\nexport const getStockGrades = byName.getStockGrades;\nexport const getGradesConsensus = byName.getGradesConsensus;\nexport const getDiscountedCashFlow = byName.getDiscountedCashFlow;\nexport const getCompanyRating = byName.getCompanyRating;\nexport const getTechnicalIndicator = byName.getTechnicalIndicator;\nexport const getMarketCap = byName.getMarketCap;\nexport const getStockSplits = byName.getStockSplits;\nexport const getDividendHistory = byName.getDividendHistory;\n\n// Tool groups as arrays for OpenAI Agents\nexport const quoteTools = pick(quoteDefinitions);\nexport const companyTools = pick(companyDefinitions);\nexport const financialTools = pick(financialDefinitions);\nexport const calendarTools = pick(calendarDefinitions);\nexport const economicTools = pick(economicDefinitions);\nexport const etfTools = pick(etfDefinitions);\nexport const insiderTools = pick(insiderDefinitions);\nexport const institutionalTools = pick(institutionalDefinitions);\nexport const marketTools = pick(marketDefinitions);\nexport const newsTools = pick(newsDefinitions);\nexport const screenerTools = pick(screenerDefinitions);\nexport const searchTools = pick(searchDefinitions);\nexport const analystTools = pick(analystDefinitions);\nexport const valuationTools = pick(valuationDefinitions);\nexport const technicalTools = pick(technicalDefinitions);\nexport const senateHouseTools = pick(senateHouseDefinitions);\nexport const stockTools = pick(stockDefinitions);\n\n// Combine all tools into a single array\nexport const fmpTools: Tool<unknown>[] = allDefinitions.map(def => byName[def.name]);\n"]}
@@ -324,6 +324,12 @@ var companyDefinitions = [
324
324
  description: "Get the company executive compensation",
325
325
  inputSchema: symbolSchema,
326
326
  execute: async ({ symbol: symbol2 }) => toToolResponse(await getFMPClient().company.getExecutiveCompensation(symbol2))
327
+ }),
328
+ defineTool({
329
+ name: "getStockPeers",
330
+ description: "Get a list of peer companies (with price and market cap) for a company",
331
+ inputSchema: symbolSchema,
332
+ execute: async ({ symbol: symbol2 }) => toToolResponse(await getFMPClient().company.getStockPeers(symbol2))
327
333
  })
328
334
  ];
329
335
  var period = z.enum(["annual", "quarter"]).default("annual").describe("The period type (annual or quarter)");
@@ -404,6 +410,40 @@ var financialDefinitions = [
404
410
  limit: z.number().default(10).describe("The number of periods to retrieve")
405
411
  }),
406
412
  execute: async ({ symbol: symbol2, limit: limit2 }) => toToolResponse(await getFMPClient().financial.getEarningsHistorical({ symbol: symbol2, limit: limit2 }))
413
+ }),
414
+ defineTool({
415
+ name: "getFinancialScores",
416
+ description: "Get financial health scores for a company (Altman Z-Score bankruptcy risk + Piotroski fundamental-strength score)",
417
+ inputSchema: z.object({ symbol: symbol("financial scores") }),
418
+ execute: async ({ symbol: symbol2 }) => toToolResponse(await getFMPClient().financial.getFinancialScores({ symbol: symbol2 }))
419
+ }),
420
+ defineTool({
421
+ name: "getKeyMetricsTTM",
422
+ description: "Get current trailing-twelve-month (TTM) key metrics for a company (one snapshot row)",
423
+ inputSchema: z.object({ symbol: symbol("TTM key metrics") }),
424
+ execute: async ({ symbol: symbol2 }) => toToolResponse(await getFMPClient().financial.getKeyMetricsTTM({ symbol: symbol2 }))
425
+ }),
426
+ defineTool({
427
+ name: "getFinancialRatiosTTM",
428
+ description: "Get current trailing-twelve-month (TTM) financial ratios for a company (margins, returns, liquidity)",
429
+ inputSchema: z.object({ symbol: symbol("TTM financial ratios") }),
430
+ execute: async ({ symbol: symbol2 }) => toToolResponse(await getFMPClient().financial.getFinancialRatiosTTM({ symbol: symbol2 }))
431
+ }),
432
+ defineTool({
433
+ name: "getRevenueProductSegmentation",
434
+ description: "Get revenue broken down by product line for a company",
435
+ inputSchema: z.object({ symbol: symbol("product revenue segmentation"), period }),
436
+ execute: async ({ symbol: symbol2, period: period2 }) => toToolResponse(
437
+ await getFMPClient().financial.getRevenueProductSegmentation({ symbol: symbol2, period: period2 })
438
+ )
439
+ }),
440
+ defineTool({
441
+ name: "getRevenueGeographicSegmentation",
442
+ description: "Get revenue broken down by geographic region for a company",
443
+ inputSchema: z.object({ symbol: symbol("geographic revenue segmentation"), period }),
444
+ execute: async ({ symbol: symbol2, period: period2 }) => toToolResponse(
445
+ await getFMPClient().financial.getRevenueGeographicSegmentation({ symbol: symbol2, period: period2 })
446
+ )
407
447
  })
408
448
  ];
409
449
  var dateRangeSchema = z.object({
@@ -679,6 +719,14 @@ var analystDefinitions = [
679
719
  }
680
720
  return toToolResponse(res);
681
721
  }
722
+ }),
723
+ defineTool({
724
+ name: "getGradesConsensus",
725
+ description: "Get the analyst rating consensus for a company (counts of strongBuy/buy/hold/sell/strongSell + overall consensus)",
726
+ inputSchema: z.object({
727
+ symbol: z.string().min(1).describe("The stock symbol (e.g., AAPL)")
728
+ }),
729
+ execute: async ({ symbol: symbol2 }) => toToolResponse(await getFMPClient().analyst.getGradesConsensus({ symbol: symbol2 }))
682
730
  })
683
731
  ];
684
732
  var symbolSchema2 = z.object({
@@ -831,6 +879,7 @@ var getIntraday = byName.getIntraday;
831
879
  var getCompanyProfile = byName.getCompanyProfile;
832
880
  var getCompanySharesFloat = byName.getCompanySharesFloat;
833
881
  var getCompanyExecutiveCompensation = byName.getCompanyExecutiveCompensation;
882
+ var getStockPeers = byName.getStockPeers;
834
883
  var getEarningsCalendar = byName.getEarningsCalendar;
835
884
  var getEconomicCalendar = byName.getEconomicCalendar;
836
885
  var getTreasuryRates = byName.getTreasuryRates;
@@ -848,6 +897,11 @@ var getIncomeGrowth = byName.getIncomeGrowth;
848
897
  var getBalanceSheetGrowth = byName.getBalanceSheetGrowth;
849
898
  var getFinancialGrowth = byName.getFinancialGrowth;
850
899
  var getEarningsHistorical = byName.getEarningsHistorical;
900
+ var getFinancialScores = byName.getFinancialScores;
901
+ var getKeyMetricsTTM = byName.getKeyMetricsTTM;
902
+ var getFinancialRatiosTTM = byName.getFinancialRatiosTTM;
903
+ var getRevenueProductSegmentation = byName.getRevenueProductSegmentation;
904
+ var getRevenueGeographicSegmentation = byName.getRevenueGeographicSegmentation;
851
905
  var getInsiderTrading = byName.getInsiderTrading;
852
906
  var getInstitutionalHolders = byName.getInstitutionalHolders;
853
907
  var getMarketPerformance = byName.getMarketPerformance;
@@ -868,6 +922,7 @@ var searchSymbol = byName.searchSymbol;
868
922
  var getAnalystEstimates = byName.getAnalystEstimates;
869
923
  var getPriceTargetConsensus = byName.getPriceTargetConsensus;
870
924
  var getStockGrades = byName.getStockGrades;
925
+ var getGradesConsensus = byName.getGradesConsensus;
871
926
  var getDiscountedCashFlow = byName.getDiscountedCashFlow;
872
927
  var getCompanyRating = byName.getCompanyRating;
873
928
  var getTechnicalIndicator = byName.getTechnicalIndicator;
@@ -893,6 +948,6 @@ var senateHouseTools = pick(senateHouseDefinitions);
893
948
  var stockTools = pick(stockDefinitions);
894
949
  var fmpTools = allDefinitions.map((def) => byName[def.name]);
895
950
 
896
- export { analystTools, calendarTools, companyTools, configureFMPClient, economicTools, etfTools, financialTools, fmpTools, getAnalystEstimates, getBalanceSheet, getBalanceSheetGrowth, getCashFlowStatement, getCashflowGrowth, getCompanyExecutiveCompensation, getCompanyProfile, getCompanyRating, getCompanySharesFloat, getDiscountedCashFlow, getDividendHistory, getETFHoldings, getETFProfile, getEarningsCalendar, getEarningsHistorical, getEconomicCalendar, getEconomicIndicators, getEnterpriseValue, getFinancialGrowth, getFinancialRatios, getGainers, getHistoricalPrice, getHouseTrading, getHouseTradingByName, getHouseTradingRSSFeed, getIncomeGrowth, getIncomeStatement, getInsiderTrading, getInstitutionalHolders, getIntraday, getKeyMetrics, getLosers, getMarketCap, getMarketPerformance, getMostActive, getPriceTargetConsensus, getSectorPerformance, getSenateTrading, getSenateTradingByName, getSenateTradingRSSFeed, getStockGrades, getStockNews, getStockNewsBySymbol, getStockQuote, getStockSplits, getTechnicalIndicator, getTreasuryRates, insiderTools, institutionalTools, marketTools, newsTools, quoteTools, resetFMPClient, screenStocks, screenerTools, searchSymbol, searchTools, senateHouseTools, stockTools, technicalTools, valuationTools };
951
+ export { analystTools, calendarTools, companyTools, configureFMPClient, economicTools, etfTools, financialTools, fmpTools, getAnalystEstimates, getBalanceSheet, getBalanceSheetGrowth, getCashFlowStatement, getCashflowGrowth, getCompanyExecutiveCompensation, getCompanyProfile, getCompanyRating, getCompanySharesFloat, getDiscountedCashFlow, getDividendHistory, getETFHoldings, getETFProfile, getEarningsCalendar, getEarningsHistorical, getEconomicCalendar, getEconomicIndicators, getEnterpriseValue, getFinancialGrowth, getFinancialRatios, getFinancialRatiosTTM, getFinancialScores, getGainers, getGradesConsensus, getHistoricalPrice, getHouseTrading, getHouseTradingByName, getHouseTradingRSSFeed, getIncomeGrowth, getIncomeStatement, getInsiderTrading, getInstitutionalHolders, getIntraday, getKeyMetrics, getKeyMetricsTTM, getLosers, getMarketCap, getMarketPerformance, getMostActive, getPriceTargetConsensus, getRevenueGeographicSegmentation, getRevenueProductSegmentation, getSectorPerformance, getSenateTrading, getSenateTradingByName, getSenateTradingRSSFeed, getStockGrades, getStockNews, getStockNewsBySymbol, getStockPeers, getStockQuote, getStockSplits, getTechnicalIndicator, getTreasuryRates, insiderTools, institutionalTools, marketTools, newsTools, quoteTools, resetFMPClient, screenStocks, screenerTools, searchSymbol, searchTools, senateHouseTools, stockTools, technicalTools, valuationTools };
897
952
  //# sourceMappingURL=index.mjs.map
898
953
  //# sourceMappingURL=index.mjs.map